Move new Class Driver powered demos to a new ClassDriver subdirectory, re-add old...
authorDean Camera <dean@fourwalledcubicle.com>
Fri, 5 Jun 2009 07:16:33 +0000 (07:16 +0000)
committerDean Camera <dean@fourwalledcubicle.com>
Fri, 5 Jun 2009 07:16:33 +0000 (07:16 +0000)
408 files changed:
Demos/Device/AudioInput/AudioInput.aps [deleted file]
Demos/Device/AudioInput/AudioInput.c [deleted file]
Demos/Device/AudioInput/AudioInput.h [deleted file]
Demos/Device/AudioInput/AudioInput.txt [deleted file]
Demos/Device/AudioInput/Descriptors.c [deleted file]
Demos/Device/AudioInput/Descriptors.h [deleted file]
Demos/Device/AudioInput/Doxygen.conf [deleted file]
Demos/Device/AudioInput/makefile [deleted file]
Demos/Device/AudioOutput/AudioOutput.aps [deleted file]
Demos/Device/AudioOutput/AudioOutput.c [deleted file]
Demos/Device/AudioOutput/AudioOutput.h [deleted file]
Demos/Device/AudioOutput/AudioOutput.txt [deleted file]
Demos/Device/AudioOutput/Descriptors.c [deleted file]
Demos/Device/AudioOutput/Descriptors.h [deleted file]
Demos/Device/AudioOutput/Doxygen.conf [deleted file]
Demos/Device/AudioOutput/makefile [deleted file]
Demos/Device/CDC/CDC.aps [deleted file]
Demos/Device/CDC/CDC.c [deleted file]
Demos/Device/CDC/CDC.h [deleted file]
Demos/Device/CDC/CDC.txt [deleted file]
Demos/Device/CDC/Descriptors.c [deleted file]
Demos/Device/CDC/Descriptors.h [deleted file]
Demos/Device/CDC/Doxygen.conf [deleted file]
Demos/Device/CDC/LUFA CDC.inf [deleted file]
Demos/Device/CDC/makefile [deleted file]
Demos/Device/ClassDriver/AudioInput/AudioInput.aps [new file with mode: 0644]
Demos/Device/ClassDriver/AudioInput/AudioInput.c [new file with mode: 0644]
Demos/Device/ClassDriver/AudioInput/AudioInput.h [new file with mode: 0644]
Demos/Device/ClassDriver/AudioInput/AudioInput.txt [new file with mode: 0644]
Demos/Device/ClassDriver/AudioInput/Descriptors.c [new file with mode: 0644]
Demos/Device/ClassDriver/AudioInput/Descriptors.h [new file with mode: 0644]
Demos/Device/ClassDriver/AudioInput/Doxygen.conf [new file with mode: 0644]
Demos/Device/ClassDriver/AudioInput/makefile [new file with mode: 0644]
Demos/Device/ClassDriver/AudioOutput/AudioOutput.aps [new file with mode: 0644]
Demos/Device/ClassDriver/AudioOutput/AudioOutput.c [new file with mode: 0644]
Demos/Device/ClassDriver/AudioOutput/AudioOutput.h [new file with mode: 0644]
Demos/Device/ClassDriver/AudioOutput/AudioOutput.txt [new file with mode: 0644]
Demos/Device/ClassDriver/AudioOutput/Descriptors.c [new file with mode: 0644]
Demos/Device/ClassDriver/AudioOutput/Descriptors.h [new file with mode: 0644]
Demos/Device/ClassDriver/AudioOutput/Doxygen.conf [new file with mode: 0644]
Demos/Device/ClassDriver/AudioOutput/makefile [new file with mode: 0644]
Demos/Device/ClassDriver/CDC/CDC.aps [new file with mode: 0644]
Demos/Device/ClassDriver/CDC/CDC.c [new file with mode: 0644]
Demos/Device/ClassDriver/CDC/CDC.h [new file with mode: 0644]
Demos/Device/ClassDriver/CDC/CDC.txt [new file with mode: 0644]
Demos/Device/ClassDriver/CDC/Descriptors.c [new file with mode: 0644]
Demos/Device/ClassDriver/CDC/Descriptors.h [new file with mode: 0644]
Demos/Device/ClassDriver/CDC/Doxygen.conf [new file with mode: 0644]
Demos/Device/ClassDriver/CDC/LUFA CDC.inf [new file with mode: 0644]
Demos/Device/ClassDriver/CDC/makefile [new file with mode: 0644]
Demos/Device/ClassDriver/DualCDC/Descriptors.c [new file with mode: 0644]
Demos/Device/ClassDriver/DualCDC/Descriptors.h [new file with mode: 0644]
Demos/Device/ClassDriver/DualCDC/Doxygen.conf [new file with mode: 0644]
Demos/Device/ClassDriver/DualCDC/DualCDC.aps [new file with mode: 0644]
Demos/Device/ClassDriver/DualCDC/DualCDC.c [new file with mode: 0644]
Demos/Device/ClassDriver/DualCDC/DualCDC.h [new file with mode: 0644]
Demos/Device/ClassDriver/DualCDC/DualCDC.txt [new file with mode: 0644]
Demos/Device/ClassDriver/DualCDC/LUFA DualCDC.inf [new file with mode: 0644]
Demos/Device/ClassDriver/DualCDC/makefile [new file with mode: 0644]
Demos/Device/ClassDriver/GenericHID/Descriptors.c [new file with mode: 0644]
Demos/Device/ClassDriver/GenericHID/Descriptors.h [new file with mode: 0644]
Demos/Device/ClassDriver/GenericHID/Doxygen.conf [new file with mode: 0644]
Demos/Device/ClassDriver/GenericHID/GenericHID.aps [new file with mode: 0644]
Demos/Device/ClassDriver/GenericHID/GenericHID.c [new file with mode: 0644]
Demos/Device/ClassDriver/GenericHID/GenericHID.h [new file with mode: 0644]
Demos/Device/ClassDriver/GenericHID/GenericHID.txt [new file with mode: 0644]
Demos/Device/ClassDriver/GenericHID/makefile [new file with mode: 0644]
Demos/Device/ClassDriver/Joystick/Descriptors.c [new file with mode: 0644]
Demos/Device/ClassDriver/Joystick/Descriptors.h [new file with mode: 0644]
Demos/Device/ClassDriver/Joystick/Doxygen.conf [new file with mode: 0644]
Demos/Device/ClassDriver/Joystick/Joystick.aps [new file with mode: 0644]
Demos/Device/ClassDriver/Joystick/Joystick.c [new file with mode: 0644]
Demos/Device/ClassDriver/Joystick/Joystick.h [new file with mode: 0644]
Demos/Device/ClassDriver/Joystick/Joystick.txt [new file with mode: 0644]
Demos/Device/ClassDriver/Joystick/makefile [new file with mode: 0644]
Demos/Device/ClassDriver/Keyboard/Descriptors.c [new file with mode: 0644]
Demos/Device/ClassDriver/Keyboard/Descriptors.h [new file with mode: 0644]
Demos/Device/ClassDriver/Keyboard/Doxygen.conf [new file with mode: 0644]
Demos/Device/ClassDriver/Keyboard/Keyboard.aps [new file with mode: 0644]
Demos/Device/ClassDriver/Keyboard/Keyboard.c [new file with mode: 0644]
Demos/Device/ClassDriver/Keyboard/Keyboard.h [new file with mode: 0644]
Demos/Device/ClassDriver/Keyboard/Keyboard.txt [new file with mode: 0644]
Demos/Device/ClassDriver/Keyboard/makefile [new file with mode: 0644]
Demos/Device/ClassDriver/KeyboardMouse/Descriptors.c [new file with mode: 0644]
Demos/Device/ClassDriver/KeyboardMouse/Descriptors.h [new file with mode: 0644]
Demos/Device/ClassDriver/KeyboardMouse/Doxygen.conf [new file with mode: 0644]
Demos/Device/ClassDriver/KeyboardMouse/KeyboardMouse.aps [new file with mode: 0644]
Demos/Device/ClassDriver/KeyboardMouse/KeyboardMouse.c [new file with mode: 0644]
Demos/Device/ClassDriver/KeyboardMouse/KeyboardMouse.h [new file with mode: 0644]
Demos/Device/ClassDriver/KeyboardMouse/KeyboardMouse.txt [new file with mode: 0644]
Demos/Device/ClassDriver/KeyboardMouse/makefile [new file with mode: 0644]
Demos/Device/ClassDriver/MIDI/Descriptors.c [new file with mode: 0644]
Demos/Device/ClassDriver/MIDI/Descriptors.h [new file with mode: 0644]
Demos/Device/ClassDriver/MIDI/Doxygen.conf [new file with mode: 0644]
Demos/Device/ClassDriver/MIDI/MIDI.aps [new file with mode: 0644]
Demos/Device/ClassDriver/MIDI/MIDI.c [new file with mode: 0644]
Demos/Device/ClassDriver/MIDI/MIDI.h [new file with mode: 0644]
Demos/Device/ClassDriver/MIDI/MIDI.txt [new file with mode: 0644]
Demos/Device/ClassDriver/MIDI/makefile [new file with mode: 0644]
Demos/Device/ClassDriver/MassStorage/Descriptors.c [new file with mode: 0644]
Demos/Device/ClassDriver/MassStorage/Descriptors.h [new file with mode: 0644]
Demos/Device/ClassDriver/MassStorage/Doxygen.conf [new file with mode: 0644]
Demos/Device/ClassDriver/MassStorage/Lib/DataflashManager.c [new file with mode: 0644]
Demos/Device/ClassDriver/MassStorage/Lib/DataflashManager.h [new file with mode: 0644]
Demos/Device/ClassDriver/MassStorage/Lib/SCSI.c [new file with mode: 0644]
Demos/Device/ClassDriver/MassStorage/Lib/SCSI.h [new file with mode: 0644]
Demos/Device/ClassDriver/MassStorage/Lib/SCSI_Codes.h [new file with mode: 0644]
Demos/Device/ClassDriver/MassStorage/MassStorage.aps [new file with mode: 0644]
Demos/Device/ClassDriver/MassStorage/MassStorage.c [new file with mode: 0644]
Demos/Device/ClassDriver/MassStorage/MassStorage.h [new file with mode: 0644]
Demos/Device/ClassDriver/MassStorage/MassStorage.txt [new file with mode: 0644]
Demos/Device/ClassDriver/MassStorage/makefile [new file with mode: 0644]
Demos/Device/ClassDriver/Mouse/Descriptors.c [new file with mode: 0644]
Demos/Device/ClassDriver/Mouse/Descriptors.h [new file with mode: 0644]
Demos/Device/ClassDriver/Mouse/Doxygen.conf [new file with mode: 0644]
Demos/Device/ClassDriver/Mouse/Mouse.aps [new file with mode: 0644]
Demos/Device/ClassDriver/Mouse/Mouse.c [new file with mode: 0644]
Demos/Device/ClassDriver/Mouse/Mouse.h [new file with mode: 0644]
Demos/Device/ClassDriver/Mouse/Mouse.txt [new file with mode: 0644]
Demos/Device/ClassDriver/Mouse/makefile [new file with mode: 0644]
Demos/Device/ClassDriver/RNDISEthernet/Descriptors.c [new file with mode: 0644]
Demos/Device/ClassDriver/RNDISEthernet/Descriptors.h [new file with mode: 0644]
Demos/Device/ClassDriver/RNDISEthernet/Doxygen.conf [new file with mode: 0644]
Demos/Device/ClassDriver/RNDISEthernet/LUFA RNDIS.inf [new file with mode: 0644]
Demos/Device/ClassDriver/RNDISEthernet/Lib/ARP.c [new file with mode: 0644]
Demos/Device/ClassDriver/RNDISEthernet/Lib/ARP.h [new file with mode: 0644]
Demos/Device/ClassDriver/RNDISEthernet/Lib/DHCP.c [new file with mode: 0644]
Demos/Device/ClassDriver/RNDISEthernet/Lib/DHCP.h [new file with mode: 0644]
Demos/Device/ClassDriver/RNDISEthernet/Lib/Ethernet.c [new file with mode: 0644]
Demos/Device/ClassDriver/RNDISEthernet/Lib/Ethernet.h [new file with mode: 0644]
Demos/Device/ClassDriver/RNDISEthernet/Lib/EthernetProtocols.h [new file with mode: 0644]
Demos/Device/ClassDriver/RNDISEthernet/Lib/ICMP.c [new file with mode: 0644]
Demos/Device/ClassDriver/RNDISEthernet/Lib/ICMP.h [new file with mode: 0644]
Demos/Device/ClassDriver/RNDISEthernet/Lib/IP.c [new file with mode: 0644]
Demos/Device/ClassDriver/RNDISEthernet/Lib/IP.h [new file with mode: 0644]
Demos/Device/ClassDriver/RNDISEthernet/Lib/ProtocolDecoders.c [new file with mode: 0644]
Demos/Device/ClassDriver/RNDISEthernet/Lib/ProtocolDecoders.h [new file with mode: 0644]
Demos/Device/ClassDriver/RNDISEthernet/Lib/TCP.c [new file with mode: 0644]
Demos/Device/ClassDriver/RNDISEthernet/Lib/TCP.h [new file with mode: 0644]
Demos/Device/ClassDriver/RNDISEthernet/Lib/UDP.c [new file with mode: 0644]
Demos/Device/ClassDriver/RNDISEthernet/Lib/UDP.h [new file with mode: 0644]
Demos/Device/ClassDriver/RNDISEthernet/Lib/Webserver.c [new file with mode: 0644]
Demos/Device/ClassDriver/RNDISEthernet/Lib/Webserver.h [new file with mode: 0644]
Demos/Device/ClassDriver/RNDISEthernet/RNDISEthernet.aps [new file with mode: 0644]
Demos/Device/ClassDriver/RNDISEthernet/RNDISEthernet.c [new file with mode: 0644]
Demos/Device/ClassDriver/RNDISEthernet/RNDISEthernet.h [new file with mode: 0644]
Demos/Device/ClassDriver/RNDISEthernet/RNDISEthernet.txt [new file with mode: 0644]
Demos/Device/ClassDriver/RNDISEthernet/makefile [new file with mode: 0644]
Demos/Device/ClassDriver/USBtoSerial/Descriptors.c [new file with mode: 0644]
Demos/Device/ClassDriver/USBtoSerial/Descriptors.h [new file with mode: 0644]
Demos/Device/ClassDriver/USBtoSerial/Doxygen.conf [new file with mode: 0644]
Demos/Device/ClassDriver/USBtoSerial/LUFA USBtoSerial.inf [new file with mode: 0644]
Demos/Device/ClassDriver/USBtoSerial/Lib/RingBuff.c [new file with mode: 0644]
Demos/Device/ClassDriver/USBtoSerial/Lib/RingBuff.h [new file with mode: 0644]
Demos/Device/ClassDriver/USBtoSerial/USBtoSerial.aps [new file with mode: 0644]
Demos/Device/ClassDriver/USBtoSerial/USBtoSerial.c [new file with mode: 0644]
Demos/Device/ClassDriver/USBtoSerial/USBtoSerial.h [new file with mode: 0644]
Demos/Device/ClassDriver/USBtoSerial/USBtoSerial.txt [new file with mode: 0644]
Demos/Device/ClassDriver/USBtoSerial/makefile [new file with mode: 0644]
Demos/Device/ClassDriver/makefile [new file with mode: 0644]
Demos/Device/DualCDC/Descriptors.c [deleted file]
Demos/Device/DualCDC/Descriptors.h [deleted file]
Demos/Device/DualCDC/Doxygen.conf [deleted file]
Demos/Device/DualCDC/DualCDC.aps [deleted file]
Demos/Device/DualCDC/DualCDC.c [deleted file]
Demos/Device/DualCDC/DualCDC.h [deleted file]
Demos/Device/DualCDC/DualCDC.txt [deleted file]
Demos/Device/DualCDC/LUFA DualCDC.inf [deleted file]
Demos/Device/DualCDC/makefile [deleted file]
Demos/Device/GenericHID/Descriptors.c [deleted file]
Demos/Device/GenericHID/Descriptors.h [deleted file]
Demos/Device/GenericHID/Doxygen.conf [deleted file]
Demos/Device/GenericHID/GenericHID.aps [deleted file]
Demos/Device/GenericHID/GenericHID.c [deleted file]
Demos/Device/GenericHID/GenericHID.h [deleted file]
Demos/Device/GenericHID/GenericHID.txt [deleted file]
Demos/Device/GenericHID/makefile [deleted file]
Demos/Device/Joystick/Descriptors.c [deleted file]
Demos/Device/Joystick/Descriptors.h [deleted file]
Demos/Device/Joystick/Doxygen.conf [deleted file]
Demos/Device/Joystick/Joystick.aps [deleted file]
Demos/Device/Joystick/Joystick.c [deleted file]
Demos/Device/Joystick/Joystick.h [deleted file]
Demos/Device/Joystick/Joystick.txt [deleted file]
Demos/Device/Joystick/makefile [deleted file]
Demos/Device/Keyboard/Descriptors.c [deleted file]
Demos/Device/Keyboard/Descriptors.h [deleted file]
Demos/Device/Keyboard/Doxygen.conf [deleted file]
Demos/Device/Keyboard/Keyboard.aps [deleted file]
Demos/Device/Keyboard/Keyboard.c [deleted file]
Demos/Device/Keyboard/Keyboard.h [deleted file]
Demos/Device/Keyboard/Keyboard.txt [deleted file]
Demos/Device/Keyboard/makefile [deleted file]
Demos/Device/KeyboardMouse/Descriptors.c [deleted file]
Demos/Device/KeyboardMouse/Descriptors.h [deleted file]
Demos/Device/KeyboardMouse/Doxygen.conf [deleted file]
Demos/Device/KeyboardMouse/KeyboardMouse.aps [deleted file]
Demos/Device/KeyboardMouse/KeyboardMouse.c [deleted file]
Demos/Device/KeyboardMouse/KeyboardMouse.h [deleted file]
Demos/Device/KeyboardMouse/KeyboardMouse.txt [deleted file]
Demos/Device/KeyboardMouse/makefile [deleted file]
Demos/Device/LowLevel/AudioInput/AudioInput.aps [new file with mode: 0644]
Demos/Device/LowLevel/AudioInput/AudioInput.c [new file with mode: 0644]
Demos/Device/LowLevel/AudioInput/AudioInput.h [new file with mode: 0644]
Demos/Device/LowLevel/AudioInput/AudioInput.txt [new file with mode: 0644]
Demos/Device/LowLevel/AudioInput/Descriptors.c [new file with mode: 0644]
Demos/Device/LowLevel/AudioInput/Descriptors.h [new file with mode: 0644]
Demos/Device/LowLevel/AudioInput/Doxygen.conf [new file with mode: 0644]
Demos/Device/LowLevel/AudioInput/makefile [new file with mode: 0644]
Demos/Device/LowLevel/AudioOutput/AudioOutput.aps [new file with mode: 0644]
Demos/Device/LowLevel/AudioOutput/AudioOutput.c [new file with mode: 0644]
Demos/Device/LowLevel/AudioOutput/AudioOutput.h [new file with mode: 0644]
Demos/Device/LowLevel/AudioOutput/AudioOutput.txt [new file with mode: 0644]
Demos/Device/LowLevel/AudioOutput/Descriptors.c [new file with mode: 0644]
Demos/Device/LowLevel/AudioOutput/Descriptors.h [new file with mode: 0644]
Demos/Device/LowLevel/AudioOutput/Doxygen.conf [new file with mode: 0644]
Demos/Device/LowLevel/AudioOutput/makefile [new file with mode: 0644]
Demos/Device/LowLevel/CDC/CDC.aps [new file with mode: 0644]
Demos/Device/LowLevel/CDC/CDC.c [new file with mode: 0644]
Demos/Device/LowLevel/CDC/CDC.h [new file with mode: 0644]
Demos/Device/LowLevel/CDC/CDC.txt [new file with mode: 0644]
Demos/Device/LowLevel/CDC/Descriptors.c [new file with mode: 0644]
Demos/Device/LowLevel/CDC/Descriptors.h [new file with mode: 0644]
Demos/Device/LowLevel/CDC/Doxygen.conf [new file with mode: 0644]
Demos/Device/LowLevel/CDC/LUFA CDC.inf [new file with mode: 0644]
Demos/Device/LowLevel/CDC/makefile [new file with mode: 0644]
Demos/Device/LowLevel/DualCDC/Descriptors.c [new file with mode: 0644]
Demos/Device/LowLevel/DualCDC/Descriptors.h [new file with mode: 0644]
Demos/Device/LowLevel/DualCDC/Doxygen.conf [new file with mode: 0644]
Demos/Device/LowLevel/DualCDC/DualCDC.aps [new file with mode: 0644]
Demos/Device/LowLevel/DualCDC/DualCDC.c [new file with mode: 0644]
Demos/Device/LowLevel/DualCDC/DualCDC.h [new file with mode: 0644]
Demos/Device/LowLevel/DualCDC/DualCDC.txt [new file with mode: 0644]
Demos/Device/LowLevel/DualCDC/LUFA DualCDC.inf [new file with mode: 0644]
Demos/Device/LowLevel/DualCDC/makefile [new file with mode: 0644]
Demos/Device/LowLevel/GenericHID/Descriptors.c [new file with mode: 0644]
Demos/Device/LowLevel/GenericHID/Descriptors.h [new file with mode: 0644]
Demos/Device/LowLevel/GenericHID/Doxygen.conf [new file with mode: 0644]
Demos/Device/LowLevel/GenericHID/GenericHID.aps [new file with mode: 0644]
Demos/Device/LowLevel/GenericHID/GenericHID.c [new file with mode: 0644]
Demos/Device/LowLevel/GenericHID/GenericHID.h [new file with mode: 0644]
Demos/Device/LowLevel/GenericHID/GenericHID.txt [new file with mode: 0644]
Demos/Device/LowLevel/GenericHID/makefile [new file with mode: 0644]
Demos/Device/LowLevel/Joystick/Descriptors.c [new file with mode: 0644]
Demos/Device/LowLevel/Joystick/Descriptors.h [new file with mode: 0644]
Demos/Device/LowLevel/Joystick/Doxygen.conf [new file with mode: 0644]
Demos/Device/LowLevel/Joystick/Joystick.aps [new file with mode: 0644]
Demos/Device/LowLevel/Joystick/Joystick.c [new file with mode: 0644]
Demos/Device/LowLevel/Joystick/Joystick.h [new file with mode: 0644]
Demos/Device/LowLevel/Joystick/Joystick.txt [new file with mode: 0644]
Demos/Device/LowLevel/Joystick/makefile [new file with mode: 0644]
Demos/Device/LowLevel/Keyboard/Descriptors.c [new file with mode: 0644]
Demos/Device/LowLevel/Keyboard/Descriptors.h [new file with mode: 0644]
Demos/Device/LowLevel/Keyboard/Doxygen.conf [new file with mode: 0644]
Demos/Device/LowLevel/Keyboard/Keyboard.aps [new file with mode: 0644]
Demos/Device/LowLevel/Keyboard/Keyboard.c [new file with mode: 0644]
Demos/Device/LowLevel/Keyboard/Keyboard.h [new file with mode: 0644]
Demos/Device/LowLevel/Keyboard/Keyboard.txt [new file with mode: 0644]
Demos/Device/LowLevel/Keyboard/makefile [new file with mode: 0644]
Demos/Device/LowLevel/KeyboardMouse/Descriptors.c [new file with mode: 0644]
Demos/Device/LowLevel/KeyboardMouse/Descriptors.h [new file with mode: 0644]
Demos/Device/LowLevel/KeyboardMouse/Doxygen.conf [new file with mode: 0644]
Demos/Device/LowLevel/KeyboardMouse/KeyboardMouse.aps [new file with mode: 0644]
Demos/Device/LowLevel/KeyboardMouse/KeyboardMouse.c [new file with mode: 0644]
Demos/Device/LowLevel/KeyboardMouse/KeyboardMouse.h [new file with mode: 0644]
Demos/Device/LowLevel/KeyboardMouse/KeyboardMouse.txt [new file with mode: 0644]
Demos/Device/LowLevel/KeyboardMouse/makefile [new file with mode: 0644]
Demos/Device/LowLevel/MIDI/Descriptors.c [new file with mode: 0644]
Demos/Device/LowLevel/MIDI/Descriptors.h [new file with mode: 0644]
Demos/Device/LowLevel/MIDI/Doxygen.conf [new file with mode: 0644]
Demos/Device/LowLevel/MIDI/MIDI.aps [new file with mode: 0644]
Demos/Device/LowLevel/MIDI/MIDI.c [new file with mode: 0644]
Demos/Device/LowLevel/MIDI/MIDI.h [new file with mode: 0644]
Demos/Device/LowLevel/MIDI/MIDI.txt [new file with mode: 0644]
Demos/Device/LowLevel/MIDI/makefile [new file with mode: 0644]
Demos/Device/LowLevel/MassStorage/Descriptors.c [new file with mode: 0644]
Demos/Device/LowLevel/MassStorage/Descriptors.h [new file with mode: 0644]
Demos/Device/LowLevel/MassStorage/Doxygen.conf [new file with mode: 0644]
Demos/Device/LowLevel/MassStorage/Lib/DataflashManager.c [new file with mode: 0644]
Demos/Device/LowLevel/MassStorage/Lib/DataflashManager.h [new file with mode: 0644]
Demos/Device/LowLevel/MassStorage/Lib/SCSI.c [new file with mode: 0644]
Demos/Device/LowLevel/MassStorage/Lib/SCSI.h [new file with mode: 0644]
Demos/Device/LowLevel/MassStorage/Lib/SCSI_Codes.h [new file with mode: 0644]
Demos/Device/LowLevel/MassStorage/MassStorage.aps [new file with mode: 0644]
Demos/Device/LowLevel/MassStorage/MassStorage.c [new file with mode: 0644]
Demos/Device/LowLevel/MassStorage/MassStorage.h [new file with mode: 0644]
Demos/Device/LowLevel/MassStorage/MassStorage.txt [new file with mode: 0644]
Demos/Device/LowLevel/MassStorage/makefile [new file with mode: 0644]
Demos/Device/LowLevel/Mouse/Descriptors.c [new file with mode: 0644]
Demos/Device/LowLevel/Mouse/Descriptors.h [new file with mode: 0644]
Demos/Device/LowLevel/Mouse/Doxygen.conf [new file with mode: 0644]
Demos/Device/LowLevel/Mouse/Mouse.aps [new file with mode: 0644]
Demos/Device/LowLevel/Mouse/Mouse.c [new file with mode: 0644]
Demos/Device/LowLevel/Mouse/Mouse.h [new file with mode: 0644]
Demos/Device/LowLevel/Mouse/Mouse.txt [new file with mode: 0644]
Demos/Device/LowLevel/Mouse/makefile [new file with mode: 0644]
Demos/Device/LowLevel/RNDISEthernet/Descriptors.c [new file with mode: 0644]
Demos/Device/LowLevel/RNDISEthernet/Descriptors.h [new file with mode: 0644]
Demos/Device/LowLevel/RNDISEthernet/Doxygen.conf [new file with mode: 0644]
Demos/Device/LowLevel/RNDISEthernet/LUFA RNDIS.inf [new file with mode: 0644]
Demos/Device/LowLevel/RNDISEthernet/Lib/ARP.c [new file with mode: 0644]
Demos/Device/LowLevel/RNDISEthernet/Lib/ARP.h [new file with mode: 0644]
Demos/Device/LowLevel/RNDISEthernet/Lib/DHCP.c [new file with mode: 0644]
Demos/Device/LowLevel/RNDISEthernet/Lib/DHCP.h [new file with mode: 0644]
Demos/Device/LowLevel/RNDISEthernet/Lib/Ethernet.c [new file with mode: 0644]
Demos/Device/LowLevel/RNDISEthernet/Lib/Ethernet.h [new file with mode: 0644]
Demos/Device/LowLevel/RNDISEthernet/Lib/EthernetProtocols.h [new file with mode: 0644]
Demos/Device/LowLevel/RNDISEthernet/Lib/ICMP.c [new file with mode: 0644]
Demos/Device/LowLevel/RNDISEthernet/Lib/ICMP.h [new file with mode: 0644]
Demos/Device/LowLevel/RNDISEthernet/Lib/IP.c [new file with mode: 0644]
Demos/Device/LowLevel/RNDISEthernet/Lib/IP.h [new file with mode: 0644]
Demos/Device/LowLevel/RNDISEthernet/Lib/ProtocolDecoders.c [new file with mode: 0644]
Demos/Device/LowLevel/RNDISEthernet/Lib/ProtocolDecoders.h [new file with mode: 0644]
Demos/Device/LowLevel/RNDISEthernet/Lib/RNDIS.c [new file with mode: 0644]
Demos/Device/LowLevel/RNDISEthernet/Lib/RNDIS.h [new file with mode: 0644]
Demos/Device/LowLevel/RNDISEthernet/Lib/RNDISConstants.h [new file with mode: 0644]
Demos/Device/LowLevel/RNDISEthernet/Lib/TCP.c [new file with mode: 0644]
Demos/Device/LowLevel/RNDISEthernet/Lib/TCP.h [new file with mode: 0644]
Demos/Device/LowLevel/RNDISEthernet/Lib/UDP.c [new file with mode: 0644]
Demos/Device/LowLevel/RNDISEthernet/Lib/UDP.h [new file with mode: 0644]
Demos/Device/LowLevel/RNDISEthernet/Lib/Webserver.c [new file with mode: 0644]
Demos/Device/LowLevel/RNDISEthernet/Lib/Webserver.h [new file with mode: 0644]
Demos/Device/LowLevel/RNDISEthernet/RNDISEthernet.aps [new file with mode: 0644]
Demos/Device/LowLevel/RNDISEthernet/RNDISEthernet.c [new file with mode: 0644]
Demos/Device/LowLevel/RNDISEthernet/RNDISEthernet.h [new file with mode: 0644]
Demos/Device/LowLevel/RNDISEthernet/RNDISEthernet.txt [new file with mode: 0644]
Demos/Device/LowLevel/RNDISEthernet/makefile [new file with mode: 0644]
Demos/Device/LowLevel/USBtoSerial/Descriptors.c [new file with mode: 0644]
Demos/Device/LowLevel/USBtoSerial/Descriptors.h [new file with mode: 0644]
Demos/Device/LowLevel/USBtoSerial/Doxygen.conf [new file with mode: 0644]
Demos/Device/LowLevel/USBtoSerial/LUFA USBtoSerial.inf [new file with mode: 0644]
Demos/Device/LowLevel/USBtoSerial/Lib/RingBuff.c [new file with mode: 0644]
Demos/Device/LowLevel/USBtoSerial/Lib/RingBuff.h [new file with mode: 0644]
Demos/Device/LowLevel/USBtoSerial/USBtoSerial.aps [new file with mode: 0644]
Demos/Device/LowLevel/USBtoSerial/USBtoSerial.c [new file with mode: 0644]
Demos/Device/LowLevel/USBtoSerial/USBtoSerial.h [new file with mode: 0644]
Demos/Device/LowLevel/USBtoSerial/USBtoSerial.txt [new file with mode: 0644]
Demos/Device/LowLevel/USBtoSerial/makefile [new file with mode: 0644]
Demos/Device/LowLevel/makefile [new file with mode: 0644]
Demos/Device/MIDI/Descriptors.c [deleted file]
Demos/Device/MIDI/Descriptors.h [deleted file]
Demos/Device/MIDI/Doxygen.conf [deleted file]
Demos/Device/MIDI/MIDI.aps [deleted file]
Demos/Device/MIDI/MIDI.c [deleted file]
Demos/Device/MIDI/MIDI.h [deleted file]
Demos/Device/MIDI/MIDI.txt [deleted file]
Demos/Device/MIDI/makefile [deleted file]
Demos/Device/MassStorage/Descriptors.c [deleted file]
Demos/Device/MassStorage/Descriptors.h [deleted file]
Demos/Device/MassStorage/Doxygen.conf [deleted file]
Demos/Device/MassStorage/Lib/DataflashManager.c [deleted file]
Demos/Device/MassStorage/Lib/DataflashManager.h [deleted file]
Demos/Device/MassStorage/Lib/SCSI.c [deleted file]
Demos/Device/MassStorage/Lib/SCSI.h [deleted file]
Demos/Device/MassStorage/Lib/SCSI_Codes.h [deleted file]
Demos/Device/MassStorage/MassStorage.aps [deleted file]
Demos/Device/MassStorage/MassStorage.c [deleted file]
Demos/Device/MassStorage/MassStorage.h [deleted file]
Demos/Device/MassStorage/MassStorage.txt [deleted file]
Demos/Device/MassStorage/makefile [deleted file]
Demos/Device/Mouse/Descriptors.c [deleted file]
Demos/Device/Mouse/Descriptors.h [deleted file]
Demos/Device/Mouse/Doxygen.conf [deleted file]
Demos/Device/Mouse/Mouse.aps [deleted file]
Demos/Device/Mouse/Mouse.c [deleted file]
Demos/Device/Mouse/Mouse.h [deleted file]
Demos/Device/Mouse/Mouse.txt [deleted file]
Demos/Device/Mouse/makefile [deleted file]
Demos/Device/RNDISEthernet/Descriptors.c [deleted file]
Demos/Device/RNDISEthernet/Descriptors.h [deleted file]
Demos/Device/RNDISEthernet/Doxygen.conf [deleted file]
Demos/Device/RNDISEthernet/LUFA RNDIS.inf [deleted file]
Demos/Device/RNDISEthernet/Lib/ARP.c [deleted file]
Demos/Device/RNDISEthernet/Lib/ARP.h [deleted file]
Demos/Device/RNDISEthernet/Lib/DHCP.c [deleted file]
Demos/Device/RNDISEthernet/Lib/DHCP.h [deleted file]
Demos/Device/RNDISEthernet/Lib/Ethernet.c [deleted file]
Demos/Device/RNDISEthernet/Lib/Ethernet.h [deleted file]
Demos/Device/RNDISEthernet/Lib/EthernetProtocols.h [deleted file]
Demos/Device/RNDISEthernet/Lib/ICMP.c [deleted file]
Demos/Device/RNDISEthernet/Lib/ICMP.h [deleted file]
Demos/Device/RNDISEthernet/Lib/IP.c [deleted file]
Demos/Device/RNDISEthernet/Lib/IP.h [deleted file]
Demos/Device/RNDISEthernet/Lib/ProtocolDecoders.c [deleted file]
Demos/Device/RNDISEthernet/Lib/ProtocolDecoders.h [deleted file]
Demos/Device/RNDISEthernet/Lib/TCP.c [deleted file]
Demos/Device/RNDISEthernet/Lib/TCP.h [deleted file]
Demos/Device/RNDISEthernet/Lib/UDP.c [deleted file]
Demos/Device/RNDISEthernet/Lib/UDP.h [deleted file]
Demos/Device/RNDISEthernet/Lib/Webserver.c [deleted file]
Demos/Device/RNDISEthernet/Lib/Webserver.h [deleted file]
Demos/Device/RNDISEthernet/RNDISEthernet.aps [deleted file]
Demos/Device/RNDISEthernet/RNDISEthernet.c [deleted file]
Demos/Device/RNDISEthernet/RNDISEthernet.h [deleted file]
Demos/Device/RNDISEthernet/RNDISEthernet.txt [deleted file]
Demos/Device/RNDISEthernet/makefile [deleted file]
Demos/Device/USBtoSerial/Descriptors.c [deleted file]
Demos/Device/USBtoSerial/Descriptors.h [deleted file]
Demos/Device/USBtoSerial/Doxygen.conf [deleted file]
Demos/Device/USBtoSerial/LUFA USBtoSerial.inf [deleted file]
Demos/Device/USBtoSerial/Lib/RingBuff.c [deleted file]
Demos/Device/USBtoSerial/Lib/RingBuff.h [deleted file]
Demos/Device/USBtoSerial/USBtoSerial.aps [deleted file]
Demos/Device/USBtoSerial/USBtoSerial.c [deleted file]
Demos/Device/USBtoSerial/USBtoSerial.h [deleted file]
Demos/Device/USBtoSerial/USBtoSerial.txt [deleted file]
Demos/Device/USBtoSerial/makefile [deleted file]
Demos/Device/makefile [deleted file]

diff --git a/Demos/Device/AudioInput/AudioInput.aps b/Demos/Device/AudioInput/AudioInput.aps
deleted file mode 100644 (file)
index aed850a..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<AVRStudio><MANAGEMENT><ProjectName>AudioInput</ProjectName><Created>30-Sep-2008 14:03:00</Created><LastEdit>30-Sep-2008 14:03:28</LastEdit><ICON>241</ICON><ProjectType>0</ProjectType><Created>30-Sep-2008 14:03:00</Created><Version>4</Version><Build>4, 14, 0, 589</Build><ProjectTypeName>AVR GCC</ProjectTypeName></MANAGEMENT><CODE_CREATION><ObjectFile>AudioInput.elf</ObjectFile><EntryFile></EntryFile><SaveFolder>C:\Users\Dean\Documents\Electronics\Projects\WORK\MyUSBWORK\Demos\AudioInput\</SaveFolder></CODE_CREATION><DEBUG_TARGET><CURRENT_TARGET></CURRENT_TARGET><CURRENT_PART></CURRENT_PART><BREAKPOINTS></BREAKPOINTS><IO_EXPAND><HIDE>false</HIDE></IO_EXPAND><REGISTERNAMES><Register>R00</Register><Register>R01</Register><Register>R02</Register><Register>R03</Register><Register>R04</Register><Register>R05</Register><Register>R06</Register><Register>R07</Register><Register>R08</Register><Register>R09</Register><Register>R10</Register><Register>R11</Register><Register>R12</Register><Register>R13</Register><Register>R14</Register><Register>R15</Register><Register>R16</Register><Register>R17</Register><Register>R18</Register><Register>R19</Register><Register>R20</Register><Register>R21</Register><Register>R22</Register><Register>R23</Register><Register>R24</Register><Register>R25</Register><Register>R26</Register><Register>R27</Register><Register>R28</Register><Register>R29</Register><Register>R30</Register><Register>R31</Register></REGISTERNAMES><COM></COM><COMType>0</COMType><WATCHNUM>0</WATCHNUM><WATCHNAMES><Pane0></Pane0><Pane1></Pane1><Pane2></Pane2><Pane3></Pane3></WATCHNAMES><BreakOnTrcaeFull>0</BreakOnTrcaeFull></DEBUG_TARGET><Debugger><Triggers></Triggers></Debugger><AVRGCCPLUGIN><FILES><SOURCEFILE>AudioInput.c</SOURCEFILE><SOURCEFILE>Descriptors.c</SOURCEFILE><HEADERFILE>AudioInput.h</HEADERFILE><HEADERFILE>Descriptors.h</HEADERFILE><OTHERFILE>makefile</OTHERFILE></FILES><CONFIGS><CONFIG><NAME>default</NAME><USESEXTERNALMAKEFILE>YES</USESEXTERNALMAKEFILE><EXTERNALMAKEFILE>makefile</EXTERNALMAKEFILE><PART>atmega128</PART><HEX>1</HEX><LIST>1</LIST><MAP>1</MAP><OUTPUTFILENAME>AudioInput.elf</OUTPUTFILENAME><OUTPUTDIR>default\</OUTPUTDIR><ISDIRTY>1</ISDIRTY><OPTIONS/><INCDIRS/><LIBDIRS/><LIBS/><LINKOBJECTS/><OPTIONSFORALL>-Wall -gdwarf-2 -std=gnu99 -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums</OPTIONSFORALL><LINKEROPTIONS></LINKEROPTIONS><SEGMENTS/></CONFIG></CONFIGS><LASTCONFIG>default</LASTCONFIG><USES_WINAVR>1</USES_WINAVR><GCC_LOC>C:\WinAVR-20080512\bin\avr-gcc.exe</GCC_LOC><MAKE_LOC>C:\WinAVR-20080512\utils\bin\make.exe</MAKE_LOC></AVRGCCPLUGIN><ProjectFiles><Files><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\MyUSBWORK\Demos\AudioInput\AudioInput.h</Name><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\MyUSBWORK\Demos\AudioInput\Descriptors.h</Name><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\MyUSBWORK\Demos\AudioInput\AudioInput.c</Name><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\MyUSBWORK\Demos\AudioInput\Descriptors.c</Name></Files></ProjectFiles><IOView><usergroups/><sort sorted="0" column="0" ordername="0" orderaddress="0" ordergroup="0"/></IOView><Files></Files><Events><Bookmarks></Bookmarks></Events><Trace><Filters></Filters></Trace></AVRStudio>\r
diff --git a/Demos/Device/AudioInput/AudioInput.c b/Demos/Device/AudioInput/AudioInput.c
deleted file mode 100644 (file)
index 93ffe0b..0000000
+++ /dev/null
@@ -1,144 +0,0 @@
-/*\r
-             LUFA Library\r
-     Copyright (C) Dean Camera, 2009.\r
-              \r
-  dean [at] fourwalledcubicle [dot] com\r
-      www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
-  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
-  Permission to use, copy, modify, and distribute this software\r
-  and its documentation for any purpose and without fee is hereby\r
-  granted, provided that the above copyright notice appear in all\r
-  copies and that both that the copyright notice and this\r
-  permission notice and warranty disclaimer appear in supporting\r
-  documentation, and that the name of the author not be used in\r
-  advertising or publicity pertaining to distribution of the\r
-  software without specific, written prior permission.\r
-\r
-  The author disclaim all warranties with regard to this\r
-  software, including all implied warranties of merchantability\r
-  and fitness.  In no event shall the author be liable for any\r
-  special, indirect or consequential damages or any damages\r
-  whatsoever resulting from loss of use, data or profits, whether\r
-  in an action of contract, negligence or other tortious action,\r
-  arising out of or in connection with the use or performance of\r
-  this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- *  Main source file for the AudioInput demo. This file contains the main tasks of\r
- *  the demo and is responsible for the initial application hardware configuration.\r
- */\r
-\r
-#include "AudioInput.h"\r
-\r
-/** LUFA Audio Class driver interface configuration and state information. This structure is\r
- *  passed to all Audio Class driver functions, so that multiple instances of the same class\r
- *  within a device can be differentiated from one another.\r
- */\r
-USB_ClassInfo_Audio_t Microphone_Audio_Interface =\r
-       {\r
-               .StreamingInterfaceNumber = 1,\r
-\r
-               .DataINEndpointNumber     = AUDIO_STREAM_EPNUM,\r
-               .DataINEndpointSize       = AUDIO_STREAM_EPSIZE,\r
-       };\r
-\r
-/** Main program entry point. This routine contains the overall program flow, including initial\r
- *  setup of all components and the main program loop.\r
- */\r
-int main(void)\r
-{\r
-       SetupHardware();\r
-\r
-       LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);\r
-       \r
-       for (;;)\r
-       {\r
-               if (Microphone_Audio_Interface.InterfaceEnabled)\r
-                 ProcessNextSample();\r
-\r
-               USB_Audio_USBTask(&Microphone_Audio_Interface);\r
-               USB_USBTask();\r
-       }\r
-}\r
-\r
-/** Configures the board hardware and chip peripherals for the demo's functionality. */\r
-void SetupHardware(void)\r
-{\r
-       /* Disable watchdog if enabled by bootloader/fuses */\r
-       MCUSR &= ~(1 << WDRF);\r
-       wdt_disable();\r
-\r
-       /* Disable clock division */\r
-       clock_prescale_set(clock_div_1);\r
-       \r
-       /* Hardware Initialization */\r
-       LEDs_Init();\r
-       USB_Init();\r
-       ADC_Init(ADC_FREE_RUNNING | ADC_PRESCALE_32);\r
-       ADC_SetupChannel(MIC_IN_ADC_CHANNEL);\r
-       \r
-       /* Start the ADC conversion in free running mode */\r
-       ADC_StartReading(ADC_REFERENCE_AVCC | ADC_RIGHT_ADJUSTED | MIC_IN_ADC_CHANNEL);\r
-}\r
-\r
-/** Processes the next audio sample by reading the last ADC conversion and writing it to the audio\r
- *  interface, each time the sample reload timer period elapses to give a constant sample rate.\r
- */\r
-void ProcessNextSample(void)\r
-{\r
-       if ((TIFR0 & (1 << OCF0A)) && USB_Audio_IsReadyForNextSample(&Microphone_Audio_Interface))\r
-       {\r
-               TIFR0 |= (1 << OCF0A);\r
-\r
-               /* Audio sample is ADC value scaled to fit the entire range */\r
-               int16_t AudioSample = ((SAMPLE_MAX_RANGE / ADC_MAX_RANGE) * ADC_GetResult());\r
-               \r
-#if defined(MICROPHONE_BIASED_TO_HALF_RAIL)\r
-               /* Microphone is biased to half rail voltage, subtract the bias from the sample value */\r
-               AudioSample -= (SAMPLE_MAX_RANGE / 2));\r
-#endif\r
-\r
-               USB_Audio_WriteSample16(AudioSample);\r
-       }\r
-}\r
-\r
-/** Event handler for the library USB Connection event. */\r
-void EVENT_USB_Connect(void)\r
-{\r
-       LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING);\r
-\r
-       /* Sample reload timer initialization */\r
-       OCR0A   = (F_CPU / AUDIO_SAMPLE_FREQUENCY) - 1;\r
-       TCCR0A  = (1 << WGM01);  // CTC mode\r
-       TCCR0B  = (1 << CS00);   // Fcpu speed\r
-}\r
-\r
-/** Event handler for the library USB Disconnection event. */\r
-void EVENT_USB_Disconnect(void)\r
-{\r
-       /* Stop the sample reload timer */\r
-       TCCR0B = 0;\r
-\r
-       LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);\r
-}\r
-\r
-/** Event handler for the library USB Configuration Changed event. */\r
-void EVENT_USB_ConfigurationChanged(void)\r
-{\r
-       LEDs_SetAllLEDs(LEDMASK_USB_READY);\r
-       \r
-       if (!(USB_Audio_ConfigureEndpoints(&Microphone_Audio_Interface)))\r
-         LEDs_SetAllLEDs(LEDMASK_USB_ERROR);\r
-}\r
-\r
-/** Event handler for the library USB Unhandled Control Packet event. */\r
-void EVENT_USB_UnhandledControlPacket(void)\r
-{\r
-       USB_Audio_ProcessControlPacket(&Microphone_Audio_Interface);\r
-}\r
diff --git a/Demos/Device/AudioInput/AudioInput.h b/Demos/Device/AudioInput/AudioInput.h
deleted file mode 100644 (file)
index e4dd7fe..0000000
+++ /dev/null
@@ -1,85 +0,0 @@
-/*\r
-             LUFA Library\r
-     Copyright (C) Dean Camera, 2009.\r
-              \r
-  dean [at] fourwalledcubicle [dot] com\r
-      www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
-  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
-  Permission to use, copy, modify, and distribute this software\r
-  and its documentation for any purpose and without fee is hereby\r
-  granted, provided that the above copyright notice appear in all\r
-  copies and that both that the copyright notice and this\r
-  permission notice and warranty disclaimer appear in supporting\r
-  documentation, and that the name of the author not be used in\r
-  advertising or publicity pertaining to distribution of the\r
-  software without specific, written prior permission.\r
-\r
-  The author disclaim all warranties with regard to this\r
-  software, including all implied warranties of merchantability\r
-  and fitness.  In no event shall the author be liable for any\r
-  special, indirect or consequential damages or any damages\r
-  whatsoever resulting from loss of use, data or profits, whether\r
-  in an action of contract, negligence or other tortious action,\r
-  arising out of or in connection with the use or performance of\r
-  this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- *  Header file for AudioInput.c.\r
- */\r
\r
-#ifndef _AUDIO_INPUT_H_\r
-#define _AUDIO_INPUT_H_\r
-\r
-       /* Includes: */\r
-               #include <avr/io.h>\r
-               #include <avr/wdt.h>\r
-               #include <avr/power.h>\r
-\r
-               #include "Descriptors.h"\r
-                               \r
-               #include <LUFA/Version.h>\r
-               #include <LUFA/Drivers/Board/LEDs.h>\r
-               #include <LUFA/Drivers/Board/Joystick.h>\r
-               #include <LUFA/Drivers/Peripheral/ADC.h>\r
-               #include <LUFA/Drivers/USB/USB.h>\r
-               #include <LUFA/Drivers/USB/Class/Device/Audio.h>\r
-               \r
-       /* Macros: */\r
-               /** ADC channel number for the microphone input. */\r
-               #define MIC_IN_ADC_CHANNEL        2\r
-               \r
-               /** Maximum ADC sample value for the microphone input. */\r
-               #define SAMPLE_MAX_RANGE          0xFFFF\r
-\r
-               /** Maximum ADC range for the microphone input. */\r
-               #define ADC_MAX_RANGE             0x3FF\r
-\r
-       /* Macros: */\r
-               /** LED mask for the library LED driver, to indicate that the USB interface is not ready. */\r
-               #define LEDMASK_USB_NOTREADY      LEDS_LED1\r
-\r
-               /** LED mask for the library LED driver, to indicate that the USB interface is enumerating. */\r
-               #define LEDMASK_USB_ENUMERATING  (LEDS_LED2 | LEDS_LED3)\r
-\r
-               /** LED mask for the library LED driver, to indicate that the USB interface is ready. */\r
-               #define LEDMASK_USB_READY        (LEDS_LED2 | LEDS_LED4)\r
-\r
-               /** LED mask for the library LED driver, to indicate that an error has occurred in the USB interface. */\r
-               #define LEDMASK_USB_ERROR        (LEDS_LED1 | LEDS_LED3)\r
-               \r
-       /* Function Prototypes: */\r
-               void SetupHardware(void);\r
-               void ProcessNextSample(void);\r
-               \r
-               void EVENT_USB_Connect(void);\r
-               void EVENT_USB_Disconnect(void);\r
-               void EVENT_USB_ConfigurationChanged(void);\r
-               void EVENT_USB_UnhandledControlPacket(void);\r
-\r
-#endif\r
diff --git a/Demos/Device/AudioInput/AudioInput.txt b/Demos/Device/AudioInput/AudioInput.txt
deleted file mode 100644 (file)
index cf71259..0000000
+++ /dev/null
@@ -1,75 +0,0 @@
-/** \file\r
- *\r
- *  This file contains special DoxyGen information for the generation of the main page and other special\r
- *  documentation pages. It is not a project source file.\r
- */\r
\r
-/** \mainpage Audio Input Device Demo\r
- *\r
- *  \section SSec_Info USB Information:\r
- *\r
- *  The following table gives a rundown of the USB utilization of this demo.\r
- *\r
- *  <table>\r
- *   <tr>\r
- *    <td><b>USB Mode:</b></td>\r
- *    <td>Device</td>\r
- *   </tr>\r
- *   <tr>\r
- *    <td><b>USB Class:</b></td>\r
- *    <td>Audio Class</td>\r
- *   </tr>\r
- *   <tr> \r
- *    <td><b>USB Subclass:</b></td>\r
- *    <td>Standard Audio Device</td>\r
- *   </tr>\r
- *   <tr>\r
- *    <td><b>Relevant Standards:</b></td>\r
- *    <td>USBIF Audio Class Specification</td>\r
- *    <td>USBIF Audio Class Terminal Types Specification</td>\r
- *    <td>USBIF Audio Data Formats Specification</td>\r
- *   </tr>\r
- *   <tr>\r
- *    <td><b>Usable Speeds:</b></td>\r
- *    <td>Full Speed Mode</td>\r
- *   </tr>\r
- *  </table>\r
- *\r
- *  \section SSec_Description Project Description: \r
- *\r
- *  Audio demonstration application. This gives a simple reference\r
- *  application for implementing a USB Audio Input device using the\r
- *  basic USB Audio drivers in all modern OSes (i.e. no special drivers\r
- *  required).\r
- *  \r
- *  On start-up the system will automatically enumerate and function\r
- *  as a USB microphone. Incoming audio from the ADC channel 1 will\r
- *  be sampled and sent to the host computer.\r
- *  \r
- *  To use, connect a microphone to the ADC channel 2.\r
- *  \r
- *  Under Windows, if a driver request dialogue pops up, select the option\r
- *  to automatically install the appropriate drivers.\r
- *\r
- *  \section SSec_Options Project Options\r
- *\r
- *  The following defines can be found in this demo, which can control the demo behaviour when defined, or changed in value.\r
- *\r
- *  <table>\r
- *   <tr>\r
- *    <td><b>Define Name:</b></td>\r
- *    <td><b>Location:</b></td>\r
- *    <td><b>Description:</b></td>\r
- *   </tr>\r
- *   <tr>\r
- *    <td>MICROPHONE_BIASED_TO_HALF_RAIL</td>\r
- *    <td>Makefile CDEFS</td>\r
- *    <td>When defined, this alters the demo so that the half VCC bias of the microphone input is subtracted.</td>\r
- *   </tr>\r
- *   <tr>\r
- *    <td>AUDIO_SAMPLE_FREQUENCY</td>\r
- *    <td>Descriptors.h</td>\r
- *    <td>Gives the audio sample rate per channel for the audio stream, in Hz.</td>\r
- *   </tr>\r
- *  </table>\r
- */\r
diff --git a/Demos/Device/AudioInput/Descriptors.c b/Demos/Device/AudioInput/Descriptors.c
deleted file mode 100644 (file)
index 6697cfe..0000000
+++ /dev/null
@@ -1,314 +0,0 @@
-/*\r
-             LUFA Library\r
-     Copyright (C) Dean Camera, 2009.\r
-              \r
-  dean [at] fourwalledcubicle [dot] com\r
-      www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
-  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
-  Permission to use, copy, modify, and distribute this software\r
-  and its documentation for any purpose and without fee is hereby\r
-  granted, provided that the above copyright notice appear in all\r
-  copies and that both that the copyright notice and this\r
-  permission notice and warranty disclaimer appear in supporting\r
-  documentation, and that the name of the author not be used in\r
-  advertising or publicity pertaining to distribution of the\r
-  software without specific, written prior permission.\r
-\r
-  The author disclaim all warranties with regard to this\r
-  software, including all implied warranties of merchantability\r
-  and fitness.  In no event shall the author be liable for any\r
-  special, indirect or consequential damages or any damages\r
-  whatsoever resulting from loss of use, data or profits, whether\r
-  in an action of contract, negligence or other tortious action,\r
-  arising out of or in connection with the use or performance of\r
-  this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- *  USB Device Descriptors, for library use when in USB device mode. Descriptors are special \r
- *  computer-readable structures which the host requests upon device enumeration, to determine\r
- *  the device's capabilities and functions.  \r
- */\r
\r
-#include "Descriptors.h"\r
-\r
-/** Device descriptor structure. This descriptor, located in FLASH memory, describes the overall\r
- *  device characteristics, including the supported USB version, control endpoint size and the\r
- *  number of device configurations. The descriptor is read out by the USB host when the enumeration\r
- *  process begins.\r
- */\r
-USB_Descriptor_Device_t PROGMEM DeviceDescriptor =\r
-{\r
-       .Header                 = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device},\r
-               \r
-       .USBSpecification       = VERSION_BCD(02.00),\r
-       .Class                  = 0x00,\r
-       .SubClass               = 0x00,\r
-       .Protocol               = 0x00,\r
-                               \r
-       .Endpoint0Size          = FIXED_CONTROL_ENDPOINT_SIZE,\r
-               \r
-       .VendorID               = 0x03EB,\r
-       .ProductID              = 0x2047,\r
-       .ReleaseNumber          = 0x0000,\r
-               \r
-       .ManufacturerStrIndex   = 0x01,\r
-       .ProductStrIndex        = 0x02,\r
-       .SerialNumStrIndex      = NO_DESCRIPTOR,\r
-               \r
-       .NumberOfConfigurations = 1\r
-};\r
-\r
-/** Configuration descriptor structure. This descriptor, located in FLASH memory, describes the usage\r
- *  of the device in one of its supported configurations, including information about any device interfaces\r
- *  and endpoints. The descriptor is read out by the USB host during the enumeration process when selecting\r
- *  a configuration so that the host may correctly communicate with the USB device.\r
- */\r
-USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =\r
-{\r
-       .Config = \r
-               {\r
-                       .Header                   = {.Size = sizeof(USB_Descriptor_Configuration_Header_t), .Type = DTYPE_Configuration},\r
-\r
-                       .TotalConfigurationSize   = sizeof(USB_Descriptor_Configuration_t),\r
-                       .TotalInterfaces          = 2,\r
-\r
-                       .ConfigurationNumber      = 1,\r
-                       .ConfigurationStrIndex    = NO_DESCRIPTOR,\r
-                               \r
-                       .ConfigAttributes         = (USB_CONFIG_ATTR_BUSPOWERED | USB_CONFIG_ATTR_SELFPOWERED),\r
-                       \r
-                       .MaxPowerConsumption      = USB_CONFIG_POWER_MA(100)\r
-               },\r
-               \r
-       .AudioControlInterface = \r
-               {\r
-                       .Header                   = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},\r
-\r
-                       .InterfaceNumber          = 0,\r
-                       .AlternateSetting         = 0,\r
-                       \r
-                       .TotalEndpoints           = 0,\r
-                               \r
-                       .Class                    = 0x01,\r
-                       .SubClass                 = 0x01,\r
-                       .Protocol                 = 0x00,\r
-                               \r
-                       .InterfaceStrIndex        = NO_DESCRIPTOR                       \r
-               },\r
-       \r
-       .AudioControlInterface_SPC = \r
-               {\r
-                       .Header                   = {.Size = sizeof(USB_AudioInterface_AC_t), .Type = DTYPE_AudioInterface},\r
-                       .Subtype                  = DSUBTYPE_Header,\r
-                       \r
-                       .ACSpecification          = VERSION_BCD(01.00),\r
-                       .TotalLength              = (sizeof(USB_AudioInterface_AC_t) +\r
-                                                    sizeof(USB_AudioInputTerminal_t) +\r
-                                                                            sizeof(USB_AudioOutputTerminal_t)),\r
-                       \r
-                       .InCollection             = 1,\r
-                       .InterfaceNumbers         = {1},                        \r
-               },\r
-\r
-       .InputTerminal = \r
-               {\r
-                       .Header                   = {.Size = sizeof(USB_AudioInputTerminal_t), .Type = DTYPE_AudioInterface},\r
-                       .Subtype                  = DSUBTYPE_InputTerminal,\r
-               \r
-                       .TerminalID               = 0x01,\r
-                       .TerminalType             = TERMINAL_IN_MIC,\r
-                       .AssociatedOutputTerminal = 0x00,\r
-                       \r
-                       .TotalChannels            = 1,\r
-                       .ChannelConfig            = 0,\r
-                       \r
-                       .ChannelStrIndex          = NO_DESCRIPTOR,\r
-                       .TerminalStrIndex         = NO_DESCRIPTOR\r
-               },\r
-\r
-       .OutputTerminal = \r
-               {\r
-                       .Header                   = {.Size = sizeof(USB_AudioOutputTerminal_t), .Type = DTYPE_AudioInterface},\r
-                       .Subtype                  = DSUBTYPE_OutputTerminal,\r
-               \r
-                       .TerminalID               = 0x02,\r
-                       .TerminalType             = TERMINAL_STREAMING,\r
-                       .AssociatedInputTerminal  = 0x00,\r
-                       \r
-                       .SourceID                 = 0x01,\r
-                       \r
-                       .TerminalStrIndex         = NO_DESCRIPTOR                       \r
-               },\r
-\r
-       .AudioStreamInterface_Alt0 = \r
-               {\r
-                       .Header                   = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},\r
-\r
-                       .InterfaceNumber          = 1,\r
-                       .AlternateSetting         = 0,\r
-                       \r
-                       .TotalEndpoints           = 0,\r
-                               \r
-                       .Class                    = 0x01,\r
-                       .SubClass                 = 0x02,\r
-                       .Protocol                 = 0x00,\r
-                               \r
-                       .InterfaceStrIndex        = NO_DESCRIPTOR\r
-               },\r
-\r
-       .AudioStreamInterface_Alt1 = \r
-               {\r
-                       .Header                   = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},\r
-\r
-                       .InterfaceNumber          = 1,\r
-                       .AlternateSetting         = 1,\r
-                       \r
-                       .TotalEndpoints           = 1,\r
-                               \r
-                       .Class                    = 0x01,\r
-                       .SubClass                 = 0x02,\r
-                       .Protocol                 = 0x00,\r
-                               \r
-                       .InterfaceStrIndex        = NO_DESCRIPTOR\r
-               },\r
-               \r
-       .AudioStreamInterface_SPC = \r
-               {\r
-                       .Header                   = {.Size = sizeof(USB_AudioInterface_AS_t), .Type = DTYPE_AudioInterface},\r
-                       .Subtype                  = DSUBTYPE_General,\r
-                       \r
-                       .TerminalLink             = 0x02,\r
-                       \r
-                       .FrameDelay               = 1,\r
-                       .AudioFormat              = 0x0001\r
-               },\r
-               \r
-       .AudioFormat = \r
-               {\r
-                       .Header                   = {.Size = sizeof(USB_AudioFormat_t), .Type = DTYPE_AudioInterface},\r
-                       .Subtype                  = DSUBTYPE_Format,\r
-\r
-                       .FormatType               = 0x01,\r
-                       .Channels                 = 0x01,\r
-                       \r
-                       .SubFrameSize             = 0x02,\r
-                       .BitResolution            = 16,\r
-                       .SampleFrequencyType      = (sizeof(ConfigurationDescriptor.AudioFormat.SampleFrequencies) / sizeof(AudioSampleFreq_t)),\r
-               \r
-                       .SampleFrequencies        = {AUDIO_SAMPLE_FREQ(AUDIO_SAMPLE_FREQUENCY)}\r
-               },\r
-       \r
-       .AudioEndpoint = \r
-               {\r
-                       .Endpoint = \r
-                               {\r
-                                       .Header              = {.Size = sizeof(USB_AudioStreamEndpoint_Std_t), .Type = DTYPE_Endpoint},\r
-\r
-                                       .EndpointAddress     = (ENDPOINT_DESCRIPTOR_DIR_IN | AUDIO_STREAM_EPNUM),\r
-                                       .Attributes          = (EP_TYPE_ISOCHRONOUS | ENDPOINT_ATTR_SYNC | ENDPOINT_USAGE_DATA),\r
-                                       .EndpointSize        = AUDIO_STREAM_EPSIZE,\r
-                                       .PollingIntervalMS   = 1\r
-                               },\r
-                       \r
-                       .Refresh                  = 0,\r
-                       .SyncEndpointNumber       = 0\r
-               },\r
-               \r
-       .AudioEndpoint_SPC = \r
-               {\r
-                       .Header                   = {.Size = sizeof(USB_AudioStreamEndpoint_Spc_t), .Type = DTYPE_AudioEndpoint},\r
-                       .Subtype                  = DSUBTYPE_General,\r
-                       \r
-                       .Attributes               = 0x00,\r
-                       \r
-                       .LockDelayUnits           = 0x00,\r
-                       .LockDelay                = 0x0000\r
-               }\r
-};\r
-\r
-/** Language descriptor structure. This descriptor, located in FLASH memory, is returned when the host requests\r
- *  the string descriptor with index 0 (the first index). It is actually an array of 16-bit integers, which indicate\r
- *  via the language ID table available at USB.org what languages the device supports for its string descriptors.\r
- */\r
-USB_Descriptor_String_t PROGMEM LanguageString =\r
-{\r
-       .Header                 = {.Size = USB_STRING_LEN(1), .Type = DTYPE_String},\r
-               \r
-       .UnicodeString          = {LANGUAGE_ID_ENG}\r
-};\r
-\r
-/** Manufacturer descriptor string. This is a Unicode string containing the manufacturer's details in human readable\r
- *  form, and is read out upon request by the host when the appropriate string ID is requested, listed in the Device\r
- *  Descriptor.\r
- */\r
-USB_Descriptor_String_t PROGMEM ManufacturerString =\r
-{\r
-       .Header                 = {.Size = USB_STRING_LEN(11), .Type = DTYPE_String},\r
-               \r
-       .UnicodeString          = L"Dean Camera"\r
-};\r
-\r
-/** Product descriptor string. This is a Unicode string containing the product's details in human readable form,\r
- *  and is read out upon request by the host when the appropriate string ID is requested, listed in the Device\r
- *  Descriptor.\r
- */\r
-USB_Descriptor_String_t PROGMEM ProductString =\r
-{\r
-       .Header                 = {.Size = USB_STRING_LEN(18), .Type = DTYPE_String},\r
-               \r
-       .UnicodeString          = L"LUFA Audio In Demo"\r
-};\r
-\r
-/** This function is called by the library when in device mode, and must be overridden (see library "USB Descriptors"\r
- *  documentation) by the application code so that the address and size of a requested descriptor can be given\r
- *  to the USB library. When the device receives a Get Descriptor request on the control endpoint, this function\r
- *  is called so that the descriptor details can be passed back and the appropriate descriptor sent back to the\r
- *  USB host.\r
- */\r
-uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
-{\r
-       const uint8_t  DescriptorType   = (wValue >> 8);\r
-       const uint8_t  DescriptorNumber = (wValue & 0xFF);\r
-\r
-       void*    Address = NULL;\r
-       uint16_t Size    = NO_DESCRIPTOR;\r
-\r
-       switch (DescriptorType)\r
-       {\r
-               case DTYPE_Device:\r
-                       Address = (void*)&DeviceDescriptor;\r
-                       Size    = sizeof(USB_Descriptor_Device_t);\r
-                       break;\r
-               case DTYPE_Configuration: \r
-                       Address = (void*)&ConfigurationDescriptor;\r
-                       Size    = sizeof(USB_Descriptor_Configuration_t);\r
-                       break;\r
-               case DTYPE_String: \r
-                       switch (DescriptorNumber)\r
-                       {\r
-                               case 0x00: \r
-                                       Address = (void*)&LanguageString;\r
-                                       Size    = pgm_read_byte(&LanguageString.Header.Size);\r
-                                       break;\r
-                               case 0x01: \r
-                                       Address = (void*)&ManufacturerString;\r
-                                       Size    = pgm_read_byte(&ManufacturerString.Header.Size);\r
-                                       break;\r
-                               case 0x02: \r
-                                       Address = (void*)&ProductString;\r
-                                       Size    = pgm_read_byte(&ProductString.Header.Size);\r
-                                       break;\r
-                       }\r
-                       \r
-                       break;\r
-       }\r
-       \r
-       *DescriptorAddress = Address;\r
-       return Size;\r
-}\r
diff --git a/Demos/Device/AudioInput/Descriptors.h b/Demos/Device/AudioInput/Descriptors.h
deleted file mode 100644 (file)
index 0da8952..0000000
+++ /dev/null
@@ -1,86 +0,0 @@
-/*\r
-             LUFA Library\r
-     Copyright (C) Dean Camera, 2009.\r
-              \r
-  dean [at] fourwalledcubicle [dot] com\r
-      www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
-  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
-  Permission to use, copy, modify, and distribute this software\r
-  and its documentation for any purpose and without fee is hereby\r
-  granted, provided that the above copyright notice appear in all\r
-  copies and that both that the copyright notice and this\r
-  permission notice and warranty disclaimer appear in supporting\r
-  documentation, and that the name of the author not be used in\r
-  advertising or publicity pertaining to distribution of the\r
-  software without specific, written prior permission.\r
-\r
-  The author disclaim all warranties with regard to this\r
-  software, including all implied warranties of merchantability\r
-  and fitness.  In no event shall the author be liable for any\r
-  special, indirect or consequential damages or any damages\r
-  whatsoever resulting from loss of use, data or profits, whether\r
-  in an action of contract, negligence or other tortious action,\r
-  arising out of or in connection with the use or performance of\r
-  this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- *  Header file for Descriptors.c.\r
- */\r
\r
-#ifndef _DESCRIPTORS_H_\r
-#define _DESCRIPTORS_H_\r
-\r
-       /* Includes: */\r
-               #include <LUFA/Drivers/USB/USB.h>\r
-               #include <LUFA/Drivers/USB/Class/Device/Audio.h>\r
-\r
-               #include <avr/pgmspace.h>\r
-\r
-       /* Macros: */\r
-               #if defined(USB_FULL_CONTROLLER) || defined(__DOXYGEN__)\r
-                       /** Endpoint number of the Audio isochronous streaming data endpoint. */\r
-                       #define AUDIO_STREAM_EPNUM       1\r
-               #else\r
-                       #define AUDIO_STREAM_EPNUM       3              \r
-               #endif\r
-               \r
-               /** Endpoint size in bytes of the Audio isochronous streaming data endpoint. The Windows audio stack requires\r
-                *  at least 192 bytes for correct output, thus the smaller 128 byte maximum endpoint size on some of the smaller\r
-                *  USB AVR models will result in unavoidable distorted output.\r
-                */\r
-               #define AUDIO_STREAM_EPSIZE          ENDPOINT_MAX_SIZE(AUDIO_STREAM_EPNUM)\r
-               \r
-               /** Sample frequency of the data being transmitted through the streaming endpoint. */\r
-               #define AUDIO_SAMPLE_FREQUENCY       48000\r
-               \r
-       /* Type Defines: */\r
-               /** Type define for the device configuration descriptor structure. This must be defined in the\r
-                *  application code, as the configuration descriptor contains several sub-descriptors which\r
-                *  vary between devices, and which describe the device's usage to the host.\r
-                */\r
-               typedef struct\r
-               {\r
-                       USB_Descriptor_Configuration_Header_t Config;\r
-                       USB_Descriptor_Interface_t            AudioControlInterface;\r
-                       USB_AudioInterface_AC_t               AudioControlInterface_SPC;\r
-                       USB_AudioInputTerminal_t              InputTerminal;\r
-                       USB_AudioOutputTerminal_t             OutputTerminal;\r
-                       USB_Descriptor_Interface_t            AudioStreamInterface_Alt0;\r
-                       USB_Descriptor_Interface_t            AudioStreamInterface_Alt1;\r
-                       USB_AudioInterface_AS_t               AudioStreamInterface_SPC;\r
-                       USB_AudioFormat_t                     AudioFormat;\r
-                       USB_AudioStreamEndpoint_Std_t         AudioEndpoint;\r
-                       USB_AudioStreamEndpoint_Spc_t         AudioEndpoint_SPC;\r
-               } USB_Descriptor_Configuration_t;\r
-               \r
-       /* Function Prototypes: */\r
-               uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
-                                                   ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);\r
-\r
-#endif\r
diff --git a/Demos/Device/AudioInput/Doxygen.conf b/Demos/Device/AudioInput/Doxygen.conf
deleted file mode 100644 (file)
index f84efb7..0000000
+++ /dev/null
@@ -1,1485 +0,0 @@
-# Doxyfile 1.5.7.1\r
-\r
-# This file describes the settings to be used by the documentation system\r
-# doxygen (www.doxygen.org) for a project\r
-#\r
-# All text after a hash (#) is considered a comment and will be ignored\r
-# The format is:\r
-#       TAG = value [value, ...]\r
-# For lists items can also be appended using:\r
-#       TAG += value [value, ...]\r
-# Values that contain spaces should be placed between quotes (" ")\r
-\r
-#---------------------------------------------------------------------------\r
-# Project related configuration options\r
-#---------------------------------------------------------------------------\r
-\r
-# This tag specifies the encoding used for all characters in the config file \r
-# that follow. The default is UTF-8 which is also the encoding used for all \r
-# text before the first occurrence of this tag. Doxygen uses libiconv (or the \r
-# iconv built into libc) for the transcoding. See \r
-# http://www.gnu.org/software/libiconv for the list of possible encodings.\r
-\r
-DOXYFILE_ENCODING      = UTF-8\r
-\r
-# The PROJECT_NAME tag is a single word (or a sequence of words surrounded \r
-# by quotes) that should identify the project.\r
-\r
-PROJECT_NAME           = "LUFA Library - Audio Input Device Demo"\r
-\r
-# The PROJECT_NUMBER tag can be used to enter a project or revision number. \r
-# This could be handy for archiving the generated documentation or \r
-# if some version control system is used.\r
-\r
-PROJECT_NUMBER         = 0.0.0\r
-\r
-# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) \r
-# base path where the generated documentation will be put. \r
-# If a relative path is entered, it will be relative to the location \r
-# where doxygen was started. If left blank the current directory will be used.\r
-\r
-OUTPUT_DIRECTORY       = ./Documentation/\r
-\r
-# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create \r
-# 4096 sub-directories (in 2 levels) under the output directory of each output \r
-# format and will distribute the generated files over these directories. \r
-# Enabling this option can be useful when feeding doxygen a huge amount of \r
-# source files, where putting all generated files in the same directory would \r
-# otherwise cause performance problems for the file system.\r
-\r
-CREATE_SUBDIRS         = YES\r
-\r
-# The OUTPUT_LANGUAGE tag is used to specify the language in which all \r
-# documentation generated by doxygen is written. Doxygen will use this \r
-# information to generate all constant output in the proper language. \r
-# The default language is English, other supported languages are: \r
-# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, \r
-# Croatian, Czech, Danish, Dutch, Farsi, Finnish, French, German, Greek, \r
-# Hungarian, Italian, Japanese, Japanese-en (Japanese with English messages), \r
-# Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, Polish, \r
-# Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, Slovene, \r
-# Spanish, Swedish, and Ukrainian.\r
-\r
-OUTPUT_LANGUAGE        = English\r
-\r
-# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will \r
-# include brief member descriptions after the members that are listed in \r
-# the file and class documentation (similar to JavaDoc). \r
-# Set to NO to disable this.\r
-\r
-BRIEF_MEMBER_DESC      = YES\r
-\r
-# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend \r
-# the brief description of a member or function before the detailed description. \r
-# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the \r
-# brief descriptions will be completely suppressed.\r
-\r
-REPEAT_BRIEF           = YES\r
-\r
-# This tag implements a quasi-intelligent brief description abbreviator \r
-# that is used to form the text in various listings. Each string \r
-# in this list, if found as the leading text of the brief description, will be \r
-# stripped from the text and the result after processing the whole list, is \r
-# used as the annotated text. Otherwise, the brief description is used as-is. \r
-# If left blank, the following values are used ("$name" is automatically \r
-# replaced with the name of the entity): "The $name class" "The $name widget" \r
-# "The $name file" "is" "provides" "specifies" "contains" \r
-# "represents" "a" "an" "the"\r
-\r
-ABBREVIATE_BRIEF       = "The $name class" \\r
-                         "The $name widget" \\r
-                         "The $name file" \\r
-                         is \\r
-                         provides \\r
-                         specifies \\r
-                         contains \\r
-                         represents \\r
-                         a \\r
-                         an \\r
-                         the\r
-\r
-# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then \r
-# Doxygen will generate a detailed section even if there is only a brief \r
-# description.\r
-\r
-ALWAYS_DETAILED_SEC    = NO\r
-\r
-# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all \r
-# inherited members of a class in the documentation of that class as if those \r
-# members were ordinary class members. Constructors, destructors and assignment \r
-# operators of the base classes will not be shown.\r
-\r
-INLINE_INHERITED_MEMB  = NO\r
-\r
-# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full \r
-# path before files name in the file list and in the header files. If set \r
-# to NO the shortest path that makes the file name unique will be used.\r
-\r
-FULL_PATH_NAMES        = YES\r
-\r
-# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag \r
-# can be used to strip a user-defined part of the path. Stripping is \r
-# only done if one of the specified strings matches the left-hand part of \r
-# the path. The tag can be used to show relative paths in the file list. \r
-# If left blank the directory from which doxygen is run is used as the \r
-# path to strip.\r
-\r
-STRIP_FROM_PATH        = \r
-\r
-# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of \r
-# the path mentioned in the documentation of a class, which tells \r
-# the reader which header file to include in order to use a class. \r
-# If left blank only the name of the header file containing the class \r
-# definition is used. Otherwise one should specify the include paths that \r
-# are normally passed to the compiler using the -I flag.\r
-\r
-STRIP_FROM_INC_PATH    = \r
-\r
-# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter \r
-# (but less readable) file names. This can be useful is your file systems \r
-# doesn't support long names like on DOS, Mac, or CD-ROM.\r
-\r
-SHORT_NAMES            = YES\r
-\r
-# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen \r
-# will interpret the first line (until the first dot) of a JavaDoc-style \r
-# comment as the brief description. If set to NO, the JavaDoc \r
-# comments will behave just like regular Qt-style comments \r
-# (thus requiring an explicit @brief command for a brief description.)\r
-\r
-JAVADOC_AUTOBRIEF      = NO\r
-\r
-# If the QT_AUTOBRIEF tag is set to YES then Doxygen will \r
-# interpret the first line (until the first dot) of a Qt-style \r
-# comment as the brief description. If set to NO, the comments \r
-# will behave just like regular Qt-style comments (thus requiring \r
-# an explicit \brief command for a brief description.)\r
-\r
-QT_AUTOBRIEF           = NO\r
-\r
-# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen \r
-# treat a multi-line C++ special comment block (i.e. a block of //! or /// \r
-# comments) as a brief description. This used to be the default behaviour. \r
-# The new default is to treat a multi-line C++ comment block as a detailed \r
-# description. Set this tag to YES if you prefer the old behaviour instead.\r
-\r
-MULTILINE_CPP_IS_BRIEF = NO\r
-\r
-# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented \r
-# member inherits the documentation from any documented member that it \r
-# re-implements.\r
-\r
-INHERIT_DOCS           = YES\r
-\r
-# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce \r
-# a new page for each member. If set to NO, the documentation of a member will \r
-# be part of the file/class/namespace that contains it.\r
-\r
-SEPARATE_MEMBER_PAGES  = NO\r
-\r
-# The TAB_SIZE tag can be used to set the number of spaces in a tab. \r
-# Doxygen uses this value to replace tabs by spaces in code fragments.\r
-\r
-TAB_SIZE               = 4\r
-\r
-# This tag can be used to specify a number of aliases that acts \r
-# as commands in the documentation. An alias has the form "name=value". \r
-# For example adding "sideeffect=\par Side Effects:\n" will allow you to \r
-# put the command \sideeffect (or @sideeffect) in the documentation, which \r
-# will result in a user-defined paragraph with heading "Side Effects:". \r
-# You can put \n's in the value part of an alias to insert newlines.\r
-\r
-ALIASES                = \r
-\r
-# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C \r
-# sources only. Doxygen will then generate output that is more tailored for C. \r
-# For instance, some of the names that are used will be different. The list \r
-# of all members will be omitted, etc.\r
-\r
-OPTIMIZE_OUTPUT_FOR_C  = YES\r
-\r
-# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java \r
-# sources only. Doxygen will then generate output that is more tailored for \r
-# Java. For instance, namespaces will be presented as packages, qualified \r
-# scopes will look different, etc.\r
-\r
-OPTIMIZE_OUTPUT_JAVA   = NO\r
-\r
-# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran \r
-# sources only. Doxygen will then generate output that is more tailored for \r
-# Fortran.\r
-\r
-OPTIMIZE_FOR_FORTRAN   = NO\r
-\r
-# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL \r
-# sources. Doxygen will then generate output that is tailored for \r
-# VHDL.\r
-\r
-OPTIMIZE_OUTPUT_VHDL   = NO\r
-\r
-# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want \r
-# to include (a tag file for) the STL sources as input, then you should \r
-# set this tag to YES in order to let doxygen match functions declarations and \r
-# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. \r
-# func(std::string) {}). This also make the inheritance and collaboration \r
-# diagrams that involve STL classes more complete and accurate.\r
-\r
-BUILTIN_STL_SUPPORT    = NO\r
-\r
-# If you use Microsoft's C++/CLI language, you should set this option to YES to\r
-# enable parsing support.\r
-\r
-CPP_CLI_SUPPORT        = NO\r
-\r
-# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. \r
-# Doxygen will parse them like normal C++ but will assume all classes use public \r
-# instead of private inheritance when no explicit protection keyword is present.\r
-\r
-SIP_SUPPORT            = NO\r
-\r
-# For Microsoft's IDL there are propget and propput attributes to indicate getter \r
-# and setter methods for a property. Setting this option to YES (the default) \r
-# will make doxygen to replace the get and set methods by a property in the \r
-# documentation. This will only work if the methods are indeed getting or \r
-# setting a simple type. If this is not the case, or you want to show the \r
-# methods anyway, you should set this option to NO.\r
-\r
-IDL_PROPERTY_SUPPORT   = YES\r
-\r
-# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC \r
-# tag is set to YES, then doxygen will reuse the documentation of the first \r
-# member in the group (if any) for the other members of the group. By default \r
-# all members of a group must be documented explicitly.\r
-\r
-DISTRIBUTE_GROUP_DOC   = NO\r
-\r
-# Set the SUBGROUPING tag to YES (the default) to allow class member groups of \r
-# the same type (for instance a group of public functions) to be put as a \r
-# subgroup of that type (e.g. under the Public Functions section). Set it to \r
-# NO to prevent subgrouping. Alternatively, this can be done per class using \r
-# the \nosubgrouping command.\r
-\r
-SUBGROUPING            = YES\r
-\r
-# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum \r
-# is documented as struct, union, or enum with the name of the typedef. So \r
-# typedef struct TypeS {} TypeT, will appear in the documentation as a struct \r
-# with name TypeT. When disabled the typedef will appear as a member of a file, \r
-# namespace, or class. And the struct will be named TypeS. This can typically \r
-# be useful for C code in case the coding convention dictates that all compound \r
-# types are typedef'ed and only the typedef is referenced, never the tag name.\r
-\r
-TYPEDEF_HIDES_STRUCT   = NO\r
-\r
-# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to \r
-# determine which symbols to keep in memory and which to flush to disk.\r
-# When the cache is full, less often used symbols will be written to disk.\r
-# For small to medium size projects (<1000 input files) the default value is \r
-# probably good enough. For larger projects a too small cache size can cause \r
-# doxygen to be busy swapping symbols to and from disk most of the time \r
-# causing a significant performance penality. \r
-# If the system has enough physical memory increasing the cache will improve the \r
-# performance by keeping more symbols in memory. Note that the value works on \r
-# a logarithmic scale so increasing the size by one will rougly double the \r
-# memory usage. The cache size is given by this formula: \r
-# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, \r
-# corresponding to a cache size of 2^16 = 65536 symbols\r
-\r
-SYMBOL_CACHE_SIZE      = 0\r
-\r
-#---------------------------------------------------------------------------\r
-# Build related configuration options\r
-#---------------------------------------------------------------------------\r
-\r
-# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in \r
-# documentation are documented, even if no documentation was available. \r
-# Private class members and static file members will be hidden unless \r
-# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES\r
-\r
-EXTRACT_ALL            = YES\r
-\r
-# If the EXTRACT_PRIVATE tag is set to YES all private members of a class \r
-# will be included in the documentation.\r
-\r
-EXTRACT_PRIVATE        = YES\r
-\r
-# If the EXTRACT_STATIC tag is set to YES all static members of a file \r
-# will be included in the documentation.\r
-\r
-EXTRACT_STATIC         = YES\r
-\r
-# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) \r
-# defined locally in source files will be included in the documentation. \r
-# If set to NO only classes defined in header files are included.\r
-\r
-EXTRACT_LOCAL_CLASSES  = YES\r
-\r
-# This flag is only useful for Objective-C code. When set to YES local \r
-# methods, which are defined in the implementation section but not in \r
-# the interface are included in the documentation. \r
-# If set to NO (the default) only methods in the interface are included.\r
-\r
-EXTRACT_LOCAL_METHODS  = NO\r
-\r
-# If this flag is set to YES, the members of anonymous namespaces will be \r
-# extracted and appear in the documentation as a namespace called \r
-# 'anonymous_namespace{file}', where file will be replaced with the base \r
-# name of the file that contains the anonymous namespace. By default \r
-# anonymous namespace are hidden.\r
-\r
-EXTRACT_ANON_NSPACES   = NO\r
-\r
-# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all \r
-# undocumented members of documented classes, files or namespaces. \r
-# If set to NO (the default) these members will be included in the \r
-# various overviews, but no documentation section is generated. \r
-# This option has no effect if EXTRACT_ALL is enabled.\r
-\r
-HIDE_UNDOC_MEMBERS     = NO\r
-\r
-# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all \r
-# undocumented classes that are normally visible in the class hierarchy. \r
-# If set to NO (the default) these classes will be included in the various \r
-# overviews. This option has no effect if EXTRACT_ALL is enabled.\r
-\r
-HIDE_UNDOC_CLASSES     = NO\r
-\r
-# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all \r
-# friend (class|struct|union) declarations. \r
-# If set to NO (the default) these declarations will be included in the \r
-# documentation.\r
-\r
-HIDE_FRIEND_COMPOUNDS  = NO\r
-\r
-# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any \r
-# documentation blocks found inside the body of a function. \r
-# If set to NO (the default) these blocks will be appended to the \r
-# function's detailed documentation block.\r
-\r
-HIDE_IN_BODY_DOCS      = NO\r
-\r
-# The INTERNAL_DOCS tag determines if documentation \r
-# that is typed after a \internal command is included. If the tag is set \r
-# to NO (the default) then the documentation will be excluded. \r
-# Set it to YES to include the internal documentation.\r
-\r
-INTERNAL_DOCS          = NO\r
-\r
-# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate \r
-# file names in lower-case letters. If set to YES upper-case letters are also \r
-# allowed. This is useful if you have classes or files whose names only differ \r
-# in case and if your file system supports case sensitive file names. Windows \r
-# and Mac users are advised to set this option to NO.\r
-\r
-CASE_SENSE_NAMES       = NO\r
-\r
-# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen \r
-# will show members with their full class and namespace scopes in the \r
-# documentation. If set to YES the scope will be hidden.\r
-\r
-HIDE_SCOPE_NAMES       = NO\r
-\r
-# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen \r
-# will put a list of the files that are included by a file in the documentation \r
-# of that file.\r
-\r
-SHOW_INCLUDE_FILES     = YES\r
-\r
-# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] \r
-# is inserted in the documentation for inline members.\r
-\r
-INLINE_INFO            = YES\r
-\r
-# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen \r
-# will sort the (detailed) documentation of file and class members \r
-# alphabetically by member name. If set to NO the members will appear in \r
-# declaration order.\r
-\r
-SORT_MEMBER_DOCS       = YES\r
-\r
-# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the \r
-# brief documentation of file, namespace and class members alphabetically \r
-# by member name. If set to NO (the default) the members will appear in \r
-# declaration order.\r
-\r
-SORT_BRIEF_DOCS        = NO\r
-\r
-# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the \r
-# hierarchy of group names into alphabetical order. If set to NO (the default) \r
-# the group names will appear in their defined order.\r
-\r
-SORT_GROUP_NAMES       = NO\r
-\r
-# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be \r
-# sorted by fully-qualified names, including namespaces. If set to \r
-# NO (the default), the class list will be sorted only by class name, \r
-# not including the namespace part. \r
-# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.\r
-# Note: This option applies only to the class list, not to the \r
-# alphabetical list.\r
-\r
-SORT_BY_SCOPE_NAME     = NO\r
-\r
-# The GENERATE_TODOLIST tag can be used to enable (YES) or \r
-# disable (NO) the todo list. This list is created by putting \todo \r
-# commands in the documentation.\r
-\r
-GENERATE_TODOLIST      = NO\r
-\r
-# The GENERATE_TESTLIST tag can be used to enable (YES) or \r
-# disable (NO) the test list. This list is created by putting \test \r
-# commands in the documentation.\r
-\r
-GENERATE_TESTLIST      = NO\r
-\r
-# The GENERATE_BUGLIST tag can be used to enable (YES) or \r
-# disable (NO) the bug list. This list is created by putting \bug \r
-# commands in the documentation.\r
-\r
-GENERATE_BUGLIST       = NO\r
-\r
-# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or \r
-# disable (NO) the deprecated list. This list is created by putting \r
-# \deprecated commands in the documentation.\r
-\r
-GENERATE_DEPRECATEDLIST= YES\r
-\r
-# The ENABLED_SECTIONS tag can be used to enable conditional \r
-# documentation sections, marked by \if sectionname ... \endif.\r
-\r
-ENABLED_SECTIONS       = \r
-\r
-# The MAX_INITIALIZER_LINES tag determines the maximum number of lines \r
-# the initial value of a variable or define consists of for it to appear in \r
-# the documentation. If the initializer consists of more lines than specified \r
-# here it will be hidden. Use a value of 0 to hide initializers completely. \r
-# The appearance of the initializer of individual variables and defines in the \r
-# documentation can be controlled using \showinitializer or \hideinitializer \r
-# command in the documentation regardless of this setting.\r
-\r
-MAX_INITIALIZER_LINES  = 30\r
-\r
-# Set the SHOW_USED_FILES tag to NO to disable the list of files generated \r
-# at the bottom of the documentation of classes and structs. If set to YES the \r
-# list will mention the files that were used to generate the documentation.\r
-\r
-SHOW_USED_FILES        = YES\r
-\r
-# If the sources in your project are distributed over multiple directories \r
-# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy \r
-# in the documentation. The default is NO.\r
-\r
-SHOW_DIRECTORIES       = YES\r
-\r
-# Set the SHOW_FILES tag to NO to disable the generation of the Files page.\r
-# This will remove the Files entry from the Quick Index and from the \r
-# Folder Tree View (if specified). The default is YES.\r
-\r
-SHOW_FILES             = YES\r
-\r
-# Set the SHOW_NAMESPACES tag to NO to disable the generation of the \r
-# Namespaces page.  This will remove the Namespaces entry from the Quick Index\r
-# and from the Folder Tree View (if specified). The default is YES.\r
-\r
-SHOW_NAMESPACES        = YES\r
-\r
-# The FILE_VERSION_FILTER tag can be used to specify a program or script that \r
-# doxygen should invoke to get the current version for each file (typically from \r
-# the version control system). Doxygen will invoke the program by executing (via \r
-# popen()) the command <command> <input-file>, where <command> is the value of \r
-# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file \r
-# provided by doxygen. Whatever the program writes to standard output \r
-# is used as the file version. See the manual for examples.\r
-\r
-FILE_VERSION_FILTER    = \r
-\r
-# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by \r
-# doxygen. The layout file controls the global structure of the generated output files \r
-# in an output format independent way. The create the layout file that represents \r
-# doxygen's defaults, run doxygen with the -l option. You can optionally specify a \r
-# file name after the option, if omitted DoxygenLayout.xml will be used as the name \r
-# of the layout file.\r
-\r
-LAYOUT_FILE            = \r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to warning and progress messages\r
-#---------------------------------------------------------------------------\r
-\r
-# The QUIET tag can be used to turn on/off the messages that are generated \r
-# by doxygen. Possible values are YES and NO. If left blank NO is used.\r
-\r
-QUIET                  = YES\r
-\r
-# The WARNINGS tag can be used to turn on/off the warning messages that are \r
-# generated by doxygen. Possible values are YES and NO. If left blank \r
-# NO is used.\r
-\r
-WARNINGS               = YES\r
-\r
-# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings \r
-# for undocumented members. If EXTRACT_ALL is set to YES then this flag will \r
-# automatically be disabled.\r
-\r
-WARN_IF_UNDOCUMENTED   = YES\r
-\r
-# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for \r
-# potential errors in the documentation, such as not documenting some \r
-# parameters in a documented function, or documenting parameters that \r
-# don't exist or using markup commands wrongly.\r
-\r
-WARN_IF_DOC_ERROR      = YES\r
-\r
-# This WARN_NO_PARAMDOC option can be abled to get warnings for \r
-# functions that are documented, but have no documentation for their parameters \r
-# or return value. If set to NO (the default) doxygen will only warn about \r
-# wrong or incomplete parameter documentation, but not about the absence of \r
-# documentation.\r
-\r
-WARN_NO_PARAMDOC       = YES\r
-\r
-# The WARN_FORMAT tag determines the format of the warning messages that \r
-# doxygen can produce. The string should contain the $file, $line, and $text \r
-# tags, which will be replaced by the file and line number from which the \r
-# warning originated and the warning text. Optionally the format may contain \r
-# $version, which will be replaced by the version of the file (if it could \r
-# be obtained via FILE_VERSION_FILTER)\r
-\r
-WARN_FORMAT            = "$file:$line: $text"\r
-\r
-# The WARN_LOGFILE tag can be used to specify a file to which warning \r
-# and error messages should be written. If left blank the output is written \r
-# to stderr.\r
-\r
-WARN_LOGFILE           = \r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the input files\r
-#---------------------------------------------------------------------------\r
-\r
-# The INPUT tag can be used to specify the files and/or directories that contain \r
-# documented source files. You may enter file names like "myfile.cpp" or \r
-# directories like "/usr/src/myproject". Separate the files or directories \r
-# with spaces.\r
-\r
-INPUT                  = ./\r
-\r
-# This tag can be used to specify the character encoding of the source files \r
-# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is \r
-# also the default input encoding. Doxygen uses libiconv (or the iconv built \r
-# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for \r
-# the list of possible encodings.\r
-\r
-INPUT_ENCODING         = UTF-8\r
-\r
-# If the value of the INPUT tag contains directories, you can use the \r
-# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \r
-# and *.h) to filter out the source-files in the directories. If left \r
-# blank the following patterns are tested: \r
-# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx \r
-# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90\r
-\r
-FILE_PATTERNS          = *.h \\r
-                         *.c \\r
-                                                *.txt\r
-\r
-# The RECURSIVE tag can be used to turn specify whether or not subdirectories \r
-# should be searched for input files as well. Possible values are YES and NO. \r
-# If left blank NO is used.\r
-\r
-RECURSIVE              = YES\r
-\r
-# The EXCLUDE tag can be used to specify files and/or directories that should \r
-# excluded from the INPUT source files. This way you can easily exclude a \r
-# subdirectory from a directory tree whose root is specified with the INPUT tag.\r
-\r
-EXCLUDE                = \r
-\r
-# The EXCLUDE_SYMLINKS tag can be used select whether or not files or \r
-# directories that are symbolic links (a Unix filesystem feature) are excluded \r
-# from the input.\r
-\r
-EXCLUDE_SYMLINKS       = NO\r
-\r
-# If the value of the INPUT tag contains directories, you can use the \r
-# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude \r
-# certain files from those directories. Note that the wildcards are matched \r
-# against the file with absolute path, so to exclude all test directories \r
-# for example use the pattern */test/*\r
-\r
-EXCLUDE_PATTERNS       = */LowLevel/USBMode.h\r
-\r
-# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names \r
-# (namespaces, classes, functions, etc.) that should be excluded from the \r
-# output. The symbol name can be a fully qualified name, a word, or if the \r
-# wildcard * is used, a substring. Examples: ANamespace, AClass, \r
-# AClass::ANamespace, ANamespace::*Test\r
-\r
-EXCLUDE_SYMBOLS        = __*\r
-\r
-# The EXAMPLE_PATH tag can be used to specify one or more files or \r
-# directories that contain example code fragments that are included (see \r
-# the \include command).\r
-\r
-EXAMPLE_PATH           = \r
-\r
-# If the value of the EXAMPLE_PATH tag contains directories, you can use the \r
-# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \r
-# and *.h) to filter out the source-files in the directories. If left \r
-# blank all files are included.\r
-\r
-EXAMPLE_PATTERNS       = *\r
-\r
-# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be \r
-# searched for input files to be used with the \include or \dontinclude \r
-# commands irrespective of the value of the RECURSIVE tag. \r
-# Possible values are YES and NO. If left blank NO is used.\r
-\r
-EXAMPLE_RECURSIVE      = NO\r
-\r
-# The IMAGE_PATH tag can be used to specify one or more files or \r
-# directories that contain image that are included in the documentation (see \r
-# the \image command).\r
-\r
-IMAGE_PATH             = \r
-\r
-# The INPUT_FILTER tag can be used to specify a program that doxygen should \r
-# invoke to filter for each input file. Doxygen will invoke the filter program \r
-# by executing (via popen()) the command <filter> <input-file>, where <filter> \r
-# is the value of the INPUT_FILTER tag, and <input-file> is the name of an \r
-# input file. Doxygen will then use the output that the filter program writes \r
-# to standard output.  If FILTER_PATTERNS is specified, this tag will be \r
-# ignored.\r
-\r
-INPUT_FILTER           = \r
-\r
-# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern \r
-# basis.  Doxygen will compare the file name with each pattern and apply the \r
-# filter if there is a match.  The filters are a list of the form: \r
-# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further \r
-# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER \r
-# is applied to all files.\r
-\r
-FILTER_PATTERNS        = \r
-\r
-# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using \r
-# INPUT_FILTER) will be used to filter the input files when producing source \r
-# files to browse (i.e. when SOURCE_BROWSER is set to YES).\r
-\r
-FILTER_SOURCE_FILES    = NO\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to source browsing\r
-#---------------------------------------------------------------------------\r
-\r
-# If the SOURCE_BROWSER tag is set to YES then a list of source files will \r
-# be generated. Documented entities will be cross-referenced with these sources. \r
-# Note: To get rid of all source code in the generated output, make sure also \r
-# VERBATIM_HEADERS is set to NO.\r
-\r
-SOURCE_BROWSER         = NO\r
-\r
-# Setting the INLINE_SOURCES tag to YES will include the body \r
-# of functions and classes directly in the documentation.\r
-\r
-INLINE_SOURCES         = NO\r
-\r
-# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct \r
-# doxygen to hide any special comment blocks from generated source code \r
-# fragments. Normal C and C++ comments will always remain visible.\r
-\r
-STRIP_CODE_COMMENTS    = YES\r
-\r
-# If the REFERENCED_BY_RELATION tag is set to YES \r
-# then for each documented function all documented \r
-# functions referencing it will be listed.\r
-\r
-REFERENCED_BY_RELATION = NO\r
-\r
-# If the REFERENCES_RELATION tag is set to YES \r
-# then for each documented function all documented entities \r
-# called/used by that function will be listed.\r
-\r
-REFERENCES_RELATION    = NO\r
-\r
-# If the REFERENCES_LINK_SOURCE tag is set to YES (the default)\r
-# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from\r
-# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will\r
-# link to the source code.  Otherwise they will link to the documentstion.\r
-\r
-REFERENCES_LINK_SOURCE = NO\r
-\r
-# If the USE_HTAGS tag is set to YES then the references to source code \r
-# will point to the HTML generated by the htags(1) tool instead of doxygen \r
-# built-in source browser. The htags tool is part of GNU's global source \r
-# tagging system (see http://www.gnu.org/software/global/global.html). You \r
-# will need version 4.8.6 or higher.\r
-\r
-USE_HTAGS              = NO\r
-\r
-# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen \r
-# will generate a verbatim copy of the header file for each class for \r
-# which an include is specified. Set to NO to disable this.\r
-\r
-VERBATIM_HEADERS       = NO\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the alphabetical class index\r
-#---------------------------------------------------------------------------\r
-\r
-# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index \r
-# of all compounds will be generated. Enable this if the project \r
-# contains a lot of classes, structs, unions or interfaces.\r
-\r
-ALPHABETICAL_INDEX     = YES\r
-\r
-# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then \r
-# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns \r
-# in which this list will be split (can be a number in the range [1..20])\r
-\r
-COLS_IN_ALPHA_INDEX    = 5\r
-\r
-# In case all classes in a project start with a common prefix, all \r
-# classes will be put under the same header in the alphabetical index. \r
-# The IGNORE_PREFIX tag can be used to specify one or more prefixes that \r
-# should be ignored while generating the index headers.\r
-\r
-IGNORE_PREFIX          = \r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the HTML output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_HTML tag is set to YES (the default) Doxygen will \r
-# generate HTML output.\r
-\r
-GENERATE_HTML          = YES\r
-\r
-# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. \r
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
-# put in front of it. If left blank `html' will be used as the default path.\r
-\r
-HTML_OUTPUT            = html\r
-\r
-# The HTML_FILE_EXTENSION tag can be used to specify the file extension for \r
-# each generated HTML page (for example: .htm,.php,.asp). If it is left blank \r
-# doxygen will generate files with .html extension.\r
-\r
-HTML_FILE_EXTENSION    = .html\r
-\r
-# The HTML_HEADER tag can be used to specify a personal HTML header for \r
-# each generated HTML page. If it is left blank doxygen will generate a \r
-# standard header.\r
-\r
-HTML_HEADER            = \r
-\r
-# The HTML_FOOTER tag can be used to specify a personal HTML footer for \r
-# each generated HTML page. If it is left blank doxygen will generate a \r
-# standard footer.\r
-\r
-HTML_FOOTER            = \r
-\r
-# The HTML_STYLESHEET tag can be used to specify a user-defined cascading \r
-# style sheet that is used by each HTML page. It can be used to \r
-# fine-tune the look of the HTML output. If the tag is left blank doxygen \r
-# will generate a default style sheet. Note that doxygen will try to copy \r
-# the style sheet file to the HTML output directory, so don't put your own \r
-# stylesheet in the HTML output directory as well, or it will be erased!\r
-\r
-HTML_STYLESHEET        = \r
-\r
-# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, \r
-# files or namespaces will be aligned in HTML using tables. If set to \r
-# NO a bullet list will be used.\r
-\r
-HTML_ALIGN_MEMBERS     = YES\r
-\r
-# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML \r
-# documentation will contain sections that can be hidden and shown after the \r
-# page has loaded. For this to work a browser that supports \r
-# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox \r
-# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari).\r
-\r
-HTML_DYNAMIC_SECTIONS  = YES\r
-\r
-# If the GENERATE_DOCSET tag is set to YES, additional index files \r
-# will be generated that can be used as input for Apple's Xcode 3 \r
-# integrated development environment, introduced with OSX 10.5 (Leopard). \r
-# To create a documentation set, doxygen will generate a Makefile in the \r
-# HTML output directory. Running make will produce the docset in that \r
-# directory and running "make install" will install the docset in \r
-# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find \r
-# it at startup. \r
-# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information.\r
-\r
-GENERATE_DOCSET        = NO\r
-\r
-# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the \r
-# feed. A documentation feed provides an umbrella under which multiple \r
-# documentation sets from a single provider (such as a company or product suite) \r
-# can be grouped.\r
-\r
-DOCSET_FEEDNAME        = "Doxygen generated docs"\r
-\r
-# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that \r
-# should uniquely identify the documentation set bundle. This should be a \r
-# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen \r
-# will append .docset to the name.\r
-\r
-DOCSET_BUNDLE_ID       = org.doxygen.Project\r
-\r
-# If the GENERATE_HTMLHELP tag is set to YES, additional index files \r
-# will be generated that can be used as input for tools like the \r
-# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) \r
-# of the generated HTML documentation.\r
-\r
-GENERATE_HTMLHELP      = NO\r
-\r
-# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can \r
-# be used to specify the file name of the resulting .chm file. You \r
-# can add a path in front of the file if the result should not be \r
-# written to the html output directory.\r
-\r
-CHM_FILE               = \r
-\r
-# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can \r
-# be used to specify the location (absolute path including file name) of \r
-# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run \r
-# the HTML help compiler on the generated index.hhp.\r
-\r
-HHC_LOCATION           = \r
-\r
-# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag \r
-# controls if a separate .chi index file is generated (YES) or that \r
-# it should be included in the master .chm file (NO).\r
-\r
-GENERATE_CHI           = NO\r
-\r
-# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING\r
-# is used to encode HtmlHelp index (hhk), content (hhc) and project file\r
-# content.\r
-\r
-CHM_INDEX_ENCODING     = \r
-\r
-# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag \r
-# controls whether a binary table of contents is generated (YES) or a \r
-# normal table of contents (NO) in the .chm file.\r
-\r
-BINARY_TOC             = NO\r
-\r
-# The TOC_EXPAND flag can be set to YES to add extra items for group members \r
-# to the contents of the HTML help documentation and to the tree view.\r
-\r
-TOC_EXPAND             = YES\r
-\r
-# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER \r
-# are set, an additional index file will be generated that can be used as input for \r
-# Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated \r
-# HTML documentation.\r
-\r
-GENERATE_QHP           = NO\r
-\r
-# If the QHG_LOCATION tag is specified, the QCH_FILE tag can \r
-# be used to specify the file name of the resulting .qch file. \r
-# The path specified is relative to the HTML output folder.\r
-\r
-QCH_FILE               = \r
-\r
-# The QHP_NAMESPACE tag specifies the namespace to use when generating \r
-# Qt Help Project output. For more information please see \r
-# <a href="http://doc.trolltech.com/qthelpproject.html#namespace">Qt Help Project / Namespace</a>.\r
-\r
-QHP_NAMESPACE          = org.doxygen.Project\r
-\r
-# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating \r
-# Qt Help Project output. For more information please see \r
-# <a href="http://doc.trolltech.com/qthelpproject.html#virtual-folders">Qt Help Project / Virtual Folders</a>.\r
-\r
-QHP_VIRTUAL_FOLDER     = doc\r
-\r
-# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can \r
-# be used to specify the location of Qt's qhelpgenerator. \r
-# If non-empty doxygen will try to run qhelpgenerator on the generated \r
-# .qhp file .\r
-\r
-QHG_LOCATION           = \r
-\r
-# The DISABLE_INDEX tag can be used to turn on/off the condensed index at \r
-# top of each HTML page. The value NO (the default) enables the index and \r
-# the value YES disables it.\r
-\r
-DISABLE_INDEX          = NO\r
-\r
-# This tag can be used to set the number of enum values (range [1..20]) \r
-# that doxygen will group on one line in the generated HTML documentation.\r
-\r
-ENUM_VALUES_PER_LINE   = 1\r
-\r
-# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index\r
-# structure should be generated to display hierarchical information.\r
-# If the tag value is set to FRAME, a side panel will be generated\r
-# containing a tree-like index structure (just like the one that \r
-# is generated for HTML Help). For this to work a browser that supports \r
-# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, \r
-# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are \r
-# probably better off using the HTML help feature. Other possible values \r
-# for this tag are: HIERARCHIES, which will generate the Groups, Directories,\r
-# and Class Hierarchy pages using a tree view instead of an ordered list;\r
-# ALL, which combines the behavior of FRAME and HIERARCHIES; and NONE, which\r
-# disables this behavior completely. For backwards compatibility with previous\r
-# releases of Doxygen, the values YES and NO are equivalent to FRAME and NONE\r
-# respectively.\r
-\r
-GENERATE_TREEVIEW      = YES\r
-\r
-# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be \r
-# used to set the initial width (in pixels) of the frame in which the tree \r
-# is shown.\r
-\r
-TREEVIEW_WIDTH         = 250\r
-\r
-# Use this tag to change the font size of Latex formulas included \r
-# as images in the HTML documentation. The default is 10. Note that \r
-# when you change the font size after a successful doxygen run you need \r
-# to manually remove any form_*.png images from the HTML output directory \r
-# to force them to be regenerated.\r
-\r
-FORMULA_FONTSIZE       = 10\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the LaTeX output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will \r
-# generate Latex output.\r
-\r
-GENERATE_LATEX         = NO\r
-\r
-# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. \r
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
-# put in front of it. If left blank `latex' will be used as the default path.\r
-\r
-LATEX_OUTPUT           = latex\r
-\r
-# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be \r
-# invoked. If left blank `latex' will be used as the default command name.\r
-\r
-LATEX_CMD_NAME         = latex\r
-\r
-# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to \r
-# generate index for LaTeX. If left blank `makeindex' will be used as the \r
-# default command name.\r
-\r
-MAKEINDEX_CMD_NAME     = makeindex\r
-\r
-# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact \r
-# LaTeX documents. This may be useful for small projects and may help to \r
-# save some trees in general.\r
-\r
-COMPACT_LATEX          = NO\r
-\r
-# The PAPER_TYPE tag can be used to set the paper type that is used \r
-# by the printer. Possible values are: a4, a4wide, letter, legal and \r
-# executive. If left blank a4wide will be used.\r
-\r
-PAPER_TYPE             = a4wide\r
-\r
-# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX \r
-# packages that should be included in the LaTeX output.\r
-\r
-EXTRA_PACKAGES         = \r
-\r
-# The LATEX_HEADER tag can be used to specify a personal LaTeX header for \r
-# the generated latex document. The header should contain everything until \r
-# the first chapter. If it is left blank doxygen will generate a \r
-# standard header. Notice: only use this tag if you know what you are doing!\r
-\r
-LATEX_HEADER           = \r
-\r
-# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated \r
-# is prepared for conversion to pdf (using ps2pdf). The pdf file will \r
-# contain links (just like the HTML output) instead of page references \r
-# This makes the output suitable for online browsing using a pdf viewer.\r
-\r
-PDF_HYPERLINKS         = YES\r
-\r
-# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of \r
-# plain latex in the generated Makefile. Set this option to YES to get a \r
-# higher quality PDF documentation.\r
-\r
-USE_PDFLATEX           = YES\r
-\r
-# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. \r
-# command to the generated LaTeX files. This will instruct LaTeX to keep \r
-# running if errors occur, instead of asking the user for help. \r
-# This option is also used when generating formulas in HTML.\r
-\r
-LATEX_BATCHMODE        = NO\r
-\r
-# If LATEX_HIDE_INDICES is set to YES then doxygen will not \r
-# include the index chapters (such as File Index, Compound Index, etc.) \r
-# in the output.\r
-\r
-LATEX_HIDE_INDICES     = NO\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the RTF output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output \r
-# The RTF output is optimized for Word 97 and may not look very pretty with \r
-# other RTF readers or editors.\r
-\r
-GENERATE_RTF           = NO\r
-\r
-# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. \r
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
-# put in front of it. If left blank `rtf' will be used as the default path.\r
-\r
-RTF_OUTPUT             = rtf\r
-\r
-# If the COMPACT_RTF tag is set to YES Doxygen generates more compact \r
-# RTF documents. This may be useful for small projects and may help to \r
-# save some trees in general.\r
-\r
-COMPACT_RTF            = NO\r
-\r
-# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated \r
-# will contain hyperlink fields. The RTF file will \r
-# contain links (just like the HTML output) instead of page references. \r
-# This makes the output suitable for online browsing using WORD or other \r
-# programs which support those fields. \r
-# Note: wordpad (write) and others do not support links.\r
-\r
-RTF_HYPERLINKS         = NO\r
-\r
-# Load stylesheet definitions from file. Syntax is similar to doxygen's \r
-# config file, i.e. a series of assignments. You only have to provide \r
-# replacements, missing definitions are set to their default value.\r
-\r
-RTF_STYLESHEET_FILE    = \r
-\r
-# Set optional variables used in the generation of an rtf document. \r
-# Syntax is similar to doxygen's config file.\r
-\r
-RTF_EXTENSIONS_FILE    = \r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the man page output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_MAN tag is set to YES (the default) Doxygen will \r
-# generate man pages\r
-\r
-GENERATE_MAN           = NO\r
-\r
-# The MAN_OUTPUT tag is used to specify where the man pages will be put. \r
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
-# put in front of it. If left blank `man' will be used as the default path.\r
-\r
-MAN_OUTPUT             = man\r
-\r
-# The MAN_EXTENSION tag determines the extension that is added to \r
-# the generated man pages (default is the subroutine's section .3)\r
-\r
-MAN_EXTENSION          = .3\r
-\r
-# If the MAN_LINKS tag is set to YES and Doxygen generates man output, \r
-# then it will generate one additional man file for each entity \r
-# documented in the real man page(s). These additional files \r
-# only source the real man page, but without them the man command \r
-# would be unable to find the correct page. The default is NO.\r
-\r
-MAN_LINKS              = NO\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the XML output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_XML tag is set to YES Doxygen will \r
-# generate an XML file that captures the structure of \r
-# the code including all documentation.\r
-\r
-GENERATE_XML           = NO\r
-\r
-# The XML_OUTPUT tag is used to specify where the XML pages will be put. \r
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
-# put in front of it. If left blank `xml' will be used as the default path.\r
-\r
-XML_OUTPUT             = xml\r
-\r
-# The XML_SCHEMA tag can be used to specify an XML schema, \r
-# which can be used by a validating XML parser to check the \r
-# syntax of the XML files.\r
-\r
-XML_SCHEMA             = \r
-\r
-# The XML_DTD tag can be used to specify an XML DTD, \r
-# which can be used by a validating XML parser to check the \r
-# syntax of the XML files.\r
-\r
-XML_DTD                = \r
-\r
-# If the XML_PROGRAMLISTING tag is set to YES Doxygen will \r
-# dump the program listings (including syntax highlighting \r
-# and cross-referencing information) to the XML output. Note that \r
-# enabling this will significantly increase the size of the XML output.\r
-\r
-XML_PROGRAMLISTING     = YES\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options for the AutoGen Definitions output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will \r
-# generate an AutoGen Definitions (see autogen.sf.net) file \r
-# that captures the structure of the code including all \r
-# documentation. Note that this feature is still experimental \r
-# and incomplete at the moment.\r
-\r
-GENERATE_AUTOGEN_DEF   = NO\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the Perl module output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_PERLMOD tag is set to YES Doxygen will \r
-# generate a Perl module file that captures the structure of \r
-# the code including all documentation. Note that this \r
-# feature is still experimental and incomplete at the \r
-# moment.\r
-\r
-GENERATE_PERLMOD       = NO\r
-\r
-# If the PERLMOD_LATEX tag is set to YES Doxygen will generate \r
-# the necessary Makefile rules, Perl scripts and LaTeX code to be able \r
-# to generate PDF and DVI output from the Perl module output.\r
-\r
-PERLMOD_LATEX          = NO\r
-\r
-# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be \r
-# nicely formatted so it can be parsed by a human reader.  This is useful \r
-# if you want to understand what is going on.  On the other hand, if this \r
-# tag is set to NO the size of the Perl module output will be much smaller \r
-# and Perl will parse it just the same.\r
-\r
-PERLMOD_PRETTY         = YES\r
-\r
-# The names of the make variables in the generated doxyrules.make file \r
-# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. \r
-# This is useful so different doxyrules.make files included by the same \r
-# Makefile don't overwrite each other's variables.\r
-\r
-PERLMOD_MAKEVAR_PREFIX = \r
-\r
-#---------------------------------------------------------------------------\r
-# Configuration options related to the preprocessor   \r
-#---------------------------------------------------------------------------\r
-\r
-# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will \r
-# evaluate all C-preprocessor directives found in the sources and include \r
-# files.\r
-\r
-ENABLE_PREPROCESSING   = YES\r
-\r
-# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro \r
-# names in the source code. If set to NO (the default) only conditional \r
-# compilation will be performed. Macro expansion can be done in a controlled \r
-# way by setting EXPAND_ONLY_PREDEF to YES.\r
-\r
-MACRO_EXPANSION        = YES\r
-\r
-# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES \r
-# then the macro expansion is limited to the macros specified with the \r
-# PREDEFINED and EXPAND_AS_DEFINED tags.\r
-\r
-EXPAND_ONLY_PREDEF     = YES\r
-\r
-# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files \r
-# in the INCLUDE_PATH (see below) will be search if a #include is found.\r
-\r
-SEARCH_INCLUDES        = YES\r
-\r
-# The INCLUDE_PATH tag can be used to specify one or more directories that \r
-# contain include files that are not input files but should be processed by \r
-# the preprocessor.\r
-\r
-INCLUDE_PATH           = \r
-\r
-# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard \r
-# patterns (like *.h and *.hpp) to filter out the header-files in the \r
-# directories. If left blank, the patterns specified with FILE_PATTERNS will \r
-# be used.\r
-\r
-INCLUDE_FILE_PATTERNS  = \r
-\r
-# The PREDEFINED tag can be used to specify one or more macro names that \r
-# are defined before the preprocessor is started (similar to the -D option of \r
-# gcc). The argument of the tag is a list of macros of the form: name \r
-# or name=definition (no spaces). If the definition and the = are \r
-# omitted =1 is assumed. To prevent a macro definition from being \r
-# undefined via #undef or recursively expanded use the := operator \r
-# instead of the = operator.\r
-\r
-PREDEFINED             = __DOXYGEN__\r
-\r
-# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then \r
-# this tag can be used to specify a list of macro names that should be expanded. \r
-# The macro definition that is found in the sources will be used. \r
-# Use the PREDEFINED tag if you want to use a different macro definition.\r
-\r
-EXPAND_AS_DEFINED      = BUTTLOADTAG\r
-\r
-# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then \r
-# doxygen's preprocessor will remove all function-like macros that are alone \r
-# on a line, have an all uppercase name, and do not end with a semicolon. Such \r
-# function macros are typically used for boiler-plate code, and will confuse \r
-# the parser if not removed.\r
-\r
-SKIP_FUNCTION_MACROS   = YES\r
-\r
-#---------------------------------------------------------------------------\r
-# Configuration::additions related to external references   \r
-#---------------------------------------------------------------------------\r
-\r
-# The TAGFILES option can be used to specify one or more tagfiles. \r
-# Optionally an initial location of the external documentation \r
-# can be added for each tagfile. The format of a tag file without \r
-# this location is as follows: \r
-#   TAGFILES = file1 file2 ... \r
-# Adding location for the tag files is done as follows: \r
-#   TAGFILES = file1=loc1 "file2 = loc2" ... \r
-# where "loc1" and "loc2" can be relative or absolute paths or \r
-# URLs. If a location is present for each tag, the installdox tool \r
-# does not have to be run to correct the links.\r
-# Note that each tag file must have a unique name\r
-# (where the name does NOT include the path)\r
-# If a tag file is not located in the directory in which doxygen \r
-# is run, you must also specify the path to the tagfile here.\r
-\r
-TAGFILES               = \r
-\r
-# When a file name is specified after GENERATE_TAGFILE, doxygen will create \r
-# a tag file that is based on the input files it reads.\r
-\r
-GENERATE_TAGFILE       = \r
-\r
-# If the ALLEXTERNALS tag is set to YES all external classes will be listed \r
-# in the class index. If set to NO only the inherited external classes \r
-# will be listed.\r
-\r
-ALLEXTERNALS           = NO\r
-\r
-# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed \r
-# in the modules index. If set to NO, only the current project's groups will \r
-# be listed.\r
-\r
-EXTERNAL_GROUPS        = YES\r
-\r
-# The PERL_PATH should be the absolute path and name of the perl script \r
-# interpreter (i.e. the result of `which perl').\r
-\r
-PERL_PATH              = /usr/bin/perl\r
-\r
-#---------------------------------------------------------------------------\r
-# Configuration options related to the dot tool   \r
-#---------------------------------------------------------------------------\r
-\r
-# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will \r
-# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base \r
-# or super classes. Setting the tag to NO turns the diagrams off. Note that \r
-# this option is superseded by the HAVE_DOT option below. This is only a \r
-# fallback. It is recommended to install and use dot, since it yields more \r
-# powerful graphs.\r
-\r
-CLASS_DIAGRAMS         = NO\r
-\r
-# You can define message sequence charts within doxygen comments using the \msc \r
-# command. Doxygen will then run the mscgen tool (see \r
-# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the \r
-# documentation. The MSCGEN_PATH tag allows you to specify the directory where \r
-# the mscgen tool resides. If left empty the tool is assumed to be found in the \r
-# default search path.\r
-\r
-MSCGEN_PATH            = \r
-\r
-# If set to YES, the inheritance and collaboration graphs will hide \r
-# inheritance and usage relations if the target is undocumented \r
-# or is not a class.\r
-\r
-HIDE_UNDOC_RELATIONS   = YES\r
-\r
-# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is \r
-# available from the path. This tool is part of Graphviz, a graph visualization \r
-# toolkit from AT&T and Lucent Bell Labs. The other options in this section \r
-# have no effect if this option is set to NO (the default)\r
-\r
-HAVE_DOT               = NO\r
-\r
-# By default doxygen will write a font called FreeSans.ttf to the output \r
-# directory and reference it in all dot files that doxygen generates. This \r
-# font does not include all possible unicode characters however, so when you need \r
-# these (or just want a differently looking font) you can specify the font name \r
-# using DOT_FONTNAME. You need need to make sure dot is able to find the font, \r
-# which can be done by putting it in a standard location or by setting the \r
-# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory \r
-# containing the font.\r
-\r
-DOT_FONTNAME           = FreeSans\r
-\r
-# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. \r
-# The default size is 10pt.\r
-\r
-DOT_FONTSIZE           = 10\r
-\r
-# By default doxygen will tell dot to use the output directory to look for the \r
-# FreeSans.ttf font (which doxygen will put there itself). If you specify a \r
-# different font using DOT_FONTNAME you can set the path where dot \r
-# can find it using this tag.\r
-\r
-DOT_FONTPATH           = \r
-\r
-# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen \r
-# will generate a graph for each documented class showing the direct and \r
-# indirect inheritance relations. Setting this tag to YES will force the \r
-# the CLASS_DIAGRAMS tag to NO.\r
-\r
-CLASS_GRAPH            = NO\r
-\r
-# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen \r
-# will generate a graph for each documented class showing the direct and \r
-# indirect implementation dependencies (inheritance, containment, and \r
-# class references variables) of the class with other documented classes.\r
-\r
-COLLABORATION_GRAPH    = NO\r
-\r
-# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen \r
-# will generate a graph for groups, showing the direct groups dependencies\r
-\r
-GROUP_GRAPHS           = NO\r
-\r
-# If the UML_LOOK tag is set to YES doxygen will generate inheritance and \r
-# collaboration diagrams in a style similar to the OMG's Unified Modeling \r
-# Language.\r
-\r
-UML_LOOK               = NO\r
-\r
-# If set to YES, the inheritance and collaboration graphs will show the \r
-# relations between templates and their instances.\r
-\r
-TEMPLATE_RELATIONS     = NO\r
-\r
-# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT \r
-# tags are set to YES then doxygen will generate a graph for each documented \r
-# file showing the direct and indirect include dependencies of the file with \r
-# other documented files.\r
-\r
-INCLUDE_GRAPH          = NO\r
-\r
-# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and \r
-# HAVE_DOT tags are set to YES then doxygen will generate a graph for each \r
-# documented header file showing the documented files that directly or \r
-# indirectly include this file.\r
-\r
-INCLUDED_BY_GRAPH      = NO\r
-\r
-# If the CALL_GRAPH and HAVE_DOT options are set to YES then \r
-# doxygen will generate a call dependency graph for every global function \r
-# or class method. Note that enabling this option will significantly increase \r
-# the time of a run. So in most cases it will be better to enable call graphs \r
-# for selected functions only using the \callgraph command.\r
-\r
-CALL_GRAPH             = NO\r
-\r
-# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then \r
-# doxygen will generate a caller dependency graph for every global function \r
-# or class method. Note that enabling this option will significantly increase \r
-# the time of a run. So in most cases it will be better to enable caller \r
-# graphs for selected functions only using the \callergraph command.\r
-\r
-CALLER_GRAPH           = NO\r
-\r
-# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen \r
-# will graphical hierarchy of all classes instead of a textual one.\r
-\r
-GRAPHICAL_HIERARCHY    = NO\r
-\r
-# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES \r
-# then doxygen will show the dependencies a directory has on other directories \r
-# in a graphical way. The dependency relations are determined by the #include\r
-# relations between the files in the directories.\r
-\r
-DIRECTORY_GRAPH        = NO\r
-\r
-# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images \r
-# generated by dot. Possible values are png, jpg, or gif\r
-# If left blank png will be used.\r
-\r
-DOT_IMAGE_FORMAT       = png\r
-\r
-# The tag DOT_PATH can be used to specify the path where the dot tool can be \r
-# found. If left blank, it is assumed the dot tool can be found in the path.\r
-\r
-DOT_PATH               = "C:/Program Files/Graphviz2.18/bin"\r
-\r
-# The DOTFILE_DIRS tag can be used to specify one or more directories that \r
-# contain dot files that are included in the documentation (see the \r
-# \dotfile command).\r
-\r
-DOTFILE_DIRS           = \r
-\r
-# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of \r
-# nodes that will be shown in the graph. If the number of nodes in a graph \r
-# becomes larger than this value, doxygen will truncate the graph, which is \r
-# visualized by representing a node as a red box. Note that doxygen if the \r
-# number of direct children of the root node in a graph is already larger than \r
-# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note \r
-# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.\r
-\r
-DOT_GRAPH_MAX_NODES    = 15\r
-\r
-# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the \r
-# graphs generated by dot. A depth value of 3 means that only nodes reachable \r
-# from the root by following a path via at most 3 edges will be shown. Nodes \r
-# that lay further from the root node will be omitted. Note that setting this \r
-# option to 1 or 2 may greatly reduce the computation time needed for large \r
-# code bases. Also note that the size of a graph can be further restricted by \r
-# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.\r
-\r
-MAX_DOT_GRAPH_DEPTH    = 2\r
-\r
-# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent \r
-# background. This is disabled by default, because dot on Windows does not \r
-# seem to support this out of the box. Warning: Depending on the platform used, \r
-# enabling this option may lead to badly anti-aliased labels on the edges of \r
-# a graph (i.e. they become hard to read).\r
-\r
-DOT_TRANSPARENT        = YES\r
-\r
-# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output \r
-# files in one run (i.e. multiple -o and -T options on the command line). This \r
-# makes dot run faster, but since only newer versions of dot (>1.8.10) \r
-# support this, this feature is disabled by default.\r
-\r
-DOT_MULTI_TARGETS      = NO\r
-\r
-# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will \r
-# generate a legend page explaining the meaning of the various boxes and \r
-# arrows in the dot generated graphs.\r
-\r
-GENERATE_LEGEND        = YES\r
-\r
-# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will \r
-# remove the intermediate dot files that are used to generate \r
-# the various graphs.\r
-\r
-DOT_CLEANUP            = YES\r
-\r
-#---------------------------------------------------------------------------\r
-# Configuration::additions related to the search engine   \r
-#---------------------------------------------------------------------------\r
-\r
-# The SEARCHENGINE tag specifies whether or not a search engine should be \r
-# used. If set to NO the values of all tags below this one will be ignored.\r
-\r
-SEARCHENGINE           = NO\r
diff --git a/Demos/Device/AudioInput/makefile b/Demos/Device/AudioInput/makefile
deleted file mode 100644 (file)
index 9d3adff..0000000
+++ /dev/null
@@ -1,733 +0,0 @@
-# Hey Emacs, this is a -*- makefile -*-\r
-#----------------------------------------------------------------------------\r
-# WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al.\r
-#  >> Modified for use with the LUFA project. <<\r
-#\r
-# Released to the Public Domain\r
-#\r
-# Additional material for this makefile was written by:\r
-# Peter Fleury\r
-# Tim Henigan\r
-# Colin O'Flynn\r
-# Reiner Patommel\r
-# Markus Pfaff\r
-# Sander Pool\r
-# Frederik Rouleau\r
-# Carlos Lamas\r
-# Dean Camera\r
-# Opendous Inc.\r
-# Denver Gingerich\r
-#\r
-#----------------------------------------------------------------------------\r
-# On command line:\r
-#\r
-# make all = Make software.\r
-#\r
-# make clean = Clean out built project files.\r
-#\r
-# make coff = Convert ELF to AVR COFF.\r
-#\r
-# make extcoff = Convert ELF to AVR Extended COFF.\r
-#\r
-# make program = Download the hex file to the device, using avrdude.\r
-#                Please customize the avrdude settings below first!\r
-#\r
-# make dfu = Download the hex file to the device, using dfu-programmer (must\r
-#            have dfu-programmer installed).\r
-#\r
-# make flip = Download the hex file to the device, using Atmel FLIP (must\r
-#             have Atmel FLIP installed).\r
-#\r
-# make dfu-ee = Download the eeprom file to the device, using dfu-programmer\r
-#               (must have dfu-programmer installed).\r
-#\r
-# make flip-ee = Download the eeprom file to the device, using Atmel FLIP\r
-#                (must have Atmel FLIP installed).\r
-#\r
-# make doxygen = Generate DoxyGen documentation for the project (must have\r
-#                DoxyGen installed)\r
-#\r
-# make debug = Start either simulavr or avarice as specified for debugging, \r
-#              with avr-gdb or avr-insight as the front end for debugging.\r
-#\r
-# make filename.s = Just compile filename.c into the assembler code only.\r
-#\r
-# make filename.i = Create a preprocessed source file for use in submitting\r
-#                   bug reports to the GCC project.\r
-#\r
-# To rebuild project do "make clean" then "make all".\r
-#----------------------------------------------------------------------------\r
-\r
-\r
-# MCU name\r
-MCU = at90usb1287\r
-\r
-\r
-# Target board (see library "Board Types" documentation, USER or blank for projects not requiring\r
-# LUFA board drivers). If USER is selected, put custom board drivers in a directory called \r
-# "Board" inside the application directory.\r
-BOARD  = USBKEY\r
-\r
-\r
-# Processor frequency.\r
-#     This will define a symbol, F_CPU, in all source code files equal to the \r
-#     processor frequency. You can then use this symbol in your source code to \r
-#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done\r
-#     automatically to create a 32-bit value in your source code.\r
-#     Typical values are:\r
-#         F_CPU =  1000000\r
-#         F_CPU =  1843200\r
-#         F_CPU =  2000000\r
-#         F_CPU =  3686400\r
-#         F_CPU =  4000000\r
-#         F_CPU =  7372800\r
-#         F_CPU =  8000000\r
-#         F_CPU = 11059200\r
-#         F_CPU = 14745600\r
-#         F_CPU = 16000000\r
-#         F_CPU = 18432000\r
-#         F_CPU = 20000000\r
-F_CPU = 8000000\r
-\r
-\r
-# Input clock frequency.\r
-#     This will define a symbol, F_CLOCK, in all source code files equal to the \r
-#     input clock frequency (before any prescaling is performed). This value may\r
-#     differ from F_CPU if prescaling is used on the latter, and is required as the\r
-#     raw input clock is fed directly to the PLL sections of the AVR for high speed\r
-#     clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'\r
-#     at the end, this will be done automatically to create a 32-bit value in your\r
-#     source code.\r
-#\r
-#     If no clock division is performed on the input clock inside the AVR (via the\r
-#     CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.\r
-F_CLOCK = 8000000\r
-\r
-\r
-# Output format. (can be srec, ihex, binary)\r
-FORMAT = ihex\r
-\r
-\r
-# Target file name (without extension).\r
-TARGET = AudioInput\r
-\r
-\r
-# Object files directory\r
-#     To put object files in current directory, use a dot (.), do NOT make\r
-#     this an empty or blank macro!\r
-OBJDIR = .\r
-\r
-\r
-# Path to the LUFA library\r
-LUFA_PATH = ../../..\r
-\r
-\r
-# List C source files here. (C dependencies are automatically generated.)\r
-SRC = $(TARGET).c                                                 \\r
-         Descriptors.c                                               \\r
-         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/DevChapter9.c        \\r
-         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Endpoint.c           \\r
-         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Host.c               \\r
-         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/HostChapter9.c       \\r
-         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/LowLevel.c           \\r
-         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Pipe.c               \\r
-         $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/Events.c            \\r
-         $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBInterrupt.c      \\r
-         $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBTask.c           \\r
-         $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/ConfigDescriptor.c  \\r
-         $(LUFA_PATH)/LUFA/Drivers/USB/Class/Device/Audio.c          \\r
-\r
-\r
-# List C++ source files here. (C dependencies are automatically generated.)\r
-CPPSRC = \r
-\r
-\r
-# List Assembler source files here.\r
-#     Make them always end in a capital .S.  Files ending in a lowercase .s\r
-#     will not be considered source files but generated files (assembler\r
-#     output from the compiler), and will be deleted upon "make clean"!\r
-#     Even though the DOS/Win* filesystem matches both .s and .S the same,\r
-#     it will preserve the spelling of the filenames, and gcc itself does\r
-#     care about how the name is spelled on its command-line.\r
-ASRC =\r
-\r
-\r
-# Optimization level, can be [0, 1, 2, 3, s]. \r
-#     0 = turn off optimization. s = optimize for size.\r
-#     (Note: 3 is not always the best optimization level. See avr-libc FAQ.)\r
-OPT = s\r
-\r
-\r
-# Debugging format.\r
-#     Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs.\r
-#     AVR Studio 4.10 requires dwarf-2.\r
-#     AVR [Extended] COFF format requires stabs, plus an avr-objcopy run.\r
-DEBUG = dwarf-2\r
-\r
-\r
-# List any extra directories to look for include files here.\r
-#     Each directory must be seperated by a space.\r
-#     Use forward slashes for directory separators.\r
-#     For a directory that has spaces, enclose it in quotes.\r
-EXTRAINCDIRS = $(LUFA_PATH)/\r
-\r
-\r
-# Compiler flag to set the C Standard level.\r
-#     c89   = "ANSI" C\r
-#     gnu89 = c89 plus GCC extensions\r
-#     c99   = ISO C99 standard (not yet fully implemented)\r
-#     gnu99 = c99 plus GCC extensions\r
-CSTANDARD = -std=gnu99\r
-\r
-\r
-# Place -D or -U options here for C sources\r
-CDEFS  = -DF_CPU=$(F_CPU)UL -DF_CLOCK=$(F_CLOCK)UL -DBOARD=BOARD_$(BOARD)\r
-CDEFS += -DUSE_NONSTANDARD_DESCRIPTOR_NAMES -DNO_STREAM_CALLBACKS -DUSB_DEVICE_ONLY\r
-CDEFS += -DFIXED_CONTROL_ENDPOINT_SIZE=8 -DUSE_SINGLE_DEVICE_CONFIGURATION\r
-CDEFS += -DUSE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)"\r
-\r
-\r
-# Place -D or -U options here for ASM sources\r
-ADEFS = -DF_CPU=$(F_CPU)\r
-\r
-\r
-# Place -D or -U options here for C++ sources\r
-CPPDEFS = -DF_CPU=$(F_CPU)UL\r
-#CPPDEFS += -D__STDC_LIMIT_MACROS\r
-#CPPDEFS += -D__STDC_CONSTANT_MACROS\r
-\r
-\r
-\r
-#---------------- Compiler Options C ----------------\r
-#  -g*:          generate debugging information\r
-#  -O*:          optimization level\r
-#  -f...:        tuning, see GCC manual and avr-libc documentation\r
-#  -Wall...:     warning level\r
-#  -Wa,...:      tell GCC to pass this to the assembler.\r
-#    -adhlns...: create assembler listing\r
-CFLAGS = -g$(DEBUG)\r
-CFLAGS += $(CDEFS)\r
-CFLAGS += -O$(OPT)\r
-CFLAGS += -funsigned-char\r
-CFLAGS += -funsigned-bitfields\r
-CFLAGS += -ffunction-sections\r
-CFLAGS += -fpack-struct\r
-CFLAGS += -fshort-enums\r
-CFLAGS += -finline-limit=20\r
-CFLAGS += -Wall\r
-CFLAGS += -Wstrict-prototypes\r
-CFLAGS += -Wundef\r
-#CFLAGS += -fno-unit-at-a-time\r
-#CFLAGS += -Wunreachable-code\r
-#CFLAGS += -Wsign-compare\r
-CFLAGS += -Wa,-adhlns=$(<:%.c=$(OBJDIR)/%.lst)\r
-CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))\r
-CFLAGS += $(CSTANDARD)\r
-\r
-\r
-#---------------- Compiler Options C++ ----------------\r
-#  -g*:          generate debugging information\r
-#  -O*:          optimization level\r
-#  -f...:        tuning, see GCC manual and avr-libc documentation\r
-#  -Wall...:     warning level\r
-#  -Wa,...:      tell GCC to pass this to the assembler.\r
-#    -adhlns...: create assembler listing\r
-CPPFLAGS = -g$(DEBUG)\r
-CPPFLAGS += $(CPPDEFS)\r
-CPPFLAGS += -O$(OPT)\r
-CPPFLAGS += -funsigned-char\r
-CPPFLAGS += -funsigned-bitfields\r
-CPPFLAGS += -fpack-struct\r
-CPPFLAGS += -fshort-enums\r
-CPPFLAGS += -fno-exceptions\r
-CPPFLAGS += -Wall\r
-CFLAGS += -Wundef\r
-#CPPFLAGS += -mshort-calls\r
-#CPPFLAGS += -fno-unit-at-a-time\r
-#CPPFLAGS += -Wstrict-prototypes\r
-#CPPFLAGS += -Wunreachable-code\r
-#CPPFLAGS += -Wsign-compare\r
-CPPFLAGS += -Wa,-adhlns=$(<:%.cpp=$(OBJDIR)/%.lst)\r
-CPPFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))\r
-#CPPFLAGS += $(CSTANDARD)\r
-\r
-\r
-#---------------- Assembler Options ----------------\r
-#  -Wa,...:   tell GCC to pass this to the assembler.\r
-#  -adhlns:   create listing\r
-#  -gstabs:   have the assembler create line number information; note that\r
-#             for use in COFF files, additional information about filenames\r
-#             and function names needs to be present in the assembler source\r
-#             files -- see avr-libc docs [FIXME: not yet described there]\r
-#  -listing-cont-lines: Sets the maximum number of continuation lines of hex \r
-#       dump that will be displayed for a given single line of source input.\r
-ASFLAGS = $(ADEFS) -Wa,-adhlns=$(<:%.S=$(OBJDIR)/%.lst),-gstabs,--listing-cont-lines=100\r
-\r
-\r
-#---------------- Library Options ----------------\r
-# Minimalistic printf version\r
-PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min\r
-\r
-# Floating point printf version (requires MATH_LIB = -lm below)\r
-PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt\r
-\r
-# If this is left blank, then it will use the Standard printf version.\r
-PRINTF_LIB = \r
-#PRINTF_LIB = $(PRINTF_LIB_MIN)\r
-#PRINTF_LIB = $(PRINTF_LIB_FLOAT)\r
-\r
-\r
-# Minimalistic scanf version\r
-SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min\r
-\r
-# Floating point + %[ scanf version (requires MATH_LIB = -lm below)\r
-SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt\r
-\r
-# If this is left blank, then it will use the Standard scanf version.\r
-SCANF_LIB = \r
-#SCANF_LIB = $(SCANF_LIB_MIN)\r
-#SCANF_LIB = $(SCANF_LIB_FLOAT)\r
-\r
-\r
-MATH_LIB = -lm\r
-\r
-\r
-# List any extra directories to look for libraries here.\r
-#     Each directory must be seperated by a space.\r
-#     Use forward slashes for directory separators.\r
-#     For a directory that has spaces, enclose it in quotes.\r
-EXTRALIBDIRS = \r
-\r
-\r
-\r
-#---------------- External Memory Options ----------------\r
-\r
-# 64 KB of external RAM, starting after internal RAM (ATmega128!),\r
-# used for variables (.data/.bss) and heap (malloc()).\r
-#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff\r
-\r
-# 64 KB of external RAM, starting after internal RAM (ATmega128!),\r
-# only used for heap (malloc()).\r
-#EXTMEMOPTS = -Wl,--section-start,.data=0x801100,--defsym=__heap_end=0x80ffff\r
-\r
-EXTMEMOPTS =\r
-\r
-\r
-\r
-#---------------- Linker Options ----------------\r
-#  -Wl,...:     tell GCC to pass this to linker.\r
-#    -Map:      create map file\r
-#    --cref:    add cross reference to  map file\r
-LDFLAGS = -Wl,-Map=$(TARGET).map,--cref\r
-LDFLAGS += -Wl,--relax \r
-LDFLAGS += -Wl,--gc-sections\r
-LDFLAGS += $(EXTMEMOPTS)\r
-LDFLAGS += $(patsubst %,-L%,$(EXTRALIBDIRS))\r
-LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)\r
-#LDFLAGS += -T linker_script.x\r
-\r
-\r
-\r
-#---------------- Programming Options (avrdude) ----------------\r
-\r
-# Programming hardware: alf avr910 avrisp bascom bsd \r
-# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500\r
-#\r
-# Type: avrdude -c ?\r
-# to get a full listing.\r
-#\r
-AVRDUDE_PROGRAMMER = jtagmkII\r
-\r
-# com1 = serial port. Use lpt1 to connect to parallel port.\r
-AVRDUDE_PORT = usb\r
-\r
-AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex\r
-#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep\r
-\r
-\r
-# Uncomment the following if you want avrdude's erase cycle counter.\r
-# Note that this counter needs to be initialized first using -Yn,\r
-# see avrdude manual.\r
-#AVRDUDE_ERASE_COUNTER = -y\r
-\r
-# Uncomment the following if you do /not/ wish a verification to be\r
-# performed after programming the device.\r
-#AVRDUDE_NO_VERIFY = -V\r
-\r
-# Increase verbosity level.  Please use this when submitting bug\r
-# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude> \r
-# to submit bug reports.\r
-#AVRDUDE_VERBOSE = -v -v\r
-\r
-AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)\r
-AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY)\r
-AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE)\r
-AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER)\r
-\r
-\r
-\r
-#---------------- Debugging Options ----------------\r
-\r
-# For simulavr only - target MCU frequency.\r
-DEBUG_MFREQ = $(F_CPU)\r
-\r
-# Set the DEBUG_UI to either gdb or insight.\r
-# DEBUG_UI = gdb\r
-DEBUG_UI = insight\r
-\r
-# Set the debugging back-end to either avarice, simulavr.\r
-DEBUG_BACKEND = avarice\r
-#DEBUG_BACKEND = simulavr\r
-\r
-# GDB Init Filename.\r
-GDBINIT_FILE = __avr_gdbinit\r
-\r
-# When using avarice settings for the JTAG\r
-JTAG_DEV = /dev/com1\r
-\r
-# Debugging port used to communicate between GDB / avarice / simulavr.\r
-DEBUG_PORT = 4242\r
-\r
-# Debugging host used to communicate between GDB / avarice / simulavr, normally\r
-#     just set to localhost unless doing some sort of crazy debugging when \r
-#     avarice is running on a different computer.\r
-DEBUG_HOST = localhost\r
-\r
-\r
-\r
-#============================================================================\r
-\r
-\r
-# Define programs and commands.\r
-SHELL = sh\r
-CC = avr-gcc\r
-OBJCOPY = avr-objcopy\r
-OBJDUMP = avr-objdump\r
-SIZE = avr-size\r
-AR = avr-ar rcs\r
-NM = avr-nm\r
-AVRDUDE = avrdude\r
-REMOVE = rm -f\r
-REMOVEDIR = rm -rf\r
-COPY = cp\r
-WINSHELL = cmd\r
-\r
-# Define Messages\r
-# English\r
-MSG_ERRORS_NONE = Errors: none\r
-MSG_BEGIN = -------- begin --------\r
-MSG_END = --------  end  --------\r
-MSG_SIZE_BEFORE = Size before: \r
-MSG_SIZE_AFTER = Size after:\r
-MSG_COFF = Converting to AVR COFF:\r
-MSG_EXTENDED_COFF = Converting to AVR Extended COFF:\r
-MSG_FLASH = Creating load file for Flash:\r
-MSG_EEPROM = Creating load file for EEPROM:\r
-MSG_EXTENDED_LISTING = Creating Extended Listing:\r
-MSG_SYMBOL_TABLE = Creating Symbol Table:\r
-MSG_LINKING = Linking:\r
-MSG_COMPILING = Compiling C:\r
-MSG_COMPILING_CPP = Compiling C++:\r
-MSG_ASSEMBLING = Assembling:\r
-MSG_CLEANING = Cleaning project:\r
-MSG_CREATING_LIBRARY = Creating library:\r
-\r
-\r
-\r
-\r
-# Define all object files.\r
-OBJ = $(SRC:%.c=$(OBJDIR)/%.o) $(CPPSRC:%.cpp=$(OBJDIR)/%.o) $(ASRC:%.S=$(OBJDIR)/%.o) \r
-\r
-# Define all listing files.\r
-LST = $(SRC:%.c=$(OBJDIR)/%.lst) $(CPPSRC:%.cpp=$(OBJDIR)/%.lst) $(ASRC:%.S=$(OBJDIR)/%.lst) \r
-\r
-\r
-# Compiler flags to generate dependency files.\r
-GENDEPFLAGS = -MMD -MP -MF .dep/$(@F).d\r
-\r
-\r
-# Combine all necessary flags and optional flags.\r
-# Add target processor to flags.\r
-ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS)\r
-ALL_CPPFLAGS = -mmcu=$(MCU) -I. -x c++ $(CPPFLAGS) $(GENDEPFLAGS)\r
-ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)\r
-\r
-\r
-\r
-\r
-\r
-# Default target.\r
-all: begin gccversion sizebefore build checkhooks checklibmode checkboard sizeafter end\r
-\r
-# Change the build target to build a HEX file or a library.\r
-build: elf hex eep lss sym\r
-#build: lib\r
-\r
-\r
-elf: $(TARGET).elf\r
-hex: $(TARGET).hex\r
-eep: $(TARGET).eep\r
-lss: $(TARGET).lss\r
-sym: $(TARGET).sym\r
-LIBNAME=lib$(TARGET).a\r
-lib: $(LIBNAME)\r
-\r
-\r
-\r
-# Eye candy.\r
-# AVR Studio 3.x does not check make's exit code but relies on\r
-# the following magic strings to be generated by the compile job.\r
-begin:\r
-       @echo\r
-       @echo $(MSG_BEGIN)\r
-\r
-end:\r
-       @echo $(MSG_END)\r
-       @echo\r
-\r
-\r
-# Display size of file.\r
-HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex\r
-ELFSIZE = $(SIZE) $(MCU_FLAG) $(FORMAT_FLAG) $(TARGET).elf\r
-MCU_FLAG = $(shell $(SIZE) --help | grep -- --mcu > /dev/null && echo --mcu=$(MCU) )\r
-FORMAT_FLAG = $(shell $(SIZE) --help | grep -- --format=.*avr > /dev/null && echo --format=avr )\r
-\r
-sizebefore:\r
-       @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \\r
-       2>/dev/null; echo; fi\r
-\r
-sizeafter:\r
-       @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \\r
-       2>/dev/null; echo; fi\r
-\r
-checkhooks: build\r
-       @echo\r
-       @echo ------- Unhooked LUFA Events -------\r
-       @$(shell) (grep -s '^EVENT_.*LUFA/.*\\.o' $(TARGET).map | \\r
-                  cut -d' ' -f1 | cut -d'_' -f2- | grep ".*") || \\r
-                          echo "(None)"\r
-       @echo ------------------------------------\r
-\r
-checklibmode:\r
-       @echo\r
-       @echo ----------- Library Mode -----------\r
-       @$(shell) ($(CC) $(ALL_CFLAGS) -E -dM - < /dev/null \\r
-                 | grep 'USB_\(DEVICE\|HOST\)_ONLY' | cut -d' ' -f2 | grep ".*") \\r
-                 || echo "No specific mode (both device and host mode allowable)."\r
-       @echo ------------------------------------\r
-\r
-checkboard:\r
-       @echo\r
-       @echo ---------- Selected Board ----------\r
-       @echo Selected board model is $(BOARD).\r
-       @echo ------------------------------------\r
-       \r
-# Display compiler version information.\r
-gccversion : \r
-       @$(CC) --version\r
-\r
-\r
-\r
-# Program the device.  \r
-program: $(TARGET).hex $(TARGET).eep\r
-       $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)\r
-\r
-flip: $(TARGET).hex\r
-       batchisp -hardware usb -device $(MCU) -operation erase f\r
-       batchisp -hardware usb -device $(MCU) -operation loadbuffer $(TARGET).hex program\r
-       batchisp -hardware usb -device $(MCU) -operation start reset 0\r
-\r
-dfu: $(TARGET).hex\r
-       dfu-programmer $(MCU) erase\r
-       dfu-programmer $(MCU) flash --debug 1 $(TARGET).hex\r
-       dfu-programmer $(MCU) reset\r
-\r
-flip-ee: $(TARGET).hex $(TARGET).eep\r
-       copy $(TARGET).eep $(TARGET)eep.hex\r
-       batchisp -hardware usb -device $(MCU) -operation memory EEPROM erase\r
-       batchisp -hardware usb -device $(MCU) -operation memory EEPROM loadbuffer $(TARGET)eep.hex program\r
-       batchisp -hardware usb -device $(MCU) -operation start reset 0\r
-\r
-dfu-ee: $(TARGET).hex $(TARGET).eep\r
-       dfu-programmer $(MCU) flash-eeprom --debug 1 --suppress-bootloader-mem $(TARGET).eep\r
-       dfu-programmer $(MCU) reset\r
-\r
-\r
-# Generate avr-gdb config/init file which does the following:\r
-#     define the reset signal, load the target file, connect to target, and set \r
-#     a breakpoint at main().\r
-gdb-config: \r
-       @$(REMOVE) $(GDBINIT_FILE)\r
-       @echo define reset >> $(GDBINIT_FILE)\r
-       @echo SIGNAL SIGHUP >> $(GDBINIT_FILE)\r
-       @echo end >> $(GDBINIT_FILE)\r
-       @echo file $(TARGET).elf >> $(GDBINIT_FILE)\r
-       @echo target remote $(DEBUG_HOST):$(DEBUG_PORT)  >> $(GDBINIT_FILE)\r
-ifeq ($(DEBUG_BACKEND),simulavr)\r
-       @echo load  >> $(GDBINIT_FILE)\r
-endif\r
-       @echo break main >> $(GDBINIT_FILE)\r
-\r
-debug: gdb-config $(TARGET).elf\r
-ifeq ($(DEBUG_BACKEND), avarice)\r
-       @echo Starting AVaRICE - Press enter when "waiting to connect" message displays.\r
-       @$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \\r
-       $(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT)\r
-       @$(WINSHELL) /c pause\r
-\r
-else\r
-       @$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \\r
-       $(DEBUG_MFREQ) --port $(DEBUG_PORT)\r
-endif\r
-       @$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE)\r
-\r
-\r
-\r
-\r
-# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.\r
-COFFCONVERT = $(OBJCOPY) --debugging\r
-COFFCONVERT += --change-section-address .data-0x800000\r
-COFFCONVERT += --change-section-address .bss-0x800000\r
-COFFCONVERT += --change-section-address .noinit-0x800000\r
-COFFCONVERT += --change-section-address .eeprom-0x810000\r
-\r
-\r
-\r
-coff: $(TARGET).elf\r
-       @echo\r
-       @echo $(MSG_COFF) $(TARGET).cof\r
-       $(COFFCONVERT) -O coff-avr $< $(TARGET).cof\r
-\r
-\r
-extcoff: $(TARGET).elf\r
-       @echo\r
-       @echo $(MSG_EXTENDED_COFF) $(TARGET).cof\r
-       $(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof\r
-\r
-\r
-\r
-# Create final output files (.hex, .eep) from ELF output file.\r
-%.hex: %.elf\r
-       @echo\r
-       @echo $(MSG_FLASH) $@\r
-       $(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@\r
-\r
-%.eep: %.elf\r
-       @echo\r
-       @echo $(MSG_EEPROM) $@\r
-       -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \\r
-       --change-section-lma .eeprom=0 --no-change-warnings -O $(FORMAT) $< $@ || exit 0\r
-\r
-# Create extended listing file from ELF output file.\r
-%.lss: %.elf\r
-       @echo\r
-       @echo $(MSG_EXTENDED_LISTING) $@\r
-       $(OBJDUMP) -h -z -S $< > $@\r
-\r
-# Create a symbol table from ELF output file.\r
-%.sym: %.elf\r
-       @echo\r
-       @echo $(MSG_SYMBOL_TABLE) $@\r
-       $(NM) -n $< > $@\r
-\r
-\r
-\r
-# Create library from object files.\r
-.SECONDARY : $(TARGET).a\r
-.PRECIOUS : $(OBJ)\r
-%.a: $(OBJ)\r
-       @echo\r
-       @echo $(MSG_CREATING_LIBRARY) $@\r
-       $(AR) $@ $(OBJ)\r
-\r
-\r
-# Link: create ELF output file from object files.\r
-.SECONDARY : $(TARGET).elf\r
-.PRECIOUS : $(OBJ)\r
-%.elf: $(OBJ)\r
-       @echo\r
-       @echo $(MSG_LINKING) $@\r
-       $(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)\r
-\r
-\r
-# Compile: create object files from C source files.\r
-$(OBJDIR)/%.o : %.c\r
-       @echo\r
-       @echo $(MSG_COMPILING) $<\r
-       $(CC) -c $(ALL_CFLAGS) $< -o $@ \r
-\r
-\r
-# Compile: create object files from C++ source files.\r
-$(OBJDIR)/%.o : %.cpp\r
-       @echo\r
-       @echo $(MSG_COMPILING_CPP) $<\r
-       $(CC) -c $(ALL_CPPFLAGS) $< -o $@ \r
-\r
-\r
-# Compile: create assembler files from C source files.\r
-%.s : %.c\r
-       $(CC) -S $(ALL_CFLAGS) $< -o $@\r
-\r
-\r
-# Compile: create assembler files from C++ source files.\r
-%.s : %.cpp\r
-       $(CC) -S $(ALL_CPPFLAGS) $< -o $@\r
-\r
-\r
-# Assemble: create object files from assembler source files.\r
-$(OBJDIR)/%.o : %.S\r
-       @echo\r
-       @echo $(MSG_ASSEMBLING) $<\r
-       $(CC) -c $(ALL_ASFLAGS) $< -o $@\r
-\r
-\r
-# Create preprocessed source for use in sending a bug report.\r
-%.i : %.c\r
-       $(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ \r
-       \r
-\r
-# Target: clean project.\r
-clean: begin clean_list clean_binary end\r
-\r
-clean_binary:\r
-       $(REMOVE) $(TARGET).hex\r
-       \r
-clean_list:\r
-       @echo $(MSG_CLEANING)\r
-       $(REMOVE) $(TARGET).eep\r
-       $(REMOVE) $(TARGET)eep.hex\r
-       $(REMOVE) $(TARGET).cof\r
-       $(REMOVE) $(TARGET).elf\r
-       $(REMOVE) $(TARGET).map\r
-       $(REMOVE) $(TARGET).sym\r
-       $(REMOVE) $(TARGET).lss\r
-       $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.o)\r
-       $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.lst)\r
-       $(REMOVE) $(SRC:.c=.s)\r
-       $(REMOVE) $(SRC:.c=.d)\r
-       $(REMOVE) $(SRC:.c=.i)\r
-       $(REMOVEDIR) .dep\r
-\r
-\r
-doxygen:\r
-       @echo Generating Project Documentation...\r
-       @doxygen Doxygen.conf\r
-       @echo Documentation Generation Complete.\r
-\r
-clean_doxygen:\r
-       rm -rf Documentation\r
-\r
-# Create object files directory\r
-$(shell mkdir $(OBJDIR) 2>/dev/null)\r
-\r
-\r
-# Include the dependency files.\r
--include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)\r
-\r
-\r
-# Listing of phony targets.\r
-.PHONY : all checkhooks checklibmode checkboard   \\r
-begin finish end sizebefore sizeafter gccversion  \\r
-build elf hex eep lss sym coff extcoff clean      \\r
-clean_list clean_binary program debug gdb-config  \\r
-doxygen dfu flip flip-ee dfu-ee
\ No newline at end of file
diff --git a/Demos/Device/AudioOutput/AudioOutput.aps b/Demos/Device/AudioOutput/AudioOutput.aps
deleted file mode 100644 (file)
index a01ba8f..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<AVRStudio><MANAGEMENT><ProjectName>AudioOutput</ProjectName><Created>30-Sep-2008 14:03:51</Created><LastEdit>30-Sep-2008 14:04:06</LastEdit><ICON>241</ICON><ProjectType>0</ProjectType><Created>30-Sep-2008 14:03:51</Created><Version>4</Version><Build>4, 14, 0, 589</Build><ProjectTypeName>AVR GCC</ProjectTypeName></MANAGEMENT><CODE_CREATION><ObjectFile></ObjectFile><EntryFile></EntryFile><SaveFolder>C:\Users\Dean\Documents\Electronics\Projects\WORK\MyUSBWORK\Demos\AudioOutput\</SaveFolder></CODE_CREATION><DEBUG_TARGET><CURRENT_TARGET></CURRENT_TARGET><CURRENT_PART></CURRENT_PART><BREAKPOINTS></BREAKPOINTS><IO_EXPAND><HIDE>false</HIDE></IO_EXPAND><REGISTERNAMES><Register>R00</Register><Register>R01</Register><Register>R02</Register><Register>R03</Register><Register>R04</Register><Register>R05</Register><Register>R06</Register><Register>R07</Register><Register>R08</Register><Register>R09</Register><Register>R10</Register><Register>R11</Register><Register>R12</Register><Register>R13</Register><Register>R14</Register><Register>R15</Register><Register>R16</Register><Register>R17</Register><Register>R18</Register><Register>R19</Register><Register>R20</Register><Register>R21</Register><Register>R22</Register><Register>R23</Register><Register>R24</Register><Register>R25</Register><Register>R26</Register><Register>R27</Register><Register>R28</Register><Register>R29</Register><Register>R30</Register><Register>R31</Register></REGISTERNAMES><COM></COM><COMType>0</COMType><WATCHNUM>0</WATCHNUM><WATCHNAMES><Pane0></Pane0><Pane1></Pane1><Pane2></Pane2><Pane3></Pane3></WATCHNAMES><BreakOnTrcaeFull>0</BreakOnTrcaeFull></DEBUG_TARGET><Debugger><Triggers></Triggers></Debugger><AVRGCCPLUGIN><FILES><SOURCEFILE>AudioOutput.c</SOURCEFILE><SOURCEFILE>Descriptors.c</SOURCEFILE><HEADERFILE>AudioOutput.h</HEADERFILE><HEADERFILE>Descriptors.h</HEADERFILE><OTHERFILE>makefile</OTHERFILE></FILES><CONFIGS><CONFIG><NAME>default</NAME><USESEXTERNALMAKEFILE>YES</USESEXTERNALMAKEFILE><EXTERNALMAKEFILE>makefile</EXTERNALMAKEFILE><PART>atmega128</PART><HEX>1</HEX><LIST>1</LIST><MAP>1</MAP><OUTPUTFILENAME>AudioOutput.elf</OUTPUTFILENAME><OUTPUTDIR>default\</OUTPUTDIR><ISDIRTY>1</ISDIRTY><OPTIONS/><INCDIRS/><LIBDIRS/><LIBS/><LINKOBJECTS/><OPTIONSFORALL>-Wall -gdwarf-2 -std=gnu99 -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums</OPTIONSFORALL><LINKEROPTIONS></LINKEROPTIONS><SEGMENTS/></CONFIG></CONFIGS><LASTCONFIG>default</LASTCONFIG><USES_WINAVR>1</USES_WINAVR><GCC_LOC>C:\WinAVR-20080512\bin\avr-gcc.exe</GCC_LOC><MAKE_LOC>C:\WinAVR-20080512\utils\bin\make.exe</MAKE_LOC></AVRGCCPLUGIN><IOView><usergroups/><sort sorted="0" column="0" ordername="0" orderaddress="0" ordergroup="0"/></IOView><Files></Files><Events><Bookmarks></Bookmarks></Events><Trace><Filters></Filters></Trace></AVRStudio>\r
diff --git a/Demos/Device/AudioOutput/AudioOutput.c b/Demos/Device/AudioOutput/AudioOutput.c
deleted file mode 100644 (file)
index 8c3bf61..0000000
+++ /dev/null
@@ -1,206 +0,0 @@
-/*\r
-             LUFA Library\r
-     Copyright (C) Dean Camera, 2009.\r
-              \r
-  dean [at] fourwalledcubicle [dot] com\r
-      www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
-  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
-  Permission to use, copy, modify, and distribute this software\r
-  and its documentation for any purpose and without fee is hereby\r
-  granted, provided that the above copyright notice appear in all\r
-  copies and that both that the copyright notice and this\r
-  permission notice and warranty disclaimer appear in supporting\r
-  documentation, and that the name of the author not be used in\r
-  advertising or publicity pertaining to distribution of the\r
-  software without specific, written prior permission.\r
-\r
-  The author disclaim all warranties with regard to this\r
-  software, including all implied warranties of merchantability\r
-  and fitness.  In no event shall the author be liable for any\r
-  special, indirect or consequential damages or any damages\r
-  whatsoever resulting from loss of use, data or profits, whether\r
-  in an action of contract, negligence or other tortious action,\r
-  arising out of or in connection with the use or performance of\r
-  this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- *  Main source file for the AudioOutput demo. This file contains the main tasks of\r
- *  the demo and is responsible for the initial application hardware configuration.\r
- */\r
-\r
-#include "AudioOutput.h"\r
-\r
-/** LUFA Audio Class driver interface configuration and state information. This structure is\r
- *  passed to all Audio Class driver functions, so that multiple instances of the same class\r
- *  within a device can be differentiated from one another.\r
- */\r
-USB_ClassInfo_Audio_t Speaker_Audio_Interface =\r
-       {\r
-               .StreamingInterfaceNumber = 1,\r
-\r
-               .DataOUTEndpointNumber    = AUDIO_STREAM_EPNUM,\r
-               .DataOUTEndpointSize      = AUDIO_STREAM_EPSIZE,\r
-       };\r
-\r
-/** Main program entry point. This routine contains the overall program flow, including initial\r
- *  setup of all components and the main program loop.\r
- */\r
-int main(void)\r
-{\r
-       SetupHardware();\r
-\r
-       LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);\r
-       \r
-       for (;;)\r
-       {\r
-               if (Speaker_Audio_Interface.InterfaceEnabled)\r
-                 ProcessNextSample();\r
-\r
-               USB_Audio_USBTask(&Speaker_Audio_Interface);\r
-               USB_USBTask();\r
-       }\r
-}\r
-\r
-/** Configures the board hardware and chip peripherals for the demo's functionality. */\r
-void SetupHardware(void)\r
-{\r
-       /* Disable watchdog if enabled by bootloader/fuses */\r
-       MCUSR &= ~(1 << WDRF);\r
-       wdt_disable();\r
-\r
-       /* Disable clock division */\r
-       clock_prescale_set(clock_div_1);\r
-\r
-       /* Hardware Initialization */\r
-       LEDs_Init();\r
-       USB_Init();\r
-}\r
-\r
-/** Processes the next audio sample by reading the last ADC conversion and writing it to the audio\r
- *  interface, each time the sample reload timer period elapses to give a constant sample rate.\r
- */\r
-void ProcessNextSample(void)\r
-{\r
-       if ((TIFR0 & (1 << OCF0A)) && USB_Audio_IsSampleReceived(&Speaker_Audio_Interface))\r
-       {\r
-               /* Clear the sample reload timer */\r
-               TIFR0 |= (1 << OCF0A);\r
-\r
-               /* Retrieve the signed 16-bit left and right audio samples */\r
-               int16_t LeftSample_16Bit  = (int16_t)USB_Audio_ReadSample16();\r
-               int16_t RightSample_16Bit = (int16_t)USB_Audio_ReadSample16();\r
-\r
-               /* Massage signed 16-bit left and right audio samples into signed 8-bit */\r
-               int8_t  LeftSample_8Bit   = (LeftSample_16Bit  >> 8);\r
-               int8_t  RightSample_8Bit  = (RightSample_16Bit >> 8);\r
-                       \r
-               /* Mix the two channels together to produce a mono, 8-bit sample */\r
-               int8_t  MixedSample_8Bit  = (((int16_t)LeftSample_8Bit + (int16_t)RightSample_8Bit) >> 1);\r
-\r
-#if defined(AUDIO_OUT_MONO)\r
-               /* Load the sample into the PWM timer channel */\r
-               OCRxA = ((uint8_t)MixedSample_8Bit ^ (1 << 7));\r
-#elif defined(AUDIO_OUT_STEREO)\r
-               /* Load the dual 8-bit samples into the PWM timer channels */\r
-               OCRxA = ((uint8_t)LeftSample_8Bit  ^ (1 << 7));\r
-               OCRxB = ((uint8_t)RightSample_8Bit ^ (1 << 7));\r
-#elif defined(AUDIO_OUT_PORTC)\r
-               PORTC = MixedSample_8Bit;\r
-#else\r
-               uint8_t LEDMask = LEDS_NO_LEDS;\r
-\r
-               /* Make mixed sample value positive (absolute) */\r
-               if (MixedSample_8Bit < 0)\r
-                 MixedSample_8Bit = -MixedSample_8Bit;\r
-\r
-               if (MixedSample_8Bit > ((128 / 8) * 1))\r
-                 LEDMask |= LEDS_LED1;\r
-                 \r
-               if (MixedSample_8Bit > ((128 / 8) * 2))\r
-                 LEDMask |= LEDS_LED2;\r
-                 \r
-               if (MixedSample_8Bit > ((128 / 8) * 3))\r
-                 LEDMask |= LEDS_LED3;\r
-\r
-               if (MixedSample_8Bit > ((128 / 8) * 4))\r
-                 LEDMask |= LEDS_LED4;\r
-\r
-               LEDs_SetAllLEDs(LEDMask);\r
-#endif\r
-       }\r
-}\r
-\r
-/** Event handler for the library USB Connection event. */\r
-void EVENT_USB_Connect(void)\r
-{\r
-       LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING);\r
-       \r
-       /* Sample reload timer initialization */\r
-       OCR0A   = (F_CPU / AUDIO_SAMPLE_FREQUENCY) - 1;\r
-       TCCR0A  = (1 << WGM01);  // CTC mode\r
-       TCCR0B  = (1 << CS00);   // Fcpu speed\r
-\r
-#if defined(AUDIO_OUT_MONO)\r
-       /* Set speaker as output */\r
-       DDRC   |= (1 << 6);\r
-#elif defined(AUDIO_OUT_STEREO)\r
-       /* Set speakers as outputs */\r
-       DDRC   |= ((1 << 6) | (1 << 5));\r
-#elif defined(AUDIO_OUT_PORTC)\r
-       /* Set PORTC as outputs */\r
-       DDRC   |= 0xFF;\r
-#endif\r
-\r
-#if (defined(AUDIO_OUT_MONO) || defined(AUDIO_OUT_STEREO))\r
-       /* PWM speaker timer initialization */\r
-       TCCRxA  = ((1 << WGMx0) | (1 << COMxA1) | (1 << COMxA0)\r
-                                                       | (1 << COMxB1) | (1 << COMxB0)); // Set on match, clear on TOP\r
-       TCCRxB  = ((1 << WGMx2) | (1 << CSx0));  // Fast 8-Bit PWM, Fcpu speed\r
-#endif \r
-}\r
-\r
-/** Event handler for the library USB Disconnection event. */\r
-void EVENT_USB_Disconnect(void)\r
-{\r
-       LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);\r
-\r
-       /* Stop the sample reload timer */\r
-       TCCR0B = 0;\r
-\r
-#if (defined(AUDIO_OUT_MONO) || defined(AUDIO_OUT_STEREO))\r
-       /* Stop the PWM generation timer */\r
-       TCCRxB = 0;\r
-#endif         \r
-\r
-#if defined(AUDIO_OUT_MONO)\r
-       /* Set speaker as input to reduce current draw */\r
-       DDRC   &= ~(1 << 6);\r
-#elif defined(AUDIO_OUT_STEREO)\r
-       /* Set speakers as inputs to reduce current draw */\r
-       DDRC   &= ~((1 << 6) | (1 << 5));\r
-#elif defined(AUDIO_OUT_PORTC)\r
-       /* Set PORTC low */\r
-       PORTC  = 0x00;\r
-#endif\r
-}\r
-\r
-/** Event handler for the library USB Configuration Changed event. */\r
-void EVENT_USB_ConfigurationChanged(void)\r
-{\r
-       LEDs_SetAllLEDs(LEDMASK_USB_READY);\r
-       \r
-       if (!(USB_Audio_ConfigureEndpoints(&Speaker_Audio_Interface)))\r
-         LEDs_SetAllLEDs(LEDMASK_USB_ERROR);\r
-}\r
-\r
-/** Event handler for the library USB Unhandled Control Packet event. */\r
-void EVENT_USB_UnhandledControlPacket(void)\r
-{\r
-       USB_Audio_ProcessControlPacket(&Speaker_Audio_Interface);\r
-}\r
diff --git a/Demos/Device/AudioOutput/AudioOutput.h b/Demos/Device/AudioOutput/AudioOutput.h
deleted file mode 100644 (file)
index e8435e3..0000000
+++ /dev/null
@@ -1,123 +0,0 @@
-/*\r
-             LUFA Library\r
-     Copyright (C) Dean Camera, 2009.\r
-              \r
-  dean [at] fourwalledcubicle [dot] com\r
-      www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
-  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
-  Permission to use, copy, modify, and distribute this software\r
-  and its documentation for any purpose and without fee is hereby\r
-  granted, provided that the above copyright notice appear in all\r
-  copies and that both that the copyright notice and this\r
-  permission notice and warranty disclaimer appear in supporting\r
-  documentation, and that the name of the author not be used in\r
-  advertising or publicity pertaining to distribution of the\r
-  software without specific, written prior permission.\r
-\r
-  The author disclaim all warranties with regard to this\r
-  software, including all implied warranties of merchantability\r
-  and fitness.  In no event shall the author be liable for any\r
-  special, indirect or consequential damages or any damages\r
-  whatsoever resulting from loss of use, data or profits, whether\r
-  in an action of contract, negligence or other tortious action,\r
-  arising out of or in connection with the use or performance of\r
-  this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- *  Header file for AudioOutput.c.\r
- */\r
-\r
-#ifndef _AUDIO_OUTPUT_H_\r
-#define _AUDIO_OUTPUT_H_\r
-\r
-       /* Includes: */\r
-               #include <avr/io.h>\r
-               #include <avr/wdt.h>\r
-               #include <avr/power.h>\r
-\r
-               #include "Descriptors.h"\r
-               \r
-               #include <LUFA/Version.h>\r
-               #include <LUFA/Drivers/Board/LEDs.h>\r
-               #include <LUFA/Drivers/Board/Joystick.h>\r
-               #include <LUFA/Drivers/Peripheral/ADC.h>\r
-               #include <LUFA/Drivers/USB/USB.h>\r
-               #include <LUFA/Drivers/USB/Class/Device/Audio.h>\r
-       \r
-       /* Macros: */\r
-               #if defined(USB_FULL_CONTROLLER) || defined(USB_MODIFIED_FULL_CONTROLLER)\r
-                       #define TCCRxA          TCCR3A\r
-                       #define TCCRxB          TCCR3B\r
-                       #define OCRxA           OCR3A\r
-                       #define OCRxB           OCR3B\r
-                       #define WGMx0           WGM30\r
-                       #define WGMx2           WGM32\r
-                       #define COMxA1          COM3A1\r
-                       #define COMxA0          COM3A0\r
-                       #define COMxB1          COM3B1\r
-                       #define COMxB0          COM3B0\r
-                       #define CSx0            CS30\r
-               #else\r
-                       /** Timer count register used for left channel PWM audio output (or mixed output in mono output mode) */\r
-                       #define TCCRxA          TCCR1A\r
-\r
-                       /** Timer count register used for right channel PWM audio output */\r
-                       #define TCCRxB          TCCR1B\r
-\r
-                       /** Timer compare register used for left channel PWM audio output (or mixed output in mono output mode) */\r
-                       #define OCRxA           OCR1A\r
-\r
-                       /** Timer compare register used for right channel PWM audio output */\r
-                       #define OCRxB           OCR1B\r
-\r
-                       /** Timer control register mask used to select PWM mode */\r
-                       #define WGMx0           WGM10\r
-\r
-                       /** Timer control register mask used to select PWM mode */\r
-                       #define WGMx2           WGM12\r
-\r
-                       /** Timer control register mask used to set, clear or toggle channel output pin on match */\r
-                       #define COMxA1          COM1A1\r
-\r
-                       /** Timer control register mask used to set, clear or toggle channel output pin on match */\r
-                       #define COMxA0          COM1A0\r
-\r
-                       /** Timer control register mask used to set, clear or toggle channel output pin on match */\r
-                       #define COMxB1          COM1B1\r
-\r
-                       /** Timer control register mask used to set, clear or toggle channel output pin on match */\r
-                       #define COMxB0          COM1B0\r
-\r
-                       /** Timer control register mask used to start the timer at Fcpu clock rate */\r
-                       #define CSx0            CS10\r
-               #endif\r
-               \r
-       /* Macros: */\r
-               /** LED mask for the library LED driver, to indicate that the USB interface is not ready. */\r
-               #define LEDMASK_USB_NOTREADY      LEDS_LED1\r
-\r
-               /** LED mask for the library LED driver, to indicate that the USB interface is enumerating. */\r
-               #define LEDMASK_USB_ENUMERATING  (LEDS_LED2 | LEDS_LED3)\r
-\r
-               /** LED mask for the library LED driver, to indicate that the USB interface is ready. */\r
-               #define LEDMASK_USB_READY        (LEDS_LED2 | LEDS_LED4)\r
-\r
-               /** LED mask for the library LED driver, to indicate that an error has occurred in the USB interface. */\r
-               #define LEDMASK_USB_ERROR        (LEDS_LED1 | LEDS_LED3)\r
-               \r
-       /* Function Prototypes: */\r
-               void SetupHardware(void);\r
-               void ProcessNextSample(void);\r
-               \r
-               void EVENT_USB_Connect(void);\r
-               void EVENT_USB_Disconnect(void);\r
-               void EVENT_USB_ConfigurationChanged(void);\r
-               void EVENT_USB_UnhandledControlPacket(void);\r
-\r
-#endif\r
diff --git a/Demos/Device/AudioOutput/AudioOutput.txt b/Demos/Device/AudioOutput/AudioOutput.txt
deleted file mode 100644 (file)
index a47f9b5..0000000
+++ /dev/null
@@ -1,93 +0,0 @@
-/** \file\r
- *\r
- *  This file contains special DoxyGen information for the generation of the main page and other special\r
- *  documentation pages. It is not a project source file.\r
- */\r
\r
-/** \mainpage Audio Output Device Demo\r
- *\r
- *  \section SSec_Info USB Information:\r
- *\r
- *  The following table gives a rundown of the USB utilization of this demo.\r
- *\r
- *  <table>\r
- *   <tr>\r
- *    <td><b>USB Mode:</b></td>\r
- *    <td>Device</td>\r
- *   </tr>\r
- *   <tr>\r
- *    <td><b>USB Class:</b></td>\r
- *    <td>Audio Class</td>\r
- *   </tr>\r
- *   <tr> \r
- *    <td><b>USB Subclass:</b></td>\r
- *    <td>Standard Audio Device</td>\r
- *   </tr>\r
- *   <tr>\r
- *    <td><b>Relevant Standards:</b></td>\r
- *    <td>USBIF Audio Class Specification</td>\r
- *    <td>USBIF Audio Class Terminal Types Specification</td>\r
- *    <td>USBIF Audio Data Formats Specification</td>\r
- *   </tr>\r
- *   <tr>\r
- *    <td><b>Usable Speeds:</b></td>\r
- *    <td>Full Speed Mode</td>\r
- *   </tr>\r
- *  </table>\r
- *\r
- *  \section SSec_Description Project Description: \r
- *\r
- *  Audio demonstration application. This gives a simple reference\r
- *  application for implementing a USB Audio Output device using the\r
- *  basic USB Audio drivers in all modern OSes (i.e. no special drivers\r
- *  required).\r
- *  \r
- *  On start-up the system will automatically enumerate and function\r
- *  as a USB speaker. Incoming audio will output in 8-bit PWM onto\r
- *  the timer output (timer 3 for the AT90USBXXX6/7 USB AVRs, timer 1 for\r
- *  the AT90USBXXX2 controller AVRs) compare channel A for AUDIO_OUT_MONO\r
- *  mode, on channels A and B for AUDIO_OUT_STEREO and on the board LEDs\r
- *  for AUDIO_OUT_LEDS mode. Decouple audio outputs with a capacitor and\r
- *  attach to a speaker to hear the audio.\r
- *  \r
- *  Under Windows, if a driver request dialogue pops up, select the option\r
- *  to automatically install the appropriate drivers.\r
- *\r
- *  \section SSec_Options Project Options\r
- *\r
- *  The following defines can be found in this demo, which can control the demo behaviour when defined, or changed in value.\r
- *\r
- *  <table>\r
- *   <tr>\r
- *    <td><b>Define Name:</b></td>\r
- *    <td><b>Location:</b></td>\r
- *    <td><b>Description:</b></td>\r
- *   </tr>\r
- *   <tr>\r
- *    <td>AUDIO_OUT_STEREO</td>\r
- *    <td>Makefile CDEFS</td>\r
- *    <td>When defined, this outputs the audio samples in stereo to the timer output pins of the microcontroller.</td>\r
- *   </tr>\r
- *   <tr>\r
- *    <td>AUDIO_OUT_MONO</td>\r
- *    <td>Makefile CDEFS</td>\r
- *    <td>When defined, this outputs the audio samples in mono to the timer output pin of the microcontroller.</td>\r
- *   </tr>\r
- *   <tr>\r
- *    <td>AUDIO_OUT_LEDS</td>\r
- *    <td>Makefile CDEFS</td>\r
- *    <td>When defined, this outputs the audio samples in stereo to the board LEDs.</td>\r
- *   </tr>\r
- *   <tr>\r
- *    <td>AUDIO_OUT_PORTC</td>\r
- *    <td>Makefile CDEFS</td>\r
- *    <td>When defined, this outputs the audio samples in mono to port C of the microcontroller, for connection to an\r
- *        external DAC.</td>\r
- *   </tr>\r
- *   <tr>\r
- *    <td>AUDIO_SAMPLE_FREQUENCY</td>\r
- *    <td>Descriptors.h</td>\r
- *    <td>Gives the audio sample rate per channel for the audio stream, in Hz.</td>\r
- *   </tr>\r
- *  </table>\r
- */\r
diff --git a/Demos/Device/AudioOutput/Descriptors.c b/Demos/Device/AudioOutput/Descriptors.c
deleted file mode 100644 (file)
index 0039c2b..0000000
+++ /dev/null
@@ -1,314 +0,0 @@
-/*\r
-             LUFA Library\r
-     Copyright (C) Dean Camera, 2009.\r
-              \r
-  dean [at] fourwalledcubicle [dot] com\r
-      www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
-  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
-  Permission to use, copy, modify, and distribute this software\r
-  and its documentation for any purpose and without fee is hereby\r
-  granted, provided that the above copyright notice appear in all\r
-  copies and that both that the copyright notice and this\r
-  permission notice and warranty disclaimer appear in supporting\r
-  documentation, and that the name of the author not be used in\r
-  advertising or publicity pertaining to distribution of the\r
-  software without specific, written prior permission.\r
-\r
-  The author disclaim all warranties with regard to this\r
-  software, including all implied warranties of merchantability\r
-  and fitness.  In no event shall the author be liable for any\r
-  special, indirect or consequential damages or any damages\r
-  whatsoever resulting from loss of use, data or profits, whether\r
-  in an action of contract, negligence or other tortious action,\r
-  arising out of or in connection with the use or performance of\r
-  this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- *  USB Device Descriptors, for library use when in USB device mode. Descriptors are special \r
- *  computer-readable structures which the host requests upon device enumeration, to determine\r
- *  the device's capabilities and functions.  \r
- */\r
\r
-#include "Descriptors.h"\r
-\r
-/** Device descriptor structure. This descriptor, located in FLASH memory, describes the overall\r
- *  device characteristics, including the supported USB version, control endpoint size and the\r
- *  number of device configurations. The descriptor is read out by the USB host when the enumeration\r
- *  process begins.\r
- */\r
-USB_Descriptor_Device_t PROGMEM DeviceDescriptor =\r
-{\r
-       .Header                 = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device},\r
-               \r
-       .USBSpecification       = VERSION_BCD(02.00),\r
-       .Class                  = 0x00,\r
-       .SubClass               = 0x00,\r
-       .Protocol               = 0x00,\r
-                               \r
-       .Endpoint0Size          = FIXED_CONTROL_ENDPOINT_SIZE,\r
-               \r
-       .VendorID               = 0x03EB,\r
-       .ProductID              = 0x2046,\r
-       .ReleaseNumber          = 0x0000,\r
-               \r
-       .ManufacturerStrIndex   = 0x01,\r
-       .ProductStrIndex        = 0x02,\r
-       .SerialNumStrIndex      = NO_DESCRIPTOR,\r
-               \r
-       .NumberOfConfigurations = 1\r
-};\r
-\r
-/** Configuration descriptor structure. This descriptor, located in FLASH memory, describes the usage\r
- *  of the device in one of its supported configurations, including information about any device interfaces\r
- *  and endpoints. The descriptor is read out by the USB host during the enumeration process when selecting\r
- *  a configuration so that the host may correctly communicate with the USB device.\r
- */\r
-USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =\r
-{\r
-       .Config = \r
-               {\r
-                       .Header                   = {.Size = sizeof(USB_Descriptor_Configuration_Header_t), .Type = DTYPE_Configuration},\r
-\r
-                       .TotalConfigurationSize   = sizeof(USB_Descriptor_Configuration_t),\r
-                       .TotalInterfaces          = 2,\r
-\r
-                       .ConfigurationNumber      = 1,\r
-                       .ConfigurationStrIndex    = NO_DESCRIPTOR,\r
-                               \r
-                       .ConfigAttributes         = (USB_CONFIG_ATTR_BUSPOWERED | USB_CONFIG_ATTR_SELFPOWERED),\r
-                       \r
-                       .MaxPowerConsumption      = USB_CONFIG_POWER_MA(100)\r
-               },\r
-               \r
-       .AudioControlInterface = \r
-               {\r
-                       .Header                   = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},\r
-\r
-                       .InterfaceNumber          = 0,\r
-                       .AlternateSetting         = 0,\r
-                       \r
-                       .TotalEndpoints           = 0,\r
-                               \r
-                       .Class                    = 0x01,\r
-                       .SubClass                 = 0x01,\r
-                       .Protocol                 = 0x00,\r
-                               \r
-                       .InterfaceStrIndex        = NO_DESCRIPTOR                       \r
-               },\r
-       \r
-       .AudioControlInterface_SPC = \r
-               {\r
-                       .Header                   = {.Size = sizeof(USB_AudioInterface_AC_t), .Type = DTYPE_AudioInterface},\r
-                       .Subtype                  = DSUBTYPE_Header,\r
-                       \r
-                       .ACSpecification          = VERSION_BCD(01.00),\r
-                       .TotalLength              = (sizeof(USB_AudioInterface_AC_t) +\r
-                                                  sizeof(USB_AudioInputTerminal_t) +\r
-                                                                          sizeof(USB_AudioOutputTerminal_t)),\r
-                       \r
-                       .InCollection             = 1,\r
-                       .InterfaceNumbers         = {1},                        \r
-               },\r
-\r
-       .InputTerminal = \r
-               {\r
-                       .Header                   = {.Size = sizeof(USB_AudioInputTerminal_t), .Type = DTYPE_AudioInterface},\r
-                       .Subtype                  = DSUBTYPE_InputTerminal,\r
-               \r
-                       .TerminalID               = 0x01,\r
-                       .TerminalType             = TERMINAL_STREAMING,\r
-                       .AssociatedOutputTerminal = 0x00,\r
-                       \r
-                       .TotalChannels            = 2,\r
-                       .ChannelConfig            = (CHANNEL_LEFT_FRONT | CHANNEL_RIGHT_FRONT),\r
-                       \r
-                       .ChannelStrIndex          = NO_DESCRIPTOR,\r
-                       .TerminalStrIndex         = NO_DESCRIPTOR\r
-               },\r
-\r
-       .OutputTerminal = \r
-               {\r
-                       .Header                   = {.Size = sizeof(USB_AudioOutputTerminal_t), .Type = DTYPE_AudioInterface},\r
-                       .Subtype                  = DSUBTYPE_OutputTerminal,\r
-               \r
-                       .TerminalID               = 0x02,\r
-                       .TerminalType             = TERMINAL_OUT_SPEAKER,\r
-                       .AssociatedInputTerminal  = 0x00,\r
-                       \r
-                       .SourceID                 = 0x01,\r
-                       \r
-                       .TerminalStrIndex         = NO_DESCRIPTOR                       \r
-               },\r
-\r
-       .AudioStreamInterface_Alt0 = \r
-               {\r
-                       .Header                   = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},\r
-\r
-                       .InterfaceNumber          = 1,\r
-                       .AlternateSetting         = 0,\r
-                       \r
-                       .TotalEndpoints           = 0,\r
-                               \r
-                       .Class                    = 0x01,\r
-                       .SubClass                 = 0x02,\r
-                       .Protocol                 = 0x00,\r
-                               \r
-                       .InterfaceStrIndex        = NO_DESCRIPTOR\r
-               },\r
-\r
-       .AudioStreamInterface_Alt1 = \r
-               {\r
-                       .Header                   = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},\r
-\r
-                       .InterfaceNumber          = 1,\r
-                       .AlternateSetting         = 1,\r
-                       \r
-                       .TotalEndpoints           = 1,\r
-                               \r
-                       .Class                    = 0x01,\r
-                       .SubClass                 = 0x02,\r
-                       .Protocol                 = 0x00,\r
-                               \r
-                       .InterfaceStrIndex        = NO_DESCRIPTOR\r
-               },\r
-               \r
-       .AudioStreamInterface_SPC = \r
-               {\r
-                       .Header                   = {.Size = sizeof(USB_AudioInterface_AS_t), .Type = DTYPE_AudioInterface},\r
-                       .Subtype                  = DSUBTYPE_General,\r
-                       \r
-                       .TerminalLink             = 0x01,\r
-                       \r
-                       .FrameDelay               = 1,\r
-                       .AudioFormat              = 0x0001\r
-               },\r
-               \r
-       .AudioFormat = \r
-               {\r
-                       .Header                   = {.Size = sizeof(USB_AudioFormat_t), .Type = DTYPE_AudioInterface},\r
-                       .Subtype                  = DSUBTYPE_Format,\r
-\r
-                       .FormatType               = 0x01,\r
-                       .Channels                 = 0x02,\r
-                       \r
-                       .SubFrameSize             = 0x02,\r
-                       .BitResolution            = 16,\r
-\r
-                       .SampleFrequencyType      = (sizeof(ConfigurationDescriptor.AudioFormat.SampleFrequencies) / sizeof(AudioSampleFreq_t)),                \r
-                       .SampleFrequencies        = {AUDIO_SAMPLE_FREQ(AUDIO_SAMPLE_FREQUENCY)}\r
-               },\r
-       \r
-       .AudioEndpoint = \r
-               {\r
-                       .Endpoint = \r
-                               {\r
-                                       .Header              = {.Size = sizeof(USB_AudioStreamEndpoint_Std_t), .Type = DTYPE_Endpoint},\r
-\r
-                                       .EndpointAddress     = (ENDPOINT_DESCRIPTOR_DIR_OUT | AUDIO_STREAM_EPNUM),\r
-                                       .Attributes          = (EP_TYPE_ISOCHRONOUS | ENDPOINT_ATTR_SYNC | ENDPOINT_USAGE_DATA),\r
-                                       .EndpointSize        = AUDIO_STREAM_EPSIZE,\r
-                                       .PollingIntervalMS   = 1\r
-                               },\r
-                       \r
-                       .Refresh                  = 0,\r
-                       .SyncEndpointNumber       = 0\r
-               },\r
-               \r
-       .AudioEndpoint_SPC = \r
-               {\r
-                       .Header                   = {.Size = sizeof(USB_AudioStreamEndpoint_Spc_t), .Type = DTYPE_AudioEndpoint},\r
-                       .Subtype                  = DSUBTYPE_General,\r
-                       \r
-                       .Attributes               = EP_ACCEPTS_SMALL_PACKETS,\r
-                       \r
-                       .LockDelayUnits           = 0x00,\r
-                       .LockDelay                = 0x0000\r
-               }\r
-};\r
-\r
-/** Language descriptor structure. This descriptor, located in FLASH memory, is returned when the host requests\r
- *  the string descriptor with index 0 (the first index). It is actually an array of 16-bit integers, which indicate\r
- *  via the language ID table available at USB.org what languages the device supports for its string descriptors.\r
- */\r
-USB_Descriptor_String_t PROGMEM LanguageString =\r
-{\r
-       .Header                 = {.Size = USB_STRING_LEN(1), .Type = DTYPE_String},\r
-               \r
-       .UnicodeString          = {LANGUAGE_ID_ENG}\r
-};\r
-\r
-/** Manufacturer descriptor string. This is a Unicode string containing the manufacturer's details in human readable\r
- *  form, and is read out upon request by the host when the appropriate string ID is requested, listed in the Device\r
- *  Descriptor.\r
- */\r
-USB_Descriptor_String_t PROGMEM ManufacturerString =\r
-{\r
-       .Header                 = {.Size = USB_STRING_LEN(11), .Type = DTYPE_String},\r
-               \r
-       .UnicodeString          = L"Dean Camera"\r
-};\r
-\r
-/** Product descriptor string. This is a Unicode string containing the product's details in human readable form,\r
- *  and is read out upon request by the host when the appropriate string ID is requested, listed in the Device\r
- *  Descriptor.\r
- */\r
-USB_Descriptor_String_t PROGMEM ProductString =\r
-{\r
-       .Header                 = {.Size = USB_STRING_LEN(19), .Type = DTYPE_String},\r
-               \r
-       .UnicodeString          = L"LUFA Audio Out Demo"\r
-};\r
-\r
-/** This function is called by the library when in device mode, and must be overridden (see library "USB Descriptors"\r
- *  documentation) by the application code so that the address and size of a requested descriptor can be given\r
- *  to the USB library. When the device receives a Get Descriptor request on the control endpoint, this function\r
- *  is called so that the descriptor details can be passed back and the appropriate descriptor sent back to the\r
- *  USB host.\r
- */\r
-uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
-{\r
-       const uint8_t  DescriptorType   = (wValue >> 8);\r
-       const uint8_t  DescriptorNumber = (wValue & 0xFF);\r
-\r
-       void*    Address = NULL;\r
-       uint16_t Size    = NO_DESCRIPTOR;\r
-\r
-       switch (DescriptorType)\r
-       {\r
-               case DTYPE_Device:\r
-                       Address = (void*)&DeviceDescriptor;\r
-                       Size    = sizeof(USB_Descriptor_Device_t);\r
-                       break;\r
-               case DTYPE_Configuration:\r
-                       Address = (void*)&ConfigurationDescriptor;\r
-                       Size    = sizeof(USB_Descriptor_Configuration_t);\r
-                       break;\r
-               case DTYPE_String: \r
-                       switch (DescriptorNumber)\r
-                       {\r
-                               case 0x00:\r
-                                       Address = (void*)&LanguageString;\r
-                                       Size    = pgm_read_byte(&LanguageString.Header.Size);\r
-                                       break;\r
-                               case 0x01: \r
-                                       Address = (void*)&ManufacturerString;\r
-                                       Size    = pgm_read_byte(&ManufacturerString.Header.Size);\r
-                                       break;\r
-                               case 0x02: \r
-                                       Address = (void*)&ProductString;\r
-                                       Size    = pgm_read_byte(&ProductString.Header.Size);\r
-                                       break;\r
-                       }\r
-                       \r
-                       break;\r
-       }\r
-       \r
-       *DescriptorAddress = Address;\r
-       return Size;\r
-}\r
diff --git a/Demos/Device/AudioOutput/Descriptors.h b/Demos/Device/AudioOutput/Descriptors.h
deleted file mode 100644 (file)
index 1f03f64..0000000
+++ /dev/null
@@ -1,86 +0,0 @@
-/*\r
-             LUFA Library\r
-     Copyright (C) Dean Camera, 2009.\r
-              \r
-  dean [at] fourwalledcubicle [dot] com\r
-      www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
-  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
-  Permission to use, copy, modify, and distribute this software\r
-  and its documentation for any purpose and without fee is hereby\r
-  granted, provided that the above copyright notice appear in all\r
-  copies and that both that the copyright notice and this\r
-  permission notice and warranty disclaimer appear in supporting\r
-  documentation, and that the name of the author not be used in\r
-  advertising or publicity pertaining to distribution of the\r
-  software without specific, written prior permission.\r
-\r
-  The author disclaim all warranties with regard to this\r
-  software, including all implied warranties of merchantability\r
-  and fitness.  In no event shall the author be liable for any\r
-  special, indirect or consequential damages or any damages\r
-  whatsoever resulting from loss of use, data or profits, whether\r
-  in an action of contract, negligence or other tortious action,\r
-  arising out of or in connection with the use or performance of\r
-  this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- *  Header file for Descriptors.c.\r
- */\r
\r
-#ifndef _DESCRIPTORS_H_\r
-#define _DESCRIPTORS_H_\r
-\r
-       /* Includes: */\r
-               #include <LUFA/Drivers/USB/USB.h>\r
-               #include <LUFA/Drivers/USB/Class/Device/Audio.h>\r
-\r
-               #include <avr/pgmspace.h>\r
-\r
-       /* Macros: */\r
-               #if defined(USB_FULL_CONTROLLER) || defined(__DOXYGEN__)\r
-                       /** Endpoint number of the Audio isochronous streaming data endpoint. */\r
-                       #define AUDIO_STREAM_EPNUM       1\r
-               #else\r
-                       #define AUDIO_STREAM_EPNUM       3              \r
-               #endif\r
-               \r
-               /** Endpoint size in bytes of the Audio isochronous streaming data endpoint. The Windows audio stack requires\r
-                *  at least 192 bytes for correct output, thus the smaller 128 byte maximum endpoint size on some of the smaller\r
-                *  USB AVR models will result in unavoidable distorted output.\r
-                */\r
-               #define AUDIO_STREAM_EPSIZE          ENDPOINT_MAX_SIZE(AUDIO_STREAM_EPNUM)\r
-               \r
-               /** Sample frequency of the data being transmitted through the streaming endpoint. */\r
-               #define AUDIO_SAMPLE_FREQUENCY       48000\r
-               \r
-       /* Type Defines: */\r
-               /** Type define for the device configuration descriptor structure. This must be defined in the\r
-                *  application code, as the configuration descriptor contains several sub-descriptors which\r
-                *  vary between devices, and which describe the device's usage to the host.\r
-                */\r
-               typedef struct\r
-               {\r
-                       USB_Descriptor_Configuration_Header_t Config;\r
-                       USB_Descriptor_Interface_t            AudioControlInterface;\r
-                       USB_AudioInterface_AC_t               AudioControlInterface_SPC;\r
-                       USB_AudioInputTerminal_t              InputTerminal;\r
-                       USB_AudioOutputTerminal_t             OutputTerminal;\r
-                       USB_Descriptor_Interface_t            AudioStreamInterface_Alt0;\r
-                       USB_Descriptor_Interface_t            AudioStreamInterface_Alt1;\r
-                       USB_AudioInterface_AS_t               AudioStreamInterface_SPC;\r
-                       USB_AudioFormat_t                     AudioFormat;\r
-                       USB_AudioStreamEndpoint_Std_t         AudioEndpoint;\r
-                       USB_AudioStreamEndpoint_Spc_t         AudioEndpoint_SPC;\r
-               } USB_Descriptor_Configuration_t;\r
-               \r
-       /* Function Prototypes: */\r
-               uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
-                                                                                       ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);\r
-\r
-#endif\r
diff --git a/Demos/Device/AudioOutput/Doxygen.conf b/Demos/Device/AudioOutput/Doxygen.conf
deleted file mode 100644 (file)
index 114137e..0000000
+++ /dev/null
@@ -1,1485 +0,0 @@
-# Doxyfile 1.5.7.1\r
-\r
-# This file describes the settings to be used by the documentation system\r
-# doxygen (www.doxygen.org) for a project\r
-#\r
-# All text after a hash (#) is considered a comment and will be ignored\r
-# The format is:\r
-#       TAG = value [value, ...]\r
-# For lists items can also be appended using:\r
-#       TAG += value [value, ...]\r
-# Values that contain spaces should be placed between quotes (" ")\r
-\r
-#---------------------------------------------------------------------------\r
-# Project related configuration options\r
-#---------------------------------------------------------------------------\r
-\r
-# This tag specifies the encoding used for all characters in the config file \r
-# that follow. The default is UTF-8 which is also the encoding used for all \r
-# text before the first occurrence of this tag. Doxygen uses libiconv (or the \r
-# iconv built into libc) for the transcoding. See \r
-# http://www.gnu.org/software/libiconv for the list of possible encodings.\r
-\r
-DOXYFILE_ENCODING      = UTF-8\r
-\r
-# The PROJECT_NAME tag is a single word (or a sequence of words surrounded \r
-# by quotes) that should identify the project.\r
-\r
-PROJECT_NAME           = "LUFA Library - Audio Output Device Demo"\r
-\r
-# The PROJECT_NUMBER tag can be used to enter a project or revision number. \r
-# This could be handy for archiving the generated documentation or \r
-# if some version control system is used.\r
-\r
-PROJECT_NUMBER         = 0.0.0\r
-\r
-# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) \r
-# base path where the generated documentation will be put. \r
-# If a relative path is entered, it will be relative to the location \r
-# where doxygen was started. If left blank the current directory will be used.\r
-\r
-OUTPUT_DIRECTORY       = ./Documentation/\r
-\r
-# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create \r
-# 4096 sub-directories (in 2 levels) under the output directory of each output \r
-# format and will distribute the generated files over these directories. \r
-# Enabling this option can be useful when feeding doxygen a huge amount of \r
-# source files, where putting all generated files in the same directory would \r
-# otherwise cause performance problems for the file system.\r
-\r
-CREATE_SUBDIRS         = YES\r
-\r
-# The OUTPUT_LANGUAGE tag is used to specify the language in which all \r
-# documentation generated by doxygen is written. Doxygen will use this \r
-# information to generate all constant output in the proper language. \r
-# The default language is English, other supported languages are: \r
-# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, \r
-# Croatian, Czech, Danish, Dutch, Farsi, Finnish, French, German, Greek, \r
-# Hungarian, Italian, Japanese, Japanese-en (Japanese with English messages), \r
-# Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, Polish, \r
-# Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, Slovene, \r
-# Spanish, Swedish, and Ukrainian.\r
-\r
-OUTPUT_LANGUAGE        = English\r
-\r
-# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will \r
-# include brief member descriptions after the members that are listed in \r
-# the file and class documentation (similar to JavaDoc). \r
-# Set to NO to disable this.\r
-\r
-BRIEF_MEMBER_DESC      = YES\r
-\r
-# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend \r
-# the brief description of a member or function before the detailed description. \r
-# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the \r
-# brief descriptions will be completely suppressed.\r
-\r
-REPEAT_BRIEF           = YES\r
-\r
-# This tag implements a quasi-intelligent brief description abbreviator \r
-# that is used to form the text in various listings. Each string \r
-# in this list, if found as the leading text of the brief description, will be \r
-# stripped from the text and the result after processing the whole list, is \r
-# used as the annotated text. Otherwise, the brief description is used as-is. \r
-# If left blank, the following values are used ("$name" is automatically \r
-# replaced with the name of the entity): "The $name class" "The $name widget" \r
-# "The $name file" "is" "provides" "specifies" "contains" \r
-# "represents" "a" "an" "the"\r
-\r
-ABBREVIATE_BRIEF       = "The $name class" \\r
-                         "The $name widget" \\r
-                         "The $name file" \\r
-                         is \\r
-                         provides \\r
-                         specifies \\r
-                         contains \\r
-                         represents \\r
-                         a \\r
-                         an \\r
-                         the\r
-\r
-# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then \r
-# Doxygen will generate a detailed section even if there is only a brief \r
-# description.\r
-\r
-ALWAYS_DETAILED_SEC    = NO\r
-\r
-# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all \r
-# inherited members of a class in the documentation of that class as if those \r
-# members were ordinary class members. Constructors, destructors and assignment \r
-# operators of the base classes will not be shown.\r
-\r
-INLINE_INHERITED_MEMB  = NO\r
-\r
-# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full \r
-# path before files name in the file list and in the header files. If set \r
-# to NO the shortest path that makes the file name unique will be used.\r
-\r
-FULL_PATH_NAMES        = YES\r
-\r
-# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag \r
-# can be used to strip a user-defined part of the path. Stripping is \r
-# only done if one of the specified strings matches the left-hand part of \r
-# the path. The tag can be used to show relative paths in the file list. \r
-# If left blank the directory from which doxygen is run is used as the \r
-# path to strip.\r
-\r
-STRIP_FROM_PATH        = \r
-\r
-# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of \r
-# the path mentioned in the documentation of a class, which tells \r
-# the reader which header file to include in order to use a class. \r
-# If left blank only the name of the header file containing the class \r
-# definition is used. Otherwise one should specify the include paths that \r
-# are normally passed to the compiler using the -I flag.\r
-\r
-STRIP_FROM_INC_PATH    = \r
-\r
-# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter \r
-# (but less readable) file names. This can be useful is your file systems \r
-# doesn't support long names like on DOS, Mac, or CD-ROM.\r
-\r
-SHORT_NAMES            = YES\r
-\r
-# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen \r
-# will interpret the first line (until the first dot) of a JavaDoc-style \r
-# comment as the brief description. If set to NO, the JavaDoc \r
-# comments will behave just like regular Qt-style comments \r
-# (thus requiring an explicit @brief command for a brief description.)\r
-\r
-JAVADOC_AUTOBRIEF      = NO\r
-\r
-# If the QT_AUTOBRIEF tag is set to YES then Doxygen will \r
-# interpret the first line (until the first dot) of a Qt-style \r
-# comment as the brief description. If set to NO, the comments \r
-# will behave just like regular Qt-style comments (thus requiring \r
-# an explicit \brief command for a brief description.)\r
-\r
-QT_AUTOBRIEF           = NO\r
-\r
-# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen \r
-# treat a multi-line C++ special comment block (i.e. a block of //! or /// \r
-# comments) as a brief description. This used to be the default behaviour. \r
-# The new default is to treat a multi-line C++ comment block as a detailed \r
-# description. Set this tag to YES if you prefer the old behaviour instead.\r
-\r
-MULTILINE_CPP_IS_BRIEF = NO\r
-\r
-# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented \r
-# member inherits the documentation from any documented member that it \r
-# re-implements.\r
-\r
-INHERIT_DOCS           = YES\r
-\r
-# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce \r
-# a new page for each member. If set to NO, the documentation of a member will \r
-# be part of the file/class/namespace that contains it.\r
-\r
-SEPARATE_MEMBER_PAGES  = NO\r
-\r
-# The TAB_SIZE tag can be used to set the number of spaces in a tab. \r
-# Doxygen uses this value to replace tabs by spaces in code fragments.\r
-\r
-TAB_SIZE               = 4\r
-\r
-# This tag can be used to specify a number of aliases that acts \r
-# as commands in the documentation. An alias has the form "name=value". \r
-# For example adding "sideeffect=\par Side Effects:\n" will allow you to \r
-# put the command \sideeffect (or @sideeffect) in the documentation, which \r
-# will result in a user-defined paragraph with heading "Side Effects:". \r
-# You can put \n's in the value part of an alias to insert newlines.\r
-\r
-ALIASES                = \r
-\r
-# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C \r
-# sources only. Doxygen will then generate output that is more tailored for C. \r
-# For instance, some of the names that are used will be different. The list \r
-# of all members will be omitted, etc.\r
-\r
-OPTIMIZE_OUTPUT_FOR_C  = YES\r
-\r
-# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java \r
-# sources only. Doxygen will then generate output that is more tailored for \r
-# Java. For instance, namespaces will be presented as packages, qualified \r
-# scopes will look different, etc.\r
-\r
-OPTIMIZE_OUTPUT_JAVA   = NO\r
-\r
-# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran \r
-# sources only. Doxygen will then generate output that is more tailored for \r
-# Fortran.\r
-\r
-OPTIMIZE_FOR_FORTRAN   = NO\r
-\r
-# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL \r
-# sources. Doxygen will then generate output that is tailored for \r
-# VHDL.\r
-\r
-OPTIMIZE_OUTPUT_VHDL   = NO\r
-\r
-# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want \r
-# to include (a tag file for) the STL sources as input, then you should \r
-# set this tag to YES in order to let doxygen match functions declarations and \r
-# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. \r
-# func(std::string) {}). This also make the inheritance and collaboration \r
-# diagrams that involve STL classes more complete and accurate.\r
-\r
-BUILTIN_STL_SUPPORT    = NO\r
-\r
-# If you use Microsoft's C++/CLI language, you should set this option to YES to\r
-# enable parsing support.\r
-\r
-CPP_CLI_SUPPORT        = NO\r
-\r
-# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. \r
-# Doxygen will parse them like normal C++ but will assume all classes use public \r
-# instead of private inheritance when no explicit protection keyword is present.\r
-\r
-SIP_SUPPORT            = NO\r
-\r
-# For Microsoft's IDL there are propget and propput attributes to indicate getter \r
-# and setter methods for a property. Setting this option to YES (the default) \r
-# will make doxygen to replace the get and set methods by a property in the \r
-# documentation. This will only work if the methods are indeed getting or \r
-# setting a simple type. If this is not the case, or you want to show the \r
-# methods anyway, you should set this option to NO.\r
-\r
-IDL_PROPERTY_SUPPORT   = YES\r
-\r
-# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC \r
-# tag is set to YES, then doxygen will reuse the documentation of the first \r
-# member in the group (if any) for the other members of the group. By default \r
-# all members of a group must be documented explicitly.\r
-\r
-DISTRIBUTE_GROUP_DOC   = YES\r
-\r
-# Set the SUBGROUPING tag to YES (the default) to allow class member groups of \r
-# the same type (for instance a group of public functions) to be put as a \r
-# subgroup of that type (e.g. under the Public Functions section). Set it to \r
-# NO to prevent subgrouping. Alternatively, this can be done per class using \r
-# the \nosubgrouping command.\r
-\r
-SUBGROUPING            = YES\r
-\r
-# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum \r
-# is documented as struct, union, or enum with the name of the typedef. So \r
-# typedef struct TypeS {} TypeT, will appear in the documentation as a struct \r
-# with name TypeT. When disabled the typedef will appear as a member of a file, \r
-# namespace, or class. And the struct will be named TypeS. This can typically \r
-# be useful for C code in case the coding convention dictates that all compound \r
-# types are typedef'ed and only the typedef is referenced, never the tag name.\r
-\r
-TYPEDEF_HIDES_STRUCT   = NO\r
-\r
-# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to \r
-# determine which symbols to keep in memory and which to flush to disk.\r
-# When the cache is full, less often used symbols will be written to disk.\r
-# For small to medium size projects (<1000 input files) the default value is \r
-# probably good enough. For larger projects a too small cache size can cause \r
-# doxygen to be busy swapping symbols to and from disk most of the time \r
-# causing a significant performance penality. \r
-# If the system has enough physical memory increasing the cache will improve the \r
-# performance by keeping more symbols in memory. Note that the value works on \r
-# a logarithmic scale so increasing the size by one will rougly double the \r
-# memory usage. The cache size is given by this formula: \r
-# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, \r
-# corresponding to a cache size of 2^16 = 65536 symbols\r
-\r
-SYMBOL_CACHE_SIZE      = 0\r
-\r
-#---------------------------------------------------------------------------\r
-# Build related configuration options\r
-#---------------------------------------------------------------------------\r
-\r
-# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in \r
-# documentation are documented, even if no documentation was available. \r
-# Private class members and static file members will be hidden unless \r
-# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES\r
-\r
-EXTRACT_ALL            = YES\r
-\r
-# If the EXTRACT_PRIVATE tag is set to YES all private members of a class \r
-# will be included in the documentation.\r
-\r
-EXTRACT_PRIVATE        = YES\r
-\r
-# If the EXTRACT_STATIC tag is set to YES all static members of a file \r
-# will be included in the documentation.\r
-\r
-EXTRACT_STATIC         = YES\r
-\r
-# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) \r
-# defined locally in source files will be included in the documentation. \r
-# If set to NO only classes defined in header files are included.\r
-\r
-EXTRACT_LOCAL_CLASSES  = YES\r
-\r
-# This flag is only useful for Objective-C code. When set to YES local \r
-# methods, which are defined in the implementation section but not in \r
-# the interface are included in the documentation. \r
-# If set to NO (the default) only methods in the interface are included.\r
-\r
-EXTRACT_LOCAL_METHODS  = NO\r
-\r
-# If this flag is set to YES, the members of anonymous namespaces will be \r
-# extracted and appear in the documentation as a namespace called \r
-# 'anonymous_namespace{file}', where file will be replaced with the base \r
-# name of the file that contains the anonymous namespace. By default \r
-# anonymous namespace are hidden.\r
-\r
-EXTRACT_ANON_NSPACES   = NO\r
-\r
-# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all \r
-# undocumented members of documented classes, files or namespaces. \r
-# If set to NO (the default) these members will be included in the \r
-# various overviews, but no documentation section is generated. \r
-# This option has no effect if EXTRACT_ALL is enabled.\r
-\r
-HIDE_UNDOC_MEMBERS     = NO\r
-\r
-# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all \r
-# undocumented classes that are normally visible in the class hierarchy. \r
-# If set to NO (the default) these classes will be included in the various \r
-# overviews. This option has no effect if EXTRACT_ALL is enabled.\r
-\r
-HIDE_UNDOC_CLASSES     = NO\r
-\r
-# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all \r
-# friend (class|struct|union) declarations. \r
-# If set to NO (the default) these declarations will be included in the \r
-# documentation.\r
-\r
-HIDE_FRIEND_COMPOUNDS  = NO\r
-\r
-# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any \r
-# documentation blocks found inside the body of a function. \r
-# If set to NO (the default) these blocks will be appended to the \r
-# function's detailed documentation block.\r
-\r
-HIDE_IN_BODY_DOCS      = NO\r
-\r
-# The INTERNAL_DOCS tag determines if documentation \r
-# that is typed after a \internal command is included. If the tag is set \r
-# to NO (the default) then the documentation will be excluded. \r
-# Set it to YES to include the internal documentation.\r
-\r
-INTERNAL_DOCS          = NO\r
-\r
-# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate \r
-# file names in lower-case letters. If set to YES upper-case letters are also \r
-# allowed. This is useful if you have classes or files whose names only differ \r
-# in case and if your file system supports case sensitive file names. Windows \r
-# and Mac users are advised to set this option to NO.\r
-\r
-CASE_SENSE_NAMES       = NO\r
-\r
-# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen \r
-# will show members with their full class and namespace scopes in the \r
-# documentation. If set to YES the scope will be hidden.\r
-\r
-HIDE_SCOPE_NAMES       = NO\r
-\r
-# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen \r
-# will put a list of the files that are included by a file in the documentation \r
-# of that file.\r
-\r
-SHOW_INCLUDE_FILES     = YES\r
-\r
-# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] \r
-# is inserted in the documentation for inline members.\r
-\r
-INLINE_INFO            = YES\r
-\r
-# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen \r
-# will sort the (detailed) documentation of file and class members \r
-# alphabetically by member name. If set to NO the members will appear in \r
-# declaration order.\r
-\r
-SORT_MEMBER_DOCS       = YES\r
-\r
-# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the \r
-# brief documentation of file, namespace and class members alphabetically \r
-# by member name. If set to NO (the default) the members will appear in \r
-# declaration order.\r
-\r
-SORT_BRIEF_DOCS        = NO\r
-\r
-# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the \r
-# hierarchy of group names into alphabetical order. If set to NO (the default) \r
-# the group names will appear in their defined order.\r
-\r
-SORT_GROUP_NAMES       = NO\r
-\r
-# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be \r
-# sorted by fully-qualified names, including namespaces. If set to \r
-# NO (the default), the class list will be sorted only by class name, \r
-# not including the namespace part. \r
-# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.\r
-# Note: This option applies only to the class list, not to the \r
-# alphabetical list.\r
-\r
-SORT_BY_SCOPE_NAME     = NO\r
-\r
-# The GENERATE_TODOLIST tag can be used to enable (YES) or \r
-# disable (NO) the todo list. This list is created by putting \todo \r
-# commands in the documentation.\r
-\r
-GENERATE_TODOLIST      = NO\r
-\r
-# The GENERATE_TESTLIST tag can be used to enable (YES) or \r
-# disable (NO) the test list. This list is created by putting \test \r
-# commands in the documentation.\r
-\r
-GENERATE_TESTLIST      = NO\r
-\r
-# The GENERATE_BUGLIST tag can be used to enable (YES) or \r
-# disable (NO) the bug list. This list is created by putting \bug \r
-# commands in the documentation.\r
-\r
-GENERATE_BUGLIST       = NO\r
-\r
-# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or \r
-# disable (NO) the deprecated list. This list is created by putting \r
-# \deprecated commands in the documentation.\r
-\r
-GENERATE_DEPRECATEDLIST= YES\r
-\r
-# The ENABLED_SECTIONS tag can be used to enable conditional \r
-# documentation sections, marked by \if sectionname ... \endif.\r
-\r
-ENABLED_SECTIONS       = \r
-\r
-# The MAX_INITIALIZER_LINES tag determines the maximum number of lines \r
-# the initial value of a variable or define consists of for it to appear in \r
-# the documentation. If the initializer consists of more lines than specified \r
-# here it will be hidden. Use a value of 0 to hide initializers completely. \r
-# The appearance of the initializer of individual variables and defines in the \r
-# documentation can be controlled using \showinitializer or \hideinitializer \r
-# command in the documentation regardless of this setting.\r
-\r
-MAX_INITIALIZER_LINES  = 30\r
-\r
-# Set the SHOW_USED_FILES tag to NO to disable the list of files generated \r
-# at the bottom of the documentation of classes and structs. If set to YES the \r
-# list will mention the files that were used to generate the documentation.\r
-\r
-SHOW_USED_FILES        = YES\r
-\r
-# If the sources in your project are distributed over multiple directories \r
-# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy \r
-# in the documentation. The default is NO.\r
-\r
-SHOW_DIRECTORIES       = YES\r
-\r
-# Set the SHOW_FILES tag to NO to disable the generation of the Files page.\r
-# This will remove the Files entry from the Quick Index and from the \r
-# Folder Tree View (if specified). The default is YES.\r
-\r
-SHOW_FILES             = YES\r
-\r
-# Set the SHOW_NAMESPACES tag to NO to disable the generation of the \r
-# Namespaces page.  This will remove the Namespaces entry from the Quick Index\r
-# and from the Folder Tree View (if specified). The default is YES.\r
-\r
-SHOW_NAMESPACES        = YES\r
-\r
-# The FILE_VERSION_FILTER tag can be used to specify a program or script that \r
-# doxygen should invoke to get the current version for each file (typically from \r
-# the version control system). Doxygen will invoke the program by executing (via \r
-# popen()) the command <command> <input-file>, where <command> is the value of \r
-# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file \r
-# provided by doxygen. Whatever the program writes to standard output \r
-# is used as the file version. See the manual for examples.\r
-\r
-FILE_VERSION_FILTER    = \r
-\r
-# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by \r
-# doxygen. The layout file controls the global structure of the generated output files \r
-# in an output format independent way. The create the layout file that represents \r
-# doxygen's defaults, run doxygen with the -l option. You can optionally specify a \r
-# file name after the option, if omitted DoxygenLayout.xml will be used as the name \r
-# of the layout file.\r
-\r
-LAYOUT_FILE            = \r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to warning and progress messages\r
-#---------------------------------------------------------------------------\r
-\r
-# The QUIET tag can be used to turn on/off the messages that are generated \r
-# by doxygen. Possible values are YES and NO. If left blank NO is used.\r
-\r
-QUIET                  = YES\r
-\r
-# The WARNINGS tag can be used to turn on/off the warning messages that are \r
-# generated by doxygen. Possible values are YES and NO. If left blank \r
-# NO is used.\r
-\r
-WARNINGS               = YES\r
-\r
-# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings \r
-# for undocumented members. If EXTRACT_ALL is set to YES then this flag will \r
-# automatically be disabled.\r
-\r
-WARN_IF_UNDOCUMENTED   = YES\r
-\r
-# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for \r
-# potential errors in the documentation, such as not documenting some \r
-# parameters in a documented function, or documenting parameters that \r
-# don't exist or using markup commands wrongly.\r
-\r
-WARN_IF_DOC_ERROR      = YES\r
-\r
-# This WARN_NO_PARAMDOC option can be abled to get warnings for \r
-# functions that are documented, but have no documentation for their parameters \r
-# or return value. If set to NO (the default) doxygen will only warn about \r
-# wrong or incomplete parameter documentation, but not about the absence of \r
-# documentation.\r
-\r
-WARN_NO_PARAMDOC       = YES\r
-\r
-# The WARN_FORMAT tag determines the format of the warning messages that \r
-# doxygen can produce. The string should contain the $file, $line, and $text \r
-# tags, which will be replaced by the file and line number from which the \r
-# warning originated and the warning text. Optionally the format may contain \r
-# $version, which will be replaced by the version of the file (if it could \r
-# be obtained via FILE_VERSION_FILTER)\r
-\r
-WARN_FORMAT            = "$file:$line: $text"\r
-\r
-# The WARN_LOGFILE tag can be used to specify a file to which warning \r
-# and error messages should be written. If left blank the output is written \r
-# to stderr.\r
-\r
-WARN_LOGFILE           = \r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the input files\r
-#---------------------------------------------------------------------------\r
-\r
-# The INPUT tag can be used to specify the files and/or directories that contain \r
-# documented source files. You may enter file names like "myfile.cpp" or \r
-# directories like "/usr/src/myproject". Separate the files or directories \r
-# with spaces.\r
-\r
-INPUT                  = ./\r
-\r
-# This tag can be used to specify the character encoding of the source files \r
-# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is \r
-# also the default input encoding. Doxygen uses libiconv (or the iconv built \r
-# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for \r
-# the list of possible encodings.\r
-\r
-INPUT_ENCODING         = UTF-8\r
-\r
-# If the value of the INPUT tag contains directories, you can use the \r
-# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \r
-# and *.h) to filter out the source-files in the directories. If left \r
-# blank the following patterns are tested: \r
-# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx \r
-# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90\r
-\r
-FILE_PATTERNS          = *.h \\r
-                         *.c \\r
-                                                *.txt\r
-\r
-# The RECURSIVE tag can be used to turn specify whether or not subdirectories \r
-# should be searched for input files as well. Possible values are YES and NO. \r
-# If left blank NO is used.\r
-\r
-RECURSIVE              = YES\r
-\r
-# The EXCLUDE tag can be used to specify files and/or directories that should \r
-# excluded from the INPUT source files. This way you can easily exclude a \r
-# subdirectory from a directory tree whose root is specified with the INPUT tag.\r
-\r
-EXCLUDE                = \r
-\r
-# The EXCLUDE_SYMLINKS tag can be used select whether or not files or \r
-# directories that are symbolic links (a Unix filesystem feature) are excluded \r
-# from the input.\r
-\r
-EXCLUDE_SYMLINKS       = NO\r
-\r
-# If the value of the INPUT tag contains directories, you can use the \r
-# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude \r
-# certain files from those directories. Note that the wildcards are matched \r
-# against the file with absolute path, so to exclude all test directories \r
-# for example use the pattern */test/*\r
-\r
-EXCLUDE_PATTERNS       = */LowLevel/USBMode.h\r
-\r
-# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names \r
-# (namespaces, classes, functions, etc.) that should be excluded from the \r
-# output. The symbol name can be a fully qualified name, a word, or if the \r
-# wildcard * is used, a substring. Examples: ANamespace, AClass, \r
-# AClass::ANamespace, ANamespace::*Test\r
-\r
-EXCLUDE_SYMBOLS        = __*\r
-\r
-# The EXAMPLE_PATH tag can be used to specify one or more files or \r
-# directories that contain example code fragments that are included (see \r
-# the \include command).\r
-\r
-EXAMPLE_PATH           = \r
-\r
-# If the value of the EXAMPLE_PATH tag contains directories, you can use the \r
-# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \r
-# and *.h) to filter out the source-files in the directories. If left \r
-# blank all files are included.\r
-\r
-EXAMPLE_PATTERNS       = *\r
-\r
-# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be \r
-# searched for input files to be used with the \include or \dontinclude \r
-# commands irrespective of the value of the RECURSIVE tag. \r
-# Possible values are YES and NO. If left blank NO is used.\r
-\r
-EXAMPLE_RECURSIVE      = NO\r
-\r
-# The IMAGE_PATH tag can be used to specify one or more files or \r
-# directories that contain image that are included in the documentation (see \r
-# the \image command).\r
-\r
-IMAGE_PATH             = \r
-\r
-# The INPUT_FILTER tag can be used to specify a program that doxygen should \r
-# invoke to filter for each input file. Doxygen will invoke the filter program \r
-# by executing (via popen()) the command <filter> <input-file>, where <filter> \r
-# is the value of the INPUT_FILTER tag, and <input-file> is the name of an \r
-# input file. Doxygen will then use the output that the filter program writes \r
-# to standard output.  If FILTER_PATTERNS is specified, this tag will be \r
-# ignored.\r
-\r
-INPUT_FILTER           = \r
-\r
-# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern \r
-# basis.  Doxygen will compare the file name with each pattern and apply the \r
-# filter if there is a match.  The filters are a list of the form: \r
-# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further \r
-# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER \r
-# is applied to all files.\r
-\r
-FILTER_PATTERNS        = \r
-\r
-# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using \r
-# INPUT_FILTER) will be used to filter the input files when producing source \r
-# files to browse (i.e. when SOURCE_BROWSER is set to YES).\r
-\r
-FILTER_SOURCE_FILES    = NO\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to source browsing\r
-#---------------------------------------------------------------------------\r
-\r
-# If the SOURCE_BROWSER tag is set to YES then a list of source files will \r
-# be generated. Documented entities will be cross-referenced with these sources. \r
-# Note: To get rid of all source code in the generated output, make sure also \r
-# VERBATIM_HEADERS is set to NO.\r
-\r
-SOURCE_BROWSER         = NO\r
-\r
-# Setting the INLINE_SOURCES tag to YES will include the body \r
-# of functions and classes directly in the documentation.\r
-\r
-INLINE_SOURCES         = NO\r
-\r
-# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct \r
-# doxygen to hide any special comment blocks from generated source code \r
-# fragments. Normal C and C++ comments will always remain visible.\r
-\r
-STRIP_CODE_COMMENTS    = YES\r
-\r
-# If the REFERENCED_BY_RELATION tag is set to YES \r
-# then for each documented function all documented \r
-# functions referencing it will be listed.\r
-\r
-REFERENCED_BY_RELATION = NO\r
-\r
-# If the REFERENCES_RELATION tag is set to YES \r
-# then for each documented function all documented entities \r
-# called/used by that function will be listed.\r
-\r
-REFERENCES_RELATION    = NO\r
-\r
-# If the REFERENCES_LINK_SOURCE tag is set to YES (the default)\r
-# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from\r
-# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will\r
-# link to the source code.  Otherwise they will link to the documentstion.\r
-\r
-REFERENCES_LINK_SOURCE = NO\r
-\r
-# If the USE_HTAGS tag is set to YES then the references to source code \r
-# will point to the HTML generated by the htags(1) tool instead of doxygen \r
-# built-in source browser. The htags tool is part of GNU's global source \r
-# tagging system (see http://www.gnu.org/software/global/global.html). You \r
-# will need version 4.8.6 or higher.\r
-\r
-USE_HTAGS              = NO\r
-\r
-# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen \r
-# will generate a verbatim copy of the header file for each class for \r
-# which an include is specified. Set to NO to disable this.\r
-\r
-VERBATIM_HEADERS       = NO\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the alphabetical class index\r
-#---------------------------------------------------------------------------\r
-\r
-# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index \r
-# of all compounds will be generated. Enable this if the project \r
-# contains a lot of classes, structs, unions or interfaces.\r
-\r
-ALPHABETICAL_INDEX     = YES\r
-\r
-# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then \r
-# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns \r
-# in which this list will be split (can be a number in the range [1..20])\r
-\r
-COLS_IN_ALPHA_INDEX    = 5\r
-\r
-# In case all classes in a project start with a common prefix, all \r
-# classes will be put under the same header in the alphabetical index. \r
-# The IGNORE_PREFIX tag can be used to specify one or more prefixes that \r
-# should be ignored while generating the index headers.\r
-\r
-IGNORE_PREFIX          = \r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the HTML output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_HTML tag is set to YES (the default) Doxygen will \r
-# generate HTML output.\r
-\r
-GENERATE_HTML          = YES\r
-\r
-# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. \r
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
-# put in front of it. If left blank `html' will be used as the default path.\r
-\r
-HTML_OUTPUT            = html\r
-\r
-# The HTML_FILE_EXTENSION tag can be used to specify the file extension for \r
-# each generated HTML page (for example: .htm,.php,.asp). If it is left blank \r
-# doxygen will generate files with .html extension.\r
-\r
-HTML_FILE_EXTENSION    = .html\r
-\r
-# The HTML_HEADER tag can be used to specify a personal HTML header for \r
-# each generated HTML page. If it is left blank doxygen will generate a \r
-# standard header.\r
-\r
-HTML_HEADER            = \r
-\r
-# The HTML_FOOTER tag can be used to specify a personal HTML footer for \r
-# each generated HTML page. If it is left blank doxygen will generate a \r
-# standard footer.\r
-\r
-HTML_FOOTER            = \r
-\r
-# The HTML_STYLESHEET tag can be used to specify a user-defined cascading \r
-# style sheet that is used by each HTML page. It can be used to \r
-# fine-tune the look of the HTML output. If the tag is left blank doxygen \r
-# will generate a default style sheet. Note that doxygen will try to copy \r
-# the style sheet file to the HTML output directory, so don't put your own \r
-# stylesheet in the HTML output directory as well, or it will be erased!\r
-\r
-HTML_STYLESHEET        = \r
-\r
-# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, \r
-# files or namespaces will be aligned in HTML using tables. If set to \r
-# NO a bullet list will be used.\r
-\r
-HTML_ALIGN_MEMBERS     = YES\r
-\r
-# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML \r
-# documentation will contain sections that can be hidden and shown after the \r
-# page has loaded. For this to work a browser that supports \r
-# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox \r
-# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari).\r
-\r
-HTML_DYNAMIC_SECTIONS  = YES\r
-\r
-# If the GENERATE_DOCSET tag is set to YES, additional index files \r
-# will be generated that can be used as input for Apple's Xcode 3 \r
-# integrated development environment, introduced with OSX 10.5 (Leopard). \r
-# To create a documentation set, doxygen will generate a Makefile in the \r
-# HTML output directory. Running make will produce the docset in that \r
-# directory and running "make install" will install the docset in \r
-# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find \r
-# it at startup. \r
-# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information.\r
-\r
-GENERATE_DOCSET        = NO\r
-\r
-# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the \r
-# feed. A documentation feed provides an umbrella under which multiple \r
-# documentation sets from a single provider (such as a company or product suite) \r
-# can be grouped.\r
-\r
-DOCSET_FEEDNAME        = "Doxygen generated docs"\r
-\r
-# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that \r
-# should uniquely identify the documentation set bundle. This should be a \r
-# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen \r
-# will append .docset to the name.\r
-\r
-DOCSET_BUNDLE_ID       = org.doxygen.Project\r
-\r
-# If the GENERATE_HTMLHELP tag is set to YES, additional index files \r
-# will be generated that can be used as input for tools like the \r
-# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) \r
-# of the generated HTML documentation.\r
-\r
-GENERATE_HTMLHELP      = NO\r
-\r
-# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can \r
-# be used to specify the file name of the resulting .chm file. You \r
-# can add a path in front of the file if the result should not be \r
-# written to the html output directory.\r
-\r
-CHM_FILE               = \r
-\r
-# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can \r
-# be used to specify the location (absolute path including file name) of \r
-# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run \r
-# the HTML help compiler on the generated index.hhp.\r
-\r
-HHC_LOCATION           = \r
-\r
-# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag \r
-# controls if a separate .chi index file is generated (YES) or that \r
-# it should be included in the master .chm file (NO).\r
-\r
-GENERATE_CHI           = NO\r
-\r
-# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING\r
-# is used to encode HtmlHelp index (hhk), content (hhc) and project file\r
-# content.\r
-\r
-CHM_INDEX_ENCODING     = \r
-\r
-# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag \r
-# controls whether a binary table of contents is generated (YES) or a \r
-# normal table of contents (NO) in the .chm file.\r
-\r
-BINARY_TOC             = NO\r
-\r
-# The TOC_EXPAND flag can be set to YES to add extra items for group members \r
-# to the contents of the HTML help documentation and to the tree view.\r
-\r
-TOC_EXPAND             = YES\r
-\r
-# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER \r
-# are set, an additional index file will be generated that can be used as input for \r
-# Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated \r
-# HTML documentation.\r
-\r
-GENERATE_QHP           = NO\r
-\r
-# If the QHG_LOCATION tag is specified, the QCH_FILE tag can \r
-# be used to specify the file name of the resulting .qch file. \r
-# The path specified is relative to the HTML output folder.\r
-\r
-QCH_FILE               = \r
-\r
-# The QHP_NAMESPACE tag specifies the namespace to use when generating \r
-# Qt Help Project output. For more information please see \r
-# <a href="http://doc.trolltech.com/qthelpproject.html#namespace">Qt Help Project / Namespace</a>.\r
-\r
-QHP_NAMESPACE          = org.doxygen.Project\r
-\r
-# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating \r
-# Qt Help Project output. For more information please see \r
-# <a href="http://doc.trolltech.com/qthelpproject.html#virtual-folders">Qt Help Project / Virtual Folders</a>.\r
-\r
-QHP_VIRTUAL_FOLDER     = doc\r
-\r
-# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can \r
-# be used to specify the location of Qt's qhelpgenerator. \r
-# If non-empty doxygen will try to run qhelpgenerator on the generated \r
-# .qhp file .\r
-\r
-QHG_LOCATION           = \r
-\r
-# The DISABLE_INDEX tag can be used to turn on/off the condensed index at \r
-# top of each HTML page. The value NO (the default) enables the index and \r
-# the value YES disables it.\r
-\r
-DISABLE_INDEX          = NO\r
-\r
-# This tag can be used to set the number of enum values (range [1..20]) \r
-# that doxygen will group on one line in the generated HTML documentation.\r
-\r
-ENUM_VALUES_PER_LINE   = 1\r
-\r
-# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index\r
-# structure should be generated to display hierarchical information.\r
-# If the tag value is set to FRAME, a side panel will be generated\r
-# containing a tree-like index structure (just like the one that \r
-# is generated for HTML Help). For this to work a browser that supports \r
-# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, \r
-# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are \r
-# probably better off using the HTML help feature. Other possible values \r
-# for this tag are: HIERARCHIES, which will generate the Groups, Directories,\r
-# and Class Hierarchy pages using a tree view instead of an ordered list;\r
-# ALL, which combines the behavior of FRAME and HIERARCHIES; and NONE, which\r
-# disables this behavior completely. For backwards compatibility with previous\r
-# releases of Doxygen, the values YES and NO are equivalent to FRAME and NONE\r
-# respectively.\r
-\r
-GENERATE_TREEVIEW      = YES\r
-\r
-# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be \r
-# used to set the initial width (in pixels) of the frame in which the tree \r
-# is shown.\r
-\r
-TREEVIEW_WIDTH         = 250\r
-\r
-# Use this tag to change the font size of Latex formulas included \r
-# as images in the HTML documentation. The default is 10. Note that \r
-# when you change the font size after a successful doxygen run you need \r
-# to manually remove any form_*.png images from the HTML output directory \r
-# to force them to be regenerated.\r
-\r
-FORMULA_FONTSIZE       = 10\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the LaTeX output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will \r
-# generate Latex output.\r
-\r
-GENERATE_LATEX         = NO\r
-\r
-# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. \r
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
-# put in front of it. If left blank `latex' will be used as the default path.\r
-\r
-LATEX_OUTPUT           = latex\r
-\r
-# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be \r
-# invoked. If left blank `latex' will be used as the default command name.\r
-\r
-LATEX_CMD_NAME         = latex\r
-\r
-# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to \r
-# generate index for LaTeX. If left blank `makeindex' will be used as the \r
-# default command name.\r
-\r
-MAKEINDEX_CMD_NAME     = makeindex\r
-\r
-# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact \r
-# LaTeX documents. This may be useful for small projects and may help to \r
-# save some trees in general.\r
-\r
-COMPACT_LATEX          = NO\r
-\r
-# The PAPER_TYPE tag can be used to set the paper type that is used \r
-# by the printer. Possible values are: a4, a4wide, letter, legal and \r
-# executive. If left blank a4wide will be used.\r
-\r
-PAPER_TYPE             = a4wide\r
-\r
-# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX \r
-# packages that should be included in the LaTeX output.\r
-\r
-EXTRA_PACKAGES         = \r
-\r
-# The LATEX_HEADER tag can be used to specify a personal LaTeX header for \r
-# the generated latex document. The header should contain everything until \r
-# the first chapter. If it is left blank doxygen will generate a \r
-# standard header. Notice: only use this tag if you know what you are doing!\r
-\r
-LATEX_HEADER           = \r
-\r
-# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated \r
-# is prepared for conversion to pdf (using ps2pdf). The pdf file will \r
-# contain links (just like the HTML output) instead of page references \r
-# This makes the output suitable for online browsing using a pdf viewer.\r
-\r
-PDF_HYPERLINKS         = YES\r
-\r
-# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of \r
-# plain latex in the generated Makefile. Set this option to YES to get a \r
-# higher quality PDF documentation.\r
-\r
-USE_PDFLATEX           = YES\r
-\r
-# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. \r
-# command to the generated LaTeX files. This will instruct LaTeX to keep \r
-# running if errors occur, instead of asking the user for help. \r
-# This option is also used when generating formulas in HTML.\r
-\r
-LATEX_BATCHMODE        = NO\r
-\r
-# If LATEX_HIDE_INDICES is set to YES then doxygen will not \r
-# include the index chapters (such as File Index, Compound Index, etc.) \r
-# in the output.\r
-\r
-LATEX_HIDE_INDICES     = NO\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the RTF output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output \r
-# The RTF output is optimized for Word 97 and may not look very pretty with \r
-# other RTF readers or editors.\r
-\r
-GENERATE_RTF           = NO\r
-\r
-# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. \r
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
-# put in front of it. If left blank `rtf' will be used as the default path.\r
-\r
-RTF_OUTPUT             = rtf\r
-\r
-# If the COMPACT_RTF tag is set to YES Doxygen generates more compact \r
-# RTF documents. This may be useful for small projects and may help to \r
-# save some trees in general.\r
-\r
-COMPACT_RTF            = NO\r
-\r
-# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated \r
-# will contain hyperlink fields. The RTF file will \r
-# contain links (just like the HTML output) instead of page references. \r
-# This makes the output suitable for online browsing using WORD or other \r
-# programs which support those fields. \r
-# Note: wordpad (write) and others do not support links.\r
-\r
-RTF_HYPERLINKS         = NO\r
-\r
-# Load stylesheet definitions from file. Syntax is similar to doxygen's \r
-# config file, i.e. a series of assignments. You only have to provide \r
-# replacements, missing definitions are set to their default value.\r
-\r
-RTF_STYLESHEET_FILE    = \r
-\r
-# Set optional variables used in the generation of an rtf document. \r
-# Syntax is similar to doxygen's config file.\r
-\r
-RTF_EXTENSIONS_FILE    = \r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the man page output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_MAN tag is set to YES (the default) Doxygen will \r
-# generate man pages\r
-\r
-GENERATE_MAN           = NO\r
-\r
-# The MAN_OUTPUT tag is used to specify where the man pages will be put. \r
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
-# put in front of it. If left blank `man' will be used as the default path.\r
-\r
-MAN_OUTPUT             = man\r
-\r
-# The MAN_EXTENSION tag determines the extension that is added to \r
-# the generated man pages (default is the subroutine's section .3)\r
-\r
-MAN_EXTENSION          = .3\r
-\r
-# If the MAN_LINKS tag is set to YES and Doxygen generates man output, \r
-# then it will generate one additional man file for each entity \r
-# documented in the real man page(s). These additional files \r
-# only source the real man page, but without them the man command \r
-# would be unable to find the correct page. The default is NO.\r
-\r
-MAN_LINKS              = NO\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the XML output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_XML tag is set to YES Doxygen will \r
-# generate an XML file that captures the structure of \r
-# the code including all documentation.\r
-\r
-GENERATE_XML           = NO\r
-\r
-# The XML_OUTPUT tag is used to specify where the XML pages will be put. \r
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
-# put in front of it. If left blank `xml' will be used as the default path.\r
-\r
-XML_OUTPUT             = xml\r
-\r
-# The XML_SCHEMA tag can be used to specify an XML schema, \r
-# which can be used by a validating XML parser to check the \r
-# syntax of the XML files.\r
-\r
-XML_SCHEMA             = \r
-\r
-# The XML_DTD tag can be used to specify an XML DTD, \r
-# which can be used by a validating XML parser to check the \r
-# syntax of the XML files.\r
-\r
-XML_DTD                = \r
-\r
-# If the XML_PROGRAMLISTING tag is set to YES Doxygen will \r
-# dump the program listings (including syntax highlighting \r
-# and cross-referencing information) to the XML output. Note that \r
-# enabling this will significantly increase the size of the XML output.\r
-\r
-XML_PROGRAMLISTING     = YES\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options for the AutoGen Definitions output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will \r
-# generate an AutoGen Definitions (see autogen.sf.net) file \r
-# that captures the structure of the code including all \r
-# documentation. Note that this feature is still experimental \r
-# and incomplete at the moment.\r
-\r
-GENERATE_AUTOGEN_DEF   = NO\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the Perl module output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_PERLMOD tag is set to YES Doxygen will \r
-# generate a Perl module file that captures the structure of \r
-# the code including all documentation. Note that this \r
-# feature is still experimental and incomplete at the \r
-# moment.\r
-\r
-GENERATE_PERLMOD       = NO\r
-\r
-# If the PERLMOD_LATEX tag is set to YES Doxygen will generate \r
-# the necessary Makefile rules, Perl scripts and LaTeX code to be able \r
-# to generate PDF and DVI output from the Perl module output.\r
-\r
-PERLMOD_LATEX          = NO\r
-\r
-# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be \r
-# nicely formatted so it can be parsed by a human reader.  This is useful \r
-# if you want to understand what is going on.  On the other hand, if this \r
-# tag is set to NO the size of the Perl module output will be much smaller \r
-# and Perl will parse it just the same.\r
-\r
-PERLMOD_PRETTY         = YES\r
-\r
-# The names of the make variables in the generated doxyrules.make file \r
-# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. \r
-# This is useful so different doxyrules.make files included by the same \r
-# Makefile don't overwrite each other's variables.\r
-\r
-PERLMOD_MAKEVAR_PREFIX = \r
-\r
-#---------------------------------------------------------------------------\r
-# Configuration options related to the preprocessor   \r
-#---------------------------------------------------------------------------\r
-\r
-# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will \r
-# evaluate all C-preprocessor directives found in the sources and include \r
-# files.\r
-\r
-ENABLE_PREPROCESSING   = YES\r
-\r
-# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro \r
-# names in the source code. If set to NO (the default) only conditional \r
-# compilation will be performed. Macro expansion can be done in a controlled \r
-# way by setting EXPAND_ONLY_PREDEF to YES.\r
-\r
-MACRO_EXPANSION        = YES\r
-\r
-# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES \r
-# then the macro expansion is limited to the macros specified with the \r
-# PREDEFINED and EXPAND_AS_DEFINED tags.\r
-\r
-EXPAND_ONLY_PREDEF     = YES\r
-\r
-# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files \r
-# in the INCLUDE_PATH (see below) will be search if a #include is found.\r
-\r
-SEARCH_INCLUDES        = YES\r
-\r
-# The INCLUDE_PATH tag can be used to specify one or more directories that \r
-# contain include files that are not input files but should be processed by \r
-# the preprocessor.\r
-\r
-INCLUDE_PATH           = \r
-\r
-# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard \r
-# patterns (like *.h and *.hpp) to filter out the header-files in the \r
-# directories. If left blank, the patterns specified with FILE_PATTERNS will \r
-# be used.\r
-\r
-INCLUDE_FILE_PATTERNS  = \r
-\r
-# The PREDEFINED tag can be used to specify one or more macro names that \r
-# are defined before the preprocessor is started (similar to the -D option of \r
-# gcc). The argument of the tag is a list of macros of the form: name \r
-# or name=definition (no spaces). If the definition and the = are \r
-# omitted =1 is assumed. To prevent a macro definition from being \r
-# undefined via #undef or recursively expanded use the := operator \r
-# instead of the = operator.\r
-\r
-PREDEFINED             = __DOXYGEN__\r
-\r
-# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then \r
-# this tag can be used to specify a list of macro names that should be expanded. \r
-# The macro definition that is found in the sources will be used. \r
-# Use the PREDEFINED tag if you want to use a different macro definition.\r
-\r
-EXPAND_AS_DEFINED      = BUTTLOADTAG\r
-\r
-# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then \r
-# doxygen's preprocessor will remove all function-like macros that are alone \r
-# on a line, have an all uppercase name, and do not end with a semicolon. Such \r
-# function macros are typically used for boiler-plate code, and will confuse \r
-# the parser if not removed.\r
-\r
-SKIP_FUNCTION_MACROS   = YES\r
-\r
-#---------------------------------------------------------------------------\r
-# Configuration::additions related to external references   \r
-#---------------------------------------------------------------------------\r
-\r
-# The TAGFILES option can be used to specify one or more tagfiles. \r
-# Optionally an initial location of the external documentation \r
-# can be added for each tagfile. The format of a tag file without \r
-# this location is as follows: \r
-#   TAGFILES = file1 file2 ... \r
-# Adding location for the tag files is done as follows: \r
-#   TAGFILES = file1=loc1 "file2 = loc2" ... \r
-# where "loc1" and "loc2" can be relative or absolute paths or \r
-# URLs. If a location is present for each tag, the installdox tool \r
-# does not have to be run to correct the links.\r
-# Note that each tag file must have a unique name\r
-# (where the name does NOT include the path)\r
-# If a tag file is not located in the directory in which doxygen \r
-# is run, you must also specify the path to the tagfile here.\r
-\r
-TAGFILES               = \r
-\r
-# When a file name is specified after GENERATE_TAGFILE, doxygen will create \r
-# a tag file that is based on the input files it reads.\r
-\r
-GENERATE_TAGFILE       = \r
-\r
-# If the ALLEXTERNALS tag is set to YES all external classes will be listed \r
-# in the class index. If set to NO only the inherited external classes \r
-# will be listed.\r
-\r
-ALLEXTERNALS           = NO\r
-\r
-# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed \r
-# in the modules index. If set to NO, only the current project's groups will \r
-# be listed.\r
-\r
-EXTERNAL_GROUPS        = YES\r
-\r
-# The PERL_PATH should be the absolute path and name of the perl script \r
-# interpreter (i.e. the result of `which perl').\r
-\r
-PERL_PATH              = /usr/bin/perl\r
-\r
-#---------------------------------------------------------------------------\r
-# Configuration options related to the dot tool   \r
-#---------------------------------------------------------------------------\r
-\r
-# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will \r
-# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base \r
-# or super classes. Setting the tag to NO turns the diagrams off. Note that \r
-# this option is superseded by the HAVE_DOT option below. This is only a \r
-# fallback. It is recommended to install and use dot, since it yields more \r
-# powerful graphs.\r
-\r
-CLASS_DIAGRAMS         = NO\r
-\r
-# You can define message sequence charts within doxygen comments using the \msc \r
-# command. Doxygen will then run the mscgen tool (see \r
-# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the \r
-# documentation. The MSCGEN_PATH tag allows you to specify the directory where \r
-# the mscgen tool resides. If left empty the tool is assumed to be found in the \r
-# default search path.\r
-\r
-MSCGEN_PATH            = \r
-\r
-# If set to YES, the inheritance and collaboration graphs will hide \r
-# inheritance and usage relations if the target is undocumented \r
-# or is not a class.\r
-\r
-HIDE_UNDOC_RELATIONS   = YES\r
-\r
-# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is \r
-# available from the path. This tool is part of Graphviz, a graph visualization \r
-# toolkit from AT&T and Lucent Bell Labs. The other options in this section \r
-# have no effect if this option is set to NO (the default)\r
-\r
-HAVE_DOT               = NO\r
-\r
-# By default doxygen will write a font called FreeSans.ttf to the output \r
-# directory and reference it in all dot files that doxygen generates. This \r
-# font does not include all possible unicode characters however, so when you need \r
-# these (or just want a differently looking font) you can specify the font name \r
-# using DOT_FONTNAME. You need need to make sure dot is able to find the font, \r
-# which can be done by putting it in a standard location or by setting the \r
-# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory \r
-# containing the font.\r
-\r
-DOT_FONTNAME           = FreeSans\r
-\r
-# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. \r
-# The default size is 10pt.\r
-\r
-DOT_FONTSIZE           = 10\r
-\r
-# By default doxygen will tell dot to use the output directory to look for the \r
-# FreeSans.ttf font (which doxygen will put there itself). If you specify a \r
-# different font using DOT_FONTNAME you can set the path where dot \r
-# can find it using this tag.\r
-\r
-DOT_FONTPATH           = \r
-\r
-# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen \r
-# will generate a graph for each documented class showing the direct and \r
-# indirect inheritance relations. Setting this tag to YES will force the \r
-# the CLASS_DIAGRAMS tag to NO.\r
-\r
-CLASS_GRAPH            = NO\r
-\r
-# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen \r
-# will generate a graph for each documented class showing the direct and \r
-# indirect implementation dependencies (inheritance, containment, and \r
-# class references variables) of the class with other documented classes.\r
-\r
-COLLABORATION_GRAPH    = NO\r
-\r
-# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen \r
-# will generate a graph for groups, showing the direct groups dependencies\r
-\r
-GROUP_GRAPHS           = NO\r
-\r
-# If the UML_LOOK tag is set to YES doxygen will generate inheritance and \r
-# collaboration diagrams in a style similar to the OMG's Unified Modeling \r
-# Language.\r
-\r
-UML_LOOK               = NO\r
-\r
-# If set to YES, the inheritance and collaboration graphs will show the \r
-# relations between templates and their instances.\r
-\r
-TEMPLATE_RELATIONS     = NO\r
-\r
-# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT \r
-# tags are set to YES then doxygen will generate a graph for each documented \r
-# file showing the direct and indirect include dependencies of the file with \r
-# other documented files.\r
-\r
-INCLUDE_GRAPH          = NO\r
-\r
-# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and \r
-# HAVE_DOT tags are set to YES then doxygen will generate a graph for each \r
-# documented header file showing the documented files that directly or \r
-# indirectly include this file.\r
-\r
-INCLUDED_BY_GRAPH      = NO\r
-\r
-# If the CALL_GRAPH and HAVE_DOT options are set to YES then \r
-# doxygen will generate a call dependency graph for every global function \r
-# or class method. Note that enabling this option will significantly increase \r
-# the time of a run. So in most cases it will be better to enable call graphs \r
-# for selected functions only using the \callgraph command.\r
-\r
-CALL_GRAPH             = NO\r
-\r
-# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then \r
-# doxygen will generate a caller dependency graph for every global function \r
-# or class method. Note that enabling this option will significantly increase \r
-# the time of a run. So in most cases it will be better to enable caller \r
-# graphs for selected functions only using the \callergraph command.\r
-\r
-CALLER_GRAPH           = NO\r
-\r
-# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen \r
-# will graphical hierarchy of all classes instead of a textual one.\r
-\r
-GRAPHICAL_HIERARCHY    = NO\r
-\r
-# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES \r
-# then doxygen will show the dependencies a directory has on other directories \r
-# in a graphical way. The dependency relations are determined by the #include\r
-# relations between the files in the directories.\r
-\r
-DIRECTORY_GRAPH        = NO\r
-\r
-# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images \r
-# generated by dot. Possible values are png, jpg, or gif\r
-# If left blank png will be used.\r
-\r
-DOT_IMAGE_FORMAT       = png\r
-\r
-# The tag DOT_PATH can be used to specify the path where the dot tool can be \r
-# found. If left blank, it is assumed the dot tool can be found in the path.\r
-\r
-DOT_PATH               = "C:/Program Files/Graphviz2.18/bin"\r
-\r
-# The DOTFILE_DIRS tag can be used to specify one or more directories that \r
-# contain dot files that are included in the documentation (see the \r
-# \dotfile command).\r
-\r
-DOTFILE_DIRS           = \r
-\r
-# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of \r
-# nodes that will be shown in the graph. If the number of nodes in a graph \r
-# becomes larger than this value, doxygen will truncate the graph, which is \r
-# visualized by representing a node as a red box. Note that doxygen if the \r
-# number of direct children of the root node in a graph is already larger than \r
-# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note \r
-# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.\r
-\r
-DOT_GRAPH_MAX_NODES    = 15\r
-\r
-# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the \r
-# graphs generated by dot. A depth value of 3 means that only nodes reachable \r
-# from the root by following a path via at most 3 edges will be shown. Nodes \r
-# that lay further from the root node will be omitted. Note that setting this \r
-# option to 1 or 2 may greatly reduce the computation time needed for large \r
-# code bases. Also note that the size of a graph can be further restricted by \r
-# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.\r
-\r
-MAX_DOT_GRAPH_DEPTH    = 2\r
-\r
-# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent \r
-# background. This is disabled by default, because dot on Windows does not \r
-# seem to support this out of the box. Warning: Depending on the platform used, \r
-# enabling this option may lead to badly anti-aliased labels on the edges of \r
-# a graph (i.e. they become hard to read).\r
-\r
-DOT_TRANSPARENT        = YES\r
-\r
-# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output \r
-# files in one run (i.e. multiple -o and -T options on the command line). This \r
-# makes dot run faster, but since only newer versions of dot (>1.8.10) \r
-# support this, this feature is disabled by default.\r
-\r
-DOT_MULTI_TARGETS      = NO\r
-\r
-# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will \r
-# generate a legend page explaining the meaning of the various boxes and \r
-# arrows in the dot generated graphs.\r
-\r
-GENERATE_LEGEND        = YES\r
-\r
-# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will \r
-# remove the intermediate dot files that are used to generate \r
-# the various graphs.\r
-\r
-DOT_CLEANUP            = YES\r
-\r
-#---------------------------------------------------------------------------\r
-# Configuration::additions related to the search engine   \r
-#---------------------------------------------------------------------------\r
-\r
-# The SEARCHENGINE tag specifies whether or not a search engine should be \r
-# used. If set to NO the values of all tags below this one will be ignored.\r
-\r
-SEARCHENGINE           = NO\r
diff --git a/Demos/Device/AudioOutput/makefile b/Demos/Device/AudioOutput/makefile
deleted file mode 100644 (file)
index 8ad1def..0000000
+++ /dev/null
@@ -1,733 +0,0 @@
-# Hey Emacs, this is a -*- makefile -*-\r
-#----------------------------------------------------------------------------\r
-# WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al.\r
-#  >> Modified for use with the LUFA project. <<\r
-#\r
-# Released to the Public Domain\r
-#\r
-# Additional material for this makefile was written by:\r
-# Peter Fleury\r
-# Tim Henigan\r
-# Colin O'Flynn\r
-# Reiner Patommel\r
-# Markus Pfaff\r
-# Sander Pool\r
-# Frederik Rouleau\r
-# Carlos Lamas\r
-# Dean Camera\r
-# Opendous Inc.\r
-# Denver Gingerich\r
-#\r
-#----------------------------------------------------------------------------\r
-# On command line:\r
-#\r
-# make all = Make software.\r
-#\r
-# make clean = Clean out built project files.\r
-#\r
-# make coff = Convert ELF to AVR COFF.\r
-#\r
-# make extcoff = Convert ELF to AVR Extended COFF.\r
-#\r
-# make program = Download the hex file to the device, using avrdude.\r
-#                Please customize the avrdude settings below first!\r
-#\r
-# make dfu = Download the hex file to the device, using dfu-programmer (must\r
-#            have dfu-programmer installed).\r
-#\r
-# make flip = Download the hex file to the device, using Atmel FLIP (must\r
-#             have Atmel FLIP installed).\r
-#\r
-# make dfu-ee = Download the eeprom file to the device, using dfu-programmer\r
-#               (must have dfu-programmer installed).\r
-#\r
-# make flip-ee = Download the eeprom file to the device, using Atmel FLIP\r
-#                (must have Atmel FLIP installed).\r
-#\r
-# make doxygen = Generate DoxyGen documentation for the project (must have\r
-#                DoxyGen installed)\r
-#\r
-# make debug = Start either simulavr or avarice as specified for debugging, \r
-#              with avr-gdb or avr-insight as the front end for debugging.\r
-#\r
-# make filename.s = Just compile filename.c into the assembler code only.\r
-#\r
-# make filename.i = Create a preprocessed source file for use in submitting\r
-#                   bug reports to the GCC project.\r
-#\r
-# To rebuild project do "make clean" then "make all".\r
-#----------------------------------------------------------------------------\r
-\r
-\r
-# MCU name\r
-MCU = at90usb1287\r
-\r
-\r
-# Target board (see library "Board Types" documentation, USER or blank for projects not requiring\r
-# LUFA board drivers). If USER is selected, put custom board drivers in a directory called \r
-# "Board" inside the application directory.\r
-BOARD  = USBKEY\r
-\r
-\r
-# Processor frequency.\r
-#     This will define a symbol, F_CPU, in all source code files equal to the \r
-#     processor frequency. You can then use this symbol in your source code to \r
-#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done\r
-#     automatically to create a 32-bit value in your source code.\r
-#     Typical values are:\r
-#         F_CPU =  1000000\r
-#         F_CPU =  1843200\r
-#         F_CPU =  2000000\r
-#         F_CPU =  3686400\r
-#         F_CPU =  4000000\r
-#         F_CPU =  7372800\r
-#         F_CPU =  8000000\r
-#         F_CPU = 11059200\r
-#         F_CPU = 14745600\r
-#         F_CPU = 16000000\r
-#         F_CPU = 18432000\r
-#         F_CPU = 20000000\r
-F_CPU = 8000000\r
-\r
-\r
-# Input clock frequency.\r
-#     This will define a symbol, F_CLOCK, in all source code files equal to the \r
-#     input clock frequency (before any prescaling is performed). This value may\r
-#     differ from F_CPU if prescaling is used on the latter, and is required as the\r
-#     raw input clock is fed directly to the PLL sections of the AVR for high speed\r
-#     clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'\r
-#     at the end, this will be done automatically to create a 32-bit value in your\r
-#     source code.\r
-#\r
-#     If no clock division is performed on the input clock inside the AVR (via the\r
-#     CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.\r
-F_CLOCK = 8000000\r
-\r
-\r
-# Output format. (can be srec, ihex, binary)\r
-FORMAT = ihex\r
-\r
-\r
-# Target file name (without extension).\r
-TARGET = AudioOutput\r
-\r
-\r
-# Object files directory\r
-#     To put object files in current directory, use a dot (.), do NOT make\r
-#     this an empty or blank macro!\r
-OBJDIR = .\r
-\r
-\r
-# Path to the LUFA library\r
-LUFA_PATH = ../../..\r
-\r
-\r
-# List C source files here. (C dependencies are automatically generated.)\r
-SRC = $(TARGET).c                                                 \\r
-         Descriptors.c                                               \\r
-         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/DevChapter9.c        \\r
-         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Endpoint.c           \\r
-         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Host.c               \\r
-         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/HostChapter9.c       \\r
-         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/LowLevel.c           \\r
-         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Pipe.c               \\r
-         $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/Events.c            \\r
-         $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBInterrupt.c      \\r
-         $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBTask.c           \\r
-         $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/ConfigDescriptor.c  \\r
-         $(LUFA_PATH)/LUFA/Drivers/USB/Class/Device/Audio.c          \\r
-\r
-\r
-# List C++ source files here. (C dependencies are automatically generated.)\r
-CPPSRC = \r
-\r
-\r
-# List Assembler source files here.\r
-#     Make them always end in a capital .S.  Files ending in a lowercase .s\r
-#     will not be considered source files but generated files (assembler\r
-#     output from the compiler), and will be deleted upon "make clean"!\r
-#     Even though the DOS/Win* filesystem matches both .s and .S the same,\r
-#     it will preserve the spelling of the filenames, and gcc itself does\r
-#     care about how the name is spelled on its command-line.\r
-ASRC =\r
-\r
-\r
-# Optimization level, can be [0, 1, 2, 3, s]. \r
-#     0 = turn off optimization. s = optimize for size.\r
-#     (Note: 3 is not always the best optimization level. See avr-libc FAQ.)\r
-OPT = s\r
-\r
-\r
-# Debugging format.\r
-#     Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs.\r
-#     AVR Studio 4.10 requires dwarf-2.\r
-#     AVR [Extended] COFF format requires stabs, plus an avr-objcopy run.\r
-DEBUG = dwarf-2\r
-\r
-\r
-# List any extra directories to look for include files here.\r
-#     Each directory must be seperated by a space.\r
-#     Use forward slashes for directory separators.\r
-#     For a directory that has spaces, enclose it in quotes.\r
-EXTRAINCDIRS = $(LUFA_PATH)/\r
-\r
-\r
-# Compiler flag to set the C Standard level.\r
-#     c89   = "ANSI" C\r
-#     gnu89 = c89 plus GCC extensions\r
-#     c99   = ISO C99 standard (not yet fully implemented)\r
-#     gnu99 = c99 plus GCC extensions\r
-CSTANDARD = -std=gnu99\r
-\r
-\r
-# Place -D or -U options here for C sources\r
-CDEFS  = -DF_CPU=$(F_CPU)UL -DF_CLOCK=$(F_CLOCK)UL -DBOARD=BOARD_$(BOARD)\r
-CDEFS += -DUSE_NONSTANDARD_DESCRIPTOR_NAMES -DNO_STREAM_CALLBACKS -DUSB_DEVICE_ONLY\r
-CDEFS += -DFIXED_CONTROL_ENDPOINT_SIZE=8 -DUSE_SINGLE_DEVICE_CONFIGURATION\r
-CDEFS += -DUSE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)"\r
-CDEFS += -DAUDIO_OUT_MONO\r
-\r
-# Place -D or -U options here for ASM sources\r
-ADEFS = -DF_CPU=$(F_CPU)\r
-\r
-\r
-# Place -D or -U options here for C++ sources\r
-CPPDEFS = -DF_CPU=$(F_CPU)UL\r
-#CPPDEFS += -D__STDC_LIMIT_MACROS\r
-#CPPDEFS += -D__STDC_CONSTANT_MACROS\r
-\r
-\r
-\r
-#---------------- Compiler Options C ----------------\r
-#  -g*:          generate debugging information\r
-#  -O*:          optimization level\r
-#  -f...:        tuning, see GCC manual and avr-libc documentation\r
-#  -Wall...:     warning level\r
-#  -Wa,...:      tell GCC to pass this to the assembler.\r
-#    -adhlns...: create assembler listing\r
-CFLAGS = -g$(DEBUG)\r
-CFLAGS += $(CDEFS)\r
-CFLAGS += -O$(OPT)\r
-CFLAGS += -funsigned-char\r
-CFLAGS += -funsigned-bitfields\r
-CFLAGS += -ffunction-sections\r
-CFLAGS += -fpack-struct\r
-CFLAGS += -fshort-enums\r
-CFLAGS += -finline-limit=20\r
-CFLAGS += -Wall\r
-CFLAGS += -Wstrict-prototypes\r
-CFLAGS += -Wundef\r
-#CFLAGS += -fno-unit-at-a-time\r
-#CFLAGS += -Wunreachable-code\r
-#CFLAGS += -Wsign-compare\r
-CFLAGS += -Wa,-adhlns=$(<:%.c=$(OBJDIR)/%.lst)\r
-CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))\r
-CFLAGS += $(CSTANDARD)\r
-\r
-\r
-#---------------- Compiler Options C++ ----------------\r
-#  -g*:          generate debugging information\r
-#  -O*:          optimization level\r
-#  -f...:        tuning, see GCC manual and avr-libc documentation\r
-#  -Wall...:     warning level\r
-#  -Wa,...:      tell GCC to pass this to the assembler.\r
-#    -adhlns...: create assembler listing\r
-CPPFLAGS = -g$(DEBUG)\r
-CPPFLAGS += $(CPPDEFS)\r
-CPPFLAGS += -O$(OPT)\r
-CPPFLAGS += -funsigned-char\r
-CPPFLAGS += -funsigned-bitfields\r
-CPPFLAGS += -fpack-struct\r
-CPPFLAGS += -fshort-enums\r
-CPPFLAGS += -fno-exceptions\r
-CPPFLAGS += -Wall\r
-CFLAGS += -Wundef\r
-#CPPFLAGS += -mshort-calls\r
-#CPPFLAGS += -fno-unit-at-a-time\r
-#CPPFLAGS += -Wstrict-prototypes\r
-#CPPFLAGS += -Wunreachable-code\r
-#CPPFLAGS += -Wsign-compare\r
-CPPFLAGS += -Wa,-adhlns=$(<:%.cpp=$(OBJDIR)/%.lst)\r
-CPPFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))\r
-#CPPFLAGS += $(CSTANDARD)\r
-\r
-\r
-#---------------- Assembler Options ----------------\r
-#  -Wa,...:   tell GCC to pass this to the assembler.\r
-#  -adhlns:   create listing\r
-#  -gstabs:   have the assembler create line number information; note that\r
-#             for use in COFF files, additional information about filenames\r
-#             and function names needs to be present in the assembler source\r
-#             files -- see avr-libc docs [FIXME: not yet described there]\r
-#  -listing-cont-lines: Sets the maximum number of continuation lines of hex \r
-#       dump that will be displayed for a given single line of source input.\r
-ASFLAGS = $(ADEFS) -Wa,-adhlns=$(<:%.S=$(OBJDIR)/%.lst),-gstabs,--listing-cont-lines=100\r
-\r
-\r
-#---------------- Library Options ----------------\r
-# Minimalistic printf version\r
-PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min\r
-\r
-# Floating point printf version (requires MATH_LIB = -lm below)\r
-PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt\r
-\r
-# If this is left blank, then it will use the Standard printf version.\r
-PRINTF_LIB = \r
-#PRINTF_LIB = $(PRINTF_LIB_MIN)\r
-#PRINTF_LIB = $(PRINTF_LIB_FLOAT)\r
-\r
-\r
-# Minimalistic scanf version\r
-SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min\r
-\r
-# Floating point + %[ scanf version (requires MATH_LIB = -lm below)\r
-SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt\r
-\r
-# If this is left blank, then it will use the Standard scanf version.\r
-SCANF_LIB = \r
-#SCANF_LIB = $(SCANF_LIB_MIN)\r
-#SCANF_LIB = $(SCANF_LIB_FLOAT)\r
-\r
-\r
-MATH_LIB = -lm\r
-\r
-\r
-# List any extra directories to look for libraries here.\r
-#     Each directory must be seperated by a space.\r
-#     Use forward slashes for directory separators.\r
-#     For a directory that has spaces, enclose it in quotes.\r
-EXTRALIBDIRS = \r
-\r
-\r
-\r
-#---------------- External Memory Options ----------------\r
-\r
-# 64 KB of external RAM, starting after internal RAM (ATmega128!),\r
-# used for variables (.data/.bss) and heap (malloc()).\r
-#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff\r
-\r
-# 64 KB of external RAM, starting after internal RAM (ATmega128!),\r
-# only used for heap (malloc()).\r
-#EXTMEMOPTS = -Wl,--section-start,.data=0x801100,--defsym=__heap_end=0x80ffff\r
-\r
-EXTMEMOPTS =\r
-\r
-\r
-\r
-#---------------- Linker Options ----------------\r
-#  -Wl,...:     tell GCC to pass this to linker.\r
-#    -Map:      create map file\r
-#    --cref:    add cross reference to  map file\r
-LDFLAGS = -Wl,-Map=$(TARGET).map,--cref\r
-LDFLAGS += -Wl,--relax \r
-LDFLAGS += -Wl,--gc-sections\r
-LDFLAGS += $(EXTMEMOPTS)\r
-LDFLAGS += $(patsubst %,-L%,$(EXTRALIBDIRS))\r
-LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)\r
-#LDFLAGS += -T linker_script.x\r
-\r
-\r
-\r
-#---------------- Programming Options (avrdude) ----------------\r
-\r
-# Programming hardware: alf avr910 avrisp bascom bsd \r
-# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500\r
-#\r
-# Type: avrdude -c ?\r
-# to get a full listing.\r
-#\r
-AVRDUDE_PROGRAMMER = jtagmkII\r
-\r
-# com1 = serial port. Use lpt1 to connect to parallel port.\r
-AVRDUDE_PORT = usb\r
-\r
-AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex\r
-#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep\r
-\r
-\r
-# Uncomment the following if you want avrdude's erase cycle counter.\r
-# Note that this counter needs to be initialized first using -Yn,\r
-# see avrdude manual.\r
-#AVRDUDE_ERASE_COUNTER = -y\r
-\r
-# Uncomment the following if you do /not/ wish a verification to be\r
-# performed after programming the device.\r
-#AVRDUDE_NO_VERIFY = -V\r
-\r
-# Increase verbosity level.  Please use this when submitting bug\r
-# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude> \r
-# to submit bug reports.\r
-#AVRDUDE_VERBOSE = -v -v\r
-\r
-AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)\r
-AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY)\r
-AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE)\r
-AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER)\r
-\r
-\r
-\r
-#---------------- Debugging Options ----------------\r
-\r
-# For simulavr only - target MCU frequency.\r
-DEBUG_MFREQ = $(F_CPU)\r
-\r
-# Set the DEBUG_UI to either gdb or insight.\r
-# DEBUG_UI = gdb\r
-DEBUG_UI = insight\r
-\r
-# Set the debugging back-end to either avarice, simulavr.\r
-DEBUG_BACKEND = avarice\r
-#DEBUG_BACKEND = simulavr\r
-\r
-# GDB Init Filename.\r
-GDBINIT_FILE = __avr_gdbinit\r
-\r
-# When using avarice settings for the JTAG\r
-JTAG_DEV = /dev/com1\r
-\r
-# Debugging port used to communicate between GDB / avarice / simulavr.\r
-DEBUG_PORT = 4242\r
-\r
-# Debugging host used to communicate between GDB / avarice / simulavr, normally\r
-#     just set to localhost unless doing some sort of crazy debugging when \r
-#     avarice is running on a different computer.\r
-DEBUG_HOST = localhost\r
-\r
-\r
-\r
-#============================================================================\r
-\r
-\r
-# Define programs and commands.\r
-SHELL = sh\r
-CC = avr-gcc\r
-OBJCOPY = avr-objcopy\r
-OBJDUMP = avr-objdump\r
-SIZE = avr-size\r
-AR = avr-ar rcs\r
-NM = avr-nm\r
-AVRDUDE = avrdude\r
-REMOVE = rm -f\r
-REMOVEDIR = rm -rf\r
-COPY = cp\r
-WINSHELL = cmd\r
-\r
-# Define Messages\r
-# English\r
-MSG_ERRORS_NONE = Errors: none\r
-MSG_BEGIN = -------- begin --------\r
-MSG_END = --------  end  --------\r
-MSG_SIZE_BEFORE = Size before: \r
-MSG_SIZE_AFTER = Size after:\r
-MSG_COFF = Converting to AVR COFF:\r
-MSG_EXTENDED_COFF = Converting to AVR Extended COFF:\r
-MSG_FLASH = Creating load file for Flash:\r
-MSG_EEPROM = Creating load file for EEPROM:\r
-MSG_EXTENDED_LISTING = Creating Extended Listing:\r
-MSG_SYMBOL_TABLE = Creating Symbol Table:\r
-MSG_LINKING = Linking:\r
-MSG_COMPILING = Compiling C:\r
-MSG_COMPILING_CPP = Compiling C++:\r
-MSG_ASSEMBLING = Assembling:\r
-MSG_CLEANING = Cleaning project:\r
-MSG_CREATING_LIBRARY = Creating library:\r
-\r
-\r
-\r
-\r
-# Define all object files.\r
-OBJ = $(SRC:%.c=$(OBJDIR)/%.o) $(CPPSRC:%.cpp=$(OBJDIR)/%.o) $(ASRC:%.S=$(OBJDIR)/%.o) \r
-\r
-# Define all listing files.\r
-LST = $(SRC:%.c=$(OBJDIR)/%.lst) $(CPPSRC:%.cpp=$(OBJDIR)/%.lst) $(ASRC:%.S=$(OBJDIR)/%.lst) \r
-\r
-\r
-# Compiler flags to generate dependency files.\r
-GENDEPFLAGS = -MMD -MP -MF .dep/$(@F).d\r
-\r
-\r
-# Combine all necessary flags and optional flags.\r
-# Add target processor to flags.\r
-ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS)\r
-ALL_CPPFLAGS = -mmcu=$(MCU) -I. -x c++ $(CPPFLAGS) $(GENDEPFLAGS)\r
-ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)\r
-\r
-\r
-\r
-\r
-\r
-# Default target.\r
-all: begin gccversion sizebefore build checkhooks checklibmode checkboard sizeafter end\r
-\r
-# Change the build target to build a HEX file or a library.\r
-build: elf hex eep lss sym\r
-#build: lib\r
-\r
-\r
-elf: $(TARGET).elf\r
-hex: $(TARGET).hex\r
-eep: $(TARGET).eep\r
-lss: $(TARGET).lss\r
-sym: $(TARGET).sym\r
-LIBNAME=lib$(TARGET).a\r
-lib: $(LIBNAME)\r
-\r
-\r
-\r
-# Eye candy.\r
-# AVR Studio 3.x does not check make's exit code but relies on\r
-# the following magic strings to be generated by the compile job.\r
-begin:\r
-       @echo\r
-       @echo $(MSG_BEGIN)\r
-\r
-end:\r
-       @echo $(MSG_END)\r
-       @echo\r
-\r
-\r
-# Display size of file.\r
-HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex\r
-ELFSIZE = $(SIZE) $(MCU_FLAG) $(FORMAT_FLAG) $(TARGET).elf\r
-MCU_FLAG = $(shell $(SIZE) --help | grep -- --mcu > /dev/null && echo --mcu=$(MCU) )\r
-FORMAT_FLAG = $(shell $(SIZE) --help | grep -- --format=.*avr > /dev/null && echo --format=avr )\r
-\r
-sizebefore:\r
-       @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \\r
-       2>/dev/null; echo; fi\r
-\r
-sizeafter:\r
-       @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \\r
-       2>/dev/null; echo; fi\r
-\r
-checkhooks: build\r
-       @echo\r
-       @echo ------- Unhooked LUFA Events -------\r
-       @$(shell) (grep -s '^EVENT_.*LUFA/.*\\.o' $(TARGET).map | \\r
-                  cut -d' ' -f1 | cut -d'_' -f2- | grep ".*") || \\r
-                          echo "(None)"\r
-       @echo ------------------------------------\r
-\r
-checklibmode:\r
-       @echo\r
-       @echo ----------- Library Mode -----------\r
-       @$(shell) ($(CC) $(ALL_CFLAGS) -E -dM - < /dev/null \\r
-                 | grep 'USB_\(DEVICE\|HOST\)_ONLY' | cut -d' ' -f2 | grep ".*") \\r
-                 || echo "No specific mode (both device and host mode allowable)."\r
-       @echo ------------------------------------\r
-\r
-checkboard:\r
-       @echo\r
-       @echo ---------- Selected Board ----------\r
-       @echo Selected board model is $(BOARD).\r
-       @echo ------------------------------------\r
-       \r
-# Display compiler version information.\r
-gccversion : \r
-       @$(CC) --version\r
-\r
-\r
-\r
-# Program the device.  \r
-program: $(TARGET).hex $(TARGET).eep\r
-       $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)\r
-\r
-flip: $(TARGET).hex\r
-       batchisp -hardware usb -device $(MCU) -operation erase f\r
-       batchisp -hardware usb -device $(MCU) -operation loadbuffer $(TARGET).hex program\r
-       batchisp -hardware usb -device $(MCU) -operation start reset 0\r
-\r
-dfu: $(TARGET).hex\r
-       dfu-programmer $(MCU) erase\r
-       dfu-programmer $(MCU) flash --debug 1 $(TARGET).hex\r
-       dfu-programmer $(MCU) reset\r
-\r
-flip-ee: $(TARGET).hex $(TARGET).eep\r
-       copy $(TARGET).eep $(TARGET)eep.hex\r
-       batchisp -hardware usb -device $(MCU) -operation memory EEPROM erase\r
-       batchisp -hardware usb -device $(MCU) -operation memory EEPROM loadbuffer $(TARGET)eep.hex program\r
-       batchisp -hardware usb -device $(MCU) -operation start reset 0\r
-\r
-dfu-ee: $(TARGET).hex $(TARGET).eep\r
-       dfu-programmer $(MCU) flash-eeprom --debug 1 --suppress-bootloader-mem $(TARGET).eep\r
-       dfu-programmer $(MCU) reset\r
-\r
-\r
-# Generate avr-gdb config/init file which does the following:\r
-#     define the reset signal, load the target file, connect to target, and set \r
-#     a breakpoint at main().\r
-gdb-config: \r
-       @$(REMOVE) $(GDBINIT_FILE)\r
-       @echo define reset >> $(GDBINIT_FILE)\r
-       @echo SIGNAL SIGHUP >> $(GDBINIT_FILE)\r
-       @echo end >> $(GDBINIT_FILE)\r
-       @echo file $(TARGET).elf >> $(GDBINIT_FILE)\r
-       @echo target remote $(DEBUG_HOST):$(DEBUG_PORT)  >> $(GDBINIT_FILE)\r
-ifeq ($(DEBUG_BACKEND),simulavr)\r
-       @echo load  >> $(GDBINIT_FILE)\r
-endif\r
-       @echo break main >> $(GDBINIT_FILE)\r
-\r
-debug: gdb-config $(TARGET).elf\r
-ifeq ($(DEBUG_BACKEND), avarice)\r
-       @echo Starting AVaRICE - Press enter when "waiting to connect" message displays.\r
-       @$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \\r
-       $(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT)\r
-       @$(WINSHELL) /c pause\r
-\r
-else\r
-       @$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \\r
-       $(DEBUG_MFREQ) --port $(DEBUG_PORT)\r
-endif\r
-       @$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE)\r
-\r
-\r
-\r
-\r
-# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.\r
-COFFCONVERT = $(OBJCOPY) --debugging\r
-COFFCONVERT += --change-section-address .data-0x800000\r
-COFFCONVERT += --change-section-address .bss-0x800000\r
-COFFCONVERT += --change-section-address .noinit-0x800000\r
-COFFCONVERT += --change-section-address .eeprom-0x810000\r
-\r
-\r
-\r
-coff: $(TARGET).elf\r
-       @echo\r
-       @echo $(MSG_COFF) $(TARGET).cof\r
-       $(COFFCONVERT) -O coff-avr $< $(TARGET).cof\r
-\r
-\r
-extcoff: $(TARGET).elf\r
-       @echo\r
-       @echo $(MSG_EXTENDED_COFF) $(TARGET).cof\r
-       $(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof\r
-\r
-\r
-\r
-# Create final output files (.hex, .eep) from ELF output file.\r
-%.hex: %.elf\r
-       @echo\r
-       @echo $(MSG_FLASH) $@\r
-       $(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@\r
-\r
-%.eep: %.elf\r
-       @echo\r
-       @echo $(MSG_EEPROM) $@\r
-       -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \\r
-       --change-section-lma .eeprom=0 --no-change-warnings -O $(FORMAT) $< $@ || exit 0\r
-\r
-# Create extended listing file from ELF output file.\r
-%.lss: %.elf\r
-       @echo\r
-       @echo $(MSG_EXTENDED_LISTING) $@\r
-       $(OBJDUMP) -h -z -S $< > $@\r
-\r
-# Create a symbol table from ELF output file.\r
-%.sym: %.elf\r
-       @echo\r
-       @echo $(MSG_SYMBOL_TABLE) $@\r
-       $(NM) -n $< > $@\r
-\r
-\r
-\r
-# Create library from object files.\r
-.SECONDARY : $(TARGET).a\r
-.PRECIOUS : $(OBJ)\r
-%.a: $(OBJ)\r
-       @echo\r
-       @echo $(MSG_CREATING_LIBRARY) $@\r
-       $(AR) $@ $(OBJ)\r
-\r
-\r
-# Link: create ELF output file from object files.\r
-.SECONDARY : $(TARGET).elf\r
-.PRECIOUS : $(OBJ)\r
-%.elf: $(OBJ)\r
-       @echo\r
-       @echo $(MSG_LINKING) $@\r
-       $(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)\r
-\r
-\r
-# Compile: create object files from C source files.\r
-$(OBJDIR)/%.o : %.c\r
-       @echo\r
-       @echo $(MSG_COMPILING) $<\r
-       $(CC) -c $(ALL_CFLAGS) $< -o $@ \r
-\r
-\r
-# Compile: create object files from C++ source files.\r
-$(OBJDIR)/%.o : %.cpp\r
-       @echo\r
-       @echo $(MSG_COMPILING_CPP) $<\r
-       $(CC) -c $(ALL_CPPFLAGS) $< -o $@ \r
-\r
-\r
-# Compile: create assembler files from C source files.\r
-%.s : %.c\r
-       $(CC) -S $(ALL_CFLAGS) $< -o $@\r
-\r
-\r
-# Compile: create assembler files from C++ source files.\r
-%.s : %.cpp\r
-       $(CC) -S $(ALL_CPPFLAGS) $< -o $@\r
-\r
-\r
-# Assemble: create object files from assembler source files.\r
-$(OBJDIR)/%.o : %.S\r
-       @echo\r
-       @echo $(MSG_ASSEMBLING) $<\r
-       $(CC) -c $(ALL_ASFLAGS) $< -o $@\r
-\r
-\r
-# Create preprocessed source for use in sending a bug report.\r
-%.i : %.c\r
-       $(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ \r
-       \r
-\r
-# Target: clean project.\r
-clean: begin clean_list clean_binary end\r
-\r
-clean_binary:\r
-       $(REMOVE) $(TARGET).hex\r
-       \r
-clean_list:\r
-       @echo $(MSG_CLEANING)\r
-       $(REMOVE) $(TARGET).eep\r
-       $(REMOVE) $(TARGET)eep.hex\r
-       $(REMOVE) $(TARGET).cof\r
-       $(REMOVE) $(TARGET).elf\r
-       $(REMOVE) $(TARGET).map\r
-       $(REMOVE) $(TARGET).sym\r
-       $(REMOVE) $(TARGET).lss\r
-       $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.o)\r
-       $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.lst)\r
-       $(REMOVE) $(SRC:.c=.s)\r
-       $(REMOVE) $(SRC:.c=.d)\r
-       $(REMOVE) $(SRC:.c=.i)\r
-       $(REMOVEDIR) .dep\r
-\r
-\r
-doxygen:\r
-       @echo Generating Project Documentation...\r
-       @doxygen Doxygen.conf\r
-       @echo Documentation Generation Complete.\r
-\r
-clean_doxygen:\r
-       rm -rf Documentation\r
-\r
-# Create object files directory\r
-$(shell mkdir $(OBJDIR) 2>/dev/null)\r
-\r
-\r
-# Include the dependency files.\r
--include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)\r
-\r
-\r
-# Listing of phony targets.\r
-.PHONY : all checkhooks checklibmode checkboard   \\r
-begin finish end sizebefore sizeafter gccversion  \\r
-build elf hex eep lss sym coff extcoff clean      \\r
-clean_list clean_binary program debug gdb-config  \\r
-doxygen dfu flip flip-ee dfu-ee
\ No newline at end of file
diff --git a/Demos/Device/CDC/CDC.aps b/Demos/Device/CDC/CDC.aps
deleted file mode 100644 (file)
index 83dde59..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<AVRStudio><MANAGEMENT><ProjectName>CDC</ProjectName><Created>30-Sep-2008 14:04:34</Created><LastEdit>30-Sep-2008 14:04:56</LastEdit><ICON>241</ICON><ProjectType>0</ProjectType><Created>30-Sep-2008 14:04:34</Created><Version>4</Version><Build>4, 14, 0, 589</Build><ProjectTypeName>AVR GCC</ProjectTypeName></MANAGEMENT><CODE_CREATION><ObjectFile></ObjectFile><EntryFile></EntryFile><SaveFolder>C:\Users\Dean\Documents\Electronics\Projects\WORK\MyUSBWORK\Demos\CDC\</SaveFolder></CODE_CREATION><DEBUG_TARGET><CURRENT_TARGET></CURRENT_TARGET><CURRENT_PART></CURRENT_PART><BREAKPOINTS></BREAKPOINTS><IO_EXPAND><HIDE>false</HIDE></IO_EXPAND><REGISTERNAMES><Register>R00</Register><Register>R01</Register><Register>R02</Register><Register>R03</Register><Register>R04</Register><Register>R05</Register><Register>R06</Register><Register>R07</Register><Register>R08</Register><Register>R09</Register><Register>R10</Register><Register>R11</Register><Register>R12</Register><Register>R13</Register><Register>R14</Register><Register>R15</Register><Register>R16</Register><Register>R17</Register><Register>R18</Register><Register>R19</Register><Register>R20</Register><Register>R21</Register><Register>R22</Register><Register>R23</Register><Register>R24</Register><Register>R25</Register><Register>R26</Register><Register>R27</Register><Register>R28</Register><Register>R29</Register><Register>R30</Register><Register>R31</Register></REGISTERNAMES><COM>Auto</COM><COMType>0</COMType><WATCHNUM>0</WATCHNUM><WATCHNAMES><Pane0></Pane0><Pane1></Pane1><Pane2></Pane2><Pane3></Pane3></WATCHNAMES><BreakOnTrcaeFull>0</BreakOnTrcaeFull></DEBUG_TARGET><Debugger><Triggers></Triggers></Debugger><AVRGCCPLUGIN><FILES><SOURCEFILE>CDC.c</SOURCEFILE><SOURCEFILE>Descriptors.c</SOURCEFILE><HEADERFILE>CDC.h</HEADERFILE><HEADERFILE>Descriptors.h</HEADERFILE><OTHERFILE>makefile</OTHERFILE></FILES><CONFIGS><CONFIG><NAME>default</NAME><USESEXTERNALMAKEFILE>YES</USESEXTERNALMAKEFILE><EXTERNALMAKEFILE>makefile</EXTERNALMAKEFILE><PART>atmega128</PART><HEX>1</HEX><LIST>1</LIST><MAP>1</MAP><OUTPUTFILENAME>CDC.elf</OUTPUTFILENAME><OUTPUTDIR>default\</OUTPUTDIR><ISDIRTY>1</ISDIRTY><OPTIONS/><INCDIRS/><LIBDIRS/><LIBS/><LINKOBJECTS/><OPTIONSFORALL>-Wall -gdwarf-2 -std=gnu99 -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums</OPTIONSFORALL><LINKEROPTIONS></LINKEROPTIONS><SEGMENTS/></CONFIG></CONFIGS><LASTCONFIG>default</LASTCONFIG><USES_WINAVR>1</USES_WINAVR><GCC_LOC>C:\WinAVR-20080512\bin\avr-gcc.exe</GCC_LOC><MAKE_LOC>C:\WinAVR-20080512\utils\bin\make.exe</MAKE_LOC></AVRGCCPLUGIN><IOView><usergroups/><sort sorted="0" column="0" ordername="0" orderaddress="0" ordergroup="0"/></IOView><Files></Files><Events><Bookmarks></Bookmarks></Events><Trace><Filters></Filters></Trace></AVRStudio>\r
diff --git a/Demos/Device/CDC/CDC.c b/Demos/Device/CDC/CDC.c
deleted file mode 100644 (file)
index 6f15393..0000000
+++ /dev/null
@@ -1,157 +0,0 @@
-/*\r
-             LUFA Library\r
-     Copyright (C) Dean Camera, 2009.\r
-              \r
-  dean [at] fourwalledcubicle [dot] com\r
-      www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
-  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
-  Permission to use, copy, modify, and distribute this software\r
-  and its documentation for any purpose and without fee is hereby\r
-  granted, provided that the above copyright notice appear in all\r
-  copies and that both that the copyright notice and this\r
-  permission notice and warranty disclaimer appear in supporting\r
-  documentation, and that the name of the author not be used in\r
-  advertising or publicity pertaining to distribution of the\r
-  software without specific, written prior permission.\r
-\r
-  The author disclaim all warranties with regard to this\r
-  software, including all implied warranties of merchantability\r
-  and fitness.  In no event shall the author be liable for any\r
-  special, indirect or consequential damages or any damages\r
-  whatsoever resulting from loss of use, data or profits, whether\r
-  in an action of contract, negligence or other tortious action,\r
-  arising out of or in connection with the use or performance of\r
-  this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- *  Main source file for the CDC demo. This file contains the main tasks of\r
- *  the demo and is responsible for the initial application hardware configuration.\r
- */\r
\r
-#include "CDC.h"\r
-\r
-/** LUFA CDC Class driver interface configuration and state information. This structure is\r
- *  passed to all CDC Class driver functions, so that multiple instances of the same class\r
- *  within a device can be differentiated from one another.\r
- */\r
-USB_ClassInfo_CDC_t VirtualSerial_CDC_Interface =\r
-       {\r
-               .ControlInterfaceNumber     = 0,\r
-\r
-               .DataINEndpointNumber       = CDC_TX_EPNUM,\r
-               .DataINEndpointSize         = CDC_TXRX_EPSIZE,\r
-\r
-               .DataOUTEndpointNumber      = CDC_RX_EPNUM,\r
-               .DataOUTEndpointSize        = CDC_TXRX_EPSIZE,\r
-\r
-               .NotificationEndpointNumber = CDC_NOTIFICATION_EPNUM,\r
-               .NotificationEndpointSize   = CDC_NOTIFICATION_EPSIZE,\r
-       };\r
-\r
-/** Main program entry point. This routine contains the overall program flow, including initial\r
- *  setup of all components and the main program loop.\r
- */\r
-int main(void)\r
-{\r
-       SetupHardware();\r
-       \r
-       LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);\r
-\r
-       for (;;)\r
-       {\r
-               CheckJoystickMovement();\r
-               \r
-               uint16_t BytesToDiscard = USB_CDC_BytesReceived(&VirtualSerial_CDC_Interface);\r
-               while (BytesToDiscard--)\r
-                 USB_CDC_ReceiveByte(&VirtualSerial_CDC_Interface);\r
-\r
-               USB_CDC_USBTask(&VirtualSerial_CDC_Interface);\r
-               USB_USBTask();\r
-       }\r
-}\r
-\r
-/** Configures the board hardware and chip peripherals for the demo's functionality. */\r
-void SetupHardware(void)\r
-{\r
-       /* Disable watchdog if enabled by bootloader/fuses */\r
-       MCUSR &= ~(1 << WDRF);\r
-       wdt_disable();\r
-\r
-       /* Disable clock division */\r
-       clock_prescale_set(clock_div_1);\r
-\r
-       /* Hardware Initialization */\r
-       Joystick_Init();\r
-       LEDs_Init();\r
-       USB_Init();\r
-}\r
-\r
-/** Checks for changes in the position of the board joystick, sending strings to the host upon each change. */\r
-void CheckJoystickMovement(void)\r
-{\r
-       uint8_t     JoyStatus_LCL = Joystick_GetStatus();\r
-       char*       ReportString  = NULL;\r
-       static bool ActionSent    = false;\r
-       \r
-       char* JoystickStrings[] =\r
-               {\r
-                       "Joystick Up\r\n",\r
-                       "Joystick Down\r\n",\r
-                       "Joystick Left\r\n",\r
-                       "Joystick Right\r\n",\r
-                       "Joystick Pressed\r\n",\r
-               };\r
-\r
-       if (JoyStatus_LCL & JOY_UP)\r
-         ReportString = JoystickStrings[0];\r
-       else if (JoyStatus_LCL & JOY_DOWN)\r
-         ReportString = JoystickStrings[1];\r
-       else if (JoyStatus_LCL & JOY_LEFT)\r
-         ReportString = JoystickStrings[2];\r
-       else if (JoyStatus_LCL & JOY_RIGHT)\r
-         ReportString = JoystickStrings[3];\r
-       else if (JoyStatus_LCL & JOY_PRESS)\r
-         ReportString = JoystickStrings[4];\r
-       else\r
-         ActionSent = false;\r
-         \r
-       if ((ReportString != NULL) && (ActionSent == false))\r
-       {\r
-               ActionSent = true;\r
-               \r
-               USB_CDC_SendString(&VirtualSerial_CDC_Interface, ReportString, strlen(ReportString));           \r
-       }\r
-}\r
-\r
-/** Event handler for the library USB Connection event. */\r
-void EVENT_USB_Connect(void)\r
-{\r
-       LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING);\r
-}\r
-\r
-/** Event handler for the library USB Disconnection event. */\r
-void EVENT_USB_Disconnect(void)\r
-{\r
-       LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);\r
-}\r
-\r
-/** Event handler for the library USB Configuration Changed event. */\r
-void EVENT_USB_ConfigurationChanged(void)\r
-{\r
-       LEDs_SetAllLEDs(LEDMASK_USB_READY);\r
-\r
-       if (!(USB_CDC_ConfigureEndpoints(&VirtualSerial_CDC_Interface)))\r
-         LEDs_SetAllLEDs(LEDMASK_USB_ERROR);\r
-}\r
-\r
-/** Event handler for the library USB Unhandled Control Packet event. */\r
-void EVENT_USB_UnhandledControlPacket(void)\r
-{\r
-       USB_CDC_ProcessControlPacket(&VirtualSerial_CDC_Interface);\r
-}\r
diff --git a/Demos/Device/CDC/CDC.h b/Demos/Device/CDC/CDC.h
deleted file mode 100644 (file)
index 23072d6..0000000
+++ /dev/null
@@ -1,75 +0,0 @@
-/*\r
-             LUFA Library\r
-     Copyright (C) Dean Camera, 2009.\r
-              \r
-  dean [at] fourwalledcubicle [dot] com\r
-      www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
-  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
-  Permission to use, copy, modify, and distribute this software\r
-  and its documentation for any purpose and without fee is hereby\r
-  granted, provided that the above copyright notice appear in all\r
-  copies and that both that the copyright notice and this\r
-  permission notice and warranty disclaimer appear in supporting\r
-  documentation, and that the name of the author not be used in\r
-  advertising or publicity pertaining to distribution of the\r
-  software without specific, written prior permission.\r
-\r
-  The author disclaim all warranties with regard to this\r
-  software, including all implied warranties of merchantability\r
-  and fitness.  In no event shall the author be liable for any\r
-  special, indirect or consequential damages or any damages\r
-  whatsoever resulting from loss of use, data or profits, whether\r
-  in an action of contract, negligence or other tortious action,\r
-  arising out of or in connection with the use or performance of\r
-  this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- *  Header file for CDC.c.\r
- */\r
-\r
-#ifndef _CDC_H_\r
-#define _CDC_H_\r
-\r
-       /* Includes: */\r
-               #include <avr/io.h>\r
-               #include <avr/wdt.h>\r
-               #include <avr/power.h>\r
-               #include <string.h>\r
-\r
-               #include "Descriptors.h"\r
-\r
-               #include <LUFA/Version.h>\r
-               #include <LUFA/Drivers/Board/LEDs.h>\r
-               #include <LUFA/Drivers/Board/Joystick.h>\r
-               #include <LUFA/Drivers/USB/USB.h>\r
-               #include <LUFA/Drivers/USB/Class/Device/CDC.h>\r
-\r
-       /* Macros: */\r
-               /** LED mask for the library LED driver, to indicate that the USB interface is not ready. */\r
-               #define LEDMASK_USB_NOTREADY      LEDS_LED1\r
-\r
-               /** LED mask for the library LED driver, to indicate that the USB interface is enumerating. */\r
-               #define LEDMASK_USB_ENUMERATING  (LEDS_LED2 | LEDS_LED3)\r
-\r
-               /** LED mask for the library LED driver, to indicate that the USB interface is ready. */\r
-               #define LEDMASK_USB_READY        (LEDS_LED2 | LEDS_LED4)\r
-\r
-               /** LED mask for the library LED driver, to indicate that an error has occurred in the USB interface. */\r
-               #define LEDMASK_USB_ERROR        (LEDS_LED1 | LEDS_LED3)\r
-               \r
-       /* Function Prototypes: */\r
-               void SetupHardware(void);\r
-               void CheckJoystickMovement(void);\r
-\r
-               void EVENT_USB_Connect(void);\r
-               void EVENT_USB_Disconnect(void);\r
-               void EVENT_USB_ConfigurationChanged(void);\r
-               void EVENT_USB_UnhandledControlPacket(void);\r
-\r
-#endif\r
diff --git a/Demos/Device/CDC/CDC.txt b/Demos/Device/CDC/CDC.txt
deleted file mode 100644 (file)
index 8e13b55..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-/** \file\r
- *\r
- *  This file contains special DoxyGen information for the generation of the main page and other special\r
- *  documentation pages. It is not a project source file.\r
- */\r
\r
-/** \mainpage Communications Device Class Device (Virtual Serial Port)\r
- *\r
- *  \section SSec_Info USB Information:\r
- *\r
- *  The following table gives a rundown of the USB utilization of this demo.\r
- *\r
- *  <table>\r
- *   <tr>\r
- *    <td><b>USB Mode:</b></td>\r
- *    <td>Device</td>\r
- *   </tr>\r
- *   <tr>\r
- *    <td><b>USB Class:</b></td>\r
- *    <td>Communications Device Class (CDC)</td>\r
- *   </tr>\r
- *   <tr> \r
- *    <td><b>USB Subclass:</b></td>\r
- *    <td>Abstract Control Model (ACM)</td>\r
- *   </tr>\r
- *   <tr>\r
- *    <td><b>Relevant Standards:</b></td>\r
- *    <td>USBIF CDC Class Standard</td>\r
- *   </tr>\r
- *   <tr>\r
- *    <td><b>Usable Speeds:</b></td>\r
- *    <td>Full Speed Mode</td>\r
- *   </tr>\r
- *  </table>\r
- *\r
- *  \section SSec_Description Project Description: \r
- *\r
- *  Communications Device Class demonstration application.\r
- *  This gives a simple reference application for implementing\r
- *  a CDC device acting as a virtual serial port. Joystick\r
- *  actions are transmitted to the host as strings. The device\r
- *  does not respond to serial data sent from the host.\r
- *  \r
- *  After running this demo for the first time on a new computer,\r
- *  you will need to supply the .INF file located in this demo\r
- *  project's directory as the device's driver when running under\r
- *  Windows. This will enable Windows to use its inbuilt CDC drivers,\r
- *  negating the need for custom drivers for the device. Other\r
- *  Operating Systems should automatically use their own inbuilt\r
- *  CDC-ACM drivers.\r
- *\r
- *  \section SSec_Options Project Options\r
- *\r
- *  The following defines can be found in this demo, which can control the demo behaviour when defined, or changed in value.\r
- *\r
- *  <table>\r
- *   <tr>\r
- *    <td>\r
- *     None\r
- *    </td>\r
- *   </tr>\r
- *  </table>\r
- */
\ No newline at end of file
diff --git a/Demos/Device/CDC/Descriptors.c b/Demos/Device/CDC/Descriptors.c
deleted file mode 100644 (file)
index 03e6882..0000000
+++ /dev/null
@@ -1,263 +0,0 @@
-/*\r
-             LUFA Library\r
-     Copyright (C) Dean Camera, 2009.\r
-              \r
-  dean [at] fourwalledcubicle [dot] com\r
-      www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
-  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
-  Permission to use, copy, modify, and distribute this software\r
-  and its documentation for any purpose and without fee is hereby\r
-  granted, provided that the above copyright notice appear in all\r
-  copies and that both that the copyright notice and this\r
-  permission notice and warranty disclaimer appear in supporting\r
-  documentation, and that the name of the author not be used in\r
-  advertising or publicity pertaining to distribution of the\r
-  software without specific, written prior permission.\r
-\r
-  The author disclaim all warranties with regard to this\r
-  software, including all implied warranties of merchantability\r
-  and fitness.  In no event shall the author be liable for any\r
-  special, indirect or consequential damages or any damages\r
-  whatsoever resulting from loss of use, data or profits, whether\r
-  in an action of contract, negligence or other tortious action,\r
-  arising out of or in connection with the use or performance of\r
-  this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- *  USB Device Descriptors, for library use when in USB device mode. Descriptors are special \r
- *  computer-readable structures which the host requests upon device enumeration, to determine\r
- *  the device's capabilities and functions.  \r
- */\r
-\r
-#include "Descriptors.h"\r
-\r
-/** Device descriptor structure. This descriptor, located in FLASH memory, describes the overall\r
- *  device characteristics, including the supported USB version, control endpoint size and the\r
- *  number of device configurations. The descriptor is read out by the USB host when the enumeration\r
- *  process begins.\r
- */\r
-USB_Descriptor_Device_t PROGMEM DeviceDescriptor =\r
-{\r
-       .Header                 = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device},\r
-               \r
-       .USBSpecification       = VERSION_BCD(01.10),\r
-       .Class                  = 0x02,\r
-       .SubClass               = 0x00,\r
-       .Protocol               = 0x00,\r
-                               \r
-       .Endpoint0Size          = FIXED_CONTROL_ENDPOINT_SIZE,\r
-               \r
-       .VendorID               = 0x03EB,\r
-       .ProductID              = 0x2044,\r
-       .ReleaseNumber          = 0x0000,\r
-               \r
-       .ManufacturerStrIndex   = 0x01,\r
-       .ProductStrIndex        = 0x02,\r
-       .SerialNumStrIndex      = NO_DESCRIPTOR,\r
-               \r
-       .NumberOfConfigurations = 1\r
-};\r
-\r
-/** Configuration descriptor structure. This descriptor, located in FLASH memory, describes the usage\r
- *  of the device in one of its supported configurations, including information about any device interfaces\r
- *  and endpoints. The descriptor is read out by the USB host during the enumeration process when selecting\r
- *  a configuration so that the host may correctly communicate with the USB device.\r
- */\r
-USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =\r
-{\r
-       .Config = \r
-               {\r
-                       .Header                 = {.Size = sizeof(USB_Descriptor_Configuration_Header_t), .Type = DTYPE_Configuration},\r
-\r
-                       .TotalConfigurationSize = sizeof(USB_Descriptor_Configuration_t),\r
-                       .TotalInterfaces        = 2,\r
-                               \r
-                       .ConfigurationNumber    = 1,\r
-                       .ConfigurationStrIndex  = NO_DESCRIPTOR,\r
-                               \r
-                       .ConfigAttributes       = (USB_CONFIG_ATTR_BUSPOWERED | USB_CONFIG_ATTR_SELFPOWERED),\r
-                       \r
-                       .MaxPowerConsumption    = USB_CONFIG_POWER_MA(100)\r
-               },\r
-               \r
-       .CCI_Interface = \r
-               {\r
-                       .Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},\r
-\r
-                       .InterfaceNumber        = 0,\r
-                       .AlternateSetting       = 0,\r
-                       \r
-                       .TotalEndpoints         = 1,\r
-                               \r
-                       .Class                  = 0x02,\r
-                       .SubClass               = 0x02,\r
-                       .Protocol               = 0x01,\r
-                               \r
-                       .InterfaceStrIndex      = NO_DESCRIPTOR\r
-               },\r
-\r
-       .CDC_Functional_IntHeader = \r
-               {\r
-                       .Header                 = {.Size = sizeof(CDC_FUNCTIONAL_DESCRIPTOR(2)), .Type = 0x24},\r
-                       .SubType                = 0x00,\r
-                       \r
-                       .Data                   = {0x01, 0x10}\r
-               },\r
-\r
-       .CDC_Functional_CallManagement = \r
-               {\r
-                       .Header                 = {.Size = sizeof(CDC_FUNCTIONAL_DESCRIPTOR(2)), .Type = 0x24},\r
-                       .SubType                = 0x01,\r
-                       \r
-                       .Data                   = {0x03, 0x01}\r
-               },\r
-\r
-       .CDC_Functional_AbstractControlManagement = \r
-               {\r
-                       .Header                 = {.Size = sizeof(CDC_FUNCTIONAL_DESCRIPTOR(1)), .Type = 0x24},\r
-                       .SubType                = 0x02,\r
-                       \r
-                       .Data                   = {0x06}\r
-               },\r
-               \r
-       .CDC_Functional_Union = \r
-               {\r
-                       .Header                 = {.Size = sizeof(CDC_FUNCTIONAL_DESCRIPTOR(2)), .Type = 0x24},\r
-                       .SubType                = 0x06,\r
-                       \r
-                       .Data                   = {0x00, 0x01}\r
-               },\r
-\r
-       .ManagementEndpoint = \r
-               {\r
-                       .Header                 = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},\r
-                                                                                \r
-                       .EndpointAddress        = (ENDPOINT_DESCRIPTOR_DIR_IN | CDC_NOTIFICATION_EPNUM),\r
-                       .Attributes             = EP_TYPE_INTERRUPT,\r
-                       .EndpointSize           = CDC_NOTIFICATION_EPSIZE,\r
-                       .PollingIntervalMS      = 0xFF\r
-               },\r
-\r
-       .DCI_Interface = \r
-               {\r
-                       .Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},\r
-\r
-                       .InterfaceNumber        = 1,\r
-                       .AlternateSetting       = 0,\r
-                       \r
-                       .TotalEndpoints         = 2,\r
-                               \r
-                       .Class                  = 0x0A,\r
-                       .SubClass               = 0x00,\r
-                       .Protocol               = 0x00,\r
-                               \r
-                       .InterfaceStrIndex      = NO_DESCRIPTOR\r
-               },\r
-\r
-       .DataOutEndpoint = \r
-               {\r
-                       .Header                 = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},\r
-                                                                                \r
-                       .EndpointAddress        = (ENDPOINT_DESCRIPTOR_DIR_OUT | CDC_RX_EPNUM),\r
-                       .Attributes             = EP_TYPE_BULK,\r
-                       .EndpointSize           = CDC_TXRX_EPSIZE,\r
-                       .PollingIntervalMS      = 0x00\r
-               },\r
-               \r
-       .DataInEndpoint = \r
-               {\r
-                       .Header                 = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},\r
-                                                                                \r
-                       .EndpointAddress        = (ENDPOINT_DESCRIPTOR_DIR_IN | CDC_TX_EPNUM),\r
-                       .Attributes             = EP_TYPE_BULK,\r
-                       .EndpointSize           = CDC_TXRX_EPSIZE,\r
-                       .PollingIntervalMS      = 0x00\r
-               }\r
-};\r
-\r
-/** Language descriptor structure. This descriptor, located in FLASH memory, is returned when the host requests\r
- *  the string descriptor with index 0 (the first index). It is actually an array of 16-bit integers, which indicate\r
- *  via the language ID table available at USB.org what languages the device supports for its string descriptors.\r
- */\r
-USB_Descriptor_String_t PROGMEM LanguageString =\r
-{\r
-       .Header                 = {.Size = USB_STRING_LEN(1), .Type = DTYPE_String},\r
-               \r
-       .UnicodeString          = {LANGUAGE_ID_ENG}\r
-};\r
-\r
-/** Manufacturer descriptor string. This is a Unicode string containing the manufacturer's details in human readable\r
- *  form, and is read out upon request by the host when the appropriate string ID is requested, listed in the Device\r
- *  Descriptor.\r
- */\r
-USB_Descriptor_String_t PROGMEM ManufacturerString =\r
-{\r
-       .Header                 = {.Size = USB_STRING_LEN(11), .Type = DTYPE_String},\r
-               \r
-       .UnicodeString          = L"Dean Camera"\r
-};\r
-\r
-/** Product descriptor string. This is a Unicode string containing the product's details in human readable form,\r
- *  and is read out upon request by the host when the appropriate string ID is requested, listed in the Device\r
- *  Descriptor.\r
- */\r
-USB_Descriptor_String_t PROGMEM ProductString =\r
-{\r
-       .Header                 = {.Size = USB_STRING_LEN(13), .Type = DTYPE_String},\r
-               \r
-       .UnicodeString          = L"LUFA CDC Demo"\r
-};\r
-\r
-/** This function is called by the library when in device mode, and must be overridden (see library "USB Descriptors"\r
- *  documentation) by the application code so that the address and size of a requested descriptor can be given\r
- *  to the USB library. When the device receives a Get Descriptor request on the control endpoint, this function\r
- *  is called so that the descriptor details can be passed back and the appropriate descriptor sent back to the\r
- *  USB host.\r
- */\r
-uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
-{\r
-       const uint8_t  DescriptorType   = (wValue >> 8);\r
-       const uint8_t  DescriptorNumber = (wValue & 0xFF);\r
-\r
-       void*          Address = NULL;\r
-       uint16_t       Size    = NO_DESCRIPTOR;\r
-\r
-       switch (DescriptorType)\r
-       {\r
-               case DTYPE_Device:\r
-                       Address = (void*)&DeviceDescriptor;\r
-                       Size    = sizeof(USB_Descriptor_Device_t);\r
-                       break;\r
-               case DTYPE_Configuration: \r
-                       Address = (void*)&ConfigurationDescriptor;\r
-                       Size    = sizeof(USB_Descriptor_Configuration_t);\r
-                       break;\r
-               case DTYPE_String: \r
-                       switch (DescriptorNumber)\r
-                       {\r
-                               case 0x00: \r
-                                       Address = (void*)&LanguageString;\r
-                                       Size    = pgm_read_byte(&LanguageString.Header.Size);\r
-                                       break;\r
-                               case 0x01: \r
-                                       Address = (void*)&ManufacturerString;\r
-                                       Size    = pgm_read_byte(&ManufacturerString.Header.Size);\r
-                                       break;\r
-                               case 0x02: \r
-                                       Address = (void*)&ProductString;\r
-                                       Size    = pgm_read_byte(&ProductString.Header.Size);\r
-                                       break;\r
-                       }\r
-                       \r
-                       break;\r
-       }\r
-       \r
-       *DescriptorAddress = Address;           \r
-       return Size;\r
-}\r
diff --git a/Demos/Device/CDC/Descriptors.h b/Demos/Device/CDC/Descriptors.h
deleted file mode 100644 (file)
index 1a9dbb5..0000000
+++ /dev/null
@@ -1,84 +0,0 @@
-/*\r
-             LUFA Library\r
-     Copyright (C) Dean Camera, 2009.\r
-              \r
-  dean [at] fourwalledcubicle [dot] com\r
-      www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
-  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
-  Permission to use, copy, modify, and distribute this software\r
-  and its documentation for any purpose and without fee is hereby\r
-  granted, provided that the above copyright notice appear in all\r
-  copies and that both that the copyright notice and this\r
-  permission notice and warranty disclaimer appear in supporting\r
-  documentation, and that the name of the author not be used in\r
-  advertising or publicity pertaining to distribution of the\r
-  software without specific, written prior permission.\r
-\r
-  The author disclaim all warranties with regard to this\r
-  software, including all implied warranties of merchantability\r
-  and fitness.  In no event shall the author be liable for any\r
-  special, indirect or consequential damages or any damages\r
-  whatsoever resulting from loss of use, data or profits, whether\r
-  in an action of contract, negligence or other tortious action,\r
-  arising out of or in connection with the use or performance of\r
-  this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- *  Header file for Descriptors.c.\r
- */\r
\r
-#ifndef _DESCRIPTORS_H_\r
-#define _DESCRIPTORS_H_\r
-\r
-       /* Includes: */\r
-               #include <avr/pgmspace.h>\r
-\r
-               #include <LUFA/Drivers/USB/USB.h>\r
-               #include <LUFA/Drivers/USB/Class/Device/CDC.h>\r
-\r
-       /* Macros: */                    \r
-               /** Endpoint number of the CDC device-to-host notification IN endpoint. */\r
-               #define CDC_NOTIFICATION_EPNUM         2\r
-\r
-               /** Endpoint number of the CDC device-to-host data IN endpoint. */\r
-               #define CDC_TX_EPNUM                   3        \r
-\r
-               /** Endpoint number of the CDC host-to-device data OUT endpoint. */\r
-               #define CDC_RX_EPNUM                   4        \r
-\r
-               /** Size in bytes of the CDC device-to-host notification IN endpoint. */\r
-               #define CDC_NOTIFICATION_EPSIZE        8\r
-\r
-               /** Size in bytes of the CDC data IN and OUT endpoints. */\r
-               #define CDC_TXRX_EPSIZE                16       \r
-\r
-       /* Type Defines: */\r
-               /** Type define for the device configuration descriptor structure. This must be defined in the\r
-                *  application code, as the configuration descriptor contains several sub-descriptors which\r
-                *  vary between devices, and which describe the device's usage to the host.\r
-                */\r
-               typedef struct\r
-               {\r
-                       USB_Descriptor_Configuration_Header_t    Config;\r
-                       USB_Descriptor_Interface_t               CCI_Interface;\r
-                       CDC_FUNCTIONAL_DESCRIPTOR(2)             CDC_Functional_IntHeader;\r
-                       CDC_FUNCTIONAL_DESCRIPTOR(2)             CDC_Functional_CallManagement;\r
-                       CDC_FUNCTIONAL_DESCRIPTOR(1)             CDC_Functional_AbstractControlManagement;\r
-                       CDC_FUNCTIONAL_DESCRIPTOR(2)             CDC_Functional_Union;\r
-                       USB_Descriptor_Endpoint_t                ManagementEndpoint;\r
-                       USB_Descriptor_Interface_t               DCI_Interface;\r
-                       USB_Descriptor_Endpoint_t                DataOutEndpoint;\r
-                       USB_Descriptor_Endpoint_t                DataInEndpoint;\r
-               } USB_Descriptor_Configuration_t;\r
-\r
-       /* Function Prototypes: */\r
-               uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
-                                                                                       ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);\r
-\r
-#endif\r
diff --git a/Demos/Device/CDC/Doxygen.conf b/Demos/Device/CDC/Doxygen.conf
deleted file mode 100644 (file)
index 3493347..0000000
+++ /dev/null
@@ -1,1485 +0,0 @@
-# Doxyfile 1.5.7.1\r
-\r
-# This file describes the settings to be used by the documentation system\r
-# doxygen (www.doxygen.org) for a project\r
-#\r
-# All text after a hash (#) is considered a comment and will be ignored\r
-# The format is:\r
-#       TAG = value [value, ...]\r
-# For lists items can also be appended using:\r
-#       TAG += value [value, ...]\r
-# Values that contain spaces should be placed between quotes (" ")\r
-\r
-#---------------------------------------------------------------------------\r
-# Project related configuration options\r
-#---------------------------------------------------------------------------\r
-\r
-# This tag specifies the encoding used for all characters in the config file \r
-# that follow. The default is UTF-8 which is also the encoding used for all \r
-# text before the first occurrence of this tag. Doxygen uses libiconv (or the \r
-# iconv built into libc) for the transcoding. See \r
-# http://www.gnu.org/software/libiconv for the list of possible encodings.\r
-\r
-DOXYFILE_ENCODING      = UTF-8\r
-\r
-# The PROJECT_NAME tag is a single word (or a sequence of words surrounded \r
-# by quotes) that should identify the project.\r
-\r
-PROJECT_NAME           = "LUFA Library - CDC Device Demo"\r
-\r
-# The PROJECT_NUMBER tag can be used to enter a project or revision number. \r
-# This could be handy for archiving the generated documentation or \r
-# if some version control system is used.\r
-\r
-PROJECT_NUMBER         = 0.0.0\r
-\r
-# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) \r
-# base path where the generated documentation will be put. \r
-# If a relative path is entered, it will be relative to the location \r
-# where doxygen was started. If left blank the current directory will be used.\r
-\r
-OUTPUT_DIRECTORY       = ./Documentation/\r
-\r
-# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create \r
-# 4096 sub-directories (in 2 levels) under the output directory of each output \r
-# format and will distribute the generated files over these directories. \r
-# Enabling this option can be useful when feeding doxygen a huge amount of \r
-# source files, where putting all generated files in the same directory would \r
-# otherwise cause performance problems for the file system.\r
-\r
-CREATE_SUBDIRS         = YES\r
-\r
-# The OUTPUT_LANGUAGE tag is used to specify the language in which all \r
-# documentation generated by doxygen is written. Doxygen will use this \r
-# information to generate all constant output in the proper language. \r
-# The default language is English, other supported languages are: \r
-# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, \r
-# Croatian, Czech, Danish, Dutch, Farsi, Finnish, French, German, Greek, \r
-# Hungarian, Italian, Japanese, Japanese-en (Japanese with English messages), \r
-# Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, Polish, \r
-# Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, Slovene, \r
-# Spanish, Swedish, and Ukrainian.\r
-\r
-OUTPUT_LANGUAGE        = English\r
-\r
-# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will \r
-# include brief member descriptions after the members that are listed in \r
-# the file and class documentation (similar to JavaDoc). \r
-# Set to NO to disable this.\r
-\r
-BRIEF_MEMBER_DESC      = YES\r
-\r
-# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend \r
-# the brief description of a member or function before the detailed description. \r
-# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the \r
-# brief descriptions will be completely suppressed.\r
-\r
-REPEAT_BRIEF           = YES\r
-\r
-# This tag implements a quasi-intelligent brief description abbreviator \r
-# that is used to form the text in various listings. Each string \r
-# in this list, if found as the leading text of the brief description, will be \r
-# stripped from the text and the result after processing the whole list, is \r
-# used as the annotated text. Otherwise, the brief description is used as-is. \r
-# If left blank, the following values are used ("$name" is automatically \r
-# replaced with the name of the entity): "The $name class" "The $name widget" \r
-# "The $name file" "is" "provides" "specifies" "contains" \r
-# "represents" "a" "an" "the"\r
-\r
-ABBREVIATE_BRIEF       = "The $name class" \\r
-                         "The $name widget" \\r
-                         "The $name file" \\r
-                         is \\r
-                         provides \\r
-                         specifies \\r
-                         contains \\r
-                         represents \\r
-                         a \\r
-                         an \\r
-                         the\r
-\r
-# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then \r
-# Doxygen will generate a detailed section even if there is only a brief \r
-# description.\r
-\r
-ALWAYS_DETAILED_SEC    = NO\r
-\r
-# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all \r
-# inherited members of a class in the documentation of that class as if those \r
-# members were ordinary class members. Constructors, destructors and assignment \r
-# operators of the base classes will not be shown.\r
-\r
-INLINE_INHERITED_MEMB  = NO\r
-\r
-# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full \r
-# path before files name in the file list and in the header files. If set \r
-# to NO the shortest path that makes the file name unique will be used.\r
-\r
-FULL_PATH_NAMES        = YES\r
-\r
-# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag \r
-# can be used to strip a user-defined part of the path. Stripping is \r
-# only done if one of the specified strings matches the left-hand part of \r
-# the path. The tag can be used to show relative paths in the file list. \r
-# If left blank the directory from which doxygen is run is used as the \r
-# path to strip.\r
-\r
-STRIP_FROM_PATH        = \r
-\r
-# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of \r
-# the path mentioned in the documentation of a class, which tells \r
-# the reader which header file to include in order to use a class. \r
-# If left blank only the name of the header file containing the class \r
-# definition is used. Otherwise one should specify the include paths that \r
-# are normally passed to the compiler using the -I flag.\r
-\r
-STRIP_FROM_INC_PATH    = \r
-\r
-# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter \r
-# (but less readable) file names. This can be useful is your file systems \r
-# doesn't support long names like on DOS, Mac, or CD-ROM.\r
-\r
-SHORT_NAMES            = YES\r
-\r
-# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen \r
-# will interpret the first line (until the first dot) of a JavaDoc-style \r
-# comment as the brief description. If set to NO, the JavaDoc \r
-# comments will behave just like regular Qt-style comments \r
-# (thus requiring an explicit @brief command for a brief description.)\r
-\r
-JAVADOC_AUTOBRIEF      = NO\r
-\r
-# If the QT_AUTOBRIEF tag is set to YES then Doxygen will \r
-# interpret the first line (until the first dot) of a Qt-style \r
-# comment as the brief description. If set to NO, the comments \r
-# will behave just like regular Qt-style comments (thus requiring \r
-# an explicit \brief command for a brief description.)\r
-\r
-QT_AUTOBRIEF           = NO\r
-\r
-# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen \r
-# treat a multi-line C++ special comment block (i.e. a block of //! or /// \r
-# comments) as a brief description. This used to be the default behaviour. \r
-# The new default is to treat a multi-line C++ comment block as a detailed \r
-# description. Set this tag to YES if you prefer the old behaviour instead.\r
-\r
-MULTILINE_CPP_IS_BRIEF = NO\r
-\r
-# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented \r
-# member inherits the documentation from any documented member that it \r
-# re-implements.\r
-\r
-INHERIT_DOCS           = YES\r
-\r
-# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce \r
-# a new page for each member. If set to NO, the documentation of a member will \r
-# be part of the file/class/namespace that contains it.\r
-\r
-SEPARATE_MEMBER_PAGES  = NO\r
-\r
-# The TAB_SIZE tag can be used to set the number of spaces in a tab. \r
-# Doxygen uses this value to replace tabs by spaces in code fragments.\r
-\r
-TAB_SIZE               = 4\r
-\r
-# This tag can be used to specify a number of aliases that acts \r
-# as commands in the documentation. An alias has the form "name=value". \r
-# For example adding "sideeffect=\par Side Effects:\n" will allow you to \r
-# put the command \sideeffect (or @sideeffect) in the documentation, which \r
-# will result in a user-defined paragraph with heading "Side Effects:". \r
-# You can put \n's in the value part of an alias to insert newlines.\r
-\r
-ALIASES                = \r
-\r
-# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C \r
-# sources only. Doxygen will then generate output that is more tailored for C. \r
-# For instance, some of the names that are used will be different. The list \r
-# of all members will be omitted, etc.\r
-\r
-OPTIMIZE_OUTPUT_FOR_C  = YES\r
-\r
-# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java \r
-# sources only. Doxygen will then generate output that is more tailored for \r
-# Java. For instance, namespaces will be presented as packages, qualified \r
-# scopes will look different, etc.\r
-\r
-OPTIMIZE_OUTPUT_JAVA   = NO\r
-\r
-# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran \r
-# sources only. Doxygen will then generate output that is more tailored for \r
-# Fortran.\r
-\r
-OPTIMIZE_FOR_FORTRAN   = NO\r
-\r
-# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL \r
-# sources. Doxygen will then generate output that is tailored for \r
-# VHDL.\r
-\r
-OPTIMIZE_OUTPUT_VHDL   = NO\r
-\r
-# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want \r
-# to include (a tag file for) the STL sources as input, then you should \r
-# set this tag to YES in order to let doxygen match functions declarations and \r
-# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. \r
-# func(std::string) {}). This also make the inheritance and collaboration \r
-# diagrams that involve STL classes more complete and accurate.\r
-\r
-BUILTIN_STL_SUPPORT    = NO\r
-\r
-# If you use Microsoft's C++/CLI language, you should set this option to YES to\r
-# enable parsing support.\r
-\r
-CPP_CLI_SUPPORT        = NO\r
-\r
-# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. \r
-# Doxygen will parse them like normal C++ but will assume all classes use public \r
-# instead of private inheritance when no explicit protection keyword is present.\r
-\r
-SIP_SUPPORT            = NO\r
-\r
-# For Microsoft's IDL there are propget and propput attributes to indicate getter \r
-# and setter methods for a property. Setting this option to YES (the default) \r
-# will make doxygen to replace the get and set methods by a property in the \r
-# documentation. This will only work if the methods are indeed getting or \r
-# setting a simple type. If this is not the case, or you want to show the \r
-# methods anyway, you should set this option to NO.\r
-\r
-IDL_PROPERTY_SUPPORT   = YES\r
-\r
-# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC \r
-# tag is set to YES, then doxygen will reuse the documentation of the first \r
-# member in the group (if any) for the other members of the group. By default \r
-# all members of a group must be documented explicitly.\r
-\r
-DISTRIBUTE_GROUP_DOC   = NO\r
-\r
-# Set the SUBGROUPING tag to YES (the default) to allow class member groups of \r
-# the same type (for instance a group of public functions) to be put as a \r
-# subgroup of that type (e.g. under the Public Functions section). Set it to \r
-# NO to prevent subgrouping. Alternatively, this can be done per class using \r
-# the \nosubgrouping command.\r
-\r
-SUBGROUPING            = YES\r
-\r
-# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum \r
-# is documented as struct, union, or enum with the name of the typedef. So \r
-# typedef struct TypeS {} TypeT, will appear in the documentation as a struct \r
-# with name TypeT. When disabled the typedef will appear as a member of a file, \r
-# namespace, or class. And the struct will be named TypeS. This can typically \r
-# be useful for C code in case the coding convention dictates that all compound \r
-# types are typedef'ed and only the typedef is referenced, never the tag name.\r
-\r
-TYPEDEF_HIDES_STRUCT   = NO\r
-\r
-# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to \r
-# determine which symbols to keep in memory and which to flush to disk.\r
-# When the cache is full, less often used symbols will be written to disk.\r
-# For small to medium size projects (<1000 input files) the default value is \r
-# probably good enough. For larger projects a too small cache size can cause \r
-# doxygen to be busy swapping symbols to and from disk most of the time \r
-# causing a significant performance penality. \r
-# If the system has enough physical memory increasing the cache will improve the \r
-# performance by keeping more symbols in memory. Note that the value works on \r
-# a logarithmic scale so increasing the size by one will rougly double the \r
-# memory usage. The cache size is given by this formula: \r
-# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, \r
-# corresponding to a cache size of 2^16 = 65536 symbols\r
-\r
-SYMBOL_CACHE_SIZE      = 0\r
-\r
-#---------------------------------------------------------------------------\r
-# Build related configuration options\r
-#---------------------------------------------------------------------------\r
-\r
-# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in \r
-# documentation are documented, even if no documentation was available. \r
-# Private class members and static file members will be hidden unless \r
-# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES\r
-\r
-EXTRACT_ALL            = YES\r
-\r
-# If the EXTRACT_PRIVATE tag is set to YES all private members of a class \r
-# will be included in the documentation.\r
-\r
-EXTRACT_PRIVATE        = YES\r
-\r
-# If the EXTRACT_STATIC tag is set to YES all static members of a file \r
-# will be included in the documentation.\r
-\r
-EXTRACT_STATIC         = YES\r
-\r
-# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) \r
-# defined locally in source files will be included in the documentation. \r
-# If set to NO only classes defined in header files are included.\r
-\r
-EXTRACT_LOCAL_CLASSES  = YES\r
-\r
-# This flag is only useful for Objective-C code. When set to YES local \r
-# methods, which are defined in the implementation section but not in \r
-# the interface are included in the documentation. \r
-# If set to NO (the default) only methods in the interface are included.\r
-\r
-EXTRACT_LOCAL_METHODS  = NO\r
-\r
-# If this flag is set to YES, the members of anonymous namespaces will be \r
-# extracted and appear in the documentation as a namespace called \r
-# 'anonymous_namespace{file}', where file will be replaced with the base \r
-# name of the file that contains the anonymous namespace. By default \r
-# anonymous namespace are hidden.\r
-\r
-EXTRACT_ANON_NSPACES   = NO\r
-\r
-# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all \r
-# undocumented members of documented classes, files or namespaces. \r
-# If set to NO (the default) these members will be included in the \r
-# various overviews, but no documentation section is generated. \r
-# This option has no effect if EXTRACT_ALL is enabled.\r
-\r
-HIDE_UNDOC_MEMBERS     = NO\r
-\r
-# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all \r
-# undocumented classes that are normally visible in the class hierarchy. \r
-# If set to NO (the default) these classes will be included in the various \r
-# overviews. This option has no effect if EXTRACT_ALL is enabled.\r
-\r
-HIDE_UNDOC_CLASSES     = NO\r
-\r
-# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all \r
-# friend (class|struct|union) declarations. \r
-# If set to NO (the default) these declarations will be included in the \r
-# documentation.\r
-\r
-HIDE_FRIEND_COMPOUNDS  = NO\r
-\r
-# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any \r
-# documentation blocks found inside the body of a function. \r
-# If set to NO (the default) these blocks will be appended to the \r
-# function's detailed documentation block.\r
-\r
-HIDE_IN_BODY_DOCS      = NO\r
-\r
-# The INTERNAL_DOCS tag determines if documentation \r
-# that is typed after a \internal command is included. If the tag is set \r
-# to NO (the default) then the documentation will be excluded. \r
-# Set it to YES to include the internal documentation.\r
-\r
-INTERNAL_DOCS          = NO\r
-\r
-# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate \r
-# file names in lower-case letters. If set to YES upper-case letters are also \r
-# allowed. This is useful if you have classes or files whose names only differ \r
-# in case and if your file system supports case sensitive file names. Windows \r
-# and Mac users are advised to set this option to NO.\r
-\r
-CASE_SENSE_NAMES       = NO\r
-\r
-# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen \r
-# will show members with their full class and namespace scopes in the \r
-# documentation. If set to YES the scope will be hidden.\r
-\r
-HIDE_SCOPE_NAMES       = NO\r
-\r
-# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen \r
-# will put a list of the files that are included by a file in the documentation \r
-# of that file.\r
-\r
-SHOW_INCLUDE_FILES     = YES\r
-\r
-# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] \r
-# is inserted in the documentation for inline members.\r
-\r
-INLINE_INFO            = YES\r
-\r
-# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen \r
-# will sort the (detailed) documentation of file and class members \r
-# alphabetically by member name. If set to NO the members will appear in \r
-# declaration order.\r
-\r
-SORT_MEMBER_DOCS       = YES\r
-\r
-# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the \r
-# brief documentation of file, namespace and class members alphabetically \r
-# by member name. If set to NO (the default) the members will appear in \r
-# declaration order.\r
-\r
-SORT_BRIEF_DOCS        = NO\r
-\r
-# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the \r
-# hierarchy of group names into alphabetical order. If set to NO (the default) \r
-# the group names will appear in their defined order.\r
-\r
-SORT_GROUP_NAMES       = NO\r
-\r
-# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be \r
-# sorted by fully-qualified names, including namespaces. If set to \r
-# NO (the default), the class list will be sorted only by class name, \r
-# not including the namespace part. \r
-# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.\r
-# Note: This option applies only to the class list, not to the \r
-# alphabetical list.\r
-\r
-SORT_BY_SCOPE_NAME     = NO\r
-\r
-# The GENERATE_TODOLIST tag can be used to enable (YES) or \r
-# disable (NO) the todo list. This list is created by putting \todo \r
-# commands in the documentation.\r
-\r
-GENERATE_TODOLIST      = NO\r
-\r
-# The GENERATE_TESTLIST tag can be used to enable (YES) or \r
-# disable (NO) the test list. This list is created by putting \test \r
-# commands in the documentation.\r
-\r
-GENERATE_TESTLIST      = NO\r
-\r
-# The GENERATE_BUGLIST tag can be used to enable (YES) or \r
-# disable (NO) the bug list. This list is created by putting \bug \r
-# commands in the documentation.\r
-\r
-GENERATE_BUGLIST       = NO\r
-\r
-# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or \r
-# disable (NO) the deprecated list. This list is created by putting \r
-# \deprecated commands in the documentation.\r
-\r
-GENERATE_DEPRECATEDLIST= YES\r
-\r
-# The ENABLED_SECTIONS tag can be used to enable conditional \r
-# documentation sections, marked by \if sectionname ... \endif.\r
-\r
-ENABLED_SECTIONS       = \r
-\r
-# The MAX_INITIALIZER_LINES tag determines the maximum number of lines \r
-# the initial value of a variable or define consists of for it to appear in \r
-# the documentation. If the initializer consists of more lines than specified \r
-# here it will be hidden. Use a value of 0 to hide initializers completely. \r
-# The appearance of the initializer of individual variables and defines in the \r
-# documentation can be controlled using \showinitializer or \hideinitializer \r
-# command in the documentation regardless of this setting.\r
-\r
-MAX_INITIALIZER_LINES  = 30\r
-\r
-# Set the SHOW_USED_FILES tag to NO to disable the list of files generated \r
-# at the bottom of the documentation of classes and structs. If set to YES the \r
-# list will mention the files that were used to generate the documentation.\r
-\r
-SHOW_USED_FILES        = YES\r
-\r
-# If the sources in your project are distributed over multiple directories \r
-# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy \r
-# in the documentation. The default is NO.\r
-\r
-SHOW_DIRECTORIES       = YES\r
-\r
-# Set the SHOW_FILES tag to NO to disable the generation of the Files page.\r
-# This will remove the Files entry from the Quick Index and from the \r
-# Folder Tree View (if specified). The default is YES.\r
-\r
-SHOW_FILES             = YES\r
-\r
-# Set the SHOW_NAMESPACES tag to NO to disable the generation of the \r
-# Namespaces page.  This will remove the Namespaces entry from the Quick Index\r
-# and from the Folder Tree View (if specified). The default is YES.\r
-\r
-SHOW_NAMESPACES        = YES\r
-\r
-# The FILE_VERSION_FILTER tag can be used to specify a program or script that \r
-# doxygen should invoke to get the current version for each file (typically from \r
-# the version control system). Doxygen will invoke the program by executing (via \r
-# popen()) the command <command> <input-file>, where <command> is the value of \r
-# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file \r
-# provided by doxygen. Whatever the program writes to standard output \r
-# is used as the file version. See the manual for examples.\r
-\r
-FILE_VERSION_FILTER    = \r
-\r
-# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by \r
-# doxygen. The layout file controls the global structure of the generated output files \r
-# in an output format independent way. The create the layout file that represents \r
-# doxygen's defaults, run doxygen with the -l option. You can optionally specify a \r
-# file name after the option, if omitted DoxygenLayout.xml will be used as the name \r
-# of the layout file.\r
-\r
-LAYOUT_FILE            = \r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to warning and progress messages\r
-#---------------------------------------------------------------------------\r
-\r
-# The QUIET tag can be used to turn on/off the messages that are generated \r
-# by doxygen. Possible values are YES and NO. If left blank NO is used.\r
-\r
-QUIET                  = YES\r
-\r
-# The WARNINGS tag can be used to turn on/off the warning messages that are \r
-# generated by doxygen. Possible values are YES and NO. If left blank \r
-# NO is used.\r
-\r
-WARNINGS               = YES\r
-\r
-# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings \r
-# for undocumented members. If EXTRACT_ALL is set to YES then this flag will \r
-# automatically be disabled.\r
-\r
-WARN_IF_UNDOCUMENTED   = YES\r
-\r
-# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for \r
-# potential errors in the documentation, such as not documenting some \r
-# parameters in a documented function, or documenting parameters that \r
-# don't exist or using markup commands wrongly.\r
-\r
-WARN_IF_DOC_ERROR      = YES\r
-\r
-# This WARN_NO_PARAMDOC option can be abled to get warnings for \r
-# functions that are documented, but have no documentation for their parameters \r
-# or return value. If set to NO (the default) doxygen will only warn about \r
-# wrong or incomplete parameter documentation, but not about the absence of \r
-# documentation.\r
-\r
-WARN_NO_PARAMDOC       = YES\r
-\r
-# The WARN_FORMAT tag determines the format of the warning messages that \r
-# doxygen can produce. The string should contain the $file, $line, and $text \r
-# tags, which will be replaced by the file and line number from which the \r
-# warning originated and the warning text. Optionally the format may contain \r
-# $version, which will be replaced by the version of the file (if it could \r
-# be obtained via FILE_VERSION_FILTER)\r
-\r
-WARN_FORMAT            = "$file:$line: $text"\r
-\r
-# The WARN_LOGFILE tag can be used to specify a file to which warning \r
-# and error messages should be written. If left blank the output is written \r
-# to stderr.\r
-\r
-WARN_LOGFILE           = \r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the input files\r
-#---------------------------------------------------------------------------\r
-\r
-# The INPUT tag can be used to specify the files and/or directories that contain \r
-# documented source files. You may enter file names like "myfile.cpp" or \r
-# directories like "/usr/src/myproject". Separate the files or directories \r
-# with spaces.\r
-\r
-INPUT                  = ./\r
-\r
-# This tag can be used to specify the character encoding of the source files \r
-# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is \r
-# also the default input encoding. Doxygen uses libiconv (or the iconv built \r
-# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for \r
-# the list of possible encodings.\r
-\r
-INPUT_ENCODING         = UTF-8\r
-\r
-# If the value of the INPUT tag contains directories, you can use the \r
-# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \r
-# and *.h) to filter out the source-files in the directories. If left \r
-# blank the following patterns are tested: \r
-# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx \r
-# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90\r
-\r
-FILE_PATTERNS          = *.h \\r
-                         *.c \\r
-                                                *.txt\r
-\r
-# The RECURSIVE tag can be used to turn specify whether or not subdirectories \r
-# should be searched for input files as well. Possible values are YES and NO. \r
-# If left blank NO is used.\r
-\r
-RECURSIVE              = YES\r
-\r
-# The EXCLUDE tag can be used to specify files and/or directories that should \r
-# excluded from the INPUT source files. This way you can easily exclude a \r
-# subdirectory from a directory tree whose root is specified with the INPUT tag.\r
-\r
-EXCLUDE                = \r
-\r
-# The EXCLUDE_SYMLINKS tag can be used select whether or not files or \r
-# directories that are symbolic links (a Unix filesystem feature) are excluded \r
-# from the input.\r
-\r
-EXCLUDE_SYMLINKS       = NO\r
-\r
-# If the value of the INPUT tag contains directories, you can use the \r
-# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude \r
-# certain files from those directories. Note that the wildcards are matched \r
-# against the file with absolute path, so to exclude all test directories \r
-# for example use the pattern */test/*\r
-\r
-EXCLUDE_PATTERNS       = */LowLevel/USBMode.h\r
-\r
-# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names \r
-# (namespaces, classes, functions, etc.) that should be excluded from the \r
-# output. The symbol name can be a fully qualified name, a word, or if the \r
-# wildcard * is used, a substring. Examples: ANamespace, AClass, \r
-# AClass::ANamespace, ANamespace::*Test\r
-\r
-EXCLUDE_SYMBOLS        = __*\r
-\r
-# The EXAMPLE_PATH tag can be used to specify one or more files or \r
-# directories that contain example code fragments that are included (see \r
-# the \include command).\r
-\r
-EXAMPLE_PATH           = \r
-\r
-# If the value of the EXAMPLE_PATH tag contains directories, you can use the \r
-# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \r
-# and *.h) to filter out the source-files in the directories. If left \r
-# blank all files are included.\r
-\r
-EXAMPLE_PATTERNS       = *\r
-\r
-# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be \r
-# searched for input files to be used with the \include or \dontinclude \r
-# commands irrespective of the value of the RECURSIVE tag. \r
-# Possible values are YES and NO. If left blank NO is used.\r
-\r
-EXAMPLE_RECURSIVE      = NO\r
-\r
-# The IMAGE_PATH tag can be used to specify one or more files or \r
-# directories that contain image that are included in the documentation (see \r
-# the \image command).\r
-\r
-IMAGE_PATH             = \r
-\r
-# The INPUT_FILTER tag can be used to specify a program that doxygen should \r
-# invoke to filter for each input file. Doxygen will invoke the filter program \r
-# by executing (via popen()) the command <filter> <input-file>, where <filter> \r
-# is the value of the INPUT_FILTER tag, and <input-file> is the name of an \r
-# input file. Doxygen will then use the output that the filter program writes \r
-# to standard output.  If FILTER_PATTERNS is specified, this tag will be \r
-# ignored.\r
-\r
-INPUT_FILTER           = \r
-\r
-# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern \r
-# basis.  Doxygen will compare the file name with each pattern and apply the \r
-# filter if there is a match.  The filters are a list of the form: \r
-# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further \r
-# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER \r
-# is applied to all files.\r
-\r
-FILTER_PATTERNS        = \r
-\r
-# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using \r
-# INPUT_FILTER) will be used to filter the input files when producing source \r
-# files to browse (i.e. when SOURCE_BROWSER is set to YES).\r
-\r
-FILTER_SOURCE_FILES    = NO\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to source browsing\r
-#---------------------------------------------------------------------------\r
-\r
-# If the SOURCE_BROWSER tag is set to YES then a list of source files will \r
-# be generated. Documented entities will be cross-referenced with these sources. \r
-# Note: To get rid of all source code in the generated output, make sure also \r
-# VERBATIM_HEADERS is set to NO.\r
-\r
-SOURCE_BROWSER         = NO\r
-\r
-# Setting the INLINE_SOURCES tag to YES will include the body \r
-# of functions and classes directly in the documentation.\r
-\r
-INLINE_SOURCES         = NO\r
-\r
-# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct \r
-# doxygen to hide any special comment blocks from generated source code \r
-# fragments. Normal C and C++ comments will always remain visible.\r
-\r
-STRIP_CODE_COMMENTS    = YES\r
-\r
-# If the REFERENCED_BY_RELATION tag is set to YES \r
-# then for each documented function all documented \r
-# functions referencing it will be listed.\r
-\r
-REFERENCED_BY_RELATION = NO\r
-\r
-# If the REFERENCES_RELATION tag is set to YES \r
-# then for each documented function all documented entities \r
-# called/used by that function will be listed.\r
-\r
-REFERENCES_RELATION    = NO\r
-\r
-# If the REFERENCES_LINK_SOURCE tag is set to YES (the default)\r
-# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from\r
-# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will\r
-# link to the source code.  Otherwise they will link to the documentstion.\r
-\r
-REFERENCES_LINK_SOURCE = NO\r
-\r
-# If the USE_HTAGS tag is set to YES then the references to source code \r
-# will point to the HTML generated by the htags(1) tool instead of doxygen \r
-# built-in source browser. The htags tool is part of GNU's global source \r
-# tagging system (see http://www.gnu.org/software/global/global.html). You \r
-# will need version 4.8.6 or higher.\r
-\r
-USE_HTAGS              = NO\r
-\r
-# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen \r
-# will generate a verbatim copy of the header file for each class for \r
-# which an include is specified. Set to NO to disable this.\r
-\r
-VERBATIM_HEADERS       = NO\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the alphabetical class index\r
-#---------------------------------------------------------------------------\r
-\r
-# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index \r
-# of all compounds will be generated. Enable this if the project \r
-# contains a lot of classes, structs, unions or interfaces.\r
-\r
-ALPHABETICAL_INDEX     = YES\r
-\r
-# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then \r
-# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns \r
-# in which this list will be split (can be a number in the range [1..20])\r
-\r
-COLS_IN_ALPHA_INDEX    = 5\r
-\r
-# In case all classes in a project start with a common prefix, all \r
-# classes will be put under the same header in the alphabetical index. \r
-# The IGNORE_PREFIX tag can be used to specify one or more prefixes that \r
-# should be ignored while generating the index headers.\r
-\r
-IGNORE_PREFIX          = \r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the HTML output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_HTML tag is set to YES (the default) Doxygen will \r
-# generate HTML output.\r
-\r
-GENERATE_HTML          = YES\r
-\r
-# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. \r
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
-# put in front of it. If left blank `html' will be used as the default path.\r
-\r
-HTML_OUTPUT            = html\r
-\r
-# The HTML_FILE_EXTENSION tag can be used to specify the file extension for \r
-# each generated HTML page (for example: .htm,.php,.asp). If it is left blank \r
-# doxygen will generate files with .html extension.\r
-\r
-HTML_FILE_EXTENSION    = .html\r
-\r
-# The HTML_HEADER tag can be used to specify a personal HTML header for \r
-# each generated HTML page. If it is left blank doxygen will generate a \r
-# standard header.\r
-\r
-HTML_HEADER            = \r
-\r
-# The HTML_FOOTER tag can be used to specify a personal HTML footer for \r
-# each generated HTML page. If it is left blank doxygen will generate a \r
-# standard footer.\r
-\r
-HTML_FOOTER            = \r
-\r
-# The HTML_STYLESHEET tag can be used to specify a user-defined cascading \r
-# style sheet that is used by each HTML page. It can be used to \r
-# fine-tune the look of the HTML output. If the tag is left blank doxygen \r
-# will generate a default style sheet. Note that doxygen will try to copy \r
-# the style sheet file to the HTML output directory, so don't put your own \r
-# stylesheet in the HTML output directory as well, or it will be erased!\r
-\r
-HTML_STYLESHEET        = \r
-\r
-# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, \r
-# files or namespaces will be aligned in HTML using tables. If set to \r
-# NO a bullet list will be used.\r
-\r
-HTML_ALIGN_MEMBERS     = YES\r
-\r
-# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML \r
-# documentation will contain sections that can be hidden and shown after the \r
-# page has loaded. For this to work a browser that supports \r
-# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox \r
-# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari).\r
-\r
-HTML_DYNAMIC_SECTIONS  = YES\r
-\r
-# If the GENERATE_DOCSET tag is set to YES, additional index files \r
-# will be generated that can be used as input for Apple's Xcode 3 \r
-# integrated development environment, introduced with OSX 10.5 (Leopard). \r
-# To create a documentation set, doxygen will generate a Makefile in the \r
-# HTML output directory. Running make will produce the docset in that \r
-# directory and running "make install" will install the docset in \r
-# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find \r
-# it at startup. \r
-# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information.\r
-\r
-GENERATE_DOCSET        = NO\r
-\r
-# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the \r
-# feed. A documentation feed provides an umbrella under which multiple \r
-# documentation sets from a single provider (such as a company or product suite) \r
-# can be grouped.\r
-\r
-DOCSET_FEEDNAME        = "Doxygen generated docs"\r
-\r
-# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that \r
-# should uniquely identify the documentation set bundle. This should be a \r
-# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen \r
-# will append .docset to the name.\r
-\r
-DOCSET_BUNDLE_ID       = org.doxygen.Project\r
-\r
-# If the GENERATE_HTMLHELP tag is set to YES, additional index files \r
-# will be generated that can be used as input for tools like the \r
-# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) \r
-# of the generated HTML documentation.\r
-\r
-GENERATE_HTMLHELP      = NO\r
-\r
-# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can \r
-# be used to specify the file name of the resulting .chm file. You \r
-# can add a path in front of the file if the result should not be \r
-# written to the html output directory.\r
-\r
-CHM_FILE               = \r
-\r
-# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can \r
-# be used to specify the location (absolute path including file name) of \r
-# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run \r
-# the HTML help compiler on the generated index.hhp.\r
-\r
-HHC_LOCATION           = \r
-\r
-# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag \r
-# controls if a separate .chi index file is generated (YES) or that \r
-# it should be included in the master .chm file (NO).\r
-\r
-GENERATE_CHI           = NO\r
-\r
-# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING\r
-# is used to encode HtmlHelp index (hhk), content (hhc) and project file\r
-# content.\r
-\r
-CHM_INDEX_ENCODING     = \r
-\r
-# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag \r
-# controls whether a binary table of contents is generated (YES) or a \r
-# normal table of contents (NO) in the .chm file.\r
-\r
-BINARY_TOC             = NO\r
-\r
-# The TOC_EXPAND flag can be set to YES to add extra items for group members \r
-# to the contents of the HTML help documentation and to the tree view.\r
-\r
-TOC_EXPAND             = YES\r
-\r
-# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER \r
-# are set, an additional index file will be generated that can be used as input for \r
-# Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated \r
-# HTML documentation.\r
-\r
-GENERATE_QHP           = NO\r
-\r
-# If the QHG_LOCATION tag is specified, the QCH_FILE tag can \r
-# be used to specify the file name of the resulting .qch file. \r
-# The path specified is relative to the HTML output folder.\r
-\r
-QCH_FILE               = \r
-\r
-# The QHP_NAMESPACE tag specifies the namespace to use when generating \r
-# Qt Help Project output. For more information please see \r
-# <a href="http://doc.trolltech.com/qthelpproject.html#namespace">Qt Help Project / Namespace</a>.\r
-\r
-QHP_NAMESPACE          = org.doxygen.Project\r
-\r
-# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating \r
-# Qt Help Project output. For more information please see \r
-# <a href="http://doc.trolltech.com/qthelpproject.html#virtual-folders">Qt Help Project / Virtual Folders</a>.\r
-\r
-QHP_VIRTUAL_FOLDER     = doc\r
-\r
-# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can \r
-# be used to specify the location of Qt's qhelpgenerator. \r
-# If non-empty doxygen will try to run qhelpgenerator on the generated \r
-# .qhp file .\r
-\r
-QHG_LOCATION           = \r
-\r
-# The DISABLE_INDEX tag can be used to turn on/off the condensed index at \r
-# top of each HTML page. The value NO (the default) enables the index and \r
-# the value YES disables it.\r
-\r
-DISABLE_INDEX          = NO\r
-\r
-# This tag can be used to set the number of enum values (range [1..20]) \r
-# that doxygen will group on one line in the generated HTML documentation.\r
-\r
-ENUM_VALUES_PER_LINE   = 1\r
-\r
-# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index\r
-# structure should be generated to display hierarchical information.\r
-# If the tag value is set to FRAME, a side panel will be generated\r
-# containing a tree-like index structure (just like the one that \r
-# is generated for HTML Help). For this to work a browser that supports \r
-# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, \r
-# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are \r
-# probably better off using the HTML help feature. Other possible values \r
-# for this tag are: HIERARCHIES, which will generate the Groups, Directories,\r
-# and Class Hierarchy pages using a tree view instead of an ordered list;\r
-# ALL, which combines the behavior of FRAME and HIERARCHIES; and NONE, which\r
-# disables this behavior completely. For backwards compatibility with previous\r
-# releases of Doxygen, the values YES and NO are equivalent to FRAME and NONE\r
-# respectively.\r
-\r
-GENERATE_TREEVIEW      = YES\r
-\r
-# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be \r
-# used to set the initial width (in pixels) of the frame in which the tree \r
-# is shown.\r
-\r
-TREEVIEW_WIDTH         = 250\r
-\r
-# Use this tag to change the font size of Latex formulas included \r
-# as images in the HTML documentation. The default is 10. Note that \r
-# when you change the font size after a successful doxygen run you need \r
-# to manually remove any form_*.png images from the HTML output directory \r
-# to force them to be regenerated.\r
-\r
-FORMULA_FONTSIZE       = 10\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the LaTeX output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will \r
-# generate Latex output.\r
-\r
-GENERATE_LATEX         = NO\r
-\r
-# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. \r
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
-# put in front of it. If left blank `latex' will be used as the default path.\r
-\r
-LATEX_OUTPUT           = latex\r
-\r
-# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be \r
-# invoked. If left blank `latex' will be used as the default command name.\r
-\r
-LATEX_CMD_NAME         = latex\r
-\r
-# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to \r
-# generate index for LaTeX. If left blank `makeindex' will be used as the \r
-# default command name.\r
-\r
-MAKEINDEX_CMD_NAME     = makeindex\r
-\r
-# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact \r
-# LaTeX documents. This may be useful for small projects and may help to \r
-# save some trees in general.\r
-\r
-COMPACT_LATEX          = NO\r
-\r
-# The PAPER_TYPE tag can be used to set the paper type that is used \r
-# by the printer. Possible values are: a4, a4wide, letter, legal and \r
-# executive. If left blank a4wide will be used.\r
-\r
-PAPER_TYPE             = a4wide\r
-\r
-# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX \r
-# packages that should be included in the LaTeX output.\r
-\r
-EXTRA_PACKAGES         = \r
-\r
-# The LATEX_HEADER tag can be used to specify a personal LaTeX header for \r
-# the generated latex document. The header should contain everything until \r
-# the first chapter. If it is left blank doxygen will generate a \r
-# standard header. Notice: only use this tag if you know what you are doing!\r
-\r
-LATEX_HEADER           = \r
-\r
-# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated \r
-# is prepared for conversion to pdf (using ps2pdf). The pdf file will \r
-# contain links (just like the HTML output) instead of page references \r
-# This makes the output suitable for online browsing using a pdf viewer.\r
-\r
-PDF_HYPERLINKS         = YES\r
-\r
-# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of \r
-# plain latex in the generated Makefile. Set this option to YES to get a \r
-# higher quality PDF documentation.\r
-\r
-USE_PDFLATEX           = YES\r
-\r
-# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. \r
-# command to the generated LaTeX files. This will instruct LaTeX to keep \r
-# running if errors occur, instead of asking the user for help. \r
-# This option is also used when generating formulas in HTML.\r
-\r
-LATEX_BATCHMODE        = NO\r
-\r
-# If LATEX_HIDE_INDICES is set to YES then doxygen will not \r
-# include the index chapters (such as File Index, Compound Index, etc.) \r
-# in the output.\r
-\r
-LATEX_HIDE_INDICES     = NO\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the RTF output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output \r
-# The RTF output is optimized for Word 97 and may not look very pretty with \r
-# other RTF readers or editors.\r
-\r
-GENERATE_RTF           = NO\r
-\r
-# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. \r
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
-# put in front of it. If left blank `rtf' will be used as the default path.\r
-\r
-RTF_OUTPUT             = rtf\r
-\r
-# If the COMPACT_RTF tag is set to YES Doxygen generates more compact \r
-# RTF documents. This may be useful for small projects and may help to \r
-# save some trees in general.\r
-\r
-COMPACT_RTF            = NO\r
-\r
-# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated \r
-# will contain hyperlink fields. The RTF file will \r
-# contain links (just like the HTML output) instead of page references. \r
-# This makes the output suitable for online browsing using WORD or other \r
-# programs which support those fields. \r
-# Note: wordpad (write) and others do not support links.\r
-\r
-RTF_HYPERLINKS         = NO\r
-\r
-# Load stylesheet definitions from file. Syntax is similar to doxygen's \r
-# config file, i.e. a series of assignments. You only have to provide \r
-# replacements, missing definitions are set to their default value.\r
-\r
-RTF_STYLESHEET_FILE    = \r
-\r
-# Set optional variables used in the generation of an rtf document. \r
-# Syntax is similar to doxygen's config file.\r
-\r
-RTF_EXTENSIONS_FILE    = \r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the man page output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_MAN tag is set to YES (the default) Doxygen will \r
-# generate man pages\r
-\r
-GENERATE_MAN           = NO\r
-\r
-# The MAN_OUTPUT tag is used to specify where the man pages will be put. \r
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
-# put in front of it. If left blank `man' will be used as the default path.\r
-\r
-MAN_OUTPUT             = man\r
-\r
-# The MAN_EXTENSION tag determines the extension that is added to \r
-# the generated man pages (default is the subroutine's section .3)\r
-\r
-MAN_EXTENSION          = .3\r
-\r
-# If the MAN_LINKS tag is set to YES and Doxygen generates man output, \r
-# then it will generate one additional man file for each entity \r
-# documented in the real man page(s). These additional files \r
-# only source the real man page, but without them the man command \r
-# would be unable to find the correct page. The default is NO.\r
-\r
-MAN_LINKS              = NO\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the XML output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_XML tag is set to YES Doxygen will \r
-# generate an XML file that captures the structure of \r
-# the code including all documentation.\r
-\r
-GENERATE_XML           = NO\r
-\r
-# The XML_OUTPUT tag is used to specify where the XML pages will be put. \r
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
-# put in front of it. If left blank `xml' will be used as the default path.\r
-\r
-XML_OUTPUT             = xml\r
-\r
-# The XML_SCHEMA tag can be used to specify an XML schema, \r
-# which can be used by a validating XML parser to check the \r
-# syntax of the XML files.\r
-\r
-XML_SCHEMA             = \r
-\r
-# The XML_DTD tag can be used to specify an XML DTD, \r
-# which can be used by a validating XML parser to check the \r
-# syntax of the XML files.\r
-\r
-XML_DTD                = \r
-\r
-# If the XML_PROGRAMLISTING tag is set to YES Doxygen will \r
-# dump the program listings (including syntax highlighting \r
-# and cross-referencing information) to the XML output. Note that \r
-# enabling this will significantly increase the size of the XML output.\r
-\r
-XML_PROGRAMLISTING     = YES\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options for the AutoGen Definitions output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will \r
-# generate an AutoGen Definitions (see autogen.sf.net) file \r
-# that captures the structure of the code including all \r
-# documentation. Note that this feature is still experimental \r
-# and incomplete at the moment.\r
-\r
-GENERATE_AUTOGEN_DEF   = NO\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the Perl module output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_PERLMOD tag is set to YES Doxygen will \r
-# generate a Perl module file that captures the structure of \r
-# the code including all documentation. Note that this \r
-# feature is still experimental and incomplete at the \r
-# moment.\r
-\r
-GENERATE_PERLMOD       = NO\r
-\r
-# If the PERLMOD_LATEX tag is set to YES Doxygen will generate \r
-# the necessary Makefile rules, Perl scripts and LaTeX code to be able \r
-# to generate PDF and DVI output from the Perl module output.\r
-\r
-PERLMOD_LATEX          = NO\r
-\r
-# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be \r
-# nicely formatted so it can be parsed by a human reader.  This is useful \r
-# if you want to understand what is going on.  On the other hand, if this \r
-# tag is set to NO the size of the Perl module output will be much smaller \r
-# and Perl will parse it just the same.\r
-\r
-PERLMOD_PRETTY         = YES\r
-\r
-# The names of the make variables in the generated doxyrules.make file \r
-# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. \r
-# This is useful so different doxyrules.make files included by the same \r
-# Makefile don't overwrite each other's variables.\r
-\r
-PERLMOD_MAKEVAR_PREFIX = \r
-\r
-#---------------------------------------------------------------------------\r
-# Configuration options related to the preprocessor   \r
-#---------------------------------------------------------------------------\r
-\r
-# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will \r
-# evaluate all C-preprocessor directives found in the sources and include \r
-# files.\r
-\r
-ENABLE_PREPROCESSING   = YES\r
-\r
-# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro \r
-# names in the source code. If set to NO (the default) only conditional \r
-# compilation will be performed. Macro expansion can be done in a controlled \r
-# way by setting EXPAND_ONLY_PREDEF to YES.\r
-\r
-MACRO_EXPANSION        = YES\r
-\r
-# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES \r
-# then the macro expansion is limited to the macros specified with the \r
-# PREDEFINED and EXPAND_AS_DEFINED tags.\r
-\r
-EXPAND_ONLY_PREDEF     = YES\r
-\r
-# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files \r
-# in the INCLUDE_PATH (see below) will be search if a #include is found.\r
-\r
-SEARCH_INCLUDES        = YES\r
-\r
-# The INCLUDE_PATH tag can be used to specify one or more directories that \r
-# contain include files that are not input files but should be processed by \r
-# the preprocessor.\r
-\r
-INCLUDE_PATH           = \r
-\r
-# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard \r
-# patterns (like *.h and *.hpp) to filter out the header-files in the \r
-# directories. If left blank, the patterns specified with FILE_PATTERNS will \r
-# be used.\r
-\r
-INCLUDE_FILE_PATTERNS  = \r
-\r
-# The PREDEFINED tag can be used to specify one or more macro names that \r
-# are defined before the preprocessor is started (similar to the -D option of \r
-# gcc). The argument of the tag is a list of macros of the form: name \r
-# or name=definition (no spaces). If the definition and the = are \r
-# omitted =1 is assumed. To prevent a macro definition from being \r
-# undefined via #undef or recursively expanded use the := operator \r
-# instead of the = operator.\r
-\r
-PREDEFINED             = __DOXYGEN__\r
-\r
-# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then \r
-# this tag can be used to specify a list of macro names that should be expanded. \r
-# The macro definition that is found in the sources will be used. \r
-# Use the PREDEFINED tag if you want to use a different macro definition.\r
-\r
-EXPAND_AS_DEFINED      = BUTTLOADTAG\r
-\r
-# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then \r
-# doxygen's preprocessor will remove all function-like macros that are alone \r
-# on a line, have an all uppercase name, and do not end with a semicolon. Such \r
-# function macros are typically used for boiler-plate code, and will confuse \r
-# the parser if not removed.\r
-\r
-SKIP_FUNCTION_MACROS   = YES\r
-\r
-#---------------------------------------------------------------------------\r
-# Configuration::additions related to external references   \r
-#---------------------------------------------------------------------------\r
-\r
-# The TAGFILES option can be used to specify one or more tagfiles. \r
-# Optionally an initial location of the external documentation \r
-# can be added for each tagfile. The format of a tag file without \r
-# this location is as follows: \r
-#   TAGFILES = file1 file2 ... \r
-# Adding location for the tag files is done as follows: \r
-#   TAGFILES = file1=loc1 "file2 = loc2" ... \r
-# where "loc1" and "loc2" can be relative or absolute paths or \r
-# URLs. If a location is present for each tag, the installdox tool \r
-# does not have to be run to correct the links.\r
-# Note that each tag file must have a unique name\r
-# (where the name does NOT include the path)\r
-# If a tag file is not located in the directory in which doxygen \r
-# is run, you must also specify the path to the tagfile here.\r
-\r
-TAGFILES               = \r
-\r
-# When a file name is specified after GENERATE_TAGFILE, doxygen will create \r
-# a tag file that is based on the input files it reads.\r
-\r
-GENERATE_TAGFILE       = \r
-\r
-# If the ALLEXTERNALS tag is set to YES all external classes will be listed \r
-# in the class index. If set to NO only the inherited external classes \r
-# will be listed.\r
-\r
-ALLEXTERNALS           = NO\r
-\r
-# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed \r
-# in the modules index. If set to NO, only the current project's groups will \r
-# be listed.\r
-\r
-EXTERNAL_GROUPS        = YES\r
-\r
-# The PERL_PATH should be the absolute path and name of the perl script \r
-# interpreter (i.e. the result of `which perl').\r
-\r
-PERL_PATH              = /usr/bin/perl\r
-\r
-#---------------------------------------------------------------------------\r
-# Configuration options related to the dot tool   \r
-#---------------------------------------------------------------------------\r
-\r
-# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will \r
-# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base \r
-# or super classes. Setting the tag to NO turns the diagrams off. Note that \r
-# this option is superseded by the HAVE_DOT option below. This is only a \r
-# fallback. It is recommended to install and use dot, since it yields more \r
-# powerful graphs.\r
-\r
-CLASS_DIAGRAMS         = NO\r
-\r
-# You can define message sequence charts within doxygen comments using the \msc \r
-# command. Doxygen will then run the mscgen tool (see \r
-# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the \r
-# documentation. The MSCGEN_PATH tag allows you to specify the directory where \r
-# the mscgen tool resides. If left empty the tool is assumed to be found in the \r
-# default search path.\r
-\r
-MSCGEN_PATH            = \r
-\r
-# If set to YES, the inheritance and collaboration graphs will hide \r
-# inheritance and usage relations if the target is undocumented \r
-# or is not a class.\r
-\r
-HIDE_UNDOC_RELATIONS   = YES\r
-\r
-# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is \r
-# available from the path. This tool is part of Graphviz, a graph visualization \r
-# toolkit from AT&T and Lucent Bell Labs. The other options in this section \r
-# have no effect if this option is set to NO (the default)\r
-\r
-HAVE_DOT               = NO\r
-\r
-# By default doxygen will write a font called FreeSans.ttf to the output \r
-# directory and reference it in all dot files that doxygen generates. This \r
-# font does not include all possible unicode characters however, so when you need \r
-# these (or just want a differently looking font) you can specify the font name \r
-# using DOT_FONTNAME. You need need to make sure dot is able to find the font, \r
-# which can be done by putting it in a standard location or by setting the \r
-# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory \r
-# containing the font.\r
-\r
-DOT_FONTNAME           = FreeSans\r
-\r
-# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. \r
-# The default size is 10pt.\r
-\r
-DOT_FONTSIZE           = 10\r
-\r
-# By default doxygen will tell dot to use the output directory to look for the \r
-# FreeSans.ttf font (which doxygen will put there itself). If you specify a \r
-# different font using DOT_FONTNAME you can set the path where dot \r
-# can find it using this tag.\r
-\r
-DOT_FONTPATH           = \r
-\r
-# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen \r
-# will generate a graph for each documented class showing the direct and \r
-# indirect inheritance relations. Setting this tag to YES will force the \r
-# the CLASS_DIAGRAMS tag to NO.\r
-\r
-CLASS_GRAPH            = NO\r
-\r
-# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen \r
-# will generate a graph for each documented class showing the direct and \r
-# indirect implementation dependencies (inheritance, containment, and \r
-# class references variables) of the class with other documented classes.\r
-\r
-COLLABORATION_GRAPH    = NO\r
-\r
-# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen \r
-# will generate a graph for groups, showing the direct groups dependencies\r
-\r
-GROUP_GRAPHS           = NO\r
-\r
-# If the UML_LOOK tag is set to YES doxygen will generate inheritance and \r
-# collaboration diagrams in a style similar to the OMG's Unified Modeling \r
-# Language.\r
-\r
-UML_LOOK               = NO\r
-\r
-# If set to YES, the inheritance and collaboration graphs will show the \r
-# relations between templates and their instances.\r
-\r
-TEMPLATE_RELATIONS     = NO\r
-\r
-# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT \r
-# tags are set to YES then doxygen will generate a graph for each documented \r
-# file showing the direct and indirect include dependencies of the file with \r
-# other documented files.\r
-\r
-INCLUDE_GRAPH          = NO\r
-\r
-# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and \r
-# HAVE_DOT tags are set to YES then doxygen will generate a graph for each \r
-# documented header file showing the documented files that directly or \r
-# indirectly include this file.\r
-\r
-INCLUDED_BY_GRAPH      = NO\r
-\r
-# If the CALL_GRAPH and HAVE_DOT options are set to YES then \r
-# doxygen will generate a call dependency graph for every global function \r
-# or class method. Note that enabling this option will significantly increase \r
-# the time of a run. So in most cases it will be better to enable call graphs \r
-# for selected functions only using the \callgraph command.\r
-\r
-CALL_GRAPH             = NO\r
-\r
-# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then \r
-# doxygen will generate a caller dependency graph for every global function \r
-# or class method. Note that enabling this option will significantly increase \r
-# the time of a run. So in most cases it will be better to enable caller \r
-# graphs for selected functions only using the \callergraph command.\r
-\r
-CALLER_GRAPH           = NO\r
-\r
-# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen \r
-# will graphical hierarchy of all classes instead of a textual one.\r
-\r
-GRAPHICAL_HIERARCHY    = NO\r
-\r
-# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES \r
-# then doxygen will show the dependencies a directory has on other directories \r
-# in a graphical way. The dependency relations are determined by the #include\r
-# relations between the files in the directories.\r
-\r
-DIRECTORY_GRAPH        = NO\r
-\r
-# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images \r
-# generated by dot. Possible values are png, jpg, or gif\r
-# If left blank png will be used.\r
-\r
-DOT_IMAGE_FORMAT       = png\r
-\r
-# The tag DOT_PATH can be used to specify the path where the dot tool can be \r
-# found. If left blank, it is assumed the dot tool can be found in the path.\r
-\r
-DOT_PATH               = "C:/Program Files/Graphviz2.18/bin"\r
-\r
-# The DOTFILE_DIRS tag can be used to specify one or more directories that \r
-# contain dot files that are included in the documentation (see the \r
-# \dotfile command).\r
-\r
-DOTFILE_DIRS           = \r
-\r
-# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of \r
-# nodes that will be shown in the graph. If the number of nodes in a graph \r
-# becomes larger than this value, doxygen will truncate the graph, which is \r
-# visualized by representing a node as a red box. Note that doxygen if the \r
-# number of direct children of the root node in a graph is already larger than \r
-# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note \r
-# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.\r
-\r
-DOT_GRAPH_MAX_NODES    = 15\r
-\r
-# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the \r
-# graphs generated by dot. A depth value of 3 means that only nodes reachable \r
-# from the root by following a path via at most 3 edges will be shown. Nodes \r
-# that lay further from the root node will be omitted. Note that setting this \r
-# option to 1 or 2 may greatly reduce the computation time needed for large \r
-# code bases. Also note that the size of a graph can be further restricted by \r
-# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.\r
-\r
-MAX_DOT_GRAPH_DEPTH    = 2\r
-\r
-# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent \r
-# background. This is disabled by default, because dot on Windows does not \r
-# seem to support this out of the box. Warning: Depending on the platform used, \r
-# enabling this option may lead to badly anti-aliased labels on the edges of \r
-# a graph (i.e. they become hard to read).\r
-\r
-DOT_TRANSPARENT        = YES\r
-\r
-# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output \r
-# files in one run (i.e. multiple -o and -T options on the command line). This \r
-# makes dot run faster, but since only newer versions of dot (>1.8.10) \r
-# support this, this feature is disabled by default.\r
-\r
-DOT_MULTI_TARGETS      = NO\r
-\r
-# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will \r
-# generate a legend page explaining the meaning of the various boxes and \r
-# arrows in the dot generated graphs.\r
-\r
-GENERATE_LEGEND        = YES\r
-\r
-# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will \r
-# remove the intermediate dot files that are used to generate \r
-# the various graphs.\r
-\r
-DOT_CLEANUP            = YES\r
-\r
-#---------------------------------------------------------------------------\r
-# Configuration::additions related to the search engine   \r
-#---------------------------------------------------------------------------\r
-\r
-# The SEARCHENGINE tag specifies whether or not a search engine should be \r
-# used. If set to NO the values of all tags below this one will be ignored.\r
-\r
-SEARCHENGINE           = NO\r
diff --git a/Demos/Device/CDC/LUFA CDC.inf b/Demos/Device/CDC/LUFA CDC.inf
deleted file mode 100644 (file)
index d9d9ed6..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-;       Windows LUFA CDC Setup File\r
-; Copyright (c) 2000 Microsoft Corporation\r
-\r
-[Version] \r
-Signature="$Windows NT$" \r
-Class=Ports\r
-ClassGuid={4D36E978-E325-11CE-BFC1-08002BE10318} \r
-Provider=%COMPANY% \r
-LayoutFile=layout.inf\r
-DriverVer=06/06/2006,1.0.0.0\r
-\r
-[Manufacturer] \r
-%MFGNAME% = ManufName\r
-\r
-[DestinationDirs] \r
-DefaultDestDir=12 \r
-\r
-[ManufName] \r
-%Modem3% = Modem3, USB\VID_03EB&PID_2044\r
-\r
-;------------------------------------------------------------------------------\r
-;  Windows 2000/XP Sections\r
-;------------------------------------------------------------------------------\r
-\r
-[Modem3.nt]\r
-CopyFiles=USBModemCopyFileSection\r
-AddReg=Modem3.nt.AddReg \r
-\r
-[USBModemCopyFileSection]\r
-usbser.sys,,,0x20\r
-\r
-[Modem3.nt.AddReg] \r
-HKR,,DevLoader,,*ntkern \r
-HKR,,NTMPDriver,,usbser.sys \r
-HKR,,EnumPropPages32,,"MsPorts.dll,SerialPortPropPageProvider" \r
-\r
-[Modem3.nt.Services] \r
-AddService=usbser, 0x00000002, DriverService\r
-\r
-[DriverService] \r
-DisplayName=%SERVICE%\r
-ServiceType=1\r
-StartType=3\r
-ErrorControl=1\r
-ServiceBinary=%12%\usbser.sys \r
-\r
-;------------------------------------------------------------------------------\r
-;  String Definitions\r
-;------------------------------------------------------------------------------\r
-\r
-[Strings] \r
-COMPANY="LUFA Library"\r
-MFGNAME="Dean Camera"\r
-Modem3="USB Virtual Serial Port" \r
-SERVICE="USB Virtual Serial Port CDC Driver"
\ No newline at end of file
diff --git a/Demos/Device/CDC/makefile b/Demos/Device/CDC/makefile
deleted file mode 100644 (file)
index bd4ff36..0000000
+++ /dev/null
@@ -1,733 +0,0 @@
-# Hey Emacs, this is a -*- makefile -*-\r
-#----------------------------------------------------------------------------\r
-# WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al.\r
-#  >> Modified for use with the LUFA project. <<\r
-#\r
-# Released to the Public Domain\r
-#\r
-# Additional material for this makefile was written by:\r
-# Peter Fleury\r
-# Tim Henigan\r
-# Colin O'Flynn\r
-# Reiner Patommel\r
-# Markus Pfaff\r
-# Sander Pool\r
-# Frederik Rouleau\r
-# Carlos Lamas\r
-# Dean Camera\r
-# Opendous Inc.\r
-# Denver Gingerich\r
-#\r
-#----------------------------------------------------------------------------\r
-# On command line:\r
-#\r
-# make all = Make software.\r
-#\r
-# make clean = Clean out built project files.\r
-#\r
-# make coff = Convert ELF to AVR COFF.\r
-#\r
-# make extcoff = Convert ELF to AVR Extended COFF.\r
-#\r
-# make program = Download the hex file to the device, using avrdude.\r
-#                Please customize the avrdude settings below first!\r
-#\r
-# make dfu = Download the hex file to the device, using dfu-programmer (must\r
-#            have dfu-programmer installed).\r
-#\r
-# make flip = Download the hex file to the device, using Atmel FLIP (must\r
-#             have Atmel FLIP installed).\r
-#\r
-# make dfu-ee = Download the eeprom file to the device, using dfu-programmer\r
-#               (must have dfu-programmer installed).\r
-#\r
-# make flip-ee = Download the eeprom file to the device, using Atmel FLIP\r
-#                (must have Atmel FLIP installed).\r
-#\r
-# make doxygen = Generate DoxyGen documentation for the project (must have\r
-#                DoxyGen installed)\r
-#\r
-# make debug = Start either simulavr or avarice as specified for debugging, \r
-#              with avr-gdb or avr-insight as the front end for debugging.\r
-#\r
-# make filename.s = Just compile filename.c into the assembler code only.\r
-#\r
-# make filename.i = Create a preprocessed source file for use in submitting\r
-#                   bug reports to the GCC project.\r
-#\r
-# To rebuild project do "make clean" then "make all".\r
-#----------------------------------------------------------------------------\r
-\r
-\r
-# MCU name\r
-MCU = at90usb1287\r
-\r
-\r
-# Target board (see library "Board Types" documentation, USER or blank for projects not requiring\r
-# LUFA board drivers). If USER is selected, put custom board drivers in a directory called \r
-# "Board" inside the application directory.\r
-BOARD  = USBKEY\r
-\r
-\r
-# Processor frequency.\r
-#     This will define a symbol, F_CPU, in all source code files equal to the \r
-#     processor frequency. You can then use this symbol in your source code to \r
-#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done\r
-#     automatically to create a 32-bit value in your source code.\r
-#     Typical values are:\r
-#         F_CPU =  1000000\r
-#         F_CPU =  1843200\r
-#         F_CPU =  2000000\r
-#         F_CPU =  3686400\r
-#         F_CPU =  4000000\r
-#         F_CPU =  7372800\r
-#         F_CPU =  8000000\r
-#         F_CPU = 11059200\r
-#         F_CPU = 14745600\r
-#         F_CPU = 16000000\r
-#         F_CPU = 18432000\r
-#         F_CPU = 20000000\r
-F_CPU = 8000000\r
-\r
-\r
-# Input clock frequency.\r
-#     This will define a symbol, F_CLOCK, in all source code files equal to the \r
-#     input clock frequency (before any prescaling is performed). This value may\r
-#     differ from F_CPU if prescaling is used on the latter, and is required as the\r
-#     raw input clock is fed directly to the PLL sections of the AVR for high speed\r
-#     clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'\r
-#     at the end, this will be done automatically to create a 32-bit value in your\r
-#     source code.\r
-#\r
-#     If no clock division is performed on the input clock inside the AVR (via the\r
-#     CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.\r
-F_CLOCK = 8000000\r
-\r
-\r
-# Output format. (can be srec, ihex, binary)\r
-FORMAT = ihex\r
-\r
-\r
-# Target file name (without extension).\r
-TARGET = CDC\r
-\r
-\r
-# Object files directory\r
-#     To put object files in current directory, use a dot (.), do NOT make\r
-#     this an empty or blank macro!\r
-OBJDIR = .\r
-\r
-\r
-# Path to the LUFA library\r
-LUFA_PATH = ../../..\r
-\r
-\r
-# List C source files here. (C dependencies are automatically generated.)\r
-SRC = $(TARGET).c                                                 \\r
-         Descriptors.c                                               \\r
-         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/DevChapter9.c        \\r
-         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Endpoint.c           \\r
-         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Host.c               \\r
-         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/HostChapter9.c       \\r
-         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/LowLevel.c           \\r
-         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Pipe.c               \\r
-         $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/Events.c            \\r
-         $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBInterrupt.c      \\r
-         $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBTask.c           \\r
-         $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/ConfigDescriptor.c  \\r
-         $(LUFA_PATH)/LUFA/Drivers/USB/Class/Device/CDC.c            \\r
-\r
-\r
-# List C++ source files here. (C dependencies are automatically generated.)\r
-CPPSRC = \r
-\r
-\r
-# List Assembler source files here.\r
-#     Make them always end in a capital .S.  Files ending in a lowercase .s\r
-#     will not be considered source files but generated files (assembler\r
-#     output from the compiler), and will be deleted upon "make clean"!\r
-#     Even though the DOS/Win* filesystem matches both .s and .S the same,\r
-#     it will preserve the spelling of the filenames, and gcc itself does\r
-#     care about how the name is spelled on its command-line.\r
-ASRC =\r
-\r
-\r
-# Optimization level, can be [0, 1, 2, 3, s]. \r
-#     0 = turn off optimization. s = optimize for size.\r
-#     (Note: 3 is not always the best optimization level. See avr-libc FAQ.)\r
-OPT = s\r
-\r
-\r
-# Debugging format.\r
-#     Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs.\r
-#     AVR Studio 4.10 requires dwarf-2.\r
-#     AVR [Extended] COFF format requires stabs, plus an avr-objcopy run.\r
-DEBUG = dwarf-2\r
-\r
-\r
-# List any extra directories to look for include files here.\r
-#     Each directory must be seperated by a space.\r
-#     Use forward slashes for directory separators.\r
-#     For a directory that has spaces, enclose it in quotes.\r
-EXTRAINCDIRS = $(LUFA_PATH)/\r
-\r
-\r
-# Compiler flag to set the C Standard level.\r
-#     c89   = "ANSI" C\r
-#     gnu89 = c89 plus GCC extensions\r
-#     c99   = ISO C99 standard (not yet fully implemented)\r
-#     gnu99 = c99 plus GCC extensions\r
-CSTANDARD = -std=gnu99\r
-\r
-\r
-# Place -D or -U options here for C sources\r
-CDEFS  = -DF_CPU=$(F_CPU)UL -DF_CLOCK=$(F_CLOCK)UL -DBOARD=BOARD_$(BOARD)\r
-CDEFS += -DUSE_NONSTANDARD_DESCRIPTOR_NAMES -DUSB_DEVICE_ONLY\r
-CDEFS += -DFIXED_CONTROL_ENDPOINT_SIZE=8 -DUSE_SINGLE_DEVICE_CONFIGURATION\r
-CDEFS += -DUSE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)"\r
-\r
-\r
-# Place -D or -U options here for ASM sources\r
-ADEFS = -DF_CPU=$(F_CPU)\r
-\r
-\r
-# Place -D or -U options here for C++ sources\r
-CPPDEFS = -DF_CPU=$(F_CPU)UL\r
-#CPPDEFS += -D__STDC_LIMIT_MACROS\r
-#CPPDEFS += -D__STDC_CONSTANT_MACROS\r
-\r
-\r
-\r
-#---------------- Compiler Options C ----------------\r
-#  -g*:          generate debugging information\r
-#  -O*:          optimization level\r
-#  -f...:        tuning, see GCC manual and avr-libc documentation\r
-#  -Wall...:     warning level\r
-#  -Wa,...:      tell GCC to pass this to the assembler.\r
-#    -adhlns...: create assembler listing\r
-CFLAGS = -g$(DEBUG)\r
-CFLAGS += $(CDEFS)\r
-CFLAGS += -O$(OPT)\r
-CFLAGS += -funsigned-char\r
-CFLAGS += -funsigned-bitfields\r
-CFLAGS += -ffunction-sections\r
-CFLAGS += -fpack-struct\r
-CFLAGS += -fshort-enums\r
-CFLAGS += -finline-limit=20\r
-CFLAGS += -Wall\r
-CFLAGS += -Wstrict-prototypes\r
-CFLAGS += -Wundef\r
-#CFLAGS += -fno-unit-at-a-time\r
-#CFLAGS += -Wunreachable-code\r
-#CFLAGS += -Wsign-compare\r
-CFLAGS += -Wa,-adhlns=$(<:%.c=$(OBJDIR)/%.lst)\r
-CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))\r
-CFLAGS += $(CSTANDARD)\r
-\r
-\r
-#---------------- Compiler Options C++ ----------------\r
-#  -g*:          generate debugging information\r
-#  -O*:          optimization level\r
-#  -f...:        tuning, see GCC manual and avr-libc documentation\r
-#  -Wall...:     warning level\r
-#  -Wa,...:      tell GCC to pass this to the assembler.\r
-#    -adhlns...: create assembler listing\r
-CPPFLAGS = -g$(DEBUG)\r
-CPPFLAGS += $(CPPDEFS)\r
-CPPFLAGS += -O$(OPT)\r
-CPPFLAGS += -funsigned-char\r
-CPPFLAGS += -funsigned-bitfields\r
-CPPFLAGS += -fpack-struct\r
-CPPFLAGS += -fshort-enums\r
-CPPFLAGS += -fno-exceptions\r
-CPPFLAGS += -Wall\r
-CFLAGS += -Wundef\r
-#CPPFLAGS += -mshort-calls\r
-#CPPFLAGS += -fno-unit-at-a-time\r
-#CPPFLAGS += -Wstrict-prototypes\r
-#CPPFLAGS += -Wunreachable-code\r
-#CPPFLAGS += -Wsign-compare\r
-CPPFLAGS += -Wa,-adhlns=$(<:%.cpp=$(OBJDIR)/%.lst)\r
-CPPFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))\r
-#CPPFLAGS += $(CSTANDARD)\r
-\r
-\r
-#---------------- Assembler Options ----------------\r
-#  -Wa,...:   tell GCC to pass this to the assembler.\r
-#  -adhlns:   create listing\r
-#  -gstabs:   have the assembler create line number information; note that\r
-#             for use in COFF files, additional information about filenames\r
-#             and function names needs to be present in the assembler source\r
-#             files -- see avr-libc docs [FIXME: not yet described there]\r
-#  -listing-cont-lines: Sets the maximum number of continuation lines of hex \r
-#       dump that will be displayed for a given single line of source input.\r
-ASFLAGS = $(ADEFS) -Wa,-adhlns=$(<:%.S=$(OBJDIR)/%.lst),-gstabs,--listing-cont-lines=100\r
-\r
-\r
-#---------------- Library Options ----------------\r
-# Minimalistic printf version\r
-PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min\r
-\r
-# Floating point printf version (requires MATH_LIB = -lm below)\r
-PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt\r
-\r
-# If this is left blank, then it will use the Standard printf version.\r
-PRINTF_LIB = \r
-#PRINTF_LIB = $(PRINTF_LIB_MIN)\r
-#PRINTF_LIB = $(PRINTF_LIB_FLOAT)\r
-\r
-\r
-# Minimalistic scanf version\r
-SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min\r
-\r
-# Floating point + %[ scanf version (requires MATH_LIB = -lm below)\r
-SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt\r
-\r
-# If this is left blank, then it will use the Standard scanf version.\r
-SCANF_LIB = \r
-#SCANF_LIB = $(SCANF_LIB_MIN)\r
-#SCANF_LIB = $(SCANF_LIB_FLOAT)\r
-\r
-\r
-MATH_LIB = -lm\r
-\r
-\r
-# List any extra directories to look for libraries here.\r
-#     Each directory must be seperated by a space.\r
-#     Use forward slashes for directory separators.\r
-#     For a directory that has spaces, enclose it in quotes.\r
-EXTRALIBDIRS = \r
-\r
-\r
-\r
-#---------------- External Memory Options ----------------\r
-\r
-# 64 KB of external RAM, starting after internal RAM (ATmega128!),\r
-# used for variables (.data/.bss) and heap (malloc()).\r
-#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff\r
-\r
-# 64 KB of external RAM, starting after internal RAM (ATmega128!),\r
-# only used for heap (malloc()).\r
-#EXTMEMOPTS = -Wl,--section-start,.data=0x801100,--defsym=__heap_end=0x80ffff\r
-\r
-EXTMEMOPTS =\r
-\r
-\r
-\r
-#---------------- Linker Options ----------------\r
-#  -Wl,...:     tell GCC to pass this to linker.\r
-#    -Map:      create map file\r
-#    --cref:    add cross reference to  map file\r
-LDFLAGS = -Wl,-Map=$(TARGET).map,--cref\r
-LDFLAGS += -Wl,--relax \r
-LDFLAGS += -Wl,--gc-sections\r
-LDFLAGS += $(EXTMEMOPTS)\r
-LDFLAGS += $(patsubst %,-L%,$(EXTRALIBDIRS))\r
-LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)\r
-#LDFLAGS += -T linker_script.x\r
-\r
-\r
-\r
-#---------------- Programming Options (avrdude) ----------------\r
-\r
-# Programming hardware: alf avr910 avrisp bascom bsd \r
-# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500\r
-#\r
-# Type: avrdude -c ?\r
-# to get a full listing.\r
-#\r
-AVRDUDE_PROGRAMMER = jtagmkII\r
-\r
-# com1 = serial port. Use lpt1 to connect to parallel port.\r
-AVRDUDE_PORT = usb\r
-\r
-AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex\r
-#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep\r
-\r
-\r
-# Uncomment the following if you want avrdude's erase cycle counter.\r
-# Note that this counter needs to be initialized first using -Yn,\r
-# see avrdude manual.\r
-#AVRDUDE_ERASE_COUNTER = -y\r
-\r
-# Uncomment the following if you do /not/ wish a verification to be\r
-# performed after programming the device.\r
-#AVRDUDE_NO_VERIFY = -V\r
-\r
-# Increase verbosity level.  Please use this when submitting bug\r
-# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude> \r
-# to submit bug reports.\r
-#AVRDUDE_VERBOSE = -v -v\r
-\r
-AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)\r
-AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY)\r
-AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE)\r
-AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER)\r
-\r
-\r
-\r
-#---------------- Debugging Options ----------------\r
-\r
-# For simulavr only - target MCU frequency.\r
-DEBUG_MFREQ = $(F_CPU)\r
-\r
-# Set the DEBUG_UI to either gdb or insight.\r
-# DEBUG_UI = gdb\r
-DEBUG_UI = insight\r
-\r
-# Set the debugging back-end to either avarice, simulavr.\r
-DEBUG_BACKEND = avarice\r
-#DEBUG_BACKEND = simulavr\r
-\r
-# GDB Init Filename.\r
-GDBINIT_FILE = __avr_gdbinit\r
-\r
-# When using avarice settings for the JTAG\r
-JTAG_DEV = /dev/com1\r
-\r
-# Debugging port used to communicate between GDB / avarice / simulavr.\r
-DEBUG_PORT = 4242\r
-\r
-# Debugging host used to communicate between GDB / avarice / simulavr, normally\r
-#     just set to localhost unless doing some sort of crazy debugging when \r
-#     avarice is running on a different computer.\r
-DEBUG_HOST = localhost\r
-\r
-\r
-\r
-#============================================================================\r
-\r
-\r
-# Define programs and commands.\r
-SHELL = sh\r
-CC = avr-gcc\r
-OBJCOPY = avr-objcopy\r
-OBJDUMP = avr-objdump\r
-SIZE = avr-size\r
-AR = avr-ar rcs\r
-NM = avr-nm\r
-AVRDUDE = avrdude\r
-REMOVE = rm -f\r
-REMOVEDIR = rm -rf\r
-COPY = cp\r
-WINSHELL = cmd\r
-\r
-# Define Messages\r
-# English\r
-MSG_ERRORS_NONE = Errors: none\r
-MSG_BEGIN = -------- begin --------\r
-MSG_END = --------  end  --------\r
-MSG_SIZE_BEFORE = Size before: \r
-MSG_SIZE_AFTER = Size after:\r
-MSG_COFF = Converting to AVR COFF:\r
-MSG_EXTENDED_COFF = Converting to AVR Extended COFF:\r
-MSG_FLASH = Creating load file for Flash:\r
-MSG_EEPROM = Creating load file for EEPROM:\r
-MSG_EXTENDED_LISTING = Creating Extended Listing:\r
-MSG_SYMBOL_TABLE = Creating Symbol Table:\r
-MSG_LINKING = Linking:\r
-MSG_COMPILING = Compiling C:\r
-MSG_COMPILING_CPP = Compiling C++:\r
-MSG_ASSEMBLING = Assembling:\r
-MSG_CLEANING = Cleaning project:\r
-MSG_CREATING_LIBRARY = Creating library:\r
-\r
-\r
-\r
-\r
-# Define all object files.\r
-OBJ = $(SRC:%.c=$(OBJDIR)/%.o) $(CPPSRC:%.cpp=$(OBJDIR)/%.o) $(ASRC:%.S=$(OBJDIR)/%.o) \r
-\r
-# Define all listing files.\r
-LST = $(SRC:%.c=$(OBJDIR)/%.lst) $(CPPSRC:%.cpp=$(OBJDIR)/%.lst) $(ASRC:%.S=$(OBJDIR)/%.lst) \r
-\r
-\r
-# Compiler flags to generate dependency files.\r
-GENDEPFLAGS = -MMD -MP -MF .dep/$(@F).d\r
-\r
-\r
-# Combine all necessary flags and optional flags.\r
-# Add target processor to flags.\r
-ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS)\r
-ALL_CPPFLAGS = -mmcu=$(MCU) -I. -x c++ $(CPPFLAGS) $(GENDEPFLAGS)\r
-ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)\r
-\r
-\r
-\r
-\r
-\r
-# Default target.\r
-all: begin gccversion sizebefore build checkhooks checklibmode checkboard sizeafter end\r
-\r
-# Change the build target to build a HEX file or a library.\r
-build: elf hex eep lss sym\r
-#build: lib\r
-\r
-\r
-elf: $(TARGET).elf\r
-hex: $(TARGET).hex\r
-eep: $(TARGET).eep\r
-lss: $(TARGET).lss\r
-sym: $(TARGET).sym\r
-LIBNAME=lib$(TARGET).a\r
-lib: $(LIBNAME)\r
-\r
-\r
-\r
-# Eye candy.\r
-# AVR Studio 3.x does not check make's exit code but relies on\r
-# the following magic strings to be generated by the compile job.\r
-begin:\r
-       @echo\r
-       @echo $(MSG_BEGIN)\r
-\r
-end:\r
-       @echo $(MSG_END)\r
-       @echo\r
-\r
-\r
-# Display size of file.\r
-HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex\r
-ELFSIZE = $(SIZE) $(MCU_FLAG) $(FORMAT_FLAG) $(TARGET).elf\r
-MCU_FLAG = $(shell $(SIZE) --help | grep -- --mcu > /dev/null && echo --mcu=$(MCU) )\r
-FORMAT_FLAG = $(shell $(SIZE) --help | grep -- --format=.*avr > /dev/null && echo --format=avr )\r
-\r
-sizebefore:\r
-       @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \\r
-       2>/dev/null; echo; fi\r
-\r
-sizeafter:\r
-       @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \\r
-       2>/dev/null; echo; fi\r
-\r
-checkhooks: build\r
-       @echo\r
-       @echo ------- Unhooked LUFA Events -------\r
-       @$(shell) (grep -s '^EVENT_.*LUFA/.*\\.o' $(TARGET).map | \\r
-                  cut -d' ' -f1 | cut -d'_' -f2- | grep ".*") || \\r
-                          echo "(None)"\r
-       @echo ------------------------------------\r
-\r
-checklibmode:\r
-       @echo\r
-       @echo ----------- Library Mode -----------\r
-       @$(shell) ($(CC) $(ALL_CFLAGS) -E -dM - < /dev/null \\r
-                 | grep 'USB_\(DEVICE\|HOST\)_ONLY' | cut -d' ' -f2 | grep ".*") \\r
-                 || echo "No specific mode (both device and host mode allowable)."\r
-       @echo ------------------------------------\r
-\r
-checkboard:\r
-       @echo\r
-       @echo ---------- Selected Board ----------\r
-       @echo Selected board model is $(BOARD).\r
-       @echo ------------------------------------\r
-       \r
-# Display compiler version information.\r
-gccversion : \r
-       @$(CC) --version\r
-\r
-\r
-\r
-# Program the device.  \r
-program: $(TARGET).hex $(TARGET).eep\r
-       $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)\r
-\r
-flip: $(TARGET).hex\r
-       batchisp -hardware usb -device $(MCU) -operation erase f\r
-       batchisp -hardware usb -device $(MCU) -operation loadbuffer $(TARGET).hex program\r
-       batchisp -hardware usb -device $(MCU) -operation start reset 0\r
-\r
-dfu: $(TARGET).hex\r
-       dfu-programmer $(MCU) erase\r
-       dfu-programmer $(MCU) flash --debug 1 $(TARGET).hex\r
-       dfu-programmer $(MCU) reset\r
-\r
-flip-ee: $(TARGET).hex $(TARGET).eep\r
-       copy $(TARGET).eep $(TARGET)eep.hex\r
-       batchisp -hardware usb -device $(MCU) -operation memory EEPROM erase\r
-       batchisp -hardware usb -device $(MCU) -operation memory EEPROM loadbuffer $(TARGET)eep.hex program\r
-       batchisp -hardware usb -device $(MCU) -operation start reset 0\r
-\r
-dfu-ee: $(TARGET).hex $(TARGET).eep\r
-       dfu-programmer $(MCU) flash-eeprom --debug 1 --suppress-bootloader-mem $(TARGET).eep\r
-       dfu-programmer $(MCU) reset\r
-\r
-\r
-# Generate avr-gdb config/init file which does the following:\r
-#     define the reset signal, load the target file, connect to target, and set \r
-#     a breakpoint at main().\r
-gdb-config: \r
-       @$(REMOVE) $(GDBINIT_FILE)\r
-       @echo define reset >> $(GDBINIT_FILE)\r
-       @echo SIGNAL SIGHUP >> $(GDBINIT_FILE)\r
-       @echo end >> $(GDBINIT_FILE)\r
-       @echo file $(TARGET).elf >> $(GDBINIT_FILE)\r
-       @echo target remote $(DEBUG_HOST):$(DEBUG_PORT)  >> $(GDBINIT_FILE)\r
-ifeq ($(DEBUG_BACKEND),simulavr)\r
-       @echo load  >> $(GDBINIT_FILE)\r
-endif\r
-       @echo break main >> $(GDBINIT_FILE)\r
-\r
-debug: gdb-config $(TARGET).elf\r
-ifeq ($(DEBUG_BACKEND), avarice)\r
-       @echo Starting AVaRICE - Press enter when "waiting to connect" message displays.\r
-       @$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \\r
-       $(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT)\r
-       @$(WINSHELL) /c pause\r
-\r
-else\r
-       @$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \\r
-       $(DEBUG_MFREQ) --port $(DEBUG_PORT)\r
-endif\r
-       @$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE)\r
-\r
-\r
-\r
-\r
-# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.\r
-COFFCONVERT = $(OBJCOPY) --debugging\r
-COFFCONVERT += --change-section-address .data-0x800000\r
-COFFCONVERT += --change-section-address .bss-0x800000\r
-COFFCONVERT += --change-section-address .noinit-0x800000\r
-COFFCONVERT += --change-section-address .eeprom-0x810000\r
-\r
-\r
-\r
-coff: $(TARGET).elf\r
-       @echo\r
-       @echo $(MSG_COFF) $(TARGET).cof\r
-       $(COFFCONVERT) -O coff-avr $< $(TARGET).cof\r
-\r
-\r
-extcoff: $(TARGET).elf\r
-       @echo\r
-       @echo $(MSG_EXTENDED_COFF) $(TARGET).cof\r
-       $(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof\r
-\r
-\r
-\r
-# Create final output files (.hex, .eep) from ELF output file.\r
-%.hex: %.elf\r
-       @echo\r
-       @echo $(MSG_FLASH) $@\r
-       $(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@\r
-\r
-%.eep: %.elf\r
-       @echo\r
-       @echo $(MSG_EEPROM) $@\r
-       -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \\r
-       --change-section-lma .eeprom=0 --no-change-warnings -O $(FORMAT) $< $@ || exit 0\r
-\r
-# Create extended listing file from ELF output file.\r
-%.lss: %.elf\r
-       @echo\r
-       @echo $(MSG_EXTENDED_LISTING) $@\r
-       $(OBJDUMP) -h -z -S $< > $@\r
-\r
-# Create a symbol table from ELF output file.\r
-%.sym: %.elf\r
-       @echo\r
-       @echo $(MSG_SYMBOL_TABLE) $@\r
-       $(NM) -n $< > $@\r
-\r
-\r
-\r
-# Create library from object files.\r
-.SECONDARY : $(TARGET).a\r
-.PRECIOUS : $(OBJ)\r
-%.a: $(OBJ)\r
-       @echo\r
-       @echo $(MSG_CREATING_LIBRARY) $@\r
-       $(AR) $@ $(OBJ)\r
-\r
-\r
-# Link: create ELF output file from object files.\r
-.SECONDARY : $(TARGET).elf\r
-.PRECIOUS : $(OBJ)\r
-%.elf: $(OBJ)\r
-       @echo\r
-       @echo $(MSG_LINKING) $@\r
-       $(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)\r
-\r
-\r
-# Compile: create object files from C source files.\r
-$(OBJDIR)/%.o : %.c\r
-       @echo\r
-       @echo $(MSG_COMPILING) $<\r
-       $(CC) -c $(ALL_CFLAGS) $< -o $@ \r
-\r
-\r
-# Compile: create object files from C++ source files.\r
-$(OBJDIR)/%.o : %.cpp\r
-       @echo\r
-       @echo $(MSG_COMPILING_CPP) $<\r
-       $(CC) -c $(ALL_CPPFLAGS) $< -o $@ \r
-\r
-\r
-# Compile: create assembler files from C source files.\r
-%.s : %.c\r
-       $(CC) -S $(ALL_CFLAGS) $< -o $@\r
-\r
-\r
-# Compile: create assembler files from C++ source files.\r
-%.s : %.cpp\r
-       $(CC) -S $(ALL_CPPFLAGS) $< -o $@\r
-\r
-\r
-# Assemble: create object files from assembler source files.\r
-$(OBJDIR)/%.o : %.S\r
-       @echo\r
-       @echo $(MSG_ASSEMBLING) $<\r
-       $(CC) -c $(ALL_ASFLAGS) $< -o $@\r
-\r
-\r
-# Create preprocessed source for use in sending a bug report.\r
-%.i : %.c\r
-       $(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ \r
-       \r
-\r
-# Target: clean project.\r
-clean: begin clean_list clean_binary end\r
-\r
-clean_binary:\r
-       $(REMOVE) $(TARGET).hex\r
-       \r
-clean_list:\r
-       @echo $(MSG_CLEANING)\r
-       $(REMOVE) $(TARGET).eep\r
-       $(REMOVE) $(TARGET)eep.hex\r
-       $(REMOVE) $(TARGET).cof\r
-       $(REMOVE) $(TARGET).elf\r
-       $(REMOVE) $(TARGET).map\r
-       $(REMOVE) $(TARGET).sym\r
-       $(REMOVE) $(TARGET).lss\r
-       $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.o)\r
-       $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.lst)\r
-       $(REMOVE) $(SRC:.c=.s)\r
-       $(REMOVE) $(SRC:.c=.d)\r
-       $(REMOVE) $(SRC:.c=.i)\r
-       $(REMOVEDIR) .dep\r
-\r
-\r
-doxygen:\r
-       @echo Generating Project Documentation...\r
-       @doxygen Doxygen.conf\r
-       @echo Documentation Generation Complete.\r
-\r
-clean_doxygen:\r
-       rm -rf Documentation\r
-\r
-# Create object files directory\r
-$(shell mkdir $(OBJDIR) 2>/dev/null)\r
-\r
-\r
-# Include the dependency files.\r
--include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)\r
-\r
-\r
-# Listing of phony targets.\r
-.PHONY : all checkhooks checklibmode checkboard   \\r
-begin finish end sizebefore sizeafter gccversion  \\r
-build elf hex eep lss sym coff extcoff clean      \\r
-clean_list clean_binary program debug gdb-config  \\r
-doxygen dfu flip flip-ee dfu-ee
\ No newline at end of file
diff --git a/Demos/Device/ClassDriver/AudioInput/AudioInput.aps b/Demos/Device/ClassDriver/AudioInput/AudioInput.aps
new file mode 100644 (file)
index 0000000..aed850a
--- /dev/null
@@ -0,0 +1 @@
+<AVRStudio><MANAGEMENT><ProjectName>AudioInput</ProjectName><Created>30-Sep-2008 14:03:00</Created><LastEdit>30-Sep-2008 14:03:28</LastEdit><ICON>241</ICON><ProjectType>0</ProjectType><Created>30-Sep-2008 14:03:00</Created><Version>4</Version><Build>4, 14, 0, 589</Build><ProjectTypeName>AVR GCC</ProjectTypeName></MANAGEMENT><CODE_CREATION><ObjectFile>AudioInput.elf</ObjectFile><EntryFile></EntryFile><SaveFolder>C:\Users\Dean\Documents\Electronics\Projects\WORK\MyUSBWORK\Demos\AudioInput\</SaveFolder></CODE_CREATION><DEBUG_TARGET><CURRENT_TARGET></CURRENT_TARGET><CURRENT_PART></CURRENT_PART><BREAKPOINTS></BREAKPOINTS><IO_EXPAND><HIDE>false</HIDE></IO_EXPAND><REGISTERNAMES><Register>R00</Register><Register>R01</Register><Register>R02</Register><Register>R03</Register><Register>R04</Register><Register>R05</Register><Register>R06</Register><Register>R07</Register><Register>R08</Register><Register>R09</Register><Register>R10</Register><Register>R11</Register><Register>R12</Register><Register>R13</Register><Register>R14</Register><Register>R15</Register><Register>R16</Register><Register>R17</Register><Register>R18</Register><Register>R19</Register><Register>R20</Register><Register>R21</Register><Register>R22</Register><Register>R23</Register><Register>R24</Register><Register>R25</Register><Register>R26</Register><Register>R27</Register><Register>R28</Register><Register>R29</Register><Register>R30</Register><Register>R31</Register></REGISTERNAMES><COM></COM><COMType>0</COMType><WATCHNUM>0</WATCHNUM><WATCHNAMES><Pane0></Pane0><Pane1></Pane1><Pane2></Pane2><Pane3></Pane3></WATCHNAMES><BreakOnTrcaeFull>0</BreakOnTrcaeFull></DEBUG_TARGET><Debugger><Triggers></Triggers></Debugger><AVRGCCPLUGIN><FILES><SOURCEFILE>AudioInput.c</SOURCEFILE><SOURCEFILE>Descriptors.c</SOURCEFILE><HEADERFILE>AudioInput.h</HEADERFILE><HEADERFILE>Descriptors.h</HEADERFILE><OTHERFILE>makefile</OTHERFILE></FILES><CONFIGS><CONFIG><NAME>default</NAME><USESEXTERNALMAKEFILE>YES</USESEXTERNALMAKEFILE><EXTERNALMAKEFILE>makefile</EXTERNALMAKEFILE><PART>atmega128</PART><HEX>1</HEX><LIST>1</LIST><MAP>1</MAP><OUTPUTFILENAME>AudioInput.elf</OUTPUTFILENAME><OUTPUTDIR>default\</OUTPUTDIR><ISDIRTY>1</ISDIRTY><OPTIONS/><INCDIRS/><LIBDIRS/><LIBS/><LINKOBJECTS/><OPTIONSFORALL>-Wall -gdwarf-2 -std=gnu99 -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums</OPTIONSFORALL><LINKEROPTIONS></LINKEROPTIONS><SEGMENTS/></CONFIG></CONFIGS><LASTCONFIG>default</LASTCONFIG><USES_WINAVR>1</USES_WINAVR><GCC_LOC>C:\WinAVR-20080512\bin\avr-gcc.exe</GCC_LOC><MAKE_LOC>C:\WinAVR-20080512\utils\bin\make.exe</MAKE_LOC></AVRGCCPLUGIN><ProjectFiles><Files><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\MyUSBWORK\Demos\AudioInput\AudioInput.h</Name><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\MyUSBWORK\Demos\AudioInput\Descriptors.h</Name><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\MyUSBWORK\Demos\AudioInput\AudioInput.c</Name><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\MyUSBWORK\Demos\AudioInput\Descriptors.c</Name></Files></ProjectFiles><IOView><usergroups/><sort sorted="0" column="0" ordername="0" orderaddress="0" ordergroup="0"/></IOView><Files></Files><Events><Bookmarks></Bookmarks></Events><Trace><Filters></Filters></Trace></AVRStudio>\r
diff --git a/Demos/Device/ClassDriver/AudioInput/AudioInput.c b/Demos/Device/ClassDriver/AudioInput/AudioInput.c
new file mode 100644 (file)
index 0000000..93ffe0b
--- /dev/null
@@ -0,0 +1,144 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  Main source file for the AudioInput demo. This file contains the main tasks of\r
+ *  the demo and is responsible for the initial application hardware configuration.\r
+ */\r
+\r
+#include "AudioInput.h"\r
+\r
+/** LUFA Audio Class driver interface configuration and state information. This structure is\r
+ *  passed to all Audio Class driver functions, so that multiple instances of the same class\r
+ *  within a device can be differentiated from one another.\r
+ */\r
+USB_ClassInfo_Audio_t Microphone_Audio_Interface =\r
+       {\r
+               .StreamingInterfaceNumber = 1,\r
+\r
+               .DataINEndpointNumber     = AUDIO_STREAM_EPNUM,\r
+               .DataINEndpointSize       = AUDIO_STREAM_EPSIZE,\r
+       };\r
+\r
+/** Main program entry point. This routine contains the overall program flow, including initial\r
+ *  setup of all components and the main program loop.\r
+ */\r
+int main(void)\r
+{\r
+       SetupHardware();\r
+\r
+       LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);\r
+       \r
+       for (;;)\r
+       {\r
+               if (Microphone_Audio_Interface.InterfaceEnabled)\r
+                 ProcessNextSample();\r
+\r
+               USB_Audio_USBTask(&Microphone_Audio_Interface);\r
+               USB_USBTask();\r
+       }\r
+}\r
+\r
+/** Configures the board hardware and chip peripherals for the demo's functionality. */\r
+void SetupHardware(void)\r
+{\r
+       /* Disable watchdog if enabled by bootloader/fuses */\r
+       MCUSR &= ~(1 << WDRF);\r
+       wdt_disable();\r
+\r
+       /* Disable clock division */\r
+       clock_prescale_set(clock_div_1);\r
+       \r
+       /* Hardware Initialization */\r
+       LEDs_Init();\r
+       USB_Init();\r
+       ADC_Init(ADC_FREE_RUNNING | ADC_PRESCALE_32);\r
+       ADC_SetupChannel(MIC_IN_ADC_CHANNEL);\r
+       \r
+       /* Start the ADC conversion in free running mode */\r
+       ADC_StartReading(ADC_REFERENCE_AVCC | ADC_RIGHT_ADJUSTED | MIC_IN_ADC_CHANNEL);\r
+}\r
+\r
+/** Processes the next audio sample by reading the last ADC conversion and writing it to the audio\r
+ *  interface, each time the sample reload timer period elapses to give a constant sample rate.\r
+ */\r
+void ProcessNextSample(void)\r
+{\r
+       if ((TIFR0 & (1 << OCF0A)) && USB_Audio_IsReadyForNextSample(&Microphone_Audio_Interface))\r
+       {\r
+               TIFR0 |= (1 << OCF0A);\r
+\r
+               /* Audio sample is ADC value scaled to fit the entire range */\r
+               int16_t AudioSample = ((SAMPLE_MAX_RANGE / ADC_MAX_RANGE) * ADC_GetResult());\r
+               \r
+#if defined(MICROPHONE_BIASED_TO_HALF_RAIL)\r
+               /* Microphone is biased to half rail voltage, subtract the bias from the sample value */\r
+               AudioSample -= (SAMPLE_MAX_RANGE / 2));\r
+#endif\r
+\r
+               USB_Audio_WriteSample16(AudioSample);\r
+       }\r
+}\r
+\r
+/** Event handler for the library USB Connection event. */\r
+void EVENT_USB_Connect(void)\r
+{\r
+       LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING);\r
+\r
+       /* Sample reload timer initialization */\r
+       OCR0A   = (F_CPU / AUDIO_SAMPLE_FREQUENCY) - 1;\r
+       TCCR0A  = (1 << WGM01);  // CTC mode\r
+       TCCR0B  = (1 << CS00);   // Fcpu speed\r
+}\r
+\r
+/** Event handler for the library USB Disconnection event. */\r
+void EVENT_USB_Disconnect(void)\r
+{\r
+       /* Stop the sample reload timer */\r
+       TCCR0B = 0;\r
+\r
+       LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);\r
+}\r
+\r
+/** Event handler for the library USB Configuration Changed event. */\r
+void EVENT_USB_ConfigurationChanged(void)\r
+{\r
+       LEDs_SetAllLEDs(LEDMASK_USB_READY);\r
+       \r
+       if (!(USB_Audio_ConfigureEndpoints(&Microphone_Audio_Interface)))\r
+         LEDs_SetAllLEDs(LEDMASK_USB_ERROR);\r
+}\r
+\r
+/** Event handler for the library USB Unhandled Control Packet event. */\r
+void EVENT_USB_UnhandledControlPacket(void)\r
+{\r
+       USB_Audio_ProcessControlPacket(&Microphone_Audio_Interface);\r
+}\r
diff --git a/Demos/Device/ClassDriver/AudioInput/AudioInput.h b/Demos/Device/ClassDriver/AudioInput/AudioInput.h
new file mode 100644 (file)
index 0000000..e4dd7fe
--- /dev/null
@@ -0,0 +1,85 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  Header file for AudioInput.c.\r
+ */\r
\r
+#ifndef _AUDIO_INPUT_H_\r
+#define _AUDIO_INPUT_H_\r
+\r
+       /* Includes: */\r
+               #include <avr/io.h>\r
+               #include <avr/wdt.h>\r
+               #include <avr/power.h>\r
+\r
+               #include "Descriptors.h"\r
+                               \r
+               #include <LUFA/Version.h>\r
+               #include <LUFA/Drivers/Board/LEDs.h>\r
+               #include <LUFA/Drivers/Board/Joystick.h>\r
+               #include <LUFA/Drivers/Peripheral/ADC.h>\r
+               #include <LUFA/Drivers/USB/USB.h>\r
+               #include <LUFA/Drivers/USB/Class/Device/Audio.h>\r
+               \r
+       /* Macros: */\r
+               /** ADC channel number for the microphone input. */\r
+               #define MIC_IN_ADC_CHANNEL        2\r
+               \r
+               /** Maximum ADC sample value for the microphone input. */\r
+               #define SAMPLE_MAX_RANGE          0xFFFF\r
+\r
+               /** Maximum ADC range for the microphone input. */\r
+               #define ADC_MAX_RANGE             0x3FF\r
+\r
+       /* Macros: */\r
+               /** LED mask for the library LED driver, to indicate that the USB interface is not ready. */\r
+               #define LEDMASK_USB_NOTREADY      LEDS_LED1\r
+\r
+               /** LED mask for the library LED driver, to indicate that the USB interface is enumerating. */\r
+               #define LEDMASK_USB_ENUMERATING  (LEDS_LED2 | LEDS_LED3)\r
+\r
+               /** LED mask for the library LED driver, to indicate that the USB interface is ready. */\r
+               #define LEDMASK_USB_READY        (LEDS_LED2 | LEDS_LED4)\r
+\r
+               /** LED mask for the library LED driver, to indicate that an error has occurred in the USB interface. */\r
+               #define LEDMASK_USB_ERROR        (LEDS_LED1 | LEDS_LED3)\r
+               \r
+       /* Function Prototypes: */\r
+               void SetupHardware(void);\r
+               void ProcessNextSample(void);\r
+               \r
+               void EVENT_USB_Connect(void);\r
+               void EVENT_USB_Disconnect(void);\r
+               void EVENT_USB_ConfigurationChanged(void);\r
+               void EVENT_USB_UnhandledControlPacket(void);\r
+\r
+#endif\r
diff --git a/Demos/Device/ClassDriver/AudioInput/AudioInput.txt b/Demos/Device/ClassDriver/AudioInput/AudioInput.txt
new file mode 100644 (file)
index 0000000..cf71259
--- /dev/null
@@ -0,0 +1,75 @@
+/** \file\r
+ *\r
+ *  This file contains special DoxyGen information for the generation of the main page and other special\r
+ *  documentation pages. It is not a project source file.\r
+ */\r
\r
+/** \mainpage Audio Input Device Demo\r
+ *\r
+ *  \section SSec_Info USB Information:\r
+ *\r
+ *  The following table gives a rundown of the USB utilization of this demo.\r
+ *\r
+ *  <table>\r
+ *   <tr>\r
+ *    <td><b>USB Mode:</b></td>\r
+ *    <td>Device</td>\r
+ *   </tr>\r
+ *   <tr>\r
+ *    <td><b>USB Class:</b></td>\r
+ *    <td>Audio Class</td>\r
+ *   </tr>\r
+ *   <tr> \r
+ *    <td><b>USB Subclass:</b></td>\r
+ *    <td>Standard Audio Device</td>\r
+ *   </tr>\r
+ *   <tr>\r
+ *    <td><b>Relevant Standards:</b></td>\r
+ *    <td>USBIF Audio Class Specification</td>\r
+ *    <td>USBIF Audio Class Terminal Types Specification</td>\r
+ *    <td>USBIF Audio Data Formats Specification</td>\r
+ *   </tr>\r
+ *   <tr>\r
+ *    <td><b>Usable Speeds:</b></td>\r
+ *    <td>Full Speed Mode</td>\r
+ *   </tr>\r
+ *  </table>\r
+ *\r
+ *  \section SSec_Description Project Description: \r
+ *\r
+ *  Audio demonstration application. This gives a simple reference\r
+ *  application for implementing a USB Audio Input device using the\r
+ *  basic USB Audio drivers in all modern OSes (i.e. no special drivers\r
+ *  required).\r
+ *  \r
+ *  On start-up the system will automatically enumerate and function\r
+ *  as a USB microphone. Incoming audio from the ADC channel 1 will\r
+ *  be sampled and sent to the host computer.\r
+ *  \r
+ *  To use, connect a microphone to the ADC channel 2.\r
+ *  \r
+ *  Under Windows, if a driver request dialogue pops up, select the option\r
+ *  to automatically install the appropriate drivers.\r
+ *\r
+ *  \section SSec_Options Project Options\r
+ *\r
+ *  The following defines can be found in this demo, which can control the demo behaviour when defined, or changed in value.\r
+ *\r
+ *  <table>\r
+ *   <tr>\r
+ *    <td><b>Define Name:</b></td>\r
+ *    <td><b>Location:</b></td>\r
+ *    <td><b>Description:</b></td>\r
+ *   </tr>\r
+ *   <tr>\r
+ *    <td>MICROPHONE_BIASED_TO_HALF_RAIL</td>\r
+ *    <td>Makefile CDEFS</td>\r
+ *    <td>When defined, this alters the demo so that the half VCC bias of the microphone input is subtracted.</td>\r
+ *   </tr>\r
+ *   <tr>\r
+ *    <td>AUDIO_SAMPLE_FREQUENCY</td>\r
+ *    <td>Descriptors.h</td>\r
+ *    <td>Gives the audio sample rate per channel for the audio stream, in Hz.</td>\r
+ *   </tr>\r
+ *  </table>\r
+ */\r
diff --git a/Demos/Device/ClassDriver/AudioInput/Descriptors.c b/Demos/Device/ClassDriver/AudioInput/Descriptors.c
new file mode 100644 (file)
index 0000000..6697cfe
--- /dev/null
@@ -0,0 +1,314 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  USB Device Descriptors, for library use when in USB device mode. Descriptors are special \r
+ *  computer-readable structures which the host requests upon device enumeration, to determine\r
+ *  the device's capabilities and functions.  \r
+ */\r
\r
+#include "Descriptors.h"\r
+\r
+/** Device descriptor structure. This descriptor, located in FLASH memory, describes the overall\r
+ *  device characteristics, including the supported USB version, control endpoint size and the\r
+ *  number of device configurations. The descriptor is read out by the USB host when the enumeration\r
+ *  process begins.\r
+ */\r
+USB_Descriptor_Device_t PROGMEM DeviceDescriptor =\r
+{\r
+       .Header                 = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device},\r
+               \r
+       .USBSpecification       = VERSION_BCD(02.00),\r
+       .Class                  = 0x00,\r
+       .SubClass               = 0x00,\r
+       .Protocol               = 0x00,\r
+                               \r
+       .Endpoint0Size          = FIXED_CONTROL_ENDPOINT_SIZE,\r
+               \r
+       .VendorID               = 0x03EB,\r
+       .ProductID              = 0x2047,\r
+       .ReleaseNumber          = 0x0000,\r
+               \r
+       .ManufacturerStrIndex   = 0x01,\r
+       .ProductStrIndex        = 0x02,\r
+       .SerialNumStrIndex      = NO_DESCRIPTOR,\r
+               \r
+       .NumberOfConfigurations = 1\r
+};\r
+\r
+/** Configuration descriptor structure. This descriptor, located in FLASH memory, describes the usage\r
+ *  of the device in one of its supported configurations, including information about any device interfaces\r
+ *  and endpoints. The descriptor is read out by the USB host during the enumeration process when selecting\r
+ *  a configuration so that the host may correctly communicate with the USB device.\r
+ */\r
+USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =\r
+{\r
+       .Config = \r
+               {\r
+                       .Header                   = {.Size = sizeof(USB_Descriptor_Configuration_Header_t), .Type = DTYPE_Configuration},\r
+\r
+                       .TotalConfigurationSize   = sizeof(USB_Descriptor_Configuration_t),\r
+                       .TotalInterfaces          = 2,\r
+\r
+                       .ConfigurationNumber      = 1,\r
+                       .ConfigurationStrIndex    = NO_DESCRIPTOR,\r
+                               \r
+                       .ConfigAttributes         = (USB_CONFIG_ATTR_BUSPOWERED | USB_CONFIG_ATTR_SELFPOWERED),\r
+                       \r
+                       .MaxPowerConsumption      = USB_CONFIG_POWER_MA(100)\r
+               },\r
+               \r
+       .AudioControlInterface = \r
+               {\r
+                       .Header                   = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},\r
+\r
+                       .InterfaceNumber          = 0,\r
+                       .AlternateSetting         = 0,\r
+                       \r
+                       .TotalEndpoints           = 0,\r
+                               \r
+                       .Class                    = 0x01,\r
+                       .SubClass                 = 0x01,\r
+                       .Protocol                 = 0x00,\r
+                               \r
+                       .InterfaceStrIndex        = NO_DESCRIPTOR                       \r
+               },\r
+       \r
+       .AudioControlInterface_SPC = \r
+               {\r
+                       .Header                   = {.Size = sizeof(USB_AudioInterface_AC_t), .Type = DTYPE_AudioInterface},\r
+                       .Subtype                  = DSUBTYPE_Header,\r
+                       \r
+                       .ACSpecification          = VERSION_BCD(01.00),\r
+                       .TotalLength              = (sizeof(USB_AudioInterface_AC_t) +\r
+                                                    sizeof(USB_AudioInputTerminal_t) +\r
+                                                                            sizeof(USB_AudioOutputTerminal_t)),\r
+                       \r
+                       .InCollection             = 1,\r
+                       .InterfaceNumbers         = {1},                        \r
+               },\r
+\r
+       .InputTerminal = \r
+               {\r
+                       .Header                   = {.Size = sizeof(USB_AudioInputTerminal_t), .Type = DTYPE_AudioInterface},\r
+                       .Subtype                  = DSUBTYPE_InputTerminal,\r
+               \r
+                       .TerminalID               = 0x01,\r
+                       .TerminalType             = TERMINAL_IN_MIC,\r
+                       .AssociatedOutputTerminal = 0x00,\r
+                       \r
+                       .TotalChannels            = 1,\r
+                       .ChannelConfig            = 0,\r
+                       \r
+                       .ChannelStrIndex          = NO_DESCRIPTOR,\r
+                       .TerminalStrIndex         = NO_DESCRIPTOR\r
+               },\r
+\r
+       .OutputTerminal = \r
+               {\r
+                       .Header                   = {.Size = sizeof(USB_AudioOutputTerminal_t), .Type = DTYPE_AudioInterface},\r
+                       .Subtype                  = DSUBTYPE_OutputTerminal,\r
+               \r
+                       .TerminalID               = 0x02,\r
+                       .TerminalType             = TERMINAL_STREAMING,\r
+                       .AssociatedInputTerminal  = 0x00,\r
+                       \r
+                       .SourceID                 = 0x01,\r
+                       \r
+                       .TerminalStrIndex         = NO_DESCRIPTOR                       \r
+               },\r
+\r
+       .AudioStreamInterface_Alt0 = \r
+               {\r
+                       .Header                   = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},\r
+\r
+                       .InterfaceNumber          = 1,\r
+                       .AlternateSetting         = 0,\r
+                       \r
+                       .TotalEndpoints           = 0,\r
+                               \r
+                       .Class                    = 0x01,\r
+                       .SubClass                 = 0x02,\r
+                       .Protocol                 = 0x00,\r
+                               \r
+                       .InterfaceStrIndex        = NO_DESCRIPTOR\r
+               },\r
+\r
+       .AudioStreamInterface_Alt1 = \r
+               {\r
+                       .Header                   = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},\r
+\r
+                       .InterfaceNumber          = 1,\r
+                       .AlternateSetting         = 1,\r
+                       \r
+                       .TotalEndpoints           = 1,\r
+                               \r
+                       .Class                    = 0x01,\r
+                       .SubClass                 = 0x02,\r
+                       .Protocol                 = 0x00,\r
+                               \r
+                       .InterfaceStrIndex        = NO_DESCRIPTOR\r
+               },\r
+               \r
+       .AudioStreamInterface_SPC = \r
+               {\r
+                       .Header                   = {.Size = sizeof(USB_AudioInterface_AS_t), .Type = DTYPE_AudioInterface},\r
+                       .Subtype                  = DSUBTYPE_General,\r
+                       \r
+                       .TerminalLink             = 0x02,\r
+                       \r
+                       .FrameDelay               = 1,\r
+                       .AudioFormat              = 0x0001\r
+               },\r
+               \r
+       .AudioFormat = \r
+               {\r
+                       .Header                   = {.Size = sizeof(USB_AudioFormat_t), .Type = DTYPE_AudioInterface},\r
+                       .Subtype                  = DSUBTYPE_Format,\r
+\r
+                       .FormatType               = 0x01,\r
+                       .Channels                 = 0x01,\r
+                       \r
+                       .SubFrameSize             = 0x02,\r
+                       .BitResolution            = 16,\r
+                       .SampleFrequencyType      = (sizeof(ConfigurationDescriptor.AudioFormat.SampleFrequencies) / sizeof(AudioSampleFreq_t)),\r
+               \r
+                       .SampleFrequencies        = {AUDIO_SAMPLE_FREQ(AUDIO_SAMPLE_FREQUENCY)}\r
+               },\r
+       \r
+       .AudioEndpoint = \r
+               {\r
+                       .Endpoint = \r
+                               {\r
+                                       .Header              = {.Size = sizeof(USB_AudioStreamEndpoint_Std_t), .Type = DTYPE_Endpoint},\r
+\r
+                                       .EndpointAddress     = (ENDPOINT_DESCRIPTOR_DIR_IN | AUDIO_STREAM_EPNUM),\r
+                                       .Attributes          = (EP_TYPE_ISOCHRONOUS | ENDPOINT_ATTR_SYNC | ENDPOINT_USAGE_DATA),\r
+                                       .EndpointSize        = AUDIO_STREAM_EPSIZE,\r
+                                       .PollingIntervalMS   = 1\r
+                               },\r
+                       \r
+                       .Refresh                  = 0,\r
+                       .SyncEndpointNumber       = 0\r
+               },\r
+               \r
+       .AudioEndpoint_SPC = \r
+               {\r
+                       .Header                   = {.Size = sizeof(USB_AudioStreamEndpoint_Spc_t), .Type = DTYPE_AudioEndpoint},\r
+                       .Subtype                  = DSUBTYPE_General,\r
+                       \r
+                       .Attributes               = 0x00,\r
+                       \r
+                       .LockDelayUnits           = 0x00,\r
+                       .LockDelay                = 0x0000\r
+               }\r
+};\r
+\r
+/** Language descriptor structure. This descriptor, located in FLASH memory, is returned when the host requests\r
+ *  the string descriptor with index 0 (the first index). It is actually an array of 16-bit integers, which indicate\r
+ *  via the language ID table available at USB.org what languages the device supports for its string descriptors.\r
+ */\r
+USB_Descriptor_String_t PROGMEM LanguageString =\r
+{\r
+       .Header                 = {.Size = USB_STRING_LEN(1), .Type = DTYPE_String},\r
+               \r
+       .UnicodeString          = {LANGUAGE_ID_ENG}\r
+};\r
+\r
+/** Manufacturer descriptor string. This is a Unicode string containing the manufacturer's details in human readable\r
+ *  form, and is read out upon request by the host when the appropriate string ID is requested, listed in the Device\r
+ *  Descriptor.\r
+ */\r
+USB_Descriptor_String_t PROGMEM ManufacturerString =\r
+{\r
+       .Header                 = {.Size = USB_STRING_LEN(11), .Type = DTYPE_String},\r
+               \r
+       .UnicodeString          = L"Dean Camera"\r
+};\r
+\r
+/** Product descriptor string. This is a Unicode string containing the product's details in human readable form,\r
+ *  and is read out upon request by the host when the appropriate string ID is requested, listed in the Device\r
+ *  Descriptor.\r
+ */\r
+USB_Descriptor_String_t PROGMEM ProductString =\r
+{\r
+       .Header                 = {.Size = USB_STRING_LEN(18), .Type = DTYPE_String},\r
+               \r
+       .UnicodeString          = L"LUFA Audio In Demo"\r
+};\r
+\r
+/** This function is called by the library when in device mode, and must be overridden (see library "USB Descriptors"\r
+ *  documentation) by the application code so that the address and size of a requested descriptor can be given\r
+ *  to the USB library. When the device receives a Get Descriptor request on the control endpoint, this function\r
+ *  is called so that the descriptor details can be passed back and the appropriate descriptor sent back to the\r
+ *  USB host.\r
+ */\r
+uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
+{\r
+       const uint8_t  DescriptorType   = (wValue >> 8);\r
+       const uint8_t  DescriptorNumber = (wValue & 0xFF);\r
+\r
+       void*    Address = NULL;\r
+       uint16_t Size    = NO_DESCRIPTOR;\r
+\r
+       switch (DescriptorType)\r
+       {\r
+               case DTYPE_Device:\r
+                       Address = (void*)&DeviceDescriptor;\r
+                       Size    = sizeof(USB_Descriptor_Device_t);\r
+                       break;\r
+               case DTYPE_Configuration: \r
+                       Address = (void*)&ConfigurationDescriptor;\r
+                       Size    = sizeof(USB_Descriptor_Configuration_t);\r
+                       break;\r
+               case DTYPE_String: \r
+                       switch (DescriptorNumber)\r
+                       {\r
+                               case 0x00: \r
+                                       Address = (void*)&LanguageString;\r
+                                       Size    = pgm_read_byte(&LanguageString.Header.Size);\r
+                                       break;\r
+                               case 0x01: \r
+                                       Address = (void*)&ManufacturerString;\r
+                                       Size    = pgm_read_byte(&ManufacturerString.Header.Size);\r
+                                       break;\r
+                               case 0x02: \r
+                                       Address = (void*)&ProductString;\r
+                                       Size    = pgm_read_byte(&ProductString.Header.Size);\r
+                                       break;\r
+                       }\r
+                       \r
+                       break;\r
+       }\r
+       \r
+       *DescriptorAddress = Address;\r
+       return Size;\r
+}\r
diff --git a/Demos/Device/ClassDriver/AudioInput/Descriptors.h b/Demos/Device/ClassDriver/AudioInput/Descriptors.h
new file mode 100644 (file)
index 0000000..0da8952
--- /dev/null
@@ -0,0 +1,86 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  Header file for Descriptors.c.\r
+ */\r
\r
+#ifndef _DESCRIPTORS_H_\r
+#define _DESCRIPTORS_H_\r
+\r
+       /* Includes: */\r
+               #include <LUFA/Drivers/USB/USB.h>\r
+               #include <LUFA/Drivers/USB/Class/Device/Audio.h>\r
+\r
+               #include <avr/pgmspace.h>\r
+\r
+       /* Macros: */\r
+               #if defined(USB_FULL_CONTROLLER) || defined(__DOXYGEN__)\r
+                       /** Endpoint number of the Audio isochronous streaming data endpoint. */\r
+                       #define AUDIO_STREAM_EPNUM       1\r
+               #else\r
+                       #define AUDIO_STREAM_EPNUM       3              \r
+               #endif\r
+               \r
+               /** Endpoint size in bytes of the Audio isochronous streaming data endpoint. The Windows audio stack requires\r
+                *  at least 192 bytes for correct output, thus the smaller 128 byte maximum endpoint size on some of the smaller\r
+                *  USB AVR models will result in unavoidable distorted output.\r
+                */\r
+               #define AUDIO_STREAM_EPSIZE          ENDPOINT_MAX_SIZE(AUDIO_STREAM_EPNUM)\r
+               \r
+               /** Sample frequency of the data being transmitted through the streaming endpoint. */\r
+               #define AUDIO_SAMPLE_FREQUENCY       48000\r
+               \r
+       /* Type Defines: */\r
+               /** Type define for the device configuration descriptor structure. This must be defined in the\r
+                *  application code, as the configuration descriptor contains several sub-descriptors which\r
+                *  vary between devices, and which describe the device's usage to the host.\r
+                */\r
+               typedef struct\r
+               {\r
+                       USB_Descriptor_Configuration_Header_t Config;\r
+                       USB_Descriptor_Interface_t            AudioControlInterface;\r
+                       USB_AudioInterface_AC_t               AudioControlInterface_SPC;\r
+                       USB_AudioInputTerminal_t              InputTerminal;\r
+                       USB_AudioOutputTerminal_t             OutputTerminal;\r
+                       USB_Descriptor_Interface_t            AudioStreamInterface_Alt0;\r
+                       USB_Descriptor_Interface_t            AudioStreamInterface_Alt1;\r
+                       USB_AudioInterface_AS_t               AudioStreamInterface_SPC;\r
+                       USB_AudioFormat_t                     AudioFormat;\r
+                       USB_AudioStreamEndpoint_Std_t         AudioEndpoint;\r
+                       USB_AudioStreamEndpoint_Spc_t         AudioEndpoint_SPC;\r
+               } USB_Descriptor_Configuration_t;\r
+               \r
+       /* Function Prototypes: */\r
+               uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
+                                                   ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);\r
+\r
+#endif\r
diff --git a/Demos/Device/ClassDriver/AudioInput/Doxygen.conf b/Demos/Device/ClassDriver/AudioInput/Doxygen.conf
new file mode 100644 (file)
index 0000000..f84efb7
--- /dev/null
@@ -0,0 +1,1485 @@
+# Doxyfile 1.5.7.1\r
+\r
+# This file describes the settings to be used by the documentation system\r
+# doxygen (www.doxygen.org) for a project\r
+#\r
+# All text after a hash (#) is considered a comment and will be ignored\r
+# The format is:\r
+#       TAG = value [value, ...]\r
+# For lists items can also be appended using:\r
+#       TAG += value [value, ...]\r
+# Values that contain spaces should be placed between quotes (" ")\r
+\r
+#---------------------------------------------------------------------------\r
+# Project related configuration options\r
+#---------------------------------------------------------------------------\r
+\r
+# This tag specifies the encoding used for all characters in the config file \r
+# that follow. The default is UTF-8 which is also the encoding used for all \r
+# text before the first occurrence of this tag. Doxygen uses libiconv (or the \r
+# iconv built into libc) for the transcoding. See \r
+# http://www.gnu.org/software/libiconv for the list of possible encodings.\r
+\r
+DOXYFILE_ENCODING      = UTF-8\r
+\r
+# The PROJECT_NAME tag is a single word (or a sequence of words surrounded \r
+# by quotes) that should identify the project.\r
+\r
+PROJECT_NAME           = "LUFA Library - Audio Input Device Demo"\r
+\r
+# The PROJECT_NUMBER tag can be used to enter a project or revision number. \r
+# This could be handy for archiving the generated documentation or \r
+# if some version control system is used.\r
+\r
+PROJECT_NUMBER         = 0.0.0\r
+\r
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) \r
+# base path where the generated documentation will be put. \r
+# If a relative path is entered, it will be relative to the location \r
+# where doxygen was started. If left blank the current directory will be used.\r
+\r
+OUTPUT_DIRECTORY       = ./Documentation/\r
+\r
+# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create \r
+# 4096 sub-directories (in 2 levels) under the output directory of each output \r
+# format and will distribute the generated files over these directories. \r
+# Enabling this option can be useful when feeding doxygen a huge amount of \r
+# source files, where putting all generated files in the same directory would \r
+# otherwise cause performance problems for the file system.\r
+\r
+CREATE_SUBDIRS         = YES\r
+\r
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all \r
+# documentation generated by doxygen is written. Doxygen will use this \r
+# information to generate all constant output in the proper language. \r
+# The default language is English, other supported languages are: \r
+# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, \r
+# Croatian, Czech, Danish, Dutch, Farsi, Finnish, French, German, Greek, \r
+# Hungarian, Italian, Japanese, Japanese-en (Japanese with English messages), \r
+# Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, Polish, \r
+# Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, Slovene, \r
+# Spanish, Swedish, and Ukrainian.\r
+\r
+OUTPUT_LANGUAGE        = English\r
+\r
+# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will \r
+# include brief member descriptions after the members that are listed in \r
+# the file and class documentation (similar to JavaDoc). \r
+# Set to NO to disable this.\r
+\r
+BRIEF_MEMBER_DESC      = YES\r
+\r
+# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend \r
+# the brief description of a member or function before the detailed description. \r
+# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the \r
+# brief descriptions will be completely suppressed.\r
+\r
+REPEAT_BRIEF           = YES\r
+\r
+# This tag implements a quasi-intelligent brief description abbreviator \r
+# that is used to form the text in various listings. Each string \r
+# in this list, if found as the leading text of the brief description, will be \r
+# stripped from the text and the result after processing the whole list, is \r
+# used as the annotated text. Otherwise, the brief description is used as-is. \r
+# If left blank, the following values are used ("$name" is automatically \r
+# replaced with the name of the entity): "The $name class" "The $name widget" \r
+# "The $name file" "is" "provides" "specifies" "contains" \r
+# "represents" "a" "an" "the"\r
+\r
+ABBREVIATE_BRIEF       = "The $name class" \\r
+                         "The $name widget" \\r
+                         "The $name file" \\r
+                         is \\r
+                         provides \\r
+                         specifies \\r
+                         contains \\r
+                         represents \\r
+                         a \\r
+                         an \\r
+                         the\r
+\r
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then \r
+# Doxygen will generate a detailed section even if there is only a brief \r
+# description.\r
+\r
+ALWAYS_DETAILED_SEC    = NO\r
+\r
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all \r
+# inherited members of a class in the documentation of that class as if those \r
+# members were ordinary class members. Constructors, destructors and assignment \r
+# operators of the base classes will not be shown.\r
+\r
+INLINE_INHERITED_MEMB  = NO\r
+\r
+# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full \r
+# path before files name in the file list and in the header files. If set \r
+# to NO the shortest path that makes the file name unique will be used.\r
+\r
+FULL_PATH_NAMES        = YES\r
+\r
+# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag \r
+# can be used to strip a user-defined part of the path. Stripping is \r
+# only done if one of the specified strings matches the left-hand part of \r
+# the path. The tag can be used to show relative paths in the file list. \r
+# If left blank the directory from which doxygen is run is used as the \r
+# path to strip.\r
+\r
+STRIP_FROM_PATH        = \r
+\r
+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of \r
+# the path mentioned in the documentation of a class, which tells \r
+# the reader which header file to include in order to use a class. \r
+# If left blank only the name of the header file containing the class \r
+# definition is used. Otherwise one should specify the include paths that \r
+# are normally passed to the compiler using the -I flag.\r
+\r
+STRIP_FROM_INC_PATH    = \r
+\r
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter \r
+# (but less readable) file names. This can be useful is your file systems \r
+# doesn't support long names like on DOS, Mac, or CD-ROM.\r
+\r
+SHORT_NAMES            = YES\r
+\r
+# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen \r
+# will interpret the first line (until the first dot) of a JavaDoc-style \r
+# comment as the brief description. If set to NO, the JavaDoc \r
+# comments will behave just like regular Qt-style comments \r
+# (thus requiring an explicit @brief command for a brief description.)\r
+\r
+JAVADOC_AUTOBRIEF      = NO\r
+\r
+# If the QT_AUTOBRIEF tag is set to YES then Doxygen will \r
+# interpret the first line (until the first dot) of a Qt-style \r
+# comment as the brief description. If set to NO, the comments \r
+# will behave just like regular Qt-style comments (thus requiring \r
+# an explicit \brief command for a brief description.)\r
+\r
+QT_AUTOBRIEF           = NO\r
+\r
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen \r
+# treat a multi-line C++ special comment block (i.e. a block of //! or /// \r
+# comments) as a brief description. This used to be the default behaviour. \r
+# The new default is to treat a multi-line C++ comment block as a detailed \r
+# description. Set this tag to YES if you prefer the old behaviour instead.\r
+\r
+MULTILINE_CPP_IS_BRIEF = NO\r
+\r
+# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented \r
+# member inherits the documentation from any documented member that it \r
+# re-implements.\r
+\r
+INHERIT_DOCS           = YES\r
+\r
+# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce \r
+# a new page for each member. If set to NO, the documentation of a member will \r
+# be part of the file/class/namespace that contains it.\r
+\r
+SEPARATE_MEMBER_PAGES  = NO\r
+\r
+# The TAB_SIZE tag can be used to set the number of spaces in a tab. \r
+# Doxygen uses this value to replace tabs by spaces in code fragments.\r
+\r
+TAB_SIZE               = 4\r
+\r
+# This tag can be used to specify a number of aliases that acts \r
+# as commands in the documentation. An alias has the form "name=value". \r
+# For example adding "sideeffect=\par Side Effects:\n" will allow you to \r
+# put the command \sideeffect (or @sideeffect) in the documentation, which \r
+# will result in a user-defined paragraph with heading "Side Effects:". \r
+# You can put \n's in the value part of an alias to insert newlines.\r
+\r
+ALIASES                = \r
+\r
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C \r
+# sources only. Doxygen will then generate output that is more tailored for C. \r
+# For instance, some of the names that are used will be different. The list \r
+# of all members will be omitted, etc.\r
+\r
+OPTIMIZE_OUTPUT_FOR_C  = YES\r
+\r
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java \r
+# sources only. Doxygen will then generate output that is more tailored for \r
+# Java. For instance, namespaces will be presented as packages, qualified \r
+# scopes will look different, etc.\r
+\r
+OPTIMIZE_OUTPUT_JAVA   = NO\r
+\r
+# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran \r
+# sources only. Doxygen will then generate output that is more tailored for \r
+# Fortran.\r
+\r
+OPTIMIZE_FOR_FORTRAN   = NO\r
+\r
+# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL \r
+# sources. Doxygen will then generate output that is tailored for \r
+# VHDL.\r
+\r
+OPTIMIZE_OUTPUT_VHDL   = NO\r
+\r
+# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want \r
+# to include (a tag file for) the STL sources as input, then you should \r
+# set this tag to YES in order to let doxygen match functions declarations and \r
+# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. \r
+# func(std::string) {}). This also make the inheritance and collaboration \r
+# diagrams that involve STL classes more complete and accurate.\r
+\r
+BUILTIN_STL_SUPPORT    = NO\r
+\r
+# If you use Microsoft's C++/CLI language, you should set this option to YES to\r
+# enable parsing support.\r
+\r
+CPP_CLI_SUPPORT        = NO\r
+\r
+# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. \r
+# Doxygen will parse them like normal C++ but will assume all classes use public \r
+# instead of private inheritance when no explicit protection keyword is present.\r
+\r
+SIP_SUPPORT            = NO\r
+\r
+# For Microsoft's IDL there are propget and propput attributes to indicate getter \r
+# and setter methods for a property. Setting this option to YES (the default) \r
+# will make doxygen to replace the get and set methods by a property in the \r
+# documentation. This will only work if the methods are indeed getting or \r
+# setting a simple type. If this is not the case, or you want to show the \r
+# methods anyway, you should set this option to NO.\r
+\r
+IDL_PROPERTY_SUPPORT   = YES\r
+\r
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC \r
+# tag is set to YES, then doxygen will reuse the documentation of the first \r
+# member in the group (if any) for the other members of the group. By default \r
+# all members of a group must be documented explicitly.\r
+\r
+DISTRIBUTE_GROUP_DOC   = NO\r
+\r
+# Set the SUBGROUPING tag to YES (the default) to allow class member groups of \r
+# the same type (for instance a group of public functions) to be put as a \r
+# subgroup of that type (e.g. under the Public Functions section). Set it to \r
+# NO to prevent subgrouping. Alternatively, this can be done per class using \r
+# the \nosubgrouping command.\r
+\r
+SUBGROUPING            = YES\r
+\r
+# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum \r
+# is documented as struct, union, or enum with the name of the typedef. So \r
+# typedef struct TypeS {} TypeT, will appear in the documentation as a struct \r
+# with name TypeT. When disabled the typedef will appear as a member of a file, \r
+# namespace, or class. And the struct will be named TypeS. This can typically \r
+# be useful for C code in case the coding convention dictates that all compound \r
+# types are typedef'ed and only the typedef is referenced, never the tag name.\r
+\r
+TYPEDEF_HIDES_STRUCT   = NO\r
+\r
+# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to \r
+# determine which symbols to keep in memory and which to flush to disk.\r
+# When the cache is full, less often used symbols will be written to disk.\r
+# For small to medium size projects (<1000 input files) the default value is \r
+# probably good enough. For larger projects a too small cache size can cause \r
+# doxygen to be busy swapping symbols to and from disk most of the time \r
+# causing a significant performance penality. \r
+# If the system has enough physical memory increasing the cache will improve the \r
+# performance by keeping more symbols in memory. Note that the value works on \r
+# a logarithmic scale so increasing the size by one will rougly double the \r
+# memory usage. The cache size is given by this formula: \r
+# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, \r
+# corresponding to a cache size of 2^16 = 65536 symbols\r
+\r
+SYMBOL_CACHE_SIZE      = 0\r
+\r
+#---------------------------------------------------------------------------\r
+# Build related configuration options\r
+#---------------------------------------------------------------------------\r
+\r
+# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in \r
+# documentation are documented, even if no documentation was available. \r
+# Private class members and static file members will be hidden unless \r
+# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES\r
+\r
+EXTRACT_ALL            = YES\r
+\r
+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class \r
+# will be included in the documentation.\r
+\r
+EXTRACT_PRIVATE        = YES\r
+\r
+# If the EXTRACT_STATIC tag is set to YES all static members of a file \r
+# will be included in the documentation.\r
+\r
+EXTRACT_STATIC         = YES\r
+\r
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) \r
+# defined locally in source files will be included in the documentation. \r
+# If set to NO only classes defined in header files are included.\r
+\r
+EXTRACT_LOCAL_CLASSES  = YES\r
+\r
+# This flag is only useful for Objective-C code. When set to YES local \r
+# methods, which are defined in the implementation section but not in \r
+# the interface are included in the documentation. \r
+# If set to NO (the default) only methods in the interface are included.\r
+\r
+EXTRACT_LOCAL_METHODS  = NO\r
+\r
+# If this flag is set to YES, the members of anonymous namespaces will be \r
+# extracted and appear in the documentation as a namespace called \r
+# 'anonymous_namespace{file}', where file will be replaced with the base \r
+# name of the file that contains the anonymous namespace. By default \r
+# anonymous namespace are hidden.\r
+\r
+EXTRACT_ANON_NSPACES   = NO\r
+\r
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all \r
+# undocumented members of documented classes, files or namespaces. \r
+# If set to NO (the default) these members will be included in the \r
+# various overviews, but no documentation section is generated. \r
+# This option has no effect if EXTRACT_ALL is enabled.\r
+\r
+HIDE_UNDOC_MEMBERS     = NO\r
+\r
+# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all \r
+# undocumented classes that are normally visible in the class hierarchy. \r
+# If set to NO (the default) these classes will be included in the various \r
+# overviews. This option has no effect if EXTRACT_ALL is enabled.\r
+\r
+HIDE_UNDOC_CLASSES     = NO\r
+\r
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all \r
+# friend (class|struct|union) declarations. \r
+# If set to NO (the default) these declarations will be included in the \r
+# documentation.\r
+\r
+HIDE_FRIEND_COMPOUNDS  = NO\r
+\r
+# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any \r
+# documentation blocks found inside the body of a function. \r
+# If set to NO (the default) these blocks will be appended to the \r
+# function's detailed documentation block.\r
+\r
+HIDE_IN_BODY_DOCS      = NO\r
+\r
+# The INTERNAL_DOCS tag determines if documentation \r
+# that is typed after a \internal command is included. If the tag is set \r
+# to NO (the default) then the documentation will be excluded. \r
+# Set it to YES to include the internal documentation.\r
+\r
+INTERNAL_DOCS          = NO\r
+\r
+# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate \r
+# file names in lower-case letters. If set to YES upper-case letters are also \r
+# allowed. This is useful if you have classes or files whose names only differ \r
+# in case and if your file system supports case sensitive file names. Windows \r
+# and Mac users are advised to set this option to NO.\r
+\r
+CASE_SENSE_NAMES       = NO\r
+\r
+# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen \r
+# will show members with their full class and namespace scopes in the \r
+# documentation. If set to YES the scope will be hidden.\r
+\r
+HIDE_SCOPE_NAMES       = NO\r
+\r
+# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen \r
+# will put a list of the files that are included by a file in the documentation \r
+# of that file.\r
+\r
+SHOW_INCLUDE_FILES     = YES\r
+\r
+# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] \r
+# is inserted in the documentation for inline members.\r
+\r
+INLINE_INFO            = YES\r
+\r
+# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen \r
+# will sort the (detailed) documentation of file and class members \r
+# alphabetically by member name. If set to NO the members will appear in \r
+# declaration order.\r
+\r
+SORT_MEMBER_DOCS       = YES\r
+\r
+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the \r
+# brief documentation of file, namespace and class members alphabetically \r
+# by member name. If set to NO (the default) the members will appear in \r
+# declaration order.\r
+\r
+SORT_BRIEF_DOCS        = NO\r
+\r
+# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the \r
+# hierarchy of group names into alphabetical order. If set to NO (the default) \r
+# the group names will appear in their defined order.\r
+\r
+SORT_GROUP_NAMES       = NO\r
+\r
+# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be \r
+# sorted by fully-qualified names, including namespaces. If set to \r
+# NO (the default), the class list will be sorted only by class name, \r
+# not including the namespace part. \r
+# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.\r
+# Note: This option applies only to the class list, not to the \r
+# alphabetical list.\r
+\r
+SORT_BY_SCOPE_NAME     = NO\r
+\r
+# The GENERATE_TODOLIST tag can be used to enable (YES) or \r
+# disable (NO) the todo list. This list is created by putting \todo \r
+# commands in the documentation.\r
+\r
+GENERATE_TODOLIST      = NO\r
+\r
+# The GENERATE_TESTLIST tag can be used to enable (YES) or \r
+# disable (NO) the test list. This list is created by putting \test \r
+# commands in the documentation.\r
+\r
+GENERATE_TESTLIST      = NO\r
+\r
+# The GENERATE_BUGLIST tag can be used to enable (YES) or \r
+# disable (NO) the bug list. This list is created by putting \bug \r
+# commands in the documentation.\r
+\r
+GENERATE_BUGLIST       = NO\r
+\r
+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or \r
+# disable (NO) the deprecated list. This list is created by putting \r
+# \deprecated commands in the documentation.\r
+\r
+GENERATE_DEPRECATEDLIST= YES\r
+\r
+# The ENABLED_SECTIONS tag can be used to enable conditional \r
+# documentation sections, marked by \if sectionname ... \endif.\r
+\r
+ENABLED_SECTIONS       = \r
+\r
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines \r
+# the initial value of a variable or define consists of for it to appear in \r
+# the documentation. If the initializer consists of more lines than specified \r
+# here it will be hidden. Use a value of 0 to hide initializers completely. \r
+# The appearance of the initializer of individual variables and defines in the \r
+# documentation can be controlled using \showinitializer or \hideinitializer \r
+# command in the documentation regardless of this setting.\r
+\r
+MAX_INITIALIZER_LINES  = 30\r
+\r
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated \r
+# at the bottom of the documentation of classes and structs. If set to YES the \r
+# list will mention the files that were used to generate the documentation.\r
+\r
+SHOW_USED_FILES        = YES\r
+\r
+# If the sources in your project are distributed over multiple directories \r
+# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy \r
+# in the documentation. The default is NO.\r
+\r
+SHOW_DIRECTORIES       = YES\r
+\r
+# Set the SHOW_FILES tag to NO to disable the generation of the Files page.\r
+# This will remove the Files entry from the Quick Index and from the \r
+# Folder Tree View (if specified). The default is YES.\r
+\r
+SHOW_FILES             = YES\r
+\r
+# Set the SHOW_NAMESPACES tag to NO to disable the generation of the \r
+# Namespaces page.  This will remove the Namespaces entry from the Quick Index\r
+# and from the Folder Tree View (if specified). The default is YES.\r
+\r
+SHOW_NAMESPACES        = YES\r
+\r
+# The FILE_VERSION_FILTER tag can be used to specify a program or script that \r
+# doxygen should invoke to get the current version for each file (typically from \r
+# the version control system). Doxygen will invoke the program by executing (via \r
+# popen()) the command <command> <input-file>, where <command> is the value of \r
+# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file \r
+# provided by doxygen. Whatever the program writes to standard output \r
+# is used as the file version. See the manual for examples.\r
+\r
+FILE_VERSION_FILTER    = \r
+\r
+# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by \r
+# doxygen. The layout file controls the global structure of the generated output files \r
+# in an output format independent way. The create the layout file that represents \r
+# doxygen's defaults, run doxygen with the -l option. You can optionally specify a \r
+# file name after the option, if omitted DoxygenLayout.xml will be used as the name \r
+# of the layout file.\r
+\r
+LAYOUT_FILE            = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to warning and progress messages\r
+#---------------------------------------------------------------------------\r
+\r
+# The QUIET tag can be used to turn on/off the messages that are generated \r
+# by doxygen. Possible values are YES and NO. If left blank NO is used.\r
+\r
+QUIET                  = YES\r
+\r
+# The WARNINGS tag can be used to turn on/off the warning messages that are \r
+# generated by doxygen. Possible values are YES and NO. If left blank \r
+# NO is used.\r
+\r
+WARNINGS               = YES\r
+\r
+# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings \r
+# for undocumented members. If EXTRACT_ALL is set to YES then this flag will \r
+# automatically be disabled.\r
+\r
+WARN_IF_UNDOCUMENTED   = YES\r
+\r
+# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for \r
+# potential errors in the documentation, such as not documenting some \r
+# parameters in a documented function, or documenting parameters that \r
+# don't exist or using markup commands wrongly.\r
+\r
+WARN_IF_DOC_ERROR      = YES\r
+\r
+# This WARN_NO_PARAMDOC option can be abled to get warnings for \r
+# functions that are documented, but have no documentation for their parameters \r
+# or return value. If set to NO (the default) doxygen will only warn about \r
+# wrong or incomplete parameter documentation, but not about the absence of \r
+# documentation.\r
+\r
+WARN_NO_PARAMDOC       = YES\r
+\r
+# The WARN_FORMAT tag determines the format of the warning messages that \r
+# doxygen can produce. The string should contain the $file, $line, and $text \r
+# tags, which will be replaced by the file and line number from which the \r
+# warning originated and the warning text. Optionally the format may contain \r
+# $version, which will be replaced by the version of the file (if it could \r
+# be obtained via FILE_VERSION_FILTER)\r
+\r
+WARN_FORMAT            = "$file:$line: $text"\r
+\r
+# The WARN_LOGFILE tag can be used to specify a file to which warning \r
+# and error messages should be written. If left blank the output is written \r
+# to stderr.\r
+\r
+WARN_LOGFILE           = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the input files\r
+#---------------------------------------------------------------------------\r
+\r
+# The INPUT tag can be used to specify the files and/or directories that contain \r
+# documented source files. You may enter file names like "myfile.cpp" or \r
+# directories like "/usr/src/myproject". Separate the files or directories \r
+# with spaces.\r
+\r
+INPUT                  = ./\r
+\r
+# This tag can be used to specify the character encoding of the source files \r
+# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is \r
+# also the default input encoding. Doxygen uses libiconv (or the iconv built \r
+# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for \r
+# the list of possible encodings.\r
+\r
+INPUT_ENCODING         = UTF-8\r
+\r
+# If the value of the INPUT tag contains directories, you can use the \r
+# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \r
+# and *.h) to filter out the source-files in the directories. If left \r
+# blank the following patterns are tested: \r
+# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx \r
+# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90\r
+\r
+FILE_PATTERNS          = *.h \\r
+                         *.c \\r
+                                                *.txt\r
+\r
+# The RECURSIVE tag can be used to turn specify whether or not subdirectories \r
+# should be searched for input files as well. Possible values are YES and NO. \r
+# If left blank NO is used.\r
+\r
+RECURSIVE              = YES\r
+\r
+# The EXCLUDE tag can be used to specify files and/or directories that should \r
+# excluded from the INPUT source files. This way you can easily exclude a \r
+# subdirectory from a directory tree whose root is specified with the INPUT tag.\r
+\r
+EXCLUDE                = \r
+\r
+# The EXCLUDE_SYMLINKS tag can be used select whether or not files or \r
+# directories that are symbolic links (a Unix filesystem feature) are excluded \r
+# from the input.\r
+\r
+EXCLUDE_SYMLINKS       = NO\r
+\r
+# If the value of the INPUT tag contains directories, you can use the \r
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude \r
+# certain files from those directories. Note that the wildcards are matched \r
+# against the file with absolute path, so to exclude all test directories \r
+# for example use the pattern */test/*\r
+\r
+EXCLUDE_PATTERNS       = */LowLevel/USBMode.h\r
+\r
+# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names \r
+# (namespaces, classes, functions, etc.) that should be excluded from the \r
+# output. The symbol name can be a fully qualified name, a word, or if the \r
+# wildcard * is used, a substring. Examples: ANamespace, AClass, \r
+# AClass::ANamespace, ANamespace::*Test\r
+\r
+EXCLUDE_SYMBOLS        = __*\r
+\r
+# The EXAMPLE_PATH tag can be used to specify one or more files or \r
+# directories that contain example code fragments that are included (see \r
+# the \include command).\r
+\r
+EXAMPLE_PATH           = \r
+\r
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the \r
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \r
+# and *.h) to filter out the source-files in the directories. If left \r
+# blank all files are included.\r
+\r
+EXAMPLE_PATTERNS       = *\r
+\r
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be \r
+# searched for input files to be used with the \include or \dontinclude \r
+# commands irrespective of the value of the RECURSIVE tag. \r
+# Possible values are YES and NO. If left blank NO is used.\r
+\r
+EXAMPLE_RECURSIVE      = NO\r
+\r
+# The IMAGE_PATH tag can be used to specify one or more files or \r
+# directories that contain image that are included in the documentation (see \r
+# the \image command).\r
+\r
+IMAGE_PATH             = \r
+\r
+# The INPUT_FILTER tag can be used to specify a program that doxygen should \r
+# invoke to filter for each input file. Doxygen will invoke the filter program \r
+# by executing (via popen()) the command <filter> <input-file>, where <filter> \r
+# is the value of the INPUT_FILTER tag, and <input-file> is the name of an \r
+# input file. Doxygen will then use the output that the filter program writes \r
+# to standard output.  If FILTER_PATTERNS is specified, this tag will be \r
+# ignored.\r
+\r
+INPUT_FILTER           = \r
+\r
+# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern \r
+# basis.  Doxygen will compare the file name with each pattern and apply the \r
+# filter if there is a match.  The filters are a list of the form: \r
+# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further \r
+# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER \r
+# is applied to all files.\r
+\r
+FILTER_PATTERNS        = \r
+\r
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using \r
+# INPUT_FILTER) will be used to filter the input files when producing source \r
+# files to browse (i.e. when SOURCE_BROWSER is set to YES).\r
+\r
+FILTER_SOURCE_FILES    = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to source browsing\r
+#---------------------------------------------------------------------------\r
+\r
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will \r
+# be generated. Documented entities will be cross-referenced with these sources. \r
+# Note: To get rid of all source code in the generated output, make sure also \r
+# VERBATIM_HEADERS is set to NO.\r
+\r
+SOURCE_BROWSER         = NO\r
+\r
+# Setting the INLINE_SOURCES tag to YES will include the body \r
+# of functions and classes directly in the documentation.\r
+\r
+INLINE_SOURCES         = NO\r
+\r
+# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct \r
+# doxygen to hide any special comment blocks from generated source code \r
+# fragments. Normal C and C++ comments will always remain visible.\r
+\r
+STRIP_CODE_COMMENTS    = YES\r
+\r
+# If the REFERENCED_BY_RELATION tag is set to YES \r
+# then for each documented function all documented \r
+# functions referencing it will be listed.\r
+\r
+REFERENCED_BY_RELATION = NO\r
+\r
+# If the REFERENCES_RELATION tag is set to YES \r
+# then for each documented function all documented entities \r
+# called/used by that function will be listed.\r
+\r
+REFERENCES_RELATION    = NO\r
+\r
+# If the REFERENCES_LINK_SOURCE tag is set to YES (the default)\r
+# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from\r
+# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will\r
+# link to the source code.  Otherwise they will link to the documentstion.\r
+\r
+REFERENCES_LINK_SOURCE = NO\r
+\r
+# If the USE_HTAGS tag is set to YES then the references to source code \r
+# will point to the HTML generated by the htags(1) tool instead of doxygen \r
+# built-in source browser. The htags tool is part of GNU's global source \r
+# tagging system (see http://www.gnu.org/software/global/global.html). You \r
+# will need version 4.8.6 or higher.\r
+\r
+USE_HTAGS              = NO\r
+\r
+# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen \r
+# will generate a verbatim copy of the header file for each class for \r
+# which an include is specified. Set to NO to disable this.\r
+\r
+VERBATIM_HEADERS       = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the alphabetical class index\r
+#---------------------------------------------------------------------------\r
+\r
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index \r
+# of all compounds will be generated. Enable this if the project \r
+# contains a lot of classes, structs, unions or interfaces.\r
+\r
+ALPHABETICAL_INDEX     = YES\r
+\r
+# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then \r
+# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns \r
+# in which this list will be split (can be a number in the range [1..20])\r
+\r
+COLS_IN_ALPHA_INDEX    = 5\r
+\r
+# In case all classes in a project start with a common prefix, all \r
+# classes will be put under the same header in the alphabetical index. \r
+# The IGNORE_PREFIX tag can be used to specify one or more prefixes that \r
+# should be ignored while generating the index headers.\r
+\r
+IGNORE_PREFIX          = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the HTML output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_HTML tag is set to YES (the default) Doxygen will \r
+# generate HTML output.\r
+\r
+GENERATE_HTML          = YES\r
+\r
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `html' will be used as the default path.\r
+\r
+HTML_OUTPUT            = html\r
+\r
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for \r
+# each generated HTML page (for example: .htm,.php,.asp). If it is left blank \r
+# doxygen will generate files with .html extension.\r
+\r
+HTML_FILE_EXTENSION    = .html\r
+\r
+# The HTML_HEADER tag can be used to specify a personal HTML header for \r
+# each generated HTML page. If it is left blank doxygen will generate a \r
+# standard header.\r
+\r
+HTML_HEADER            = \r
+\r
+# The HTML_FOOTER tag can be used to specify a personal HTML footer for \r
+# each generated HTML page. If it is left blank doxygen will generate a \r
+# standard footer.\r
+\r
+HTML_FOOTER            = \r
+\r
+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading \r
+# style sheet that is used by each HTML page. It can be used to \r
+# fine-tune the look of the HTML output. If the tag is left blank doxygen \r
+# will generate a default style sheet. Note that doxygen will try to copy \r
+# the style sheet file to the HTML output directory, so don't put your own \r
+# stylesheet in the HTML output directory as well, or it will be erased!\r
+\r
+HTML_STYLESHEET        = \r
+\r
+# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, \r
+# files or namespaces will be aligned in HTML using tables. If set to \r
+# NO a bullet list will be used.\r
+\r
+HTML_ALIGN_MEMBERS     = YES\r
+\r
+# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML \r
+# documentation will contain sections that can be hidden and shown after the \r
+# page has loaded. For this to work a browser that supports \r
+# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox \r
+# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari).\r
+\r
+HTML_DYNAMIC_SECTIONS  = YES\r
+\r
+# If the GENERATE_DOCSET tag is set to YES, additional index files \r
+# will be generated that can be used as input for Apple's Xcode 3 \r
+# integrated development environment, introduced with OSX 10.5 (Leopard). \r
+# To create a documentation set, doxygen will generate a Makefile in the \r
+# HTML output directory. Running make will produce the docset in that \r
+# directory and running "make install" will install the docset in \r
+# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find \r
+# it at startup. \r
+# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information.\r
+\r
+GENERATE_DOCSET        = NO\r
+\r
+# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the \r
+# feed. A documentation feed provides an umbrella under which multiple \r
+# documentation sets from a single provider (such as a company or product suite) \r
+# can be grouped.\r
+\r
+DOCSET_FEEDNAME        = "Doxygen generated docs"\r
+\r
+# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that \r
+# should uniquely identify the documentation set bundle. This should be a \r
+# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen \r
+# will append .docset to the name.\r
+\r
+DOCSET_BUNDLE_ID       = org.doxygen.Project\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, additional index files \r
+# will be generated that can be used as input for tools like the \r
+# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) \r
+# of the generated HTML documentation.\r
+\r
+GENERATE_HTMLHELP      = NO\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can \r
+# be used to specify the file name of the resulting .chm file. You \r
+# can add a path in front of the file if the result should not be \r
+# written to the html output directory.\r
+\r
+CHM_FILE               = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can \r
+# be used to specify the location (absolute path including file name) of \r
+# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run \r
+# the HTML help compiler on the generated index.hhp.\r
+\r
+HHC_LOCATION           = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag \r
+# controls if a separate .chi index file is generated (YES) or that \r
+# it should be included in the master .chm file (NO).\r
+\r
+GENERATE_CHI           = NO\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING\r
+# is used to encode HtmlHelp index (hhk), content (hhc) and project file\r
+# content.\r
+\r
+CHM_INDEX_ENCODING     = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag \r
+# controls whether a binary table of contents is generated (YES) or a \r
+# normal table of contents (NO) in the .chm file.\r
+\r
+BINARY_TOC             = NO\r
+\r
+# The TOC_EXPAND flag can be set to YES to add extra items for group members \r
+# to the contents of the HTML help documentation and to the tree view.\r
+\r
+TOC_EXPAND             = YES\r
+\r
+# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER \r
+# are set, an additional index file will be generated that can be used as input for \r
+# Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated \r
+# HTML documentation.\r
+\r
+GENERATE_QHP           = NO\r
+\r
+# If the QHG_LOCATION tag is specified, the QCH_FILE tag can \r
+# be used to specify the file name of the resulting .qch file. \r
+# The path specified is relative to the HTML output folder.\r
+\r
+QCH_FILE               = \r
+\r
+# The QHP_NAMESPACE tag specifies the namespace to use when generating \r
+# Qt Help Project output. For more information please see \r
+# <a href="http://doc.trolltech.com/qthelpproject.html#namespace">Qt Help Project / Namespace</a>.\r
+\r
+QHP_NAMESPACE          = org.doxygen.Project\r
+\r
+# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating \r
+# Qt Help Project output. For more information please see \r
+# <a href="http://doc.trolltech.com/qthelpproject.html#virtual-folders">Qt Help Project / Virtual Folders</a>.\r
+\r
+QHP_VIRTUAL_FOLDER     = doc\r
+\r
+# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can \r
+# be used to specify the location of Qt's qhelpgenerator. \r
+# If non-empty doxygen will try to run qhelpgenerator on the generated \r
+# .qhp file .\r
+\r
+QHG_LOCATION           = \r
+\r
+# The DISABLE_INDEX tag can be used to turn on/off the condensed index at \r
+# top of each HTML page. The value NO (the default) enables the index and \r
+# the value YES disables it.\r
+\r
+DISABLE_INDEX          = NO\r
+\r
+# This tag can be used to set the number of enum values (range [1..20]) \r
+# that doxygen will group on one line in the generated HTML documentation.\r
+\r
+ENUM_VALUES_PER_LINE   = 1\r
+\r
+# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index\r
+# structure should be generated to display hierarchical information.\r
+# If the tag value is set to FRAME, a side panel will be generated\r
+# containing a tree-like index structure (just like the one that \r
+# is generated for HTML Help). For this to work a browser that supports \r
+# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, \r
+# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are \r
+# probably better off using the HTML help feature. Other possible values \r
+# for this tag are: HIERARCHIES, which will generate the Groups, Directories,\r
+# and Class Hierarchy pages using a tree view instead of an ordered list;\r
+# ALL, which combines the behavior of FRAME and HIERARCHIES; and NONE, which\r
+# disables this behavior completely. For backwards compatibility with previous\r
+# releases of Doxygen, the values YES and NO are equivalent to FRAME and NONE\r
+# respectively.\r
+\r
+GENERATE_TREEVIEW      = YES\r
+\r
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be \r
+# used to set the initial width (in pixels) of the frame in which the tree \r
+# is shown.\r
+\r
+TREEVIEW_WIDTH         = 250\r
+\r
+# Use this tag to change the font size of Latex formulas included \r
+# as images in the HTML documentation. The default is 10. Note that \r
+# when you change the font size after a successful doxygen run you need \r
+# to manually remove any form_*.png images from the HTML output directory \r
+# to force them to be regenerated.\r
+\r
+FORMULA_FONTSIZE       = 10\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the LaTeX output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will \r
+# generate Latex output.\r
+\r
+GENERATE_LATEX         = NO\r
+\r
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `latex' will be used as the default path.\r
+\r
+LATEX_OUTPUT           = latex\r
+\r
+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be \r
+# invoked. If left blank `latex' will be used as the default command name.\r
+\r
+LATEX_CMD_NAME         = latex\r
+\r
+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to \r
+# generate index for LaTeX. If left blank `makeindex' will be used as the \r
+# default command name.\r
+\r
+MAKEINDEX_CMD_NAME     = makeindex\r
+\r
+# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact \r
+# LaTeX documents. This may be useful for small projects and may help to \r
+# save some trees in general.\r
+\r
+COMPACT_LATEX          = NO\r
+\r
+# The PAPER_TYPE tag can be used to set the paper type that is used \r
+# by the printer. Possible values are: a4, a4wide, letter, legal and \r
+# executive. If left blank a4wide will be used.\r
+\r
+PAPER_TYPE             = a4wide\r
+\r
+# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX \r
+# packages that should be included in the LaTeX output.\r
+\r
+EXTRA_PACKAGES         = \r
+\r
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for \r
+# the generated latex document. The header should contain everything until \r
+# the first chapter. If it is left blank doxygen will generate a \r
+# standard header. Notice: only use this tag if you know what you are doing!\r
+\r
+LATEX_HEADER           = \r
+\r
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated \r
+# is prepared for conversion to pdf (using ps2pdf). The pdf file will \r
+# contain links (just like the HTML output) instead of page references \r
+# This makes the output suitable for online browsing using a pdf viewer.\r
+\r
+PDF_HYPERLINKS         = YES\r
+\r
+# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of \r
+# plain latex in the generated Makefile. Set this option to YES to get a \r
+# higher quality PDF documentation.\r
+\r
+USE_PDFLATEX           = YES\r
+\r
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. \r
+# command to the generated LaTeX files. This will instruct LaTeX to keep \r
+# running if errors occur, instead of asking the user for help. \r
+# This option is also used when generating formulas in HTML.\r
+\r
+LATEX_BATCHMODE        = NO\r
+\r
+# If LATEX_HIDE_INDICES is set to YES then doxygen will not \r
+# include the index chapters (such as File Index, Compound Index, etc.) \r
+# in the output.\r
+\r
+LATEX_HIDE_INDICES     = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the RTF output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output \r
+# The RTF output is optimized for Word 97 and may not look very pretty with \r
+# other RTF readers or editors.\r
+\r
+GENERATE_RTF           = NO\r
+\r
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `rtf' will be used as the default path.\r
+\r
+RTF_OUTPUT             = rtf\r
+\r
+# If the COMPACT_RTF tag is set to YES Doxygen generates more compact \r
+# RTF documents. This may be useful for small projects and may help to \r
+# save some trees in general.\r
+\r
+COMPACT_RTF            = NO\r
+\r
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated \r
+# will contain hyperlink fields. The RTF file will \r
+# contain links (just like the HTML output) instead of page references. \r
+# This makes the output suitable for online browsing using WORD or other \r
+# programs which support those fields. \r
+# Note: wordpad (write) and others do not support links.\r
+\r
+RTF_HYPERLINKS         = NO\r
+\r
+# Load stylesheet definitions from file. Syntax is similar to doxygen's \r
+# config file, i.e. a series of assignments. You only have to provide \r
+# replacements, missing definitions are set to their default value.\r
+\r
+RTF_STYLESHEET_FILE    = \r
+\r
+# Set optional variables used in the generation of an rtf document. \r
+# Syntax is similar to doxygen's config file.\r
+\r
+RTF_EXTENSIONS_FILE    = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the man page output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_MAN tag is set to YES (the default) Doxygen will \r
+# generate man pages\r
+\r
+GENERATE_MAN           = NO\r
+\r
+# The MAN_OUTPUT tag is used to specify where the man pages will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `man' will be used as the default path.\r
+\r
+MAN_OUTPUT             = man\r
+\r
+# The MAN_EXTENSION tag determines the extension that is added to \r
+# the generated man pages (default is the subroutine's section .3)\r
+\r
+MAN_EXTENSION          = .3\r
+\r
+# If the MAN_LINKS tag is set to YES and Doxygen generates man output, \r
+# then it will generate one additional man file for each entity \r
+# documented in the real man page(s). These additional files \r
+# only source the real man page, but without them the man command \r
+# would be unable to find the correct page. The default is NO.\r
+\r
+MAN_LINKS              = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the XML output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_XML tag is set to YES Doxygen will \r
+# generate an XML file that captures the structure of \r
+# the code including all documentation.\r
+\r
+GENERATE_XML           = NO\r
+\r
+# The XML_OUTPUT tag is used to specify where the XML pages will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `xml' will be used as the default path.\r
+\r
+XML_OUTPUT             = xml\r
+\r
+# The XML_SCHEMA tag can be used to specify an XML schema, \r
+# which can be used by a validating XML parser to check the \r
+# syntax of the XML files.\r
+\r
+XML_SCHEMA             = \r
+\r
+# The XML_DTD tag can be used to specify an XML DTD, \r
+# which can be used by a validating XML parser to check the \r
+# syntax of the XML files.\r
+\r
+XML_DTD                = \r
+\r
+# If the XML_PROGRAMLISTING tag is set to YES Doxygen will \r
+# dump the program listings (including syntax highlighting \r
+# and cross-referencing information) to the XML output. Note that \r
+# enabling this will significantly increase the size of the XML output.\r
+\r
+XML_PROGRAMLISTING     = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options for the AutoGen Definitions output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will \r
+# generate an AutoGen Definitions (see autogen.sf.net) file \r
+# that captures the structure of the code including all \r
+# documentation. Note that this feature is still experimental \r
+# and incomplete at the moment.\r
+\r
+GENERATE_AUTOGEN_DEF   = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the Perl module output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_PERLMOD tag is set to YES Doxygen will \r
+# generate a Perl module file that captures the structure of \r
+# the code including all documentation. Note that this \r
+# feature is still experimental and incomplete at the \r
+# moment.\r
+\r
+GENERATE_PERLMOD       = NO\r
+\r
+# If the PERLMOD_LATEX tag is set to YES Doxygen will generate \r
+# the necessary Makefile rules, Perl scripts and LaTeX code to be able \r
+# to generate PDF and DVI output from the Perl module output.\r
+\r
+PERLMOD_LATEX          = NO\r
+\r
+# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be \r
+# nicely formatted so it can be parsed by a human reader.  This is useful \r
+# if you want to understand what is going on.  On the other hand, if this \r
+# tag is set to NO the size of the Perl module output will be much smaller \r
+# and Perl will parse it just the same.\r
+\r
+PERLMOD_PRETTY         = YES\r
+\r
+# The names of the make variables in the generated doxyrules.make file \r
+# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. \r
+# This is useful so different doxyrules.make files included by the same \r
+# Makefile don't overwrite each other's variables.\r
+\r
+PERLMOD_MAKEVAR_PREFIX = \r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration options related to the preprocessor   \r
+#---------------------------------------------------------------------------\r
+\r
+# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will \r
+# evaluate all C-preprocessor directives found in the sources and include \r
+# files.\r
+\r
+ENABLE_PREPROCESSING   = YES\r
+\r
+# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro \r
+# names in the source code. If set to NO (the default) only conditional \r
+# compilation will be performed. Macro expansion can be done in a controlled \r
+# way by setting EXPAND_ONLY_PREDEF to YES.\r
+\r
+MACRO_EXPANSION        = YES\r
+\r
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES \r
+# then the macro expansion is limited to the macros specified with the \r
+# PREDEFINED and EXPAND_AS_DEFINED tags.\r
+\r
+EXPAND_ONLY_PREDEF     = YES\r
+\r
+# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files \r
+# in the INCLUDE_PATH (see below) will be search if a #include is found.\r
+\r
+SEARCH_INCLUDES        = YES\r
+\r
+# The INCLUDE_PATH tag can be used to specify one or more directories that \r
+# contain include files that are not input files but should be processed by \r
+# the preprocessor.\r
+\r
+INCLUDE_PATH           = \r
+\r
+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard \r
+# patterns (like *.h and *.hpp) to filter out the header-files in the \r
+# directories. If left blank, the patterns specified with FILE_PATTERNS will \r
+# be used.\r
+\r
+INCLUDE_FILE_PATTERNS  = \r
+\r
+# The PREDEFINED tag can be used to specify one or more macro names that \r
+# are defined before the preprocessor is started (similar to the -D option of \r
+# gcc). The argument of the tag is a list of macros of the form: name \r
+# or name=definition (no spaces). If the definition and the = are \r
+# omitted =1 is assumed. To prevent a macro definition from being \r
+# undefined via #undef or recursively expanded use the := operator \r
+# instead of the = operator.\r
+\r
+PREDEFINED             = __DOXYGEN__\r
+\r
+# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then \r
+# this tag can be used to specify a list of macro names that should be expanded. \r
+# The macro definition that is found in the sources will be used. \r
+# Use the PREDEFINED tag if you want to use a different macro definition.\r
+\r
+EXPAND_AS_DEFINED      = BUTTLOADTAG\r
+\r
+# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then \r
+# doxygen's preprocessor will remove all function-like macros that are alone \r
+# on a line, have an all uppercase name, and do not end with a semicolon. Such \r
+# function macros are typically used for boiler-plate code, and will confuse \r
+# the parser if not removed.\r
+\r
+SKIP_FUNCTION_MACROS   = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration::additions related to external references   \r
+#---------------------------------------------------------------------------\r
+\r
+# The TAGFILES option can be used to specify one or more tagfiles. \r
+# Optionally an initial location of the external documentation \r
+# can be added for each tagfile. The format of a tag file without \r
+# this location is as follows: \r
+#   TAGFILES = file1 file2 ... \r
+# Adding location for the tag files is done as follows: \r
+#   TAGFILES = file1=loc1 "file2 = loc2" ... \r
+# where "loc1" and "loc2" can be relative or absolute paths or \r
+# URLs. If a location is present for each tag, the installdox tool \r
+# does not have to be run to correct the links.\r
+# Note that each tag file must have a unique name\r
+# (where the name does NOT include the path)\r
+# If a tag file is not located in the directory in which doxygen \r
+# is run, you must also specify the path to the tagfile here.\r
+\r
+TAGFILES               = \r
+\r
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create \r
+# a tag file that is based on the input files it reads.\r
+\r
+GENERATE_TAGFILE       = \r
+\r
+# If the ALLEXTERNALS tag is set to YES all external classes will be listed \r
+# in the class index. If set to NO only the inherited external classes \r
+# will be listed.\r
+\r
+ALLEXTERNALS           = NO\r
+\r
+# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed \r
+# in the modules index. If set to NO, only the current project's groups will \r
+# be listed.\r
+\r
+EXTERNAL_GROUPS        = YES\r
+\r
+# The PERL_PATH should be the absolute path and name of the perl script \r
+# interpreter (i.e. the result of `which perl').\r
+\r
+PERL_PATH              = /usr/bin/perl\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration options related to the dot tool   \r
+#---------------------------------------------------------------------------\r
+\r
+# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will \r
+# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base \r
+# or super classes. Setting the tag to NO turns the diagrams off. Note that \r
+# this option is superseded by the HAVE_DOT option below. This is only a \r
+# fallback. It is recommended to install and use dot, since it yields more \r
+# powerful graphs.\r
+\r
+CLASS_DIAGRAMS         = NO\r
+\r
+# You can define message sequence charts within doxygen comments using the \msc \r
+# command. Doxygen will then run the mscgen tool (see \r
+# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the \r
+# documentation. The MSCGEN_PATH tag allows you to specify the directory where \r
+# the mscgen tool resides. If left empty the tool is assumed to be found in the \r
+# default search path.\r
+\r
+MSCGEN_PATH            = \r
+\r
+# If set to YES, the inheritance and collaboration graphs will hide \r
+# inheritance and usage relations if the target is undocumented \r
+# or is not a class.\r
+\r
+HIDE_UNDOC_RELATIONS   = YES\r
+\r
+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is \r
+# available from the path. This tool is part of Graphviz, a graph visualization \r
+# toolkit from AT&T and Lucent Bell Labs. The other options in this section \r
+# have no effect if this option is set to NO (the default)\r
+\r
+HAVE_DOT               = NO\r
+\r
+# By default doxygen will write a font called FreeSans.ttf to the output \r
+# directory and reference it in all dot files that doxygen generates. This \r
+# font does not include all possible unicode characters however, so when you need \r
+# these (or just want a differently looking font) you can specify the font name \r
+# using DOT_FONTNAME. You need need to make sure dot is able to find the font, \r
+# which can be done by putting it in a standard location or by setting the \r
+# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory \r
+# containing the font.\r
+\r
+DOT_FONTNAME           = FreeSans\r
+\r
+# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. \r
+# The default size is 10pt.\r
+\r
+DOT_FONTSIZE           = 10\r
+\r
+# By default doxygen will tell dot to use the output directory to look for the \r
+# FreeSans.ttf font (which doxygen will put there itself). If you specify a \r
+# different font using DOT_FONTNAME you can set the path where dot \r
+# can find it using this tag.\r
+\r
+DOT_FONTPATH           = \r
+\r
+# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for each documented class showing the direct and \r
+# indirect inheritance relations. Setting this tag to YES will force the \r
+# the CLASS_DIAGRAMS tag to NO.\r
+\r
+CLASS_GRAPH            = NO\r
+\r
+# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for each documented class showing the direct and \r
+# indirect implementation dependencies (inheritance, containment, and \r
+# class references variables) of the class with other documented classes.\r
+\r
+COLLABORATION_GRAPH    = NO\r
+\r
+# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for groups, showing the direct groups dependencies\r
+\r
+GROUP_GRAPHS           = NO\r
+\r
+# If the UML_LOOK tag is set to YES doxygen will generate inheritance and \r
+# collaboration diagrams in a style similar to the OMG's Unified Modeling \r
+# Language.\r
+\r
+UML_LOOK               = NO\r
+\r
+# If set to YES, the inheritance and collaboration graphs will show the \r
+# relations between templates and their instances.\r
+\r
+TEMPLATE_RELATIONS     = NO\r
+\r
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT \r
+# tags are set to YES then doxygen will generate a graph for each documented \r
+# file showing the direct and indirect include dependencies of the file with \r
+# other documented files.\r
+\r
+INCLUDE_GRAPH          = NO\r
+\r
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and \r
+# HAVE_DOT tags are set to YES then doxygen will generate a graph for each \r
+# documented header file showing the documented files that directly or \r
+# indirectly include this file.\r
+\r
+INCLUDED_BY_GRAPH      = NO\r
+\r
+# If the CALL_GRAPH and HAVE_DOT options are set to YES then \r
+# doxygen will generate a call dependency graph for every global function \r
+# or class method. Note that enabling this option will significantly increase \r
+# the time of a run. So in most cases it will be better to enable call graphs \r
+# for selected functions only using the \callgraph command.\r
+\r
+CALL_GRAPH             = NO\r
+\r
+# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then \r
+# doxygen will generate a caller dependency graph for every global function \r
+# or class method. Note that enabling this option will significantly increase \r
+# the time of a run. So in most cases it will be better to enable caller \r
+# graphs for selected functions only using the \callergraph command.\r
+\r
+CALLER_GRAPH           = NO\r
+\r
+# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen \r
+# will graphical hierarchy of all classes instead of a textual one.\r
+\r
+GRAPHICAL_HIERARCHY    = NO\r
+\r
+# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES \r
+# then doxygen will show the dependencies a directory has on other directories \r
+# in a graphical way. The dependency relations are determined by the #include\r
+# relations between the files in the directories.\r
+\r
+DIRECTORY_GRAPH        = NO\r
+\r
+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images \r
+# generated by dot. Possible values are png, jpg, or gif\r
+# If left blank png will be used.\r
+\r
+DOT_IMAGE_FORMAT       = png\r
+\r
+# The tag DOT_PATH can be used to specify the path where the dot tool can be \r
+# found. If left blank, it is assumed the dot tool can be found in the path.\r
+\r
+DOT_PATH               = "C:/Program Files/Graphviz2.18/bin"\r
+\r
+# The DOTFILE_DIRS tag can be used to specify one or more directories that \r
+# contain dot files that are included in the documentation (see the \r
+# \dotfile command).\r
+\r
+DOTFILE_DIRS           = \r
+\r
+# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of \r
+# nodes that will be shown in the graph. If the number of nodes in a graph \r
+# becomes larger than this value, doxygen will truncate the graph, which is \r
+# visualized by representing a node as a red box. Note that doxygen if the \r
+# number of direct children of the root node in a graph is already larger than \r
+# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note \r
+# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.\r
+\r
+DOT_GRAPH_MAX_NODES    = 15\r
+\r
+# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the \r
+# graphs generated by dot. A depth value of 3 means that only nodes reachable \r
+# from the root by following a path via at most 3 edges will be shown. Nodes \r
+# that lay further from the root node will be omitted. Note that setting this \r
+# option to 1 or 2 may greatly reduce the computation time needed for large \r
+# code bases. Also note that the size of a graph can be further restricted by \r
+# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.\r
+\r
+MAX_DOT_GRAPH_DEPTH    = 2\r
+\r
+# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent \r
+# background. This is disabled by default, because dot on Windows does not \r
+# seem to support this out of the box. Warning: Depending on the platform used, \r
+# enabling this option may lead to badly anti-aliased labels on the edges of \r
+# a graph (i.e. they become hard to read).\r
+\r
+DOT_TRANSPARENT        = YES\r
+\r
+# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output \r
+# files in one run (i.e. multiple -o and -T options on the command line). This \r
+# makes dot run faster, but since only newer versions of dot (>1.8.10) \r
+# support this, this feature is disabled by default.\r
+\r
+DOT_MULTI_TARGETS      = NO\r
+\r
+# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will \r
+# generate a legend page explaining the meaning of the various boxes and \r
+# arrows in the dot generated graphs.\r
+\r
+GENERATE_LEGEND        = YES\r
+\r
+# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will \r
+# remove the intermediate dot files that are used to generate \r
+# the various graphs.\r
+\r
+DOT_CLEANUP            = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration::additions related to the search engine   \r
+#---------------------------------------------------------------------------\r
+\r
+# The SEARCHENGINE tag specifies whether or not a search engine should be \r
+# used. If set to NO the values of all tags below this one will be ignored.\r
+\r
+SEARCHENGINE           = NO\r
diff --git a/Demos/Device/ClassDriver/AudioInput/makefile b/Demos/Device/ClassDriver/AudioInput/makefile
new file mode 100644 (file)
index 0000000..9d3adff
--- /dev/null
@@ -0,0 +1,733 @@
+# Hey Emacs, this is a -*- makefile -*-\r
+#----------------------------------------------------------------------------\r
+# WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al.\r
+#  >> Modified for use with the LUFA project. <<\r
+#\r
+# Released to the Public Domain\r
+#\r
+# Additional material for this makefile was written by:\r
+# Peter Fleury\r
+# Tim Henigan\r
+# Colin O'Flynn\r
+# Reiner Patommel\r
+# Markus Pfaff\r
+# Sander Pool\r
+# Frederik Rouleau\r
+# Carlos Lamas\r
+# Dean Camera\r
+# Opendous Inc.\r
+# Denver Gingerich\r
+#\r
+#----------------------------------------------------------------------------\r
+# On command line:\r
+#\r
+# make all = Make software.\r
+#\r
+# make clean = Clean out built project files.\r
+#\r
+# make coff = Convert ELF to AVR COFF.\r
+#\r
+# make extcoff = Convert ELF to AVR Extended COFF.\r
+#\r
+# make program = Download the hex file to the device, using avrdude.\r
+#                Please customize the avrdude settings below first!\r
+#\r
+# make dfu = Download the hex file to the device, using dfu-programmer (must\r
+#            have dfu-programmer installed).\r
+#\r
+# make flip = Download the hex file to the device, using Atmel FLIP (must\r
+#             have Atmel FLIP installed).\r
+#\r
+# make dfu-ee = Download the eeprom file to the device, using dfu-programmer\r
+#               (must have dfu-programmer installed).\r
+#\r
+# make flip-ee = Download the eeprom file to the device, using Atmel FLIP\r
+#                (must have Atmel FLIP installed).\r
+#\r
+# make doxygen = Generate DoxyGen documentation for the project (must have\r
+#                DoxyGen installed)\r
+#\r
+# make debug = Start either simulavr or avarice as specified for debugging, \r
+#              with avr-gdb or avr-insight as the front end for debugging.\r
+#\r
+# make filename.s = Just compile filename.c into the assembler code only.\r
+#\r
+# make filename.i = Create a preprocessed source file for use in submitting\r
+#                   bug reports to the GCC project.\r
+#\r
+# To rebuild project do "make clean" then "make all".\r
+#----------------------------------------------------------------------------\r
+\r
+\r
+# MCU name\r
+MCU = at90usb1287\r
+\r
+\r
+# Target board (see library "Board Types" documentation, USER or blank for projects not requiring\r
+# LUFA board drivers). If USER is selected, put custom board drivers in a directory called \r
+# "Board" inside the application directory.\r
+BOARD  = USBKEY\r
+\r
+\r
+# Processor frequency.\r
+#     This will define a symbol, F_CPU, in all source code files equal to the \r
+#     processor frequency. You can then use this symbol in your source code to \r
+#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done\r
+#     automatically to create a 32-bit value in your source code.\r
+#     Typical values are:\r
+#         F_CPU =  1000000\r
+#         F_CPU =  1843200\r
+#         F_CPU =  2000000\r
+#         F_CPU =  3686400\r
+#         F_CPU =  4000000\r
+#         F_CPU =  7372800\r
+#         F_CPU =  8000000\r
+#         F_CPU = 11059200\r
+#         F_CPU = 14745600\r
+#         F_CPU = 16000000\r
+#         F_CPU = 18432000\r
+#         F_CPU = 20000000\r
+F_CPU = 8000000\r
+\r
+\r
+# Input clock frequency.\r
+#     This will define a symbol, F_CLOCK, in all source code files equal to the \r
+#     input clock frequency (before any prescaling is performed). This value may\r
+#     differ from F_CPU if prescaling is used on the latter, and is required as the\r
+#     raw input clock is fed directly to the PLL sections of the AVR for high speed\r
+#     clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'\r
+#     at the end, this will be done automatically to create a 32-bit value in your\r
+#     source code.\r
+#\r
+#     If no clock division is performed on the input clock inside the AVR (via the\r
+#     CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.\r
+F_CLOCK = 8000000\r
+\r
+\r
+# Output format. (can be srec, ihex, binary)\r
+FORMAT = ihex\r
+\r
+\r
+# Target file name (without extension).\r
+TARGET = AudioInput\r
+\r
+\r
+# Object files directory\r
+#     To put object files in current directory, use a dot (.), do NOT make\r
+#     this an empty or blank macro!\r
+OBJDIR = .\r
+\r
+\r
+# Path to the LUFA library\r
+LUFA_PATH = ../../..\r
+\r
+\r
+# List C source files here. (C dependencies are automatically generated.)\r
+SRC = $(TARGET).c                                                 \\r
+         Descriptors.c                                               \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/DevChapter9.c        \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Endpoint.c           \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Host.c               \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/HostChapter9.c       \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/LowLevel.c           \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Pipe.c               \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/Events.c            \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBInterrupt.c      \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBTask.c           \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/ConfigDescriptor.c  \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/Class/Device/Audio.c          \\r
+\r
+\r
+# List C++ source files here. (C dependencies are automatically generated.)\r
+CPPSRC = \r
+\r
+\r
+# List Assembler source files here.\r
+#     Make them always end in a capital .S.  Files ending in a lowercase .s\r
+#     will not be considered source files but generated files (assembler\r
+#     output from the compiler), and will be deleted upon "make clean"!\r
+#     Even though the DOS/Win* filesystem matches both .s and .S the same,\r
+#     it will preserve the spelling of the filenames, and gcc itself does\r
+#     care about how the name is spelled on its command-line.\r
+ASRC =\r
+\r
+\r
+# Optimization level, can be [0, 1, 2, 3, s]. \r
+#     0 = turn off optimization. s = optimize for size.\r
+#     (Note: 3 is not always the best optimization level. See avr-libc FAQ.)\r
+OPT = s\r
+\r
+\r
+# Debugging format.\r
+#     Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs.\r
+#     AVR Studio 4.10 requires dwarf-2.\r
+#     AVR [Extended] COFF format requires stabs, plus an avr-objcopy run.\r
+DEBUG = dwarf-2\r
+\r
+\r
+# List any extra directories to look for include files here.\r
+#     Each directory must be seperated by a space.\r
+#     Use forward slashes for directory separators.\r
+#     For a directory that has spaces, enclose it in quotes.\r
+EXTRAINCDIRS = $(LUFA_PATH)/\r
+\r
+\r
+# Compiler flag to set the C Standard level.\r
+#     c89   = "ANSI" C\r
+#     gnu89 = c89 plus GCC extensions\r
+#     c99   = ISO C99 standard (not yet fully implemented)\r
+#     gnu99 = c99 plus GCC extensions\r
+CSTANDARD = -std=gnu99\r
+\r
+\r
+# Place -D or -U options here for C sources\r
+CDEFS  = -DF_CPU=$(F_CPU)UL -DF_CLOCK=$(F_CLOCK)UL -DBOARD=BOARD_$(BOARD)\r
+CDEFS += -DUSE_NONSTANDARD_DESCRIPTOR_NAMES -DNO_STREAM_CALLBACKS -DUSB_DEVICE_ONLY\r
+CDEFS += -DFIXED_CONTROL_ENDPOINT_SIZE=8 -DUSE_SINGLE_DEVICE_CONFIGURATION\r
+CDEFS += -DUSE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)"\r
+\r
+\r
+# Place -D or -U options here for ASM sources\r
+ADEFS = -DF_CPU=$(F_CPU)\r
+\r
+\r
+# Place -D or -U options here for C++ sources\r
+CPPDEFS = -DF_CPU=$(F_CPU)UL\r
+#CPPDEFS += -D__STDC_LIMIT_MACROS\r
+#CPPDEFS += -D__STDC_CONSTANT_MACROS\r
+\r
+\r
+\r
+#---------------- Compiler Options C ----------------\r
+#  -g*:          generate debugging information\r
+#  -O*:          optimization level\r
+#  -f...:        tuning, see GCC manual and avr-libc documentation\r
+#  -Wall...:     warning level\r
+#  -Wa,...:      tell GCC to pass this to the assembler.\r
+#    -adhlns...: create assembler listing\r
+CFLAGS = -g$(DEBUG)\r
+CFLAGS += $(CDEFS)\r
+CFLAGS += -O$(OPT)\r
+CFLAGS += -funsigned-char\r
+CFLAGS += -funsigned-bitfields\r
+CFLAGS += -ffunction-sections\r
+CFLAGS += -fpack-struct\r
+CFLAGS += -fshort-enums\r
+CFLAGS += -finline-limit=20\r
+CFLAGS += -Wall\r
+CFLAGS += -Wstrict-prototypes\r
+CFLAGS += -Wundef\r
+#CFLAGS += -fno-unit-at-a-time\r
+#CFLAGS += -Wunreachable-code\r
+#CFLAGS += -Wsign-compare\r
+CFLAGS += -Wa,-adhlns=$(<:%.c=$(OBJDIR)/%.lst)\r
+CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))\r
+CFLAGS += $(CSTANDARD)\r
+\r
+\r
+#---------------- Compiler Options C++ ----------------\r
+#  -g*:          generate debugging information\r
+#  -O*:          optimization level\r
+#  -f...:        tuning, see GCC manual and avr-libc documentation\r
+#  -Wall...:     warning level\r
+#  -Wa,...:      tell GCC to pass this to the assembler.\r
+#    -adhlns...: create assembler listing\r
+CPPFLAGS = -g$(DEBUG)\r
+CPPFLAGS += $(CPPDEFS)\r
+CPPFLAGS += -O$(OPT)\r
+CPPFLAGS += -funsigned-char\r
+CPPFLAGS += -funsigned-bitfields\r
+CPPFLAGS += -fpack-struct\r
+CPPFLAGS += -fshort-enums\r
+CPPFLAGS += -fno-exceptions\r
+CPPFLAGS += -Wall\r
+CFLAGS += -Wundef\r
+#CPPFLAGS += -mshort-calls\r
+#CPPFLAGS += -fno-unit-at-a-time\r
+#CPPFLAGS += -Wstrict-prototypes\r
+#CPPFLAGS += -Wunreachable-code\r
+#CPPFLAGS += -Wsign-compare\r
+CPPFLAGS += -Wa,-adhlns=$(<:%.cpp=$(OBJDIR)/%.lst)\r
+CPPFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))\r
+#CPPFLAGS += $(CSTANDARD)\r
+\r
+\r
+#---------------- Assembler Options ----------------\r
+#  -Wa,...:   tell GCC to pass this to the assembler.\r
+#  -adhlns:   create listing\r
+#  -gstabs:   have the assembler create line number information; note that\r
+#             for use in COFF files, additional information about filenames\r
+#             and function names needs to be present in the assembler source\r
+#             files -- see avr-libc docs [FIXME: not yet described there]\r
+#  -listing-cont-lines: Sets the maximum number of continuation lines of hex \r
+#       dump that will be displayed for a given single line of source input.\r
+ASFLAGS = $(ADEFS) -Wa,-adhlns=$(<:%.S=$(OBJDIR)/%.lst),-gstabs,--listing-cont-lines=100\r
+\r
+\r
+#---------------- Library Options ----------------\r
+# Minimalistic printf version\r
+PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min\r
+\r
+# Floating point printf version (requires MATH_LIB = -lm below)\r
+PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt\r
+\r
+# If this is left blank, then it will use the Standard printf version.\r
+PRINTF_LIB = \r
+#PRINTF_LIB = $(PRINTF_LIB_MIN)\r
+#PRINTF_LIB = $(PRINTF_LIB_FLOAT)\r
+\r
+\r
+# Minimalistic scanf version\r
+SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min\r
+\r
+# Floating point + %[ scanf version (requires MATH_LIB = -lm below)\r
+SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt\r
+\r
+# If this is left blank, then it will use the Standard scanf version.\r
+SCANF_LIB = \r
+#SCANF_LIB = $(SCANF_LIB_MIN)\r
+#SCANF_LIB = $(SCANF_LIB_FLOAT)\r
+\r
+\r
+MATH_LIB = -lm\r
+\r
+\r
+# List any extra directories to look for libraries here.\r
+#     Each directory must be seperated by a space.\r
+#     Use forward slashes for directory separators.\r
+#     For a directory that has spaces, enclose it in quotes.\r
+EXTRALIBDIRS = \r
+\r
+\r
+\r
+#---------------- External Memory Options ----------------\r
+\r
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),\r
+# used for variables (.data/.bss) and heap (malloc()).\r
+#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff\r
+\r
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),\r
+# only used for heap (malloc()).\r
+#EXTMEMOPTS = -Wl,--section-start,.data=0x801100,--defsym=__heap_end=0x80ffff\r
+\r
+EXTMEMOPTS =\r
+\r
+\r
+\r
+#---------------- Linker Options ----------------\r
+#  -Wl,...:     tell GCC to pass this to linker.\r
+#    -Map:      create map file\r
+#    --cref:    add cross reference to  map file\r
+LDFLAGS = -Wl,-Map=$(TARGET).map,--cref\r
+LDFLAGS += -Wl,--relax \r
+LDFLAGS += -Wl,--gc-sections\r
+LDFLAGS += $(EXTMEMOPTS)\r
+LDFLAGS += $(patsubst %,-L%,$(EXTRALIBDIRS))\r
+LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)\r
+#LDFLAGS += -T linker_script.x\r
+\r
+\r
+\r
+#---------------- Programming Options (avrdude) ----------------\r
+\r
+# Programming hardware: alf avr910 avrisp bascom bsd \r
+# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500\r
+#\r
+# Type: avrdude -c ?\r
+# to get a full listing.\r
+#\r
+AVRDUDE_PROGRAMMER = jtagmkII\r
+\r
+# com1 = serial port. Use lpt1 to connect to parallel port.\r
+AVRDUDE_PORT = usb\r
+\r
+AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex\r
+#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep\r
+\r
+\r
+# Uncomment the following if you want avrdude's erase cycle counter.\r
+# Note that this counter needs to be initialized first using -Yn,\r
+# see avrdude manual.\r
+#AVRDUDE_ERASE_COUNTER = -y\r
+\r
+# Uncomment the following if you do /not/ wish a verification to be\r
+# performed after programming the device.\r
+#AVRDUDE_NO_VERIFY = -V\r
+\r
+# Increase verbosity level.  Please use this when submitting bug\r
+# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude> \r
+# to submit bug reports.\r
+#AVRDUDE_VERBOSE = -v -v\r
+\r
+AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)\r
+AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY)\r
+AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE)\r
+AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER)\r
+\r
+\r
+\r
+#---------------- Debugging Options ----------------\r
+\r
+# For simulavr only - target MCU frequency.\r
+DEBUG_MFREQ = $(F_CPU)\r
+\r
+# Set the DEBUG_UI to either gdb or insight.\r
+# DEBUG_UI = gdb\r
+DEBUG_UI = insight\r
+\r
+# Set the debugging back-end to either avarice, simulavr.\r
+DEBUG_BACKEND = avarice\r
+#DEBUG_BACKEND = simulavr\r
+\r
+# GDB Init Filename.\r
+GDBINIT_FILE = __avr_gdbinit\r
+\r
+# When using avarice settings for the JTAG\r
+JTAG_DEV = /dev/com1\r
+\r
+# Debugging port used to communicate between GDB / avarice / simulavr.\r
+DEBUG_PORT = 4242\r
+\r
+# Debugging host used to communicate between GDB / avarice / simulavr, normally\r
+#     just set to localhost unless doing some sort of crazy debugging when \r
+#     avarice is running on a different computer.\r
+DEBUG_HOST = localhost\r
+\r
+\r
+\r
+#============================================================================\r
+\r
+\r
+# Define programs and commands.\r
+SHELL = sh\r
+CC = avr-gcc\r
+OBJCOPY = avr-objcopy\r
+OBJDUMP = avr-objdump\r
+SIZE = avr-size\r
+AR = avr-ar rcs\r
+NM = avr-nm\r
+AVRDUDE = avrdude\r
+REMOVE = rm -f\r
+REMOVEDIR = rm -rf\r
+COPY = cp\r
+WINSHELL = cmd\r
+\r
+# Define Messages\r
+# English\r
+MSG_ERRORS_NONE = Errors: none\r
+MSG_BEGIN = -------- begin --------\r
+MSG_END = --------  end  --------\r
+MSG_SIZE_BEFORE = Size before: \r
+MSG_SIZE_AFTER = Size after:\r
+MSG_COFF = Converting to AVR COFF:\r
+MSG_EXTENDED_COFF = Converting to AVR Extended COFF:\r
+MSG_FLASH = Creating load file for Flash:\r
+MSG_EEPROM = Creating load file for EEPROM:\r
+MSG_EXTENDED_LISTING = Creating Extended Listing:\r
+MSG_SYMBOL_TABLE = Creating Symbol Table:\r
+MSG_LINKING = Linking:\r
+MSG_COMPILING = Compiling C:\r
+MSG_COMPILING_CPP = Compiling C++:\r
+MSG_ASSEMBLING = Assembling:\r
+MSG_CLEANING = Cleaning project:\r
+MSG_CREATING_LIBRARY = Creating library:\r
+\r
+\r
+\r
+\r
+# Define all object files.\r
+OBJ = $(SRC:%.c=$(OBJDIR)/%.o) $(CPPSRC:%.cpp=$(OBJDIR)/%.o) $(ASRC:%.S=$(OBJDIR)/%.o) \r
+\r
+# Define all listing files.\r
+LST = $(SRC:%.c=$(OBJDIR)/%.lst) $(CPPSRC:%.cpp=$(OBJDIR)/%.lst) $(ASRC:%.S=$(OBJDIR)/%.lst) \r
+\r
+\r
+# Compiler flags to generate dependency files.\r
+GENDEPFLAGS = -MMD -MP -MF .dep/$(@F).d\r
+\r
+\r
+# Combine all necessary flags and optional flags.\r
+# Add target processor to flags.\r
+ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS)\r
+ALL_CPPFLAGS = -mmcu=$(MCU) -I. -x c++ $(CPPFLAGS) $(GENDEPFLAGS)\r
+ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)\r
+\r
+\r
+\r
+\r
+\r
+# Default target.\r
+all: begin gccversion sizebefore build checkhooks checklibmode checkboard sizeafter end\r
+\r
+# Change the build target to build a HEX file or a library.\r
+build: elf hex eep lss sym\r
+#build: lib\r
+\r
+\r
+elf: $(TARGET).elf\r
+hex: $(TARGET).hex\r
+eep: $(TARGET).eep\r
+lss: $(TARGET).lss\r
+sym: $(TARGET).sym\r
+LIBNAME=lib$(TARGET).a\r
+lib: $(LIBNAME)\r
+\r
+\r
+\r
+# Eye candy.\r
+# AVR Studio 3.x does not check make's exit code but relies on\r
+# the following magic strings to be generated by the compile job.\r
+begin:\r
+       @echo\r
+       @echo $(MSG_BEGIN)\r
+\r
+end:\r
+       @echo $(MSG_END)\r
+       @echo\r
+\r
+\r
+# Display size of file.\r
+HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex\r
+ELFSIZE = $(SIZE) $(MCU_FLAG) $(FORMAT_FLAG) $(TARGET).elf\r
+MCU_FLAG = $(shell $(SIZE) --help | grep -- --mcu > /dev/null && echo --mcu=$(MCU) )\r
+FORMAT_FLAG = $(shell $(SIZE) --help | grep -- --format=.*avr > /dev/null && echo --format=avr )\r
+\r
+sizebefore:\r
+       @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \\r
+       2>/dev/null; echo; fi\r
+\r
+sizeafter:\r
+       @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \\r
+       2>/dev/null; echo; fi\r
+\r
+checkhooks: build\r
+       @echo\r
+       @echo ------- Unhooked LUFA Events -------\r
+       @$(shell) (grep -s '^EVENT_.*LUFA/.*\\.o' $(TARGET).map | \\r
+                  cut -d' ' -f1 | cut -d'_' -f2- | grep ".*") || \\r
+                          echo "(None)"\r
+       @echo ------------------------------------\r
+\r
+checklibmode:\r
+       @echo\r
+       @echo ----------- Library Mode -----------\r
+       @$(shell) ($(CC) $(ALL_CFLAGS) -E -dM - < /dev/null \\r
+                 | grep 'USB_\(DEVICE\|HOST\)_ONLY' | cut -d' ' -f2 | grep ".*") \\r
+                 || echo "No specific mode (both device and host mode allowable)."\r
+       @echo ------------------------------------\r
+\r
+checkboard:\r
+       @echo\r
+       @echo ---------- Selected Board ----------\r
+       @echo Selected board model is $(BOARD).\r
+       @echo ------------------------------------\r
+       \r
+# Display compiler version information.\r
+gccversion : \r
+       @$(CC) --version\r
+\r
+\r
+\r
+# Program the device.  \r
+program: $(TARGET).hex $(TARGET).eep\r
+       $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)\r
+\r
+flip: $(TARGET).hex\r
+       batchisp -hardware usb -device $(MCU) -operation erase f\r
+       batchisp -hardware usb -device $(MCU) -operation loadbuffer $(TARGET).hex program\r
+       batchisp -hardware usb -device $(MCU) -operation start reset 0\r
+\r
+dfu: $(TARGET).hex\r
+       dfu-programmer $(MCU) erase\r
+       dfu-programmer $(MCU) flash --debug 1 $(TARGET).hex\r
+       dfu-programmer $(MCU) reset\r
+\r
+flip-ee: $(TARGET).hex $(TARGET).eep\r
+       copy $(TARGET).eep $(TARGET)eep.hex\r
+       batchisp -hardware usb -device $(MCU) -operation memory EEPROM erase\r
+       batchisp -hardware usb -device $(MCU) -operation memory EEPROM loadbuffer $(TARGET)eep.hex program\r
+       batchisp -hardware usb -device $(MCU) -operation start reset 0\r
+\r
+dfu-ee: $(TARGET).hex $(TARGET).eep\r
+       dfu-programmer $(MCU) flash-eeprom --debug 1 --suppress-bootloader-mem $(TARGET).eep\r
+       dfu-programmer $(MCU) reset\r
+\r
+\r
+# Generate avr-gdb config/init file which does the following:\r
+#     define the reset signal, load the target file, connect to target, and set \r
+#     a breakpoint at main().\r
+gdb-config: \r
+       @$(REMOVE) $(GDBINIT_FILE)\r
+       @echo define reset >> $(GDBINIT_FILE)\r
+       @echo SIGNAL SIGHUP >> $(GDBINIT_FILE)\r
+       @echo end >> $(GDBINIT_FILE)\r
+       @echo file $(TARGET).elf >> $(GDBINIT_FILE)\r
+       @echo target remote $(DEBUG_HOST):$(DEBUG_PORT)  >> $(GDBINIT_FILE)\r
+ifeq ($(DEBUG_BACKEND),simulavr)\r
+       @echo load  >> $(GDBINIT_FILE)\r
+endif\r
+       @echo break main >> $(GDBINIT_FILE)\r
+\r
+debug: gdb-config $(TARGET).elf\r
+ifeq ($(DEBUG_BACKEND), avarice)\r
+       @echo Starting AVaRICE - Press enter when "waiting to connect" message displays.\r
+       @$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \\r
+       $(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT)\r
+       @$(WINSHELL) /c pause\r
+\r
+else\r
+       @$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \\r
+       $(DEBUG_MFREQ) --port $(DEBUG_PORT)\r
+endif\r
+       @$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE)\r
+\r
+\r
+\r
+\r
+# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.\r
+COFFCONVERT = $(OBJCOPY) --debugging\r
+COFFCONVERT += --change-section-address .data-0x800000\r
+COFFCONVERT += --change-section-address .bss-0x800000\r
+COFFCONVERT += --change-section-address .noinit-0x800000\r
+COFFCONVERT += --change-section-address .eeprom-0x810000\r
+\r
+\r
+\r
+coff: $(TARGET).elf\r
+       @echo\r
+       @echo $(MSG_COFF) $(TARGET).cof\r
+       $(COFFCONVERT) -O coff-avr $< $(TARGET).cof\r
+\r
+\r
+extcoff: $(TARGET).elf\r
+       @echo\r
+       @echo $(MSG_EXTENDED_COFF) $(TARGET).cof\r
+       $(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof\r
+\r
+\r
+\r
+# Create final output files (.hex, .eep) from ELF output file.\r
+%.hex: %.elf\r
+       @echo\r
+       @echo $(MSG_FLASH) $@\r
+       $(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@\r
+\r
+%.eep: %.elf\r
+       @echo\r
+       @echo $(MSG_EEPROM) $@\r
+       -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \\r
+       --change-section-lma .eeprom=0 --no-change-warnings -O $(FORMAT) $< $@ || exit 0\r
+\r
+# Create extended listing file from ELF output file.\r
+%.lss: %.elf\r
+       @echo\r
+       @echo $(MSG_EXTENDED_LISTING) $@\r
+       $(OBJDUMP) -h -z -S $< > $@\r
+\r
+# Create a symbol table from ELF output file.\r
+%.sym: %.elf\r
+       @echo\r
+       @echo $(MSG_SYMBOL_TABLE) $@\r
+       $(NM) -n $< > $@\r
+\r
+\r
+\r
+# Create library from object files.\r
+.SECONDARY : $(TARGET).a\r
+.PRECIOUS : $(OBJ)\r
+%.a: $(OBJ)\r
+       @echo\r
+       @echo $(MSG_CREATING_LIBRARY) $@\r
+       $(AR) $@ $(OBJ)\r
+\r
+\r
+# Link: create ELF output file from object files.\r
+.SECONDARY : $(TARGET).elf\r
+.PRECIOUS : $(OBJ)\r
+%.elf: $(OBJ)\r
+       @echo\r
+       @echo $(MSG_LINKING) $@\r
+       $(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)\r
+\r
+\r
+# Compile: create object files from C source files.\r
+$(OBJDIR)/%.o : %.c\r
+       @echo\r
+       @echo $(MSG_COMPILING) $<\r
+       $(CC) -c $(ALL_CFLAGS) $< -o $@ \r
+\r
+\r
+# Compile: create object files from C++ source files.\r
+$(OBJDIR)/%.o : %.cpp\r
+       @echo\r
+       @echo $(MSG_COMPILING_CPP) $<\r
+       $(CC) -c $(ALL_CPPFLAGS) $< -o $@ \r
+\r
+\r
+# Compile: create assembler files from C source files.\r
+%.s : %.c\r
+       $(CC) -S $(ALL_CFLAGS) $< -o $@\r
+\r
+\r
+# Compile: create assembler files from C++ source files.\r
+%.s : %.cpp\r
+       $(CC) -S $(ALL_CPPFLAGS) $< -o $@\r
+\r
+\r
+# Assemble: create object files from assembler source files.\r
+$(OBJDIR)/%.o : %.S\r
+       @echo\r
+       @echo $(MSG_ASSEMBLING) $<\r
+       $(CC) -c $(ALL_ASFLAGS) $< -o $@\r
+\r
+\r
+# Create preprocessed source for use in sending a bug report.\r
+%.i : %.c\r
+       $(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ \r
+       \r
+\r
+# Target: clean project.\r
+clean: begin clean_list clean_binary end\r
+\r
+clean_binary:\r
+       $(REMOVE) $(TARGET).hex\r
+       \r
+clean_list:\r
+       @echo $(MSG_CLEANING)\r
+       $(REMOVE) $(TARGET).eep\r
+       $(REMOVE) $(TARGET)eep.hex\r
+       $(REMOVE) $(TARGET).cof\r
+       $(REMOVE) $(TARGET).elf\r
+       $(REMOVE) $(TARGET).map\r
+       $(REMOVE) $(TARGET).sym\r
+       $(REMOVE) $(TARGET).lss\r
+       $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.o)\r
+       $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.lst)\r
+       $(REMOVE) $(SRC:.c=.s)\r
+       $(REMOVE) $(SRC:.c=.d)\r
+       $(REMOVE) $(SRC:.c=.i)\r
+       $(REMOVEDIR) .dep\r
+\r
+\r
+doxygen:\r
+       @echo Generating Project Documentation...\r
+       @doxygen Doxygen.conf\r
+       @echo Documentation Generation Complete.\r
+\r
+clean_doxygen:\r
+       rm -rf Documentation\r
+\r
+# Create object files directory\r
+$(shell mkdir $(OBJDIR) 2>/dev/null)\r
+\r
+\r
+# Include the dependency files.\r
+-include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)\r
+\r
+\r
+# Listing of phony targets.\r
+.PHONY : all checkhooks checklibmode checkboard   \\r
+begin finish end sizebefore sizeafter gccversion  \\r
+build elf hex eep lss sym coff extcoff clean      \\r
+clean_list clean_binary program debug gdb-config  \\r
+doxygen dfu flip flip-ee dfu-ee
\ No newline at end of file
diff --git a/Demos/Device/ClassDriver/AudioOutput/AudioOutput.aps b/Demos/Device/ClassDriver/AudioOutput/AudioOutput.aps
new file mode 100644 (file)
index 0000000..a01ba8f
--- /dev/null
@@ -0,0 +1 @@
+<AVRStudio><MANAGEMENT><ProjectName>AudioOutput</ProjectName><Created>30-Sep-2008 14:03:51</Created><LastEdit>30-Sep-2008 14:04:06</LastEdit><ICON>241</ICON><ProjectType>0</ProjectType><Created>30-Sep-2008 14:03:51</Created><Version>4</Version><Build>4, 14, 0, 589</Build><ProjectTypeName>AVR GCC</ProjectTypeName></MANAGEMENT><CODE_CREATION><ObjectFile></ObjectFile><EntryFile></EntryFile><SaveFolder>C:\Users\Dean\Documents\Electronics\Projects\WORK\MyUSBWORK\Demos\AudioOutput\</SaveFolder></CODE_CREATION><DEBUG_TARGET><CURRENT_TARGET></CURRENT_TARGET><CURRENT_PART></CURRENT_PART><BREAKPOINTS></BREAKPOINTS><IO_EXPAND><HIDE>false</HIDE></IO_EXPAND><REGISTERNAMES><Register>R00</Register><Register>R01</Register><Register>R02</Register><Register>R03</Register><Register>R04</Register><Register>R05</Register><Register>R06</Register><Register>R07</Register><Register>R08</Register><Register>R09</Register><Register>R10</Register><Register>R11</Register><Register>R12</Register><Register>R13</Register><Register>R14</Register><Register>R15</Register><Register>R16</Register><Register>R17</Register><Register>R18</Register><Register>R19</Register><Register>R20</Register><Register>R21</Register><Register>R22</Register><Register>R23</Register><Register>R24</Register><Register>R25</Register><Register>R26</Register><Register>R27</Register><Register>R28</Register><Register>R29</Register><Register>R30</Register><Register>R31</Register></REGISTERNAMES><COM></COM><COMType>0</COMType><WATCHNUM>0</WATCHNUM><WATCHNAMES><Pane0></Pane0><Pane1></Pane1><Pane2></Pane2><Pane3></Pane3></WATCHNAMES><BreakOnTrcaeFull>0</BreakOnTrcaeFull></DEBUG_TARGET><Debugger><Triggers></Triggers></Debugger><AVRGCCPLUGIN><FILES><SOURCEFILE>AudioOutput.c</SOURCEFILE><SOURCEFILE>Descriptors.c</SOURCEFILE><HEADERFILE>AudioOutput.h</HEADERFILE><HEADERFILE>Descriptors.h</HEADERFILE><OTHERFILE>makefile</OTHERFILE></FILES><CONFIGS><CONFIG><NAME>default</NAME><USESEXTERNALMAKEFILE>YES</USESEXTERNALMAKEFILE><EXTERNALMAKEFILE>makefile</EXTERNALMAKEFILE><PART>atmega128</PART><HEX>1</HEX><LIST>1</LIST><MAP>1</MAP><OUTPUTFILENAME>AudioOutput.elf</OUTPUTFILENAME><OUTPUTDIR>default\</OUTPUTDIR><ISDIRTY>1</ISDIRTY><OPTIONS/><INCDIRS/><LIBDIRS/><LIBS/><LINKOBJECTS/><OPTIONSFORALL>-Wall -gdwarf-2 -std=gnu99 -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums</OPTIONSFORALL><LINKEROPTIONS></LINKEROPTIONS><SEGMENTS/></CONFIG></CONFIGS><LASTCONFIG>default</LASTCONFIG><USES_WINAVR>1</USES_WINAVR><GCC_LOC>C:\WinAVR-20080512\bin\avr-gcc.exe</GCC_LOC><MAKE_LOC>C:\WinAVR-20080512\utils\bin\make.exe</MAKE_LOC></AVRGCCPLUGIN><IOView><usergroups/><sort sorted="0" column="0" ordername="0" orderaddress="0" ordergroup="0"/></IOView><Files></Files><Events><Bookmarks></Bookmarks></Events><Trace><Filters></Filters></Trace></AVRStudio>\r
diff --git a/Demos/Device/ClassDriver/AudioOutput/AudioOutput.c b/Demos/Device/ClassDriver/AudioOutput/AudioOutput.c
new file mode 100644 (file)
index 0000000..8c3bf61
--- /dev/null
@@ -0,0 +1,206 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  Main source file for the AudioOutput demo. This file contains the main tasks of\r
+ *  the demo and is responsible for the initial application hardware configuration.\r
+ */\r
+\r
+#include "AudioOutput.h"\r
+\r
+/** LUFA Audio Class driver interface configuration and state information. This structure is\r
+ *  passed to all Audio Class driver functions, so that multiple instances of the same class\r
+ *  within a device can be differentiated from one another.\r
+ */\r
+USB_ClassInfo_Audio_t Speaker_Audio_Interface =\r
+       {\r
+               .StreamingInterfaceNumber = 1,\r
+\r
+               .DataOUTEndpointNumber    = AUDIO_STREAM_EPNUM,\r
+               .DataOUTEndpointSize      = AUDIO_STREAM_EPSIZE,\r
+       };\r
+\r
+/** Main program entry point. This routine contains the overall program flow, including initial\r
+ *  setup of all components and the main program loop.\r
+ */\r
+int main(void)\r
+{\r
+       SetupHardware();\r
+\r
+       LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);\r
+       \r
+       for (;;)\r
+       {\r
+               if (Speaker_Audio_Interface.InterfaceEnabled)\r
+                 ProcessNextSample();\r
+\r
+               USB_Audio_USBTask(&Speaker_Audio_Interface);\r
+               USB_USBTask();\r
+       }\r
+}\r
+\r
+/** Configures the board hardware and chip peripherals for the demo's functionality. */\r
+void SetupHardware(void)\r
+{\r
+       /* Disable watchdog if enabled by bootloader/fuses */\r
+       MCUSR &= ~(1 << WDRF);\r
+       wdt_disable();\r
+\r
+       /* Disable clock division */\r
+       clock_prescale_set(clock_div_1);\r
+\r
+       /* Hardware Initialization */\r
+       LEDs_Init();\r
+       USB_Init();\r
+}\r
+\r
+/** Processes the next audio sample by reading the last ADC conversion and writing it to the audio\r
+ *  interface, each time the sample reload timer period elapses to give a constant sample rate.\r
+ */\r
+void ProcessNextSample(void)\r
+{\r
+       if ((TIFR0 & (1 << OCF0A)) && USB_Audio_IsSampleReceived(&Speaker_Audio_Interface))\r
+       {\r
+               /* Clear the sample reload timer */\r
+               TIFR0 |= (1 << OCF0A);\r
+\r
+               /* Retrieve the signed 16-bit left and right audio samples */\r
+               int16_t LeftSample_16Bit  = (int16_t)USB_Audio_ReadSample16();\r
+               int16_t RightSample_16Bit = (int16_t)USB_Audio_ReadSample16();\r
+\r
+               /* Massage signed 16-bit left and right audio samples into signed 8-bit */\r
+               int8_t  LeftSample_8Bit   = (LeftSample_16Bit  >> 8);\r
+               int8_t  RightSample_8Bit  = (RightSample_16Bit >> 8);\r
+                       \r
+               /* Mix the two channels together to produce a mono, 8-bit sample */\r
+               int8_t  MixedSample_8Bit  = (((int16_t)LeftSample_8Bit + (int16_t)RightSample_8Bit) >> 1);\r
+\r
+#if defined(AUDIO_OUT_MONO)\r
+               /* Load the sample into the PWM timer channel */\r
+               OCRxA = ((uint8_t)MixedSample_8Bit ^ (1 << 7));\r
+#elif defined(AUDIO_OUT_STEREO)\r
+               /* Load the dual 8-bit samples into the PWM timer channels */\r
+               OCRxA = ((uint8_t)LeftSample_8Bit  ^ (1 << 7));\r
+               OCRxB = ((uint8_t)RightSample_8Bit ^ (1 << 7));\r
+#elif defined(AUDIO_OUT_PORTC)\r
+               PORTC = MixedSample_8Bit;\r
+#else\r
+               uint8_t LEDMask = LEDS_NO_LEDS;\r
+\r
+               /* Make mixed sample value positive (absolute) */\r
+               if (MixedSample_8Bit < 0)\r
+                 MixedSample_8Bit = -MixedSample_8Bit;\r
+\r
+               if (MixedSample_8Bit > ((128 / 8) * 1))\r
+                 LEDMask |= LEDS_LED1;\r
+                 \r
+               if (MixedSample_8Bit > ((128 / 8) * 2))\r
+                 LEDMask |= LEDS_LED2;\r
+                 \r
+               if (MixedSample_8Bit > ((128 / 8) * 3))\r
+                 LEDMask |= LEDS_LED3;\r
+\r
+               if (MixedSample_8Bit > ((128 / 8) * 4))\r
+                 LEDMask |= LEDS_LED4;\r
+\r
+               LEDs_SetAllLEDs(LEDMask);\r
+#endif\r
+       }\r
+}\r
+\r
+/** Event handler for the library USB Connection event. */\r
+void EVENT_USB_Connect(void)\r
+{\r
+       LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING);\r
+       \r
+       /* Sample reload timer initialization */\r
+       OCR0A   = (F_CPU / AUDIO_SAMPLE_FREQUENCY) - 1;\r
+       TCCR0A  = (1 << WGM01);  // CTC mode\r
+       TCCR0B  = (1 << CS00);   // Fcpu speed\r
+\r
+#if defined(AUDIO_OUT_MONO)\r
+       /* Set speaker as output */\r
+       DDRC   |= (1 << 6);\r
+#elif defined(AUDIO_OUT_STEREO)\r
+       /* Set speakers as outputs */\r
+       DDRC   |= ((1 << 6) | (1 << 5));\r
+#elif defined(AUDIO_OUT_PORTC)\r
+       /* Set PORTC as outputs */\r
+       DDRC   |= 0xFF;\r
+#endif\r
+\r
+#if (defined(AUDIO_OUT_MONO) || defined(AUDIO_OUT_STEREO))\r
+       /* PWM speaker timer initialization */\r
+       TCCRxA  = ((1 << WGMx0) | (1 << COMxA1) | (1 << COMxA0)\r
+                                                       | (1 << COMxB1) | (1 << COMxB0)); // Set on match, clear on TOP\r
+       TCCRxB  = ((1 << WGMx2) | (1 << CSx0));  // Fast 8-Bit PWM, Fcpu speed\r
+#endif \r
+}\r
+\r
+/** Event handler for the library USB Disconnection event. */\r
+void EVENT_USB_Disconnect(void)\r
+{\r
+       LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);\r
+\r
+       /* Stop the sample reload timer */\r
+       TCCR0B = 0;\r
+\r
+#if (defined(AUDIO_OUT_MONO) || defined(AUDIO_OUT_STEREO))\r
+       /* Stop the PWM generation timer */\r
+       TCCRxB = 0;\r
+#endif         \r
+\r
+#if defined(AUDIO_OUT_MONO)\r
+       /* Set speaker as input to reduce current draw */\r
+       DDRC   &= ~(1 << 6);\r
+#elif defined(AUDIO_OUT_STEREO)\r
+       /* Set speakers as inputs to reduce current draw */\r
+       DDRC   &= ~((1 << 6) | (1 << 5));\r
+#elif defined(AUDIO_OUT_PORTC)\r
+       /* Set PORTC low */\r
+       PORTC  = 0x00;\r
+#endif\r
+}\r
+\r
+/** Event handler for the library USB Configuration Changed event. */\r
+void EVENT_USB_ConfigurationChanged(void)\r
+{\r
+       LEDs_SetAllLEDs(LEDMASK_USB_READY);\r
+       \r
+       if (!(USB_Audio_ConfigureEndpoints(&Speaker_Audio_Interface)))\r
+         LEDs_SetAllLEDs(LEDMASK_USB_ERROR);\r
+}\r
+\r
+/** Event handler for the library USB Unhandled Control Packet event. */\r
+void EVENT_USB_UnhandledControlPacket(void)\r
+{\r
+       USB_Audio_ProcessControlPacket(&Speaker_Audio_Interface);\r
+}\r
diff --git a/Demos/Device/ClassDriver/AudioOutput/AudioOutput.h b/Demos/Device/ClassDriver/AudioOutput/AudioOutput.h
new file mode 100644 (file)
index 0000000..e8435e3
--- /dev/null
@@ -0,0 +1,123 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  Header file for AudioOutput.c.\r
+ */\r
+\r
+#ifndef _AUDIO_OUTPUT_H_\r
+#define _AUDIO_OUTPUT_H_\r
+\r
+       /* Includes: */\r
+               #include <avr/io.h>\r
+               #include <avr/wdt.h>\r
+               #include <avr/power.h>\r
+\r
+               #include "Descriptors.h"\r
+               \r
+               #include <LUFA/Version.h>\r
+               #include <LUFA/Drivers/Board/LEDs.h>\r
+               #include <LUFA/Drivers/Board/Joystick.h>\r
+               #include <LUFA/Drivers/Peripheral/ADC.h>\r
+               #include <LUFA/Drivers/USB/USB.h>\r
+               #include <LUFA/Drivers/USB/Class/Device/Audio.h>\r
+       \r
+       /* Macros: */\r
+               #if defined(USB_FULL_CONTROLLER) || defined(USB_MODIFIED_FULL_CONTROLLER)\r
+                       #define TCCRxA          TCCR3A\r
+                       #define TCCRxB          TCCR3B\r
+                       #define OCRxA           OCR3A\r
+                       #define OCRxB           OCR3B\r
+                       #define WGMx0           WGM30\r
+                       #define WGMx2           WGM32\r
+                       #define COMxA1          COM3A1\r
+                       #define COMxA0          COM3A0\r
+                       #define COMxB1          COM3B1\r
+                       #define COMxB0          COM3B0\r
+                       #define CSx0            CS30\r
+               #else\r
+                       /** Timer count register used for left channel PWM audio output (or mixed output in mono output mode) */\r
+                       #define TCCRxA          TCCR1A\r
+\r
+                       /** Timer count register used for right channel PWM audio output */\r
+                       #define TCCRxB          TCCR1B\r
+\r
+                       /** Timer compare register used for left channel PWM audio output (or mixed output in mono output mode) */\r
+                       #define OCRxA           OCR1A\r
+\r
+                       /** Timer compare register used for right channel PWM audio output */\r
+                       #define OCRxB           OCR1B\r
+\r
+                       /** Timer control register mask used to select PWM mode */\r
+                       #define WGMx0           WGM10\r
+\r
+                       /** Timer control register mask used to select PWM mode */\r
+                       #define WGMx2           WGM12\r
+\r
+                       /** Timer control register mask used to set, clear or toggle channel output pin on match */\r
+                       #define COMxA1          COM1A1\r
+\r
+                       /** Timer control register mask used to set, clear or toggle channel output pin on match */\r
+                       #define COMxA0          COM1A0\r
+\r
+                       /** Timer control register mask used to set, clear or toggle channel output pin on match */\r
+                       #define COMxB1          COM1B1\r
+\r
+                       /** Timer control register mask used to set, clear or toggle channel output pin on match */\r
+                       #define COMxB0          COM1B0\r
+\r
+                       /** Timer control register mask used to start the timer at Fcpu clock rate */\r
+                       #define CSx0            CS10\r
+               #endif\r
+               \r
+       /* Macros: */\r
+               /** LED mask for the library LED driver, to indicate that the USB interface is not ready. */\r
+               #define LEDMASK_USB_NOTREADY      LEDS_LED1\r
+\r
+               /** LED mask for the library LED driver, to indicate that the USB interface is enumerating. */\r
+               #define LEDMASK_USB_ENUMERATING  (LEDS_LED2 | LEDS_LED3)\r
+\r
+               /** LED mask for the library LED driver, to indicate that the USB interface is ready. */\r
+               #define LEDMASK_USB_READY        (LEDS_LED2 | LEDS_LED4)\r
+\r
+               /** LED mask for the library LED driver, to indicate that an error has occurred in the USB interface. */\r
+               #define LEDMASK_USB_ERROR        (LEDS_LED1 | LEDS_LED3)\r
+               \r
+       /* Function Prototypes: */\r
+               void SetupHardware(void);\r
+               void ProcessNextSample(void);\r
+               \r
+               void EVENT_USB_Connect(void);\r
+               void EVENT_USB_Disconnect(void);\r
+               void EVENT_USB_ConfigurationChanged(void);\r
+               void EVENT_USB_UnhandledControlPacket(void);\r
+\r
+#endif\r
diff --git a/Demos/Device/ClassDriver/AudioOutput/AudioOutput.txt b/Demos/Device/ClassDriver/AudioOutput/AudioOutput.txt
new file mode 100644 (file)
index 0000000..a47f9b5
--- /dev/null
@@ -0,0 +1,93 @@
+/** \file\r
+ *\r
+ *  This file contains special DoxyGen information for the generation of the main page and other special\r
+ *  documentation pages. It is not a project source file.\r
+ */\r
\r
+/** \mainpage Audio Output Device Demo\r
+ *\r
+ *  \section SSec_Info USB Information:\r
+ *\r
+ *  The following table gives a rundown of the USB utilization of this demo.\r
+ *\r
+ *  <table>\r
+ *   <tr>\r
+ *    <td><b>USB Mode:</b></td>\r
+ *    <td>Device</td>\r
+ *   </tr>\r
+ *   <tr>\r
+ *    <td><b>USB Class:</b></td>\r
+ *    <td>Audio Class</td>\r
+ *   </tr>\r
+ *   <tr> \r
+ *    <td><b>USB Subclass:</b></td>\r
+ *    <td>Standard Audio Device</td>\r
+ *   </tr>\r
+ *   <tr>\r
+ *    <td><b>Relevant Standards:</b></td>\r
+ *    <td>USBIF Audio Class Specification</td>\r
+ *    <td>USBIF Audio Class Terminal Types Specification</td>\r
+ *    <td>USBIF Audio Data Formats Specification</td>\r
+ *   </tr>\r
+ *   <tr>\r
+ *    <td><b>Usable Speeds:</b></td>\r
+ *    <td>Full Speed Mode</td>\r
+ *   </tr>\r
+ *  </table>\r
+ *\r
+ *  \section SSec_Description Project Description: \r
+ *\r
+ *  Audio demonstration application. This gives a simple reference\r
+ *  application for implementing a USB Audio Output device using the\r
+ *  basic USB Audio drivers in all modern OSes (i.e. no special drivers\r
+ *  required).\r
+ *  \r
+ *  On start-up the system will automatically enumerate and function\r
+ *  as a USB speaker. Incoming audio will output in 8-bit PWM onto\r
+ *  the timer output (timer 3 for the AT90USBXXX6/7 USB AVRs, timer 1 for\r
+ *  the AT90USBXXX2 controller AVRs) compare channel A for AUDIO_OUT_MONO\r
+ *  mode, on channels A and B for AUDIO_OUT_STEREO and on the board LEDs\r
+ *  for AUDIO_OUT_LEDS mode. Decouple audio outputs with a capacitor and\r
+ *  attach to a speaker to hear the audio.\r
+ *  \r
+ *  Under Windows, if a driver request dialogue pops up, select the option\r
+ *  to automatically install the appropriate drivers.\r
+ *\r
+ *  \section SSec_Options Project Options\r
+ *\r
+ *  The following defines can be found in this demo, which can control the demo behaviour when defined, or changed in value.\r
+ *\r
+ *  <table>\r
+ *   <tr>\r
+ *    <td><b>Define Name:</b></td>\r
+ *    <td><b>Location:</b></td>\r
+ *    <td><b>Description:</b></td>\r
+ *   </tr>\r
+ *   <tr>\r
+ *    <td>AUDIO_OUT_STEREO</td>\r
+ *    <td>Makefile CDEFS</td>\r
+ *    <td>When defined, this outputs the audio samples in stereo to the timer output pins of the microcontroller.</td>\r
+ *   </tr>\r
+ *   <tr>\r
+ *    <td>AUDIO_OUT_MONO</td>\r
+ *    <td>Makefile CDEFS</td>\r
+ *    <td>When defined, this outputs the audio samples in mono to the timer output pin of the microcontroller.</td>\r
+ *   </tr>\r
+ *   <tr>\r
+ *    <td>AUDIO_OUT_LEDS</td>\r
+ *    <td>Makefile CDEFS</td>\r
+ *    <td>When defined, this outputs the audio samples in stereo to the board LEDs.</td>\r
+ *   </tr>\r
+ *   <tr>\r
+ *    <td>AUDIO_OUT_PORTC</td>\r
+ *    <td>Makefile CDEFS</td>\r
+ *    <td>When defined, this outputs the audio samples in mono to port C of the microcontroller, for connection to an\r
+ *        external DAC.</td>\r
+ *   </tr>\r
+ *   <tr>\r
+ *    <td>AUDIO_SAMPLE_FREQUENCY</td>\r
+ *    <td>Descriptors.h</td>\r
+ *    <td>Gives the audio sample rate per channel for the audio stream, in Hz.</td>\r
+ *   </tr>\r
+ *  </table>\r
+ */\r
diff --git a/Demos/Device/ClassDriver/AudioOutput/Descriptors.c b/Demos/Device/ClassDriver/AudioOutput/Descriptors.c
new file mode 100644 (file)
index 0000000..0039c2b
--- /dev/null
@@ -0,0 +1,314 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  USB Device Descriptors, for library use when in USB device mode. Descriptors are special \r
+ *  computer-readable structures which the host requests upon device enumeration, to determine\r
+ *  the device's capabilities and functions.  \r
+ */\r
\r
+#include "Descriptors.h"\r
+\r
+/** Device descriptor structure. This descriptor, located in FLASH memory, describes the overall\r
+ *  device characteristics, including the supported USB version, control endpoint size and the\r
+ *  number of device configurations. The descriptor is read out by the USB host when the enumeration\r
+ *  process begins.\r
+ */\r
+USB_Descriptor_Device_t PROGMEM DeviceDescriptor =\r
+{\r
+       .Header                 = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device},\r
+               \r
+       .USBSpecification       = VERSION_BCD(02.00),\r
+       .Class                  = 0x00,\r
+       .SubClass               = 0x00,\r
+       .Protocol               = 0x00,\r
+                               \r
+       .Endpoint0Size          = FIXED_CONTROL_ENDPOINT_SIZE,\r
+               \r
+       .VendorID               = 0x03EB,\r
+       .ProductID              = 0x2046,\r
+       .ReleaseNumber          = 0x0000,\r
+               \r
+       .ManufacturerStrIndex   = 0x01,\r
+       .ProductStrIndex        = 0x02,\r
+       .SerialNumStrIndex      = NO_DESCRIPTOR,\r
+               \r
+       .NumberOfConfigurations = 1\r
+};\r
+\r
+/** Configuration descriptor structure. This descriptor, located in FLASH memory, describes the usage\r
+ *  of the device in one of its supported configurations, including information about any device interfaces\r
+ *  and endpoints. The descriptor is read out by the USB host during the enumeration process when selecting\r
+ *  a configuration so that the host may correctly communicate with the USB device.\r
+ */\r
+USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =\r
+{\r
+       .Config = \r
+               {\r
+                       .Header                   = {.Size = sizeof(USB_Descriptor_Configuration_Header_t), .Type = DTYPE_Configuration},\r
+\r
+                       .TotalConfigurationSize   = sizeof(USB_Descriptor_Configuration_t),\r
+                       .TotalInterfaces          = 2,\r
+\r
+                       .ConfigurationNumber      = 1,\r
+                       .ConfigurationStrIndex    = NO_DESCRIPTOR,\r
+                               \r
+                       .ConfigAttributes         = (USB_CONFIG_ATTR_BUSPOWERED | USB_CONFIG_ATTR_SELFPOWERED),\r
+                       \r
+                       .MaxPowerConsumption      = USB_CONFIG_POWER_MA(100)\r
+               },\r
+               \r
+       .AudioControlInterface = \r
+               {\r
+                       .Header                   = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},\r
+\r
+                       .InterfaceNumber          = 0,\r
+                       .AlternateSetting         = 0,\r
+                       \r
+                       .TotalEndpoints           = 0,\r
+                               \r
+                       .Class                    = 0x01,\r
+                       .SubClass                 = 0x01,\r
+                       .Protocol                 = 0x00,\r
+                               \r
+                       .InterfaceStrIndex        = NO_DESCRIPTOR                       \r
+               },\r
+       \r
+       .AudioControlInterface_SPC = \r
+               {\r
+                       .Header                   = {.Size = sizeof(USB_AudioInterface_AC_t), .Type = DTYPE_AudioInterface},\r
+                       .Subtype                  = DSUBTYPE_Header,\r
+                       \r
+                       .ACSpecification          = VERSION_BCD(01.00),\r
+                       .TotalLength              = (sizeof(USB_AudioInterface_AC_t) +\r
+                                                  sizeof(USB_AudioInputTerminal_t) +\r
+                                                                          sizeof(USB_AudioOutputTerminal_t)),\r
+                       \r
+                       .InCollection             = 1,\r
+                       .InterfaceNumbers         = {1},                        \r
+               },\r
+\r
+       .InputTerminal = \r
+               {\r
+                       .Header                   = {.Size = sizeof(USB_AudioInputTerminal_t), .Type = DTYPE_AudioInterface},\r
+                       .Subtype                  = DSUBTYPE_InputTerminal,\r
+               \r
+                       .TerminalID               = 0x01,\r
+                       .TerminalType             = TERMINAL_STREAMING,\r
+                       .AssociatedOutputTerminal = 0x00,\r
+                       \r
+                       .TotalChannels            = 2,\r
+                       .ChannelConfig            = (CHANNEL_LEFT_FRONT | CHANNEL_RIGHT_FRONT),\r
+                       \r
+                       .ChannelStrIndex          = NO_DESCRIPTOR,\r
+                       .TerminalStrIndex         = NO_DESCRIPTOR\r
+               },\r
+\r
+       .OutputTerminal = \r
+               {\r
+                       .Header                   = {.Size = sizeof(USB_AudioOutputTerminal_t), .Type = DTYPE_AudioInterface},\r
+                       .Subtype                  = DSUBTYPE_OutputTerminal,\r
+               \r
+                       .TerminalID               = 0x02,\r
+                       .TerminalType             = TERMINAL_OUT_SPEAKER,\r
+                       .AssociatedInputTerminal  = 0x00,\r
+                       \r
+                       .SourceID                 = 0x01,\r
+                       \r
+                       .TerminalStrIndex         = NO_DESCRIPTOR                       \r
+               },\r
+\r
+       .AudioStreamInterface_Alt0 = \r
+               {\r
+                       .Header                   = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},\r
+\r
+                       .InterfaceNumber          = 1,\r
+                       .AlternateSetting         = 0,\r
+                       \r
+                       .TotalEndpoints           = 0,\r
+                               \r
+                       .Class                    = 0x01,\r
+                       .SubClass                 = 0x02,\r
+                       .Protocol                 = 0x00,\r
+                               \r
+                       .InterfaceStrIndex        = NO_DESCRIPTOR\r
+               },\r
+\r
+       .AudioStreamInterface_Alt1 = \r
+               {\r
+                       .Header                   = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},\r
+\r
+                       .InterfaceNumber          = 1,\r
+                       .AlternateSetting         = 1,\r
+                       \r
+                       .TotalEndpoints           = 1,\r
+                               \r
+                       .Class                    = 0x01,\r
+                       .SubClass                 = 0x02,\r
+                       .Protocol                 = 0x00,\r
+                               \r
+                       .InterfaceStrIndex        = NO_DESCRIPTOR\r
+               },\r
+               \r
+       .AudioStreamInterface_SPC = \r
+               {\r
+                       .Header                   = {.Size = sizeof(USB_AudioInterface_AS_t), .Type = DTYPE_AudioInterface},\r
+                       .Subtype                  = DSUBTYPE_General,\r
+                       \r
+                       .TerminalLink             = 0x01,\r
+                       \r
+                       .FrameDelay               = 1,\r
+                       .AudioFormat              = 0x0001\r
+               },\r
+               \r
+       .AudioFormat = \r
+               {\r
+                       .Header                   = {.Size = sizeof(USB_AudioFormat_t), .Type = DTYPE_AudioInterface},\r
+                       .Subtype                  = DSUBTYPE_Format,\r
+\r
+                       .FormatType               = 0x01,\r
+                       .Channels                 = 0x02,\r
+                       \r
+                       .SubFrameSize             = 0x02,\r
+                       .BitResolution            = 16,\r
+\r
+                       .SampleFrequencyType      = (sizeof(ConfigurationDescriptor.AudioFormat.SampleFrequencies) / sizeof(AudioSampleFreq_t)),                \r
+                       .SampleFrequencies        = {AUDIO_SAMPLE_FREQ(AUDIO_SAMPLE_FREQUENCY)}\r
+               },\r
+       \r
+       .AudioEndpoint = \r
+               {\r
+                       .Endpoint = \r
+                               {\r
+                                       .Header              = {.Size = sizeof(USB_AudioStreamEndpoint_Std_t), .Type = DTYPE_Endpoint},\r
+\r
+                                       .EndpointAddress     = (ENDPOINT_DESCRIPTOR_DIR_OUT | AUDIO_STREAM_EPNUM),\r
+                                       .Attributes          = (EP_TYPE_ISOCHRONOUS | ENDPOINT_ATTR_SYNC | ENDPOINT_USAGE_DATA),\r
+                                       .EndpointSize        = AUDIO_STREAM_EPSIZE,\r
+                                       .PollingIntervalMS   = 1\r
+                               },\r
+                       \r
+                       .Refresh                  = 0,\r
+                       .SyncEndpointNumber       = 0\r
+               },\r
+               \r
+       .AudioEndpoint_SPC = \r
+               {\r
+                       .Header                   = {.Size = sizeof(USB_AudioStreamEndpoint_Spc_t), .Type = DTYPE_AudioEndpoint},\r
+                       .Subtype                  = DSUBTYPE_General,\r
+                       \r
+                       .Attributes               = EP_ACCEPTS_SMALL_PACKETS,\r
+                       \r
+                       .LockDelayUnits           = 0x00,\r
+                       .LockDelay                = 0x0000\r
+               }\r
+};\r
+\r
+/** Language descriptor structure. This descriptor, located in FLASH memory, is returned when the host requests\r
+ *  the string descriptor with index 0 (the first index). It is actually an array of 16-bit integers, which indicate\r
+ *  via the language ID table available at USB.org what languages the device supports for its string descriptors.\r
+ */\r
+USB_Descriptor_String_t PROGMEM LanguageString =\r
+{\r
+       .Header                 = {.Size = USB_STRING_LEN(1), .Type = DTYPE_String},\r
+               \r
+       .UnicodeString          = {LANGUAGE_ID_ENG}\r
+};\r
+\r
+/** Manufacturer descriptor string. This is a Unicode string containing the manufacturer's details in human readable\r
+ *  form, and is read out upon request by the host when the appropriate string ID is requested, listed in the Device\r
+ *  Descriptor.\r
+ */\r
+USB_Descriptor_String_t PROGMEM ManufacturerString =\r
+{\r
+       .Header                 = {.Size = USB_STRING_LEN(11), .Type = DTYPE_String},\r
+               \r
+       .UnicodeString          = L"Dean Camera"\r
+};\r
+\r
+/** Product descriptor string. This is a Unicode string containing the product's details in human readable form,\r
+ *  and is read out upon request by the host when the appropriate string ID is requested, listed in the Device\r
+ *  Descriptor.\r
+ */\r
+USB_Descriptor_String_t PROGMEM ProductString =\r
+{\r
+       .Header                 = {.Size = USB_STRING_LEN(19), .Type = DTYPE_String},\r
+               \r
+       .UnicodeString          = L"LUFA Audio Out Demo"\r
+};\r
+\r
+/** This function is called by the library when in device mode, and must be overridden (see library "USB Descriptors"\r
+ *  documentation) by the application code so that the address and size of a requested descriptor can be given\r
+ *  to the USB library. When the device receives a Get Descriptor request on the control endpoint, this function\r
+ *  is called so that the descriptor details can be passed back and the appropriate descriptor sent back to the\r
+ *  USB host.\r
+ */\r
+uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
+{\r
+       const uint8_t  DescriptorType   = (wValue >> 8);\r
+       const uint8_t  DescriptorNumber = (wValue & 0xFF);\r
+\r
+       void*    Address = NULL;\r
+       uint16_t Size    = NO_DESCRIPTOR;\r
+\r
+       switch (DescriptorType)\r
+       {\r
+               case DTYPE_Device:\r
+                       Address = (void*)&DeviceDescriptor;\r
+                       Size    = sizeof(USB_Descriptor_Device_t);\r
+                       break;\r
+               case DTYPE_Configuration:\r
+                       Address = (void*)&ConfigurationDescriptor;\r
+                       Size    = sizeof(USB_Descriptor_Configuration_t);\r
+                       break;\r
+               case DTYPE_String: \r
+                       switch (DescriptorNumber)\r
+                       {\r
+                               case 0x00:\r
+                                       Address = (void*)&LanguageString;\r
+                                       Size    = pgm_read_byte(&LanguageString.Header.Size);\r
+                                       break;\r
+                               case 0x01: \r
+                                       Address = (void*)&ManufacturerString;\r
+                                       Size    = pgm_read_byte(&ManufacturerString.Header.Size);\r
+                                       break;\r
+                               case 0x02: \r
+                                       Address = (void*)&ProductString;\r
+                                       Size    = pgm_read_byte(&ProductString.Header.Size);\r
+                                       break;\r
+                       }\r
+                       \r
+                       break;\r
+       }\r
+       \r
+       *DescriptorAddress = Address;\r
+       return Size;\r
+}\r
diff --git a/Demos/Device/ClassDriver/AudioOutput/Descriptors.h b/Demos/Device/ClassDriver/AudioOutput/Descriptors.h
new file mode 100644 (file)
index 0000000..1f03f64
--- /dev/null
@@ -0,0 +1,86 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  Header file for Descriptors.c.\r
+ */\r
\r
+#ifndef _DESCRIPTORS_H_\r
+#define _DESCRIPTORS_H_\r
+\r
+       /* Includes: */\r
+               #include <LUFA/Drivers/USB/USB.h>\r
+               #include <LUFA/Drivers/USB/Class/Device/Audio.h>\r
+\r
+               #include <avr/pgmspace.h>\r
+\r
+       /* Macros: */\r
+               #if defined(USB_FULL_CONTROLLER) || defined(__DOXYGEN__)\r
+                       /** Endpoint number of the Audio isochronous streaming data endpoint. */\r
+                       #define AUDIO_STREAM_EPNUM       1\r
+               #else\r
+                       #define AUDIO_STREAM_EPNUM       3              \r
+               #endif\r
+               \r
+               /** Endpoint size in bytes of the Audio isochronous streaming data endpoint. The Windows audio stack requires\r
+                *  at least 192 bytes for correct output, thus the smaller 128 byte maximum endpoint size on some of the smaller\r
+                *  USB AVR models will result in unavoidable distorted output.\r
+                */\r
+               #define AUDIO_STREAM_EPSIZE          ENDPOINT_MAX_SIZE(AUDIO_STREAM_EPNUM)\r
+               \r
+               /** Sample frequency of the data being transmitted through the streaming endpoint. */\r
+               #define AUDIO_SAMPLE_FREQUENCY       48000\r
+               \r
+       /* Type Defines: */\r
+               /** Type define for the device configuration descriptor structure. This must be defined in the\r
+                *  application code, as the configuration descriptor contains several sub-descriptors which\r
+                *  vary between devices, and which describe the device's usage to the host.\r
+                */\r
+               typedef struct\r
+               {\r
+                       USB_Descriptor_Configuration_Header_t Config;\r
+                       USB_Descriptor_Interface_t            AudioControlInterface;\r
+                       USB_AudioInterface_AC_t               AudioControlInterface_SPC;\r
+                       USB_AudioInputTerminal_t              InputTerminal;\r
+                       USB_AudioOutputTerminal_t             OutputTerminal;\r
+                       USB_Descriptor_Interface_t            AudioStreamInterface_Alt0;\r
+                       USB_Descriptor_Interface_t            AudioStreamInterface_Alt1;\r
+                       USB_AudioInterface_AS_t               AudioStreamInterface_SPC;\r
+                       USB_AudioFormat_t                     AudioFormat;\r
+                       USB_AudioStreamEndpoint_Std_t         AudioEndpoint;\r
+                       USB_AudioStreamEndpoint_Spc_t         AudioEndpoint_SPC;\r
+               } USB_Descriptor_Configuration_t;\r
+               \r
+       /* Function Prototypes: */\r
+               uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
+                                                                                       ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);\r
+\r
+#endif\r
diff --git a/Demos/Device/ClassDriver/AudioOutput/Doxygen.conf b/Demos/Device/ClassDriver/AudioOutput/Doxygen.conf
new file mode 100644 (file)
index 0000000..114137e
--- /dev/null
@@ -0,0 +1,1485 @@
+# Doxyfile 1.5.7.1\r
+\r
+# This file describes the settings to be used by the documentation system\r
+# doxygen (www.doxygen.org) for a project\r
+#\r
+# All text after a hash (#) is considered a comment and will be ignored\r
+# The format is:\r
+#       TAG = value [value, ...]\r
+# For lists items can also be appended using:\r
+#       TAG += value [value, ...]\r
+# Values that contain spaces should be placed between quotes (" ")\r
+\r
+#---------------------------------------------------------------------------\r
+# Project related configuration options\r
+#---------------------------------------------------------------------------\r
+\r
+# This tag specifies the encoding used for all characters in the config file \r
+# that follow. The default is UTF-8 which is also the encoding used for all \r
+# text before the first occurrence of this tag. Doxygen uses libiconv (or the \r
+# iconv built into libc) for the transcoding. See \r
+# http://www.gnu.org/software/libiconv for the list of possible encodings.\r
+\r
+DOXYFILE_ENCODING      = UTF-8\r
+\r
+# The PROJECT_NAME tag is a single word (or a sequence of words surrounded \r
+# by quotes) that should identify the project.\r
+\r
+PROJECT_NAME           = "LUFA Library - Audio Output Device Demo"\r
+\r
+# The PROJECT_NUMBER tag can be used to enter a project or revision number. \r
+# This could be handy for archiving the generated documentation or \r
+# if some version control system is used.\r
+\r
+PROJECT_NUMBER         = 0.0.0\r
+\r
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) \r
+# base path where the generated documentation will be put. \r
+# If a relative path is entered, it will be relative to the location \r
+# where doxygen was started. If left blank the current directory will be used.\r
+\r
+OUTPUT_DIRECTORY       = ./Documentation/\r
+\r
+# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create \r
+# 4096 sub-directories (in 2 levels) under the output directory of each output \r
+# format and will distribute the generated files over these directories. \r
+# Enabling this option can be useful when feeding doxygen a huge amount of \r
+# source files, where putting all generated files in the same directory would \r
+# otherwise cause performance problems for the file system.\r
+\r
+CREATE_SUBDIRS         = YES\r
+\r
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all \r
+# documentation generated by doxygen is written. Doxygen will use this \r
+# information to generate all constant output in the proper language. \r
+# The default language is English, other supported languages are: \r
+# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, \r
+# Croatian, Czech, Danish, Dutch, Farsi, Finnish, French, German, Greek, \r
+# Hungarian, Italian, Japanese, Japanese-en (Japanese with English messages), \r
+# Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, Polish, \r
+# Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, Slovene, \r
+# Spanish, Swedish, and Ukrainian.\r
+\r
+OUTPUT_LANGUAGE        = English\r
+\r
+# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will \r
+# include brief member descriptions after the members that are listed in \r
+# the file and class documentation (similar to JavaDoc). \r
+# Set to NO to disable this.\r
+\r
+BRIEF_MEMBER_DESC      = YES\r
+\r
+# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend \r
+# the brief description of a member or function before the detailed description. \r
+# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the \r
+# brief descriptions will be completely suppressed.\r
+\r
+REPEAT_BRIEF           = YES\r
+\r
+# This tag implements a quasi-intelligent brief description abbreviator \r
+# that is used to form the text in various listings. Each string \r
+# in this list, if found as the leading text of the brief description, will be \r
+# stripped from the text and the result after processing the whole list, is \r
+# used as the annotated text. Otherwise, the brief description is used as-is. \r
+# If left blank, the following values are used ("$name" is automatically \r
+# replaced with the name of the entity): "The $name class" "The $name widget" \r
+# "The $name file" "is" "provides" "specifies" "contains" \r
+# "represents" "a" "an" "the"\r
+\r
+ABBREVIATE_BRIEF       = "The $name class" \\r
+                         "The $name widget" \\r
+                         "The $name file" \\r
+                         is \\r
+                         provides \\r
+                         specifies \\r
+                         contains \\r
+                         represents \\r
+                         a \\r
+                         an \\r
+                         the\r
+\r
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then \r
+# Doxygen will generate a detailed section even if there is only a brief \r
+# description.\r
+\r
+ALWAYS_DETAILED_SEC    = NO\r
+\r
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all \r
+# inherited members of a class in the documentation of that class as if those \r
+# members were ordinary class members. Constructors, destructors and assignment \r
+# operators of the base classes will not be shown.\r
+\r
+INLINE_INHERITED_MEMB  = NO\r
+\r
+# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full \r
+# path before files name in the file list and in the header files. If set \r
+# to NO the shortest path that makes the file name unique will be used.\r
+\r
+FULL_PATH_NAMES        = YES\r
+\r
+# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag \r
+# can be used to strip a user-defined part of the path. Stripping is \r
+# only done if one of the specified strings matches the left-hand part of \r
+# the path. The tag can be used to show relative paths in the file list. \r
+# If left blank the directory from which doxygen is run is used as the \r
+# path to strip.\r
+\r
+STRIP_FROM_PATH        = \r
+\r
+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of \r
+# the path mentioned in the documentation of a class, which tells \r
+# the reader which header file to include in order to use a class. \r
+# If left blank only the name of the header file containing the class \r
+# definition is used. Otherwise one should specify the include paths that \r
+# are normally passed to the compiler using the -I flag.\r
+\r
+STRIP_FROM_INC_PATH    = \r
+\r
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter \r
+# (but less readable) file names. This can be useful is your file systems \r
+# doesn't support long names like on DOS, Mac, or CD-ROM.\r
+\r
+SHORT_NAMES            = YES\r
+\r
+# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen \r
+# will interpret the first line (until the first dot) of a JavaDoc-style \r
+# comment as the brief description. If set to NO, the JavaDoc \r
+# comments will behave just like regular Qt-style comments \r
+# (thus requiring an explicit @brief command for a brief description.)\r
+\r
+JAVADOC_AUTOBRIEF      = NO\r
+\r
+# If the QT_AUTOBRIEF tag is set to YES then Doxygen will \r
+# interpret the first line (until the first dot) of a Qt-style \r
+# comment as the brief description. If set to NO, the comments \r
+# will behave just like regular Qt-style comments (thus requiring \r
+# an explicit \brief command for a brief description.)\r
+\r
+QT_AUTOBRIEF           = NO\r
+\r
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen \r
+# treat a multi-line C++ special comment block (i.e. a block of //! or /// \r
+# comments) as a brief description. This used to be the default behaviour. \r
+# The new default is to treat a multi-line C++ comment block as a detailed \r
+# description. Set this tag to YES if you prefer the old behaviour instead.\r
+\r
+MULTILINE_CPP_IS_BRIEF = NO\r
+\r
+# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented \r
+# member inherits the documentation from any documented member that it \r
+# re-implements.\r
+\r
+INHERIT_DOCS           = YES\r
+\r
+# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce \r
+# a new page for each member. If set to NO, the documentation of a member will \r
+# be part of the file/class/namespace that contains it.\r
+\r
+SEPARATE_MEMBER_PAGES  = NO\r
+\r
+# The TAB_SIZE tag can be used to set the number of spaces in a tab. \r
+# Doxygen uses this value to replace tabs by spaces in code fragments.\r
+\r
+TAB_SIZE               = 4\r
+\r
+# This tag can be used to specify a number of aliases that acts \r
+# as commands in the documentation. An alias has the form "name=value". \r
+# For example adding "sideeffect=\par Side Effects:\n" will allow you to \r
+# put the command \sideeffect (or @sideeffect) in the documentation, which \r
+# will result in a user-defined paragraph with heading "Side Effects:". \r
+# You can put \n's in the value part of an alias to insert newlines.\r
+\r
+ALIASES                = \r
+\r
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C \r
+# sources only. Doxygen will then generate output that is more tailored for C. \r
+# For instance, some of the names that are used will be different. The list \r
+# of all members will be omitted, etc.\r
+\r
+OPTIMIZE_OUTPUT_FOR_C  = YES\r
+\r
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java \r
+# sources only. Doxygen will then generate output that is more tailored for \r
+# Java. For instance, namespaces will be presented as packages, qualified \r
+# scopes will look different, etc.\r
+\r
+OPTIMIZE_OUTPUT_JAVA   = NO\r
+\r
+# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran \r
+# sources only. Doxygen will then generate output that is more tailored for \r
+# Fortran.\r
+\r
+OPTIMIZE_FOR_FORTRAN   = NO\r
+\r
+# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL \r
+# sources. Doxygen will then generate output that is tailored for \r
+# VHDL.\r
+\r
+OPTIMIZE_OUTPUT_VHDL   = NO\r
+\r
+# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want \r
+# to include (a tag file for) the STL sources as input, then you should \r
+# set this tag to YES in order to let doxygen match functions declarations and \r
+# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. \r
+# func(std::string) {}). This also make the inheritance and collaboration \r
+# diagrams that involve STL classes more complete and accurate.\r
+\r
+BUILTIN_STL_SUPPORT    = NO\r
+\r
+# If you use Microsoft's C++/CLI language, you should set this option to YES to\r
+# enable parsing support.\r
+\r
+CPP_CLI_SUPPORT        = NO\r
+\r
+# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. \r
+# Doxygen will parse them like normal C++ but will assume all classes use public \r
+# instead of private inheritance when no explicit protection keyword is present.\r
+\r
+SIP_SUPPORT            = NO\r
+\r
+# For Microsoft's IDL there are propget and propput attributes to indicate getter \r
+# and setter methods for a property. Setting this option to YES (the default) \r
+# will make doxygen to replace the get and set methods by a property in the \r
+# documentation. This will only work if the methods are indeed getting or \r
+# setting a simple type. If this is not the case, or you want to show the \r
+# methods anyway, you should set this option to NO.\r
+\r
+IDL_PROPERTY_SUPPORT   = YES\r
+\r
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC \r
+# tag is set to YES, then doxygen will reuse the documentation of the first \r
+# member in the group (if any) for the other members of the group. By default \r
+# all members of a group must be documented explicitly.\r
+\r
+DISTRIBUTE_GROUP_DOC   = YES\r
+\r
+# Set the SUBGROUPING tag to YES (the default) to allow class member groups of \r
+# the same type (for instance a group of public functions) to be put as a \r
+# subgroup of that type (e.g. under the Public Functions section). Set it to \r
+# NO to prevent subgrouping. Alternatively, this can be done per class using \r
+# the \nosubgrouping command.\r
+\r
+SUBGROUPING            = YES\r
+\r
+# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum \r
+# is documented as struct, union, or enum with the name of the typedef. So \r
+# typedef struct TypeS {} TypeT, will appear in the documentation as a struct \r
+# with name TypeT. When disabled the typedef will appear as a member of a file, \r
+# namespace, or class. And the struct will be named TypeS. This can typically \r
+# be useful for C code in case the coding convention dictates that all compound \r
+# types are typedef'ed and only the typedef is referenced, never the tag name.\r
+\r
+TYPEDEF_HIDES_STRUCT   = NO\r
+\r
+# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to \r
+# determine which symbols to keep in memory and which to flush to disk.\r
+# When the cache is full, less often used symbols will be written to disk.\r
+# For small to medium size projects (<1000 input files) the default value is \r
+# probably good enough. For larger projects a too small cache size can cause \r
+# doxygen to be busy swapping symbols to and from disk most of the time \r
+# causing a significant performance penality. \r
+# If the system has enough physical memory increasing the cache will improve the \r
+# performance by keeping more symbols in memory. Note that the value works on \r
+# a logarithmic scale so increasing the size by one will rougly double the \r
+# memory usage. The cache size is given by this formula: \r
+# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, \r
+# corresponding to a cache size of 2^16 = 65536 symbols\r
+\r
+SYMBOL_CACHE_SIZE      = 0\r
+\r
+#---------------------------------------------------------------------------\r
+# Build related configuration options\r
+#---------------------------------------------------------------------------\r
+\r
+# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in \r
+# documentation are documented, even if no documentation was available. \r
+# Private class members and static file members will be hidden unless \r
+# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES\r
+\r
+EXTRACT_ALL            = YES\r
+\r
+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class \r
+# will be included in the documentation.\r
+\r
+EXTRACT_PRIVATE        = YES\r
+\r
+# If the EXTRACT_STATIC tag is set to YES all static members of a file \r
+# will be included in the documentation.\r
+\r
+EXTRACT_STATIC         = YES\r
+\r
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) \r
+# defined locally in source files will be included in the documentation. \r
+# If set to NO only classes defined in header files are included.\r
+\r
+EXTRACT_LOCAL_CLASSES  = YES\r
+\r
+# This flag is only useful for Objective-C code. When set to YES local \r
+# methods, which are defined in the implementation section but not in \r
+# the interface are included in the documentation. \r
+# If set to NO (the default) only methods in the interface are included.\r
+\r
+EXTRACT_LOCAL_METHODS  = NO\r
+\r
+# If this flag is set to YES, the members of anonymous namespaces will be \r
+# extracted and appear in the documentation as a namespace called \r
+# 'anonymous_namespace{file}', where file will be replaced with the base \r
+# name of the file that contains the anonymous namespace. By default \r
+# anonymous namespace are hidden.\r
+\r
+EXTRACT_ANON_NSPACES   = NO\r
+\r
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all \r
+# undocumented members of documented classes, files or namespaces. \r
+# If set to NO (the default) these members will be included in the \r
+# various overviews, but no documentation section is generated. \r
+# This option has no effect if EXTRACT_ALL is enabled.\r
+\r
+HIDE_UNDOC_MEMBERS     = NO\r
+\r
+# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all \r
+# undocumented classes that are normally visible in the class hierarchy. \r
+# If set to NO (the default) these classes will be included in the various \r
+# overviews. This option has no effect if EXTRACT_ALL is enabled.\r
+\r
+HIDE_UNDOC_CLASSES     = NO\r
+\r
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all \r
+# friend (class|struct|union) declarations. \r
+# If set to NO (the default) these declarations will be included in the \r
+# documentation.\r
+\r
+HIDE_FRIEND_COMPOUNDS  = NO\r
+\r
+# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any \r
+# documentation blocks found inside the body of a function. \r
+# If set to NO (the default) these blocks will be appended to the \r
+# function's detailed documentation block.\r
+\r
+HIDE_IN_BODY_DOCS      = NO\r
+\r
+# The INTERNAL_DOCS tag determines if documentation \r
+# that is typed after a \internal command is included. If the tag is set \r
+# to NO (the default) then the documentation will be excluded. \r
+# Set it to YES to include the internal documentation.\r
+\r
+INTERNAL_DOCS          = NO\r
+\r
+# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate \r
+# file names in lower-case letters. If set to YES upper-case letters are also \r
+# allowed. This is useful if you have classes or files whose names only differ \r
+# in case and if your file system supports case sensitive file names. Windows \r
+# and Mac users are advised to set this option to NO.\r
+\r
+CASE_SENSE_NAMES       = NO\r
+\r
+# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen \r
+# will show members with their full class and namespace scopes in the \r
+# documentation. If set to YES the scope will be hidden.\r
+\r
+HIDE_SCOPE_NAMES       = NO\r
+\r
+# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen \r
+# will put a list of the files that are included by a file in the documentation \r
+# of that file.\r
+\r
+SHOW_INCLUDE_FILES     = YES\r
+\r
+# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] \r
+# is inserted in the documentation for inline members.\r
+\r
+INLINE_INFO            = YES\r
+\r
+# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen \r
+# will sort the (detailed) documentation of file and class members \r
+# alphabetically by member name. If set to NO the members will appear in \r
+# declaration order.\r
+\r
+SORT_MEMBER_DOCS       = YES\r
+\r
+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the \r
+# brief documentation of file, namespace and class members alphabetically \r
+# by member name. If set to NO (the default) the members will appear in \r
+# declaration order.\r
+\r
+SORT_BRIEF_DOCS        = NO\r
+\r
+# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the \r
+# hierarchy of group names into alphabetical order. If set to NO (the default) \r
+# the group names will appear in their defined order.\r
+\r
+SORT_GROUP_NAMES       = NO\r
+\r
+# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be \r
+# sorted by fully-qualified names, including namespaces. If set to \r
+# NO (the default), the class list will be sorted only by class name, \r
+# not including the namespace part. \r
+# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.\r
+# Note: This option applies only to the class list, not to the \r
+# alphabetical list.\r
+\r
+SORT_BY_SCOPE_NAME     = NO\r
+\r
+# The GENERATE_TODOLIST tag can be used to enable (YES) or \r
+# disable (NO) the todo list. This list is created by putting \todo \r
+# commands in the documentation.\r
+\r
+GENERATE_TODOLIST      = NO\r
+\r
+# The GENERATE_TESTLIST tag can be used to enable (YES) or \r
+# disable (NO) the test list. This list is created by putting \test \r
+# commands in the documentation.\r
+\r
+GENERATE_TESTLIST      = NO\r
+\r
+# The GENERATE_BUGLIST tag can be used to enable (YES) or \r
+# disable (NO) the bug list. This list is created by putting \bug \r
+# commands in the documentation.\r
+\r
+GENERATE_BUGLIST       = NO\r
+\r
+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or \r
+# disable (NO) the deprecated list. This list is created by putting \r
+# \deprecated commands in the documentation.\r
+\r
+GENERATE_DEPRECATEDLIST= YES\r
+\r
+# The ENABLED_SECTIONS tag can be used to enable conditional \r
+# documentation sections, marked by \if sectionname ... \endif.\r
+\r
+ENABLED_SECTIONS       = \r
+\r
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines \r
+# the initial value of a variable or define consists of for it to appear in \r
+# the documentation. If the initializer consists of more lines than specified \r
+# here it will be hidden. Use a value of 0 to hide initializers completely. \r
+# The appearance of the initializer of individual variables and defines in the \r
+# documentation can be controlled using \showinitializer or \hideinitializer \r
+# command in the documentation regardless of this setting.\r
+\r
+MAX_INITIALIZER_LINES  = 30\r
+\r
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated \r
+# at the bottom of the documentation of classes and structs. If set to YES the \r
+# list will mention the files that were used to generate the documentation.\r
+\r
+SHOW_USED_FILES        = YES\r
+\r
+# If the sources in your project are distributed over multiple directories \r
+# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy \r
+# in the documentation. The default is NO.\r
+\r
+SHOW_DIRECTORIES       = YES\r
+\r
+# Set the SHOW_FILES tag to NO to disable the generation of the Files page.\r
+# This will remove the Files entry from the Quick Index and from the \r
+# Folder Tree View (if specified). The default is YES.\r
+\r
+SHOW_FILES             = YES\r
+\r
+# Set the SHOW_NAMESPACES tag to NO to disable the generation of the \r
+# Namespaces page.  This will remove the Namespaces entry from the Quick Index\r
+# and from the Folder Tree View (if specified). The default is YES.\r
+\r
+SHOW_NAMESPACES        = YES\r
+\r
+# The FILE_VERSION_FILTER tag can be used to specify a program or script that \r
+# doxygen should invoke to get the current version for each file (typically from \r
+# the version control system). Doxygen will invoke the program by executing (via \r
+# popen()) the command <command> <input-file>, where <command> is the value of \r
+# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file \r
+# provided by doxygen. Whatever the program writes to standard output \r
+# is used as the file version. See the manual for examples.\r
+\r
+FILE_VERSION_FILTER    = \r
+\r
+# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by \r
+# doxygen. The layout file controls the global structure of the generated output files \r
+# in an output format independent way. The create the layout file that represents \r
+# doxygen's defaults, run doxygen with the -l option. You can optionally specify a \r
+# file name after the option, if omitted DoxygenLayout.xml will be used as the name \r
+# of the layout file.\r
+\r
+LAYOUT_FILE            = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to warning and progress messages\r
+#---------------------------------------------------------------------------\r
+\r
+# The QUIET tag can be used to turn on/off the messages that are generated \r
+# by doxygen. Possible values are YES and NO. If left blank NO is used.\r
+\r
+QUIET                  = YES\r
+\r
+# The WARNINGS tag can be used to turn on/off the warning messages that are \r
+# generated by doxygen. Possible values are YES and NO. If left blank \r
+# NO is used.\r
+\r
+WARNINGS               = YES\r
+\r
+# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings \r
+# for undocumented members. If EXTRACT_ALL is set to YES then this flag will \r
+# automatically be disabled.\r
+\r
+WARN_IF_UNDOCUMENTED   = YES\r
+\r
+# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for \r
+# potential errors in the documentation, such as not documenting some \r
+# parameters in a documented function, or documenting parameters that \r
+# don't exist or using markup commands wrongly.\r
+\r
+WARN_IF_DOC_ERROR      = YES\r
+\r
+# This WARN_NO_PARAMDOC option can be abled to get warnings for \r
+# functions that are documented, but have no documentation for their parameters \r
+# or return value. If set to NO (the default) doxygen will only warn about \r
+# wrong or incomplete parameter documentation, but not about the absence of \r
+# documentation.\r
+\r
+WARN_NO_PARAMDOC       = YES\r
+\r
+# The WARN_FORMAT tag determines the format of the warning messages that \r
+# doxygen can produce. The string should contain the $file, $line, and $text \r
+# tags, which will be replaced by the file and line number from which the \r
+# warning originated and the warning text. Optionally the format may contain \r
+# $version, which will be replaced by the version of the file (if it could \r
+# be obtained via FILE_VERSION_FILTER)\r
+\r
+WARN_FORMAT            = "$file:$line: $text"\r
+\r
+# The WARN_LOGFILE tag can be used to specify a file to which warning \r
+# and error messages should be written. If left blank the output is written \r
+# to stderr.\r
+\r
+WARN_LOGFILE           = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the input files\r
+#---------------------------------------------------------------------------\r
+\r
+# The INPUT tag can be used to specify the files and/or directories that contain \r
+# documented source files. You may enter file names like "myfile.cpp" or \r
+# directories like "/usr/src/myproject". Separate the files or directories \r
+# with spaces.\r
+\r
+INPUT                  = ./\r
+\r
+# This tag can be used to specify the character encoding of the source files \r
+# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is \r
+# also the default input encoding. Doxygen uses libiconv (or the iconv built \r
+# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for \r
+# the list of possible encodings.\r
+\r
+INPUT_ENCODING         = UTF-8\r
+\r
+# If the value of the INPUT tag contains directories, you can use the \r
+# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \r
+# and *.h) to filter out the source-files in the directories. If left \r
+# blank the following patterns are tested: \r
+# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx \r
+# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90\r
+\r
+FILE_PATTERNS          = *.h \\r
+                         *.c \\r
+                                                *.txt\r
+\r
+# The RECURSIVE tag can be used to turn specify whether or not subdirectories \r
+# should be searched for input files as well. Possible values are YES and NO. \r
+# If left blank NO is used.\r
+\r
+RECURSIVE              = YES\r
+\r
+# The EXCLUDE tag can be used to specify files and/or directories that should \r
+# excluded from the INPUT source files. This way you can easily exclude a \r
+# subdirectory from a directory tree whose root is specified with the INPUT tag.\r
+\r
+EXCLUDE                = \r
+\r
+# The EXCLUDE_SYMLINKS tag can be used select whether or not files or \r
+# directories that are symbolic links (a Unix filesystem feature) are excluded \r
+# from the input.\r
+\r
+EXCLUDE_SYMLINKS       = NO\r
+\r
+# If the value of the INPUT tag contains directories, you can use the \r
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude \r
+# certain files from those directories. Note that the wildcards are matched \r
+# against the file with absolute path, so to exclude all test directories \r
+# for example use the pattern */test/*\r
+\r
+EXCLUDE_PATTERNS       = */LowLevel/USBMode.h\r
+\r
+# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names \r
+# (namespaces, classes, functions, etc.) that should be excluded from the \r
+# output. The symbol name can be a fully qualified name, a word, or if the \r
+# wildcard * is used, a substring. Examples: ANamespace, AClass, \r
+# AClass::ANamespace, ANamespace::*Test\r
+\r
+EXCLUDE_SYMBOLS        = __*\r
+\r
+# The EXAMPLE_PATH tag can be used to specify one or more files or \r
+# directories that contain example code fragments that are included (see \r
+# the \include command).\r
+\r
+EXAMPLE_PATH           = \r
+\r
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the \r
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \r
+# and *.h) to filter out the source-files in the directories. If left \r
+# blank all files are included.\r
+\r
+EXAMPLE_PATTERNS       = *\r
+\r
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be \r
+# searched for input files to be used with the \include or \dontinclude \r
+# commands irrespective of the value of the RECURSIVE tag. \r
+# Possible values are YES and NO. If left blank NO is used.\r
+\r
+EXAMPLE_RECURSIVE      = NO\r
+\r
+# The IMAGE_PATH tag can be used to specify one or more files or \r
+# directories that contain image that are included in the documentation (see \r
+# the \image command).\r
+\r
+IMAGE_PATH             = \r
+\r
+# The INPUT_FILTER tag can be used to specify a program that doxygen should \r
+# invoke to filter for each input file. Doxygen will invoke the filter program \r
+# by executing (via popen()) the command <filter> <input-file>, where <filter> \r
+# is the value of the INPUT_FILTER tag, and <input-file> is the name of an \r
+# input file. Doxygen will then use the output that the filter program writes \r
+# to standard output.  If FILTER_PATTERNS is specified, this tag will be \r
+# ignored.\r
+\r
+INPUT_FILTER           = \r
+\r
+# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern \r
+# basis.  Doxygen will compare the file name with each pattern and apply the \r
+# filter if there is a match.  The filters are a list of the form: \r
+# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further \r
+# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER \r
+# is applied to all files.\r
+\r
+FILTER_PATTERNS        = \r
+\r
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using \r
+# INPUT_FILTER) will be used to filter the input files when producing source \r
+# files to browse (i.e. when SOURCE_BROWSER is set to YES).\r
+\r
+FILTER_SOURCE_FILES    = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to source browsing\r
+#---------------------------------------------------------------------------\r
+\r
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will \r
+# be generated. Documented entities will be cross-referenced with these sources. \r
+# Note: To get rid of all source code in the generated output, make sure also \r
+# VERBATIM_HEADERS is set to NO.\r
+\r
+SOURCE_BROWSER         = NO\r
+\r
+# Setting the INLINE_SOURCES tag to YES will include the body \r
+# of functions and classes directly in the documentation.\r
+\r
+INLINE_SOURCES         = NO\r
+\r
+# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct \r
+# doxygen to hide any special comment blocks from generated source code \r
+# fragments. Normal C and C++ comments will always remain visible.\r
+\r
+STRIP_CODE_COMMENTS    = YES\r
+\r
+# If the REFERENCED_BY_RELATION tag is set to YES \r
+# then for each documented function all documented \r
+# functions referencing it will be listed.\r
+\r
+REFERENCED_BY_RELATION = NO\r
+\r
+# If the REFERENCES_RELATION tag is set to YES \r
+# then for each documented function all documented entities \r
+# called/used by that function will be listed.\r
+\r
+REFERENCES_RELATION    = NO\r
+\r
+# If the REFERENCES_LINK_SOURCE tag is set to YES (the default)\r
+# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from\r
+# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will\r
+# link to the source code.  Otherwise they will link to the documentstion.\r
+\r
+REFERENCES_LINK_SOURCE = NO\r
+\r
+# If the USE_HTAGS tag is set to YES then the references to source code \r
+# will point to the HTML generated by the htags(1) tool instead of doxygen \r
+# built-in source browser. The htags tool is part of GNU's global source \r
+# tagging system (see http://www.gnu.org/software/global/global.html). You \r
+# will need version 4.8.6 or higher.\r
+\r
+USE_HTAGS              = NO\r
+\r
+# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen \r
+# will generate a verbatim copy of the header file for each class for \r
+# which an include is specified. Set to NO to disable this.\r
+\r
+VERBATIM_HEADERS       = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the alphabetical class index\r
+#---------------------------------------------------------------------------\r
+\r
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index \r
+# of all compounds will be generated. Enable this if the project \r
+# contains a lot of classes, structs, unions or interfaces.\r
+\r
+ALPHABETICAL_INDEX     = YES\r
+\r
+# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then \r
+# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns \r
+# in which this list will be split (can be a number in the range [1..20])\r
+\r
+COLS_IN_ALPHA_INDEX    = 5\r
+\r
+# In case all classes in a project start with a common prefix, all \r
+# classes will be put under the same header in the alphabetical index. \r
+# The IGNORE_PREFIX tag can be used to specify one or more prefixes that \r
+# should be ignored while generating the index headers.\r
+\r
+IGNORE_PREFIX          = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the HTML output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_HTML tag is set to YES (the default) Doxygen will \r
+# generate HTML output.\r
+\r
+GENERATE_HTML          = YES\r
+\r
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `html' will be used as the default path.\r
+\r
+HTML_OUTPUT            = html\r
+\r
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for \r
+# each generated HTML page (for example: .htm,.php,.asp). If it is left blank \r
+# doxygen will generate files with .html extension.\r
+\r
+HTML_FILE_EXTENSION    = .html\r
+\r
+# The HTML_HEADER tag can be used to specify a personal HTML header for \r
+# each generated HTML page. If it is left blank doxygen will generate a \r
+# standard header.\r
+\r
+HTML_HEADER            = \r
+\r
+# The HTML_FOOTER tag can be used to specify a personal HTML footer for \r
+# each generated HTML page. If it is left blank doxygen will generate a \r
+# standard footer.\r
+\r
+HTML_FOOTER            = \r
+\r
+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading \r
+# style sheet that is used by each HTML page. It can be used to \r
+# fine-tune the look of the HTML output. If the tag is left blank doxygen \r
+# will generate a default style sheet. Note that doxygen will try to copy \r
+# the style sheet file to the HTML output directory, so don't put your own \r
+# stylesheet in the HTML output directory as well, or it will be erased!\r
+\r
+HTML_STYLESHEET        = \r
+\r
+# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, \r
+# files or namespaces will be aligned in HTML using tables. If set to \r
+# NO a bullet list will be used.\r
+\r
+HTML_ALIGN_MEMBERS     = YES\r
+\r
+# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML \r
+# documentation will contain sections that can be hidden and shown after the \r
+# page has loaded. For this to work a browser that supports \r
+# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox \r
+# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari).\r
+\r
+HTML_DYNAMIC_SECTIONS  = YES\r
+\r
+# If the GENERATE_DOCSET tag is set to YES, additional index files \r
+# will be generated that can be used as input for Apple's Xcode 3 \r
+# integrated development environment, introduced with OSX 10.5 (Leopard). \r
+# To create a documentation set, doxygen will generate a Makefile in the \r
+# HTML output directory. Running make will produce the docset in that \r
+# directory and running "make install" will install the docset in \r
+# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find \r
+# it at startup. \r
+# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information.\r
+\r
+GENERATE_DOCSET        = NO\r
+\r
+# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the \r
+# feed. A documentation feed provides an umbrella under which multiple \r
+# documentation sets from a single provider (such as a company or product suite) \r
+# can be grouped.\r
+\r
+DOCSET_FEEDNAME        = "Doxygen generated docs"\r
+\r
+# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that \r
+# should uniquely identify the documentation set bundle. This should be a \r
+# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen \r
+# will append .docset to the name.\r
+\r
+DOCSET_BUNDLE_ID       = org.doxygen.Project\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, additional index files \r
+# will be generated that can be used as input for tools like the \r
+# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) \r
+# of the generated HTML documentation.\r
+\r
+GENERATE_HTMLHELP      = NO\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can \r
+# be used to specify the file name of the resulting .chm file. You \r
+# can add a path in front of the file if the result should not be \r
+# written to the html output directory.\r
+\r
+CHM_FILE               = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can \r
+# be used to specify the location (absolute path including file name) of \r
+# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run \r
+# the HTML help compiler on the generated index.hhp.\r
+\r
+HHC_LOCATION           = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag \r
+# controls if a separate .chi index file is generated (YES) or that \r
+# it should be included in the master .chm file (NO).\r
+\r
+GENERATE_CHI           = NO\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING\r
+# is used to encode HtmlHelp index (hhk), content (hhc) and project file\r
+# content.\r
+\r
+CHM_INDEX_ENCODING     = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag \r
+# controls whether a binary table of contents is generated (YES) or a \r
+# normal table of contents (NO) in the .chm file.\r
+\r
+BINARY_TOC             = NO\r
+\r
+# The TOC_EXPAND flag can be set to YES to add extra items for group members \r
+# to the contents of the HTML help documentation and to the tree view.\r
+\r
+TOC_EXPAND             = YES\r
+\r
+# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER \r
+# are set, an additional index file will be generated that can be used as input for \r
+# Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated \r
+# HTML documentation.\r
+\r
+GENERATE_QHP           = NO\r
+\r
+# If the QHG_LOCATION tag is specified, the QCH_FILE tag can \r
+# be used to specify the file name of the resulting .qch file. \r
+# The path specified is relative to the HTML output folder.\r
+\r
+QCH_FILE               = \r
+\r
+# The QHP_NAMESPACE tag specifies the namespace to use when generating \r
+# Qt Help Project output. For more information please see \r
+# <a href="http://doc.trolltech.com/qthelpproject.html#namespace">Qt Help Project / Namespace</a>.\r
+\r
+QHP_NAMESPACE          = org.doxygen.Project\r
+\r
+# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating \r
+# Qt Help Project output. For more information please see \r
+# <a href="http://doc.trolltech.com/qthelpproject.html#virtual-folders">Qt Help Project / Virtual Folders</a>.\r
+\r
+QHP_VIRTUAL_FOLDER     = doc\r
+\r
+# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can \r
+# be used to specify the location of Qt's qhelpgenerator. \r
+# If non-empty doxygen will try to run qhelpgenerator on the generated \r
+# .qhp file .\r
+\r
+QHG_LOCATION           = \r
+\r
+# The DISABLE_INDEX tag can be used to turn on/off the condensed index at \r
+# top of each HTML page. The value NO (the default) enables the index and \r
+# the value YES disables it.\r
+\r
+DISABLE_INDEX          = NO\r
+\r
+# This tag can be used to set the number of enum values (range [1..20]) \r
+# that doxygen will group on one line in the generated HTML documentation.\r
+\r
+ENUM_VALUES_PER_LINE   = 1\r
+\r
+# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index\r
+# structure should be generated to display hierarchical information.\r
+# If the tag value is set to FRAME, a side panel will be generated\r
+# containing a tree-like index structure (just like the one that \r
+# is generated for HTML Help). For this to work a browser that supports \r
+# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, \r
+# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are \r
+# probably better off using the HTML help feature. Other possible values \r
+# for this tag are: HIERARCHIES, which will generate the Groups, Directories,\r
+# and Class Hierarchy pages using a tree view instead of an ordered list;\r
+# ALL, which combines the behavior of FRAME and HIERARCHIES; and NONE, which\r
+# disables this behavior completely. For backwards compatibility with previous\r
+# releases of Doxygen, the values YES and NO are equivalent to FRAME and NONE\r
+# respectively.\r
+\r
+GENERATE_TREEVIEW      = YES\r
+\r
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be \r
+# used to set the initial width (in pixels) of the frame in which the tree \r
+# is shown.\r
+\r
+TREEVIEW_WIDTH         = 250\r
+\r
+# Use this tag to change the font size of Latex formulas included \r
+# as images in the HTML documentation. The default is 10. Note that \r
+# when you change the font size after a successful doxygen run you need \r
+# to manually remove any form_*.png images from the HTML output directory \r
+# to force them to be regenerated.\r
+\r
+FORMULA_FONTSIZE       = 10\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the LaTeX output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will \r
+# generate Latex output.\r
+\r
+GENERATE_LATEX         = NO\r
+\r
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `latex' will be used as the default path.\r
+\r
+LATEX_OUTPUT           = latex\r
+\r
+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be \r
+# invoked. If left blank `latex' will be used as the default command name.\r
+\r
+LATEX_CMD_NAME         = latex\r
+\r
+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to \r
+# generate index for LaTeX. If left blank `makeindex' will be used as the \r
+# default command name.\r
+\r
+MAKEINDEX_CMD_NAME     = makeindex\r
+\r
+# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact \r
+# LaTeX documents. This may be useful for small projects and may help to \r
+# save some trees in general.\r
+\r
+COMPACT_LATEX          = NO\r
+\r
+# The PAPER_TYPE tag can be used to set the paper type that is used \r
+# by the printer. Possible values are: a4, a4wide, letter, legal and \r
+# executive. If left blank a4wide will be used.\r
+\r
+PAPER_TYPE             = a4wide\r
+\r
+# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX \r
+# packages that should be included in the LaTeX output.\r
+\r
+EXTRA_PACKAGES         = \r
+\r
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for \r
+# the generated latex document. The header should contain everything until \r
+# the first chapter. If it is left blank doxygen will generate a \r
+# standard header. Notice: only use this tag if you know what you are doing!\r
+\r
+LATEX_HEADER           = \r
+\r
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated \r
+# is prepared for conversion to pdf (using ps2pdf). The pdf file will \r
+# contain links (just like the HTML output) instead of page references \r
+# This makes the output suitable for online browsing using a pdf viewer.\r
+\r
+PDF_HYPERLINKS         = YES\r
+\r
+# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of \r
+# plain latex in the generated Makefile. Set this option to YES to get a \r
+# higher quality PDF documentation.\r
+\r
+USE_PDFLATEX           = YES\r
+\r
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. \r
+# command to the generated LaTeX files. This will instruct LaTeX to keep \r
+# running if errors occur, instead of asking the user for help. \r
+# This option is also used when generating formulas in HTML.\r
+\r
+LATEX_BATCHMODE        = NO\r
+\r
+# If LATEX_HIDE_INDICES is set to YES then doxygen will not \r
+# include the index chapters (such as File Index, Compound Index, etc.) \r
+# in the output.\r
+\r
+LATEX_HIDE_INDICES     = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the RTF output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output \r
+# The RTF output is optimized for Word 97 and may not look very pretty with \r
+# other RTF readers or editors.\r
+\r
+GENERATE_RTF           = NO\r
+\r
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `rtf' will be used as the default path.\r
+\r
+RTF_OUTPUT             = rtf\r
+\r
+# If the COMPACT_RTF tag is set to YES Doxygen generates more compact \r
+# RTF documents. This may be useful for small projects and may help to \r
+# save some trees in general.\r
+\r
+COMPACT_RTF            = NO\r
+\r
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated \r
+# will contain hyperlink fields. The RTF file will \r
+# contain links (just like the HTML output) instead of page references. \r
+# This makes the output suitable for online browsing using WORD or other \r
+# programs which support those fields. \r
+# Note: wordpad (write) and others do not support links.\r
+\r
+RTF_HYPERLINKS         = NO\r
+\r
+# Load stylesheet definitions from file. Syntax is similar to doxygen's \r
+# config file, i.e. a series of assignments. You only have to provide \r
+# replacements, missing definitions are set to their default value.\r
+\r
+RTF_STYLESHEET_FILE    = \r
+\r
+# Set optional variables used in the generation of an rtf document. \r
+# Syntax is similar to doxygen's config file.\r
+\r
+RTF_EXTENSIONS_FILE    = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the man page output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_MAN tag is set to YES (the default) Doxygen will \r
+# generate man pages\r
+\r
+GENERATE_MAN           = NO\r
+\r
+# The MAN_OUTPUT tag is used to specify where the man pages will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `man' will be used as the default path.\r
+\r
+MAN_OUTPUT             = man\r
+\r
+# The MAN_EXTENSION tag determines the extension that is added to \r
+# the generated man pages (default is the subroutine's section .3)\r
+\r
+MAN_EXTENSION          = .3\r
+\r
+# If the MAN_LINKS tag is set to YES and Doxygen generates man output, \r
+# then it will generate one additional man file for each entity \r
+# documented in the real man page(s). These additional files \r
+# only source the real man page, but without them the man command \r
+# would be unable to find the correct page. The default is NO.\r
+\r
+MAN_LINKS              = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the XML output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_XML tag is set to YES Doxygen will \r
+# generate an XML file that captures the structure of \r
+# the code including all documentation.\r
+\r
+GENERATE_XML           = NO\r
+\r
+# The XML_OUTPUT tag is used to specify where the XML pages will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `xml' will be used as the default path.\r
+\r
+XML_OUTPUT             = xml\r
+\r
+# The XML_SCHEMA tag can be used to specify an XML schema, \r
+# which can be used by a validating XML parser to check the \r
+# syntax of the XML files.\r
+\r
+XML_SCHEMA             = \r
+\r
+# The XML_DTD tag can be used to specify an XML DTD, \r
+# which can be used by a validating XML parser to check the \r
+# syntax of the XML files.\r
+\r
+XML_DTD                = \r
+\r
+# If the XML_PROGRAMLISTING tag is set to YES Doxygen will \r
+# dump the program listings (including syntax highlighting \r
+# and cross-referencing information) to the XML output. Note that \r
+# enabling this will significantly increase the size of the XML output.\r
+\r
+XML_PROGRAMLISTING     = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options for the AutoGen Definitions output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will \r
+# generate an AutoGen Definitions (see autogen.sf.net) file \r
+# that captures the structure of the code including all \r
+# documentation. Note that this feature is still experimental \r
+# and incomplete at the moment.\r
+\r
+GENERATE_AUTOGEN_DEF   = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the Perl module output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_PERLMOD tag is set to YES Doxygen will \r
+# generate a Perl module file that captures the structure of \r
+# the code including all documentation. Note that this \r
+# feature is still experimental and incomplete at the \r
+# moment.\r
+\r
+GENERATE_PERLMOD       = NO\r
+\r
+# If the PERLMOD_LATEX tag is set to YES Doxygen will generate \r
+# the necessary Makefile rules, Perl scripts and LaTeX code to be able \r
+# to generate PDF and DVI output from the Perl module output.\r
+\r
+PERLMOD_LATEX          = NO\r
+\r
+# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be \r
+# nicely formatted so it can be parsed by a human reader.  This is useful \r
+# if you want to understand what is going on.  On the other hand, if this \r
+# tag is set to NO the size of the Perl module output will be much smaller \r
+# and Perl will parse it just the same.\r
+\r
+PERLMOD_PRETTY         = YES\r
+\r
+# The names of the make variables in the generated doxyrules.make file \r
+# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. \r
+# This is useful so different doxyrules.make files included by the same \r
+# Makefile don't overwrite each other's variables.\r
+\r
+PERLMOD_MAKEVAR_PREFIX = \r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration options related to the preprocessor   \r
+#---------------------------------------------------------------------------\r
+\r
+# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will \r
+# evaluate all C-preprocessor directives found in the sources and include \r
+# files.\r
+\r
+ENABLE_PREPROCESSING   = YES\r
+\r
+# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro \r
+# names in the source code. If set to NO (the default) only conditional \r
+# compilation will be performed. Macro expansion can be done in a controlled \r
+# way by setting EXPAND_ONLY_PREDEF to YES.\r
+\r
+MACRO_EXPANSION        = YES\r
+\r
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES \r
+# then the macro expansion is limited to the macros specified with the \r
+# PREDEFINED and EXPAND_AS_DEFINED tags.\r
+\r
+EXPAND_ONLY_PREDEF     = YES\r
+\r
+# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files \r
+# in the INCLUDE_PATH (see below) will be search if a #include is found.\r
+\r
+SEARCH_INCLUDES        = YES\r
+\r
+# The INCLUDE_PATH tag can be used to specify one or more directories that \r
+# contain include files that are not input files but should be processed by \r
+# the preprocessor.\r
+\r
+INCLUDE_PATH           = \r
+\r
+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard \r
+# patterns (like *.h and *.hpp) to filter out the header-files in the \r
+# directories. If left blank, the patterns specified with FILE_PATTERNS will \r
+# be used.\r
+\r
+INCLUDE_FILE_PATTERNS  = \r
+\r
+# The PREDEFINED tag can be used to specify one or more macro names that \r
+# are defined before the preprocessor is started (similar to the -D option of \r
+# gcc). The argument of the tag is a list of macros of the form: name \r
+# or name=definition (no spaces). If the definition and the = are \r
+# omitted =1 is assumed. To prevent a macro definition from being \r
+# undefined via #undef or recursively expanded use the := operator \r
+# instead of the = operator.\r
+\r
+PREDEFINED             = __DOXYGEN__\r
+\r
+# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then \r
+# this tag can be used to specify a list of macro names that should be expanded. \r
+# The macro definition that is found in the sources will be used. \r
+# Use the PREDEFINED tag if you want to use a different macro definition.\r
+\r
+EXPAND_AS_DEFINED      = BUTTLOADTAG\r
+\r
+# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then \r
+# doxygen's preprocessor will remove all function-like macros that are alone \r
+# on a line, have an all uppercase name, and do not end with a semicolon. Such \r
+# function macros are typically used for boiler-plate code, and will confuse \r
+# the parser if not removed.\r
+\r
+SKIP_FUNCTION_MACROS   = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration::additions related to external references   \r
+#---------------------------------------------------------------------------\r
+\r
+# The TAGFILES option can be used to specify one or more tagfiles. \r
+# Optionally an initial location of the external documentation \r
+# can be added for each tagfile. The format of a tag file without \r
+# this location is as follows: \r
+#   TAGFILES = file1 file2 ... \r
+# Adding location for the tag files is done as follows: \r
+#   TAGFILES = file1=loc1 "file2 = loc2" ... \r
+# where "loc1" and "loc2" can be relative or absolute paths or \r
+# URLs. If a location is present for each tag, the installdox tool \r
+# does not have to be run to correct the links.\r
+# Note that each tag file must have a unique name\r
+# (where the name does NOT include the path)\r
+# If a tag file is not located in the directory in which doxygen \r
+# is run, you must also specify the path to the tagfile here.\r
+\r
+TAGFILES               = \r
+\r
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create \r
+# a tag file that is based on the input files it reads.\r
+\r
+GENERATE_TAGFILE       = \r
+\r
+# If the ALLEXTERNALS tag is set to YES all external classes will be listed \r
+# in the class index. If set to NO only the inherited external classes \r
+# will be listed.\r
+\r
+ALLEXTERNALS           = NO\r
+\r
+# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed \r
+# in the modules index. If set to NO, only the current project's groups will \r
+# be listed.\r
+\r
+EXTERNAL_GROUPS        = YES\r
+\r
+# The PERL_PATH should be the absolute path and name of the perl script \r
+# interpreter (i.e. the result of `which perl').\r
+\r
+PERL_PATH              = /usr/bin/perl\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration options related to the dot tool   \r
+#---------------------------------------------------------------------------\r
+\r
+# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will \r
+# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base \r
+# or super classes. Setting the tag to NO turns the diagrams off. Note that \r
+# this option is superseded by the HAVE_DOT option below. This is only a \r
+# fallback. It is recommended to install and use dot, since it yields more \r
+# powerful graphs.\r
+\r
+CLASS_DIAGRAMS         = NO\r
+\r
+# You can define message sequence charts within doxygen comments using the \msc \r
+# command. Doxygen will then run the mscgen tool (see \r
+# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the \r
+# documentation. The MSCGEN_PATH tag allows you to specify the directory where \r
+# the mscgen tool resides. If left empty the tool is assumed to be found in the \r
+# default search path.\r
+\r
+MSCGEN_PATH            = \r
+\r
+# If set to YES, the inheritance and collaboration graphs will hide \r
+# inheritance and usage relations if the target is undocumented \r
+# or is not a class.\r
+\r
+HIDE_UNDOC_RELATIONS   = YES\r
+\r
+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is \r
+# available from the path. This tool is part of Graphviz, a graph visualization \r
+# toolkit from AT&T and Lucent Bell Labs. The other options in this section \r
+# have no effect if this option is set to NO (the default)\r
+\r
+HAVE_DOT               = NO\r
+\r
+# By default doxygen will write a font called FreeSans.ttf to the output \r
+# directory and reference it in all dot files that doxygen generates. This \r
+# font does not include all possible unicode characters however, so when you need \r
+# these (or just want a differently looking font) you can specify the font name \r
+# using DOT_FONTNAME. You need need to make sure dot is able to find the font, \r
+# which can be done by putting it in a standard location or by setting the \r
+# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory \r
+# containing the font.\r
+\r
+DOT_FONTNAME           = FreeSans\r
+\r
+# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. \r
+# The default size is 10pt.\r
+\r
+DOT_FONTSIZE           = 10\r
+\r
+# By default doxygen will tell dot to use the output directory to look for the \r
+# FreeSans.ttf font (which doxygen will put there itself). If you specify a \r
+# different font using DOT_FONTNAME you can set the path where dot \r
+# can find it using this tag.\r
+\r
+DOT_FONTPATH           = \r
+\r
+# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for each documented class showing the direct and \r
+# indirect inheritance relations. Setting this tag to YES will force the \r
+# the CLASS_DIAGRAMS tag to NO.\r
+\r
+CLASS_GRAPH            = NO\r
+\r
+# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for each documented class showing the direct and \r
+# indirect implementation dependencies (inheritance, containment, and \r
+# class references variables) of the class with other documented classes.\r
+\r
+COLLABORATION_GRAPH    = NO\r
+\r
+# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for groups, showing the direct groups dependencies\r
+\r
+GROUP_GRAPHS           = NO\r
+\r
+# If the UML_LOOK tag is set to YES doxygen will generate inheritance and \r
+# collaboration diagrams in a style similar to the OMG's Unified Modeling \r
+# Language.\r
+\r
+UML_LOOK               = NO\r
+\r
+# If set to YES, the inheritance and collaboration graphs will show the \r
+# relations between templates and their instances.\r
+\r
+TEMPLATE_RELATIONS     = NO\r
+\r
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT \r
+# tags are set to YES then doxygen will generate a graph for each documented \r
+# file showing the direct and indirect include dependencies of the file with \r
+# other documented files.\r
+\r
+INCLUDE_GRAPH          = NO\r
+\r
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and \r
+# HAVE_DOT tags are set to YES then doxygen will generate a graph for each \r
+# documented header file showing the documented files that directly or \r
+# indirectly include this file.\r
+\r
+INCLUDED_BY_GRAPH      = NO\r
+\r
+# If the CALL_GRAPH and HAVE_DOT options are set to YES then \r
+# doxygen will generate a call dependency graph for every global function \r
+# or class method. Note that enabling this option will significantly increase \r
+# the time of a run. So in most cases it will be better to enable call graphs \r
+# for selected functions only using the \callgraph command.\r
+\r
+CALL_GRAPH             = NO\r
+\r
+# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then \r
+# doxygen will generate a caller dependency graph for every global function \r
+# or class method. Note that enabling this option will significantly increase \r
+# the time of a run. So in most cases it will be better to enable caller \r
+# graphs for selected functions only using the \callergraph command.\r
+\r
+CALLER_GRAPH           = NO\r
+\r
+# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen \r
+# will graphical hierarchy of all classes instead of a textual one.\r
+\r
+GRAPHICAL_HIERARCHY    = NO\r
+\r
+# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES \r
+# then doxygen will show the dependencies a directory has on other directories \r
+# in a graphical way. The dependency relations are determined by the #include\r
+# relations between the files in the directories.\r
+\r
+DIRECTORY_GRAPH        = NO\r
+\r
+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images \r
+# generated by dot. Possible values are png, jpg, or gif\r
+# If left blank png will be used.\r
+\r
+DOT_IMAGE_FORMAT       = png\r
+\r
+# The tag DOT_PATH can be used to specify the path where the dot tool can be \r
+# found. If left blank, it is assumed the dot tool can be found in the path.\r
+\r
+DOT_PATH               = "C:/Program Files/Graphviz2.18/bin"\r
+\r
+# The DOTFILE_DIRS tag can be used to specify one or more directories that \r
+# contain dot files that are included in the documentation (see the \r
+# \dotfile command).\r
+\r
+DOTFILE_DIRS           = \r
+\r
+# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of \r
+# nodes that will be shown in the graph. If the number of nodes in a graph \r
+# becomes larger than this value, doxygen will truncate the graph, which is \r
+# visualized by representing a node as a red box. Note that doxygen if the \r
+# number of direct children of the root node in a graph is already larger than \r
+# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note \r
+# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.\r
+\r
+DOT_GRAPH_MAX_NODES    = 15\r
+\r
+# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the \r
+# graphs generated by dot. A depth value of 3 means that only nodes reachable \r
+# from the root by following a path via at most 3 edges will be shown. Nodes \r
+# that lay further from the root node will be omitted. Note that setting this \r
+# option to 1 or 2 may greatly reduce the computation time needed for large \r
+# code bases. Also note that the size of a graph can be further restricted by \r
+# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.\r
+\r
+MAX_DOT_GRAPH_DEPTH    = 2\r
+\r
+# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent \r
+# background. This is disabled by default, because dot on Windows does not \r
+# seem to support this out of the box. Warning: Depending on the platform used, \r
+# enabling this option may lead to badly anti-aliased labels on the edges of \r
+# a graph (i.e. they become hard to read).\r
+\r
+DOT_TRANSPARENT        = YES\r
+\r
+# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output \r
+# files in one run (i.e. multiple -o and -T options on the command line). This \r
+# makes dot run faster, but since only newer versions of dot (>1.8.10) \r
+# support this, this feature is disabled by default.\r
+\r
+DOT_MULTI_TARGETS      = NO\r
+\r
+# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will \r
+# generate a legend page explaining the meaning of the various boxes and \r
+# arrows in the dot generated graphs.\r
+\r
+GENERATE_LEGEND        = YES\r
+\r
+# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will \r
+# remove the intermediate dot files that are used to generate \r
+# the various graphs.\r
+\r
+DOT_CLEANUP            = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration::additions related to the search engine   \r
+#---------------------------------------------------------------------------\r
+\r
+# The SEARCHENGINE tag specifies whether or not a search engine should be \r
+# used. If set to NO the values of all tags below this one will be ignored.\r
+\r
+SEARCHENGINE           = NO\r
diff --git a/Demos/Device/ClassDriver/AudioOutput/makefile b/Demos/Device/ClassDriver/AudioOutput/makefile
new file mode 100644 (file)
index 0000000..8ad1def
--- /dev/null
@@ -0,0 +1,733 @@
+# Hey Emacs, this is a -*- makefile -*-\r
+#----------------------------------------------------------------------------\r
+# WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al.\r
+#  >> Modified for use with the LUFA project. <<\r
+#\r
+# Released to the Public Domain\r
+#\r
+# Additional material for this makefile was written by:\r
+# Peter Fleury\r
+# Tim Henigan\r
+# Colin O'Flynn\r
+# Reiner Patommel\r
+# Markus Pfaff\r
+# Sander Pool\r
+# Frederik Rouleau\r
+# Carlos Lamas\r
+# Dean Camera\r
+# Opendous Inc.\r
+# Denver Gingerich\r
+#\r
+#----------------------------------------------------------------------------\r
+# On command line:\r
+#\r
+# make all = Make software.\r
+#\r
+# make clean = Clean out built project files.\r
+#\r
+# make coff = Convert ELF to AVR COFF.\r
+#\r
+# make extcoff = Convert ELF to AVR Extended COFF.\r
+#\r
+# make program = Download the hex file to the device, using avrdude.\r
+#                Please customize the avrdude settings below first!\r
+#\r
+# make dfu = Download the hex file to the device, using dfu-programmer (must\r
+#            have dfu-programmer installed).\r
+#\r
+# make flip = Download the hex file to the device, using Atmel FLIP (must\r
+#             have Atmel FLIP installed).\r
+#\r
+# make dfu-ee = Download the eeprom file to the device, using dfu-programmer\r
+#               (must have dfu-programmer installed).\r
+#\r
+# make flip-ee = Download the eeprom file to the device, using Atmel FLIP\r
+#                (must have Atmel FLIP installed).\r
+#\r
+# make doxygen = Generate DoxyGen documentation for the project (must have\r
+#                DoxyGen installed)\r
+#\r
+# make debug = Start either simulavr or avarice as specified for debugging, \r
+#              with avr-gdb or avr-insight as the front end for debugging.\r
+#\r
+# make filename.s = Just compile filename.c into the assembler code only.\r
+#\r
+# make filename.i = Create a preprocessed source file for use in submitting\r
+#                   bug reports to the GCC project.\r
+#\r
+# To rebuild project do "make clean" then "make all".\r
+#----------------------------------------------------------------------------\r
+\r
+\r
+# MCU name\r
+MCU = at90usb1287\r
+\r
+\r
+# Target board (see library "Board Types" documentation, USER or blank for projects not requiring\r
+# LUFA board drivers). If USER is selected, put custom board drivers in a directory called \r
+# "Board" inside the application directory.\r
+BOARD  = USBKEY\r
+\r
+\r
+# Processor frequency.\r
+#     This will define a symbol, F_CPU, in all source code files equal to the \r
+#     processor frequency. You can then use this symbol in your source code to \r
+#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done\r
+#     automatically to create a 32-bit value in your source code.\r
+#     Typical values are:\r
+#         F_CPU =  1000000\r
+#         F_CPU =  1843200\r
+#         F_CPU =  2000000\r
+#         F_CPU =  3686400\r
+#         F_CPU =  4000000\r
+#         F_CPU =  7372800\r
+#         F_CPU =  8000000\r
+#         F_CPU = 11059200\r
+#         F_CPU = 14745600\r
+#         F_CPU = 16000000\r
+#         F_CPU = 18432000\r
+#         F_CPU = 20000000\r
+F_CPU = 8000000\r
+\r
+\r
+# Input clock frequency.\r
+#     This will define a symbol, F_CLOCK, in all source code files equal to the \r
+#     input clock frequency (before any prescaling is performed). This value may\r
+#     differ from F_CPU if prescaling is used on the latter, and is required as the\r
+#     raw input clock is fed directly to the PLL sections of the AVR for high speed\r
+#     clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'\r
+#     at the end, this will be done automatically to create a 32-bit value in your\r
+#     source code.\r
+#\r
+#     If no clock division is performed on the input clock inside the AVR (via the\r
+#     CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.\r
+F_CLOCK = 8000000\r
+\r
+\r
+# Output format. (can be srec, ihex, binary)\r
+FORMAT = ihex\r
+\r
+\r
+# Target file name (without extension).\r
+TARGET = AudioOutput\r
+\r
+\r
+# Object files directory\r
+#     To put object files in current directory, use a dot (.), do NOT make\r
+#     this an empty or blank macro!\r
+OBJDIR = .\r
+\r
+\r
+# Path to the LUFA library\r
+LUFA_PATH = ../../..\r
+\r
+\r
+# List C source files here. (C dependencies are automatically generated.)\r
+SRC = $(TARGET).c                                                 \\r
+         Descriptors.c                                               \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/DevChapter9.c        \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Endpoint.c           \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Host.c               \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/HostChapter9.c       \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/LowLevel.c           \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Pipe.c               \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/Events.c            \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBInterrupt.c      \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBTask.c           \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/ConfigDescriptor.c  \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/Class/Device/Audio.c          \\r
+\r
+\r
+# List C++ source files here. (C dependencies are automatically generated.)\r
+CPPSRC = \r
+\r
+\r
+# List Assembler source files here.\r
+#     Make them always end in a capital .S.  Files ending in a lowercase .s\r
+#     will not be considered source files but generated files (assembler\r
+#     output from the compiler), and will be deleted upon "make clean"!\r
+#     Even though the DOS/Win* filesystem matches both .s and .S the same,\r
+#     it will preserve the spelling of the filenames, and gcc itself does\r
+#     care about how the name is spelled on its command-line.\r
+ASRC =\r
+\r
+\r
+# Optimization level, can be [0, 1, 2, 3, s]. \r
+#     0 = turn off optimization. s = optimize for size.\r
+#     (Note: 3 is not always the best optimization level. See avr-libc FAQ.)\r
+OPT = s\r
+\r
+\r
+# Debugging format.\r
+#     Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs.\r
+#     AVR Studio 4.10 requires dwarf-2.\r
+#     AVR [Extended] COFF format requires stabs, plus an avr-objcopy run.\r
+DEBUG = dwarf-2\r
+\r
+\r
+# List any extra directories to look for include files here.\r
+#     Each directory must be seperated by a space.\r
+#     Use forward slashes for directory separators.\r
+#     For a directory that has spaces, enclose it in quotes.\r
+EXTRAINCDIRS = $(LUFA_PATH)/\r
+\r
+\r
+# Compiler flag to set the C Standard level.\r
+#     c89   = "ANSI" C\r
+#     gnu89 = c89 plus GCC extensions\r
+#     c99   = ISO C99 standard (not yet fully implemented)\r
+#     gnu99 = c99 plus GCC extensions\r
+CSTANDARD = -std=gnu99\r
+\r
+\r
+# Place -D or -U options here for C sources\r
+CDEFS  = -DF_CPU=$(F_CPU)UL -DF_CLOCK=$(F_CLOCK)UL -DBOARD=BOARD_$(BOARD)\r
+CDEFS += -DUSE_NONSTANDARD_DESCRIPTOR_NAMES -DNO_STREAM_CALLBACKS -DUSB_DEVICE_ONLY\r
+CDEFS += -DFIXED_CONTROL_ENDPOINT_SIZE=8 -DUSE_SINGLE_DEVICE_CONFIGURATION\r
+CDEFS += -DUSE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)"\r
+CDEFS += -DAUDIO_OUT_MONO\r
+\r
+# Place -D or -U options here for ASM sources\r
+ADEFS = -DF_CPU=$(F_CPU)\r
+\r
+\r
+# Place -D or -U options here for C++ sources\r
+CPPDEFS = -DF_CPU=$(F_CPU)UL\r
+#CPPDEFS += -D__STDC_LIMIT_MACROS\r
+#CPPDEFS += -D__STDC_CONSTANT_MACROS\r
+\r
+\r
+\r
+#---------------- Compiler Options C ----------------\r
+#  -g*:          generate debugging information\r
+#  -O*:          optimization level\r
+#  -f...:        tuning, see GCC manual and avr-libc documentation\r
+#  -Wall...:     warning level\r
+#  -Wa,...:      tell GCC to pass this to the assembler.\r
+#    -adhlns...: create assembler listing\r
+CFLAGS = -g$(DEBUG)\r
+CFLAGS += $(CDEFS)\r
+CFLAGS += -O$(OPT)\r
+CFLAGS += -funsigned-char\r
+CFLAGS += -funsigned-bitfields\r
+CFLAGS += -ffunction-sections\r
+CFLAGS += -fpack-struct\r
+CFLAGS += -fshort-enums\r
+CFLAGS += -finline-limit=20\r
+CFLAGS += -Wall\r
+CFLAGS += -Wstrict-prototypes\r
+CFLAGS += -Wundef\r
+#CFLAGS += -fno-unit-at-a-time\r
+#CFLAGS += -Wunreachable-code\r
+#CFLAGS += -Wsign-compare\r
+CFLAGS += -Wa,-adhlns=$(<:%.c=$(OBJDIR)/%.lst)\r
+CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))\r
+CFLAGS += $(CSTANDARD)\r
+\r
+\r
+#---------------- Compiler Options C++ ----------------\r
+#  -g*:          generate debugging information\r
+#  -O*:          optimization level\r
+#  -f...:        tuning, see GCC manual and avr-libc documentation\r
+#  -Wall...:     warning level\r
+#  -Wa,...:      tell GCC to pass this to the assembler.\r
+#    -adhlns...: create assembler listing\r
+CPPFLAGS = -g$(DEBUG)\r
+CPPFLAGS += $(CPPDEFS)\r
+CPPFLAGS += -O$(OPT)\r
+CPPFLAGS += -funsigned-char\r
+CPPFLAGS += -funsigned-bitfields\r
+CPPFLAGS += -fpack-struct\r
+CPPFLAGS += -fshort-enums\r
+CPPFLAGS += -fno-exceptions\r
+CPPFLAGS += -Wall\r
+CFLAGS += -Wundef\r
+#CPPFLAGS += -mshort-calls\r
+#CPPFLAGS += -fno-unit-at-a-time\r
+#CPPFLAGS += -Wstrict-prototypes\r
+#CPPFLAGS += -Wunreachable-code\r
+#CPPFLAGS += -Wsign-compare\r
+CPPFLAGS += -Wa,-adhlns=$(<:%.cpp=$(OBJDIR)/%.lst)\r
+CPPFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))\r
+#CPPFLAGS += $(CSTANDARD)\r
+\r
+\r
+#---------------- Assembler Options ----------------\r
+#  -Wa,...:   tell GCC to pass this to the assembler.\r
+#  -adhlns:   create listing\r
+#  -gstabs:   have the assembler create line number information; note that\r
+#             for use in COFF files, additional information about filenames\r
+#             and function names needs to be present in the assembler source\r
+#             files -- see avr-libc docs [FIXME: not yet described there]\r
+#  -listing-cont-lines: Sets the maximum number of continuation lines of hex \r
+#       dump that will be displayed for a given single line of source input.\r
+ASFLAGS = $(ADEFS) -Wa,-adhlns=$(<:%.S=$(OBJDIR)/%.lst),-gstabs,--listing-cont-lines=100\r
+\r
+\r
+#---------------- Library Options ----------------\r
+# Minimalistic printf version\r
+PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min\r
+\r
+# Floating point printf version (requires MATH_LIB = -lm below)\r
+PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt\r
+\r
+# If this is left blank, then it will use the Standard printf version.\r
+PRINTF_LIB = \r
+#PRINTF_LIB = $(PRINTF_LIB_MIN)\r
+#PRINTF_LIB = $(PRINTF_LIB_FLOAT)\r
+\r
+\r
+# Minimalistic scanf version\r
+SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min\r
+\r
+# Floating point + %[ scanf version (requires MATH_LIB = -lm below)\r
+SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt\r
+\r
+# If this is left blank, then it will use the Standard scanf version.\r
+SCANF_LIB = \r
+#SCANF_LIB = $(SCANF_LIB_MIN)\r
+#SCANF_LIB = $(SCANF_LIB_FLOAT)\r
+\r
+\r
+MATH_LIB = -lm\r
+\r
+\r
+# List any extra directories to look for libraries here.\r
+#     Each directory must be seperated by a space.\r
+#     Use forward slashes for directory separators.\r
+#     For a directory that has spaces, enclose it in quotes.\r
+EXTRALIBDIRS = \r
+\r
+\r
+\r
+#---------------- External Memory Options ----------------\r
+\r
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),\r
+# used for variables (.data/.bss) and heap (malloc()).\r
+#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff\r
+\r
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),\r
+# only used for heap (malloc()).\r
+#EXTMEMOPTS = -Wl,--section-start,.data=0x801100,--defsym=__heap_end=0x80ffff\r
+\r
+EXTMEMOPTS =\r
+\r
+\r
+\r
+#---------------- Linker Options ----------------\r
+#  -Wl,...:     tell GCC to pass this to linker.\r
+#    -Map:      create map file\r
+#    --cref:    add cross reference to  map file\r
+LDFLAGS = -Wl,-Map=$(TARGET).map,--cref\r
+LDFLAGS += -Wl,--relax \r
+LDFLAGS += -Wl,--gc-sections\r
+LDFLAGS += $(EXTMEMOPTS)\r
+LDFLAGS += $(patsubst %,-L%,$(EXTRALIBDIRS))\r
+LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)\r
+#LDFLAGS += -T linker_script.x\r
+\r
+\r
+\r
+#---------------- Programming Options (avrdude) ----------------\r
+\r
+# Programming hardware: alf avr910 avrisp bascom bsd \r
+# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500\r
+#\r
+# Type: avrdude -c ?\r
+# to get a full listing.\r
+#\r
+AVRDUDE_PROGRAMMER = jtagmkII\r
+\r
+# com1 = serial port. Use lpt1 to connect to parallel port.\r
+AVRDUDE_PORT = usb\r
+\r
+AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex\r
+#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep\r
+\r
+\r
+# Uncomment the following if you want avrdude's erase cycle counter.\r
+# Note that this counter needs to be initialized first using -Yn,\r
+# see avrdude manual.\r
+#AVRDUDE_ERASE_COUNTER = -y\r
+\r
+# Uncomment the following if you do /not/ wish a verification to be\r
+# performed after programming the device.\r
+#AVRDUDE_NO_VERIFY = -V\r
+\r
+# Increase verbosity level.  Please use this when submitting bug\r
+# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude> \r
+# to submit bug reports.\r
+#AVRDUDE_VERBOSE = -v -v\r
+\r
+AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)\r
+AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY)\r
+AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE)\r
+AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER)\r
+\r
+\r
+\r
+#---------------- Debugging Options ----------------\r
+\r
+# For simulavr only - target MCU frequency.\r
+DEBUG_MFREQ = $(F_CPU)\r
+\r
+# Set the DEBUG_UI to either gdb or insight.\r
+# DEBUG_UI = gdb\r
+DEBUG_UI = insight\r
+\r
+# Set the debugging back-end to either avarice, simulavr.\r
+DEBUG_BACKEND = avarice\r
+#DEBUG_BACKEND = simulavr\r
+\r
+# GDB Init Filename.\r
+GDBINIT_FILE = __avr_gdbinit\r
+\r
+# When using avarice settings for the JTAG\r
+JTAG_DEV = /dev/com1\r
+\r
+# Debugging port used to communicate between GDB / avarice / simulavr.\r
+DEBUG_PORT = 4242\r
+\r
+# Debugging host used to communicate between GDB / avarice / simulavr, normally\r
+#     just set to localhost unless doing some sort of crazy debugging when \r
+#     avarice is running on a different computer.\r
+DEBUG_HOST = localhost\r
+\r
+\r
+\r
+#============================================================================\r
+\r
+\r
+# Define programs and commands.\r
+SHELL = sh\r
+CC = avr-gcc\r
+OBJCOPY = avr-objcopy\r
+OBJDUMP = avr-objdump\r
+SIZE = avr-size\r
+AR = avr-ar rcs\r
+NM = avr-nm\r
+AVRDUDE = avrdude\r
+REMOVE = rm -f\r
+REMOVEDIR = rm -rf\r
+COPY = cp\r
+WINSHELL = cmd\r
+\r
+# Define Messages\r
+# English\r
+MSG_ERRORS_NONE = Errors: none\r
+MSG_BEGIN = -------- begin --------\r
+MSG_END = --------  end  --------\r
+MSG_SIZE_BEFORE = Size before: \r
+MSG_SIZE_AFTER = Size after:\r
+MSG_COFF = Converting to AVR COFF:\r
+MSG_EXTENDED_COFF = Converting to AVR Extended COFF:\r
+MSG_FLASH = Creating load file for Flash:\r
+MSG_EEPROM = Creating load file for EEPROM:\r
+MSG_EXTENDED_LISTING = Creating Extended Listing:\r
+MSG_SYMBOL_TABLE = Creating Symbol Table:\r
+MSG_LINKING = Linking:\r
+MSG_COMPILING = Compiling C:\r
+MSG_COMPILING_CPP = Compiling C++:\r
+MSG_ASSEMBLING = Assembling:\r
+MSG_CLEANING = Cleaning project:\r
+MSG_CREATING_LIBRARY = Creating library:\r
+\r
+\r
+\r
+\r
+# Define all object files.\r
+OBJ = $(SRC:%.c=$(OBJDIR)/%.o) $(CPPSRC:%.cpp=$(OBJDIR)/%.o) $(ASRC:%.S=$(OBJDIR)/%.o) \r
+\r
+# Define all listing files.\r
+LST = $(SRC:%.c=$(OBJDIR)/%.lst) $(CPPSRC:%.cpp=$(OBJDIR)/%.lst) $(ASRC:%.S=$(OBJDIR)/%.lst) \r
+\r
+\r
+# Compiler flags to generate dependency files.\r
+GENDEPFLAGS = -MMD -MP -MF .dep/$(@F).d\r
+\r
+\r
+# Combine all necessary flags and optional flags.\r
+# Add target processor to flags.\r
+ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS)\r
+ALL_CPPFLAGS = -mmcu=$(MCU) -I. -x c++ $(CPPFLAGS) $(GENDEPFLAGS)\r
+ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)\r
+\r
+\r
+\r
+\r
+\r
+# Default target.\r
+all: begin gccversion sizebefore build checkhooks checklibmode checkboard sizeafter end\r
+\r
+# Change the build target to build a HEX file or a library.\r
+build: elf hex eep lss sym\r
+#build: lib\r
+\r
+\r
+elf: $(TARGET).elf\r
+hex: $(TARGET).hex\r
+eep: $(TARGET).eep\r
+lss: $(TARGET).lss\r
+sym: $(TARGET).sym\r
+LIBNAME=lib$(TARGET).a\r
+lib: $(LIBNAME)\r
+\r
+\r
+\r
+# Eye candy.\r
+# AVR Studio 3.x does not check make's exit code but relies on\r
+# the following magic strings to be generated by the compile job.\r
+begin:\r
+       @echo\r
+       @echo $(MSG_BEGIN)\r
+\r
+end:\r
+       @echo $(MSG_END)\r
+       @echo\r
+\r
+\r
+# Display size of file.\r
+HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex\r
+ELFSIZE = $(SIZE) $(MCU_FLAG) $(FORMAT_FLAG) $(TARGET).elf\r
+MCU_FLAG = $(shell $(SIZE) --help | grep -- --mcu > /dev/null && echo --mcu=$(MCU) )\r
+FORMAT_FLAG = $(shell $(SIZE) --help | grep -- --format=.*avr > /dev/null && echo --format=avr )\r
+\r
+sizebefore:\r
+       @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \\r
+       2>/dev/null; echo; fi\r
+\r
+sizeafter:\r
+       @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \\r
+       2>/dev/null; echo; fi\r
+\r
+checkhooks: build\r
+       @echo\r
+       @echo ------- Unhooked LUFA Events -------\r
+       @$(shell) (grep -s '^EVENT_.*LUFA/.*\\.o' $(TARGET).map | \\r
+                  cut -d' ' -f1 | cut -d'_' -f2- | grep ".*") || \\r
+                          echo "(None)"\r
+       @echo ------------------------------------\r
+\r
+checklibmode:\r
+       @echo\r
+       @echo ----------- Library Mode -----------\r
+       @$(shell) ($(CC) $(ALL_CFLAGS) -E -dM - < /dev/null \\r
+                 | grep 'USB_\(DEVICE\|HOST\)_ONLY' | cut -d' ' -f2 | grep ".*") \\r
+                 || echo "No specific mode (both device and host mode allowable)."\r
+       @echo ------------------------------------\r
+\r
+checkboard:\r
+       @echo\r
+       @echo ---------- Selected Board ----------\r
+       @echo Selected board model is $(BOARD).\r
+       @echo ------------------------------------\r
+       \r
+# Display compiler version information.\r
+gccversion : \r
+       @$(CC) --version\r
+\r
+\r
+\r
+# Program the device.  \r
+program: $(TARGET).hex $(TARGET).eep\r
+       $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)\r
+\r
+flip: $(TARGET).hex\r
+       batchisp -hardware usb -device $(MCU) -operation erase f\r
+       batchisp -hardware usb -device $(MCU) -operation loadbuffer $(TARGET).hex program\r
+       batchisp -hardware usb -device $(MCU) -operation start reset 0\r
+\r
+dfu: $(TARGET).hex\r
+       dfu-programmer $(MCU) erase\r
+       dfu-programmer $(MCU) flash --debug 1 $(TARGET).hex\r
+       dfu-programmer $(MCU) reset\r
+\r
+flip-ee: $(TARGET).hex $(TARGET).eep\r
+       copy $(TARGET).eep $(TARGET)eep.hex\r
+       batchisp -hardware usb -device $(MCU) -operation memory EEPROM erase\r
+       batchisp -hardware usb -device $(MCU) -operation memory EEPROM loadbuffer $(TARGET)eep.hex program\r
+       batchisp -hardware usb -device $(MCU) -operation start reset 0\r
+\r
+dfu-ee: $(TARGET).hex $(TARGET).eep\r
+       dfu-programmer $(MCU) flash-eeprom --debug 1 --suppress-bootloader-mem $(TARGET).eep\r
+       dfu-programmer $(MCU) reset\r
+\r
+\r
+# Generate avr-gdb config/init file which does the following:\r
+#     define the reset signal, load the target file, connect to target, and set \r
+#     a breakpoint at main().\r
+gdb-config: \r
+       @$(REMOVE) $(GDBINIT_FILE)\r
+       @echo define reset >> $(GDBINIT_FILE)\r
+       @echo SIGNAL SIGHUP >> $(GDBINIT_FILE)\r
+       @echo end >> $(GDBINIT_FILE)\r
+       @echo file $(TARGET).elf >> $(GDBINIT_FILE)\r
+       @echo target remote $(DEBUG_HOST):$(DEBUG_PORT)  >> $(GDBINIT_FILE)\r
+ifeq ($(DEBUG_BACKEND),simulavr)\r
+       @echo load  >> $(GDBINIT_FILE)\r
+endif\r
+       @echo break main >> $(GDBINIT_FILE)\r
+\r
+debug: gdb-config $(TARGET).elf\r
+ifeq ($(DEBUG_BACKEND), avarice)\r
+       @echo Starting AVaRICE - Press enter when "waiting to connect" message displays.\r
+       @$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \\r
+       $(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT)\r
+       @$(WINSHELL) /c pause\r
+\r
+else\r
+       @$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \\r
+       $(DEBUG_MFREQ) --port $(DEBUG_PORT)\r
+endif\r
+       @$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE)\r
+\r
+\r
+\r
+\r
+# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.\r
+COFFCONVERT = $(OBJCOPY) --debugging\r
+COFFCONVERT += --change-section-address .data-0x800000\r
+COFFCONVERT += --change-section-address .bss-0x800000\r
+COFFCONVERT += --change-section-address .noinit-0x800000\r
+COFFCONVERT += --change-section-address .eeprom-0x810000\r
+\r
+\r
+\r
+coff: $(TARGET).elf\r
+       @echo\r
+       @echo $(MSG_COFF) $(TARGET).cof\r
+       $(COFFCONVERT) -O coff-avr $< $(TARGET).cof\r
+\r
+\r
+extcoff: $(TARGET).elf\r
+       @echo\r
+       @echo $(MSG_EXTENDED_COFF) $(TARGET).cof\r
+       $(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof\r
+\r
+\r
+\r
+# Create final output files (.hex, .eep) from ELF output file.\r
+%.hex: %.elf\r
+       @echo\r
+       @echo $(MSG_FLASH) $@\r
+       $(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@\r
+\r
+%.eep: %.elf\r
+       @echo\r
+       @echo $(MSG_EEPROM) $@\r
+       -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \\r
+       --change-section-lma .eeprom=0 --no-change-warnings -O $(FORMAT) $< $@ || exit 0\r
+\r
+# Create extended listing file from ELF output file.\r
+%.lss: %.elf\r
+       @echo\r
+       @echo $(MSG_EXTENDED_LISTING) $@\r
+       $(OBJDUMP) -h -z -S $< > $@\r
+\r
+# Create a symbol table from ELF output file.\r
+%.sym: %.elf\r
+       @echo\r
+       @echo $(MSG_SYMBOL_TABLE) $@\r
+       $(NM) -n $< > $@\r
+\r
+\r
+\r
+# Create library from object files.\r
+.SECONDARY : $(TARGET).a\r
+.PRECIOUS : $(OBJ)\r
+%.a: $(OBJ)\r
+       @echo\r
+       @echo $(MSG_CREATING_LIBRARY) $@\r
+       $(AR) $@ $(OBJ)\r
+\r
+\r
+# Link: create ELF output file from object files.\r
+.SECONDARY : $(TARGET).elf\r
+.PRECIOUS : $(OBJ)\r
+%.elf: $(OBJ)\r
+       @echo\r
+       @echo $(MSG_LINKING) $@\r
+       $(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)\r
+\r
+\r
+# Compile: create object files from C source files.\r
+$(OBJDIR)/%.o : %.c\r
+       @echo\r
+       @echo $(MSG_COMPILING) $<\r
+       $(CC) -c $(ALL_CFLAGS) $< -o $@ \r
+\r
+\r
+# Compile: create object files from C++ source files.\r
+$(OBJDIR)/%.o : %.cpp\r
+       @echo\r
+       @echo $(MSG_COMPILING_CPP) $<\r
+       $(CC) -c $(ALL_CPPFLAGS) $< -o $@ \r
+\r
+\r
+# Compile: create assembler files from C source files.\r
+%.s : %.c\r
+       $(CC) -S $(ALL_CFLAGS) $< -o $@\r
+\r
+\r
+# Compile: create assembler files from C++ source files.\r
+%.s : %.cpp\r
+       $(CC) -S $(ALL_CPPFLAGS) $< -o $@\r
+\r
+\r
+# Assemble: create object files from assembler source files.\r
+$(OBJDIR)/%.o : %.S\r
+       @echo\r
+       @echo $(MSG_ASSEMBLING) $<\r
+       $(CC) -c $(ALL_ASFLAGS) $< -o $@\r
+\r
+\r
+# Create preprocessed source for use in sending a bug report.\r
+%.i : %.c\r
+       $(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ \r
+       \r
+\r
+# Target: clean project.\r
+clean: begin clean_list clean_binary end\r
+\r
+clean_binary:\r
+       $(REMOVE) $(TARGET).hex\r
+       \r
+clean_list:\r
+       @echo $(MSG_CLEANING)\r
+       $(REMOVE) $(TARGET).eep\r
+       $(REMOVE) $(TARGET)eep.hex\r
+       $(REMOVE) $(TARGET).cof\r
+       $(REMOVE) $(TARGET).elf\r
+       $(REMOVE) $(TARGET).map\r
+       $(REMOVE) $(TARGET).sym\r
+       $(REMOVE) $(TARGET).lss\r
+       $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.o)\r
+       $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.lst)\r
+       $(REMOVE) $(SRC:.c=.s)\r
+       $(REMOVE) $(SRC:.c=.d)\r
+       $(REMOVE) $(SRC:.c=.i)\r
+       $(REMOVEDIR) .dep\r
+\r
+\r
+doxygen:\r
+       @echo Generating Project Documentation...\r
+       @doxygen Doxygen.conf\r
+       @echo Documentation Generation Complete.\r
+\r
+clean_doxygen:\r
+       rm -rf Documentation\r
+\r
+# Create object files directory\r
+$(shell mkdir $(OBJDIR) 2>/dev/null)\r
+\r
+\r
+# Include the dependency files.\r
+-include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)\r
+\r
+\r
+# Listing of phony targets.\r
+.PHONY : all checkhooks checklibmode checkboard   \\r
+begin finish end sizebefore sizeafter gccversion  \\r
+build elf hex eep lss sym coff extcoff clean      \\r
+clean_list clean_binary program debug gdb-config  \\r
+doxygen dfu flip flip-ee dfu-ee
\ No newline at end of file
diff --git a/Demos/Device/ClassDriver/CDC/CDC.aps b/Demos/Device/ClassDriver/CDC/CDC.aps
new file mode 100644 (file)
index 0000000..83dde59
--- /dev/null
@@ -0,0 +1 @@
+<AVRStudio><MANAGEMENT><ProjectName>CDC</ProjectName><Created>30-Sep-2008 14:04:34</Created><LastEdit>30-Sep-2008 14:04:56</LastEdit><ICON>241</ICON><ProjectType>0</ProjectType><Created>30-Sep-2008 14:04:34</Created><Version>4</Version><Build>4, 14, 0, 589</Build><ProjectTypeName>AVR GCC</ProjectTypeName></MANAGEMENT><CODE_CREATION><ObjectFile></ObjectFile><EntryFile></EntryFile><SaveFolder>C:\Users\Dean\Documents\Electronics\Projects\WORK\MyUSBWORK\Demos\CDC\</SaveFolder></CODE_CREATION><DEBUG_TARGET><CURRENT_TARGET></CURRENT_TARGET><CURRENT_PART></CURRENT_PART><BREAKPOINTS></BREAKPOINTS><IO_EXPAND><HIDE>false</HIDE></IO_EXPAND><REGISTERNAMES><Register>R00</Register><Register>R01</Register><Register>R02</Register><Register>R03</Register><Register>R04</Register><Register>R05</Register><Register>R06</Register><Register>R07</Register><Register>R08</Register><Register>R09</Register><Register>R10</Register><Register>R11</Register><Register>R12</Register><Register>R13</Register><Register>R14</Register><Register>R15</Register><Register>R16</Register><Register>R17</Register><Register>R18</Register><Register>R19</Register><Register>R20</Register><Register>R21</Register><Register>R22</Register><Register>R23</Register><Register>R24</Register><Register>R25</Register><Register>R26</Register><Register>R27</Register><Register>R28</Register><Register>R29</Register><Register>R30</Register><Register>R31</Register></REGISTERNAMES><COM>Auto</COM><COMType>0</COMType><WATCHNUM>0</WATCHNUM><WATCHNAMES><Pane0></Pane0><Pane1></Pane1><Pane2></Pane2><Pane3></Pane3></WATCHNAMES><BreakOnTrcaeFull>0</BreakOnTrcaeFull></DEBUG_TARGET><Debugger><Triggers></Triggers></Debugger><AVRGCCPLUGIN><FILES><SOURCEFILE>CDC.c</SOURCEFILE><SOURCEFILE>Descriptors.c</SOURCEFILE><HEADERFILE>CDC.h</HEADERFILE><HEADERFILE>Descriptors.h</HEADERFILE><OTHERFILE>makefile</OTHERFILE></FILES><CONFIGS><CONFIG><NAME>default</NAME><USESEXTERNALMAKEFILE>YES</USESEXTERNALMAKEFILE><EXTERNALMAKEFILE>makefile</EXTERNALMAKEFILE><PART>atmega128</PART><HEX>1</HEX><LIST>1</LIST><MAP>1</MAP><OUTPUTFILENAME>CDC.elf</OUTPUTFILENAME><OUTPUTDIR>default\</OUTPUTDIR><ISDIRTY>1</ISDIRTY><OPTIONS/><INCDIRS/><LIBDIRS/><LIBS/><LINKOBJECTS/><OPTIONSFORALL>-Wall -gdwarf-2 -std=gnu99 -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums</OPTIONSFORALL><LINKEROPTIONS></LINKEROPTIONS><SEGMENTS/></CONFIG></CONFIGS><LASTCONFIG>default</LASTCONFIG><USES_WINAVR>1</USES_WINAVR><GCC_LOC>C:\WinAVR-20080512\bin\avr-gcc.exe</GCC_LOC><MAKE_LOC>C:\WinAVR-20080512\utils\bin\make.exe</MAKE_LOC></AVRGCCPLUGIN><IOView><usergroups/><sort sorted="0" column="0" ordername="0" orderaddress="0" ordergroup="0"/></IOView><Files></Files><Events><Bookmarks></Bookmarks></Events><Trace><Filters></Filters></Trace></AVRStudio>\r
diff --git a/Demos/Device/ClassDriver/CDC/CDC.c b/Demos/Device/ClassDriver/CDC/CDC.c
new file mode 100644 (file)
index 0000000..6f15393
--- /dev/null
@@ -0,0 +1,157 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  Main source file for the CDC demo. This file contains the main tasks of\r
+ *  the demo and is responsible for the initial application hardware configuration.\r
+ */\r
\r
+#include "CDC.h"\r
+\r
+/** LUFA CDC Class driver interface configuration and state information. This structure is\r
+ *  passed to all CDC Class driver functions, so that multiple instances of the same class\r
+ *  within a device can be differentiated from one another.\r
+ */\r
+USB_ClassInfo_CDC_t VirtualSerial_CDC_Interface =\r
+       {\r
+               .ControlInterfaceNumber     = 0,\r
+\r
+               .DataINEndpointNumber       = CDC_TX_EPNUM,\r
+               .DataINEndpointSize         = CDC_TXRX_EPSIZE,\r
+\r
+               .DataOUTEndpointNumber      = CDC_RX_EPNUM,\r
+               .DataOUTEndpointSize        = CDC_TXRX_EPSIZE,\r
+\r
+               .NotificationEndpointNumber = CDC_NOTIFICATION_EPNUM,\r
+               .NotificationEndpointSize   = CDC_NOTIFICATION_EPSIZE,\r
+       };\r
+\r
+/** Main program entry point. This routine contains the overall program flow, including initial\r
+ *  setup of all components and the main program loop.\r
+ */\r
+int main(void)\r
+{\r
+       SetupHardware();\r
+       \r
+       LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);\r
+\r
+       for (;;)\r
+       {\r
+               CheckJoystickMovement();\r
+               \r
+               uint16_t BytesToDiscard = USB_CDC_BytesReceived(&VirtualSerial_CDC_Interface);\r
+               while (BytesToDiscard--)\r
+                 USB_CDC_ReceiveByte(&VirtualSerial_CDC_Interface);\r
+\r
+               USB_CDC_USBTask(&VirtualSerial_CDC_Interface);\r
+               USB_USBTask();\r
+       }\r
+}\r
+\r
+/** Configures the board hardware and chip peripherals for the demo's functionality. */\r
+void SetupHardware(void)\r
+{\r
+       /* Disable watchdog if enabled by bootloader/fuses */\r
+       MCUSR &= ~(1 << WDRF);\r
+       wdt_disable();\r
+\r
+       /* Disable clock division */\r
+       clock_prescale_set(clock_div_1);\r
+\r
+       /* Hardware Initialization */\r
+       Joystick_Init();\r
+       LEDs_Init();\r
+       USB_Init();\r
+}\r
+\r
+/** Checks for changes in the position of the board joystick, sending strings to the host upon each change. */\r
+void CheckJoystickMovement(void)\r
+{\r
+       uint8_t     JoyStatus_LCL = Joystick_GetStatus();\r
+       char*       ReportString  = NULL;\r
+       static bool ActionSent    = false;\r
+       \r
+       char* JoystickStrings[] =\r
+               {\r
+                       "Joystick Up\r\n",\r
+                       "Joystick Down\r\n",\r
+                       "Joystick Left\r\n",\r
+                       "Joystick Right\r\n",\r
+                       "Joystick Pressed\r\n",\r
+               };\r
+\r
+       if (JoyStatus_LCL & JOY_UP)\r
+         ReportString = JoystickStrings[0];\r
+       else if (JoyStatus_LCL & JOY_DOWN)\r
+         ReportString = JoystickStrings[1];\r
+       else if (JoyStatus_LCL & JOY_LEFT)\r
+         ReportString = JoystickStrings[2];\r
+       else if (JoyStatus_LCL & JOY_RIGHT)\r
+         ReportString = JoystickStrings[3];\r
+       else if (JoyStatus_LCL & JOY_PRESS)\r
+         ReportString = JoystickStrings[4];\r
+       else\r
+         ActionSent = false;\r
+         \r
+       if ((ReportString != NULL) && (ActionSent == false))\r
+       {\r
+               ActionSent = true;\r
+               \r
+               USB_CDC_SendString(&VirtualSerial_CDC_Interface, ReportString, strlen(ReportString));           \r
+       }\r
+}\r
+\r
+/** Event handler for the library USB Connection event. */\r
+void EVENT_USB_Connect(void)\r
+{\r
+       LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING);\r
+}\r
+\r
+/** Event handler for the library USB Disconnection event. */\r
+void EVENT_USB_Disconnect(void)\r
+{\r
+       LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);\r
+}\r
+\r
+/** Event handler for the library USB Configuration Changed event. */\r
+void EVENT_USB_ConfigurationChanged(void)\r
+{\r
+       LEDs_SetAllLEDs(LEDMASK_USB_READY);\r
+\r
+       if (!(USB_CDC_ConfigureEndpoints(&VirtualSerial_CDC_Interface)))\r
+         LEDs_SetAllLEDs(LEDMASK_USB_ERROR);\r
+}\r
+\r
+/** Event handler for the library USB Unhandled Control Packet event. */\r
+void EVENT_USB_UnhandledControlPacket(void)\r
+{\r
+       USB_CDC_ProcessControlPacket(&VirtualSerial_CDC_Interface);\r
+}\r
diff --git a/Demos/Device/ClassDriver/CDC/CDC.h b/Demos/Device/ClassDriver/CDC/CDC.h
new file mode 100644 (file)
index 0000000..23072d6
--- /dev/null
@@ -0,0 +1,75 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  Header file for CDC.c.\r
+ */\r
+\r
+#ifndef _CDC_H_\r
+#define _CDC_H_\r
+\r
+       /* Includes: */\r
+               #include <avr/io.h>\r
+               #include <avr/wdt.h>\r
+               #include <avr/power.h>\r
+               #include <string.h>\r
+\r
+               #include "Descriptors.h"\r
+\r
+               #include <LUFA/Version.h>\r
+               #include <LUFA/Drivers/Board/LEDs.h>\r
+               #include <LUFA/Drivers/Board/Joystick.h>\r
+               #include <LUFA/Drivers/USB/USB.h>\r
+               #include <LUFA/Drivers/USB/Class/Device/CDC.h>\r
+\r
+       /* Macros: */\r
+               /** LED mask for the library LED driver, to indicate that the USB interface is not ready. */\r
+               #define LEDMASK_USB_NOTREADY      LEDS_LED1\r
+\r
+               /** LED mask for the library LED driver, to indicate that the USB interface is enumerating. */\r
+               #define LEDMASK_USB_ENUMERATING  (LEDS_LED2 | LEDS_LED3)\r
+\r
+               /** LED mask for the library LED driver, to indicate that the USB interface is ready. */\r
+               #define LEDMASK_USB_READY        (LEDS_LED2 | LEDS_LED4)\r
+\r
+               /** LED mask for the library LED driver, to indicate that an error has occurred in the USB interface. */\r
+               #define LEDMASK_USB_ERROR        (LEDS_LED1 | LEDS_LED3)\r
+               \r
+       /* Function Prototypes: */\r
+               void SetupHardware(void);\r
+               void CheckJoystickMovement(void);\r
+\r
+               void EVENT_USB_Connect(void);\r
+               void EVENT_USB_Disconnect(void);\r
+               void EVENT_USB_ConfigurationChanged(void);\r
+               void EVENT_USB_UnhandledControlPacket(void);\r
+\r
+#endif\r
diff --git a/Demos/Device/ClassDriver/CDC/CDC.txt b/Demos/Device/ClassDriver/CDC/CDC.txt
new file mode 100644 (file)
index 0000000..8e13b55
--- /dev/null
@@ -0,0 +1,63 @@
+/** \file\r
+ *\r
+ *  This file contains special DoxyGen information for the generation of the main page and other special\r
+ *  documentation pages. It is not a project source file.\r
+ */\r
\r
+/** \mainpage Communications Device Class Device (Virtual Serial Port)\r
+ *\r
+ *  \section SSec_Info USB Information:\r
+ *\r
+ *  The following table gives a rundown of the USB utilization of this demo.\r
+ *\r
+ *  <table>\r
+ *   <tr>\r
+ *    <td><b>USB Mode:</b></td>\r
+ *    <td>Device</td>\r
+ *   </tr>\r
+ *   <tr>\r
+ *    <td><b>USB Class:</b></td>\r
+ *    <td>Communications Device Class (CDC)</td>\r
+ *   </tr>\r
+ *   <tr> \r
+ *    <td><b>USB Subclass:</b></td>\r
+ *    <td>Abstract Control Model (ACM)</td>\r
+ *   </tr>\r
+ *   <tr>\r
+ *    <td><b>Relevant Standards:</b></td>\r
+ *    <td>USBIF CDC Class Standard</td>\r
+ *   </tr>\r
+ *   <tr>\r
+ *    <td><b>Usable Speeds:</b></td>\r
+ *    <td>Full Speed Mode</td>\r
+ *   </tr>\r
+ *  </table>\r
+ *\r
+ *  \section SSec_Description Project Description: \r
+ *\r
+ *  Communications Device Class demonstration application.\r
+ *  This gives a simple reference application for implementing\r
+ *  a CDC device acting as a virtual serial port. Joystick\r
+ *  actions are transmitted to the host as strings. The device\r
+ *  does not respond to serial data sent from the host.\r
+ *  \r
+ *  After running this demo for the first time on a new computer,\r
+ *  you will need to supply the .INF file located in this demo\r
+ *  project's directory as the device's driver when running under\r
+ *  Windows. This will enable Windows to use its inbuilt CDC drivers,\r
+ *  negating the need for custom drivers for the device. Other\r
+ *  Operating Systems should automatically use their own inbuilt\r
+ *  CDC-ACM drivers.\r
+ *\r
+ *  \section SSec_Options Project Options\r
+ *\r
+ *  The following defines can be found in this demo, which can control the demo behaviour when defined, or changed in value.\r
+ *\r
+ *  <table>\r
+ *   <tr>\r
+ *    <td>\r
+ *     None\r
+ *    </td>\r
+ *   </tr>\r
+ *  </table>\r
+ */
\ No newline at end of file
diff --git a/Demos/Device/ClassDriver/CDC/Descriptors.c b/Demos/Device/ClassDriver/CDC/Descriptors.c
new file mode 100644 (file)
index 0000000..03e6882
--- /dev/null
@@ -0,0 +1,263 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  USB Device Descriptors, for library use when in USB device mode. Descriptors are special \r
+ *  computer-readable structures which the host requests upon device enumeration, to determine\r
+ *  the device's capabilities and functions.  \r
+ */\r
+\r
+#include "Descriptors.h"\r
+\r
+/** Device descriptor structure. This descriptor, located in FLASH memory, describes the overall\r
+ *  device characteristics, including the supported USB version, control endpoint size and the\r
+ *  number of device configurations. The descriptor is read out by the USB host when the enumeration\r
+ *  process begins.\r
+ */\r
+USB_Descriptor_Device_t PROGMEM DeviceDescriptor =\r
+{\r
+       .Header                 = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device},\r
+               \r
+       .USBSpecification       = VERSION_BCD(01.10),\r
+       .Class                  = 0x02,\r
+       .SubClass               = 0x00,\r
+       .Protocol               = 0x00,\r
+                               \r
+       .Endpoint0Size          = FIXED_CONTROL_ENDPOINT_SIZE,\r
+               \r
+       .VendorID               = 0x03EB,\r
+       .ProductID              = 0x2044,\r
+       .ReleaseNumber          = 0x0000,\r
+               \r
+       .ManufacturerStrIndex   = 0x01,\r
+       .ProductStrIndex        = 0x02,\r
+       .SerialNumStrIndex      = NO_DESCRIPTOR,\r
+               \r
+       .NumberOfConfigurations = 1\r
+};\r
+\r
+/** Configuration descriptor structure. This descriptor, located in FLASH memory, describes the usage\r
+ *  of the device in one of its supported configurations, including information about any device interfaces\r
+ *  and endpoints. The descriptor is read out by the USB host during the enumeration process when selecting\r
+ *  a configuration so that the host may correctly communicate with the USB device.\r
+ */\r
+USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =\r
+{\r
+       .Config = \r
+               {\r
+                       .Header                 = {.Size = sizeof(USB_Descriptor_Configuration_Header_t), .Type = DTYPE_Configuration},\r
+\r
+                       .TotalConfigurationSize = sizeof(USB_Descriptor_Configuration_t),\r
+                       .TotalInterfaces        = 2,\r
+                               \r
+                       .ConfigurationNumber    = 1,\r
+                       .ConfigurationStrIndex  = NO_DESCRIPTOR,\r
+                               \r
+                       .ConfigAttributes       = (USB_CONFIG_ATTR_BUSPOWERED | USB_CONFIG_ATTR_SELFPOWERED),\r
+                       \r
+                       .MaxPowerConsumption    = USB_CONFIG_POWER_MA(100)\r
+               },\r
+               \r
+       .CCI_Interface = \r
+               {\r
+                       .Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},\r
+\r
+                       .InterfaceNumber        = 0,\r
+                       .AlternateSetting       = 0,\r
+                       \r
+                       .TotalEndpoints         = 1,\r
+                               \r
+                       .Class                  = 0x02,\r
+                       .SubClass               = 0x02,\r
+                       .Protocol               = 0x01,\r
+                               \r
+                       .InterfaceStrIndex      = NO_DESCRIPTOR\r
+               },\r
+\r
+       .CDC_Functional_IntHeader = \r
+               {\r
+                       .Header                 = {.Size = sizeof(CDC_FUNCTIONAL_DESCRIPTOR(2)), .Type = 0x24},\r
+                       .SubType                = 0x00,\r
+                       \r
+                       .Data                   = {0x01, 0x10}\r
+               },\r
+\r
+       .CDC_Functional_CallManagement = \r
+               {\r
+                       .Header                 = {.Size = sizeof(CDC_FUNCTIONAL_DESCRIPTOR(2)), .Type = 0x24},\r
+                       .SubType                = 0x01,\r
+                       \r
+                       .Data                   = {0x03, 0x01}\r
+               },\r
+\r
+       .CDC_Functional_AbstractControlManagement = \r
+               {\r
+                       .Header                 = {.Size = sizeof(CDC_FUNCTIONAL_DESCRIPTOR(1)), .Type = 0x24},\r
+                       .SubType                = 0x02,\r
+                       \r
+                       .Data                   = {0x06}\r
+               },\r
+               \r
+       .CDC_Functional_Union = \r
+               {\r
+                       .Header                 = {.Size = sizeof(CDC_FUNCTIONAL_DESCRIPTOR(2)), .Type = 0x24},\r
+                       .SubType                = 0x06,\r
+                       \r
+                       .Data                   = {0x00, 0x01}\r
+               },\r
+\r
+       .ManagementEndpoint = \r
+               {\r
+                       .Header                 = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},\r
+                                                                                \r
+                       .EndpointAddress        = (ENDPOINT_DESCRIPTOR_DIR_IN | CDC_NOTIFICATION_EPNUM),\r
+                       .Attributes             = EP_TYPE_INTERRUPT,\r
+                       .EndpointSize           = CDC_NOTIFICATION_EPSIZE,\r
+                       .PollingIntervalMS      = 0xFF\r
+               },\r
+\r
+       .DCI_Interface = \r
+               {\r
+                       .Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},\r
+\r
+                       .InterfaceNumber        = 1,\r
+                       .AlternateSetting       = 0,\r
+                       \r
+                       .TotalEndpoints         = 2,\r
+                               \r
+                       .Class                  = 0x0A,\r
+                       .SubClass               = 0x00,\r
+                       .Protocol               = 0x00,\r
+                               \r
+                       .InterfaceStrIndex      = NO_DESCRIPTOR\r
+               },\r
+\r
+       .DataOutEndpoint = \r
+               {\r
+                       .Header                 = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},\r
+                                                                                \r
+                       .EndpointAddress        = (ENDPOINT_DESCRIPTOR_DIR_OUT | CDC_RX_EPNUM),\r
+                       .Attributes             = EP_TYPE_BULK,\r
+                       .EndpointSize           = CDC_TXRX_EPSIZE,\r
+                       .PollingIntervalMS      = 0x00\r
+               },\r
+               \r
+       .DataInEndpoint = \r
+               {\r
+                       .Header                 = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},\r
+                                                                                \r
+                       .EndpointAddress        = (ENDPOINT_DESCRIPTOR_DIR_IN | CDC_TX_EPNUM),\r
+                       .Attributes             = EP_TYPE_BULK,\r
+                       .EndpointSize           = CDC_TXRX_EPSIZE,\r
+                       .PollingIntervalMS      = 0x00\r
+               }\r
+};\r
+\r
+/** Language descriptor structure. This descriptor, located in FLASH memory, is returned when the host requests\r
+ *  the string descriptor with index 0 (the first index). It is actually an array of 16-bit integers, which indicate\r
+ *  via the language ID table available at USB.org what languages the device supports for its string descriptors.\r
+ */\r
+USB_Descriptor_String_t PROGMEM LanguageString =\r
+{\r
+       .Header                 = {.Size = USB_STRING_LEN(1), .Type = DTYPE_String},\r
+               \r
+       .UnicodeString          = {LANGUAGE_ID_ENG}\r
+};\r
+\r
+/** Manufacturer descriptor string. This is a Unicode string containing the manufacturer's details in human readable\r
+ *  form, and is read out upon request by the host when the appropriate string ID is requested, listed in the Device\r
+ *  Descriptor.\r
+ */\r
+USB_Descriptor_String_t PROGMEM ManufacturerString =\r
+{\r
+       .Header                 = {.Size = USB_STRING_LEN(11), .Type = DTYPE_String},\r
+               \r
+       .UnicodeString          = L"Dean Camera"\r
+};\r
+\r
+/** Product descriptor string. This is a Unicode string containing the product's details in human readable form,\r
+ *  and is read out upon request by the host when the appropriate string ID is requested, listed in the Device\r
+ *  Descriptor.\r
+ */\r
+USB_Descriptor_String_t PROGMEM ProductString =\r
+{\r
+       .Header                 = {.Size = USB_STRING_LEN(13), .Type = DTYPE_String},\r
+               \r
+       .UnicodeString          = L"LUFA CDC Demo"\r
+};\r
+\r
+/** This function is called by the library when in device mode, and must be overridden (see library "USB Descriptors"\r
+ *  documentation) by the application code so that the address and size of a requested descriptor can be given\r
+ *  to the USB library. When the device receives a Get Descriptor request on the control endpoint, this function\r
+ *  is called so that the descriptor details can be passed back and the appropriate descriptor sent back to the\r
+ *  USB host.\r
+ */\r
+uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
+{\r
+       const uint8_t  DescriptorType   = (wValue >> 8);\r
+       const uint8_t  DescriptorNumber = (wValue & 0xFF);\r
+\r
+       void*          Address = NULL;\r
+       uint16_t       Size    = NO_DESCRIPTOR;\r
+\r
+       switch (DescriptorType)\r
+       {\r
+               case DTYPE_Device:\r
+                       Address = (void*)&DeviceDescriptor;\r
+                       Size    = sizeof(USB_Descriptor_Device_t);\r
+                       break;\r
+               case DTYPE_Configuration: \r
+                       Address = (void*)&ConfigurationDescriptor;\r
+                       Size    = sizeof(USB_Descriptor_Configuration_t);\r
+                       break;\r
+               case DTYPE_String: \r
+                       switch (DescriptorNumber)\r
+                       {\r
+                               case 0x00: \r
+                                       Address = (void*)&LanguageString;\r
+                                       Size    = pgm_read_byte(&LanguageString.Header.Size);\r
+                                       break;\r
+                               case 0x01: \r
+                                       Address = (void*)&ManufacturerString;\r
+                                       Size    = pgm_read_byte(&ManufacturerString.Header.Size);\r
+                                       break;\r
+                               case 0x02: \r
+                                       Address = (void*)&ProductString;\r
+                                       Size    = pgm_read_byte(&ProductString.Header.Size);\r
+                                       break;\r
+                       }\r
+                       \r
+                       break;\r
+       }\r
+       \r
+       *DescriptorAddress = Address;           \r
+       return Size;\r
+}\r
diff --git a/Demos/Device/ClassDriver/CDC/Descriptors.h b/Demos/Device/ClassDriver/CDC/Descriptors.h
new file mode 100644 (file)
index 0000000..1a9dbb5
--- /dev/null
@@ -0,0 +1,84 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  Header file for Descriptors.c.\r
+ */\r
\r
+#ifndef _DESCRIPTORS_H_\r
+#define _DESCRIPTORS_H_\r
+\r
+       /* Includes: */\r
+               #include <avr/pgmspace.h>\r
+\r
+               #include <LUFA/Drivers/USB/USB.h>\r
+               #include <LUFA/Drivers/USB/Class/Device/CDC.h>\r
+\r
+       /* Macros: */                    \r
+               /** Endpoint number of the CDC device-to-host notification IN endpoint. */\r
+               #define CDC_NOTIFICATION_EPNUM         2\r
+\r
+               /** Endpoint number of the CDC device-to-host data IN endpoint. */\r
+               #define CDC_TX_EPNUM                   3        \r
+\r
+               /** Endpoint number of the CDC host-to-device data OUT endpoint. */\r
+               #define CDC_RX_EPNUM                   4        \r
+\r
+               /** Size in bytes of the CDC device-to-host notification IN endpoint. */\r
+               #define CDC_NOTIFICATION_EPSIZE        8\r
+\r
+               /** Size in bytes of the CDC data IN and OUT endpoints. */\r
+               #define CDC_TXRX_EPSIZE                16       \r
+\r
+       /* Type Defines: */\r
+               /** Type define for the device configuration descriptor structure. This must be defined in the\r
+                *  application code, as the configuration descriptor contains several sub-descriptors which\r
+                *  vary between devices, and which describe the device's usage to the host.\r
+                */\r
+               typedef struct\r
+               {\r
+                       USB_Descriptor_Configuration_Header_t    Config;\r
+                       USB_Descriptor_Interface_t               CCI_Interface;\r
+                       CDC_FUNCTIONAL_DESCRIPTOR(2)             CDC_Functional_IntHeader;\r
+                       CDC_FUNCTIONAL_DESCRIPTOR(2)             CDC_Functional_CallManagement;\r
+                       CDC_FUNCTIONAL_DESCRIPTOR(1)             CDC_Functional_AbstractControlManagement;\r
+                       CDC_FUNCTIONAL_DESCRIPTOR(2)             CDC_Functional_Union;\r
+                       USB_Descriptor_Endpoint_t                ManagementEndpoint;\r
+                       USB_Descriptor_Interface_t               DCI_Interface;\r
+                       USB_Descriptor_Endpoint_t                DataOutEndpoint;\r
+                       USB_Descriptor_Endpoint_t                DataInEndpoint;\r
+               } USB_Descriptor_Configuration_t;\r
+\r
+       /* Function Prototypes: */\r
+               uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
+                                                                                       ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);\r
+\r
+#endif\r
diff --git a/Demos/Device/ClassDriver/CDC/Doxygen.conf b/Demos/Device/ClassDriver/CDC/Doxygen.conf
new file mode 100644 (file)
index 0000000..3493347
--- /dev/null
@@ -0,0 +1,1485 @@
+# Doxyfile 1.5.7.1\r
+\r
+# This file describes the settings to be used by the documentation system\r
+# doxygen (www.doxygen.org) for a project\r
+#\r
+# All text after a hash (#) is considered a comment and will be ignored\r
+# The format is:\r
+#       TAG = value [value, ...]\r
+# For lists items can also be appended using:\r
+#       TAG += value [value, ...]\r
+# Values that contain spaces should be placed between quotes (" ")\r
+\r
+#---------------------------------------------------------------------------\r
+# Project related configuration options\r
+#---------------------------------------------------------------------------\r
+\r
+# This tag specifies the encoding used for all characters in the config file \r
+# that follow. The default is UTF-8 which is also the encoding used for all \r
+# text before the first occurrence of this tag. Doxygen uses libiconv (or the \r
+# iconv built into libc) for the transcoding. See \r
+# http://www.gnu.org/software/libiconv for the list of possible encodings.\r
+\r
+DOXYFILE_ENCODING      = UTF-8\r
+\r
+# The PROJECT_NAME tag is a single word (or a sequence of words surrounded \r
+# by quotes) that should identify the project.\r
+\r
+PROJECT_NAME           = "LUFA Library - CDC Device Demo"\r
+\r
+# The PROJECT_NUMBER tag can be used to enter a project or revision number. \r
+# This could be handy for archiving the generated documentation or \r
+# if some version control system is used.\r
+\r
+PROJECT_NUMBER         = 0.0.0\r
+\r
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) \r
+# base path where the generated documentation will be put. \r
+# If a relative path is entered, it will be relative to the location \r
+# where doxygen was started. If left blank the current directory will be used.\r
+\r
+OUTPUT_DIRECTORY       = ./Documentation/\r
+\r
+# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create \r
+# 4096 sub-directories (in 2 levels) under the output directory of each output \r
+# format and will distribute the generated files over these directories. \r
+# Enabling this option can be useful when feeding doxygen a huge amount of \r
+# source files, where putting all generated files in the same directory would \r
+# otherwise cause performance problems for the file system.\r
+\r
+CREATE_SUBDIRS         = YES\r
+\r
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all \r
+# documentation generated by doxygen is written. Doxygen will use this \r
+# information to generate all constant output in the proper language. \r
+# The default language is English, other supported languages are: \r
+# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, \r
+# Croatian, Czech, Danish, Dutch, Farsi, Finnish, French, German, Greek, \r
+# Hungarian, Italian, Japanese, Japanese-en (Japanese with English messages), \r
+# Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, Polish, \r
+# Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, Slovene, \r
+# Spanish, Swedish, and Ukrainian.\r
+\r
+OUTPUT_LANGUAGE        = English\r
+\r
+# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will \r
+# include brief member descriptions after the members that are listed in \r
+# the file and class documentation (similar to JavaDoc). \r
+# Set to NO to disable this.\r
+\r
+BRIEF_MEMBER_DESC      = YES\r
+\r
+# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend \r
+# the brief description of a member or function before the detailed description. \r
+# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the \r
+# brief descriptions will be completely suppressed.\r
+\r
+REPEAT_BRIEF           = YES\r
+\r
+# This tag implements a quasi-intelligent brief description abbreviator \r
+# that is used to form the text in various listings. Each string \r
+# in this list, if found as the leading text of the brief description, will be \r
+# stripped from the text and the result after processing the whole list, is \r
+# used as the annotated text. Otherwise, the brief description is used as-is. \r
+# If left blank, the following values are used ("$name" is automatically \r
+# replaced with the name of the entity): "The $name class" "The $name widget" \r
+# "The $name file" "is" "provides" "specifies" "contains" \r
+# "represents" "a" "an" "the"\r
+\r
+ABBREVIATE_BRIEF       = "The $name class" \\r
+                         "The $name widget" \\r
+                         "The $name file" \\r
+                         is \\r
+                         provides \\r
+                         specifies \\r
+                         contains \\r
+                         represents \\r
+                         a \\r
+                         an \\r
+                         the\r
+\r
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then \r
+# Doxygen will generate a detailed section even if there is only a brief \r
+# description.\r
+\r
+ALWAYS_DETAILED_SEC    = NO\r
+\r
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all \r
+# inherited members of a class in the documentation of that class as if those \r
+# members were ordinary class members. Constructors, destructors and assignment \r
+# operators of the base classes will not be shown.\r
+\r
+INLINE_INHERITED_MEMB  = NO\r
+\r
+# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full \r
+# path before files name in the file list and in the header files. If set \r
+# to NO the shortest path that makes the file name unique will be used.\r
+\r
+FULL_PATH_NAMES        = YES\r
+\r
+# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag \r
+# can be used to strip a user-defined part of the path. Stripping is \r
+# only done if one of the specified strings matches the left-hand part of \r
+# the path. The tag can be used to show relative paths in the file list. \r
+# If left blank the directory from which doxygen is run is used as the \r
+# path to strip.\r
+\r
+STRIP_FROM_PATH        = \r
+\r
+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of \r
+# the path mentioned in the documentation of a class, which tells \r
+# the reader which header file to include in order to use a class. \r
+# If left blank only the name of the header file containing the class \r
+# definition is used. Otherwise one should specify the include paths that \r
+# are normally passed to the compiler using the -I flag.\r
+\r
+STRIP_FROM_INC_PATH    = \r
+\r
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter \r
+# (but less readable) file names. This can be useful is your file systems \r
+# doesn't support long names like on DOS, Mac, or CD-ROM.\r
+\r
+SHORT_NAMES            = YES\r
+\r
+# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen \r
+# will interpret the first line (until the first dot) of a JavaDoc-style \r
+# comment as the brief description. If set to NO, the JavaDoc \r
+# comments will behave just like regular Qt-style comments \r
+# (thus requiring an explicit @brief command for a brief description.)\r
+\r
+JAVADOC_AUTOBRIEF      = NO\r
+\r
+# If the QT_AUTOBRIEF tag is set to YES then Doxygen will \r
+# interpret the first line (until the first dot) of a Qt-style \r
+# comment as the brief description. If set to NO, the comments \r
+# will behave just like regular Qt-style comments (thus requiring \r
+# an explicit \brief command for a brief description.)\r
+\r
+QT_AUTOBRIEF           = NO\r
+\r
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen \r
+# treat a multi-line C++ special comment block (i.e. a block of //! or /// \r
+# comments) as a brief description. This used to be the default behaviour. \r
+# The new default is to treat a multi-line C++ comment block as a detailed \r
+# description. Set this tag to YES if you prefer the old behaviour instead.\r
+\r
+MULTILINE_CPP_IS_BRIEF = NO\r
+\r
+# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented \r
+# member inherits the documentation from any documented member that it \r
+# re-implements.\r
+\r
+INHERIT_DOCS           = YES\r
+\r
+# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce \r
+# a new page for each member. If set to NO, the documentation of a member will \r
+# be part of the file/class/namespace that contains it.\r
+\r
+SEPARATE_MEMBER_PAGES  = NO\r
+\r
+# The TAB_SIZE tag can be used to set the number of spaces in a tab. \r
+# Doxygen uses this value to replace tabs by spaces in code fragments.\r
+\r
+TAB_SIZE               = 4\r
+\r
+# This tag can be used to specify a number of aliases that acts \r
+# as commands in the documentation. An alias has the form "name=value". \r
+# For example adding "sideeffect=\par Side Effects:\n" will allow you to \r
+# put the command \sideeffect (or @sideeffect) in the documentation, which \r
+# will result in a user-defined paragraph with heading "Side Effects:". \r
+# You can put \n's in the value part of an alias to insert newlines.\r
+\r
+ALIASES                = \r
+\r
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C \r
+# sources only. Doxygen will then generate output that is more tailored for C. \r
+# For instance, some of the names that are used will be different. The list \r
+# of all members will be omitted, etc.\r
+\r
+OPTIMIZE_OUTPUT_FOR_C  = YES\r
+\r
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java \r
+# sources only. Doxygen will then generate output that is more tailored for \r
+# Java. For instance, namespaces will be presented as packages, qualified \r
+# scopes will look different, etc.\r
+\r
+OPTIMIZE_OUTPUT_JAVA   = NO\r
+\r
+# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran \r
+# sources only. Doxygen will then generate output that is more tailored for \r
+# Fortran.\r
+\r
+OPTIMIZE_FOR_FORTRAN   = NO\r
+\r
+# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL \r
+# sources. Doxygen will then generate output that is tailored for \r
+# VHDL.\r
+\r
+OPTIMIZE_OUTPUT_VHDL   = NO\r
+\r
+# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want \r
+# to include (a tag file for) the STL sources as input, then you should \r
+# set this tag to YES in order to let doxygen match functions declarations and \r
+# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. \r
+# func(std::string) {}). This also make the inheritance and collaboration \r
+# diagrams that involve STL classes more complete and accurate.\r
+\r
+BUILTIN_STL_SUPPORT    = NO\r
+\r
+# If you use Microsoft's C++/CLI language, you should set this option to YES to\r
+# enable parsing support.\r
+\r
+CPP_CLI_SUPPORT        = NO\r
+\r
+# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. \r
+# Doxygen will parse them like normal C++ but will assume all classes use public \r
+# instead of private inheritance when no explicit protection keyword is present.\r
+\r
+SIP_SUPPORT            = NO\r
+\r
+# For Microsoft's IDL there are propget and propput attributes to indicate getter \r
+# and setter methods for a property. Setting this option to YES (the default) \r
+# will make doxygen to replace the get and set methods by a property in the \r
+# documentation. This will only work if the methods are indeed getting or \r
+# setting a simple type. If this is not the case, or you want to show the \r
+# methods anyway, you should set this option to NO.\r
+\r
+IDL_PROPERTY_SUPPORT   = YES\r
+\r
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC \r
+# tag is set to YES, then doxygen will reuse the documentation of the first \r
+# member in the group (if any) for the other members of the group. By default \r
+# all members of a group must be documented explicitly.\r
+\r
+DISTRIBUTE_GROUP_DOC   = NO\r
+\r
+# Set the SUBGROUPING tag to YES (the default) to allow class member groups of \r
+# the same type (for instance a group of public functions) to be put as a \r
+# subgroup of that type (e.g. under the Public Functions section). Set it to \r
+# NO to prevent subgrouping. Alternatively, this can be done per class using \r
+# the \nosubgrouping command.\r
+\r
+SUBGROUPING            = YES\r
+\r
+# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum \r
+# is documented as struct, union, or enum with the name of the typedef. So \r
+# typedef struct TypeS {} TypeT, will appear in the documentation as a struct \r
+# with name TypeT. When disabled the typedef will appear as a member of a file, \r
+# namespace, or class. And the struct will be named TypeS. This can typically \r
+# be useful for C code in case the coding convention dictates that all compound \r
+# types are typedef'ed and only the typedef is referenced, never the tag name.\r
+\r
+TYPEDEF_HIDES_STRUCT   = NO\r
+\r
+# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to \r
+# determine which symbols to keep in memory and which to flush to disk.\r
+# When the cache is full, less often used symbols will be written to disk.\r
+# For small to medium size projects (<1000 input files) the default value is \r
+# probably good enough. For larger projects a too small cache size can cause \r
+# doxygen to be busy swapping symbols to and from disk most of the time \r
+# causing a significant performance penality. \r
+# If the system has enough physical memory increasing the cache will improve the \r
+# performance by keeping more symbols in memory. Note that the value works on \r
+# a logarithmic scale so increasing the size by one will rougly double the \r
+# memory usage. The cache size is given by this formula: \r
+# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, \r
+# corresponding to a cache size of 2^16 = 65536 symbols\r
+\r
+SYMBOL_CACHE_SIZE      = 0\r
+\r
+#---------------------------------------------------------------------------\r
+# Build related configuration options\r
+#---------------------------------------------------------------------------\r
+\r
+# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in \r
+# documentation are documented, even if no documentation was available. \r
+# Private class members and static file members will be hidden unless \r
+# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES\r
+\r
+EXTRACT_ALL            = YES\r
+\r
+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class \r
+# will be included in the documentation.\r
+\r
+EXTRACT_PRIVATE        = YES\r
+\r
+# If the EXTRACT_STATIC tag is set to YES all static members of a file \r
+# will be included in the documentation.\r
+\r
+EXTRACT_STATIC         = YES\r
+\r
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) \r
+# defined locally in source files will be included in the documentation. \r
+# If set to NO only classes defined in header files are included.\r
+\r
+EXTRACT_LOCAL_CLASSES  = YES\r
+\r
+# This flag is only useful for Objective-C code. When set to YES local \r
+# methods, which are defined in the implementation section but not in \r
+# the interface are included in the documentation. \r
+# If set to NO (the default) only methods in the interface are included.\r
+\r
+EXTRACT_LOCAL_METHODS  = NO\r
+\r
+# If this flag is set to YES, the members of anonymous namespaces will be \r
+# extracted and appear in the documentation as a namespace called \r
+# 'anonymous_namespace{file}', where file will be replaced with the base \r
+# name of the file that contains the anonymous namespace. By default \r
+# anonymous namespace are hidden.\r
+\r
+EXTRACT_ANON_NSPACES   = NO\r
+\r
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all \r
+# undocumented members of documented classes, files or namespaces. \r
+# If set to NO (the default) these members will be included in the \r
+# various overviews, but no documentation section is generated. \r
+# This option has no effect if EXTRACT_ALL is enabled.\r
+\r
+HIDE_UNDOC_MEMBERS     = NO\r
+\r
+# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all \r
+# undocumented classes that are normally visible in the class hierarchy. \r
+# If set to NO (the default) these classes will be included in the various \r
+# overviews. This option has no effect if EXTRACT_ALL is enabled.\r
+\r
+HIDE_UNDOC_CLASSES     = NO\r
+\r
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all \r
+# friend (class|struct|union) declarations. \r
+# If set to NO (the default) these declarations will be included in the \r
+# documentation.\r
+\r
+HIDE_FRIEND_COMPOUNDS  = NO\r
+\r
+# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any \r
+# documentation blocks found inside the body of a function. \r
+# If set to NO (the default) these blocks will be appended to the \r
+# function's detailed documentation block.\r
+\r
+HIDE_IN_BODY_DOCS      = NO\r
+\r
+# The INTERNAL_DOCS tag determines if documentation \r
+# that is typed after a \internal command is included. If the tag is set \r
+# to NO (the default) then the documentation will be excluded. \r
+# Set it to YES to include the internal documentation.\r
+\r
+INTERNAL_DOCS          = NO\r
+\r
+# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate \r
+# file names in lower-case letters. If set to YES upper-case letters are also \r
+# allowed. This is useful if you have classes or files whose names only differ \r
+# in case and if your file system supports case sensitive file names. Windows \r
+# and Mac users are advised to set this option to NO.\r
+\r
+CASE_SENSE_NAMES       = NO\r
+\r
+# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen \r
+# will show members with their full class and namespace scopes in the \r
+# documentation. If set to YES the scope will be hidden.\r
+\r
+HIDE_SCOPE_NAMES       = NO\r
+\r
+# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen \r
+# will put a list of the files that are included by a file in the documentation \r
+# of that file.\r
+\r
+SHOW_INCLUDE_FILES     = YES\r
+\r
+# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] \r
+# is inserted in the documentation for inline members.\r
+\r
+INLINE_INFO            = YES\r
+\r
+# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen \r
+# will sort the (detailed) documentation of file and class members \r
+# alphabetically by member name. If set to NO the members will appear in \r
+# declaration order.\r
+\r
+SORT_MEMBER_DOCS       = YES\r
+\r
+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the \r
+# brief documentation of file, namespace and class members alphabetically \r
+# by member name. If set to NO (the default) the members will appear in \r
+# declaration order.\r
+\r
+SORT_BRIEF_DOCS        = NO\r
+\r
+# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the \r
+# hierarchy of group names into alphabetical order. If set to NO (the default) \r
+# the group names will appear in their defined order.\r
+\r
+SORT_GROUP_NAMES       = NO\r
+\r
+# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be \r
+# sorted by fully-qualified names, including namespaces. If set to \r
+# NO (the default), the class list will be sorted only by class name, \r
+# not including the namespace part. \r
+# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.\r
+# Note: This option applies only to the class list, not to the \r
+# alphabetical list.\r
+\r
+SORT_BY_SCOPE_NAME     = NO\r
+\r
+# The GENERATE_TODOLIST tag can be used to enable (YES) or \r
+# disable (NO) the todo list. This list is created by putting \todo \r
+# commands in the documentation.\r
+\r
+GENERATE_TODOLIST      = NO\r
+\r
+# The GENERATE_TESTLIST tag can be used to enable (YES) or \r
+# disable (NO) the test list. This list is created by putting \test \r
+# commands in the documentation.\r
+\r
+GENERATE_TESTLIST      = NO\r
+\r
+# The GENERATE_BUGLIST tag can be used to enable (YES) or \r
+# disable (NO) the bug list. This list is created by putting \bug \r
+# commands in the documentation.\r
+\r
+GENERATE_BUGLIST       = NO\r
+\r
+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or \r
+# disable (NO) the deprecated list. This list is created by putting \r
+# \deprecated commands in the documentation.\r
+\r
+GENERATE_DEPRECATEDLIST= YES\r
+\r
+# The ENABLED_SECTIONS tag can be used to enable conditional \r
+# documentation sections, marked by \if sectionname ... \endif.\r
+\r
+ENABLED_SECTIONS       = \r
+\r
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines \r
+# the initial value of a variable or define consists of for it to appear in \r
+# the documentation. If the initializer consists of more lines than specified \r
+# here it will be hidden. Use a value of 0 to hide initializers completely. \r
+# The appearance of the initializer of individual variables and defines in the \r
+# documentation can be controlled using \showinitializer or \hideinitializer \r
+# command in the documentation regardless of this setting.\r
+\r
+MAX_INITIALIZER_LINES  = 30\r
+\r
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated \r
+# at the bottom of the documentation of classes and structs. If set to YES the \r
+# list will mention the files that were used to generate the documentation.\r
+\r
+SHOW_USED_FILES        = YES\r
+\r
+# If the sources in your project are distributed over multiple directories \r
+# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy \r
+# in the documentation. The default is NO.\r
+\r
+SHOW_DIRECTORIES       = YES\r
+\r
+# Set the SHOW_FILES tag to NO to disable the generation of the Files page.\r
+# This will remove the Files entry from the Quick Index and from the \r
+# Folder Tree View (if specified). The default is YES.\r
+\r
+SHOW_FILES             = YES\r
+\r
+# Set the SHOW_NAMESPACES tag to NO to disable the generation of the \r
+# Namespaces page.  This will remove the Namespaces entry from the Quick Index\r
+# and from the Folder Tree View (if specified). The default is YES.\r
+\r
+SHOW_NAMESPACES        = YES\r
+\r
+# The FILE_VERSION_FILTER tag can be used to specify a program or script that \r
+# doxygen should invoke to get the current version for each file (typically from \r
+# the version control system). Doxygen will invoke the program by executing (via \r
+# popen()) the command <command> <input-file>, where <command> is the value of \r
+# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file \r
+# provided by doxygen. Whatever the program writes to standard output \r
+# is used as the file version. See the manual for examples.\r
+\r
+FILE_VERSION_FILTER    = \r
+\r
+# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by \r
+# doxygen. The layout file controls the global structure of the generated output files \r
+# in an output format independent way. The create the layout file that represents \r
+# doxygen's defaults, run doxygen with the -l option. You can optionally specify a \r
+# file name after the option, if omitted DoxygenLayout.xml will be used as the name \r
+# of the layout file.\r
+\r
+LAYOUT_FILE            = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to warning and progress messages\r
+#---------------------------------------------------------------------------\r
+\r
+# The QUIET tag can be used to turn on/off the messages that are generated \r
+# by doxygen. Possible values are YES and NO. If left blank NO is used.\r
+\r
+QUIET                  = YES\r
+\r
+# The WARNINGS tag can be used to turn on/off the warning messages that are \r
+# generated by doxygen. Possible values are YES and NO. If left blank \r
+# NO is used.\r
+\r
+WARNINGS               = YES\r
+\r
+# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings \r
+# for undocumented members. If EXTRACT_ALL is set to YES then this flag will \r
+# automatically be disabled.\r
+\r
+WARN_IF_UNDOCUMENTED   = YES\r
+\r
+# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for \r
+# potential errors in the documentation, such as not documenting some \r
+# parameters in a documented function, or documenting parameters that \r
+# don't exist or using markup commands wrongly.\r
+\r
+WARN_IF_DOC_ERROR      = YES\r
+\r
+# This WARN_NO_PARAMDOC option can be abled to get warnings for \r
+# functions that are documented, but have no documentation for their parameters \r
+# or return value. If set to NO (the default) doxygen will only warn about \r
+# wrong or incomplete parameter documentation, but not about the absence of \r
+# documentation.\r
+\r
+WARN_NO_PARAMDOC       = YES\r
+\r
+# The WARN_FORMAT tag determines the format of the warning messages that \r
+# doxygen can produce. The string should contain the $file, $line, and $text \r
+# tags, which will be replaced by the file and line number from which the \r
+# warning originated and the warning text. Optionally the format may contain \r
+# $version, which will be replaced by the version of the file (if it could \r
+# be obtained via FILE_VERSION_FILTER)\r
+\r
+WARN_FORMAT            = "$file:$line: $text"\r
+\r
+# The WARN_LOGFILE tag can be used to specify a file to which warning \r
+# and error messages should be written. If left blank the output is written \r
+# to stderr.\r
+\r
+WARN_LOGFILE           = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the input files\r
+#---------------------------------------------------------------------------\r
+\r
+# The INPUT tag can be used to specify the files and/or directories that contain \r
+# documented source files. You may enter file names like "myfile.cpp" or \r
+# directories like "/usr/src/myproject". Separate the files or directories \r
+# with spaces.\r
+\r
+INPUT                  = ./\r
+\r
+# This tag can be used to specify the character encoding of the source files \r
+# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is \r
+# also the default input encoding. Doxygen uses libiconv (or the iconv built \r
+# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for \r
+# the list of possible encodings.\r
+\r
+INPUT_ENCODING         = UTF-8\r
+\r
+# If the value of the INPUT tag contains directories, you can use the \r
+# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \r
+# and *.h) to filter out the source-files in the directories. If left \r
+# blank the following patterns are tested: \r
+# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx \r
+# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90\r
+\r
+FILE_PATTERNS          = *.h \\r
+                         *.c \\r
+                                                *.txt\r
+\r
+# The RECURSIVE tag can be used to turn specify whether or not subdirectories \r
+# should be searched for input files as well. Possible values are YES and NO. \r
+# If left blank NO is used.\r
+\r
+RECURSIVE              = YES\r
+\r
+# The EXCLUDE tag can be used to specify files and/or directories that should \r
+# excluded from the INPUT source files. This way you can easily exclude a \r
+# subdirectory from a directory tree whose root is specified with the INPUT tag.\r
+\r
+EXCLUDE                = \r
+\r
+# The EXCLUDE_SYMLINKS tag can be used select whether or not files or \r
+# directories that are symbolic links (a Unix filesystem feature) are excluded \r
+# from the input.\r
+\r
+EXCLUDE_SYMLINKS       = NO\r
+\r
+# If the value of the INPUT tag contains directories, you can use the \r
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude \r
+# certain files from those directories. Note that the wildcards are matched \r
+# against the file with absolute path, so to exclude all test directories \r
+# for example use the pattern */test/*\r
+\r
+EXCLUDE_PATTERNS       = */LowLevel/USBMode.h\r
+\r
+# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names \r
+# (namespaces, classes, functions, etc.) that should be excluded from the \r
+# output. The symbol name can be a fully qualified name, a word, or if the \r
+# wildcard * is used, a substring. Examples: ANamespace, AClass, \r
+# AClass::ANamespace, ANamespace::*Test\r
+\r
+EXCLUDE_SYMBOLS        = __*\r
+\r
+# The EXAMPLE_PATH tag can be used to specify one or more files or \r
+# directories that contain example code fragments that are included (see \r
+# the \include command).\r
+\r
+EXAMPLE_PATH           = \r
+\r
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the \r
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \r
+# and *.h) to filter out the source-files in the directories. If left \r
+# blank all files are included.\r
+\r
+EXAMPLE_PATTERNS       = *\r
+\r
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be \r
+# searched for input files to be used with the \include or \dontinclude \r
+# commands irrespective of the value of the RECURSIVE tag. \r
+# Possible values are YES and NO. If left blank NO is used.\r
+\r
+EXAMPLE_RECURSIVE      = NO\r
+\r
+# The IMAGE_PATH tag can be used to specify one or more files or \r
+# directories that contain image that are included in the documentation (see \r
+# the \image command).\r
+\r
+IMAGE_PATH             = \r
+\r
+# The INPUT_FILTER tag can be used to specify a program that doxygen should \r
+# invoke to filter for each input file. Doxygen will invoke the filter program \r
+# by executing (via popen()) the command <filter> <input-file>, where <filter> \r
+# is the value of the INPUT_FILTER tag, and <input-file> is the name of an \r
+# input file. Doxygen will then use the output that the filter program writes \r
+# to standard output.  If FILTER_PATTERNS is specified, this tag will be \r
+# ignored.\r
+\r
+INPUT_FILTER           = \r
+\r
+# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern \r
+# basis.  Doxygen will compare the file name with each pattern and apply the \r
+# filter if there is a match.  The filters are a list of the form: \r
+# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further \r
+# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER \r
+# is applied to all files.\r
+\r
+FILTER_PATTERNS        = \r
+\r
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using \r
+# INPUT_FILTER) will be used to filter the input files when producing source \r
+# files to browse (i.e. when SOURCE_BROWSER is set to YES).\r
+\r
+FILTER_SOURCE_FILES    = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to source browsing\r
+#---------------------------------------------------------------------------\r
+\r
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will \r
+# be generated. Documented entities will be cross-referenced with these sources. \r
+# Note: To get rid of all source code in the generated output, make sure also \r
+# VERBATIM_HEADERS is set to NO.\r
+\r
+SOURCE_BROWSER         = NO\r
+\r
+# Setting the INLINE_SOURCES tag to YES will include the body \r
+# of functions and classes directly in the documentation.\r
+\r
+INLINE_SOURCES         = NO\r
+\r
+# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct \r
+# doxygen to hide any special comment blocks from generated source code \r
+# fragments. Normal C and C++ comments will always remain visible.\r
+\r
+STRIP_CODE_COMMENTS    = YES\r
+\r
+# If the REFERENCED_BY_RELATION tag is set to YES \r
+# then for each documented function all documented \r
+# functions referencing it will be listed.\r
+\r
+REFERENCED_BY_RELATION = NO\r
+\r
+# If the REFERENCES_RELATION tag is set to YES \r
+# then for each documented function all documented entities \r
+# called/used by that function will be listed.\r
+\r
+REFERENCES_RELATION    = NO\r
+\r
+# If the REFERENCES_LINK_SOURCE tag is set to YES (the default)\r
+# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from\r
+# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will\r
+# link to the source code.  Otherwise they will link to the documentstion.\r
+\r
+REFERENCES_LINK_SOURCE = NO\r
+\r
+# If the USE_HTAGS tag is set to YES then the references to source code \r
+# will point to the HTML generated by the htags(1) tool instead of doxygen \r
+# built-in source browser. The htags tool is part of GNU's global source \r
+# tagging system (see http://www.gnu.org/software/global/global.html). You \r
+# will need version 4.8.6 or higher.\r
+\r
+USE_HTAGS              = NO\r
+\r
+# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen \r
+# will generate a verbatim copy of the header file for each class for \r
+# which an include is specified. Set to NO to disable this.\r
+\r
+VERBATIM_HEADERS       = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the alphabetical class index\r
+#---------------------------------------------------------------------------\r
+\r
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index \r
+# of all compounds will be generated. Enable this if the project \r
+# contains a lot of classes, structs, unions or interfaces.\r
+\r
+ALPHABETICAL_INDEX     = YES\r
+\r
+# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then \r
+# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns \r
+# in which this list will be split (can be a number in the range [1..20])\r
+\r
+COLS_IN_ALPHA_INDEX    = 5\r
+\r
+# In case all classes in a project start with a common prefix, all \r
+# classes will be put under the same header in the alphabetical index. \r
+# The IGNORE_PREFIX tag can be used to specify one or more prefixes that \r
+# should be ignored while generating the index headers.\r
+\r
+IGNORE_PREFIX          = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the HTML output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_HTML tag is set to YES (the default) Doxygen will \r
+# generate HTML output.\r
+\r
+GENERATE_HTML          = YES\r
+\r
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `html' will be used as the default path.\r
+\r
+HTML_OUTPUT            = html\r
+\r
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for \r
+# each generated HTML page (for example: .htm,.php,.asp). If it is left blank \r
+# doxygen will generate files with .html extension.\r
+\r
+HTML_FILE_EXTENSION    = .html\r
+\r
+# The HTML_HEADER tag can be used to specify a personal HTML header for \r
+# each generated HTML page. If it is left blank doxygen will generate a \r
+# standard header.\r
+\r
+HTML_HEADER            = \r
+\r
+# The HTML_FOOTER tag can be used to specify a personal HTML footer for \r
+# each generated HTML page. If it is left blank doxygen will generate a \r
+# standard footer.\r
+\r
+HTML_FOOTER            = \r
+\r
+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading \r
+# style sheet that is used by each HTML page. It can be used to \r
+# fine-tune the look of the HTML output. If the tag is left blank doxygen \r
+# will generate a default style sheet. Note that doxygen will try to copy \r
+# the style sheet file to the HTML output directory, so don't put your own \r
+# stylesheet in the HTML output directory as well, or it will be erased!\r
+\r
+HTML_STYLESHEET        = \r
+\r
+# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, \r
+# files or namespaces will be aligned in HTML using tables. If set to \r
+# NO a bullet list will be used.\r
+\r
+HTML_ALIGN_MEMBERS     = YES\r
+\r
+# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML \r
+# documentation will contain sections that can be hidden and shown after the \r
+# page has loaded. For this to work a browser that supports \r
+# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox \r
+# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari).\r
+\r
+HTML_DYNAMIC_SECTIONS  = YES\r
+\r
+# If the GENERATE_DOCSET tag is set to YES, additional index files \r
+# will be generated that can be used as input for Apple's Xcode 3 \r
+# integrated development environment, introduced with OSX 10.5 (Leopard). \r
+# To create a documentation set, doxygen will generate a Makefile in the \r
+# HTML output directory. Running make will produce the docset in that \r
+# directory and running "make install" will install the docset in \r
+# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find \r
+# it at startup. \r
+# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information.\r
+\r
+GENERATE_DOCSET        = NO\r
+\r
+# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the \r
+# feed. A documentation feed provides an umbrella under which multiple \r
+# documentation sets from a single provider (such as a company or product suite) \r
+# can be grouped.\r
+\r
+DOCSET_FEEDNAME        = "Doxygen generated docs"\r
+\r
+# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that \r
+# should uniquely identify the documentation set bundle. This should be a \r
+# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen \r
+# will append .docset to the name.\r
+\r
+DOCSET_BUNDLE_ID       = org.doxygen.Project\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, additional index files \r
+# will be generated that can be used as input for tools like the \r
+# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) \r
+# of the generated HTML documentation.\r
+\r
+GENERATE_HTMLHELP      = NO\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can \r
+# be used to specify the file name of the resulting .chm file. You \r
+# can add a path in front of the file if the result should not be \r
+# written to the html output directory.\r
+\r
+CHM_FILE               = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can \r
+# be used to specify the location (absolute path including file name) of \r
+# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run \r
+# the HTML help compiler on the generated index.hhp.\r
+\r
+HHC_LOCATION           = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag \r
+# controls if a separate .chi index file is generated (YES) or that \r
+# it should be included in the master .chm file (NO).\r
+\r
+GENERATE_CHI           = NO\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING\r
+# is used to encode HtmlHelp index (hhk), content (hhc) and project file\r
+# content.\r
+\r
+CHM_INDEX_ENCODING     = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag \r
+# controls whether a binary table of contents is generated (YES) or a \r
+# normal table of contents (NO) in the .chm file.\r
+\r
+BINARY_TOC             = NO\r
+\r
+# The TOC_EXPAND flag can be set to YES to add extra items for group members \r
+# to the contents of the HTML help documentation and to the tree view.\r
+\r
+TOC_EXPAND             = YES\r
+\r
+# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER \r
+# are set, an additional index file will be generated that can be used as input for \r
+# Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated \r
+# HTML documentation.\r
+\r
+GENERATE_QHP           = NO\r
+\r
+# If the QHG_LOCATION tag is specified, the QCH_FILE tag can \r
+# be used to specify the file name of the resulting .qch file. \r
+# The path specified is relative to the HTML output folder.\r
+\r
+QCH_FILE               = \r
+\r
+# The QHP_NAMESPACE tag specifies the namespace to use when generating \r
+# Qt Help Project output. For more information please see \r
+# <a href="http://doc.trolltech.com/qthelpproject.html#namespace">Qt Help Project / Namespace</a>.\r
+\r
+QHP_NAMESPACE          = org.doxygen.Project\r
+\r
+# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating \r
+# Qt Help Project output. For more information please see \r
+# <a href="http://doc.trolltech.com/qthelpproject.html#virtual-folders">Qt Help Project / Virtual Folders</a>.\r
+\r
+QHP_VIRTUAL_FOLDER     = doc\r
+\r
+# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can \r
+# be used to specify the location of Qt's qhelpgenerator. \r
+# If non-empty doxygen will try to run qhelpgenerator on the generated \r
+# .qhp file .\r
+\r
+QHG_LOCATION           = \r
+\r
+# The DISABLE_INDEX tag can be used to turn on/off the condensed index at \r
+# top of each HTML page. The value NO (the default) enables the index and \r
+# the value YES disables it.\r
+\r
+DISABLE_INDEX          = NO\r
+\r
+# This tag can be used to set the number of enum values (range [1..20]) \r
+# that doxygen will group on one line in the generated HTML documentation.\r
+\r
+ENUM_VALUES_PER_LINE   = 1\r
+\r
+# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index\r
+# structure should be generated to display hierarchical information.\r
+# If the tag value is set to FRAME, a side panel will be generated\r
+# containing a tree-like index structure (just like the one that \r
+# is generated for HTML Help). For this to work a browser that supports \r
+# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, \r
+# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are \r
+# probably better off using the HTML help feature. Other possible values \r
+# for this tag are: HIERARCHIES, which will generate the Groups, Directories,\r
+# and Class Hierarchy pages using a tree view instead of an ordered list;\r
+# ALL, which combines the behavior of FRAME and HIERARCHIES; and NONE, which\r
+# disables this behavior completely. For backwards compatibility with previous\r
+# releases of Doxygen, the values YES and NO are equivalent to FRAME and NONE\r
+# respectively.\r
+\r
+GENERATE_TREEVIEW      = YES\r
+\r
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be \r
+# used to set the initial width (in pixels) of the frame in which the tree \r
+# is shown.\r
+\r
+TREEVIEW_WIDTH         = 250\r
+\r
+# Use this tag to change the font size of Latex formulas included \r
+# as images in the HTML documentation. The default is 10. Note that \r
+# when you change the font size after a successful doxygen run you need \r
+# to manually remove any form_*.png images from the HTML output directory \r
+# to force them to be regenerated.\r
+\r
+FORMULA_FONTSIZE       = 10\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the LaTeX output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will \r
+# generate Latex output.\r
+\r
+GENERATE_LATEX         = NO\r
+\r
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `latex' will be used as the default path.\r
+\r
+LATEX_OUTPUT           = latex\r
+\r
+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be \r
+# invoked. If left blank `latex' will be used as the default command name.\r
+\r
+LATEX_CMD_NAME         = latex\r
+\r
+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to \r
+# generate index for LaTeX. If left blank `makeindex' will be used as the \r
+# default command name.\r
+\r
+MAKEINDEX_CMD_NAME     = makeindex\r
+\r
+# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact \r
+# LaTeX documents. This may be useful for small projects and may help to \r
+# save some trees in general.\r
+\r
+COMPACT_LATEX          = NO\r
+\r
+# The PAPER_TYPE tag can be used to set the paper type that is used \r
+# by the printer. Possible values are: a4, a4wide, letter, legal and \r
+# executive. If left blank a4wide will be used.\r
+\r
+PAPER_TYPE             = a4wide\r
+\r
+# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX \r
+# packages that should be included in the LaTeX output.\r
+\r
+EXTRA_PACKAGES         = \r
+\r
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for \r
+# the generated latex document. The header should contain everything until \r
+# the first chapter. If it is left blank doxygen will generate a \r
+# standard header. Notice: only use this tag if you know what you are doing!\r
+\r
+LATEX_HEADER           = \r
+\r
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated \r
+# is prepared for conversion to pdf (using ps2pdf). The pdf file will \r
+# contain links (just like the HTML output) instead of page references \r
+# This makes the output suitable for online browsing using a pdf viewer.\r
+\r
+PDF_HYPERLINKS         = YES\r
+\r
+# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of \r
+# plain latex in the generated Makefile. Set this option to YES to get a \r
+# higher quality PDF documentation.\r
+\r
+USE_PDFLATEX           = YES\r
+\r
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. \r
+# command to the generated LaTeX files. This will instruct LaTeX to keep \r
+# running if errors occur, instead of asking the user for help. \r
+# This option is also used when generating formulas in HTML.\r
+\r
+LATEX_BATCHMODE        = NO\r
+\r
+# If LATEX_HIDE_INDICES is set to YES then doxygen will not \r
+# include the index chapters (such as File Index, Compound Index, etc.) \r
+# in the output.\r
+\r
+LATEX_HIDE_INDICES     = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the RTF output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output \r
+# The RTF output is optimized for Word 97 and may not look very pretty with \r
+# other RTF readers or editors.\r
+\r
+GENERATE_RTF           = NO\r
+\r
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `rtf' will be used as the default path.\r
+\r
+RTF_OUTPUT             = rtf\r
+\r
+# If the COMPACT_RTF tag is set to YES Doxygen generates more compact \r
+# RTF documents. This may be useful for small projects and may help to \r
+# save some trees in general.\r
+\r
+COMPACT_RTF            = NO\r
+\r
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated \r
+# will contain hyperlink fields. The RTF file will \r
+# contain links (just like the HTML output) instead of page references. \r
+# This makes the output suitable for online browsing using WORD or other \r
+# programs which support those fields. \r
+# Note: wordpad (write) and others do not support links.\r
+\r
+RTF_HYPERLINKS         = NO\r
+\r
+# Load stylesheet definitions from file. Syntax is similar to doxygen's \r
+# config file, i.e. a series of assignments. You only have to provide \r
+# replacements, missing definitions are set to their default value.\r
+\r
+RTF_STYLESHEET_FILE    = \r
+\r
+# Set optional variables used in the generation of an rtf document. \r
+# Syntax is similar to doxygen's config file.\r
+\r
+RTF_EXTENSIONS_FILE    = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the man page output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_MAN tag is set to YES (the default) Doxygen will \r
+# generate man pages\r
+\r
+GENERATE_MAN           = NO\r
+\r
+# The MAN_OUTPUT tag is used to specify where the man pages will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `man' will be used as the default path.\r
+\r
+MAN_OUTPUT             = man\r
+\r
+# The MAN_EXTENSION tag determines the extension that is added to \r
+# the generated man pages (default is the subroutine's section .3)\r
+\r
+MAN_EXTENSION          = .3\r
+\r
+# If the MAN_LINKS tag is set to YES and Doxygen generates man output, \r
+# then it will generate one additional man file for each entity \r
+# documented in the real man page(s). These additional files \r
+# only source the real man page, but without them the man command \r
+# would be unable to find the correct page. The default is NO.\r
+\r
+MAN_LINKS              = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the XML output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_XML tag is set to YES Doxygen will \r
+# generate an XML file that captures the structure of \r
+# the code including all documentation.\r
+\r
+GENERATE_XML           = NO\r
+\r
+# The XML_OUTPUT tag is used to specify where the XML pages will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `xml' will be used as the default path.\r
+\r
+XML_OUTPUT             = xml\r
+\r
+# The XML_SCHEMA tag can be used to specify an XML schema, \r
+# which can be used by a validating XML parser to check the \r
+# syntax of the XML files.\r
+\r
+XML_SCHEMA             = \r
+\r
+# The XML_DTD tag can be used to specify an XML DTD, \r
+# which can be used by a validating XML parser to check the \r
+# syntax of the XML files.\r
+\r
+XML_DTD                = \r
+\r
+# If the XML_PROGRAMLISTING tag is set to YES Doxygen will \r
+# dump the program listings (including syntax highlighting \r
+# and cross-referencing information) to the XML output. Note that \r
+# enabling this will significantly increase the size of the XML output.\r
+\r
+XML_PROGRAMLISTING     = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options for the AutoGen Definitions output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will \r
+# generate an AutoGen Definitions (see autogen.sf.net) file \r
+# that captures the structure of the code including all \r
+# documentation. Note that this feature is still experimental \r
+# and incomplete at the moment.\r
+\r
+GENERATE_AUTOGEN_DEF   = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the Perl module output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_PERLMOD tag is set to YES Doxygen will \r
+# generate a Perl module file that captures the structure of \r
+# the code including all documentation. Note that this \r
+# feature is still experimental and incomplete at the \r
+# moment.\r
+\r
+GENERATE_PERLMOD       = NO\r
+\r
+# If the PERLMOD_LATEX tag is set to YES Doxygen will generate \r
+# the necessary Makefile rules, Perl scripts and LaTeX code to be able \r
+# to generate PDF and DVI output from the Perl module output.\r
+\r
+PERLMOD_LATEX          = NO\r
+\r
+# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be \r
+# nicely formatted so it can be parsed by a human reader.  This is useful \r
+# if you want to understand what is going on.  On the other hand, if this \r
+# tag is set to NO the size of the Perl module output will be much smaller \r
+# and Perl will parse it just the same.\r
+\r
+PERLMOD_PRETTY         = YES\r
+\r
+# The names of the make variables in the generated doxyrules.make file \r
+# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. \r
+# This is useful so different doxyrules.make files included by the same \r
+# Makefile don't overwrite each other's variables.\r
+\r
+PERLMOD_MAKEVAR_PREFIX = \r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration options related to the preprocessor   \r
+#---------------------------------------------------------------------------\r
+\r
+# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will \r
+# evaluate all C-preprocessor directives found in the sources and include \r
+# files.\r
+\r
+ENABLE_PREPROCESSING   = YES\r
+\r
+# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro \r
+# names in the source code. If set to NO (the default) only conditional \r
+# compilation will be performed. Macro expansion can be done in a controlled \r
+# way by setting EXPAND_ONLY_PREDEF to YES.\r
+\r
+MACRO_EXPANSION        = YES\r
+\r
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES \r
+# then the macro expansion is limited to the macros specified with the \r
+# PREDEFINED and EXPAND_AS_DEFINED tags.\r
+\r
+EXPAND_ONLY_PREDEF     = YES\r
+\r
+# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files \r
+# in the INCLUDE_PATH (see below) will be search if a #include is found.\r
+\r
+SEARCH_INCLUDES        = YES\r
+\r
+# The INCLUDE_PATH tag can be used to specify one or more directories that \r
+# contain include files that are not input files but should be processed by \r
+# the preprocessor.\r
+\r
+INCLUDE_PATH           = \r
+\r
+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard \r
+# patterns (like *.h and *.hpp) to filter out the header-files in the \r
+# directories. If left blank, the patterns specified with FILE_PATTERNS will \r
+# be used.\r
+\r
+INCLUDE_FILE_PATTERNS  = \r
+\r
+# The PREDEFINED tag can be used to specify one or more macro names that \r
+# are defined before the preprocessor is started (similar to the -D option of \r
+# gcc). The argument of the tag is a list of macros of the form: name \r
+# or name=definition (no spaces). If the definition and the = are \r
+# omitted =1 is assumed. To prevent a macro definition from being \r
+# undefined via #undef or recursively expanded use the := operator \r
+# instead of the = operator.\r
+\r
+PREDEFINED             = __DOXYGEN__\r
+\r
+# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then \r
+# this tag can be used to specify a list of macro names that should be expanded. \r
+# The macro definition that is found in the sources will be used. \r
+# Use the PREDEFINED tag if you want to use a different macro definition.\r
+\r
+EXPAND_AS_DEFINED      = BUTTLOADTAG\r
+\r
+# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then \r
+# doxygen's preprocessor will remove all function-like macros that are alone \r
+# on a line, have an all uppercase name, and do not end with a semicolon. Such \r
+# function macros are typically used for boiler-plate code, and will confuse \r
+# the parser if not removed.\r
+\r
+SKIP_FUNCTION_MACROS   = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration::additions related to external references   \r
+#---------------------------------------------------------------------------\r
+\r
+# The TAGFILES option can be used to specify one or more tagfiles. \r
+# Optionally an initial location of the external documentation \r
+# can be added for each tagfile. The format of a tag file without \r
+# this location is as follows: \r
+#   TAGFILES = file1 file2 ... \r
+# Adding location for the tag files is done as follows: \r
+#   TAGFILES = file1=loc1 "file2 = loc2" ... \r
+# where "loc1" and "loc2" can be relative or absolute paths or \r
+# URLs. If a location is present for each tag, the installdox tool \r
+# does not have to be run to correct the links.\r
+# Note that each tag file must have a unique name\r
+# (where the name does NOT include the path)\r
+# If a tag file is not located in the directory in which doxygen \r
+# is run, you must also specify the path to the tagfile here.\r
+\r
+TAGFILES               = \r
+\r
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create \r
+# a tag file that is based on the input files it reads.\r
+\r
+GENERATE_TAGFILE       = \r
+\r
+# If the ALLEXTERNALS tag is set to YES all external classes will be listed \r
+# in the class index. If set to NO only the inherited external classes \r
+# will be listed.\r
+\r
+ALLEXTERNALS           = NO\r
+\r
+# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed \r
+# in the modules index. If set to NO, only the current project's groups will \r
+# be listed.\r
+\r
+EXTERNAL_GROUPS        = YES\r
+\r
+# The PERL_PATH should be the absolute path and name of the perl script \r
+# interpreter (i.e. the result of `which perl').\r
+\r
+PERL_PATH              = /usr/bin/perl\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration options related to the dot tool   \r
+#---------------------------------------------------------------------------\r
+\r
+# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will \r
+# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base \r
+# or super classes. Setting the tag to NO turns the diagrams off. Note that \r
+# this option is superseded by the HAVE_DOT option below. This is only a \r
+# fallback. It is recommended to install and use dot, since it yields more \r
+# powerful graphs.\r
+\r
+CLASS_DIAGRAMS         = NO\r
+\r
+# You can define message sequence charts within doxygen comments using the \msc \r
+# command. Doxygen will then run the mscgen tool (see \r
+# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the \r
+# documentation. The MSCGEN_PATH tag allows you to specify the directory where \r
+# the mscgen tool resides. If left empty the tool is assumed to be found in the \r
+# default search path.\r
+\r
+MSCGEN_PATH            = \r
+\r
+# If set to YES, the inheritance and collaboration graphs will hide \r
+# inheritance and usage relations if the target is undocumented \r
+# or is not a class.\r
+\r
+HIDE_UNDOC_RELATIONS   = YES\r
+\r
+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is \r
+# available from the path. This tool is part of Graphviz, a graph visualization \r
+# toolkit from AT&T and Lucent Bell Labs. The other options in this section \r
+# have no effect if this option is set to NO (the default)\r
+\r
+HAVE_DOT               = NO\r
+\r
+# By default doxygen will write a font called FreeSans.ttf to the output \r
+# directory and reference it in all dot files that doxygen generates. This \r
+# font does not include all possible unicode characters however, so when you need \r
+# these (or just want a differently looking font) you can specify the font name \r
+# using DOT_FONTNAME. You need need to make sure dot is able to find the font, \r
+# which can be done by putting it in a standard location or by setting the \r
+# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory \r
+# containing the font.\r
+\r
+DOT_FONTNAME           = FreeSans\r
+\r
+# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. \r
+# The default size is 10pt.\r
+\r
+DOT_FONTSIZE           = 10\r
+\r
+# By default doxygen will tell dot to use the output directory to look for the \r
+# FreeSans.ttf font (which doxygen will put there itself). If you specify a \r
+# different font using DOT_FONTNAME you can set the path where dot \r
+# can find it using this tag.\r
+\r
+DOT_FONTPATH           = \r
+\r
+# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for each documented class showing the direct and \r
+# indirect inheritance relations. Setting this tag to YES will force the \r
+# the CLASS_DIAGRAMS tag to NO.\r
+\r
+CLASS_GRAPH            = NO\r
+\r
+# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for each documented class showing the direct and \r
+# indirect implementation dependencies (inheritance, containment, and \r
+# class references variables) of the class with other documented classes.\r
+\r
+COLLABORATION_GRAPH    = NO\r
+\r
+# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for groups, showing the direct groups dependencies\r
+\r
+GROUP_GRAPHS           = NO\r
+\r
+# If the UML_LOOK tag is set to YES doxygen will generate inheritance and \r
+# collaboration diagrams in a style similar to the OMG's Unified Modeling \r
+# Language.\r
+\r
+UML_LOOK               = NO\r
+\r
+# If set to YES, the inheritance and collaboration graphs will show the \r
+# relations between templates and their instances.\r
+\r
+TEMPLATE_RELATIONS     = NO\r
+\r
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT \r
+# tags are set to YES then doxygen will generate a graph for each documented \r
+# file showing the direct and indirect include dependencies of the file with \r
+# other documented files.\r
+\r
+INCLUDE_GRAPH          = NO\r
+\r
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and \r
+# HAVE_DOT tags are set to YES then doxygen will generate a graph for each \r
+# documented header file showing the documented files that directly or \r
+# indirectly include this file.\r
+\r
+INCLUDED_BY_GRAPH      = NO\r
+\r
+# If the CALL_GRAPH and HAVE_DOT options are set to YES then \r
+# doxygen will generate a call dependency graph for every global function \r
+# or class method. Note that enabling this option will significantly increase \r
+# the time of a run. So in most cases it will be better to enable call graphs \r
+# for selected functions only using the \callgraph command.\r
+\r
+CALL_GRAPH             = NO\r
+\r
+# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then \r
+# doxygen will generate a caller dependency graph for every global function \r
+# or class method. Note that enabling this option will significantly increase \r
+# the time of a run. So in most cases it will be better to enable caller \r
+# graphs for selected functions only using the \callergraph command.\r
+\r
+CALLER_GRAPH           = NO\r
+\r
+# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen \r
+# will graphical hierarchy of all classes instead of a textual one.\r
+\r
+GRAPHICAL_HIERARCHY    = NO\r
+\r
+# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES \r
+# then doxygen will show the dependencies a directory has on other directories \r
+# in a graphical way. The dependency relations are determined by the #include\r
+# relations between the files in the directories.\r
+\r
+DIRECTORY_GRAPH        = NO\r
+\r
+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images \r
+# generated by dot. Possible values are png, jpg, or gif\r
+# If left blank png will be used.\r
+\r
+DOT_IMAGE_FORMAT       = png\r
+\r
+# The tag DOT_PATH can be used to specify the path where the dot tool can be \r
+# found. If left blank, it is assumed the dot tool can be found in the path.\r
+\r
+DOT_PATH               = "C:/Program Files/Graphviz2.18/bin"\r
+\r
+# The DOTFILE_DIRS tag can be used to specify one or more directories that \r
+# contain dot files that are included in the documentation (see the \r
+# \dotfile command).\r
+\r
+DOTFILE_DIRS           = \r
+\r
+# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of \r
+# nodes that will be shown in the graph. If the number of nodes in a graph \r
+# becomes larger than this value, doxygen will truncate the graph, which is \r
+# visualized by representing a node as a red box. Note that doxygen if the \r
+# number of direct children of the root node in a graph is already larger than \r
+# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note \r
+# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.\r
+\r
+DOT_GRAPH_MAX_NODES    = 15\r
+\r
+# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the \r
+# graphs generated by dot. A depth value of 3 means that only nodes reachable \r
+# from the root by following a path via at most 3 edges will be shown. Nodes \r
+# that lay further from the root node will be omitted. Note that setting this \r
+# option to 1 or 2 may greatly reduce the computation time needed for large \r
+# code bases. Also note that the size of a graph can be further restricted by \r
+# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.\r
+\r
+MAX_DOT_GRAPH_DEPTH    = 2\r
+\r
+# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent \r
+# background. This is disabled by default, because dot on Windows does not \r
+# seem to support this out of the box. Warning: Depending on the platform used, \r
+# enabling this option may lead to badly anti-aliased labels on the edges of \r
+# a graph (i.e. they become hard to read).\r
+\r
+DOT_TRANSPARENT        = YES\r
+\r
+# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output \r
+# files in one run (i.e. multiple -o and -T options on the command line). This \r
+# makes dot run faster, but since only newer versions of dot (>1.8.10) \r
+# support this, this feature is disabled by default.\r
+\r
+DOT_MULTI_TARGETS      = NO\r
+\r
+# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will \r
+# generate a legend page explaining the meaning of the various boxes and \r
+# arrows in the dot generated graphs.\r
+\r
+GENERATE_LEGEND        = YES\r
+\r
+# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will \r
+# remove the intermediate dot files that are used to generate \r
+# the various graphs.\r
+\r
+DOT_CLEANUP            = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration::additions related to the search engine   \r
+#---------------------------------------------------------------------------\r
+\r
+# The SEARCHENGINE tag specifies whether or not a search engine should be \r
+# used. If set to NO the values of all tags below this one will be ignored.\r
+\r
+SEARCHENGINE           = NO\r
diff --git a/Demos/Device/ClassDriver/CDC/LUFA CDC.inf b/Demos/Device/ClassDriver/CDC/LUFA CDC.inf
new file mode 100644 (file)
index 0000000..d9d9ed6
--- /dev/null
@@ -0,0 +1,55 @@
+;       Windows LUFA CDC Setup File\r
+; Copyright (c) 2000 Microsoft Corporation\r
+\r
+[Version] \r
+Signature="$Windows NT$" \r
+Class=Ports\r
+ClassGuid={4D36E978-E325-11CE-BFC1-08002BE10318} \r
+Provider=%COMPANY% \r
+LayoutFile=layout.inf\r
+DriverVer=06/06/2006,1.0.0.0\r
+\r
+[Manufacturer] \r
+%MFGNAME% = ManufName\r
+\r
+[DestinationDirs] \r
+DefaultDestDir=12 \r
+\r
+[ManufName] \r
+%Modem3% = Modem3, USB\VID_03EB&PID_2044\r
+\r
+;------------------------------------------------------------------------------\r
+;  Windows 2000/XP Sections\r
+;------------------------------------------------------------------------------\r
+\r
+[Modem3.nt]\r
+CopyFiles=USBModemCopyFileSection\r
+AddReg=Modem3.nt.AddReg \r
+\r
+[USBModemCopyFileSection]\r
+usbser.sys,,,0x20\r
+\r
+[Modem3.nt.AddReg] \r
+HKR,,DevLoader,,*ntkern \r
+HKR,,NTMPDriver,,usbser.sys \r
+HKR,,EnumPropPages32,,"MsPorts.dll,SerialPortPropPageProvider" \r
+\r
+[Modem3.nt.Services] \r
+AddService=usbser, 0x00000002, DriverService\r
+\r
+[DriverService] \r
+DisplayName=%SERVICE%\r
+ServiceType=1\r
+StartType=3\r
+ErrorControl=1\r
+ServiceBinary=%12%\usbser.sys \r
+\r
+;------------------------------------------------------------------------------\r
+;  String Definitions\r
+;------------------------------------------------------------------------------\r
+\r
+[Strings] \r
+COMPANY="LUFA Library"\r
+MFGNAME="Dean Camera"\r
+Modem3="USB Virtual Serial Port" \r
+SERVICE="USB Virtual Serial Port CDC Driver"
\ No newline at end of file
diff --git a/Demos/Device/ClassDriver/CDC/makefile b/Demos/Device/ClassDriver/CDC/makefile
new file mode 100644 (file)
index 0000000..bd4ff36
--- /dev/null
@@ -0,0 +1,733 @@
+# Hey Emacs, this is a -*- makefile -*-\r
+#----------------------------------------------------------------------------\r
+# WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al.\r
+#  >> Modified for use with the LUFA project. <<\r
+#\r
+# Released to the Public Domain\r
+#\r
+# Additional material for this makefile was written by:\r
+# Peter Fleury\r
+# Tim Henigan\r
+# Colin O'Flynn\r
+# Reiner Patommel\r
+# Markus Pfaff\r
+# Sander Pool\r
+# Frederik Rouleau\r
+# Carlos Lamas\r
+# Dean Camera\r
+# Opendous Inc.\r
+# Denver Gingerich\r
+#\r
+#----------------------------------------------------------------------------\r
+# On command line:\r
+#\r
+# make all = Make software.\r
+#\r
+# make clean = Clean out built project files.\r
+#\r
+# make coff = Convert ELF to AVR COFF.\r
+#\r
+# make extcoff = Convert ELF to AVR Extended COFF.\r
+#\r
+# make program = Download the hex file to the device, using avrdude.\r
+#                Please customize the avrdude settings below first!\r
+#\r
+# make dfu = Download the hex file to the device, using dfu-programmer (must\r
+#            have dfu-programmer installed).\r
+#\r
+# make flip = Download the hex file to the device, using Atmel FLIP (must\r
+#             have Atmel FLIP installed).\r
+#\r
+# make dfu-ee = Download the eeprom file to the device, using dfu-programmer\r
+#               (must have dfu-programmer installed).\r
+#\r
+# make flip-ee = Download the eeprom file to the device, using Atmel FLIP\r
+#                (must have Atmel FLIP installed).\r
+#\r
+# make doxygen = Generate DoxyGen documentation for the project (must have\r
+#                DoxyGen installed)\r
+#\r
+# make debug = Start either simulavr or avarice as specified for debugging, \r
+#              with avr-gdb or avr-insight as the front end for debugging.\r
+#\r
+# make filename.s = Just compile filename.c into the assembler code only.\r
+#\r
+# make filename.i = Create a preprocessed source file for use in submitting\r
+#                   bug reports to the GCC project.\r
+#\r
+# To rebuild project do "make clean" then "make all".\r
+#----------------------------------------------------------------------------\r
+\r
+\r
+# MCU name\r
+MCU = at90usb1287\r
+\r
+\r
+# Target board (see library "Board Types" documentation, USER or blank for projects not requiring\r
+# LUFA board drivers). If USER is selected, put custom board drivers in a directory called \r
+# "Board" inside the application directory.\r
+BOARD  = USBKEY\r
+\r
+\r
+# Processor frequency.\r
+#     This will define a symbol, F_CPU, in all source code files equal to the \r
+#     processor frequency. You can then use this symbol in your source code to \r
+#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done\r
+#     automatically to create a 32-bit value in your source code.\r
+#     Typical values are:\r
+#         F_CPU =  1000000\r
+#         F_CPU =  1843200\r
+#         F_CPU =  2000000\r
+#         F_CPU =  3686400\r
+#         F_CPU =  4000000\r
+#         F_CPU =  7372800\r
+#         F_CPU =  8000000\r
+#         F_CPU = 11059200\r
+#         F_CPU = 14745600\r
+#         F_CPU = 16000000\r
+#         F_CPU = 18432000\r
+#         F_CPU = 20000000\r
+F_CPU = 8000000\r
+\r
+\r
+# Input clock frequency.\r
+#     This will define a symbol, F_CLOCK, in all source code files equal to the \r
+#     input clock frequency (before any prescaling is performed). This value may\r
+#     differ from F_CPU if prescaling is used on the latter, and is required as the\r
+#     raw input clock is fed directly to the PLL sections of the AVR for high speed\r
+#     clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'\r
+#     at the end, this will be done automatically to create a 32-bit value in your\r
+#     source code.\r
+#\r
+#     If no clock division is performed on the input clock inside the AVR (via the\r
+#     CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.\r
+F_CLOCK = 8000000\r
+\r
+\r
+# Output format. (can be srec, ihex, binary)\r
+FORMAT = ihex\r
+\r
+\r
+# Target file name (without extension).\r
+TARGET = CDC\r
+\r
+\r
+# Object files directory\r
+#     To put object files in current directory, use a dot (.), do NOT make\r
+#     this an empty or blank macro!\r
+OBJDIR = .\r
+\r
+\r
+# Path to the LUFA library\r
+LUFA_PATH = ../../..\r
+\r
+\r
+# List C source files here. (C dependencies are automatically generated.)\r
+SRC = $(TARGET).c                                                 \\r
+         Descriptors.c                                               \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/DevChapter9.c        \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Endpoint.c           \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Host.c               \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/HostChapter9.c       \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/LowLevel.c           \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Pipe.c               \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/Events.c            \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBInterrupt.c      \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBTask.c           \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/ConfigDescriptor.c  \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/Class/Device/CDC.c            \\r
+\r
+\r
+# List C++ source files here. (C dependencies are automatically generated.)\r
+CPPSRC = \r
+\r
+\r
+# List Assembler source files here.\r
+#     Make them always end in a capital .S.  Files ending in a lowercase .s\r
+#     will not be considered source files but generated files (assembler\r
+#     output from the compiler), and will be deleted upon "make clean"!\r
+#     Even though the DOS/Win* filesystem matches both .s and .S the same,\r
+#     it will preserve the spelling of the filenames, and gcc itself does\r
+#     care about how the name is spelled on its command-line.\r
+ASRC =\r
+\r
+\r
+# Optimization level, can be [0, 1, 2, 3, s]. \r
+#     0 = turn off optimization. s = optimize for size.\r
+#     (Note: 3 is not always the best optimization level. See avr-libc FAQ.)\r
+OPT = s\r
+\r
+\r
+# Debugging format.\r
+#     Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs.\r
+#     AVR Studio 4.10 requires dwarf-2.\r
+#     AVR [Extended] COFF format requires stabs, plus an avr-objcopy run.\r
+DEBUG = dwarf-2\r
+\r
+\r
+# List any extra directories to look for include files here.\r
+#     Each directory must be seperated by a space.\r
+#     Use forward slashes for directory separators.\r
+#     For a directory that has spaces, enclose it in quotes.\r
+EXTRAINCDIRS = $(LUFA_PATH)/\r
+\r
+\r
+# Compiler flag to set the C Standard level.\r
+#     c89   = "ANSI" C\r
+#     gnu89 = c89 plus GCC extensions\r
+#     c99   = ISO C99 standard (not yet fully implemented)\r
+#     gnu99 = c99 plus GCC extensions\r
+CSTANDARD = -std=gnu99\r
+\r
+\r
+# Place -D or -U options here for C sources\r
+CDEFS  = -DF_CPU=$(F_CPU)UL -DF_CLOCK=$(F_CLOCK)UL -DBOARD=BOARD_$(BOARD)\r
+CDEFS += -DUSE_NONSTANDARD_DESCRIPTOR_NAMES -DUSB_DEVICE_ONLY\r
+CDEFS += -DFIXED_CONTROL_ENDPOINT_SIZE=8 -DUSE_SINGLE_DEVICE_CONFIGURATION\r
+CDEFS += -DUSE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)"\r
+\r
+\r
+# Place -D or -U options here for ASM sources\r
+ADEFS = -DF_CPU=$(F_CPU)\r
+\r
+\r
+# Place -D or -U options here for C++ sources\r
+CPPDEFS = -DF_CPU=$(F_CPU)UL\r
+#CPPDEFS += -D__STDC_LIMIT_MACROS\r
+#CPPDEFS += -D__STDC_CONSTANT_MACROS\r
+\r
+\r
+\r
+#---------------- Compiler Options C ----------------\r
+#  -g*:          generate debugging information\r
+#  -O*:          optimization level\r
+#  -f...:        tuning, see GCC manual and avr-libc documentation\r
+#  -Wall...:     warning level\r
+#  -Wa,...:      tell GCC to pass this to the assembler.\r
+#    -adhlns...: create assembler listing\r
+CFLAGS = -g$(DEBUG)\r
+CFLAGS += $(CDEFS)\r
+CFLAGS += -O$(OPT)\r
+CFLAGS += -funsigned-char\r
+CFLAGS += -funsigned-bitfields\r
+CFLAGS += -ffunction-sections\r
+CFLAGS += -fpack-struct\r
+CFLAGS += -fshort-enums\r
+CFLAGS += -finline-limit=20\r
+CFLAGS += -Wall\r
+CFLAGS += -Wstrict-prototypes\r
+CFLAGS += -Wundef\r
+#CFLAGS += -fno-unit-at-a-time\r
+#CFLAGS += -Wunreachable-code\r
+#CFLAGS += -Wsign-compare\r
+CFLAGS += -Wa,-adhlns=$(<:%.c=$(OBJDIR)/%.lst)\r
+CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))\r
+CFLAGS += $(CSTANDARD)\r
+\r
+\r
+#---------------- Compiler Options C++ ----------------\r
+#  -g*:          generate debugging information\r
+#  -O*:          optimization level\r
+#  -f...:        tuning, see GCC manual and avr-libc documentation\r
+#  -Wall...:     warning level\r
+#  -Wa,...:      tell GCC to pass this to the assembler.\r
+#    -adhlns...: create assembler listing\r
+CPPFLAGS = -g$(DEBUG)\r
+CPPFLAGS += $(CPPDEFS)\r
+CPPFLAGS += -O$(OPT)\r
+CPPFLAGS += -funsigned-char\r
+CPPFLAGS += -funsigned-bitfields\r
+CPPFLAGS += -fpack-struct\r
+CPPFLAGS += -fshort-enums\r
+CPPFLAGS += -fno-exceptions\r
+CPPFLAGS += -Wall\r
+CFLAGS += -Wundef\r
+#CPPFLAGS += -mshort-calls\r
+#CPPFLAGS += -fno-unit-at-a-time\r
+#CPPFLAGS += -Wstrict-prototypes\r
+#CPPFLAGS += -Wunreachable-code\r
+#CPPFLAGS += -Wsign-compare\r
+CPPFLAGS += -Wa,-adhlns=$(<:%.cpp=$(OBJDIR)/%.lst)\r
+CPPFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))\r
+#CPPFLAGS += $(CSTANDARD)\r
+\r
+\r
+#---------------- Assembler Options ----------------\r
+#  -Wa,...:   tell GCC to pass this to the assembler.\r
+#  -adhlns:   create listing\r
+#  -gstabs:   have the assembler create line number information; note that\r
+#             for use in COFF files, additional information about filenames\r
+#             and function names needs to be present in the assembler source\r
+#             files -- see avr-libc docs [FIXME: not yet described there]\r
+#  -listing-cont-lines: Sets the maximum number of continuation lines of hex \r
+#       dump that will be displayed for a given single line of source input.\r
+ASFLAGS = $(ADEFS) -Wa,-adhlns=$(<:%.S=$(OBJDIR)/%.lst),-gstabs,--listing-cont-lines=100\r
+\r
+\r
+#---------------- Library Options ----------------\r
+# Minimalistic printf version\r
+PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min\r
+\r
+# Floating point printf version (requires MATH_LIB = -lm below)\r
+PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt\r
+\r
+# If this is left blank, then it will use the Standard printf version.\r
+PRINTF_LIB = \r
+#PRINTF_LIB = $(PRINTF_LIB_MIN)\r
+#PRINTF_LIB = $(PRINTF_LIB_FLOAT)\r
+\r
+\r
+# Minimalistic scanf version\r
+SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min\r
+\r
+# Floating point + %[ scanf version (requires MATH_LIB = -lm below)\r
+SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt\r
+\r
+# If this is left blank, then it will use the Standard scanf version.\r
+SCANF_LIB = \r
+#SCANF_LIB = $(SCANF_LIB_MIN)\r
+#SCANF_LIB = $(SCANF_LIB_FLOAT)\r
+\r
+\r
+MATH_LIB = -lm\r
+\r
+\r
+# List any extra directories to look for libraries here.\r
+#     Each directory must be seperated by a space.\r
+#     Use forward slashes for directory separators.\r
+#     For a directory that has spaces, enclose it in quotes.\r
+EXTRALIBDIRS = \r
+\r
+\r
+\r
+#---------------- External Memory Options ----------------\r
+\r
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),\r
+# used for variables (.data/.bss) and heap (malloc()).\r
+#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff\r
+\r
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),\r
+# only used for heap (malloc()).\r
+#EXTMEMOPTS = -Wl,--section-start,.data=0x801100,--defsym=__heap_end=0x80ffff\r
+\r
+EXTMEMOPTS =\r
+\r
+\r
+\r
+#---------------- Linker Options ----------------\r
+#  -Wl,...:     tell GCC to pass this to linker.\r
+#    -Map:      create map file\r
+#    --cref:    add cross reference to  map file\r
+LDFLAGS = -Wl,-Map=$(TARGET).map,--cref\r
+LDFLAGS += -Wl,--relax \r
+LDFLAGS += -Wl,--gc-sections\r
+LDFLAGS += $(EXTMEMOPTS)\r
+LDFLAGS += $(patsubst %,-L%,$(EXTRALIBDIRS))\r
+LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)\r
+#LDFLAGS += -T linker_script.x\r
+\r
+\r
+\r
+#---------------- Programming Options (avrdude) ----------------\r
+\r
+# Programming hardware: alf avr910 avrisp bascom bsd \r
+# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500\r
+#\r
+# Type: avrdude -c ?\r
+# to get a full listing.\r
+#\r
+AVRDUDE_PROGRAMMER = jtagmkII\r
+\r
+# com1 = serial port. Use lpt1 to connect to parallel port.\r
+AVRDUDE_PORT = usb\r
+\r
+AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex\r
+#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep\r
+\r
+\r
+# Uncomment the following if you want avrdude's erase cycle counter.\r
+# Note that this counter needs to be initialized first using -Yn,\r
+# see avrdude manual.\r
+#AVRDUDE_ERASE_COUNTER = -y\r
+\r
+# Uncomment the following if you do /not/ wish a verification to be\r
+# performed after programming the device.\r
+#AVRDUDE_NO_VERIFY = -V\r
+\r
+# Increase verbosity level.  Please use this when submitting bug\r
+# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude> \r
+# to submit bug reports.\r
+#AVRDUDE_VERBOSE = -v -v\r
+\r
+AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)\r
+AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY)\r
+AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE)\r
+AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER)\r
+\r
+\r
+\r
+#---------------- Debugging Options ----------------\r
+\r
+# For simulavr only - target MCU frequency.\r
+DEBUG_MFREQ = $(F_CPU)\r
+\r
+# Set the DEBUG_UI to either gdb or insight.\r
+# DEBUG_UI = gdb\r
+DEBUG_UI = insight\r
+\r
+# Set the debugging back-end to either avarice, simulavr.\r
+DEBUG_BACKEND = avarice\r
+#DEBUG_BACKEND = simulavr\r
+\r
+# GDB Init Filename.\r
+GDBINIT_FILE = __avr_gdbinit\r
+\r
+# When using avarice settings for the JTAG\r
+JTAG_DEV = /dev/com1\r
+\r
+# Debugging port used to communicate between GDB / avarice / simulavr.\r
+DEBUG_PORT = 4242\r
+\r
+# Debugging host used to communicate between GDB / avarice / simulavr, normally\r
+#     just set to localhost unless doing some sort of crazy debugging when \r
+#     avarice is running on a different computer.\r
+DEBUG_HOST = localhost\r
+\r
+\r
+\r
+#============================================================================\r
+\r
+\r
+# Define programs and commands.\r
+SHELL = sh\r
+CC = avr-gcc\r
+OBJCOPY = avr-objcopy\r
+OBJDUMP = avr-objdump\r
+SIZE = avr-size\r
+AR = avr-ar rcs\r
+NM = avr-nm\r
+AVRDUDE = avrdude\r
+REMOVE = rm -f\r
+REMOVEDIR = rm -rf\r
+COPY = cp\r
+WINSHELL = cmd\r
+\r
+# Define Messages\r
+# English\r
+MSG_ERRORS_NONE = Errors: none\r
+MSG_BEGIN = -------- begin --------\r
+MSG_END = --------  end  --------\r
+MSG_SIZE_BEFORE = Size before: \r
+MSG_SIZE_AFTER = Size after:\r
+MSG_COFF = Converting to AVR COFF:\r
+MSG_EXTENDED_COFF = Converting to AVR Extended COFF:\r
+MSG_FLASH = Creating load file for Flash:\r
+MSG_EEPROM = Creating load file for EEPROM:\r
+MSG_EXTENDED_LISTING = Creating Extended Listing:\r
+MSG_SYMBOL_TABLE = Creating Symbol Table:\r
+MSG_LINKING = Linking:\r
+MSG_COMPILING = Compiling C:\r
+MSG_COMPILING_CPP = Compiling C++:\r
+MSG_ASSEMBLING = Assembling:\r
+MSG_CLEANING = Cleaning project:\r
+MSG_CREATING_LIBRARY = Creating library:\r
+\r
+\r
+\r
+\r
+# Define all object files.\r
+OBJ = $(SRC:%.c=$(OBJDIR)/%.o) $(CPPSRC:%.cpp=$(OBJDIR)/%.o) $(ASRC:%.S=$(OBJDIR)/%.o) \r
+\r
+# Define all listing files.\r
+LST = $(SRC:%.c=$(OBJDIR)/%.lst) $(CPPSRC:%.cpp=$(OBJDIR)/%.lst) $(ASRC:%.S=$(OBJDIR)/%.lst) \r
+\r
+\r
+# Compiler flags to generate dependency files.\r
+GENDEPFLAGS = -MMD -MP -MF .dep/$(@F).d\r
+\r
+\r
+# Combine all necessary flags and optional flags.\r
+# Add target processor to flags.\r
+ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS)\r
+ALL_CPPFLAGS = -mmcu=$(MCU) -I. -x c++ $(CPPFLAGS) $(GENDEPFLAGS)\r
+ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)\r
+\r
+\r
+\r
+\r
+\r
+# Default target.\r
+all: begin gccversion sizebefore build checkhooks checklibmode checkboard sizeafter end\r
+\r
+# Change the build target to build a HEX file or a library.\r
+build: elf hex eep lss sym\r
+#build: lib\r
+\r
+\r
+elf: $(TARGET).elf\r
+hex: $(TARGET).hex\r
+eep: $(TARGET).eep\r
+lss: $(TARGET).lss\r
+sym: $(TARGET).sym\r
+LIBNAME=lib$(TARGET).a\r
+lib: $(LIBNAME)\r
+\r
+\r
+\r
+# Eye candy.\r
+# AVR Studio 3.x does not check make's exit code but relies on\r
+# the following magic strings to be generated by the compile job.\r
+begin:\r
+       @echo\r
+       @echo $(MSG_BEGIN)\r
+\r
+end:\r
+       @echo $(MSG_END)\r
+       @echo\r
+\r
+\r
+# Display size of file.\r
+HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex\r
+ELFSIZE = $(SIZE) $(MCU_FLAG) $(FORMAT_FLAG) $(TARGET).elf\r
+MCU_FLAG = $(shell $(SIZE) --help | grep -- --mcu > /dev/null && echo --mcu=$(MCU) )\r
+FORMAT_FLAG = $(shell $(SIZE) --help | grep -- --format=.*avr > /dev/null && echo --format=avr )\r
+\r
+sizebefore:\r
+       @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \\r
+       2>/dev/null; echo; fi\r
+\r
+sizeafter:\r
+       @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \\r
+       2>/dev/null; echo; fi\r
+\r
+checkhooks: build\r
+       @echo\r
+       @echo ------- Unhooked LUFA Events -------\r
+       @$(shell) (grep -s '^EVENT_.*LUFA/.*\\.o' $(TARGET).map | \\r
+                  cut -d' ' -f1 | cut -d'_' -f2- | grep ".*") || \\r
+                          echo "(None)"\r
+       @echo ------------------------------------\r
+\r
+checklibmode:\r
+       @echo\r
+       @echo ----------- Library Mode -----------\r
+       @$(shell) ($(CC) $(ALL_CFLAGS) -E -dM - < /dev/null \\r
+                 | grep 'USB_\(DEVICE\|HOST\)_ONLY' | cut -d' ' -f2 | grep ".*") \\r
+                 || echo "No specific mode (both device and host mode allowable)."\r
+       @echo ------------------------------------\r
+\r
+checkboard:\r
+       @echo\r
+       @echo ---------- Selected Board ----------\r
+       @echo Selected board model is $(BOARD).\r
+       @echo ------------------------------------\r
+       \r
+# Display compiler version information.\r
+gccversion : \r
+       @$(CC) --version\r
+\r
+\r
+\r
+# Program the device.  \r
+program: $(TARGET).hex $(TARGET).eep\r
+       $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)\r
+\r
+flip: $(TARGET).hex\r
+       batchisp -hardware usb -device $(MCU) -operation erase f\r
+       batchisp -hardware usb -device $(MCU) -operation loadbuffer $(TARGET).hex program\r
+       batchisp -hardware usb -device $(MCU) -operation start reset 0\r
+\r
+dfu: $(TARGET).hex\r
+       dfu-programmer $(MCU) erase\r
+       dfu-programmer $(MCU) flash --debug 1 $(TARGET).hex\r
+       dfu-programmer $(MCU) reset\r
+\r
+flip-ee: $(TARGET).hex $(TARGET).eep\r
+       copy $(TARGET).eep $(TARGET)eep.hex\r
+       batchisp -hardware usb -device $(MCU) -operation memory EEPROM erase\r
+       batchisp -hardware usb -device $(MCU) -operation memory EEPROM loadbuffer $(TARGET)eep.hex program\r
+       batchisp -hardware usb -device $(MCU) -operation start reset 0\r
+\r
+dfu-ee: $(TARGET).hex $(TARGET).eep\r
+       dfu-programmer $(MCU) flash-eeprom --debug 1 --suppress-bootloader-mem $(TARGET).eep\r
+       dfu-programmer $(MCU) reset\r
+\r
+\r
+# Generate avr-gdb config/init file which does the following:\r
+#     define the reset signal, load the target file, connect to target, and set \r
+#     a breakpoint at main().\r
+gdb-config: \r
+       @$(REMOVE) $(GDBINIT_FILE)\r
+       @echo define reset >> $(GDBINIT_FILE)\r
+       @echo SIGNAL SIGHUP >> $(GDBINIT_FILE)\r
+       @echo end >> $(GDBINIT_FILE)\r
+       @echo file $(TARGET).elf >> $(GDBINIT_FILE)\r
+       @echo target remote $(DEBUG_HOST):$(DEBUG_PORT)  >> $(GDBINIT_FILE)\r
+ifeq ($(DEBUG_BACKEND),simulavr)\r
+       @echo load  >> $(GDBINIT_FILE)\r
+endif\r
+       @echo break main >> $(GDBINIT_FILE)\r
+\r
+debug: gdb-config $(TARGET).elf\r
+ifeq ($(DEBUG_BACKEND), avarice)\r
+       @echo Starting AVaRICE - Press enter when "waiting to connect" message displays.\r
+       @$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \\r
+       $(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT)\r
+       @$(WINSHELL) /c pause\r
+\r
+else\r
+       @$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \\r
+       $(DEBUG_MFREQ) --port $(DEBUG_PORT)\r
+endif\r
+       @$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE)\r
+\r
+\r
+\r
+\r
+# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.\r
+COFFCONVERT = $(OBJCOPY) --debugging\r
+COFFCONVERT += --change-section-address .data-0x800000\r
+COFFCONVERT += --change-section-address .bss-0x800000\r
+COFFCONVERT += --change-section-address .noinit-0x800000\r
+COFFCONVERT += --change-section-address .eeprom-0x810000\r
+\r
+\r
+\r
+coff: $(TARGET).elf\r
+       @echo\r
+       @echo $(MSG_COFF) $(TARGET).cof\r
+       $(COFFCONVERT) -O coff-avr $< $(TARGET).cof\r
+\r
+\r
+extcoff: $(TARGET).elf\r
+       @echo\r
+       @echo $(MSG_EXTENDED_COFF) $(TARGET).cof\r
+       $(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof\r
+\r
+\r
+\r
+# Create final output files (.hex, .eep) from ELF output file.\r
+%.hex: %.elf\r
+       @echo\r
+       @echo $(MSG_FLASH) $@\r
+       $(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@\r
+\r
+%.eep: %.elf\r
+       @echo\r
+       @echo $(MSG_EEPROM) $@\r
+       -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \\r
+       --change-section-lma .eeprom=0 --no-change-warnings -O $(FORMAT) $< $@ || exit 0\r
+\r
+# Create extended listing file from ELF output file.\r
+%.lss: %.elf\r
+       @echo\r
+       @echo $(MSG_EXTENDED_LISTING) $@\r
+       $(OBJDUMP) -h -z -S $< > $@\r
+\r
+# Create a symbol table from ELF output file.\r
+%.sym: %.elf\r
+       @echo\r
+       @echo $(MSG_SYMBOL_TABLE) $@\r
+       $(NM) -n $< > $@\r
+\r
+\r
+\r
+# Create library from object files.\r
+.SECONDARY : $(TARGET).a\r
+.PRECIOUS : $(OBJ)\r
+%.a: $(OBJ)\r
+       @echo\r
+       @echo $(MSG_CREATING_LIBRARY) $@\r
+       $(AR) $@ $(OBJ)\r
+\r
+\r
+# Link: create ELF output file from object files.\r
+.SECONDARY : $(TARGET).elf\r
+.PRECIOUS : $(OBJ)\r
+%.elf: $(OBJ)\r
+       @echo\r
+       @echo $(MSG_LINKING) $@\r
+       $(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)\r
+\r
+\r
+# Compile: create object files from C source files.\r
+$(OBJDIR)/%.o : %.c\r
+       @echo\r
+       @echo $(MSG_COMPILING) $<\r
+       $(CC) -c $(ALL_CFLAGS) $< -o $@ \r
+\r
+\r
+# Compile: create object files from C++ source files.\r
+$(OBJDIR)/%.o : %.cpp\r
+       @echo\r
+       @echo $(MSG_COMPILING_CPP) $<\r
+       $(CC) -c $(ALL_CPPFLAGS) $< -o $@ \r
+\r
+\r
+# Compile: create assembler files from C source files.\r
+%.s : %.c\r
+       $(CC) -S $(ALL_CFLAGS) $< -o $@\r
+\r
+\r
+# Compile: create assembler files from C++ source files.\r
+%.s : %.cpp\r
+       $(CC) -S $(ALL_CPPFLAGS) $< -o $@\r
+\r
+\r
+# Assemble: create object files from assembler source files.\r
+$(OBJDIR)/%.o : %.S\r
+       @echo\r
+       @echo $(MSG_ASSEMBLING) $<\r
+       $(CC) -c $(ALL_ASFLAGS) $< -o $@\r
+\r
+\r
+# Create preprocessed source for use in sending a bug report.\r
+%.i : %.c\r
+       $(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ \r
+       \r
+\r
+# Target: clean project.\r
+clean: begin clean_list clean_binary end\r
+\r
+clean_binary:\r
+       $(REMOVE) $(TARGET).hex\r
+       \r
+clean_list:\r
+       @echo $(MSG_CLEANING)\r
+       $(REMOVE) $(TARGET).eep\r
+       $(REMOVE) $(TARGET)eep.hex\r
+       $(REMOVE) $(TARGET).cof\r
+       $(REMOVE) $(TARGET).elf\r
+       $(REMOVE) $(TARGET).map\r
+       $(REMOVE) $(TARGET).sym\r
+       $(REMOVE) $(TARGET).lss\r
+       $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.o)\r
+       $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.lst)\r
+       $(REMOVE) $(SRC:.c=.s)\r
+       $(REMOVE) $(SRC:.c=.d)\r
+       $(REMOVE) $(SRC:.c=.i)\r
+       $(REMOVEDIR) .dep\r
+\r
+\r
+doxygen:\r
+       @echo Generating Project Documentation...\r
+       @doxygen Doxygen.conf\r
+       @echo Documentation Generation Complete.\r
+\r
+clean_doxygen:\r
+       rm -rf Documentation\r
+\r
+# Create object files directory\r
+$(shell mkdir $(OBJDIR) 2>/dev/null)\r
+\r
+\r
+# Include the dependency files.\r
+-include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)\r
+\r
+\r
+# Listing of phony targets.\r
+.PHONY : all checkhooks checklibmode checkboard   \\r
+begin finish end sizebefore sizeafter gccversion  \\r
+build elf hex eep lss sym coff extcoff clean      \\r
+clean_list clean_binary program debug gdb-config  \\r
+doxygen dfu flip flip-ee dfu-ee
\ No newline at end of file
diff --git a/Demos/Device/ClassDriver/DualCDC/Descriptors.c b/Demos/Device/ClassDriver/DualCDC/Descriptors.c
new file mode 100644 (file)
index 0000000..64aed7d
--- /dev/null
@@ -0,0 +1,385 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  USB Device Descriptors, for library use when in USB device mode. Descriptors are special \r
+ *  computer-readable structures which the host requests upon device enumeration, to determine\r
+ *  the device's capabilities and functions.  \r
+ */\r
+\r
+#include "Descriptors.h"\r
+\r
+/** Device descriptor structure. This descriptor, located in FLASH memory, describes the overall\r
+ *  device characteristics, including the supported USB version, control endpoint size and the\r
+ *  number of device configurations. The descriptor is read out by the USB host when the enumeration\r
+ *  process begins.\r
+ */\r
+USB_Descriptor_Device_t PROGMEM DeviceDescriptor =\r
+{\r
+       .Header                 = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device},\r
+               \r
+       .USBSpecification       = VERSION_BCD(01.10),\r
+       .Class                  = 0xEF,\r
+       .SubClass               = 0x02,\r
+       .Protocol               = 0x01,\r
+                               \r
+       .Endpoint0Size          = FIXED_CONTROL_ENDPOINT_SIZE,\r
+               \r
+       .VendorID               = 0x03EB,\r
+       .ProductID              = 0x204E,\r
+       .ReleaseNumber          = 0x0000,\r
+               \r
+       .ManufacturerStrIndex   = 0x01,\r
+       .ProductStrIndex        = 0x02,\r
+       .SerialNumStrIndex      = NO_DESCRIPTOR,\r
+               \r
+       .NumberOfConfigurations = 1\r
+};\r
+\r
+/** Configuration descriptor structure. This descriptor, located in FLASH memory, describes the usage\r
+ *  of the device in one of its supported configurations, including information about any device interfaces\r
+ *  and endpoints. The descriptor is read out by the USB host during the enumeration process when selecting\r
+ *  a configuration so that the host may correctly communicate with the USB device.\r
+ */\r
+USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =\r
+{\r
+       .Config = \r
+               {\r
+                       .Header                 = {.Size = sizeof(USB_Descriptor_Configuration_Header_t), .Type = DTYPE_Configuration},\r
+\r
+                       .TotalConfigurationSize = sizeof(USB_Descriptor_Configuration_t),\r
+                       .TotalInterfaces        = 4,\r
+                               \r
+                       .ConfigurationNumber    = 1,\r
+                       .ConfigurationStrIndex  = NO_DESCRIPTOR,\r
+                               \r
+                       .ConfigAttributes       = (USB_CONFIG_ATTR_BUSPOWERED | USB_CONFIG_ATTR_SELFPOWERED),\r
+                       \r
+                       .MaxPowerConsumption    = USB_CONFIG_POWER_MA(100)\r
+               },\r
+               \r
+       .IAD1 = \r
+               {\r
+                       .Header                 = {.Size = sizeof(USB_Descriptor_Interface_Association_t), .Type = DTYPE_InterfaceAssociation},\r
+\r
+                       .FirstInterfaceIndex    = 0,\r
+                       .TotalInterfaces        = 2,\r
+\r
+                       .Class                  = 0x02,\r
+                       .SubClass               = 0x02,\r
+                       .Protocol               = 0x01,\r
+\r
+                       .IADStrIndex            = NO_DESCRIPTOR\r
+               },\r
+\r
+       .CDC1_CCI_Interface = \r
+               {\r
+                       .Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},\r
+\r
+                       .InterfaceNumber        = 0,\r
+                       .AlternateSetting       = 0,\r
+                       \r
+                       .TotalEndpoints         = 1,\r
+                               \r
+                       .Class                  = 0x02,\r
+                       .SubClass               = 0x02,\r
+                       .Protocol               = 0x01,\r
+                               \r
+                       .InterfaceStrIndex      = NO_DESCRIPTOR\r
+               },\r
+\r
+       .CDC1_Functional_IntHeader = \r
+               {\r
+                       .Header                 = {.Size = sizeof(CDC_FUNCTIONAL_DESCRIPTOR(2)), .Type = 0x24},\r
+                       .SubType                = 0x00,\r
+                       \r
+                       .Data                   = {0x01, 0x10}\r
+               },\r
+\r
+       .CDC1_Functional_CallManagement = \r
+               {\r
+                       .Header                 = {.Size = sizeof(CDC_FUNCTIONAL_DESCRIPTOR(2)), .Type = 0x24},\r
+                       .SubType                = 0x01,\r
+                       \r
+                       .Data                   = {0x03, 0x01}\r
+               },\r
+\r
+       .CDC1_Functional_AbstractControlManagement = \r
+               {\r
+                       .Header                 = {.Size = sizeof(CDC_FUNCTIONAL_DESCRIPTOR(1)), .Type = 0x24},\r
+                       .SubType                = 0x02,\r
+                       \r
+                       .Data                   = {0x06}\r
+               },\r
+               \r
+       .CDC1_Functional_Union = \r
+               {\r
+                       .Header                 = {.Size = sizeof(CDC_FUNCTIONAL_DESCRIPTOR(2)), .Type = 0x24},\r
+                       .SubType                = 0x06,\r
+                       \r
+                       .Data                   = {0x00, 0x01}\r
+               },\r
+\r
+       .CDC1_ManagementEndpoint = \r
+               {\r
+                       .Header                 = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},\r
+                                                                                \r
+                       .EndpointAddress        = (ENDPOINT_DESCRIPTOR_DIR_IN | CDC1_NOTIFICATION_EPNUM),\r
+                       .Attributes             = EP_TYPE_INTERRUPT,\r
+                       .EndpointSize           = CDC_NOTIFICATION_EPSIZE,\r
+                       .PollingIntervalMS      = 0xFF\r
+               },\r
+\r
+       .CDC1_DCI_Interface = \r
+               {\r
+                       .Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},\r
+\r
+                       .InterfaceNumber        = 1,\r
+                       .AlternateSetting       = 0,\r
+                       \r
+                       .TotalEndpoints         = 2,\r
+                               \r
+                       .Class                  = 0x0A,\r
+                       .SubClass               = 0x00,\r
+                       .Protocol               = 0x00,\r
+                               \r
+                       .InterfaceStrIndex      = NO_DESCRIPTOR\r
+               },\r
+\r
+       .CDC1_DataOutEndpoint = \r
+               {\r
+                       .Header                 = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},\r
+                                                                                \r
+                       .EndpointAddress        = (ENDPOINT_DESCRIPTOR_DIR_OUT | CDC1_RX_EPNUM),\r
+                       .Attributes             = EP_TYPE_BULK,\r
+                       .EndpointSize           = CDC_TXRX_EPSIZE,\r
+                       .PollingIntervalMS      = 0x00\r
+               },\r
+               \r
+       .CDC1_DataInEndpoint = \r
+               {\r
+                       .Header                 = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},\r
+                                                                                \r
+                       .EndpointAddress        = (ENDPOINT_DESCRIPTOR_DIR_IN | CDC1_TX_EPNUM),\r
+                       .Attributes             = EP_TYPE_BULK,\r
+                       .EndpointSize           = CDC_TXRX_EPSIZE,\r
+                       .PollingIntervalMS      = 0x00\r
+               },\r
+\r
+       .IAD2 = \r
+               {\r
+                       .Header                 = {.Size = sizeof(USB_Descriptor_Interface_Association_t), .Type = DTYPE_InterfaceAssociation},\r
+\r
+                       .FirstInterfaceIndex    = 2,\r
+                       .TotalInterfaces        = 2,\r
+\r
+                       .Class                  = 0x02,\r
+                       .SubClass               = 0x02,\r
+                       .Protocol               = 0x01,\r
+\r
+                       .IADStrIndex            = NO_DESCRIPTOR\r
+               },\r
+\r
+       .CDC2_CCI_Interface = \r
+               {\r
+                       .Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},\r
+\r
+                       .InterfaceNumber        = 2,\r
+                       .AlternateSetting       = 0,\r
+                       \r
+                       .TotalEndpoints         = 1,\r
+                               \r
+                       .Class                  = 0x02,\r
+                       .SubClass               = 0x02,\r
+                       .Protocol               = 0x01,\r
+                               \r
+                       .InterfaceStrIndex      = NO_DESCRIPTOR\r
+               },\r
+\r
+       .CDC2_Functional_IntHeader = \r
+               {\r
+                       .Header                 = {.Size = sizeof(CDC_FUNCTIONAL_DESCRIPTOR(2)), .Type = 0x24},\r
+                       .SubType                = 0x00,\r
+                       \r
+                       .Data                   = {0x01, 0x10}\r
+               },\r
+\r
+       .CDC2_Functional_CallManagement = \r
+               {\r
+                       .Header                 = {.Size = sizeof(CDC_FUNCTIONAL_DESCRIPTOR(2)), .Type = 0x24},\r
+                       .SubType                = 0x01,\r
+                       \r
+                       .Data                   = {0x03, 0x03}\r
+               },\r
+\r
+       .CDC2_Functional_AbstractControlManagement = \r
+               {\r
+                       .Header                 = {.Size = sizeof(CDC_FUNCTIONAL_DESCRIPTOR(1)), .Type = 0x24},\r
+                       .SubType                = 0x02,\r
+                       \r
+                       .Data                   = {0x06}\r
+               },\r
+               \r
+       .CDC2_Functional_Union = \r
+               {\r
+                       .Header                 = {.Size = sizeof(CDC_FUNCTIONAL_DESCRIPTOR(2)), .Type = 0x24},\r
+                       .SubType                = 0x06,\r
+                       \r
+                       .Data                   = {0x02, 0x03}\r
+               },\r
+\r
+       .CDC2_ManagementEndpoint = \r
+               {\r
+                       .Header                 = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},\r
+                                                                                \r
+                       .EndpointAddress        = (ENDPOINT_DESCRIPTOR_DIR_IN | CDC2_NOTIFICATION_EPNUM),\r
+                       .Attributes             = EP_TYPE_INTERRUPT,\r
+                       .EndpointSize           = CDC_NOTIFICATION_EPSIZE,\r
+                       .PollingIntervalMS      = 0xFF\r
+               },\r
+\r
+       .CDC2_DCI_Interface = \r
+               {\r
+                       .Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},\r
+\r
+                       .InterfaceNumber        = 3,\r
+                       .AlternateSetting       = 0,\r
+                       \r
+                       .TotalEndpoints         = 2,\r
+                               \r
+                       .Class                  = 0x0A,\r
+                       .SubClass               = 0x00,\r
+                       .Protocol               = 0x00,\r
+                               \r
+                       .InterfaceStrIndex      = NO_DESCRIPTOR\r
+               },\r
+\r
+       .CDC2_DataOutEndpoint = \r
+               {\r
+                       .Header                 = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},\r
+                                                                                \r
+                       .EndpointAddress        = (ENDPOINT_DESCRIPTOR_DIR_OUT | CDC2_RX_EPNUM),\r
+                       .Attributes             = EP_TYPE_BULK,\r
+                       .EndpointSize           = CDC_TXRX_EPSIZE,\r
+                       .PollingIntervalMS      = 0x00\r
+               },\r
+               \r
+       .CDC2_DataInEndpoint = \r
+               {\r
+                       .Header                 = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},\r
+                                                                                \r
+                       .EndpointAddress        = (ENDPOINT_DESCRIPTOR_DIR_IN | CDC2_TX_EPNUM),\r
+                       .Attributes             = EP_TYPE_BULK,\r
+                       .EndpointSize           = CDC_TXRX_EPSIZE,\r
+                       .PollingIntervalMS      = 0x00\r
+               }\r
+};\r
+\r
+/** Language descriptor structure. This descriptor, located in FLASH memory, is returned when the host requests\r
+ *  the string descriptor with index 0 (the first index). It is actually an array of 16-bit integers, which indicate\r
+ *  via the language ID table available at USB.org what languages the device supports for its string descriptors.\r
+ */\r
+USB_Descriptor_String_t PROGMEM LanguageString =\r
+{\r
+       .Header                 = {.Size = USB_STRING_LEN(1), .Type = DTYPE_String},\r
+               \r
+       .UnicodeString          = {LANGUAGE_ID_ENG}\r
+};\r
+\r
+/** Manufacturer descriptor string. This is a Unicode string containing the manufacturer's details in human readable\r
+ *  form, and is read out upon request by the host when the appropriate string ID is requested, listed in the Device\r
+ *  Descriptor.\r
+ */\r
+USB_Descriptor_String_t PROGMEM ManufacturerString =\r
+{\r
+       .Header                 = {.Size = USB_STRING_LEN(11), .Type = DTYPE_String},\r
+               \r
+       .UnicodeString          = L"Dean Camera"\r
+};\r
+\r
+/** Product descriptor string. This is a Unicode string containing the product's details in human readable form,\r
+ *  and is read out upon request by the host when the appropriate string ID is requested, listed in the Device\r
+ *  Descriptor.\r
+ */\r
+USB_Descriptor_String_t PROGMEM ProductString =\r
+{\r
+       .Header                 = {.Size = USB_STRING_LEN(13), .Type = DTYPE_String},\r
+               \r
+       .UnicodeString          = L"LUFA Dual CDC Demo"\r
+};\r
+\r
+/** This function is called by the library when in device mode, and must be overridden (see library "USB Descriptors"\r
+ *  documentation) by the application code so that the address and size of a requested descriptor can be given\r
+ *  to the USB library. When the device receives a Get Descriptor request on the control endpoint, this function\r
+ *  is called so that the descriptor details can be passed back and the appropriate descriptor sent back to the\r
+ *  USB host.\r
+ */\r
+uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
+{\r
+       const uint8_t  DescriptorType   = (wValue >> 8);\r
+       const uint8_t  DescriptorNumber = (wValue & 0xFF);\r
+\r
+       void*    Address = NULL;\r
+       uint16_t Size    = NO_DESCRIPTOR;\r
+\r
+       switch (DescriptorType)\r
+       {\r
+               case DTYPE_Device:\r
+                       Address = (void*)&DeviceDescriptor;\r
+                       Size    = sizeof(USB_Descriptor_Device_t);\r
+                       break;\r
+               case DTYPE_Configuration: \r
+                       Address = (void*)&ConfigurationDescriptor;\r
+                       Size    = sizeof(USB_Descriptor_Configuration_t);\r
+                       break;\r
+               case DTYPE_String: \r
+                       switch (DescriptorNumber)\r
+                       {\r
+                               case 0x00: \r
+                                       Address = (void*)&LanguageString;\r
+                                       Size    = pgm_read_byte(&LanguageString.Header.Size);\r
+                                       break;\r
+                               case 0x01: \r
+                                       Address = (void*)&ManufacturerString;\r
+                                       Size    = pgm_read_byte(&ManufacturerString.Header.Size);\r
+                                       break;\r
+                               case 0x02: \r
+                                       Address = (void*)&ProductString;\r
+                                       Size    = pgm_read_byte(&ProductString.Header.Size);\r
+                                       break;\r
+                       }\r
+                       \r
+                       break;\r
+       }\r
+       \r
+       *DescriptorAddress = Address;   \r
+       return Size;\r
+}\r
diff --git a/Demos/Device/ClassDriver/DualCDC/Descriptors.h b/Demos/Device/ClassDriver/DualCDC/Descriptors.h
new file mode 100644 (file)
index 0000000..97165e5
--- /dev/null
@@ -0,0 +1,104 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  Header file for Descriptors.c.\r
+ */\r
\r
+#ifndef _DESCRIPTORS_H_\r
+#define _DESCRIPTORS_H_\r
+\r
+       /* Includes: */\r
+               #include <avr/pgmspace.h>\r
+\r
+               #include <LUFA/Drivers/USB/USB.h>\r
+               #include <LUFA/Drivers/USB/Class/Device/CDC.h>\r
+\r
+       /* Macros: */\r
+               /** Endpoint number of the first CDC interface's device-to-host notification IN endpoint. */\r
+               #define CDC1_NOTIFICATION_EPNUM        3\r
+\r
+               /** Endpoint number of the first CDC interface's device-to-host data IN endpoint. */\r
+               #define CDC1_TX_EPNUM                  1        \r
+\r
+               /** Endpoint number of the first CDC interface's host-to-device data OUT endpoint. */\r
+               #define CDC1_RX_EPNUM                  2        \r
+\r
+               /** Endpoint number of the second CDC interface's device-to-host notification IN endpoint. */\r
+               #define CDC2_NOTIFICATION_EPNUM        4\r
+\r
+               /** Endpoint number of the second CDC interface's device-to-host data IN endpoint. */\r
+               #define CDC2_TX_EPNUM                  5        \r
+\r
+               /** Endpoint number of the second CDC interface's host-to-device data OUT endpoint. */\r
+               #define CDC2_RX_EPNUM                  6        \r
+\r
+               /** Size in bytes of the CDC device-to-host notification IN endpoints. */\r
+               #define CDC_NOTIFICATION_EPSIZE        8\r
+\r
+               /** Size in bytes of the CDC data IN and OUT endpoints. */\r
+               #define CDC_TXRX_EPSIZE                16       \r
+\r
+       /* Type Defines: */\r
+               /** Type define for the device configuration descriptor structure. This must be defined in the\r
+                *  application code, as the configuration descriptor contains several sub-descriptors which\r
+                *  vary between devices, and which describe the device's usage to the host.\r
+                */\r
+               typedef struct\r
+               {\r
+                       USB_Descriptor_Configuration_Header_t    Config;\r
+                       USB_Descriptor_Interface_Association_t   IAD1;\r
+                       USB_Descriptor_Interface_t               CDC1_CCI_Interface;\r
+                       CDC_FUNCTIONAL_DESCRIPTOR(2)             CDC1_Functional_IntHeader;\r
+                       CDC_FUNCTIONAL_DESCRIPTOR(2)             CDC1_Functional_CallManagement;\r
+                       CDC_FUNCTIONAL_DESCRIPTOR(1)             CDC1_Functional_AbstractControlManagement;\r
+                       CDC_FUNCTIONAL_DESCRIPTOR(2)             CDC1_Functional_Union;\r
+                       USB_Descriptor_Endpoint_t                CDC1_ManagementEndpoint;\r
+                       USB_Descriptor_Interface_t               CDC1_DCI_Interface;\r
+                       USB_Descriptor_Endpoint_t                CDC1_DataOutEndpoint;\r
+                       USB_Descriptor_Endpoint_t                CDC1_DataInEndpoint;\r
+                       USB_Descriptor_Interface_Association_t   IAD2;\r
+                       USB_Descriptor_Interface_t               CDC2_CCI_Interface;\r
+                       CDC_FUNCTIONAL_DESCRIPTOR(2)             CDC2_Functional_IntHeader;\r
+                       CDC_FUNCTIONAL_DESCRIPTOR(2)             CDC2_Functional_CallManagement;\r
+                       CDC_FUNCTIONAL_DESCRIPTOR(1)             CDC2_Functional_AbstractControlManagement;\r
+                       CDC_FUNCTIONAL_DESCRIPTOR(2)             CDC2_Functional_Union;\r
+                       USB_Descriptor_Endpoint_t                CDC2_ManagementEndpoint;\r
+                       USB_Descriptor_Interface_t               CDC2_DCI_Interface;\r
+                       USB_Descriptor_Endpoint_t                CDC2_DataOutEndpoint;\r
+                       USB_Descriptor_Endpoint_t                CDC2_DataInEndpoint;\r
+               } USB_Descriptor_Configuration_t;\r
+\r
+       /* Function Prototypes: */\r
+               uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
+                                                                                       ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);\r
+\r
+#endif\r
diff --git a/Demos/Device/ClassDriver/DualCDC/Doxygen.conf b/Demos/Device/ClassDriver/DualCDC/Doxygen.conf
new file mode 100644 (file)
index 0000000..7b3b741
--- /dev/null
@@ -0,0 +1,1485 @@
+# Doxyfile 1.5.7.1\r
+\r
+# This file describes the settings to be used by the documentation system\r
+# doxygen (www.doxygen.org) for a project\r
+#\r
+# All text after a hash (#) is considered a comment and will be ignored\r
+# The format is:\r
+#       TAG = value [value, ...]\r
+# For lists items can also be appended using:\r
+#       TAG += value [value, ...]\r
+# Values that contain spaces should be placed between quotes (" ")\r
+\r
+#---------------------------------------------------------------------------\r
+# Project related configuration options\r
+#---------------------------------------------------------------------------\r
+\r
+# This tag specifies the encoding used for all characters in the config file \r
+# that follow. The default is UTF-8 which is also the encoding used for all \r
+# text before the first occurrence of this tag. Doxygen uses libiconv (or the \r
+# iconv built into libc) for the transcoding. See \r
+# http://www.gnu.org/software/libiconv for the list of possible encodings.\r
+\r
+DOXYFILE_ENCODING      = UTF-8\r
+\r
+# The PROJECT_NAME tag is a single word (or a sequence of words surrounded \r
+# by quotes) that should identify the project.\r
+\r
+PROJECT_NAME           = "LUFA Library - Dual CDC Device Demo"\r
+\r
+# The PROJECT_NUMBER tag can be used to enter a project or revision number. \r
+# This could be handy for archiving the generated documentation or \r
+# if some version control system is used.\r
+\r
+PROJECT_NUMBER         = 0.0.0\r
+\r
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) \r
+# base path where the generated documentation will be put. \r
+# If a relative path is entered, it will be relative to the location \r
+# where doxygen was started. If left blank the current directory will be used.\r
+\r
+OUTPUT_DIRECTORY       = ./Documentation/\r
+\r
+# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create \r
+# 4096 sub-directories (in 2 levels) under the output directory of each output \r
+# format and will distribute the generated files over these directories. \r
+# Enabling this option can be useful when feeding doxygen a huge amount of \r
+# source files, where putting all generated files in the same directory would \r
+# otherwise cause performance problems for the file system.\r
+\r
+CREATE_SUBDIRS         = YES\r
+\r
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all \r
+# documentation generated by doxygen is written. Doxygen will use this \r
+# information to generate all constant output in the proper language. \r
+# The default language is English, other supported languages are: \r
+# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, \r
+# Croatian, Czech, Danish, Dutch, Farsi, Finnish, French, German, Greek, \r
+# Hungarian, Italian, Japanese, Japanese-en (Japanese with English messages), \r
+# Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, Polish, \r
+# Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, Slovene, \r
+# Spanish, Swedish, and Ukrainian.\r
+\r
+OUTPUT_LANGUAGE        = English\r
+\r
+# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will \r
+# include brief member descriptions after the members that are listed in \r
+# the file and class documentation (similar to JavaDoc). \r
+# Set to NO to disable this.\r
+\r
+BRIEF_MEMBER_DESC      = YES\r
+\r
+# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend \r
+# the brief description of a member or function before the detailed description. \r
+# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the \r
+# brief descriptions will be completely suppressed.\r
+\r
+REPEAT_BRIEF           = YES\r
+\r
+# This tag implements a quasi-intelligent brief description abbreviator \r
+# that is used to form the text in various listings. Each string \r
+# in this list, if found as the leading text of the brief description, will be \r
+# stripped from the text and the result after processing the whole list, is \r
+# used as the annotated text. Otherwise, the brief description is used as-is. \r
+# If left blank, the following values are used ("$name" is automatically \r
+# replaced with the name of the entity): "The $name class" "The $name widget" \r
+# "The $name file" "is" "provides" "specifies" "contains" \r
+# "represents" "a" "an" "the"\r
+\r
+ABBREVIATE_BRIEF       = "The $name class" \\r
+                         "The $name widget" \\r
+                         "The $name file" \\r
+                         is \\r
+                         provides \\r
+                         specifies \\r
+                         contains \\r
+                         represents \\r
+                         a \\r
+                         an \\r
+                         the\r
+\r
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then \r
+# Doxygen will generate a detailed section even if there is only a brief \r
+# description.\r
+\r
+ALWAYS_DETAILED_SEC    = NO\r
+\r
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all \r
+# inherited members of a class in the documentation of that class as if those \r
+# members were ordinary class members. Constructors, destructors and assignment \r
+# operators of the base classes will not be shown.\r
+\r
+INLINE_INHERITED_MEMB  = NO\r
+\r
+# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full \r
+# path before files name in the file list and in the header files. If set \r
+# to NO the shortest path that makes the file name unique will be used.\r
+\r
+FULL_PATH_NAMES        = YES\r
+\r
+# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag \r
+# can be used to strip a user-defined part of the path. Stripping is \r
+# only done if one of the specified strings matches the left-hand part of \r
+# the path. The tag can be used to show relative paths in the file list. \r
+# If left blank the directory from which doxygen is run is used as the \r
+# path to strip.\r
+\r
+STRIP_FROM_PATH        = \r
+\r
+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of \r
+# the path mentioned in the documentation of a class, which tells \r
+# the reader which header file to include in order to use a class. \r
+# If left blank only the name of the header file containing the class \r
+# definition is used. Otherwise one should specify the include paths that \r
+# are normally passed to the compiler using the -I flag.\r
+\r
+STRIP_FROM_INC_PATH    = \r
+\r
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter \r
+# (but less readable) file names. This can be useful is your file systems \r
+# doesn't support long names like on DOS, Mac, or CD-ROM.\r
+\r
+SHORT_NAMES            = YES\r
+\r
+# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen \r
+# will interpret the first line (until the first dot) of a JavaDoc-style \r
+# comment as the brief description. If set to NO, the JavaDoc \r
+# comments will behave just like regular Qt-style comments \r
+# (thus requiring an explicit @brief command for a brief description.)\r
+\r
+JAVADOC_AUTOBRIEF      = NO\r
+\r
+# If the QT_AUTOBRIEF tag is set to YES then Doxygen will \r
+# interpret the first line (until the first dot) of a Qt-style \r
+# comment as the brief description. If set to NO, the comments \r
+# will behave just like regular Qt-style comments (thus requiring \r
+# an explicit \brief command for a brief description.)\r
+\r
+QT_AUTOBRIEF           = NO\r
+\r
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen \r
+# treat a multi-line C++ special comment block (i.e. a block of //! or /// \r
+# comments) as a brief description. This used to be the default behaviour. \r
+# The new default is to treat a multi-line C++ comment block as a detailed \r
+# description. Set this tag to YES if you prefer the old behaviour instead.\r
+\r
+MULTILINE_CPP_IS_BRIEF = NO\r
+\r
+# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented \r
+# member inherits the documentation from any documented member that it \r
+# re-implements.\r
+\r
+INHERIT_DOCS           = YES\r
+\r
+# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce \r
+# a new page for each member. If set to NO, the documentation of a member will \r
+# be part of the file/class/namespace that contains it.\r
+\r
+SEPARATE_MEMBER_PAGES  = NO\r
+\r
+# The TAB_SIZE tag can be used to set the number of spaces in a tab. \r
+# Doxygen uses this value to replace tabs by spaces in code fragments.\r
+\r
+TAB_SIZE               = 4\r
+\r
+# This tag can be used to specify a number of aliases that acts \r
+# as commands in the documentation. An alias has the form "name=value". \r
+# For example adding "sideeffect=\par Side Effects:\n" will allow you to \r
+# put the command \sideeffect (or @sideeffect) in the documentation, which \r
+# will result in a user-defined paragraph with heading "Side Effects:". \r
+# You can put \n's in the value part of an alias to insert newlines.\r
+\r
+ALIASES                = \r
+\r
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C \r
+# sources only. Doxygen will then generate output that is more tailored for C. \r
+# For instance, some of the names that are used will be different. The list \r
+# of all members will be omitted, etc.\r
+\r
+OPTIMIZE_OUTPUT_FOR_C  = YES\r
+\r
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java \r
+# sources only. Doxygen will then generate output that is more tailored for \r
+# Java. For instance, namespaces will be presented as packages, qualified \r
+# scopes will look different, etc.\r
+\r
+OPTIMIZE_OUTPUT_JAVA   = NO\r
+\r
+# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran \r
+# sources only. Doxygen will then generate output that is more tailored for \r
+# Fortran.\r
+\r
+OPTIMIZE_FOR_FORTRAN   = NO\r
+\r
+# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL \r
+# sources. Doxygen will then generate output that is tailored for \r
+# VHDL.\r
+\r
+OPTIMIZE_OUTPUT_VHDL   = NO\r
+\r
+# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want \r
+# to include (a tag file for) the STL sources as input, then you should \r
+# set this tag to YES in order to let doxygen match functions declarations and \r
+# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. \r
+# func(std::string) {}). This also make the inheritance and collaboration \r
+# diagrams that involve STL classes more complete and accurate.\r
+\r
+BUILTIN_STL_SUPPORT    = NO\r
+\r
+# If you use Microsoft's C++/CLI language, you should set this option to YES to\r
+# enable parsing support.\r
+\r
+CPP_CLI_SUPPORT        = NO\r
+\r
+# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. \r
+# Doxygen will parse them like normal C++ but will assume all classes use public \r
+# instead of private inheritance when no explicit protection keyword is present.\r
+\r
+SIP_SUPPORT            = NO\r
+\r
+# For Microsoft's IDL there are propget and propput attributes to indicate getter \r
+# and setter methods for a property. Setting this option to YES (the default) \r
+# will make doxygen to replace the get and set methods by a property in the \r
+# documentation. This will only work if the methods are indeed getting or \r
+# setting a simple type. If this is not the case, or you want to show the \r
+# methods anyway, you should set this option to NO.\r
+\r
+IDL_PROPERTY_SUPPORT   = YES\r
+\r
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC \r
+# tag is set to YES, then doxygen will reuse the documentation of the first \r
+# member in the group (if any) for the other members of the group. By default \r
+# all members of a group must be documented explicitly.\r
+\r
+DISTRIBUTE_GROUP_DOC   = NO\r
+\r
+# Set the SUBGROUPING tag to YES (the default) to allow class member groups of \r
+# the same type (for instance a group of public functions) to be put as a \r
+# subgroup of that type (e.g. under the Public Functions section). Set it to \r
+# NO to prevent subgrouping. Alternatively, this can be done per class using \r
+# the \nosubgrouping command.\r
+\r
+SUBGROUPING            = YES\r
+\r
+# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum \r
+# is documented as struct, union, or enum with the name of the typedef. So \r
+# typedef struct TypeS {} TypeT, will appear in the documentation as a struct \r
+# with name TypeT. When disabled the typedef will appear as a member of a file, \r
+# namespace, or class. And the struct will be named TypeS. This can typically \r
+# be useful for C code in case the coding convention dictates that all compound \r
+# types are typedef'ed and only the typedef is referenced, never the tag name.\r
+\r
+TYPEDEF_HIDES_STRUCT   = NO\r
+\r
+# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to \r
+# determine which symbols to keep in memory and which to flush to disk.\r
+# When the cache is full, less often used symbols will be written to disk.\r
+# For small to medium size projects (<1000 input files) the default value is \r
+# probably good enough. For larger projects a too small cache size can cause \r
+# doxygen to be busy swapping symbols to and from disk most of the time \r
+# causing a significant performance penality. \r
+# If the system has enough physical memory increasing the cache will improve the \r
+# performance by keeping more symbols in memory. Note that the value works on \r
+# a logarithmic scale so increasing the size by one will rougly double the \r
+# memory usage. The cache size is given by this formula: \r
+# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, \r
+# corresponding to a cache size of 2^16 = 65536 symbols\r
+\r
+SYMBOL_CACHE_SIZE      = 0\r
+\r
+#---------------------------------------------------------------------------\r
+# Build related configuration options\r
+#---------------------------------------------------------------------------\r
+\r
+# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in \r
+# documentation are documented, even if no documentation was available. \r
+# Private class members and static file members will be hidden unless \r
+# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES\r
+\r
+EXTRACT_ALL            = YES\r
+\r
+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class \r
+# will be included in the documentation.\r
+\r
+EXTRACT_PRIVATE        = YES\r
+\r
+# If the EXTRACT_STATIC tag is set to YES all static members of a file \r
+# will be included in the documentation.\r
+\r
+EXTRACT_STATIC         = YES\r
+\r
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) \r
+# defined locally in source files will be included in the documentation. \r
+# If set to NO only classes defined in header files are included.\r
+\r
+EXTRACT_LOCAL_CLASSES  = YES\r
+\r
+# This flag is only useful for Objective-C code. When set to YES local \r
+# methods, which are defined in the implementation section but not in \r
+# the interface are included in the documentation. \r
+# If set to NO (the default) only methods in the interface are included.\r
+\r
+EXTRACT_LOCAL_METHODS  = NO\r
+\r
+# If this flag is set to YES, the members of anonymous namespaces will be \r
+# extracted and appear in the documentation as a namespace called \r
+# 'anonymous_namespace{file}', where file will be replaced with the base \r
+# name of the file that contains the anonymous namespace. By default \r
+# anonymous namespace are hidden.\r
+\r
+EXTRACT_ANON_NSPACES   = NO\r
+\r
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all \r
+# undocumented members of documented classes, files or namespaces. \r
+# If set to NO (the default) these members will be included in the \r
+# various overviews, but no documentation section is generated. \r
+# This option has no effect if EXTRACT_ALL is enabled.\r
+\r
+HIDE_UNDOC_MEMBERS     = NO\r
+\r
+# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all \r
+# undocumented classes that are normally visible in the class hierarchy. \r
+# If set to NO (the default) these classes will be included in the various \r
+# overviews. This option has no effect if EXTRACT_ALL is enabled.\r
+\r
+HIDE_UNDOC_CLASSES     = NO\r
+\r
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all \r
+# friend (class|struct|union) declarations. \r
+# If set to NO (the default) these declarations will be included in the \r
+# documentation.\r
+\r
+HIDE_FRIEND_COMPOUNDS  = NO\r
+\r
+# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any \r
+# documentation blocks found inside the body of a function. \r
+# If set to NO (the default) these blocks will be appended to the \r
+# function's detailed documentation block.\r
+\r
+HIDE_IN_BODY_DOCS      = NO\r
+\r
+# The INTERNAL_DOCS tag determines if documentation \r
+# that is typed after a \internal command is included. If the tag is set \r
+# to NO (the default) then the documentation will be excluded. \r
+# Set it to YES to include the internal documentation.\r
+\r
+INTERNAL_DOCS          = NO\r
+\r
+# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate \r
+# file names in lower-case letters. If set to YES upper-case letters are also \r
+# allowed. This is useful if you have classes or files whose names only differ \r
+# in case and if your file system supports case sensitive file names. Windows \r
+# and Mac users are advised to set this option to NO.\r
+\r
+CASE_SENSE_NAMES       = NO\r
+\r
+# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen \r
+# will show members with their full class and namespace scopes in the \r
+# documentation. If set to YES the scope will be hidden.\r
+\r
+HIDE_SCOPE_NAMES       = NO\r
+\r
+# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen \r
+# will put a list of the files that are included by a file in the documentation \r
+# of that file.\r
+\r
+SHOW_INCLUDE_FILES     = YES\r
+\r
+# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] \r
+# is inserted in the documentation for inline members.\r
+\r
+INLINE_INFO            = YES\r
+\r
+# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen \r
+# will sort the (detailed) documentation of file and class members \r
+# alphabetically by member name. If set to NO the members will appear in \r
+# declaration order.\r
+\r
+SORT_MEMBER_DOCS       = YES\r
+\r
+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the \r
+# brief documentation of file, namespace and class members alphabetically \r
+# by member name. If set to NO (the default) the members will appear in \r
+# declaration order.\r
+\r
+SORT_BRIEF_DOCS        = NO\r
+\r
+# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the \r
+# hierarchy of group names into alphabetical order. If set to NO (the default) \r
+# the group names will appear in their defined order.\r
+\r
+SORT_GROUP_NAMES       = NO\r
+\r
+# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be \r
+# sorted by fully-qualified names, including namespaces. If set to \r
+# NO (the default), the class list will be sorted only by class name, \r
+# not including the namespace part. \r
+# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.\r
+# Note: This option applies only to the class list, not to the \r
+# alphabetical list.\r
+\r
+SORT_BY_SCOPE_NAME     = NO\r
+\r
+# The GENERATE_TODOLIST tag can be used to enable (YES) or \r
+# disable (NO) the todo list. This list is created by putting \todo \r
+# commands in the documentation.\r
+\r
+GENERATE_TODOLIST      = NO\r
+\r
+# The GENERATE_TESTLIST tag can be used to enable (YES) or \r
+# disable (NO) the test list. This list is created by putting \test \r
+# commands in the documentation.\r
+\r
+GENERATE_TESTLIST      = NO\r
+\r
+# The GENERATE_BUGLIST tag can be used to enable (YES) or \r
+# disable (NO) the bug list. This list is created by putting \bug \r
+# commands in the documentation.\r
+\r
+GENERATE_BUGLIST       = NO\r
+\r
+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or \r
+# disable (NO) the deprecated list. This list is created by putting \r
+# \deprecated commands in the documentation.\r
+\r
+GENERATE_DEPRECATEDLIST= YES\r
+\r
+# The ENABLED_SECTIONS tag can be used to enable conditional \r
+# documentation sections, marked by \if sectionname ... \endif.\r
+\r
+ENABLED_SECTIONS       = \r
+\r
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines \r
+# the initial value of a variable or define consists of for it to appear in \r
+# the documentation. If the initializer consists of more lines than specified \r
+# here it will be hidden. Use a value of 0 to hide initializers completely. \r
+# The appearance of the initializer of individual variables and defines in the \r
+# documentation can be controlled using \showinitializer or \hideinitializer \r
+# command in the documentation regardless of this setting.\r
+\r
+MAX_INITIALIZER_LINES  = 30\r
+\r
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated \r
+# at the bottom of the documentation of classes and structs. If set to YES the \r
+# list will mention the files that were used to generate the documentation.\r
+\r
+SHOW_USED_FILES        = YES\r
+\r
+# If the sources in your project are distributed over multiple directories \r
+# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy \r
+# in the documentation. The default is NO.\r
+\r
+SHOW_DIRECTORIES       = YES\r
+\r
+# Set the SHOW_FILES tag to NO to disable the generation of the Files page.\r
+# This will remove the Files entry from the Quick Index and from the \r
+# Folder Tree View (if specified). The default is YES.\r
+\r
+SHOW_FILES             = YES\r
+\r
+# Set the SHOW_NAMESPACES tag to NO to disable the generation of the \r
+# Namespaces page.  This will remove the Namespaces entry from the Quick Index\r
+# and from the Folder Tree View (if specified). The default is YES.\r
+\r
+SHOW_NAMESPACES        = YES\r
+\r
+# The FILE_VERSION_FILTER tag can be used to specify a program or script that \r
+# doxygen should invoke to get the current version for each file (typically from \r
+# the version control system). Doxygen will invoke the program by executing (via \r
+# popen()) the command <command> <input-file>, where <command> is the value of \r
+# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file \r
+# provided by doxygen. Whatever the program writes to standard output \r
+# is used as the file version. See the manual for examples.\r
+\r
+FILE_VERSION_FILTER    = \r
+\r
+# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by \r
+# doxygen. The layout file controls the global structure of the generated output files \r
+# in an output format independent way. The create the layout file that represents \r
+# doxygen's defaults, run doxygen with the -l option. You can optionally specify a \r
+# file name after the option, if omitted DoxygenLayout.xml will be used as the name \r
+# of the layout file.\r
+\r
+LAYOUT_FILE            = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to warning and progress messages\r
+#---------------------------------------------------------------------------\r
+\r
+# The QUIET tag can be used to turn on/off the messages that are generated \r
+# by doxygen. Possible values are YES and NO. If left blank NO is used.\r
+\r
+QUIET                  = YES\r
+\r
+# The WARNINGS tag can be used to turn on/off the warning messages that are \r
+# generated by doxygen. Possible values are YES and NO. If left blank \r
+# NO is used.\r
+\r
+WARNINGS               = YES\r
+\r
+# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings \r
+# for undocumented members. If EXTRACT_ALL is set to YES then this flag will \r
+# automatically be disabled.\r
+\r
+WARN_IF_UNDOCUMENTED   = YES\r
+\r
+# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for \r
+# potential errors in the documentation, such as not documenting some \r
+# parameters in a documented function, or documenting parameters that \r
+# don't exist or using markup commands wrongly.\r
+\r
+WARN_IF_DOC_ERROR      = YES\r
+\r
+# This WARN_NO_PARAMDOC option can be abled to get warnings for \r
+# functions that are documented, but have no documentation for their parameters \r
+# or return value. If set to NO (the default) doxygen will only warn about \r
+# wrong or incomplete parameter documentation, but not about the absence of \r
+# documentation.\r
+\r
+WARN_NO_PARAMDOC       = YES\r
+\r
+# The WARN_FORMAT tag determines the format of the warning messages that \r
+# doxygen can produce. The string should contain the $file, $line, and $text \r
+# tags, which will be replaced by the file and line number from which the \r
+# warning originated and the warning text. Optionally the format may contain \r
+# $version, which will be replaced by the version of the file (if it could \r
+# be obtained via FILE_VERSION_FILTER)\r
+\r
+WARN_FORMAT            = "$file:$line: $text"\r
+\r
+# The WARN_LOGFILE tag can be used to specify a file to which warning \r
+# and error messages should be written. If left blank the output is written \r
+# to stderr.\r
+\r
+WARN_LOGFILE           = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the input files\r
+#---------------------------------------------------------------------------\r
+\r
+# The INPUT tag can be used to specify the files and/or directories that contain \r
+# documented source files. You may enter file names like "myfile.cpp" or \r
+# directories like "/usr/src/myproject". Separate the files or directories \r
+# with spaces.\r
+\r
+INPUT                  = ./\r
+\r
+# This tag can be used to specify the character encoding of the source files \r
+# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is \r
+# also the default input encoding. Doxygen uses libiconv (or the iconv built \r
+# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for \r
+# the list of possible encodings.\r
+\r
+INPUT_ENCODING         = UTF-8\r
+\r
+# If the value of the INPUT tag contains directories, you can use the \r
+# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \r
+# and *.h) to filter out the source-files in the directories. If left \r
+# blank the following patterns are tested: \r
+# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx \r
+# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90\r
+\r
+FILE_PATTERNS          = *.h \\r
+                         *.c \\r
+                                                *.txt\r
+\r
+# The RECURSIVE tag can be used to turn specify whether or not subdirectories \r
+# should be searched for input files as well. Possible values are YES and NO. \r
+# If left blank NO is used.\r
+\r
+RECURSIVE              = YES\r
+\r
+# The EXCLUDE tag can be used to specify files and/or directories that should \r
+# excluded from the INPUT source files. This way you can easily exclude a \r
+# subdirectory from a directory tree whose root is specified with the INPUT tag.\r
+\r
+EXCLUDE                = \r
+\r
+# The EXCLUDE_SYMLINKS tag can be used select whether or not files or \r
+# directories that are symbolic links (a Unix filesystem feature) are excluded \r
+# from the input.\r
+\r
+EXCLUDE_SYMLINKS       = NO\r
+\r
+# If the value of the INPUT tag contains directories, you can use the \r
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude \r
+# certain files from those directories. Note that the wildcards are matched \r
+# against the file with absolute path, so to exclude all test directories \r
+# for example use the pattern */test/*\r
+\r
+EXCLUDE_PATTERNS       = */LowLevel/USBMode.h\r
+\r
+# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names \r
+# (namespaces, classes, functions, etc.) that should be excluded from the \r
+# output. The symbol name can be a fully qualified name, a word, or if the \r
+# wildcard * is used, a substring. Examples: ANamespace, AClass, \r
+# AClass::ANamespace, ANamespace::*Test\r
+\r
+EXCLUDE_SYMBOLS        = __*\r
+\r
+# The EXAMPLE_PATH tag can be used to specify one or more files or \r
+# directories that contain example code fragments that are included (see \r
+# the \include command).\r
+\r
+EXAMPLE_PATH           = \r
+\r
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the \r
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \r
+# and *.h) to filter out the source-files in the directories. If left \r
+# blank all files are included.\r
+\r
+EXAMPLE_PATTERNS       = *\r
+\r
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be \r
+# searched for input files to be used with the \include or \dontinclude \r
+# commands irrespective of the value of the RECURSIVE tag. \r
+# Possible values are YES and NO. If left blank NO is used.\r
+\r
+EXAMPLE_RECURSIVE      = NO\r
+\r
+# The IMAGE_PATH tag can be used to specify one or more files or \r
+# directories that contain image that are included in the documentation (see \r
+# the \image command).\r
+\r
+IMAGE_PATH             = \r
+\r
+# The INPUT_FILTER tag can be used to specify a program that doxygen should \r
+# invoke to filter for each input file. Doxygen will invoke the filter program \r
+# by executing (via popen()) the command <filter> <input-file>, where <filter> \r
+# is the value of the INPUT_FILTER tag, and <input-file> is the name of an \r
+# input file. Doxygen will then use the output that the filter program writes \r
+# to standard output.  If FILTER_PATTERNS is specified, this tag will be \r
+# ignored.\r
+\r
+INPUT_FILTER           = \r
+\r
+# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern \r
+# basis.  Doxygen will compare the file name with each pattern and apply the \r
+# filter if there is a match.  The filters are a list of the form: \r
+# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further \r
+# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER \r
+# is applied to all files.\r
+\r
+FILTER_PATTERNS        = \r
+\r
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using \r
+# INPUT_FILTER) will be used to filter the input files when producing source \r
+# files to browse (i.e. when SOURCE_BROWSER is set to YES).\r
+\r
+FILTER_SOURCE_FILES    = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to source browsing\r
+#---------------------------------------------------------------------------\r
+\r
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will \r
+# be generated. Documented entities will be cross-referenced with these sources. \r
+# Note: To get rid of all source code in the generated output, make sure also \r
+# VERBATIM_HEADERS is set to NO.\r
+\r
+SOURCE_BROWSER         = NO\r
+\r
+# Setting the INLINE_SOURCES tag to YES will include the body \r
+# of functions and classes directly in the documentation.\r
+\r
+INLINE_SOURCES         = NO\r
+\r
+# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct \r
+# doxygen to hide any special comment blocks from generated source code \r
+# fragments. Normal C and C++ comments will always remain visible.\r
+\r
+STRIP_CODE_COMMENTS    = YES\r
+\r
+# If the REFERENCED_BY_RELATION tag is set to YES \r
+# then for each documented function all documented \r
+# functions referencing it will be listed.\r
+\r
+REFERENCED_BY_RELATION = NO\r
+\r
+# If the REFERENCES_RELATION tag is set to YES \r
+# then for each documented function all documented entities \r
+# called/used by that function will be listed.\r
+\r
+REFERENCES_RELATION    = NO\r
+\r
+# If the REFERENCES_LINK_SOURCE tag is set to YES (the default)\r
+# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from\r
+# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will\r
+# link to the source code.  Otherwise they will link to the documentstion.\r
+\r
+REFERENCES_LINK_SOURCE = NO\r
+\r
+# If the USE_HTAGS tag is set to YES then the references to source code \r
+# will point to the HTML generated by the htags(1) tool instead of doxygen \r
+# built-in source browser. The htags tool is part of GNU's global source \r
+# tagging system (see http://www.gnu.org/software/global/global.html). You \r
+# will need version 4.8.6 or higher.\r
+\r
+USE_HTAGS              = NO\r
+\r
+# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen \r
+# will generate a verbatim copy of the header file for each class for \r
+# which an include is specified. Set to NO to disable this.\r
+\r
+VERBATIM_HEADERS       = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the alphabetical class index\r
+#---------------------------------------------------------------------------\r
+\r
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index \r
+# of all compounds will be generated. Enable this if the project \r
+# contains a lot of classes, structs, unions or interfaces.\r
+\r
+ALPHABETICAL_INDEX     = YES\r
+\r
+# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then \r
+# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns \r
+# in which this list will be split (can be a number in the range [1..20])\r
+\r
+COLS_IN_ALPHA_INDEX    = 5\r
+\r
+# In case all classes in a project start with a common prefix, all \r
+# classes will be put under the same header in the alphabetical index. \r
+# The IGNORE_PREFIX tag can be used to specify one or more prefixes that \r
+# should be ignored while generating the index headers.\r
+\r
+IGNORE_PREFIX          = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the HTML output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_HTML tag is set to YES (the default) Doxygen will \r
+# generate HTML output.\r
+\r
+GENERATE_HTML          = YES\r
+\r
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `html' will be used as the default path.\r
+\r
+HTML_OUTPUT            = html\r
+\r
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for \r
+# each generated HTML page (for example: .htm,.php,.asp). If it is left blank \r
+# doxygen will generate files with .html extension.\r
+\r
+HTML_FILE_EXTENSION    = .html\r
+\r
+# The HTML_HEADER tag can be used to specify a personal HTML header for \r
+# each generated HTML page. If it is left blank doxygen will generate a \r
+# standard header.\r
+\r
+HTML_HEADER            = \r
+\r
+# The HTML_FOOTER tag can be used to specify a personal HTML footer for \r
+# each generated HTML page. If it is left blank doxygen will generate a \r
+# standard footer.\r
+\r
+HTML_FOOTER            = \r
+\r
+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading \r
+# style sheet that is used by each HTML page. It can be used to \r
+# fine-tune the look of the HTML output. If the tag is left blank doxygen \r
+# will generate a default style sheet. Note that doxygen will try to copy \r
+# the style sheet file to the HTML output directory, so don't put your own \r
+# stylesheet in the HTML output directory as well, or it will be erased!\r
+\r
+HTML_STYLESHEET        = \r
+\r
+# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, \r
+# files or namespaces will be aligned in HTML using tables. If set to \r
+# NO a bullet list will be used.\r
+\r
+HTML_ALIGN_MEMBERS     = YES\r
+\r
+# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML \r
+# documentation will contain sections that can be hidden and shown after the \r
+# page has loaded. For this to work a browser that supports \r
+# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox \r
+# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari).\r
+\r
+HTML_DYNAMIC_SECTIONS  = YES\r
+\r
+# If the GENERATE_DOCSET tag is set to YES, additional index files \r
+# will be generated that can be used as input for Apple's Xcode 3 \r
+# integrated development environment, introduced with OSX 10.5 (Leopard). \r
+# To create a documentation set, doxygen will generate a Makefile in the \r
+# HTML output directory. Running make will produce the docset in that \r
+# directory and running "make install" will install the docset in \r
+# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find \r
+# it at startup. \r
+# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information.\r
+\r
+GENERATE_DOCSET        = NO\r
+\r
+# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the \r
+# feed. A documentation feed provides an umbrella under which multiple \r
+# documentation sets from a single provider (such as a company or product suite) \r
+# can be grouped.\r
+\r
+DOCSET_FEEDNAME        = "Doxygen generated docs"\r
+\r
+# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that \r
+# should uniquely identify the documentation set bundle. This should be a \r
+# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen \r
+# will append .docset to the name.\r
+\r
+DOCSET_BUNDLE_ID       = org.doxygen.Project\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, additional index files \r
+# will be generated that can be used as input for tools like the \r
+# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) \r
+# of the generated HTML documentation.\r
+\r
+GENERATE_HTMLHELP      = NO\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can \r
+# be used to specify the file name of the resulting .chm file. You \r
+# can add a path in front of the file if the result should not be \r
+# written to the html output directory.\r
+\r
+CHM_FILE               = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can \r
+# be used to specify the location (absolute path including file name) of \r
+# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run \r
+# the HTML help compiler on the generated index.hhp.\r
+\r
+HHC_LOCATION           = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag \r
+# controls if a separate .chi index file is generated (YES) or that \r
+# it should be included in the master .chm file (NO).\r
+\r
+GENERATE_CHI           = NO\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING\r
+# is used to encode HtmlHelp index (hhk), content (hhc) and project file\r
+# content.\r
+\r
+CHM_INDEX_ENCODING     = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag \r
+# controls whether a binary table of contents is generated (YES) or a \r
+# normal table of contents (NO) in the .chm file.\r
+\r
+BINARY_TOC             = NO\r
+\r
+# The TOC_EXPAND flag can be set to YES to add extra items for group members \r
+# to the contents of the HTML help documentation and to the tree view.\r
+\r
+TOC_EXPAND             = YES\r
+\r
+# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER \r
+# are set, an additional index file will be generated that can be used as input for \r
+# Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated \r
+# HTML documentation.\r
+\r
+GENERATE_QHP           = NO\r
+\r
+# If the QHG_LOCATION tag is specified, the QCH_FILE tag can \r
+# be used to specify the file name of the resulting .qch file. \r
+# The path specified is relative to the HTML output folder.\r
+\r
+QCH_FILE               = \r
+\r
+# The QHP_NAMESPACE tag specifies the namespace to use when generating \r
+# Qt Help Project output. For more information please see \r
+# <a href="http://doc.trolltech.com/qthelpproject.html#namespace">Qt Help Project / Namespace</a>.\r
+\r
+QHP_NAMESPACE          = org.doxygen.Project\r
+\r
+# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating \r
+# Qt Help Project output. For more information please see \r
+# <a href="http://doc.trolltech.com/qthelpproject.html#virtual-folders">Qt Help Project / Virtual Folders</a>.\r
+\r
+QHP_VIRTUAL_FOLDER     = doc\r
+\r
+# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can \r
+# be used to specify the location of Qt's qhelpgenerator. \r
+# If non-empty doxygen will try to run qhelpgenerator on the generated \r
+# .qhp file .\r
+\r
+QHG_LOCATION           = \r
+\r
+# The DISABLE_INDEX tag can be used to turn on/off the condensed index at \r
+# top of each HTML page. The value NO (the default) enables the index and \r
+# the value YES disables it.\r
+\r
+DISABLE_INDEX          = NO\r
+\r
+# This tag can be used to set the number of enum values (range [1..20]) \r
+# that doxygen will group on one line in the generated HTML documentation.\r
+\r
+ENUM_VALUES_PER_LINE   = 1\r
+\r
+# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index\r
+# structure should be generated to display hierarchical information.\r
+# If the tag value is set to FRAME, a side panel will be generated\r
+# containing a tree-like index structure (just like the one that \r
+# is generated for HTML Help). For this to work a browser that supports \r
+# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, \r
+# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are \r
+# probably better off using the HTML help feature. Other possible values \r
+# for this tag are: HIERARCHIES, which will generate the Groups, Directories,\r
+# and Class Hierarchy pages using a tree view instead of an ordered list;\r
+# ALL, which combines the behavior of FRAME and HIERARCHIES; and NONE, which\r
+# disables this behavior completely. For backwards compatibility with previous\r
+# releases of Doxygen, the values YES and NO are equivalent to FRAME and NONE\r
+# respectively.\r
+\r
+GENERATE_TREEVIEW      = YES\r
+\r
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be \r
+# used to set the initial width (in pixels) of the frame in which the tree \r
+# is shown.\r
+\r
+TREEVIEW_WIDTH         = 250\r
+\r
+# Use this tag to change the font size of Latex formulas included \r
+# as images in the HTML documentation. The default is 10. Note that \r
+# when you change the font size after a successful doxygen run you need \r
+# to manually remove any form_*.png images from the HTML output directory \r
+# to force them to be regenerated.\r
+\r
+FORMULA_FONTSIZE       = 10\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the LaTeX output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will \r
+# generate Latex output.\r
+\r
+GENERATE_LATEX         = NO\r
+\r
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `latex' will be used as the default path.\r
+\r
+LATEX_OUTPUT           = latex\r
+\r
+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be \r
+# invoked. If left blank `latex' will be used as the default command name.\r
+\r
+LATEX_CMD_NAME         = latex\r
+\r
+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to \r
+# generate index for LaTeX. If left blank `makeindex' will be used as the \r
+# default command name.\r
+\r
+MAKEINDEX_CMD_NAME     = makeindex\r
+\r
+# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact \r
+# LaTeX documents. This may be useful for small projects and may help to \r
+# save some trees in general.\r
+\r
+COMPACT_LATEX          = NO\r
+\r
+# The PAPER_TYPE tag can be used to set the paper type that is used \r
+# by the printer. Possible values are: a4, a4wide, letter, legal and \r
+# executive. If left blank a4wide will be used.\r
+\r
+PAPER_TYPE             = a4wide\r
+\r
+# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX \r
+# packages that should be included in the LaTeX output.\r
+\r
+EXTRA_PACKAGES         = \r
+\r
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for \r
+# the generated latex document. The header should contain everything until \r
+# the first chapter. If it is left blank doxygen will generate a \r
+# standard header. Notice: only use this tag if you know what you are doing!\r
+\r
+LATEX_HEADER           = \r
+\r
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated \r
+# is prepared for conversion to pdf (using ps2pdf). The pdf file will \r
+# contain links (just like the HTML output) instead of page references \r
+# This makes the output suitable for online browsing using a pdf viewer.\r
+\r
+PDF_HYPERLINKS         = YES\r
+\r
+# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of \r
+# plain latex in the generated Makefile. Set this option to YES to get a \r
+# higher quality PDF documentation.\r
+\r
+USE_PDFLATEX           = YES\r
+\r
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. \r
+# command to the generated LaTeX files. This will instruct LaTeX to keep \r
+# running if errors occur, instead of asking the user for help. \r
+# This option is also used when generating formulas in HTML.\r
+\r
+LATEX_BATCHMODE        = NO\r
+\r
+# If LATEX_HIDE_INDICES is set to YES then doxygen will not \r
+# include the index chapters (such as File Index, Compound Index, etc.) \r
+# in the output.\r
+\r
+LATEX_HIDE_INDICES     = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the RTF output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output \r
+# The RTF output is optimized for Word 97 and may not look very pretty with \r
+# other RTF readers or editors.\r
+\r
+GENERATE_RTF           = NO\r
+\r
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `rtf' will be used as the default path.\r
+\r
+RTF_OUTPUT             = rtf\r
+\r
+# If the COMPACT_RTF tag is set to YES Doxygen generates more compact \r
+# RTF documents. This may be useful for small projects and may help to \r
+# save some trees in general.\r
+\r
+COMPACT_RTF            = NO\r
+\r
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated \r
+# will contain hyperlink fields. The RTF file will \r
+# contain links (just like the HTML output) instead of page references. \r
+# This makes the output suitable for online browsing using WORD or other \r
+# programs which support those fields. \r
+# Note: wordpad (write) and others do not support links.\r
+\r
+RTF_HYPERLINKS         = NO\r
+\r
+# Load stylesheet definitions from file. Syntax is similar to doxygen's \r
+# config file, i.e. a series of assignments. You only have to provide \r
+# replacements, missing definitions are set to their default value.\r
+\r
+RTF_STYLESHEET_FILE    = \r
+\r
+# Set optional variables used in the generation of an rtf document. \r
+# Syntax is similar to doxygen's config file.\r
+\r
+RTF_EXTENSIONS_FILE    = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the man page output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_MAN tag is set to YES (the default) Doxygen will \r
+# generate man pages\r
+\r
+GENERATE_MAN           = NO\r
+\r
+# The MAN_OUTPUT tag is used to specify where the man pages will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `man' will be used as the default path.\r
+\r
+MAN_OUTPUT             = man\r
+\r
+# The MAN_EXTENSION tag determines the extension that is added to \r
+# the generated man pages (default is the subroutine's section .3)\r
+\r
+MAN_EXTENSION          = .3\r
+\r
+# If the MAN_LINKS tag is set to YES and Doxygen generates man output, \r
+# then it will generate one additional man file for each entity \r
+# documented in the real man page(s). These additional files \r
+# only source the real man page, but without them the man command \r
+# would be unable to find the correct page. The default is NO.\r
+\r
+MAN_LINKS              = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the XML output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_XML tag is set to YES Doxygen will \r
+# generate an XML file that captures the structure of \r
+# the code including all documentation.\r
+\r
+GENERATE_XML           = NO\r
+\r
+# The XML_OUTPUT tag is used to specify where the XML pages will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `xml' will be used as the default path.\r
+\r
+XML_OUTPUT             = xml\r
+\r
+# The XML_SCHEMA tag can be used to specify an XML schema, \r
+# which can be used by a validating XML parser to check the \r
+# syntax of the XML files.\r
+\r
+XML_SCHEMA             = \r
+\r
+# The XML_DTD tag can be used to specify an XML DTD, \r
+# which can be used by a validating XML parser to check the \r
+# syntax of the XML files.\r
+\r
+XML_DTD                = \r
+\r
+# If the XML_PROGRAMLISTING tag is set to YES Doxygen will \r
+# dump the program listings (including syntax highlighting \r
+# and cross-referencing information) to the XML output. Note that \r
+# enabling this will significantly increase the size of the XML output.\r
+\r
+XML_PROGRAMLISTING     = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options for the AutoGen Definitions output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will \r
+# generate an AutoGen Definitions (see autogen.sf.net) file \r
+# that captures the structure of the code including all \r
+# documentation. Note that this feature is still experimental \r
+# and incomplete at the moment.\r
+\r
+GENERATE_AUTOGEN_DEF   = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the Perl module output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_PERLMOD tag is set to YES Doxygen will \r
+# generate a Perl module file that captures the structure of \r
+# the code including all documentation. Note that this \r
+# feature is still experimental and incomplete at the \r
+# moment.\r
+\r
+GENERATE_PERLMOD       = NO\r
+\r
+# If the PERLMOD_LATEX tag is set to YES Doxygen will generate \r
+# the necessary Makefile rules, Perl scripts and LaTeX code to be able \r
+# to generate PDF and DVI output from the Perl module output.\r
+\r
+PERLMOD_LATEX          = NO\r
+\r
+# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be \r
+# nicely formatted so it can be parsed by a human reader.  This is useful \r
+# if you want to understand what is going on.  On the other hand, if this \r
+# tag is set to NO the size of the Perl module output will be much smaller \r
+# and Perl will parse it just the same.\r
+\r
+PERLMOD_PRETTY         = YES\r
+\r
+# The names of the make variables in the generated doxyrules.make file \r
+# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. \r
+# This is useful so different doxyrules.make files included by the same \r
+# Makefile don't overwrite each other's variables.\r
+\r
+PERLMOD_MAKEVAR_PREFIX = \r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration options related to the preprocessor   \r
+#---------------------------------------------------------------------------\r
+\r
+# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will \r
+# evaluate all C-preprocessor directives found in the sources and include \r
+# files.\r
+\r
+ENABLE_PREPROCESSING   = YES\r
+\r
+# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro \r
+# names in the source code. If set to NO (the default) only conditional \r
+# compilation will be performed. Macro expansion can be done in a controlled \r
+# way by setting EXPAND_ONLY_PREDEF to YES.\r
+\r
+MACRO_EXPANSION        = YES\r
+\r
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES \r
+# then the macro expansion is limited to the macros specified with the \r
+# PREDEFINED and EXPAND_AS_DEFINED tags.\r
+\r
+EXPAND_ONLY_PREDEF     = YES\r
+\r
+# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files \r
+# in the INCLUDE_PATH (see below) will be search if a #include is found.\r
+\r
+SEARCH_INCLUDES        = YES\r
+\r
+# The INCLUDE_PATH tag can be used to specify one or more directories that \r
+# contain include files that are not input files but should be processed by \r
+# the preprocessor.\r
+\r
+INCLUDE_PATH           = \r
+\r
+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard \r
+# patterns (like *.h and *.hpp) to filter out the header-files in the \r
+# directories. If left blank, the patterns specified with FILE_PATTERNS will \r
+# be used.\r
+\r
+INCLUDE_FILE_PATTERNS  = \r
+\r
+# The PREDEFINED tag can be used to specify one or more macro names that \r
+# are defined before the preprocessor is started (similar to the -D option of \r
+# gcc). The argument of the tag is a list of macros of the form: name \r
+# or name=definition (no spaces). If the definition and the = are \r
+# omitted =1 is assumed. To prevent a macro definition from being \r
+# undefined via #undef or recursively expanded use the := operator \r
+# instead of the = operator.\r
+\r
+PREDEFINED             = __DOXYGEN__\r
+\r
+# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then \r
+# this tag can be used to specify a list of macro names that should be expanded. \r
+# The macro definition that is found in the sources will be used. \r
+# Use the PREDEFINED tag if you want to use a different macro definition.\r
+\r
+EXPAND_AS_DEFINED      = BUTTLOADTAG\r
+\r
+# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then \r
+# doxygen's preprocessor will remove all function-like macros that are alone \r
+# on a line, have an all uppercase name, and do not end with a semicolon. Such \r
+# function macros are typically used for boiler-plate code, and will confuse \r
+# the parser if not removed.\r
+\r
+SKIP_FUNCTION_MACROS   = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration::additions related to external references   \r
+#---------------------------------------------------------------------------\r
+\r
+# The TAGFILES option can be used to specify one or more tagfiles. \r
+# Optionally an initial location of the external documentation \r
+# can be added for each tagfile. The format of a tag file without \r
+# this location is as follows: \r
+#   TAGFILES = file1 file2 ... \r
+# Adding location for the tag files is done as follows: \r
+#   TAGFILES = file1=loc1 "file2 = loc2" ... \r
+# where "loc1" and "loc2" can be relative or absolute paths or \r
+# URLs. If a location is present for each tag, the installdox tool \r
+# does not have to be run to correct the links.\r
+# Note that each tag file must have a unique name\r
+# (where the name does NOT include the path)\r
+# If a tag file is not located in the directory in which doxygen \r
+# is run, you must also specify the path to the tagfile here.\r
+\r
+TAGFILES               = \r
+\r
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create \r
+# a tag file that is based on the input files it reads.\r
+\r
+GENERATE_TAGFILE       = \r
+\r
+# If the ALLEXTERNALS tag is set to YES all external classes will be listed \r
+# in the class index. If set to NO only the inherited external classes \r
+# will be listed.\r
+\r
+ALLEXTERNALS           = NO\r
+\r
+# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed \r
+# in the modules index. If set to NO, only the current project's groups will \r
+# be listed.\r
+\r
+EXTERNAL_GROUPS        = YES\r
+\r
+# The PERL_PATH should be the absolute path and name of the perl script \r
+# interpreter (i.e. the result of `which perl').\r
+\r
+PERL_PATH              = /usr/bin/perl\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration options related to the dot tool   \r
+#---------------------------------------------------------------------------\r
+\r
+# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will \r
+# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base \r
+# or super classes. Setting the tag to NO turns the diagrams off. Note that \r
+# this option is superseded by the HAVE_DOT option below. This is only a \r
+# fallback. It is recommended to install and use dot, since it yields more \r
+# powerful graphs.\r
+\r
+CLASS_DIAGRAMS         = NO\r
+\r
+# You can define message sequence charts within doxygen comments using the \msc \r
+# command. Doxygen will then run the mscgen tool (see \r
+# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the \r
+# documentation. The MSCGEN_PATH tag allows you to specify the directory where \r
+# the mscgen tool resides. If left empty the tool is assumed to be found in the \r
+# default search path.\r
+\r
+MSCGEN_PATH            = \r
+\r
+# If set to YES, the inheritance and collaboration graphs will hide \r
+# inheritance and usage relations if the target is undocumented \r
+# or is not a class.\r
+\r
+HIDE_UNDOC_RELATIONS   = YES\r
+\r
+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is \r
+# available from the path. This tool is part of Graphviz, a graph visualization \r
+# toolkit from AT&T and Lucent Bell Labs. The other options in this section \r
+# have no effect if this option is set to NO (the default)\r
+\r
+HAVE_DOT               = NO\r
+\r
+# By default doxygen will write a font called FreeSans.ttf to the output \r
+# directory and reference it in all dot files that doxygen generates. This \r
+# font does not include all possible unicode characters however, so when you need \r
+# these (or just want a differently looking font) you can specify the font name \r
+# using DOT_FONTNAME. You need need to make sure dot is able to find the font, \r
+# which can be done by putting it in a standard location or by setting the \r
+# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory \r
+# containing the font.\r
+\r
+DOT_FONTNAME           = FreeSans\r
+\r
+# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. \r
+# The default size is 10pt.\r
+\r
+DOT_FONTSIZE           = 10\r
+\r
+# By default doxygen will tell dot to use the output directory to look for the \r
+# FreeSans.ttf font (which doxygen will put there itself). If you specify a \r
+# different font using DOT_FONTNAME you can set the path where dot \r
+# can find it using this tag.\r
+\r
+DOT_FONTPATH           = \r
+\r
+# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for each documented class showing the direct and \r
+# indirect inheritance relations. Setting this tag to YES will force the \r
+# the CLASS_DIAGRAMS tag to NO.\r
+\r
+CLASS_GRAPH            = NO\r
+\r
+# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for each documented class showing the direct and \r
+# indirect implementation dependencies (inheritance, containment, and \r
+# class references variables) of the class with other documented classes.\r
+\r
+COLLABORATION_GRAPH    = NO\r
+\r
+# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for groups, showing the direct groups dependencies\r
+\r
+GROUP_GRAPHS           = NO\r
+\r
+# If the UML_LOOK tag is set to YES doxygen will generate inheritance and \r
+# collaboration diagrams in a style similar to the OMG's Unified Modeling \r
+# Language.\r
+\r
+UML_LOOK               = NO\r
+\r
+# If set to YES, the inheritance and collaboration graphs will show the \r
+# relations between templates and their instances.\r
+\r
+TEMPLATE_RELATIONS     = NO\r
+\r
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT \r
+# tags are set to YES then doxygen will generate a graph for each documented \r
+# file showing the direct and indirect include dependencies of the file with \r
+# other documented files.\r
+\r
+INCLUDE_GRAPH          = NO\r
+\r
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and \r
+# HAVE_DOT tags are set to YES then doxygen will generate a graph for each \r
+# documented header file showing the documented files that directly or \r
+# indirectly include this file.\r
+\r
+INCLUDED_BY_GRAPH      = NO\r
+\r
+# If the CALL_GRAPH and HAVE_DOT options are set to YES then \r
+# doxygen will generate a call dependency graph for every global function \r
+# or class method. Note that enabling this option will significantly increase \r
+# the time of a run. So in most cases it will be better to enable call graphs \r
+# for selected functions only using the \callgraph command.\r
+\r
+CALL_GRAPH             = NO\r
+\r
+# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then \r
+# doxygen will generate a caller dependency graph for every global function \r
+# or class method. Note that enabling this option will significantly increase \r
+# the time of a run. So in most cases it will be better to enable caller \r
+# graphs for selected functions only using the \callergraph command.\r
+\r
+CALLER_GRAPH           = NO\r
+\r
+# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen \r
+# will graphical hierarchy of all classes instead of a textual one.\r
+\r
+GRAPHICAL_HIERARCHY    = NO\r
+\r
+# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES \r
+# then doxygen will show the dependencies a directory has on other directories \r
+# in a graphical way. The dependency relations are determined by the #include\r
+# relations between the files in the directories.\r
+\r
+DIRECTORY_GRAPH        = NO\r
+\r
+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images \r
+# generated by dot. Possible values are png, jpg, or gif\r
+# If left blank png will be used.\r
+\r
+DOT_IMAGE_FORMAT       = png\r
+\r
+# The tag DOT_PATH can be used to specify the path where the dot tool can be \r
+# found. If left blank, it is assumed the dot tool can be found in the path.\r
+\r
+DOT_PATH               = "C:/Program Files/Graphviz2.18/bin"\r
+\r
+# The DOTFILE_DIRS tag can be used to specify one or more directories that \r
+# contain dot files that are included in the documentation (see the \r
+# \dotfile command).\r
+\r
+DOTFILE_DIRS           = \r
+\r
+# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of \r
+# nodes that will be shown in the graph. If the number of nodes in a graph \r
+# becomes larger than this value, doxygen will truncate the graph, which is \r
+# visualized by representing a node as a red box. Note that doxygen if the \r
+# number of direct children of the root node in a graph is already larger than \r
+# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note \r
+# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.\r
+\r
+DOT_GRAPH_MAX_NODES    = 15\r
+\r
+# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the \r
+# graphs generated by dot. A depth value of 3 means that only nodes reachable \r
+# from the root by following a path via at most 3 edges will be shown. Nodes \r
+# that lay further from the root node will be omitted. Note that setting this \r
+# option to 1 or 2 may greatly reduce the computation time needed for large \r
+# code bases. Also note that the size of a graph can be further restricted by \r
+# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.\r
+\r
+MAX_DOT_GRAPH_DEPTH    = 2\r
+\r
+# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent \r
+# background. This is disabled by default, because dot on Windows does not \r
+# seem to support this out of the box. Warning: Depending on the platform used, \r
+# enabling this option may lead to badly anti-aliased labels on the edges of \r
+# a graph (i.e. they become hard to read).\r
+\r
+DOT_TRANSPARENT        = YES\r
+\r
+# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output \r
+# files in one run (i.e. multiple -o and -T options on the command line). This \r
+# makes dot run faster, but since only newer versions of dot (>1.8.10) \r
+# support this, this feature is disabled by default.\r
+\r
+DOT_MULTI_TARGETS      = NO\r
+\r
+# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will \r
+# generate a legend page explaining the meaning of the various boxes and \r
+# arrows in the dot generated graphs.\r
+\r
+GENERATE_LEGEND        = YES\r
+\r
+# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will \r
+# remove the intermediate dot files that are used to generate \r
+# the various graphs.\r
+\r
+DOT_CLEANUP            = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration::additions related to the search engine   \r
+#---------------------------------------------------------------------------\r
+\r
+# The SEARCHENGINE tag specifies whether or not a search engine should be \r
+# used. If set to NO the values of all tags below this one will be ignored.\r
+\r
+SEARCHENGINE           = NO\r
diff --git a/Demos/Device/ClassDriver/DualCDC/DualCDC.aps b/Demos/Device/ClassDriver/DualCDC/DualCDC.aps
new file mode 100644 (file)
index 0000000..276e743
--- /dev/null
@@ -0,0 +1 @@
+<AVRStudio><MANAGEMENT><ProjectName>DualCDC</ProjectName><Created>30-Sep-2008 14:06:03</Created><LastEdit>30-Sep-2008 14:06:18</LastEdit><ICON>241</ICON><ProjectType>0</ProjectType><Created>30-Sep-2008 14:06:03</Created><Version>4</Version><Build>4, 14, 0, 589</Build><ProjectTypeName>AVR GCC</ProjectTypeName></MANAGEMENT><CODE_CREATION><ObjectFile></ObjectFile><EntryFile></EntryFile><SaveFolder>C:\Users\Dean\Documents\Electronics\Projects\WORK\MyUSBWORK\Demos\DualCDC\</SaveFolder></CODE_CREATION><DEBUG_TARGET><CURRENT_TARGET></CURRENT_TARGET><CURRENT_PART></CURRENT_PART><BREAKPOINTS></BREAKPOINTS><IO_EXPAND><HIDE>false</HIDE></IO_EXPAND><REGISTERNAMES><Register>R00</Register><Register>R01</Register><Register>R02</Register><Register>R03</Register><Register>R04</Register><Register>R05</Register><Register>R06</Register><Register>R07</Register><Register>R08</Register><Register>R09</Register><Register>R10</Register><Register>R11</Register><Register>R12</Register><Register>R13</Register><Register>R14</Register><Register>R15</Register><Register>R16</Register><Register>R17</Register><Register>R18</Register><Register>R19</Register><Register>R20</Register><Register>R21</Register><Register>R22</Register><Register>R23</Register><Register>R24</Register><Register>R25</Register><Register>R26</Register><Register>R27</Register><Register>R28</Register><Register>R29</Register><Register>R30</Register><Register>R31</Register></REGISTERNAMES><COM>Auto</COM><COMType>0</COMType><WATCHNUM>0</WATCHNUM><WATCHNAMES><Pane0></Pane0><Pane1></Pane1><Pane2></Pane2><Pane3></Pane3></WATCHNAMES><BreakOnTrcaeFull>0</BreakOnTrcaeFull></DEBUG_TARGET><Debugger><Triggers></Triggers></Debugger><AVRGCCPLUGIN><FILES><SOURCEFILE>Descriptors.c</SOURCEFILE><SOURCEFILE>DualCDC.c</SOURCEFILE><HEADERFILE>Descriptors.h</HEADERFILE><HEADERFILE>DualCDC.h</HEADERFILE><OTHERFILE>makefile</OTHERFILE></FILES><CONFIGS><CONFIG><NAME>default</NAME><USESEXTERNALMAKEFILE>YES</USESEXTERNALMAKEFILE><EXTERNALMAKEFILE>makefile</EXTERNALMAKEFILE><PART>atmega128</PART><HEX>1</HEX><LIST>1</LIST><MAP>1</MAP><OUTPUTFILENAME>DualCDC.elf</OUTPUTFILENAME><OUTPUTDIR>default\</OUTPUTDIR><ISDIRTY>1</ISDIRTY><OPTIONS/><INCDIRS/><LIBDIRS/><LIBS/><LINKOBJECTS/><OPTIONSFORALL>-Wall -gdwarf-2 -std=gnu99 -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums</OPTIONSFORALL><LINKEROPTIONS></LINKEROPTIONS><SEGMENTS/></CONFIG></CONFIGS><LASTCONFIG>default</LASTCONFIG><USES_WINAVR>1</USES_WINAVR><GCC_LOC>C:\WinAVR-20080512\bin\avr-gcc.exe</GCC_LOC><MAKE_LOC>C:\WinAVR-20080512\utils\bin\make.exe</MAKE_LOC></AVRGCCPLUGIN><IOView><usergroups/><sort sorted="0" column="0" ordername="0" orderaddress="0" ordergroup="0"/></IOView><Files></Files><Events><Bookmarks></Bookmarks></Events><Trace><Filters></Filters></Trace></AVRStudio>\r
diff --git a/Demos/Device/ClassDriver/DualCDC/DualCDC.c b/Demos/Device/ClassDriver/DualCDC/DualCDC.c
new file mode 100644 (file)
index 0000000..216902c
--- /dev/null
@@ -0,0 +1,190 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  Main source file for the DualCDC demo. This file contains the main tasks of\r
+ *  the demo and is responsible for the initial application hardware configuration.\r
+ */\r
+\r
+#include "DualCDC.h"\r
+\r
+/** LUFA CDC Class driver interface configuration and state information. This structure is\r
+ *  passed to all CDC Class driver functions, so that multiple instances of the same class\r
+ *  within a device can be differentiated from one another. This is for the first CDC interface,\r
+ *  which sends strings to the host for each joystick movement.\r
+ */\r
+USB_ClassInfo_CDC_t VirtualSerial1_CDC_Interface =\r
+       {\r
+               .ControlInterfaceNumber     = 0,\r
+\r
+               .DataINEndpointNumber       = CDC1_TX_EPNUM,\r
+               .DataINEndpointSize         = CDC_TXRX_EPSIZE,\r
+\r
+               .DataOUTEndpointNumber      = CDC1_RX_EPNUM,\r
+               .DataOUTEndpointSize        = CDC_TXRX_EPSIZE,\r
+\r
+               .NotificationEndpointNumber = CDC1_NOTIFICATION_EPNUM,\r
+               .NotificationEndpointSize   = CDC_NOTIFICATION_EPSIZE,\r
+       };\r
+\r
+/** LUFA CDC Class driver interface configuration and state information. This structure is\r
+ *  passed to all CDC Class driver functions, so that multiple instances of the same class\r
+ *  within a device can be differentiated from one another. This is for the second CDC interface,\r
+ *  which echos back all received data from the host.\r
+ */\r
+USB_ClassInfo_CDC_t VirtualSerial2_CDC_Interface =\r
+       {\r
+               .ControlInterfaceNumber     = 2,\r
+\r
+               .DataINEndpointNumber       = CDC2_TX_EPNUM,\r
+               .DataINEndpointSize         = CDC_TXRX_EPSIZE,\r
+\r
+               .DataOUTEndpointNumber      = CDC2_RX_EPNUM,\r
+               .DataOUTEndpointSize        = CDC_TXRX_EPSIZE,\r
+\r
+               .NotificationEndpointNumber = CDC2_NOTIFICATION_EPNUM,\r
+               .NotificationEndpointSize   = CDC_NOTIFICATION_EPSIZE,\r
+       };\r
+\r
+/** Main program entry point. This routine contains the overall program flow, including initial\r
+ *  setup of all components and the main program loop.\r
+ */\r
+int main(void)\r
+{\r
+       SetupHardware();\r
+       \r
+       LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);\r
+\r
+       for (;;)\r
+       {\r
+               CheckJoystickMovement();\r
+\r
+               /* Discard all received data on the first CDC interface */\r
+               uint16_t BytesToDiscard = USB_CDC_BytesReceived(&VirtualSerial1_CDC_Interface);\r
+               while (BytesToDiscard--)\r
+                 USB_CDC_ReceiveByte(&VirtualSerial1_CDC_Interface);\r
+\r
+               /* Echo all received data on the second CDC interface */\r
+               uint16_t BytesToEcho = USB_CDC_BytesReceived(&VirtualSerial2_CDC_Interface);\r
+               while (BytesToEcho--)\r
+                 USB_CDC_SendByte(&VirtualSerial2_CDC_Interface, USB_CDC_ReceiveByte(&VirtualSerial2_CDC_Interface));\r
+                 \r
+               USB_CDC_USBTask(&VirtualSerial1_CDC_Interface);\r
+               USB_CDC_USBTask(&VirtualSerial2_CDC_Interface);\r
+               USB_USBTask();\r
+       }\r
+}\r
+\r
+/** Configures the board hardware and chip peripherals for the demo's functionality. */\r
+void SetupHardware(void)\r
+{\r
+       /* Disable watchdog if enabled by bootloader/fuses */\r
+       MCUSR &= ~(1 << WDRF);\r
+       wdt_disable();\r
+\r
+       /* Disable clock division */\r
+       clock_prescale_set(clock_div_1);\r
+\r
+       /* Hardware Initialization */\r
+       Joystick_Init();\r
+       LEDs_Init();\r
+       USB_Init();\r
+}\r
+\r
+/** Checks for changes in the position of the board joystick, sending strings to the host upon each change\r
+ *  through the first of the CDC interfaces.\r
+ */\r
+void CheckJoystickMovement(void)\r
+{\r
+       uint8_t     JoyStatus_LCL = Joystick_GetStatus();\r
+       char*       ReportString  = NULL;\r
+       static bool ActionSent = false;\r
+\r
+       char* JoystickStrings[] =\r
+               {\r
+                       "Joystick Up\r\n",\r
+                       "Joystick Down\r\n",\r
+                       "Joystick Left\r\n",\r
+                       "Joystick Right\r\n",\r
+                       "Joystick Pressed\r\n",\r
+               };\r
+\r
+       if (JoyStatus_LCL & JOY_UP)\r
+         ReportString = JoystickStrings[0];\r
+       else if (JoyStatus_LCL & JOY_DOWN)\r
+         ReportString = JoystickStrings[1];\r
+       else if (JoyStatus_LCL & JOY_LEFT)\r
+         ReportString = JoystickStrings[2];\r
+       else if (JoyStatus_LCL & JOY_RIGHT)\r
+         ReportString = JoystickStrings[3];\r
+       else if (JoyStatus_LCL & JOY_PRESS)\r
+         ReportString = JoystickStrings[4];\r
+       else\r
+         ActionSent = false;\r
+         \r
+       if ((ReportString != NULL) && (ActionSent == false))\r
+       {\r
+               ActionSent = true;\r
+               \r
+               USB_CDC_SendString(&VirtualSerial1_CDC_Interface, ReportString, strlen(ReportString));          \r
+       }\r
+}\r
+\r
+/** Event handler for the library USB Connection event. */\r
+void EVENT_USB_Connect(void)\r
+{\r
+       LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING);\r
+}\r
+\r
+/** Event handler for the library USB Disconnection event. */\r
+void EVENT_USB_Disconnect(void)\r
+{\r
+       LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);\r
+}\r
+\r
+/** Event handler for the library USB Configuration Changed event. */\r
+void EVENT_USB_ConfigurationChanged(void)\r
+{\r
+       LEDs_SetAllLEDs(LEDMASK_USB_READY);\r
+\r
+       if (!(USB_CDC_ConfigureEndpoints(&VirtualSerial1_CDC_Interface)))\r
+         LEDs_SetAllLEDs(LEDMASK_USB_ERROR);\r
+\r
+       if (!(USB_CDC_ConfigureEndpoints(&VirtualSerial2_CDC_Interface)))\r
+         LEDs_SetAllLEDs(LEDMASK_USB_ERROR);\r
+}\r
+\r
+/** Event handler for the library USB Unhandled Control Packet event. */\r
+void EVENT_USB_UnhandledControlPacket(void)\r
+{\r
+       USB_CDC_ProcessControlPacket(&VirtualSerial1_CDC_Interface);\r
+       USB_CDC_ProcessControlPacket(&VirtualSerial2_CDC_Interface);\r
+}\r
diff --git a/Demos/Device/ClassDriver/DualCDC/DualCDC.h b/Demos/Device/ClassDriver/DualCDC/DualCDC.h
new file mode 100644 (file)
index 0000000..93b785d
--- /dev/null
@@ -0,0 +1,75 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  Header file for DualCDC.c.\r
+ */\r
+\r
+#ifndef _DUAL_CDC_H_\r
+#define _DUAL_CDC_H_\r
+\r
+       /* Includes: */\r
+               #include <avr/io.h>\r
+               #include <avr/wdt.h>\r
+               #include <avr/power.h>\r
+               #include <string.h>\r
+\r
+               #include "Descriptors.h"\r
+\r
+               #include <LUFA/Version.h>\r
+               #include <LUFA/Drivers/Board/LEDs.h>\r
+               #include <LUFA/Drivers/Board/Joystick.h>\r
+               #include <LUFA/Drivers/USB/USB.h>\r
+               #include <LUFA/Drivers/USB/Class/Device/CDC.h>\r
+\r
+       /* Macros: */\r
+               /** LED mask for the library LED driver, to indicate that the USB interface is not ready. */\r
+               #define LEDMASK_USB_NOTREADY      LEDS_LED1\r
+\r
+               /** LED mask for the library LED driver, to indicate that the USB interface is enumerating. */\r
+               #define LEDMASK_USB_ENUMERATING  (LEDS_LED2 | LEDS_LED3)\r
+\r
+               /** LED mask for the library LED driver, to indicate that the USB interface is ready. */\r
+               #define LEDMASK_USB_READY        (LEDS_LED2 | LEDS_LED4)\r
+\r
+               /** LED mask for the library LED driver, to indicate that an error has occurred in the USB interface. */\r
+               #define LEDMASK_USB_ERROR        (LEDS_LED1 | LEDS_LED3)\r
+               \r
+       /* Function Prototypes: */\r
+               void SetupHardware(void);\r
+               void CheckJoystickMovement(void);\r
+\r
+               void EVENT_USB_Connect(void);\r
+               void EVENT_USB_Disconnect(void);\r
+               void EVENT_USB_ConfigurationChanged(void);\r
+               void EVENT_USB_UnhandledControlPacket(void);\r
+\r
+#endif\r
diff --git a/Demos/Device/ClassDriver/DualCDC/DualCDC.txt b/Demos/Device/ClassDriver/DualCDC/DualCDC.txt
new file mode 100644 (file)
index 0000000..6e08602
--- /dev/null
@@ -0,0 +1,75 @@
+/** \file\r
+ *\r
+ *  This file contains special DoxyGen information for the generation of the main page and other special\r
+ *  documentation pages. It is not a project source file.\r
+ */\r
\r
+/** \mainpage Dual Communications Device Class Device (Dual Virtual Serial Port)\r
+ *\r
+ *  \section SSec_Info USB Information:\r
+ *\r
+ *  The following table gives a rundown of the USB utilization of this demo.\r
+ *\r
+ *  <table>\r
+ *   <tr>\r
+ *    <td><b>USB Mode:</b></td>\r
+ *    <td>Device</td>\r
+ *   </tr>\r
+ *   <tr>\r
+ *    <td><b>USB Class:</b></td>\r
+ *    <td>Miscellaneous Device Class</td>\r
+ *    <td>( Sub-Interface: Communications Device Class (CDC) )</td>\r
+ *   </tr>\r
+ *   <tr> \r
+ *    <td><b>USB Subclass:</b></td>\r
+ *    <td>Common Class</td> \r
+ *    <td>( Sub-Interface: Abstract Control Model (ACM) )</td>\r
+ *   </tr>\r
+ *   <tr>\r
+ *    <td><b>Relevant Standards:</b></td>\r
+ *    <td>USBIF Interface Association Descriptor ECN</td>\r
+ *    <td>USBIF CDC Class Standard</td>\r
+ *   </tr>\r
+ *   <tr>\r
+ *    <td><b>Usable Speeds:</b></td>\r
+ *    <td>Full Speed Mode</td>\r
+ *   </tr>\r
+ *  </table>\r
+ *\r
+ *  \section SSec_Description Project Description: \r
+ *\r
+ *  Dual Communications Device Class demonstration application.\r
+ *  This gives a simple reference application for implementing\r
+ *  a compound device with dual CDC functions acting as a pair\r
+ *  of virtual serial ports. This demo uses Interface Association\r
+ *  Descriptors to link together the pair of related CDC\r
+ *  descriptors for each virtual serial port, which may not be\r
+ *  supported in all OSes - Windows Vista is supported, as is\r
+ *  XP (although the latter may need a hotfix to function).\r
+ *  \r
+ *  Joystick actions are transmitted to the host as strings\r
+ *  through the first serial port. The device does not respond to\r
+ *  serial data sent from the host in the first serial port.\r
+ *  \r
+ *  The second serial port echoes back data sent from the host.\r
+ *  \r
+ *  After running this demo for the first time on a new computer,\r
+ *  you will need to supply the .INF file located in this demo\r
+ *  project's directory as the device's driver when running under\r
+ *  Windows. This will enable Windows to use its inbuilt CDC drivers,\r
+ *  negating the need for custom drivers for the device. Other\r
+ *  Operating Systems should automatically use their own inbuilt\r
+ *  CDC-ACM drivers.\r
+ *\r
+ *  \section SSec_Options Project Options\r
+ *\r
+ *  The following defines can be found in this demo, which can control the demo behaviour when defined, or changed in value.\r
+ *\r
+ *  <table>\r
+ *   <tr>\r
+ *    <td>\r
+ *     None\r
+ *    </td>\r
+ *   </tr>\r
+ *  </table>\r
+ */
\ No newline at end of file
diff --git a/Demos/Device/ClassDriver/DualCDC/LUFA DualCDC.inf b/Demos/Device/ClassDriver/DualCDC/LUFA DualCDC.inf
new file mode 100644 (file)
index 0000000..10ba560
--- /dev/null
@@ -0,0 +1,56 @@
+;       Windows LUFA Dual CDC Setup File\r
+; Copyright (c) 2000 Microsoft Corporation\r
+\r
+[Version] \r
+Signature="$Windows NT$" \r
+Class=Ports\r
+ClassGuid={4D36E978-E325-11CE-BFC1-08002BE10318} \r
+Provider=%COMPANY% \r
+LayoutFile=layout.inf\r
+DriverVer=06/06/2006,1.0.0.0\r
+\r
+[Manufacturer] \r
+%MFGNAME% = ManufName\r
+\r
+[DestinationDirs] \r
+DefaultDestDir=12 \r
+\r
+[ManufName] \r
+%Modem3% = Modem3, USB\VID_03EB&PID_204E&MI_00\r
+%Modem3% = Modem3, USB\VID_03EB&PID_204E&MI_02\r
+\r
+;------------------------------------------------------------------------------\r
+;  Windows 2000/XP Sections\r
+;------------------------------------------------------------------------------\r
+\r
+[Modem3.nt]\r
+CopyFiles=USBModemCopyFileSection\r
+AddReg=Modem3.nt.AddReg \r
+\r
+[USBModemCopyFileSection]\r
+usbser.sys,,,0x20\r
+\r
+[Modem3.nt.AddReg] \r
+HKR,,DevLoader,,*ntkern \r
+HKR,,NTMPDriver,,usbser.sys \r
+HKR,,EnumPropPages32,,"MsPorts.dll,SerialPortPropPageProvider" \r
+\r
+[Modem3.nt.Services] \r
+AddService=usbser, 0x00000002, DriverService\r
+\r
+[DriverService] \r
+DisplayName=%SERVICE%\r
+ServiceType=1\r
+StartType=3\r
+ErrorControl=1\r
+ServiceBinary=%12%\usbser.sys \r
+\r
+;------------------------------------------------------------------------------\r
+;  String Definitions\r
+;------------------------------------------------------------------------------\r
+\r
+[Strings] \r
+COMPANY="LUFA Library"\r
+MFGNAME="Dean Camera"\r
+Modem3="USB Virtual Serial Port" \r
+SERVICE="USB Virtual Serial Port CDC Driver"
\ No newline at end of file
diff --git a/Demos/Device/ClassDriver/DualCDC/makefile b/Demos/Device/ClassDriver/DualCDC/makefile
new file mode 100644 (file)
index 0000000..5fbda61
--- /dev/null
@@ -0,0 +1,733 @@
+# Hey Emacs, this is a -*- makefile -*-\r
+#----------------------------------------------------------------------------\r
+# WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al.\r
+#  >> Modified for use with the LUFA project. <<\r
+#\r
+# Released to the Public Domain\r
+#\r
+# Additional material for this makefile was written by:\r
+# Peter Fleury\r
+# Tim Henigan\r
+# Colin O'Flynn\r
+# Reiner Patommel\r
+# Markus Pfaff\r
+# Sander Pool\r
+# Frederik Rouleau\r
+# Carlos Lamas\r
+# Dean Camera\r
+# Opendous Inc.\r
+# Denver Gingerich\r
+#\r
+#----------------------------------------------------------------------------\r
+# On command line:\r
+#\r
+# make all = Make software.\r
+#\r
+# make clean = Clean out built project files.\r
+#\r
+# make coff = Convert ELF to AVR COFF.\r
+#\r
+# make extcoff = Convert ELF to AVR Extended COFF.\r
+#\r
+# make program = Download the hex file to the device, using avrdude.\r
+#                Please customize the avrdude settings below first!\r
+#\r
+# make dfu = Download the hex file to the device, using dfu-programmer (must\r
+#            have dfu-programmer installed).\r
+#\r
+# make flip = Download the hex file to the device, using Atmel FLIP (must\r
+#             have Atmel FLIP installed).\r
+#\r
+# make dfu-ee = Download the eeprom file to the device, using dfu-programmer\r
+#               (must have dfu-programmer installed).\r
+#\r
+# make flip-ee = Download the eeprom file to the device, using Atmel FLIP\r
+#                (must have Atmel FLIP installed).\r
+#\r
+# make doxygen = Generate DoxyGen documentation for the project (must have\r
+#                DoxyGen installed)\r
+#\r
+# make debug = Start either simulavr or avarice as specified for debugging, \r
+#              with avr-gdb or avr-insight as the front end for debugging.\r
+#\r
+# make filename.s = Just compile filename.c into the assembler code only.\r
+#\r
+# make filename.i = Create a preprocessed source file for use in submitting\r
+#                   bug reports to the GCC project.\r
+#\r
+# To rebuild project do "make clean" then "make all".\r
+#----------------------------------------------------------------------------\r
+\r
+\r
+# MCU name\r
+MCU = at90usb1287\r
+\r
+\r
+# Target board (see library "Board Types" documentation, USER or blank for projects not requiring\r
+# LUFA board drivers). If USER is selected, put custom board drivers in a directory called \r
+# "Board" inside the application directory.\r
+BOARD  = USBKEY\r
+\r
+\r
+# Processor frequency.\r
+#     This will define a symbol, F_CPU, in all source code files equal to the \r
+#     processor frequency. You can then use this symbol in your source code to \r
+#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done\r
+#     automatically to create a 32-bit value in your source code.\r
+#     Typical values are:\r
+#         F_CPU =  1000000\r
+#         F_CPU =  1843200\r
+#         F_CPU =  2000000\r
+#         F_CPU =  3686400\r
+#         F_CPU =  4000000\r
+#         F_CPU =  7372800\r
+#         F_CPU =  8000000\r
+#         F_CPU = 11059200\r
+#         F_CPU = 14745600\r
+#         F_CPU = 16000000\r
+#         F_CPU = 18432000\r
+#         F_CPU = 20000000\r
+F_CPU = 8000000\r
+\r
+\r
+# Input clock frequency.\r
+#     This will define a symbol, F_CLOCK, in all source code files equal to the \r
+#     input clock frequency (before any prescaling is performed). This value may\r
+#     differ from F_CPU if prescaling is used on the latter, and is required as the\r
+#     raw input clock is fed directly to the PLL sections of the AVR for high speed\r
+#     clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'\r
+#     at the end, this will be done automatically to create a 32-bit value in your\r
+#     source code.\r
+#\r
+#     If no clock division is performed on the input clock inside the AVR (via the\r
+#     CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.\r
+F_CLOCK = 8000000\r
+\r
+\r
+# Output format. (can be srec, ihex, binary)\r
+FORMAT = ihex\r
+\r
+\r
+# Target file name (without extension).\r
+TARGET = DualCDC\r
+\r
+\r
+# Object files directory\r
+#     To put object files in current directory, use a dot (.), do NOT make\r
+#     this an empty or blank macro!\r
+OBJDIR = .\r
+\r
+\r
+# Path to the LUFA library\r
+LUFA_PATH = ../../..\r
+\r
+\r
+# List C source files here. (C dependencies are automatically generated.)\r
+SRC = $(TARGET).c                                                 \\r
+         Descriptors.c                                               \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/DevChapter9.c        \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Endpoint.c           \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Host.c               \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/HostChapter9.c       \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/LowLevel.c           \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Pipe.c               \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/Events.c            \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBInterrupt.c      \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBTask.c           \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/ConfigDescriptor.c  \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/Class/Device/CDC.c            \\r
+\r
+\r
+# List C++ source files here. (C dependencies are automatically generated.)\r
+CPPSRC = \r
+\r
+\r
+# List Assembler source files here.\r
+#     Make them always end in a capital .S.  Files ending in a lowercase .s\r
+#     will not be considered source files but generated files (assembler\r
+#     output from the compiler), and will be deleted upon "make clean"!\r
+#     Even though the DOS/Win* filesystem matches both .s and .S the same,\r
+#     it will preserve the spelling of the filenames, and gcc itself does\r
+#     care about how the name is spelled on its command-line.\r
+ASRC =\r
+\r
+\r
+# Optimization level, can be [0, 1, 2, 3, s]. \r
+#     0 = turn off optimization. s = optimize for size.\r
+#     (Note: 3 is not always the best optimization level. See avr-libc FAQ.)\r
+OPT = s\r
+\r
+\r
+# Debugging format.\r
+#     Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs.\r
+#     AVR Studio 4.10 requires dwarf-2.\r
+#     AVR [Extended] COFF format requires stabs, plus an avr-objcopy run.\r
+DEBUG = dwarf-2\r
+\r
+\r
+# List any extra directories to look for include files here.\r
+#     Each directory must be seperated by a space.\r
+#     Use forward slashes for directory separators.\r
+#     For a directory that has spaces, enclose it in quotes.\r
+EXTRAINCDIRS = $(LUFA_PATH)/\r
+\r
+\r
+# Compiler flag to set the C Standard level.\r
+#     c89   = "ANSI" C\r
+#     gnu89 = c89 plus GCC extensions\r
+#     c99   = ISO C99 standard (not yet fully implemented)\r
+#     gnu99 = c99 plus GCC extensions\r
+CSTANDARD = -std=gnu99\r
+\r
+\r
+# Place -D or -U options here for C sources\r
+CDEFS  = -DF_CPU=$(F_CPU)UL -DF_CLOCK=$(F_CLOCK)UL -DBOARD=BOARD_$(BOARD)\r
+CDEFS += -DUSE_NONSTANDARD_DESCRIPTOR_NAMES -DUSB_DEVICE_ONLY\r
+CDEFS += -DFIXED_CONTROL_ENDPOINT_SIZE=8 -DUSE_SINGLE_DEVICE_CONFIGURATION\r
+CDEFS += -DUSE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)"\r
+\r
+\r
+# Place -D or -U options here for ASM sources\r
+ADEFS = -DF_CPU=$(F_CPU)\r
+\r
+\r
+# Place -D or -U options here for C++ sources\r
+CPPDEFS = -DF_CPU=$(F_CPU)UL\r
+#CPPDEFS += -D__STDC_LIMIT_MACROS\r
+#CPPDEFS += -D__STDC_CONSTANT_MACROS\r
+\r
+\r
+\r
+#---------------- Compiler Options C ----------------\r
+#  -g*:          generate debugging information\r
+#  -O*:          optimization level\r
+#  -f...:        tuning, see GCC manual and avr-libc documentation\r
+#  -Wall...:     warning level\r
+#  -Wa,...:      tell GCC to pass this to the assembler.\r
+#    -adhlns...: create assembler listing\r
+CFLAGS = -g$(DEBUG)\r
+CFLAGS += $(CDEFS)\r
+CFLAGS += -O$(OPT)\r
+CFLAGS += -funsigned-char\r
+CFLAGS += -funsigned-bitfields\r
+CFLAGS += -ffunction-sections\r
+CFLAGS += -fpack-struct\r
+CFLAGS += -fshort-enums\r
+CFLAGS += -finline-limit=20\r
+CFLAGS += -Wall\r
+CFLAGS += -Wstrict-prototypes\r
+CFLAGS += -Wundef\r
+#CFLAGS += -fno-unit-at-a-time\r
+#CFLAGS += -Wunreachable-code\r
+#CFLAGS += -Wsign-compare\r
+CFLAGS += -Wa,-adhlns=$(<:%.c=$(OBJDIR)/%.lst)\r
+CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))\r
+CFLAGS += $(CSTANDARD)\r
+\r
+\r
+#---------------- Compiler Options C++ ----------------\r
+#  -g*:          generate debugging information\r
+#  -O*:          optimization level\r
+#  -f...:        tuning, see GCC manual and avr-libc documentation\r
+#  -Wall...:     warning level\r
+#  -Wa,...:      tell GCC to pass this to the assembler.\r
+#    -adhlns...: create assembler listing\r
+CPPFLAGS = -g$(DEBUG)\r
+CPPFLAGS += $(CPPDEFS)\r
+CPPFLAGS += -O$(OPT)\r
+CPPFLAGS += -funsigned-char\r
+CPPFLAGS += -funsigned-bitfields\r
+CPPFLAGS += -fpack-struct\r
+CPPFLAGS += -fshort-enums\r
+CPPFLAGS += -fno-exceptions\r
+CPPFLAGS += -Wall\r
+CFLAGS += -Wundef\r
+#CPPFLAGS += -mshort-calls\r
+#CPPFLAGS += -fno-unit-at-a-time\r
+#CPPFLAGS += -Wstrict-prototypes\r
+#CPPFLAGS += -Wunreachable-code\r
+#CPPFLAGS += -Wsign-compare\r
+CPPFLAGS += -Wa,-adhlns=$(<:%.cpp=$(OBJDIR)/%.lst)\r
+CPPFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))\r
+#CPPFLAGS += $(CSTANDARD)\r
+\r
+\r
+#---------------- Assembler Options ----------------\r
+#  -Wa,...:   tell GCC to pass this to the assembler.\r
+#  -adhlns:   create listing\r
+#  -gstabs:   have the assembler create line number information; note that\r
+#             for use in COFF files, additional information about filenames\r
+#             and function names needs to be present in the assembler source\r
+#             files -- see avr-libc docs [FIXME: not yet described there]\r
+#  -listing-cont-lines: Sets the maximum number of continuation lines of hex \r
+#       dump that will be displayed for a given single line of source input.\r
+ASFLAGS = $(ADEFS) -Wa,-adhlns=$(<:%.S=$(OBJDIR)/%.lst),-gstabs,--listing-cont-lines=100\r
+\r
+\r
+#---------------- Library Options ----------------\r
+# Minimalistic printf version\r
+PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min\r
+\r
+# Floating point printf version (requires MATH_LIB = -lm below)\r
+PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt\r
+\r
+# If this is left blank, then it will use the Standard printf version.\r
+PRINTF_LIB = \r
+#PRINTF_LIB = $(PRINTF_LIB_MIN)\r
+#PRINTF_LIB = $(PRINTF_LIB_FLOAT)\r
+\r
+\r
+# Minimalistic scanf version\r
+SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min\r
+\r
+# Floating point + %[ scanf version (requires MATH_LIB = -lm below)\r
+SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt\r
+\r
+# If this is left blank, then it will use the Standard scanf version.\r
+SCANF_LIB = \r
+#SCANF_LIB = $(SCANF_LIB_MIN)\r
+#SCANF_LIB = $(SCANF_LIB_FLOAT)\r
+\r
+\r
+MATH_LIB = -lm\r
+\r
+\r
+# List any extra directories to look for libraries here.\r
+#     Each directory must be seperated by a space.\r
+#     Use forward slashes for directory separators.\r
+#     For a directory that has spaces, enclose it in quotes.\r
+EXTRALIBDIRS = \r
+\r
+\r
+\r
+#---------------- External Memory Options ----------------\r
+\r
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),\r
+# used for variables (.data/.bss) and heap (malloc()).\r
+#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff\r
+\r
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),\r
+# only used for heap (malloc()).\r
+#EXTMEMOPTS = -Wl,--section-start,.data=0x801100,--defsym=__heap_end=0x80ffff\r
+\r
+EXTMEMOPTS =\r
+\r
+\r
+\r
+#---------------- Linker Options ----------------\r
+#  -Wl,...:     tell GCC to pass this to linker.\r
+#    -Map:      create map file\r
+#    --cref:    add cross reference to  map file\r
+LDFLAGS = -Wl,-Map=$(TARGET).map,--cref\r
+LDFLAGS += -Wl,--relax \r
+LDFLAGS += -Wl,--gc-sections\r
+LDFLAGS += $(EXTMEMOPTS)\r
+LDFLAGS += $(patsubst %,-L%,$(EXTRALIBDIRS))\r
+LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)\r
+#LDFLAGS += -T linker_script.x\r
+\r
+\r
+\r
+#---------------- Programming Options (avrdude) ----------------\r
+\r
+# Programming hardware: alf avr910 avrisp bascom bsd \r
+# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500\r
+#\r
+# Type: avrdude -c ?\r
+# to get a full listing.\r
+#\r
+AVRDUDE_PROGRAMMER = jtagmkII\r
+\r
+# com1 = serial port. Use lpt1 to connect to parallel port.\r
+AVRDUDE_PORT = usb\r
+\r
+AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex\r
+#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep\r
+\r
+\r
+# Uncomment the following if you want avrdude's erase cycle counter.\r
+# Note that this counter needs to be initialized first using -Yn,\r
+# see avrdude manual.\r
+#AVRDUDE_ERASE_COUNTER = -y\r
+\r
+# Uncomment the following if you do /not/ wish a verification to be\r
+# performed after programming the device.\r
+#AVRDUDE_NO_VERIFY = -V\r
+\r
+# Increase verbosity level.  Please use this when submitting bug\r
+# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude> \r
+# to submit bug reports.\r
+#AVRDUDE_VERBOSE = -v -v\r
+\r
+AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)\r
+AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY)\r
+AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE)\r
+AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER)\r
+\r
+\r
+\r
+#---------------- Debugging Options ----------------\r
+\r
+# For simulavr only - target MCU frequency.\r
+DEBUG_MFREQ = $(F_CPU)\r
+\r
+# Set the DEBUG_UI to either gdb or insight.\r
+# DEBUG_UI = gdb\r
+DEBUG_UI = insight\r
+\r
+# Set the debugging back-end to either avarice, simulavr.\r
+DEBUG_BACKEND = avarice\r
+#DEBUG_BACKEND = simulavr\r
+\r
+# GDB Init Filename.\r
+GDBINIT_FILE = __avr_gdbinit\r
+\r
+# When using avarice settings for the JTAG\r
+JTAG_DEV = /dev/com1\r
+\r
+# Debugging port used to communicate between GDB / avarice / simulavr.\r
+DEBUG_PORT = 4242\r
+\r
+# Debugging host used to communicate between GDB / avarice / simulavr, normally\r
+#     just set to localhost unless doing some sort of crazy debugging when \r
+#     avarice is running on a different computer.\r
+DEBUG_HOST = localhost\r
+\r
+\r
+\r
+#============================================================================\r
+\r
+\r
+# Define programs and commands.\r
+SHELL = sh\r
+CC = avr-gcc\r
+OBJCOPY = avr-objcopy\r
+OBJDUMP = avr-objdump\r
+SIZE = avr-size\r
+AR = avr-ar rcs\r
+NM = avr-nm\r
+AVRDUDE = avrdude\r
+REMOVE = rm -f\r
+REMOVEDIR = rm -rf\r
+COPY = cp\r
+WINSHELL = cmd\r
+\r
+# Define Messages\r
+# English\r
+MSG_ERRORS_NONE = Errors: none\r
+MSG_BEGIN = -------- begin --------\r
+MSG_END = --------  end  --------\r
+MSG_SIZE_BEFORE = Size before: \r
+MSG_SIZE_AFTER = Size after:\r
+MSG_COFF = Converting to AVR COFF:\r
+MSG_EXTENDED_COFF = Converting to AVR Extended COFF:\r
+MSG_FLASH = Creating load file for Flash:\r
+MSG_EEPROM = Creating load file for EEPROM:\r
+MSG_EXTENDED_LISTING = Creating Extended Listing:\r
+MSG_SYMBOL_TABLE = Creating Symbol Table:\r
+MSG_LINKING = Linking:\r
+MSG_COMPILING = Compiling C:\r
+MSG_COMPILING_CPP = Compiling C++:\r
+MSG_ASSEMBLING = Assembling:\r
+MSG_CLEANING = Cleaning project:\r
+MSG_CREATING_LIBRARY = Creating library:\r
+\r
+\r
+\r
+\r
+# Define all object files.\r
+OBJ = $(SRC:%.c=$(OBJDIR)/%.o) $(CPPSRC:%.cpp=$(OBJDIR)/%.o) $(ASRC:%.S=$(OBJDIR)/%.o) \r
+\r
+# Define all listing files.\r
+LST = $(SRC:%.c=$(OBJDIR)/%.lst) $(CPPSRC:%.cpp=$(OBJDIR)/%.lst) $(ASRC:%.S=$(OBJDIR)/%.lst) \r
+\r
+\r
+# Compiler flags to generate dependency files.\r
+GENDEPFLAGS = -MMD -MP -MF .dep/$(@F).d\r
+\r
+\r
+# Combine all necessary flags and optional flags.\r
+# Add target processor to flags.\r
+ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS)\r
+ALL_CPPFLAGS = -mmcu=$(MCU) -I. -x c++ $(CPPFLAGS) $(GENDEPFLAGS)\r
+ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)\r
+\r
+\r
+\r
+\r
+\r
+# Default target.\r
+all: begin gccversion sizebefore build checkhooks checklibmode checkboard sizeafter end\r
+\r
+# Change the build target to build a HEX file or a library.\r
+build: elf hex eep lss sym\r
+#build: lib\r
+\r
+\r
+elf: $(TARGET).elf\r
+hex: $(TARGET).hex\r
+eep: $(TARGET).eep\r
+lss: $(TARGET).lss\r
+sym: $(TARGET).sym\r
+LIBNAME=lib$(TARGET).a\r
+lib: $(LIBNAME)\r
+\r
+\r
+\r
+# Eye candy.\r
+# AVR Studio 3.x does not check make's exit code but relies on\r
+# the following magic strings to be generated by the compile job.\r
+begin:\r
+       @echo\r
+       @echo $(MSG_BEGIN)\r
+\r
+end:\r
+       @echo $(MSG_END)\r
+       @echo\r
+\r
+\r
+# Display size of file.\r
+HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex\r
+ELFSIZE = $(SIZE) $(MCU_FLAG) $(FORMAT_FLAG) $(TARGET).elf\r
+MCU_FLAG = $(shell $(SIZE) --help | grep -- --mcu > /dev/null && echo --mcu=$(MCU) )\r
+FORMAT_FLAG = $(shell $(SIZE) --help | grep -- --format=.*avr > /dev/null && echo --format=avr )\r
+\r
+sizebefore:\r
+       @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \\r
+       2>/dev/null; echo; fi\r
+\r
+sizeafter:\r
+       @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \\r
+       2>/dev/null; echo; fi\r
+\r
+checkhooks: build\r
+       @echo\r
+       @echo ------- Unhooked LUFA Events -------\r
+       @$(shell) (grep -s '^EVENT_.*LUFA/.*\\.o' $(TARGET).map | \\r
+                  cut -d' ' -f1 | cut -d'_' -f2- | grep ".*") || \\r
+                          echo "(None)"\r
+       @echo ------------------------------------\r
+\r
+checklibmode:\r
+       @echo\r
+       @echo ----------- Library Mode -----------\r
+       @$(shell) ($(CC) $(ALL_CFLAGS) -E -dM - < /dev/null \\r
+                 | grep 'USB_\(DEVICE\|HOST\)_ONLY' | cut -d' ' -f2 | grep ".*") \\r
+                 || echo "No specific mode (both device and host mode allowable)."\r
+       @echo ------------------------------------\r
+\r
+checkboard:\r
+       @echo\r
+       @echo ---------- Selected Board ----------\r
+       @echo Selected board model is $(BOARD).\r
+       @echo ------------------------------------\r
+       \r
+# Display compiler version information.\r
+gccversion : \r
+       @$(CC) --version\r
+\r
+\r
+\r
+# Program the device.  \r
+program: $(TARGET).hex $(TARGET).eep\r
+       $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)\r
+\r
+flip: $(TARGET).hex\r
+       batchisp -hardware usb -device $(MCU) -operation erase f\r
+       batchisp -hardware usb -device $(MCU) -operation loadbuffer $(TARGET).hex program\r
+       batchisp -hardware usb -device $(MCU) -operation start reset 0\r
+\r
+dfu: $(TARGET).hex\r
+       dfu-programmer $(MCU) erase\r
+       dfu-programmer $(MCU) flash --debug 1 $(TARGET).hex\r
+       dfu-programmer $(MCU) reset\r
+\r
+flip-ee: $(TARGET).hex $(TARGET).eep\r
+       copy $(TARGET).eep $(TARGET)eep.hex\r
+       batchisp -hardware usb -device $(MCU) -operation memory EEPROM erase\r
+       batchisp -hardware usb -device $(MCU) -operation memory EEPROM loadbuffer $(TARGET)eep.hex program\r
+       batchisp -hardware usb -device $(MCU) -operation start reset 0\r
+\r
+dfu-ee: $(TARGET).hex $(TARGET).eep\r
+       dfu-programmer $(MCU) flash-eeprom --debug 1 --suppress-bootloader-mem $(TARGET).eep\r
+       dfu-programmer $(MCU) reset\r
+\r
+\r
+# Generate avr-gdb config/init file which does the following:\r
+#     define the reset signal, load the target file, connect to target, and set \r
+#     a breakpoint at main().\r
+gdb-config: \r
+       @$(REMOVE) $(GDBINIT_FILE)\r
+       @echo define reset >> $(GDBINIT_FILE)\r
+       @echo SIGNAL SIGHUP >> $(GDBINIT_FILE)\r
+       @echo end >> $(GDBINIT_FILE)\r
+       @echo file $(TARGET).elf >> $(GDBINIT_FILE)\r
+       @echo target remote $(DEBUG_HOST):$(DEBUG_PORT)  >> $(GDBINIT_FILE)\r
+ifeq ($(DEBUG_BACKEND),simulavr)\r
+       @echo load  >> $(GDBINIT_FILE)\r
+endif\r
+       @echo break main >> $(GDBINIT_FILE)\r
+\r
+debug: gdb-config $(TARGET).elf\r
+ifeq ($(DEBUG_BACKEND), avarice)\r
+       @echo Starting AVaRICE - Press enter when "waiting to connect" message displays.\r
+       @$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \\r
+       $(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT)\r
+       @$(WINSHELL) /c pause\r
+\r
+else\r
+       @$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \\r
+       $(DEBUG_MFREQ) --port $(DEBUG_PORT)\r
+endif\r
+       @$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE)\r
+\r
+\r
+\r
+\r
+# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.\r
+COFFCONVERT = $(OBJCOPY) --debugging\r
+COFFCONVERT += --change-section-address .data-0x800000\r
+COFFCONVERT += --change-section-address .bss-0x800000\r
+COFFCONVERT += --change-section-address .noinit-0x800000\r
+COFFCONVERT += --change-section-address .eeprom-0x810000\r
+\r
+\r
+\r
+coff: $(TARGET).elf\r
+       @echo\r
+       @echo $(MSG_COFF) $(TARGET).cof\r
+       $(COFFCONVERT) -O coff-avr $< $(TARGET).cof\r
+\r
+\r
+extcoff: $(TARGET).elf\r
+       @echo\r
+       @echo $(MSG_EXTENDED_COFF) $(TARGET).cof\r
+       $(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof\r
+\r
+\r
+\r
+# Create final output files (.hex, .eep) from ELF output file.\r
+%.hex: %.elf\r
+       @echo\r
+       @echo $(MSG_FLASH) $@\r
+       $(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@\r
+\r
+%.eep: %.elf\r
+       @echo\r
+       @echo $(MSG_EEPROM) $@\r
+       -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \\r
+       --change-section-lma .eeprom=0 --no-change-warnings -O $(FORMAT) $< $@ || exit 0\r
+\r
+# Create extended listing file from ELF output file.\r
+%.lss: %.elf\r
+       @echo\r
+       @echo $(MSG_EXTENDED_LISTING) $@\r
+       $(OBJDUMP) -h -z -S $< > $@\r
+\r
+# Create a symbol table from ELF output file.\r
+%.sym: %.elf\r
+       @echo\r
+       @echo $(MSG_SYMBOL_TABLE) $@\r
+       $(NM) -n $< > $@\r
+\r
+\r
+\r
+# Create library from object files.\r
+.SECONDARY : $(TARGET).a\r
+.PRECIOUS : $(OBJ)\r
+%.a: $(OBJ)\r
+       @echo\r
+       @echo $(MSG_CREATING_LIBRARY) $@\r
+       $(AR) $@ $(OBJ)\r
+\r
+\r
+# Link: create ELF output file from object files.\r
+.SECONDARY : $(TARGET).elf\r
+.PRECIOUS : $(OBJ)\r
+%.elf: $(OBJ)\r
+       @echo\r
+       @echo $(MSG_LINKING) $@\r
+       $(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)\r
+\r
+\r
+# Compile: create object files from C source files.\r
+$(OBJDIR)/%.o : %.c\r
+       @echo\r
+       @echo $(MSG_COMPILING) $<\r
+       $(CC) -c $(ALL_CFLAGS) $< -o $@ \r
+\r
+\r
+# Compile: create object files from C++ source files.\r
+$(OBJDIR)/%.o : %.cpp\r
+       @echo\r
+       @echo $(MSG_COMPILING_CPP) $<\r
+       $(CC) -c $(ALL_CPPFLAGS) $< -o $@ \r
+\r
+\r
+# Compile: create assembler files from C source files.\r
+%.s : %.c\r
+       $(CC) -S $(ALL_CFLAGS) $< -o $@\r
+\r
+\r
+# Compile: create assembler files from C++ source files.\r
+%.s : %.cpp\r
+       $(CC) -S $(ALL_CPPFLAGS) $< -o $@\r
+\r
+\r
+# Assemble: create object files from assembler source files.\r
+$(OBJDIR)/%.o : %.S\r
+       @echo\r
+       @echo $(MSG_ASSEMBLING) $<\r
+       $(CC) -c $(ALL_ASFLAGS) $< -o $@\r
+\r
+\r
+# Create preprocessed source for use in sending a bug report.\r
+%.i : %.c\r
+       $(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ \r
+       \r
+\r
+# Target: clean project.\r
+clean: begin clean_list clean_binary end\r
+\r
+clean_binary:\r
+       $(REMOVE) $(TARGET).hex\r
+       \r
+clean_list:\r
+       @echo $(MSG_CLEANING)\r
+       $(REMOVE) $(TARGET).eep\r
+       $(REMOVE) $(TARGET)eep.hex\r
+       $(REMOVE) $(TARGET).cof\r
+       $(REMOVE) $(TARGET).elf\r
+       $(REMOVE) $(TARGET).map\r
+       $(REMOVE) $(TARGET).sym\r
+       $(REMOVE) $(TARGET).lss\r
+       $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.o)\r
+       $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.lst)\r
+       $(REMOVE) $(SRC:.c=.s)\r
+       $(REMOVE) $(SRC:.c=.d)\r
+       $(REMOVE) $(SRC:.c=.i)\r
+       $(REMOVEDIR) .dep\r
+\r
+\r
+doxygen:\r
+       @echo Generating Project Documentation...\r
+       @doxygen Doxygen.conf\r
+       @echo Documentation Generation Complete.\r
+\r
+clean_doxygen:\r
+       rm -rf Documentation\r
+\r
+# Create object files directory\r
+$(shell mkdir $(OBJDIR) 2>/dev/null)\r
+\r
+\r
+# Include the dependency files.\r
+-include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)\r
+\r
+\r
+# Listing of phony targets.\r
+.PHONY : all checkhooks checklibmode checkboard   \\r
+begin finish end sizebefore sizeafter gccversion  \\r
+build elf hex eep lss sym coff extcoff clean      \\r
+clean_list clean_binary program debug gdb-config  \\r
+doxygen dfu flip flip-ee dfu-ee
\ No newline at end of file
diff --git a/Demos/Device/ClassDriver/GenericHID/Descriptors.c b/Demos/Device/ClassDriver/GenericHID/Descriptors.c
new file mode 100644 (file)
index 0000000..6988166
--- /dev/null
@@ -0,0 +1,240 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  USB Device Descriptors, for library use when in USB device mode. Descriptors are special \r
+ *  computer-readable structures which the host requests upon device enumeration, to determine\r
+ *  the device's capabilities and functions.  \r
+ */\r
+\r
+#include "Descriptors.h"\r
+\r
+/** HID class report descriptor. This is a special descriptor constructed with values from the\r
+ *  USBIF HID class specification to describe the reports and capabilities of the HID device. This\r
+ *  descriptor is parsed by the host and its contents used to determine what data (and in what encoding)\r
+ *  the device will send, and what it may be sent back from the host. Refer to the HID specification for\r
+ *  more details on HID report descriptors.\r
+ */\r
+USB_Descriptor_HIDReport_Datatype_t PROGMEM GenericReport[] =\r
+{\r
+       0x06, 0x9c, 0xff,     /* Usage Page (Vendor Defined)                     */\r
+       0x09, 0x01,           /* Usage (Vendor Defined)                          */\r
+       0xa1, 0x01,           /* Collection (Vendor Defined)                     */\r
+       0x09, 0x02,           /*   Usage (Vendor Defined)                        */\r
+       0x75, 0x08,           /*   Report Size (8)                               */\r
+       0x95, GENERIC_REPORT_SIZE, /*   Report Count (GENERIC_REPORT_SIZE)       */\r
+       0x15, 0x00,           /*   Logical Minimum (0)                           */\r
+       0x25, 0xff,           /*   Logical Maximum (255)                         */\r
+       0x81, 0x02,           /*   Input (Data, Variable, Absolute)              */\r
+       0x09, 0x03,           /*   Usage (Vendor Defined)                        */\r
+       0x75, 0x08,           /*   Report Size (8)                               */\r
+       0x95, GENERIC_REPORT_SIZE, /*   Report Count (GENERIC_REPORT_SIZE)       */\r
+       0x15, 0x00,           /*   Logical Minimum (0)                           */\r
+       0x25, 0xff,           /*   Logical Maximum (255)                         */\r
+       0x91, 0x02,           /*   Output (Data, Variable, Absolute)             */\r
+       0xc0                  /* End Collection                                  */\r
+};\r
+\r
+/** Device descriptor structure. This descriptor, located in FLASH memory, describes the overall\r
+ *  device characteristics, including the supported USB version, control endpoint size and the\r
+ *  number of device configurations. The descriptor is read out by the USB host when the enumeration\r
+ *  process begins.\r
+ */\r
+USB_Descriptor_Device_t PROGMEM DeviceDescriptor =\r
+{\r
+       .Header                 = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device},\r
+               \r
+       .USBSpecification       = VERSION_BCD(01.10),\r
+       .Class                  = 0x00,\r
+       .SubClass               = 0x00,\r
+       .Protocol               = 0x00,\r
+                               \r
+       .Endpoint0Size          = FIXED_CONTROL_ENDPOINT_SIZE,\r
+               \r
+       .VendorID               = 0x03EB,\r
+       .ProductID              = 0x204F,\r
+       .ReleaseNumber          = 0x0000,\r
+               \r
+       .ManufacturerStrIndex   = 0x01,\r
+       .ProductStrIndex        = 0x02,\r
+       .SerialNumStrIndex      = NO_DESCRIPTOR,\r
+               \r
+       .NumberOfConfigurations = 1\r
+};\r
+\r
+/** Configuration descriptor structure. This descriptor, located in FLASH memory, describes the usage\r
+ *  of the device in one of its supported configurations, including information about any device interfaces\r
+ *  and endpoints. The descriptor is read out by the USB host during the enumeration process when selecting\r
+ *  a configuration so that the host may correctly communicate with the USB device.\r
+ */\r
+USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =\r
+{\r
+       .Config = \r
+               {\r
+                       .Header                 = {.Size = sizeof(USB_Descriptor_Configuration_Header_t), .Type = DTYPE_Configuration},\r
+\r
+                       .TotalConfigurationSize = sizeof(USB_Descriptor_Configuration_t),\r
+                       .TotalInterfaces        = 1,\r
+                               \r
+                       .ConfigurationNumber    = 1,\r
+                       .ConfigurationStrIndex  = NO_DESCRIPTOR,\r
+                               \r
+                       .ConfigAttributes       = (USB_CONFIG_ATTR_BUSPOWERED | USB_CONFIG_ATTR_SELFPOWERED),\r
+                       \r
+                       .MaxPowerConsumption    = USB_CONFIG_POWER_MA(100)\r
+               },\r
+               \r
+       .Interface = \r
+               {\r
+                       .Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},\r
+\r
+                       .InterfaceNumber        = 0x00,\r
+                       .AlternateSetting       = 0x00,\r
+                       \r
+                       .TotalEndpoints         = 1,\r
+                               \r
+                       .Class                  = 0x03,\r
+                       .SubClass               = 0x00,\r
+                       .Protocol               = 0x00,\r
+                               \r
+                       .InterfaceStrIndex      = NO_DESCRIPTOR\r
+               },\r
+\r
+       .GenericHID = \r
+               {\r
+                       .Header                 = {.Size = sizeof(USB_Descriptor_HID_t), .Type = DTYPE_HID},\r
+                                                                        \r
+                       .HIDSpec                = VERSION_BCD(01.11),\r
+                       .CountryCode            = 0x00,\r
+                       .TotalReportDescriptors = 1,\r
+                       .HIDReportType          = DTYPE_Report,\r
+                       .HIDReportLength        = sizeof(GenericReport)\r
+               },\r
+\r
+       .GenericINEndpoint = \r
+               {\r
+                       .Header                 = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},\r
+                                                                                \r
+                       .EndpointAddress        = (ENDPOINT_DESCRIPTOR_DIR_IN | GENERIC_IN_EPNUM),\r
+                       .Attributes             = EP_TYPE_INTERRUPT,\r
+                       .EndpointSize           = GENERIC_EPSIZE,\r
+                       .PollingIntervalMS      = 0x02\r
+               },\r
+};\r
+\r
+/** Language descriptor structure. This descriptor, located in FLASH memory, is returned when the host requests\r
+ *  the string descriptor with index 0 (the first index). It is actually an array of 16-bit integers, which indicate\r
+ *  via the language ID table available at USB.org what languages the device supports for its string descriptors.\r
+ */\r
+USB_Descriptor_String_t PROGMEM LanguageString =\r
+{\r
+       .Header                 = {.Size = USB_STRING_LEN(1), .Type = DTYPE_String},\r
+               \r
+       .UnicodeString          = {LANGUAGE_ID_ENG}\r
+};\r
+\r
+/** Manufacturer descriptor string. This is a Unicode string containing the manufacturer's details in human readable\r
+ *  form, and is read out upon request by the host when the appropriate string ID is requested, listed in the Device\r
+ *  Descriptor.\r
+ */\r
+USB_Descriptor_String_t PROGMEM ManufacturerString =\r
+{\r
+       .Header                 = {.Size = USB_STRING_LEN(11), .Type = DTYPE_String},\r
+               \r
+       .UnicodeString          = L"Dean Camera"\r
+};\r
+\r
+/** Product descriptor string. This is a Unicode string containing the product's details in human readable form,\r
+ *  and is read out upon request by the host when the appropriate string ID is requested, listed in the Device\r
+ *  Descriptor.\r
+ */\r
+USB_Descriptor_String_t PROGMEM ProductString =\r
+{\r
+       .Header                 = {.Size = USB_STRING_LEN(21), .Type = DTYPE_String},\r
+               \r
+       .UnicodeString          = L"LUFA Generic HID Demo"\r
+};\r
+\r
+/** This function is called by the library when in device mode, and must be overridden (see library "USB Descriptors"\r
+ *  documentation) by the application code so that the address and size of a requested descriptor can be given\r
+ *  to the USB library. When the device receives a Get Descriptor request on the control endpoint, this function\r
+ *  is called so that the descriptor details can be passed back and the appropriate descriptor sent back to the\r
+ *  USB host.\r
+ */\r
+uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
+{\r
+       const uint8_t  DescriptorType   = (wValue >> 8);\r
+       const uint8_t  DescriptorNumber = (wValue & 0xFF);\r
+\r
+       void*    Address = NULL;\r
+       uint16_t Size    = NO_DESCRIPTOR;\r
+\r
+       switch (DescriptorType)\r
+       {\r
+               case DTYPE_Device:\r
+                       Address = (void*)&DeviceDescriptor;\r
+                       Size    = sizeof(USB_Descriptor_Device_t);\r
+                       break;\r
+               case DTYPE_Configuration: \r
+                       Address = (void*)&ConfigurationDescriptor;\r
+                       Size    = sizeof(USB_Descriptor_Configuration_t);\r
+                       break;\r
+               case DTYPE_String: \r
+                       switch (DescriptorNumber)\r
+                       {\r
+                               case 0x00: \r
+                                       Address = (void*)&LanguageString;\r
+                                       Size    = pgm_read_byte(&LanguageString.Header.Size);\r
+                                       break;\r
+                               case 0x01: \r
+                                       Address = (void*)&ManufacturerString;\r
+                                       Size    = pgm_read_byte(&ManufacturerString.Header.Size);\r
+                                       break;\r
+                               case 0x02: \r
+                                       Address = (void*)&ProductString;\r
+                                       Size    = pgm_read_byte(&ProductString.Header.Size);\r
+                                       break;\r
+                       }\r
+                       \r
+                       break;\r
+               case DTYPE_HID: \r
+                       Address = (void*)&ConfigurationDescriptor.GenericHID;\r
+                       Size    = sizeof(USB_Descriptor_HID_t);\r
+                       break;\r
+               case DTYPE_Report: \r
+                       Address = (void*)&GenericReport;\r
+                       Size    = sizeof(GenericReport);\r
+                       break;\r
+       }\r
+       \r
+       *DescriptorAddress = Address;\r
+       return Size;\r
+}\r
diff --git a/Demos/Device/ClassDriver/GenericHID/Descriptors.h b/Demos/Device/ClassDriver/GenericHID/Descriptors.h
new file mode 100644 (file)
index 0000000..01db53e
--- /dev/null
@@ -0,0 +1,72 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  Header file for Descriptors.c.\r
+ */\r
\r
+#ifndef _DESCRIPTORS_H_\r
+#define _DESCRIPTORS_H_\r
+\r
+       /* Includes: */\r
+               #include <avr/pgmspace.h>\r
+\r
+               #include <LUFA/Drivers/USB/USB.h>\r
+               #include <LUFA/Drivers/USB/Class/Device/HID.h>\r
+\r
+       /** Type Defines: */\r
+               /** Type define for the device configuration descriptor structure. This must be defined in the\r
+                *  application code, as the configuration descriptor contains several sub-descriptors which\r
+                *  vary between devices, and which describe the device's usage to the host.\r
+                */\r
+               typedef struct\r
+               {\r
+                       USB_Descriptor_Configuration_Header_t Config;\r
+                       USB_Descriptor_Interface_t            Interface;\r
+                       USB_Descriptor_HID_t                  GenericHID;\r
+               USB_Descriptor_Endpoint_t             GenericINEndpoint;\r
+               } USB_Descriptor_Configuration_t;\r
+\r
+       /* Macros: */\r
+               /** Endpoint number of the Generic HID reporting IN endpoint. */\r
+               #define GENERIC_IN_EPNUM          1\r
+\r
+               /** Size in bytes of the Generic HID reporting endpoint. */\r
+               #define GENERIC_EPSIZE            8\r
+               \r
+               /** Size in bytes of the Generic HID reports (including report ID byte). */\r
+               #define GENERIC_REPORT_SIZE       8\r
+               \r
+       /* Function Prototypes: */\r
+               uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
+                                                                                       ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);\r
+\r
+#endif\r
diff --git a/Demos/Device/ClassDriver/GenericHID/Doxygen.conf b/Demos/Device/ClassDriver/GenericHID/Doxygen.conf
new file mode 100644 (file)
index 0000000..dea5d4f
--- /dev/null
@@ -0,0 +1,1485 @@
+# Doxyfile 1.5.7.1\r
+\r
+# This file describes the settings to be used by the documentation system\r
+# doxygen (www.doxygen.org) for a project\r
+#\r
+# All text after a hash (#) is considered a comment and will be ignored\r
+# The format is:\r
+#       TAG = value [value, ...]\r
+# For lists items can also be appended using:\r
+#       TAG += value [value, ...]\r
+# Values that contain spaces should be placed between quotes (" ")\r
+\r
+#---------------------------------------------------------------------------\r
+# Project related configuration options\r
+#---------------------------------------------------------------------------\r
+\r
+# This tag specifies the encoding used for all characters in the config file \r
+# that follow. The default is UTF-8 which is also the encoding used for all \r
+# text before the first occurrence of this tag. Doxygen uses libiconv (or the \r
+# iconv built into libc) for the transcoding. See \r
+# http://www.gnu.org/software/libiconv for the list of possible encodings.\r
+\r
+DOXYFILE_ENCODING      = UTF-8\r
+\r
+# The PROJECT_NAME tag is a single word (or a sequence of words surrounded \r
+# by quotes) that should identify the project.\r
+\r
+PROJECT_NAME           = "LUFA Library - Generic HID Device Demo"\r
+\r
+# The PROJECT_NUMBER tag can be used to enter a project or revision number. \r
+# This could be handy for archiving the generated documentation or \r
+# if some version control system is used.\r
+\r
+PROJECT_NUMBER         = 0.0.0\r
+\r
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) \r
+# base path where the generated documentation will be put. \r
+# If a relative path is entered, it will be relative to the location \r
+# where doxygen was started. If left blank the current directory will be used.\r
+\r
+OUTPUT_DIRECTORY       = ./Documentation/\r
+\r
+# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create \r
+# 4096 sub-directories (in 2 levels) under the output directory of each output \r
+# format and will distribute the generated files over these directories. \r
+# Enabling this option can be useful when feeding doxygen a huge amount of \r
+# source files, where putting all generated files in the same directory would \r
+# otherwise cause performance problems for the file system.\r
+\r
+CREATE_SUBDIRS         = YES\r
+\r
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all \r
+# documentation generated by doxygen is written. Doxygen will use this \r
+# information to generate all constant output in the proper language. \r
+# The default language is English, other supported languages are: \r
+# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, \r
+# Croatian, Czech, Danish, Dutch, Farsi, Finnish, French, German, Greek, \r
+# Hungarian, Italian, Japanese, Japanese-en (Japanese with English messages), \r
+# Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, Polish, \r
+# Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, Slovene, \r
+# Spanish, Swedish, and Ukrainian.\r
+\r
+OUTPUT_LANGUAGE        = English\r
+\r
+# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will \r
+# include brief member descriptions after the members that are listed in \r
+# the file and class documentation (similar to JavaDoc). \r
+# Set to NO to disable this.\r
+\r
+BRIEF_MEMBER_DESC      = YES\r
+\r
+# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend \r
+# the brief description of a member or function before the detailed description. \r
+# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the \r
+# brief descriptions will be completely suppressed.\r
+\r
+REPEAT_BRIEF           = YES\r
+\r
+# This tag implements a quasi-intelligent brief description abbreviator \r
+# that is used to form the text in various listings. Each string \r
+# in this list, if found as the leading text of the brief description, will be \r
+# stripped from the text and the result after processing the whole list, is \r
+# used as the annotated text. Otherwise, the brief description is used as-is. \r
+# If left blank, the following values are used ("$name" is automatically \r
+# replaced with the name of the entity): "The $name class" "The $name widget" \r
+# "The $name file" "is" "provides" "specifies" "contains" \r
+# "represents" "a" "an" "the"\r
+\r
+ABBREVIATE_BRIEF       = "The $name class" \\r
+                         "The $name widget" \\r
+                         "The $name file" \\r
+                         is \\r
+                         provides \\r
+                         specifies \\r
+                         contains \\r
+                         represents \\r
+                         a \\r
+                         an \\r
+                         the\r
+\r
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then \r
+# Doxygen will generate a detailed section even if there is only a brief \r
+# description.\r
+\r
+ALWAYS_DETAILED_SEC    = NO\r
+\r
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all \r
+# inherited members of a class in the documentation of that class as if those \r
+# members were ordinary class members. Constructors, destructors and assignment \r
+# operators of the base classes will not be shown.\r
+\r
+INLINE_INHERITED_MEMB  = NO\r
+\r
+# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full \r
+# path before files name in the file list and in the header files. If set \r
+# to NO the shortest path that makes the file name unique will be used.\r
+\r
+FULL_PATH_NAMES        = YES\r
+\r
+# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag \r
+# can be used to strip a user-defined part of the path. Stripping is \r
+# only done if one of the specified strings matches the left-hand part of \r
+# the path. The tag can be used to show relative paths in the file list. \r
+# If left blank the directory from which doxygen is run is used as the \r
+# path to strip.\r
+\r
+STRIP_FROM_PATH        = \r
+\r
+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of \r
+# the path mentioned in the documentation of a class, which tells \r
+# the reader which header file to include in order to use a class. \r
+# If left blank only the name of the header file containing the class \r
+# definition is used. Otherwise one should specify the include paths that \r
+# are normally passed to the compiler using the -I flag.\r
+\r
+STRIP_FROM_INC_PATH    = \r
+\r
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter \r
+# (but less readable) file names. This can be useful is your file systems \r
+# doesn't support long names like on DOS, Mac, or CD-ROM.\r
+\r
+SHORT_NAMES            = YES\r
+\r
+# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen \r
+# will interpret the first line (until the first dot) of a JavaDoc-style \r
+# comment as the brief description. If set to NO, the JavaDoc \r
+# comments will behave just like regular Qt-style comments \r
+# (thus requiring an explicit @brief command for a brief description.)\r
+\r
+JAVADOC_AUTOBRIEF      = NO\r
+\r
+# If the QT_AUTOBRIEF tag is set to YES then Doxygen will \r
+# interpret the first line (until the first dot) of a Qt-style \r
+# comment as the brief description. If set to NO, the comments \r
+# will behave just like regular Qt-style comments (thus requiring \r
+# an explicit \brief command for a brief description.)\r
+\r
+QT_AUTOBRIEF           = NO\r
+\r
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen \r
+# treat a multi-line C++ special comment block (i.e. a block of //! or /// \r
+# comments) as a brief description. This used to be the default behaviour. \r
+# The new default is to treat a multi-line C++ comment block as a detailed \r
+# description. Set this tag to YES if you prefer the old behaviour instead.\r
+\r
+MULTILINE_CPP_IS_BRIEF = NO\r
+\r
+# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented \r
+# member inherits the documentation from any documented member that it \r
+# re-implements.\r
+\r
+INHERIT_DOCS           = YES\r
+\r
+# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce \r
+# a new page for each member. If set to NO, the documentation of a member will \r
+# be part of the file/class/namespace that contains it.\r
+\r
+SEPARATE_MEMBER_PAGES  = NO\r
+\r
+# The TAB_SIZE tag can be used to set the number of spaces in a tab. \r
+# Doxygen uses this value to replace tabs by spaces in code fragments.\r
+\r
+TAB_SIZE               = 4\r
+\r
+# This tag can be used to specify a number of aliases that acts \r
+# as commands in the documentation. An alias has the form "name=value". \r
+# For example adding "sideeffect=\par Side Effects:\n" will allow you to \r
+# put the command \sideeffect (or @sideeffect) in the documentation, which \r
+# will result in a user-defined paragraph with heading "Side Effects:". \r
+# You can put \n's in the value part of an alias to insert newlines.\r
+\r
+ALIASES                = \r
+\r
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C \r
+# sources only. Doxygen will then generate output that is more tailored for C. \r
+# For instance, some of the names that are used will be different. The list \r
+# of all members will be omitted, etc.\r
+\r
+OPTIMIZE_OUTPUT_FOR_C  = YES\r
+\r
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java \r
+# sources only. Doxygen will then generate output that is more tailored for \r
+# Java. For instance, namespaces will be presented as packages, qualified \r
+# scopes will look different, etc.\r
+\r
+OPTIMIZE_OUTPUT_JAVA   = NO\r
+\r
+# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran \r
+# sources only. Doxygen will then generate output that is more tailored for \r
+# Fortran.\r
+\r
+OPTIMIZE_FOR_FORTRAN   = NO\r
+\r
+# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL \r
+# sources. Doxygen will then generate output that is tailored for \r
+# VHDL.\r
+\r
+OPTIMIZE_OUTPUT_VHDL   = NO\r
+\r
+# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want \r
+# to include (a tag file for) the STL sources as input, then you should \r
+# set this tag to YES in order to let doxygen match functions declarations and \r
+# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. \r
+# func(std::string) {}). This also make the inheritance and collaboration \r
+# diagrams that involve STL classes more complete and accurate.\r
+\r
+BUILTIN_STL_SUPPORT    = NO\r
+\r
+# If you use Microsoft's C++/CLI language, you should set this option to YES to\r
+# enable parsing support.\r
+\r
+CPP_CLI_SUPPORT        = NO\r
+\r
+# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. \r
+# Doxygen will parse them like normal C++ but will assume all classes use public \r
+# instead of private inheritance when no explicit protection keyword is present.\r
+\r
+SIP_SUPPORT            = NO\r
+\r
+# For Microsoft's IDL there are propget and propput attributes to indicate getter \r
+# and setter methods for a property. Setting this option to YES (the default) \r
+# will make doxygen to replace the get and set methods by a property in the \r
+# documentation. This will only work if the methods are indeed getting or \r
+# setting a simple type. If this is not the case, or you want to show the \r
+# methods anyway, you should set this option to NO.\r
+\r
+IDL_PROPERTY_SUPPORT   = YES\r
+\r
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC \r
+# tag is set to YES, then doxygen will reuse the documentation of the first \r
+# member in the group (if any) for the other members of the group. By default \r
+# all members of a group must be documented explicitly.\r
+\r
+DISTRIBUTE_GROUP_DOC   = NO\r
+\r
+# Set the SUBGROUPING tag to YES (the default) to allow class member groups of \r
+# the same type (for instance a group of public functions) to be put as a \r
+# subgroup of that type (e.g. under the Public Functions section). Set it to \r
+# NO to prevent subgrouping. Alternatively, this can be done per class using \r
+# the \nosubgrouping command.\r
+\r
+SUBGROUPING            = YES\r
+\r
+# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum \r
+# is documented as struct, union, or enum with the name of the typedef. So \r
+# typedef struct TypeS {} TypeT, will appear in the documentation as a struct \r
+# with name TypeT. When disabled the typedef will appear as a member of a file, \r
+# namespace, or class. And the struct will be named TypeS. This can typically \r
+# be useful for C code in case the coding convention dictates that all compound \r
+# types are typedef'ed and only the typedef is referenced, never the tag name.\r
+\r
+TYPEDEF_HIDES_STRUCT   = NO\r
+\r
+# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to \r
+# determine which symbols to keep in memory and which to flush to disk.\r
+# When the cache is full, less often used symbols will be written to disk.\r
+# For small to medium size projects (<1000 input files) the default value is \r
+# probably good enough. For larger projects a too small cache size can cause \r
+# doxygen to be busy swapping symbols to and from disk most of the time \r
+# causing a significant performance penality. \r
+# If the system has enough physical memory increasing the cache will improve the \r
+# performance by keeping more symbols in memory. Note that the value works on \r
+# a logarithmic scale so increasing the size by one will rougly double the \r
+# memory usage. The cache size is given by this formula: \r
+# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, \r
+# corresponding to a cache size of 2^16 = 65536 symbols\r
+\r
+SYMBOL_CACHE_SIZE      = 0\r
+\r
+#---------------------------------------------------------------------------\r
+# Build related configuration options\r
+#---------------------------------------------------------------------------\r
+\r
+# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in \r
+# documentation are documented, even if no documentation was available. \r
+# Private class members and static file members will be hidden unless \r
+# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES\r
+\r
+EXTRACT_ALL            = YES\r
+\r
+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class \r
+# will be included in the documentation.\r
+\r
+EXTRACT_PRIVATE        = YES\r
+\r
+# If the EXTRACT_STATIC tag is set to YES all static members of a file \r
+# will be included in the documentation.\r
+\r
+EXTRACT_STATIC         = YES\r
+\r
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) \r
+# defined locally in source files will be included in the documentation. \r
+# If set to NO only classes defined in header files are included.\r
+\r
+EXTRACT_LOCAL_CLASSES  = YES\r
+\r
+# This flag is only useful for Objective-C code. When set to YES local \r
+# methods, which are defined in the implementation section but not in \r
+# the interface are included in the documentation. \r
+# If set to NO (the default) only methods in the interface are included.\r
+\r
+EXTRACT_LOCAL_METHODS  = NO\r
+\r
+# If this flag is set to YES, the members of anonymous namespaces will be \r
+# extracted and appear in the documentation as a namespace called \r
+# 'anonymous_namespace{file}', where file will be replaced with the base \r
+# name of the file that contains the anonymous namespace. By default \r
+# anonymous namespace are hidden.\r
+\r
+EXTRACT_ANON_NSPACES   = NO\r
+\r
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all \r
+# undocumented members of documented classes, files or namespaces. \r
+# If set to NO (the default) these members will be included in the \r
+# various overviews, but no documentation section is generated. \r
+# This option has no effect if EXTRACT_ALL is enabled.\r
+\r
+HIDE_UNDOC_MEMBERS     = NO\r
+\r
+# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all \r
+# undocumented classes that are normally visible in the class hierarchy. \r
+# If set to NO (the default) these classes will be included in the various \r
+# overviews. This option has no effect if EXTRACT_ALL is enabled.\r
+\r
+HIDE_UNDOC_CLASSES     = NO\r
+\r
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all \r
+# friend (class|struct|union) declarations. \r
+# If set to NO (the default) these declarations will be included in the \r
+# documentation.\r
+\r
+HIDE_FRIEND_COMPOUNDS  = NO\r
+\r
+# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any \r
+# documentation blocks found inside the body of a function. \r
+# If set to NO (the default) these blocks will be appended to the \r
+# function's detailed documentation block.\r
+\r
+HIDE_IN_BODY_DOCS      = NO\r
+\r
+# The INTERNAL_DOCS tag determines if documentation \r
+# that is typed after a \internal command is included. If the tag is set \r
+# to NO (the default) then the documentation will be excluded. \r
+# Set it to YES to include the internal documentation.\r
+\r
+INTERNAL_DOCS          = NO\r
+\r
+# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate \r
+# file names in lower-case letters. If set to YES upper-case letters are also \r
+# allowed. This is useful if you have classes or files whose names only differ \r
+# in case and if your file system supports case sensitive file names. Windows \r
+# and Mac users are advised to set this option to NO.\r
+\r
+CASE_SENSE_NAMES       = NO\r
+\r
+# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen \r
+# will show members with their full class and namespace scopes in the \r
+# documentation. If set to YES the scope will be hidden.\r
+\r
+HIDE_SCOPE_NAMES       = NO\r
+\r
+# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen \r
+# will put a list of the files that are included by a file in the documentation \r
+# of that file.\r
+\r
+SHOW_INCLUDE_FILES     = YES\r
+\r
+# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] \r
+# is inserted in the documentation for inline members.\r
+\r
+INLINE_INFO            = YES\r
+\r
+# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen \r
+# will sort the (detailed) documentation of file and class members \r
+# alphabetically by member name. If set to NO the members will appear in \r
+# declaration order.\r
+\r
+SORT_MEMBER_DOCS       = YES\r
+\r
+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the \r
+# brief documentation of file, namespace and class members alphabetically \r
+# by member name. If set to NO (the default) the members will appear in \r
+# declaration order.\r
+\r
+SORT_BRIEF_DOCS        = NO\r
+\r
+# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the \r
+# hierarchy of group names into alphabetical order. If set to NO (the default) \r
+# the group names will appear in their defined order.\r
+\r
+SORT_GROUP_NAMES       = NO\r
+\r
+# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be \r
+# sorted by fully-qualified names, including namespaces. If set to \r
+# NO (the default), the class list will be sorted only by class name, \r
+# not including the namespace part. \r
+# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.\r
+# Note: This option applies only to the class list, not to the \r
+# alphabetical list.\r
+\r
+SORT_BY_SCOPE_NAME     = NO\r
+\r
+# The GENERATE_TODOLIST tag can be used to enable (YES) or \r
+# disable (NO) the todo list. This list is created by putting \todo \r
+# commands in the documentation.\r
+\r
+GENERATE_TODOLIST      = NO\r
+\r
+# The GENERATE_TESTLIST tag can be used to enable (YES) or \r
+# disable (NO) the test list. This list is created by putting \test \r
+# commands in the documentation.\r
+\r
+GENERATE_TESTLIST      = NO\r
+\r
+# The GENERATE_BUGLIST tag can be used to enable (YES) or \r
+# disable (NO) the bug list. This list is created by putting \bug \r
+# commands in the documentation.\r
+\r
+GENERATE_BUGLIST       = NO\r
+\r
+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or \r
+# disable (NO) the deprecated list. This list is created by putting \r
+# \deprecated commands in the documentation.\r
+\r
+GENERATE_DEPRECATEDLIST= YES\r
+\r
+# The ENABLED_SECTIONS tag can be used to enable conditional \r
+# documentation sections, marked by \if sectionname ... \endif.\r
+\r
+ENABLED_SECTIONS       = \r
+\r
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines \r
+# the initial value of a variable or define consists of for it to appear in \r
+# the documentation. If the initializer consists of more lines than specified \r
+# here it will be hidden. Use a value of 0 to hide initializers completely. \r
+# The appearance of the initializer of individual variables and defines in the \r
+# documentation can be controlled using \showinitializer or \hideinitializer \r
+# command in the documentation regardless of this setting.\r
+\r
+MAX_INITIALIZER_LINES  = 30\r
+\r
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated \r
+# at the bottom of the documentation of classes and structs. If set to YES the \r
+# list will mention the files that were used to generate the documentation.\r
+\r
+SHOW_USED_FILES        = YES\r
+\r
+# If the sources in your project are distributed over multiple directories \r
+# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy \r
+# in the documentation. The default is NO.\r
+\r
+SHOW_DIRECTORIES       = YES\r
+\r
+# Set the SHOW_FILES tag to NO to disable the generation of the Files page.\r
+# This will remove the Files entry from the Quick Index and from the \r
+# Folder Tree View (if specified). The default is YES.\r
+\r
+SHOW_FILES             = YES\r
+\r
+# Set the SHOW_NAMESPACES tag to NO to disable the generation of the \r
+# Namespaces page.  This will remove the Namespaces entry from the Quick Index\r
+# and from the Folder Tree View (if specified). The default is YES.\r
+\r
+SHOW_NAMESPACES        = YES\r
+\r
+# The FILE_VERSION_FILTER tag can be used to specify a program or script that \r
+# doxygen should invoke to get the current version for each file (typically from \r
+# the version control system). Doxygen will invoke the program by executing (via \r
+# popen()) the command <command> <input-file>, where <command> is the value of \r
+# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file \r
+# provided by doxygen. Whatever the program writes to standard output \r
+# is used as the file version. See the manual for examples.\r
+\r
+FILE_VERSION_FILTER    = \r
+\r
+# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by \r
+# doxygen. The layout file controls the global structure of the generated output files \r
+# in an output format independent way. The create the layout file that represents \r
+# doxygen's defaults, run doxygen with the -l option. You can optionally specify a \r
+# file name after the option, if omitted DoxygenLayout.xml will be used as the name \r
+# of the layout file.\r
+\r
+LAYOUT_FILE            = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to warning and progress messages\r
+#---------------------------------------------------------------------------\r
+\r
+# The QUIET tag can be used to turn on/off the messages that are generated \r
+# by doxygen. Possible values are YES and NO. If left blank NO is used.\r
+\r
+QUIET                  = YES\r
+\r
+# The WARNINGS tag can be used to turn on/off the warning messages that are \r
+# generated by doxygen. Possible values are YES and NO. If left blank \r
+# NO is used.\r
+\r
+WARNINGS               = YES\r
+\r
+# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings \r
+# for undocumented members. If EXTRACT_ALL is set to YES then this flag will \r
+# automatically be disabled.\r
+\r
+WARN_IF_UNDOCUMENTED   = YES\r
+\r
+# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for \r
+# potential errors in the documentation, such as not documenting some \r
+# parameters in a documented function, or documenting parameters that \r
+# don't exist or using markup commands wrongly.\r
+\r
+WARN_IF_DOC_ERROR      = YES\r
+\r
+# This WARN_NO_PARAMDOC option can be abled to get warnings for \r
+# functions that are documented, but have no documentation for their parameters \r
+# or return value. If set to NO (the default) doxygen will only warn about \r
+# wrong or incomplete parameter documentation, but not about the absence of \r
+# documentation.\r
+\r
+WARN_NO_PARAMDOC       = YES\r
+\r
+# The WARN_FORMAT tag determines the format of the warning messages that \r
+# doxygen can produce. The string should contain the $file, $line, and $text \r
+# tags, which will be replaced by the file and line number from which the \r
+# warning originated and the warning text. Optionally the format may contain \r
+# $version, which will be replaced by the version of the file (if it could \r
+# be obtained via FILE_VERSION_FILTER)\r
+\r
+WARN_FORMAT            = "$file:$line: $text"\r
+\r
+# The WARN_LOGFILE tag can be used to specify a file to which warning \r
+# and error messages should be written. If left blank the output is written \r
+# to stderr.\r
+\r
+WARN_LOGFILE           = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the input files\r
+#---------------------------------------------------------------------------\r
+\r
+# The INPUT tag can be used to specify the files and/or directories that contain \r
+# documented source files. You may enter file names like "myfile.cpp" or \r
+# directories like "/usr/src/myproject". Separate the files or directories \r
+# with spaces.\r
+\r
+INPUT                  = ./\r
+\r
+# This tag can be used to specify the character encoding of the source files \r
+# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is \r
+# also the default input encoding. Doxygen uses libiconv (or the iconv built \r
+# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for \r
+# the list of possible encodings.\r
+\r
+INPUT_ENCODING         = UTF-8\r
+\r
+# If the value of the INPUT tag contains directories, you can use the \r
+# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \r
+# and *.h) to filter out the source-files in the directories. If left \r
+# blank the following patterns are tested: \r
+# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx \r
+# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90\r
+\r
+FILE_PATTERNS          = *.h \\r
+                         *.c \\r
+                                                *.txt\r
+\r
+# The RECURSIVE tag can be used to turn specify whether or not subdirectories \r
+# should be searched for input files as well. Possible values are YES and NO. \r
+# If left blank NO is used.\r
+\r
+RECURSIVE              = YES\r
+\r
+# The EXCLUDE tag can be used to specify files and/or directories that should \r
+# excluded from the INPUT source files. This way you can easily exclude a \r
+# subdirectory from a directory tree whose root is specified with the INPUT tag.\r
+\r
+EXCLUDE                = \r
+\r
+# The EXCLUDE_SYMLINKS tag can be used select whether or not files or \r
+# directories that are symbolic links (a Unix filesystem feature) are excluded \r
+# from the input.\r
+\r
+EXCLUDE_SYMLINKS       = NO\r
+\r
+# If the value of the INPUT tag contains directories, you can use the \r
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude \r
+# certain files from those directories. Note that the wildcards are matched \r
+# against the file with absolute path, so to exclude all test directories \r
+# for example use the pattern */test/*\r
+\r
+EXCLUDE_PATTERNS       = */LowLevel/USBMode.h\r
+\r
+# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names \r
+# (namespaces, classes, functions, etc.) that should be excluded from the \r
+# output. The symbol name can be a fully qualified name, a word, or if the \r
+# wildcard * is used, a substring. Examples: ANamespace, AClass, \r
+# AClass::ANamespace, ANamespace::*Test\r
+\r
+EXCLUDE_SYMBOLS        = __*\r
+\r
+# The EXAMPLE_PATH tag can be used to specify one or more files or \r
+# directories that contain example code fragments that are included (see \r
+# the \include command).\r
+\r
+EXAMPLE_PATH           = \r
+\r
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the \r
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \r
+# and *.h) to filter out the source-files in the directories. If left \r
+# blank all files are included.\r
+\r
+EXAMPLE_PATTERNS       = *\r
+\r
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be \r
+# searched for input files to be used with the \include or \dontinclude \r
+# commands irrespective of the value of the RECURSIVE tag. \r
+# Possible values are YES and NO. If left blank NO is used.\r
+\r
+EXAMPLE_RECURSIVE      = NO\r
+\r
+# The IMAGE_PATH tag can be used to specify one or more files or \r
+# directories that contain image that are included in the documentation (see \r
+# the \image command).\r
+\r
+IMAGE_PATH             = \r
+\r
+# The INPUT_FILTER tag can be used to specify a program that doxygen should \r
+# invoke to filter for each input file. Doxygen will invoke the filter program \r
+# by executing (via popen()) the command <filter> <input-file>, where <filter> \r
+# is the value of the INPUT_FILTER tag, and <input-file> is the name of an \r
+# input file. Doxygen will then use the output that the filter program writes \r
+# to standard output.  If FILTER_PATTERNS is specified, this tag will be \r
+# ignored.\r
+\r
+INPUT_FILTER           = \r
+\r
+# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern \r
+# basis.  Doxygen will compare the file name with each pattern and apply the \r
+# filter if there is a match.  The filters are a list of the form: \r
+# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further \r
+# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER \r
+# is applied to all files.\r
+\r
+FILTER_PATTERNS        = \r
+\r
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using \r
+# INPUT_FILTER) will be used to filter the input files when producing source \r
+# files to browse (i.e. when SOURCE_BROWSER is set to YES).\r
+\r
+FILTER_SOURCE_FILES    = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to source browsing\r
+#---------------------------------------------------------------------------\r
+\r
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will \r
+# be generated. Documented entities will be cross-referenced with these sources. \r
+# Note: To get rid of all source code in the generated output, make sure also \r
+# VERBATIM_HEADERS is set to NO.\r
+\r
+SOURCE_BROWSER         = NO\r
+\r
+# Setting the INLINE_SOURCES tag to YES will include the body \r
+# of functions and classes directly in the documentation.\r
+\r
+INLINE_SOURCES         = NO\r
+\r
+# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct \r
+# doxygen to hide any special comment blocks from generated source code \r
+# fragments. Normal C and C++ comments will always remain visible.\r
+\r
+STRIP_CODE_COMMENTS    = YES\r
+\r
+# If the REFERENCED_BY_RELATION tag is set to YES \r
+# then for each documented function all documented \r
+# functions referencing it will be listed.\r
+\r
+REFERENCED_BY_RELATION = NO\r
+\r
+# If the REFERENCES_RELATION tag is set to YES \r
+# then for each documented function all documented entities \r
+# called/used by that function will be listed.\r
+\r
+REFERENCES_RELATION    = NO\r
+\r
+# If the REFERENCES_LINK_SOURCE tag is set to YES (the default)\r
+# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from\r
+# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will\r
+# link to the source code.  Otherwise they will link to the documentstion.\r
+\r
+REFERENCES_LINK_SOURCE = NO\r
+\r
+# If the USE_HTAGS tag is set to YES then the references to source code \r
+# will point to the HTML generated by the htags(1) tool instead of doxygen \r
+# built-in source browser. The htags tool is part of GNU's global source \r
+# tagging system (see http://www.gnu.org/software/global/global.html). You \r
+# will need version 4.8.6 or higher.\r
+\r
+USE_HTAGS              = NO\r
+\r
+# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen \r
+# will generate a verbatim copy of the header file for each class for \r
+# which an include is specified. Set to NO to disable this.\r
+\r
+VERBATIM_HEADERS       = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the alphabetical class index\r
+#---------------------------------------------------------------------------\r
+\r
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index \r
+# of all compounds will be generated. Enable this if the project \r
+# contains a lot of classes, structs, unions or interfaces.\r
+\r
+ALPHABETICAL_INDEX     = YES\r
+\r
+# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then \r
+# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns \r
+# in which this list will be split (can be a number in the range [1..20])\r
+\r
+COLS_IN_ALPHA_INDEX    = 5\r
+\r
+# In case all classes in a project start with a common prefix, all \r
+# classes will be put under the same header in the alphabetical index. \r
+# The IGNORE_PREFIX tag can be used to specify one or more prefixes that \r
+# should be ignored while generating the index headers.\r
+\r
+IGNORE_PREFIX          = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the HTML output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_HTML tag is set to YES (the default) Doxygen will \r
+# generate HTML output.\r
+\r
+GENERATE_HTML          = YES\r
+\r
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `html' will be used as the default path.\r
+\r
+HTML_OUTPUT            = html\r
+\r
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for \r
+# each generated HTML page (for example: .htm,.php,.asp). If it is left blank \r
+# doxygen will generate files with .html extension.\r
+\r
+HTML_FILE_EXTENSION    = .html\r
+\r
+# The HTML_HEADER tag can be used to specify a personal HTML header for \r
+# each generated HTML page. If it is left blank doxygen will generate a \r
+# standard header.\r
+\r
+HTML_HEADER            = \r
+\r
+# The HTML_FOOTER tag can be used to specify a personal HTML footer for \r
+# each generated HTML page. If it is left blank doxygen will generate a \r
+# standard footer.\r
+\r
+HTML_FOOTER            = \r
+\r
+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading \r
+# style sheet that is used by each HTML page. It can be used to \r
+# fine-tune the look of the HTML output. If the tag is left blank doxygen \r
+# will generate a default style sheet. Note that doxygen will try to copy \r
+# the style sheet file to the HTML output directory, so don't put your own \r
+# stylesheet in the HTML output directory as well, or it will be erased!\r
+\r
+HTML_STYLESHEET        = \r
+\r
+# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, \r
+# files or namespaces will be aligned in HTML using tables. If set to \r
+# NO a bullet list will be used.\r
+\r
+HTML_ALIGN_MEMBERS     = YES\r
+\r
+# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML \r
+# documentation will contain sections that can be hidden and shown after the \r
+# page has loaded. For this to work a browser that supports \r
+# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox \r
+# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari).\r
+\r
+HTML_DYNAMIC_SECTIONS  = YES\r
+\r
+# If the GENERATE_DOCSET tag is set to YES, additional index files \r
+# will be generated that can be used as input for Apple's Xcode 3 \r
+# integrated development environment, introduced with OSX 10.5 (Leopard). \r
+# To create a documentation set, doxygen will generate a Makefile in the \r
+# HTML output directory. Running make will produce the docset in that \r
+# directory and running "make install" will install the docset in \r
+# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find \r
+# it at startup. \r
+# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information.\r
+\r
+GENERATE_DOCSET        = NO\r
+\r
+# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the \r
+# feed. A documentation feed provides an umbrella under which multiple \r
+# documentation sets from a single provider (such as a company or product suite) \r
+# can be grouped.\r
+\r
+DOCSET_FEEDNAME        = "Doxygen generated docs"\r
+\r
+# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that \r
+# should uniquely identify the documentation set bundle. This should be a \r
+# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen \r
+# will append .docset to the name.\r
+\r
+DOCSET_BUNDLE_ID       = org.doxygen.Project\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, additional index files \r
+# will be generated that can be used as input for tools like the \r
+# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) \r
+# of the generated HTML documentation.\r
+\r
+GENERATE_HTMLHELP      = NO\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can \r
+# be used to specify the file name of the resulting .chm file. You \r
+# can add a path in front of the file if the result should not be \r
+# written to the html output directory.\r
+\r
+CHM_FILE               = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can \r
+# be used to specify the location (absolute path including file name) of \r
+# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run \r
+# the HTML help compiler on the generated index.hhp.\r
+\r
+HHC_LOCATION           = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag \r
+# controls if a separate .chi index file is generated (YES) or that \r
+# it should be included in the master .chm file (NO).\r
+\r
+GENERATE_CHI           = NO\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING\r
+# is used to encode HtmlHelp index (hhk), content (hhc) and project file\r
+# content.\r
+\r
+CHM_INDEX_ENCODING     = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag \r
+# controls whether a binary table of contents is generated (YES) or a \r
+# normal table of contents (NO) in the .chm file.\r
+\r
+BINARY_TOC             = NO\r
+\r
+# The TOC_EXPAND flag can be set to YES to add extra items for group members \r
+# to the contents of the HTML help documentation and to the tree view.\r
+\r
+TOC_EXPAND             = YES\r
+\r
+# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER \r
+# are set, an additional index file will be generated that can be used as input for \r
+# Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated \r
+# HTML documentation.\r
+\r
+GENERATE_QHP           = NO\r
+\r
+# If the QHG_LOCATION tag is specified, the QCH_FILE tag can \r
+# be used to specify the file name of the resulting .qch file. \r
+# The path specified is relative to the HTML output folder.\r
+\r
+QCH_FILE               = \r
+\r
+# The QHP_NAMESPACE tag specifies the namespace to use when generating \r
+# Qt Help Project output. For more information please see \r
+# <a href="http://doc.trolltech.com/qthelpproject.html#namespace">Qt Help Project / Namespace</a>.\r
+\r
+QHP_NAMESPACE          = org.doxygen.Project\r
+\r
+# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating \r
+# Qt Help Project output. For more information please see \r
+# <a href="http://doc.trolltech.com/qthelpproject.html#virtual-folders">Qt Help Project / Virtual Folders</a>.\r
+\r
+QHP_VIRTUAL_FOLDER     = doc\r
+\r
+# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can \r
+# be used to specify the location of Qt's qhelpgenerator. \r
+# If non-empty doxygen will try to run qhelpgenerator on the generated \r
+# .qhp file .\r
+\r
+QHG_LOCATION           = \r
+\r
+# The DISABLE_INDEX tag can be used to turn on/off the condensed index at \r
+# top of each HTML page. The value NO (the default) enables the index and \r
+# the value YES disables it.\r
+\r
+DISABLE_INDEX          = NO\r
+\r
+# This tag can be used to set the number of enum values (range [1..20]) \r
+# that doxygen will group on one line in the generated HTML documentation.\r
+\r
+ENUM_VALUES_PER_LINE   = 1\r
+\r
+# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index\r
+# structure should be generated to display hierarchical information.\r
+# If the tag value is set to FRAME, a side panel will be generated\r
+# containing a tree-like index structure (just like the one that \r
+# is generated for HTML Help). For this to work a browser that supports \r
+# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, \r
+# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are \r
+# probably better off using the HTML help feature. Other possible values \r
+# for this tag are: HIERARCHIES, which will generate the Groups, Directories,\r
+# and Class Hierarchy pages using a tree view instead of an ordered list;\r
+# ALL, which combines the behavior of FRAME and HIERARCHIES; and NONE, which\r
+# disables this behavior completely. For backwards compatibility with previous\r
+# releases of Doxygen, the values YES and NO are equivalent to FRAME and NONE\r
+# respectively.\r
+\r
+GENERATE_TREEVIEW      = YES\r
+\r
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be \r
+# used to set the initial width (in pixels) of the frame in which the tree \r
+# is shown.\r
+\r
+TREEVIEW_WIDTH         = 250\r
+\r
+# Use this tag to change the font size of Latex formulas included \r
+# as images in the HTML documentation. The default is 10. Note that \r
+# when you change the font size after a successful doxygen run you need \r
+# to manually remove any form_*.png images from the HTML output directory \r
+# to force them to be regenerated.\r
+\r
+FORMULA_FONTSIZE       = 10\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the LaTeX output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will \r
+# generate Latex output.\r
+\r
+GENERATE_LATEX         = NO\r
+\r
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `latex' will be used as the default path.\r
+\r
+LATEX_OUTPUT           = latex\r
+\r
+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be \r
+# invoked. If left blank `latex' will be used as the default command name.\r
+\r
+LATEX_CMD_NAME         = latex\r
+\r
+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to \r
+# generate index for LaTeX. If left blank `makeindex' will be used as the \r
+# default command name.\r
+\r
+MAKEINDEX_CMD_NAME     = makeindex\r
+\r
+# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact \r
+# LaTeX documents. This may be useful for small projects and may help to \r
+# save some trees in general.\r
+\r
+COMPACT_LATEX          = NO\r
+\r
+# The PAPER_TYPE tag can be used to set the paper type that is used \r
+# by the printer. Possible values are: a4, a4wide, letter, legal and \r
+# executive. If left blank a4wide will be used.\r
+\r
+PAPER_TYPE             = a4wide\r
+\r
+# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX \r
+# packages that should be included in the LaTeX output.\r
+\r
+EXTRA_PACKAGES         = \r
+\r
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for \r
+# the generated latex document. The header should contain everything until \r
+# the first chapter. If it is left blank doxygen will generate a \r
+# standard header. Notice: only use this tag if you know what you are doing!\r
+\r
+LATEX_HEADER           = \r
+\r
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated \r
+# is prepared for conversion to pdf (using ps2pdf). The pdf file will \r
+# contain links (just like the HTML output) instead of page references \r
+# This makes the output suitable for online browsing using a pdf viewer.\r
+\r
+PDF_HYPERLINKS         = YES\r
+\r
+# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of \r
+# plain latex in the generated Makefile. Set this option to YES to get a \r
+# higher quality PDF documentation.\r
+\r
+USE_PDFLATEX           = YES\r
+\r
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. \r
+# command to the generated LaTeX files. This will instruct LaTeX to keep \r
+# running if errors occur, instead of asking the user for help. \r
+# This option is also used when generating formulas in HTML.\r
+\r
+LATEX_BATCHMODE        = NO\r
+\r
+# If LATEX_HIDE_INDICES is set to YES then doxygen will not \r
+# include the index chapters (such as File Index, Compound Index, etc.) \r
+# in the output.\r
+\r
+LATEX_HIDE_INDICES     = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the RTF output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output \r
+# The RTF output is optimized for Word 97 and may not look very pretty with \r
+# other RTF readers or editors.\r
+\r
+GENERATE_RTF           = NO\r
+\r
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `rtf' will be used as the default path.\r
+\r
+RTF_OUTPUT             = rtf\r
+\r
+# If the COMPACT_RTF tag is set to YES Doxygen generates more compact \r
+# RTF documents. This may be useful for small projects and may help to \r
+# save some trees in general.\r
+\r
+COMPACT_RTF            = NO\r
+\r
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated \r
+# will contain hyperlink fields. The RTF file will \r
+# contain links (just like the HTML output) instead of page references. \r
+# This makes the output suitable for online browsing using WORD or other \r
+# programs which support those fields. \r
+# Note: wordpad (write) and others do not support links.\r
+\r
+RTF_HYPERLINKS         = NO\r
+\r
+# Load stylesheet definitions from file. Syntax is similar to doxygen's \r
+# config file, i.e. a series of assignments. You only have to provide \r
+# replacements, missing definitions are set to their default value.\r
+\r
+RTF_STYLESHEET_FILE    = \r
+\r
+# Set optional variables used in the generation of an rtf document. \r
+# Syntax is similar to doxygen's config file.\r
+\r
+RTF_EXTENSIONS_FILE    = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the man page output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_MAN tag is set to YES (the default) Doxygen will \r
+# generate man pages\r
+\r
+GENERATE_MAN           = NO\r
+\r
+# The MAN_OUTPUT tag is used to specify where the man pages will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `man' will be used as the default path.\r
+\r
+MAN_OUTPUT             = man\r
+\r
+# The MAN_EXTENSION tag determines the extension that is added to \r
+# the generated man pages (default is the subroutine's section .3)\r
+\r
+MAN_EXTENSION          = .3\r
+\r
+# If the MAN_LINKS tag is set to YES and Doxygen generates man output, \r
+# then it will generate one additional man file for each entity \r
+# documented in the real man page(s). These additional files \r
+# only source the real man page, but without them the man command \r
+# would be unable to find the correct page. The default is NO.\r
+\r
+MAN_LINKS              = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the XML output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_XML tag is set to YES Doxygen will \r
+# generate an XML file that captures the structure of \r
+# the code including all documentation.\r
+\r
+GENERATE_XML           = NO\r
+\r
+# The XML_OUTPUT tag is used to specify where the XML pages will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `xml' will be used as the default path.\r
+\r
+XML_OUTPUT             = xml\r
+\r
+# The XML_SCHEMA tag can be used to specify an XML schema, \r
+# which can be used by a validating XML parser to check the \r
+# syntax of the XML files.\r
+\r
+XML_SCHEMA             = \r
+\r
+# The XML_DTD tag can be used to specify an XML DTD, \r
+# which can be used by a validating XML parser to check the \r
+# syntax of the XML files.\r
+\r
+XML_DTD                = \r
+\r
+# If the XML_PROGRAMLISTING tag is set to YES Doxygen will \r
+# dump the program listings (including syntax highlighting \r
+# and cross-referencing information) to the XML output. Note that \r
+# enabling this will significantly increase the size of the XML output.\r
+\r
+XML_PROGRAMLISTING     = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options for the AutoGen Definitions output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will \r
+# generate an AutoGen Definitions (see autogen.sf.net) file \r
+# that captures the structure of the code including all \r
+# documentation. Note that this feature is still experimental \r
+# and incomplete at the moment.\r
+\r
+GENERATE_AUTOGEN_DEF   = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the Perl module output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_PERLMOD tag is set to YES Doxygen will \r
+# generate a Perl module file that captures the structure of \r
+# the code including all documentation. Note that this \r
+# feature is still experimental and incomplete at the \r
+# moment.\r
+\r
+GENERATE_PERLMOD       = NO\r
+\r
+# If the PERLMOD_LATEX tag is set to YES Doxygen will generate \r
+# the necessary Makefile rules, Perl scripts and LaTeX code to be able \r
+# to generate PDF and DVI output from the Perl module output.\r
+\r
+PERLMOD_LATEX          = NO\r
+\r
+# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be \r
+# nicely formatted so it can be parsed by a human reader.  This is useful \r
+# if you want to understand what is going on.  On the other hand, if this \r
+# tag is set to NO the size of the Perl module output will be much smaller \r
+# and Perl will parse it just the same.\r
+\r
+PERLMOD_PRETTY         = YES\r
+\r
+# The names of the make variables in the generated doxyrules.make file \r
+# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. \r
+# This is useful so different doxyrules.make files included by the same \r
+# Makefile don't overwrite each other's variables.\r
+\r
+PERLMOD_MAKEVAR_PREFIX = \r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration options related to the preprocessor   \r
+#---------------------------------------------------------------------------\r
+\r
+# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will \r
+# evaluate all C-preprocessor directives found in the sources and include \r
+# files.\r
+\r
+ENABLE_PREPROCESSING   = YES\r
+\r
+# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro \r
+# names in the source code. If set to NO (the default) only conditional \r
+# compilation will be performed. Macro expansion can be done in a controlled \r
+# way by setting EXPAND_ONLY_PREDEF to YES.\r
+\r
+MACRO_EXPANSION        = YES\r
+\r
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES \r
+# then the macro expansion is limited to the macros specified with the \r
+# PREDEFINED and EXPAND_AS_DEFINED tags.\r
+\r
+EXPAND_ONLY_PREDEF     = YES\r
+\r
+# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files \r
+# in the INCLUDE_PATH (see below) will be search if a #include is found.\r
+\r
+SEARCH_INCLUDES        = YES\r
+\r
+# The INCLUDE_PATH tag can be used to specify one or more directories that \r
+# contain include files that are not input files but should be processed by \r
+# the preprocessor.\r
+\r
+INCLUDE_PATH           = \r
+\r
+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard \r
+# patterns (like *.h and *.hpp) to filter out the header-files in the \r
+# directories. If left blank, the patterns specified with FILE_PATTERNS will \r
+# be used.\r
+\r
+INCLUDE_FILE_PATTERNS  = \r
+\r
+# The PREDEFINED tag can be used to specify one or more macro names that \r
+# are defined before the preprocessor is started (similar to the -D option of \r
+# gcc). The argument of the tag is a list of macros of the form: name \r
+# or name=definition (no spaces). If the definition and the = are \r
+# omitted =1 is assumed. To prevent a macro definition from being \r
+# undefined via #undef or recursively expanded use the := operator \r
+# instead of the = operator.\r
+\r
+PREDEFINED             = __DOXYGEN__\r
+\r
+# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then \r
+# this tag can be used to specify a list of macro names that should be expanded. \r
+# The macro definition that is found in the sources will be used. \r
+# Use the PREDEFINED tag if you want to use a different macro definition.\r
+\r
+EXPAND_AS_DEFINED      = BUTTLOADTAG\r
+\r
+# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then \r
+# doxygen's preprocessor will remove all function-like macros that are alone \r
+# on a line, have an all uppercase name, and do not end with a semicolon. Such \r
+# function macros are typically used for boiler-plate code, and will confuse \r
+# the parser if not removed.\r
+\r
+SKIP_FUNCTION_MACROS   = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration::additions related to external references   \r
+#---------------------------------------------------------------------------\r
+\r
+# The TAGFILES option can be used to specify one or more tagfiles. \r
+# Optionally an initial location of the external documentation \r
+# can be added for each tagfile. The format of a tag file without \r
+# this location is as follows: \r
+#   TAGFILES = file1 file2 ... \r
+# Adding location for the tag files is done as follows: \r
+#   TAGFILES = file1=loc1 "file2 = loc2" ... \r
+# where "loc1" and "loc2" can be relative or absolute paths or \r
+# URLs. If a location is present for each tag, the installdox tool \r
+# does not have to be run to correct the links.\r
+# Note that each tag file must have a unique name\r
+# (where the name does NOT include the path)\r
+# If a tag file is not located in the directory in which doxygen \r
+# is run, you must also specify the path to the tagfile here.\r
+\r
+TAGFILES               = \r
+\r
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create \r
+# a tag file that is based on the input files it reads.\r
+\r
+GENERATE_TAGFILE       = \r
+\r
+# If the ALLEXTERNALS tag is set to YES all external classes will be listed \r
+# in the class index. If set to NO only the inherited external classes \r
+# will be listed.\r
+\r
+ALLEXTERNALS           = NO\r
+\r
+# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed \r
+# in the modules index. If set to NO, only the current project's groups will \r
+# be listed.\r
+\r
+EXTERNAL_GROUPS        = YES\r
+\r
+# The PERL_PATH should be the absolute path and name of the perl script \r
+# interpreter (i.e. the result of `which perl').\r
+\r
+PERL_PATH              = /usr/bin/perl\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration options related to the dot tool   \r
+#---------------------------------------------------------------------------\r
+\r
+# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will \r
+# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base \r
+# or super classes. Setting the tag to NO turns the diagrams off. Note that \r
+# this option is superseded by the HAVE_DOT option below. This is only a \r
+# fallback. It is recommended to install and use dot, since it yields more \r
+# powerful graphs.\r
+\r
+CLASS_DIAGRAMS         = NO\r
+\r
+# You can define message sequence charts within doxygen comments using the \msc \r
+# command. Doxygen will then run the mscgen tool (see \r
+# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the \r
+# documentation. The MSCGEN_PATH tag allows you to specify the directory where \r
+# the mscgen tool resides. If left empty the tool is assumed to be found in the \r
+# default search path.\r
+\r
+MSCGEN_PATH            = \r
+\r
+# If set to YES, the inheritance and collaboration graphs will hide \r
+# inheritance and usage relations if the target is undocumented \r
+# or is not a class.\r
+\r
+HIDE_UNDOC_RELATIONS   = YES\r
+\r
+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is \r
+# available from the path. This tool is part of Graphviz, a graph visualization \r
+# toolkit from AT&T and Lucent Bell Labs. The other options in this section \r
+# have no effect if this option is set to NO (the default)\r
+\r
+HAVE_DOT               = NO\r
+\r
+# By default doxygen will write a font called FreeSans.ttf to the output \r
+# directory and reference it in all dot files that doxygen generates. This \r
+# font does not include all possible unicode characters however, so when you need \r
+# these (or just want a differently looking font) you can specify the font name \r
+# using DOT_FONTNAME. You need need to make sure dot is able to find the font, \r
+# which can be done by putting it in a standard location or by setting the \r
+# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory \r
+# containing the font.\r
+\r
+DOT_FONTNAME           = FreeSans\r
+\r
+# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. \r
+# The default size is 10pt.\r
+\r
+DOT_FONTSIZE           = 10\r
+\r
+# By default doxygen will tell dot to use the output directory to look for the \r
+# FreeSans.ttf font (which doxygen will put there itself). If you specify a \r
+# different font using DOT_FONTNAME you can set the path where dot \r
+# can find it using this tag.\r
+\r
+DOT_FONTPATH           = \r
+\r
+# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for each documented class showing the direct and \r
+# indirect inheritance relations. Setting this tag to YES will force the \r
+# the CLASS_DIAGRAMS tag to NO.\r
+\r
+CLASS_GRAPH            = NO\r
+\r
+# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for each documented class showing the direct and \r
+# indirect implementation dependencies (inheritance, containment, and \r
+# class references variables) of the class with other documented classes.\r
+\r
+COLLABORATION_GRAPH    = NO\r
+\r
+# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for groups, showing the direct groups dependencies\r
+\r
+GROUP_GRAPHS           = NO\r
+\r
+# If the UML_LOOK tag is set to YES doxygen will generate inheritance and \r
+# collaboration diagrams in a style similar to the OMG's Unified Modeling \r
+# Language.\r
+\r
+UML_LOOK               = NO\r
+\r
+# If set to YES, the inheritance and collaboration graphs will show the \r
+# relations between templates and their instances.\r
+\r
+TEMPLATE_RELATIONS     = NO\r
+\r
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT \r
+# tags are set to YES then doxygen will generate a graph for each documented \r
+# file showing the direct and indirect include dependencies of the file with \r
+# other documented files.\r
+\r
+INCLUDE_GRAPH          = NO\r
+\r
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and \r
+# HAVE_DOT tags are set to YES then doxygen will generate a graph for each \r
+# documented header file showing the documented files that directly or \r
+# indirectly include this file.\r
+\r
+INCLUDED_BY_GRAPH      = NO\r
+\r
+# If the CALL_GRAPH and HAVE_DOT options are set to YES then \r
+# doxygen will generate a call dependency graph for every global function \r
+# or class method. Note that enabling this option will significantly increase \r
+# the time of a run. So in most cases it will be better to enable call graphs \r
+# for selected functions only using the \callgraph command.\r
+\r
+CALL_GRAPH             = NO\r
+\r
+# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then \r
+# doxygen will generate a caller dependency graph for every global function \r
+# or class method. Note that enabling this option will significantly increase \r
+# the time of a run. So in most cases it will be better to enable caller \r
+# graphs for selected functions only using the \callergraph command.\r
+\r
+CALLER_GRAPH           = NO\r
+\r
+# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen \r
+# will graphical hierarchy of all classes instead of a textual one.\r
+\r
+GRAPHICAL_HIERARCHY    = NO\r
+\r
+# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES \r
+# then doxygen will show the dependencies a directory has on other directories \r
+# in a graphical way. The dependency relations are determined by the #include\r
+# relations between the files in the directories.\r
+\r
+DIRECTORY_GRAPH        = NO\r
+\r
+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images \r
+# generated by dot. Possible values are png, jpg, or gif\r
+# If left blank png will be used.\r
+\r
+DOT_IMAGE_FORMAT       = png\r
+\r
+# The tag DOT_PATH can be used to specify the path where the dot tool can be \r
+# found. If left blank, it is assumed the dot tool can be found in the path.\r
+\r
+DOT_PATH               = "C:/Program Files/Graphviz2.18/bin"\r
+\r
+# The DOTFILE_DIRS tag can be used to specify one or more directories that \r
+# contain dot files that are included in the documentation (see the \r
+# \dotfile command).\r
+\r
+DOTFILE_DIRS           = \r
+\r
+# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of \r
+# nodes that will be shown in the graph. If the number of nodes in a graph \r
+# becomes larger than this value, doxygen will truncate the graph, which is \r
+# visualized by representing a node as a red box. Note that doxygen if the \r
+# number of direct children of the root node in a graph is already larger than \r
+# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note \r
+# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.\r
+\r
+DOT_GRAPH_MAX_NODES    = 15\r
+\r
+# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the \r
+# graphs generated by dot. A depth value of 3 means that only nodes reachable \r
+# from the root by following a path via at most 3 edges will be shown. Nodes \r
+# that lay further from the root node will be omitted. Note that setting this \r
+# option to 1 or 2 may greatly reduce the computation time needed for large \r
+# code bases. Also note that the size of a graph can be further restricted by \r
+# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.\r
+\r
+MAX_DOT_GRAPH_DEPTH    = 2\r
+\r
+# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent \r
+# background. This is disabled by default, because dot on Windows does not \r
+# seem to support this out of the box. Warning: Depending on the platform used, \r
+# enabling this option may lead to badly anti-aliased labels on the edges of \r
+# a graph (i.e. they become hard to read).\r
+\r
+DOT_TRANSPARENT        = YES\r
+\r
+# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output \r
+# files in one run (i.e. multiple -o and -T options on the command line). This \r
+# makes dot run faster, but since only newer versions of dot (>1.8.10) \r
+# support this, this feature is disabled by default.\r
+\r
+DOT_MULTI_TARGETS      = NO\r
+\r
+# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will \r
+# generate a legend page explaining the meaning of the various boxes and \r
+# arrows in the dot generated graphs.\r
+\r
+GENERATE_LEGEND        = YES\r
+\r
+# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will \r
+# remove the intermediate dot files that are used to generate \r
+# the various graphs.\r
+\r
+DOT_CLEANUP            = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration::additions related to the search engine   \r
+#---------------------------------------------------------------------------\r
+\r
+# The SEARCHENGINE tag specifies whether or not a search engine should be \r
+# used. If set to NO the values of all tags below this one will be ignored.\r
+\r
+SEARCHENGINE           = NO\r
diff --git a/Demos/Device/ClassDriver/GenericHID/GenericHID.aps b/Demos/Device/ClassDriver/GenericHID/GenericHID.aps
new file mode 100644 (file)
index 0000000..ec824c7
--- /dev/null
@@ -0,0 +1 @@
+<AVRStudio><MANAGEMENT><ProjectName>GenericHID</ProjectName><Created>29-Mar-2009 23:19:24</Created><LastEdit>29-Mar-2009 23:19:40</LastEdit><ICON>241</ICON><ProjectType>0</ProjectType><Created>29-Mar-2009 23:19:24</Created><Version>4</Version><Build>4, 16, 0, 626</Build><ProjectTypeName>AVR GCC</ProjectTypeName></MANAGEMENT><CODE_CREATION><ObjectFile></ObjectFile><EntryFile></EntryFile><SaveFolder>C:\Users\Dean\Documents\Electronics\Projects\WORK\LUFAWORK\Demos\Device\GenericHID\</SaveFolder></CODE_CREATION><DEBUG_TARGET><CURRENT_TARGET>JTAGICE mkII</CURRENT_TARGET><CURRENT_PART>AT90USB1287.xml</CURRENT_PART><BREAKPOINTS></BREAKPOINTS><IO_EXPAND><HIDE>false</HIDE></IO_EXPAND><REGISTERNAMES><Register>R00</Register><Register>R01</Register><Register>R02</Register><Register>R03</Register><Register>R04</Register><Register>R05</Register><Register>R06</Register><Register>R07</Register><Register>R08</Register><Register>R09</Register><Register>R10</Register><Register>R11</Register><Register>R12</Register><Register>R13</Register><Register>R14</Register><Register>R15</Register><Register>R16</Register><Register>R17</Register><Register>R18</Register><Register>R19</Register><Register>R20</Register><Register>R21</Register><Register>R22</Register><Register>R23</Register><Register>R24</Register><Register>R25</Register><Register>R26</Register><Register>R27</Register><Register>R28</Register><Register>R29</Register><Register>R30</Register><Register>R31</Register></REGISTERNAMES><COM>Auto</COM><COMType>0</COMType><WATCHNUM>0</WATCHNUM><WATCHNAMES><Pane0></Pane0><Pane1></Pane1><Pane2></Pane2><Pane3></Pane3></WATCHNAMES><BreakOnTrcaeFull>0</BreakOnTrcaeFull></DEBUG_TARGET><Debugger><Triggers></Triggers></Debugger><AVRGCCPLUGIN><FILES><SOURCEFILE>Descriptors.c</SOURCEFILE><SOURCEFILE>GenericHID.c</SOURCEFILE><HEADERFILE>Descriptors.h</HEADERFILE><HEADERFILE>GenericHID.h</HEADERFILE><OTHERFILE>makefile</OTHERFILE></FILES><CONFIGS><CONFIG><NAME>default</NAME><USESEXTERNALMAKEFILE>YES</USESEXTERNALMAKEFILE><EXTERNALMAKEFILE>makefile</EXTERNALMAKEFILE><PART>at90usb1287</PART><HEX>1</HEX><LIST>1</LIST><MAP>1</MAP><OUTPUTFILENAME>GenericHID.elf</OUTPUTFILENAME><OUTPUTDIR>default\</OUTPUTDIR><ISDIRTY>1</ISDIRTY><OPTIONS/><INCDIRS/><LIBDIRS/><LIBS/><LINKOBJECTS/><OPTIONSFORALL>-Wall -gdwarf-2 -std=gnu99 -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums</OPTIONSFORALL><LINKEROPTIONS></LINKEROPTIONS><SEGMENTS/></CONFIG></CONFIGS><LASTCONFIG>default</LASTCONFIG><USES_WINAVR>1</USES_WINAVR><GCC_LOC>C:\WinAVR-20090313\bin\avr-gcc.exe</GCC_LOC><MAKE_LOC>C:\WinAVR-20090313\utils\bin\make.exe</MAKE_LOC></AVRGCCPLUGIN><IOView><usergroups/><sort sorted="0" column="0" ordername="0" orderaddress="0" ordergroup="0"/></IOView><Files></Files><Events><Bookmarks></Bookmarks></Events><Trace><Filters></Filters></Trace></AVRStudio>\r
diff --git a/Demos/Device/ClassDriver/GenericHID/GenericHID.c b/Demos/Device/ClassDriver/GenericHID/GenericHID.c
new file mode 100644 (file)
index 0000000..172df7f
--- /dev/null
@@ -0,0 +1,150 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  Main source file for the GenericHID demo. This file contains the main tasks of\r
+ *  the demo and is responsible for the initial application hardware configuration.\r
+ */\r
+\r
+#include "GenericHID.h"\r
+\r
+/** LUFA HID Class driver interface configuration and state information. This structure is\r
+ *  passed to all HID Class driver functions, so that multiple instances of the same class\r
+ *  within a device can be differentiated from one another.\r
+ */\r
+USB_ClassInfo_HID_t Generic_HID_Interface =\r
+       {\r
+               .InterfaceNumber         = 0,\r
+\r
+               .ReportINEndpointNumber  = GENERIC_IN_EPNUM,\r
+               .ReportINEndpointSize    = GENERIC_EPSIZE,\r
+               \r
+               .ReportINBufferSize      = GENERIC_REPORT_SIZE,\r
+\r
+               .UsingReportProtocol     = true,\r
+       };\r
+\r
+/** Main program entry point. This routine contains the overall program flow, including initial\r
+ *  setup of all components and the main program loop.\r
+ */\r
+int main(void)\r
+{\r
+       SetupHardware();\r
+       \r
+       LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);\r
+       \r
+       for (;;)\r
+       {\r
+               USB_HID_USBTask(&Generic_HID_Interface);\r
+               USB_USBTask();\r
+       }\r
+}\r
+\r
+/** Configures the board hardware and chip peripherals for the demo's functionality. */\r
+void SetupHardware(void)\r
+{\r
+       /* Disable watchdog if enabled by bootloader/fuses */\r
+       MCUSR &= ~(1 << WDRF);\r
+       wdt_disable();\r
+\r
+       /* Disable clock division */\r
+       clock_prescale_set(clock_div_1);\r
+\r
+       /* Hardware Initialization */\r
+       LEDs_Init();\r
+       USB_Init();\r
+\r
+       /* Millisecond timer initialization, with output compare interrupt enabled for the idle timing */\r
+       OCR0A  = ((F_CPU / 64) / 1000);\r
+       TCCR0A = (1 << WGM01);\r
+       TCCR0B = ((1 << CS01) | (1 << CS00));\r
+       TIMSK0 = (1 << OCIE0A);\r
+}\r
+\r
+/** Event handler for the library USB Connection event. */\r
+void EVENT_USB_Connect(void)\r
+{\r
+       LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING);\r
+}\r
+\r
+/** Event handler for the library USB Disconnection event. */\r
+void EVENT_USB_Disconnect(void)\r
+{\r
+       LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);\r
+}\r
+\r
+/** Event handler for the library USB Configuration Changed event. */\r
+void EVENT_USB_ConfigurationChanged(void)\r
+{\r
+       LEDs_SetAllLEDs(LEDMASK_USB_READY);\r
+\r
+       if (!(USB_HID_ConfigureEndpoints(&Generic_HID_Interface)))\r
+         LEDs_SetAllLEDs(LEDMASK_USB_ERROR);\r
+}\r
+\r
+/** Event handler for the library USB Unhandled Control Packet event. */\r
+void EVENT_USB_UnhandledControlPacket(void)\r
+{\r
+       USB_HID_ProcessControlPacket(&Generic_HID_Interface);\r
+}\r
+\r
+/** ISR to keep track of each millisecond interrupt, for determining the HID class idle period remaining when set. */\r
+ISR(TIMER0_COMPA_vect, ISR_BLOCK)\r
+{\r
+       if (Generic_HID_Interface.IdleMSRemaining)\r
+         Generic_HID_Interface.IdleMSRemaining--;\r
+}\r
+\r
+/** HID class driver callback function for the creation of HID reports to the host.\r
+ *\r
+ *  \param HIDInterfaceInfo  Pointer to the HID class interface configuration structure being referenced\r
+ *  \param ReportData  Pointer to a buffer where the created report should be stored\r
+ *\r
+ *  \return Number of bytes written in the report (or zero if no report is to be sent\r
+ */\r
+uint16_t CALLBACK_USB_HID_CreateNextHIDReport(USB_ClassInfo_HID_t* HIDInterfaceInfo, uint8_t* ReportID, void* ReportData)\r
+{\r
+       // Create generic HID report here\r
+       \r
+       return 0;\r
+}\r
+\r
+/** HID class driver callback function for the processing of HID reports from the host.\r
+ *\r
+ *  \param HIDInterfaceInfo  Pointer to the HID class interface configuration structure being referenced\r
+ *  \param ReportData  Pointer to a buffer where the created report has been stored\r
+ *  \param ReportSize  Size in bytes of the received HID report\r
+ */\r
+void CALLBACK_USB_HID_ProcessReceivedHIDReport(USB_ClassInfo_HID_t* HIDInterfaceInfo, uint8_t ReportID,\r
+                                               void* ReportData, uint16_t ReportSize)\r
+{\r
+       // Process received generic HID report here\r
+}\r
diff --git a/Demos/Device/ClassDriver/GenericHID/GenericHID.h b/Demos/Device/ClassDriver/GenericHID/GenericHID.h
new file mode 100644 (file)
index 0000000..5ea084c
--- /dev/null
@@ -0,0 +1,79 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  Header file for GenericHID.c.\r
+ */\r
\r
+#ifndef _GENERICHID_H_\r
+#define _GENERICHID_H_\r
+\r
+       /* Includes: */\r
+               #include <avr/io.h>\r
+               #include <avr/wdt.h>\r
+               #include <avr/power.h>\r
+               #include <avr/interrupt.h>\r
+               #include <stdbool.h>\r
+               #include <string.h>\r
+               \r
+               #include "Descriptors.h"\r
+\r
+               #include <LUFA/Version.h>\r
+               #include <LUFA/Drivers/Board/LEDs.h>\r
+               #include <LUFA/Drivers/USB/USB.h>\r
+               #include <LUFA/Drivers/USB/Class/Device/HID.h>\r
+\r
+       /* Macros: */\r
+               /** LED mask for the library LED driver, to indicate that the USB interface is not ready. */\r
+               #define LEDMASK_USB_NOTREADY      LEDS_LED1\r
+\r
+               /** LED mask for the library LED driver, to indicate that the USB interface is enumerating. */\r
+               #define LEDMASK_USB_ENUMERATING  (LEDS_LED2 | LEDS_LED3)\r
+\r
+               /** LED mask for the library LED driver, to indicate that the USB interface is ready. */\r
+               #define LEDMASK_USB_READY        (LEDS_LED2 | LEDS_LED4)\r
+\r
+               /** LED mask for the library LED driver, to indicate that an error has occurred in the USB interface. */\r
+               #define LEDMASK_USB_ERROR        (LEDS_LED1 | LEDS_LED3)\r
+\r
+       /* Function Prototypes: */\r
+               void SetupHardware(void);\r
+\r
+               void EVENT_USB_Connect(void);\r
+               void EVENT_USB_Disconnect(void);\r
+               void EVENT_USB_ConfigurationChanged(void);\r
+               void EVENT_USB_UnhandledControlPacket(void);\r
+\r
+               uint16_t CALLBACK_USB_HID_CreateNextHIDReport(USB_ClassInfo_HID_t* HIDInterfaceInfo, uint8_t* ReportID, void* ReportData);\r
+               void     CALLBACK_USB_HID_ProcessReceivedHIDReport(USB_ClassInfo_HID_t* HIDInterfaceInfo, uint8_t ReportID, \r
+                                                                  void* ReportData, uint16_t ReportSize);\r
+               \r
+#endif\r
diff --git a/Demos/Device/ClassDriver/GenericHID/GenericHID.txt b/Demos/Device/ClassDriver/GenericHID/GenericHID.txt
new file mode 100644 (file)
index 0000000..a40b78b
--- /dev/null
@@ -0,0 +1,64 @@
+/** \file\r
+ *\r
+ *  This file contains special DoxyGen information for the generation of the main page and other special\r
+ *  documentation pages. It is not a project source file.\r
+ */\r
\r
+/** \mainpage Generic HID Device\r
+ *\r
+ *  \section SSec_Info USB Information:\r
+ *\r
+ *  The following table gives a rundown of the USB utilization of this demo.\r
+ *\r
+ *  <table>\r
+ *   <tr>\r
+ *    <td><b>USB Mode:</b></td>\r
+ *    <td>Device</td>\r
+ *   </tr>\r
+ *   <tr>\r
+ *    <td><b>USB Class:</b></td>\r
+ *    <td>Human Interface Device (HID)</td>\r
+ *   </tr>\r
+ *   <tr> \r
+ *    <td><b>USB Subclass:</b></td>\r
+ *    <td>N/A</td>\r
+ *   </tr>\r
+ *   <tr>\r
+ *    <td><b>Relevant Standards:</b></td>\r
+ *    <td>USBIF HID Specification, USBIF HID Usage Tables</td>\r
+ *   </tr>\r
+ *   <tr>\r
+ *    <td><b>Usable Speeds:</b></td>\r
+ *    <td>Low Speed Mode, Full Speed Mode</td>\r
+ *   </tr>\r
+ *  </table>\r
+ *\r
+ *  \section SSec_Description Project Description: \r
+ *\r
+ *  Generic HID device demonstration application. This gives a simple reference application\r
+ *  for implementing a generic HID device, using the basic USB HID drivers in all modern\r
+ *  OSes (i.e. no special drivers required). It accepts and sends up to 255 byte reports to\r
+ *  and from a USB Host, and by default transmits the last sent report back to the host.\r
+ *  \r
+ *  On start-up the system will automatically enumerate and function as a vendor HID device.\r
+ *  When controlled by a custom HID class application, reports can be sent and received by\r
+ *  both the standard data endpoint and control request methods defined in the HID specification.\r
+ *\r
+ *  \section SSec_Options Project Options\r
+ *  \r
+ *  The following defines can be found in this demo, which can control the demo behaviour when defined, or changed in value.\r
+ *\r
+ *  <table>\r
+ *   <tr>\r
+ *    <td><b>Define Name:</b></td>\r
+ *    <td><b>Location:</b></td>\r
+ *    <td><b>Description:</b></td>\r
+ *   </tr>\r
+ *   <tr>\r
+ *    <td>GENERIC_REPORT_SIZE</td>\r
+ *    <td>Descriptors.h</td>\r
+ *    <td>This token defines the size of the device reports, both sent and received. The value must be an\r
+ *        integer ranging from 1 to 255.</td>\r
+ *   </tr>\r
+ *  </table>\r
+ */\r
diff --git a/Demos/Device/ClassDriver/GenericHID/makefile b/Demos/Device/ClassDriver/GenericHID/makefile
new file mode 100644 (file)
index 0000000..5cc4b4a
--- /dev/null
@@ -0,0 +1,732 @@
+# Hey Emacs, this is a -*- makefile -*-\r
+#----------------------------------------------------------------------------\r
+# WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al.\r
+#  >> Modified for use with the LUFA project. <<\r
+#\r
+# Released to the Public Domain\r
+#\r
+# Additional material for this makefile was written by:\r
+# Peter Fleury\r
+# Tim Henigan\r
+# Colin O'Flynn\r
+# Reiner Patommel\r
+# Markus Pfaff\r
+# Sander Pool\r
+# Frederik Rouleau\r
+# Carlos Lamas\r
+# Dean Camera\r
+# Opendous Inc.\r
+# Denver Gingerich\r
+#\r
+#----------------------------------------------------------------------------\r
+# On command line:\r
+#\r
+# make all = Make software.\r
+#\r
+# make clean = Clean out built project files.\r
+#\r
+# make coff = Convert ELF to AVR COFF.\r
+#\r
+# make extcoff = Convert ELF to AVR Extended COFF.\r
+#\r
+# make program = Download the hex file to the device, using avrdude.\r
+#                Please customize the avrdude settings below first!\r
+#\r
+# make dfu = Download the hex file to the device, using dfu-programmer (must\r
+#            have dfu-programmer installed).\r
+#\r
+# make flip = Download the hex file to the device, using Atmel FLIP (must\r
+#             have Atmel FLIP installed).\r
+#\r
+# make dfu-ee = Download the eeprom file to the device, using dfu-programmer\r
+#               (must have dfu-programmer installed).\r
+#\r
+# make flip-ee = Download the eeprom file to the device, using Atmel FLIP\r
+#                (must have Atmel FLIP installed).\r
+#\r
+# make doxygen = Generate DoxyGen documentation for the project (must have\r
+#                DoxyGen installed)\r
+#\r
+# make debug = Start either simulavr or avarice as specified for debugging, \r
+#              with avr-gdb or avr-insight as the front end for debugging.\r
+#\r
+# make filename.s = Just compile filename.c into the assembler code only.\r
+#\r
+# make filename.i = Create a preprocessed source file for use in submitting\r
+#                   bug reports to the GCC project.\r
+#\r
+# To rebuild project do "make clean" then "make all".\r
+#----------------------------------------------------------------------------\r
+\r
+\r
+# MCU name\r
+MCU = at90usb1287\r
+\r
+\r
+# Target board (see library "Board Types" documentation, USER or blank for projects not requiring\r
+# LUFA board drivers). If USER is selected, put custom board drivers in a directory called \r
+# "Board" inside the application directory.\r
+BOARD  = USBKEY\r
+\r
+\r
+# Processor frequency.\r
+#     This will define a symbol, F_CPU, in all source code files equal to the \r
+#     processor frequency. You can then use this symbol in your source code to \r
+#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done\r
+#     automatically to create a 32-bit value in your source code.\r
+#     Typical values are:\r
+#         F_CPU =  1000000\r
+#         F_CPU =  1843200\r
+#         F_CPU =  2000000\r
+#         F_CPU =  3686400\r
+#         F_CPU =  4000000\r
+#         F_CPU =  7372800\r
+#         F_CPU =  8000000\r
+#         F_CPU = 11059200\r
+#         F_CPU = 14745600\r
+#         F_CPU = 16000000\r
+#         F_CPU = 18432000\r
+#         F_CPU = 20000000\r
+F_CPU = 8000000\r
+\r
+\r
+# Input clock frequency.\r
+#     This will define a symbol, F_CLOCK, in all source code files equal to the \r
+#     input clock frequency (before any prescaling is performed). This value may\r
+#     differ from F_CPU if prescaling is used on the latter, and is required as the\r
+#     raw input clock is fed directly to the PLL sections of the AVR for high speed\r
+#     clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'\r
+#     at the end, this will be done automatically to create a 32-bit value in your\r
+#     source code.\r
+#\r
+#     If no clock division is performed on the input clock inside the AVR (via the\r
+#     CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.\r
+F_CLOCK = 8000000\r
+\r
+\r
+# Output format. (can be srec, ihex, binary)\r
+FORMAT = ihex\r
+\r
+\r
+# Target file name (without extension).\r
+TARGET = GenericHID\r
+\r
+\r
+# Object files directory\r
+#     To put object files in current directory, use a dot (.), do NOT make\r
+#     this an empty or blank macro!\r
+OBJDIR = .\r
+\r
+\r
+# Path to the LUFA library\r
+LUFA_PATH = ../../..\r
+\r
+\r
+# List C source files here. (C dependencies are automatically generated.)\r
+SRC = $(TARGET).c                                                 \\r
+         Descriptors.c                                               \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/DevChapter9.c        \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Endpoint.c           \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Host.c               \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/HostChapter9.c       \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/LowLevel.c           \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Pipe.c               \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/Events.c            \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBInterrupt.c      \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBTask.c           \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/ConfigDescriptor.c  \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/Class/Device/HID.c            \\r
+\r
+\r
+# List C++ source files here. (C dependencies are automatically generated.)\r
+CPPSRC = \r
+\r
+\r
+# List Assembler source files here.\r
+#     Make them always end in a capital .S.  Files ending in a lowercase .s\r
+#     will not be considered source files but generated files (assembler\r
+#     output from the compiler), and will be deleted upon "make clean"!\r
+#     Even though the DOS/Win* filesystem matches both .s and .S the same,\r
+#     it will preserve the spelling of the filenames, and gcc itself does\r
+#     care about how the name is spelled on its command-line.\r
+ASRC =\r
+\r
+\r
+# Optimization level, can be [0, 1, 2, 3, s]. \r
+#     0 = turn off optimization. s = optimize for size.\r
+#     (Note: 3 is not always the best optimization level. See avr-libc FAQ.)\r
+OPT = s\r
+\r
+\r
+# Debugging format.\r
+#     Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs.\r
+#     AVR Studio 4.10 requires dwarf-2.\r
+#     AVR [Extended] COFF format requires stabs, plus an avr-objcopy run.\r
+DEBUG = dwarf-2\r
+\r
+\r
+# List any extra directories to look for include files here.\r
+#     Each directory must be seperated by a space.\r
+#     Use forward slashes for directory separators.\r
+#     For a directory that has spaces, enclose it in quotes.\r
+EXTRAINCDIRS = $(LUFA_PATH)/\r
+\r
+\r
+# Compiler flag to set the C Standard level.\r
+#     c89   = "ANSI" C\r
+#     gnu89 = c89 plus GCC extensions\r
+#     c99   = ISO C99 standard (not yet fully implemented)\r
+#     gnu99 = c99 plus GCC extensions\r
+CSTANDARD = -std=gnu99\r
+\r
+\r
+# Place -D or -U options here for C sources\r
+CDEFS  = -DF_CPU=$(F_CPU)UL -DF_CLOCK=$(F_CLOCK)UL -DBOARD=BOARD_$(BOARD)\r
+CDEFS += -DUSE_NONSTANDARD_DESCRIPTOR_NAMES -DUSB_DEVICE_ONLY\r
+CDEFS += -DFIXED_CONTROL_ENDPOINT_SIZE=8 -DUSE_SINGLE_DEVICE_CONFIGURATION\r
+CDEFS += -DUSE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)"\r
+\r
+# Place -D or -U options here for ASM sources\r
+ADEFS = -DF_CPU=$(F_CPU)\r
+\r
+\r
+# Place -D or -U options here for C++ sources\r
+CPPDEFS = -DF_CPU=$(F_CPU)UL\r
+#CPPDEFS += -D__STDC_LIMIT_MACROS\r
+#CPPDEFS += -D__STDC_CONSTANT_MACROS\r
+\r
+\r
+\r
+#---------------- Compiler Options C ----------------\r
+#  -g*:          generate debugging information\r
+#  -O*:          optimization level\r
+#  -f...:        tuning, see GCC manual and avr-libc documentation\r
+#  -Wall...:     warning level\r
+#  -Wa,...:      tell GCC to pass this to the assembler.\r
+#    -adhlns...: create assembler listing\r
+CFLAGS = -g$(DEBUG)\r
+CFLAGS += $(CDEFS)\r
+CFLAGS += -O$(OPT)\r
+CFLAGS += -funsigned-char\r
+CFLAGS += -funsigned-bitfields\r
+CFLAGS += -ffunction-sections\r
+CFLAGS += -fpack-struct\r
+CFLAGS += -fshort-enums\r
+CFLAGS += -finline-limit=20\r
+CFLAGS += -Wall\r
+CFLAGS += -Wstrict-prototypes\r
+CFLAGS += -Wundef\r
+#CFLAGS += -fno-unit-at-a-time\r
+#CFLAGS += -Wunreachable-code\r
+#CFLAGS += -Wsign-compare\r
+CFLAGS += -Wa,-adhlns=$(<:%.c=$(OBJDIR)/%.lst)\r
+CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))\r
+CFLAGS += $(CSTANDARD)\r
+\r
+\r
+#---------------- Compiler Options C++ ----------------\r
+#  -g*:          generate debugging information\r
+#  -O*:          optimization level\r
+#  -f...:        tuning, see GCC manual and avr-libc documentation\r
+#  -Wall...:     warning level\r
+#  -Wa,...:      tell GCC to pass this to the assembler.\r
+#    -adhlns...: create assembler listing\r
+CPPFLAGS = -g$(DEBUG)\r
+CPPFLAGS += $(CPPDEFS)\r
+CPPFLAGS += -O$(OPT)\r
+CPPFLAGS += -funsigned-char\r
+CPPFLAGS += -funsigned-bitfields\r
+CPPFLAGS += -fpack-struct\r
+CPPFLAGS += -fshort-enums\r
+CPPFLAGS += -fno-exceptions\r
+CPPFLAGS += -Wall\r
+CFLAGS += -Wundef\r
+#CPPFLAGS += -mshort-calls\r
+#CPPFLAGS += -fno-unit-at-a-time\r
+#CPPFLAGS += -Wstrict-prototypes\r
+#CPPFLAGS += -Wunreachable-code\r
+#CPPFLAGS += -Wsign-compare\r
+CPPFLAGS += -Wa,-adhlns=$(<:%.cpp=$(OBJDIR)/%.lst)\r
+CPPFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))\r
+#CPPFLAGS += $(CSTANDARD)\r
+\r
+\r
+#---------------- Assembler Options ----------------\r
+#  -Wa,...:   tell GCC to pass this to the assembler.\r
+#  -adhlns:   create listing\r
+#  -gstabs:   have the assembler create line number information; note that\r
+#             for use in COFF files, additional information about filenames\r
+#             and function names needs to be present in the assembler source\r
+#             files -- see avr-libc docs [FIXME: not yet described there]\r
+#  -listing-cont-lines: Sets the maximum number of continuation lines of hex \r
+#       dump that will be displayed for a given single line of source input.\r
+ASFLAGS = $(ADEFS) -Wa,-adhlns=$(<:%.S=$(OBJDIR)/%.lst),-gstabs,--listing-cont-lines=100\r
+\r
+\r
+#---------------- Library Options ----------------\r
+# Minimalistic printf version\r
+PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min\r
+\r
+# Floating point printf version (requires MATH_LIB = -lm below)\r
+PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt\r
+\r
+# If this is left blank, then it will use the Standard printf version.\r
+PRINTF_LIB = \r
+#PRINTF_LIB = $(PRINTF_LIB_MIN)\r
+#PRINTF_LIB = $(PRINTF_LIB_FLOAT)\r
+\r
+\r
+# Minimalistic scanf version\r
+SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min\r
+\r
+# Floating point + %[ scanf version (requires MATH_LIB = -lm below)\r
+SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt\r
+\r
+# If this is left blank, then it will use the Standard scanf version.\r
+SCANF_LIB = \r
+#SCANF_LIB = $(SCANF_LIB_MIN)\r
+#SCANF_LIB = $(SCANF_LIB_FLOAT)\r
+\r
+\r
+MATH_LIB = -lm\r
+\r
+\r
+# List any extra directories to look for libraries here.\r
+#     Each directory must be seperated by a space.\r
+#     Use forward slashes for directory separators.\r
+#     For a directory that has spaces, enclose it in quotes.\r
+EXTRALIBDIRS = \r
+\r
+\r
+\r
+#---------------- External Memory Options ----------------\r
+\r
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),\r
+# used for variables (.data/.bss) and heap (malloc()).\r
+#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff\r
+\r
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),\r
+# only used for heap (malloc()).\r
+#EXTMEMOPTS = -Wl,--section-start,.data=0x801100,--defsym=__heap_end=0x80ffff\r
+\r
+EXTMEMOPTS =\r
+\r
+\r
+\r
+#---------------- Linker Options ----------------\r
+#  -Wl,...:     tell GCC to pass this to linker.\r
+#    -Map:      create map file\r
+#    --cref:    add cross reference to  map file\r
+LDFLAGS = -Wl,-Map=$(TARGET).map,--cref\r
+LDFLAGS += -Wl,--relax \r
+LDFLAGS += -Wl,--gc-sections\r
+LDFLAGS += $(EXTMEMOPTS)\r
+LDFLAGS += $(patsubst %,-L%,$(EXTRALIBDIRS))\r
+LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)\r
+#LDFLAGS += -T linker_script.x\r
+\r
+\r
+\r
+#---------------- Programming Options (avrdude) ----------------\r
+\r
+# Programming hardware: alf avr910 avrisp bascom bsd \r
+# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500\r
+#\r
+# Type: avrdude -c ?\r
+# to get a full listing.\r
+#\r
+AVRDUDE_PROGRAMMER = jtagmkII\r
+\r
+# com1 = serial port. Use lpt1 to connect to parallel port.\r
+AVRDUDE_PORT = usb\r
+\r
+AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex\r
+#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep\r
+\r
+\r
+# Uncomment the following if you want avrdude's erase cycle counter.\r
+# Note that this counter needs to be initialized first using -Yn,\r
+# see avrdude manual.\r
+#AVRDUDE_ERASE_COUNTER = -y\r
+\r
+# Uncomment the following if you do /not/ wish a verification to be\r
+# performed after programming the device.\r
+#AVRDUDE_NO_VERIFY = -V\r
+\r
+# Increase verbosity level.  Please use this when submitting bug\r
+# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude> \r
+# to submit bug reports.\r
+#AVRDUDE_VERBOSE = -v -v\r
+\r
+AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)\r
+AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY)\r
+AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE)\r
+AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER)\r
+\r
+\r
+\r
+#---------------- Debugging Options ----------------\r
+\r
+# For simulavr only - target MCU frequency.\r
+DEBUG_MFREQ = $(F_CPU)\r
+\r
+# Set the DEBUG_UI to either gdb or insight.\r
+# DEBUG_UI = gdb\r
+DEBUG_UI = insight\r
+\r
+# Set the debugging back-end to either avarice, simulavr.\r
+DEBUG_BACKEND = avarice\r
+#DEBUG_BACKEND = simulavr\r
+\r
+# GDB Init Filename.\r
+GDBINIT_FILE = __avr_gdbinit\r
+\r
+# When using avarice settings for the JTAG\r
+JTAG_DEV = /dev/com1\r
+\r
+# Debugging port used to communicate between GDB / avarice / simulavr.\r
+DEBUG_PORT = 4242\r
+\r
+# Debugging host used to communicate between GDB / avarice / simulavr, normally\r
+#     just set to localhost unless doing some sort of crazy debugging when \r
+#     avarice is running on a different computer.\r
+DEBUG_HOST = localhost\r
+\r
+\r
+\r
+#============================================================================\r
+\r
+\r
+# Define programs and commands.\r
+SHELL = sh\r
+CC = avr-gcc\r
+OBJCOPY = avr-objcopy\r
+OBJDUMP = avr-objdump\r
+SIZE = avr-size\r
+AR = avr-ar rcs\r
+NM = avr-nm\r
+AVRDUDE = avrdude\r
+REMOVE = rm -f\r
+REMOVEDIR = rm -rf\r
+COPY = cp\r
+WINSHELL = cmd\r
+\r
+# Define Messages\r
+# English\r
+MSG_ERRORS_NONE = Errors: none\r
+MSG_BEGIN = -------- begin --------\r
+MSG_END = --------  end  --------\r
+MSG_SIZE_BEFORE = Size before: \r
+MSG_SIZE_AFTER = Size after:\r
+MSG_COFF = Converting to AVR COFF:\r
+MSG_EXTENDED_COFF = Converting to AVR Extended COFF:\r
+MSG_FLASH = Creating load file for Flash:\r
+MSG_EEPROM = Creating load file for EEPROM:\r
+MSG_EXTENDED_LISTING = Creating Extended Listing:\r
+MSG_SYMBOL_TABLE = Creating Symbol Table:\r
+MSG_LINKING = Linking:\r
+MSG_COMPILING = Compiling C:\r
+MSG_COMPILING_CPP = Compiling C++:\r
+MSG_ASSEMBLING = Assembling:\r
+MSG_CLEANING = Cleaning project:\r
+MSG_CREATING_LIBRARY = Creating library:\r
+\r
+\r
+\r
+\r
+# Define all object files.\r
+OBJ = $(SRC:%.c=$(OBJDIR)/%.o) $(CPPSRC:%.cpp=$(OBJDIR)/%.o) $(ASRC:%.S=$(OBJDIR)/%.o) \r
+\r
+# Define all listing files.\r
+LST = $(SRC:%.c=$(OBJDIR)/%.lst) $(CPPSRC:%.cpp=$(OBJDIR)/%.lst) $(ASRC:%.S=$(OBJDIR)/%.lst) \r
+\r
+\r
+# Compiler flags to generate dependency files.\r
+GENDEPFLAGS = -MMD -MP -MF .dep/$(@F).d\r
+\r
+\r
+# Combine all necessary flags and optional flags.\r
+# Add target processor to flags.\r
+ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS)\r
+ALL_CPPFLAGS = -mmcu=$(MCU) -I. -x c++ $(CPPFLAGS) $(GENDEPFLAGS)\r
+ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)\r
+\r
+\r
+\r
+\r
+\r
+# Default target.\r
+all: begin gccversion sizebefore build checkhooks checklibmode checkboard sizeafter end\r
+\r
+# Change the build target to build a HEX file or a library.\r
+build: elf hex eep lss sym\r
+#build: lib\r
+\r
+\r
+elf: $(TARGET).elf\r
+hex: $(TARGET).hex\r
+eep: $(TARGET).eep\r
+lss: $(TARGET).lss\r
+sym: $(TARGET).sym\r
+LIBNAME=lib$(TARGET).a\r
+lib: $(LIBNAME)\r
+\r
+\r
+\r
+# Eye candy.\r
+# AVR Studio 3.x does not check make's exit code but relies on\r
+# the following magic strings to be generated by the compile job.\r
+begin:\r
+       @echo\r
+       @echo $(MSG_BEGIN)\r
+\r
+end:\r
+       @echo $(MSG_END)\r
+       @echo\r
+\r
+\r
+# Display size of file.\r
+HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex\r
+ELFSIZE = $(SIZE) $(MCU_FLAG) $(FORMAT_FLAG) $(TARGET).elf\r
+MCU_FLAG = $(shell $(SIZE) --help | grep -- --mcu > /dev/null && echo --mcu=$(MCU) )\r
+FORMAT_FLAG = $(shell $(SIZE) --help | grep -- --format=.*avr > /dev/null && echo --format=avr )\r
+\r
+sizebefore:\r
+       @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \\r
+       2>/dev/null; echo; fi\r
+\r
+sizeafter:\r
+       @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \\r
+       2>/dev/null; echo; fi\r
+\r
+checkhooks: build\r
+       @echo\r
+       @echo ------- Unhooked LUFA Events -------\r
+       @$(shell) (grep -s '^EVENT_.*LUFA/.*\\.o' $(TARGET).map | \\r
+                  cut -d' ' -f1 | cut -d'_' -f2- | grep ".*") || \\r
+                          echo "(None)"\r
+       @echo ------------------------------------\r
+\r
+checklibmode:\r
+       @echo\r
+       @echo ----------- Library Mode -----------\r
+       @$(shell) ($(CC) $(ALL_CFLAGS) -E -dM - < /dev/null \\r
+                 | grep 'USB_\(DEVICE\|HOST\)_ONLY' | cut -d' ' -f2 | grep ".*") \\r
+                 || echo "No specific mode (both device and host mode allowable)."\r
+       @echo ------------------------------------\r
+\r
+checkboard:\r
+       @echo\r
+       @echo ---------- Selected Board ----------\r
+       @echo Selected board model is $(BOARD).\r
+       @echo ------------------------------------\r
+       \r
+# Display compiler version information.\r
+gccversion : \r
+       @$(CC) --version\r
+\r
+\r
+\r
+# Program the device.  \r
+program: $(TARGET).hex $(TARGET).eep\r
+       $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)\r
+\r
+flip: $(TARGET).hex\r
+       batchisp -hardware usb -device $(MCU) -operation erase f\r
+       batchisp -hardware usb -device $(MCU) -operation loadbuffer $(TARGET).hex program\r
+       batchisp -hardware usb -device $(MCU) -operation start reset 0\r
+\r
+dfu: $(TARGET).hex\r
+       dfu-programmer $(MCU) erase\r
+       dfu-programmer $(MCU) flash --debug 1 $(TARGET).hex\r
+       dfu-programmer $(MCU) reset\r
+\r
+flip-ee: $(TARGET).hex $(TARGET).eep\r
+       copy $(TARGET).eep $(TARGET)eep.hex\r
+       batchisp -hardware usb -device $(MCU) -operation memory EEPROM erase\r
+       batchisp -hardware usb -device $(MCU) -operation memory EEPROM loadbuffer $(TARGET)eep.hex program\r
+       batchisp -hardware usb -device $(MCU) -operation start reset 0\r
+\r
+dfu-ee: $(TARGET).hex $(TARGET).eep\r
+       dfu-programmer $(MCU) flash-eeprom --debug 1 --suppress-bootloader-mem $(TARGET).eep\r
+       dfu-programmer $(MCU) reset\r
+\r
+\r
+# Generate avr-gdb config/init file which does the following:\r
+#     define the reset signal, load the target file, connect to target, and set \r
+#     a breakpoint at main().\r
+gdb-config: \r
+       @$(REMOVE) $(GDBINIT_FILE)\r
+       @echo define reset >> $(GDBINIT_FILE)\r
+       @echo SIGNAL SIGHUP >> $(GDBINIT_FILE)\r
+       @echo end >> $(GDBINIT_FILE)\r
+       @echo file $(TARGET).elf >> $(GDBINIT_FILE)\r
+       @echo target remote $(DEBUG_HOST):$(DEBUG_PORT)  >> $(GDBINIT_FILE)\r
+ifeq ($(DEBUG_BACKEND),simulavr)\r
+       @echo load  >> $(GDBINIT_FILE)\r
+endif\r
+       @echo break main >> $(GDBINIT_FILE)\r
+\r
+debug: gdb-config $(TARGET).elf\r
+ifeq ($(DEBUG_BACKEND), avarice)\r
+       @echo Starting AVaRICE - Press enter when "waiting to connect" message displays.\r
+       @$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \\r
+       $(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT)\r
+       @$(WINSHELL) /c pause\r
+\r
+else\r
+       @$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \\r
+       $(DEBUG_MFREQ) --port $(DEBUG_PORT)\r
+endif\r
+       @$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE)\r
+\r
+\r
+\r
+\r
+# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.\r
+COFFCONVERT = $(OBJCOPY) --debugging\r
+COFFCONVERT += --change-section-address .data-0x800000\r
+COFFCONVERT += --change-section-address .bss-0x800000\r
+COFFCONVERT += --change-section-address .noinit-0x800000\r
+COFFCONVERT += --change-section-address .eeprom-0x810000\r
+\r
+\r
+\r
+coff: $(TARGET).elf\r
+       @echo\r
+       @echo $(MSG_COFF) $(TARGET).cof\r
+       $(COFFCONVERT) -O coff-avr $< $(TARGET).cof\r
+\r
+\r
+extcoff: $(TARGET).elf\r
+       @echo\r
+       @echo $(MSG_EXTENDED_COFF) $(TARGET).cof\r
+       $(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof\r
+\r
+\r
+\r
+# Create final output files (.hex, .eep) from ELF output file.\r
+%.hex: %.elf\r
+       @echo\r
+       @echo $(MSG_FLASH) $@\r
+       $(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@\r
+\r
+%.eep: %.elf\r
+       @echo\r
+       @echo $(MSG_EEPROM) $@\r
+       -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \\r
+       --change-section-lma .eeprom=0 --no-change-warnings -O $(FORMAT) $< $@ || exit 0\r
+\r
+# Create extended listing file from ELF output file.\r
+%.lss: %.elf\r
+       @echo\r
+       @echo $(MSG_EXTENDED_LISTING) $@\r
+       $(OBJDUMP) -h -z -S $< > $@\r
+\r
+# Create a symbol table from ELF output file.\r
+%.sym: %.elf\r
+       @echo\r
+       @echo $(MSG_SYMBOL_TABLE) $@\r
+       $(NM) -n $< > $@\r
+\r
+\r
+\r
+# Create library from object files.\r
+.SECONDARY : $(TARGET).a\r
+.PRECIOUS : $(OBJ)\r
+%.a: $(OBJ)\r
+       @echo\r
+       @echo $(MSG_CREATING_LIBRARY) $@\r
+       $(AR) $@ $(OBJ)\r
+\r
+\r
+# Link: create ELF output file from object files.\r
+.SECONDARY : $(TARGET).elf\r
+.PRECIOUS : $(OBJ)\r
+%.elf: $(OBJ)\r
+       @echo\r
+       @echo $(MSG_LINKING) $@\r
+       $(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)\r
+\r
+\r
+# Compile: create object files from C source files.\r
+$(OBJDIR)/%.o : %.c\r
+       @echo\r
+       @echo $(MSG_COMPILING) $<\r
+       $(CC) -c $(ALL_CFLAGS) $< -o $@ \r
+\r
+\r
+# Compile: create object files from C++ source files.\r
+$(OBJDIR)/%.o : %.cpp\r
+       @echo\r
+       @echo $(MSG_COMPILING_CPP) $<\r
+       $(CC) -c $(ALL_CPPFLAGS) $< -o $@ \r
+\r
+\r
+# Compile: create assembler files from C source files.\r
+%.s : %.c\r
+       $(CC) -S $(ALL_CFLAGS) $< -o $@\r
+\r
+\r
+# Compile: create assembler files from C++ source files.\r
+%.s : %.cpp\r
+       $(CC) -S $(ALL_CPPFLAGS) $< -o $@\r
+\r
+\r
+# Assemble: create object files from assembler source files.\r
+$(OBJDIR)/%.o : %.S\r
+       @echo\r
+       @echo $(MSG_ASSEMBLING) $<\r
+       $(CC) -c $(ALL_ASFLAGS) $< -o $@\r
+\r
+\r
+# Create preprocessed source for use in sending a bug report.\r
+%.i : %.c\r
+       $(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ \r
+       \r
+\r
+# Target: clean project.\r
+clean: begin clean_list clean_binary end\r
+\r
+clean_binary:\r
+       $(REMOVE) $(TARGET).hex\r
+       \r
+clean_list:\r
+       @echo $(MSG_CLEANING)\r
+       $(REMOVE) $(TARGET).eep\r
+       $(REMOVE) $(TARGET)eep.hex\r
+       $(REMOVE) $(TARGET).cof\r
+       $(REMOVE) $(TARGET).elf\r
+       $(REMOVE) $(TARGET).map\r
+       $(REMOVE) $(TARGET).sym\r
+       $(REMOVE) $(TARGET).lss\r
+       $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.o)\r
+       $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.lst)\r
+       $(REMOVE) $(SRC:.c=.s)\r
+       $(REMOVE) $(SRC:.c=.d)\r
+       $(REMOVE) $(SRC:.c=.i)\r
+       $(REMOVEDIR) .dep\r
+\r
+\r
+doxygen:\r
+       @echo Generating Project Documentation...\r
+       @doxygen Doxygen.conf\r
+       @echo Documentation Generation Complete.\r
+\r
+clean_doxygen:\r
+       rm -rf Documentation\r
+\r
+# Create object files directory\r
+$(shell mkdir $(OBJDIR) 2>/dev/null)\r
+\r
+\r
+# Include the dependency files.\r
+-include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)\r
+\r
+\r
+# Listing of phony targets.\r
+.PHONY : all checkhooks checklibmode checkboard   \\r
+begin finish end sizebefore sizeafter gccversion  \\r
+build elf hex eep lss sym coff extcoff clean      \\r
+clean_list clean_binary program debug gdb-config  \\r
+doxygen dfu flip flip-ee dfu-ee
\ No newline at end of file
diff --git a/Demos/Device/ClassDriver/Joystick/Descriptors.c b/Demos/Device/ClassDriver/Joystick/Descriptors.c
new file mode 100644 (file)
index 0000000..bd7be65
--- /dev/null
@@ -0,0 +1,250 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  USB Device Descriptors, for library use when in USB device mode. Descriptors are special \r
+ *  computer-readable structures which the host requests upon device enumeration, to determine\r
+ *  the device's capabilities and functions.  \r
+ */\r
+\r
+#include "Descriptors.h"\r
+\r
+/** HID class report descriptor. This is a special descriptor constructed with values from the\r
+ *  USBIF HID class specification to describe the reports and capabilities of the HID device. This\r
+ *  descriptor is parsed by the host and its contents used to determine what data (and in what encoding)\r
+ *  the device will send, and what it may be sent back from the host. Refer to the HID specification for\r
+ *  more details on HID report descriptors.\r
+ */\r
+USB_Descriptor_HIDReport_Datatype_t PROGMEM JoystickReport[] =\r
+{\r
+       0x05, 0x01,          /* Usage Page (Generic Desktop)                       */\r
+       0x09, 0x04,          /* Usage (Joystick)                                   */\r
+       0xa1, 0x01,          /* Collection (Application)                           */\r
+       0x09, 0x01,          /*   Usage (Pointer)                                  */\r
+       0xa1, 0x00,          /*   Collection (Physical)                            */\r
+       0x05, 0x01,          /*     Usage Page (Generic Desktop)                   */\r
+       0x09, 0x30,          /*     Usage (X)                                      */\r
+       0x09, 0x31,          /*     Usage (Y)                                      */\r
+       0x15, 0x9c,          /*     Logical Minimum (-100)                         */\r
+       0x25, 0x64,          /*     Logical Maximum (100)                          */\r
+       0x75, 0x08,          /*     Report Size (8)                                */\r
+       0x95, 0x02,          /*     Report Count (2)                               */\r
+       0x81, 0x82,          /*     Input (Data, Variable, Absolute, Volatile)     */\r
+       0x05, 0x09,          /*     Usage Page (Button)                            */\r
+       0x09, 0x02,          /*     Usage (Button 2)                               */\r
+       0x09, 0x01,          /*     Usage (Button 1)                               */\r
+       0x15, 0x00,          /*     Logical Minimum (0)                            */\r
+       0x25, 0x01,          /*     Logical Maximum (1)                            */\r
+       0x75, 0x01,          /*     Report Size (1)                                */\r
+       0x95, 0x02,          /*     Report Count (2)                               */\r
+       0x81, 0x02,          /*     Input (Data, Variable, Absolute)               */\r
+       0x75, 0x06,          /*     Report Size (6)                                */\r
+       0x95, 0x01,          /*     Report Count (1)                               */\r
+       0x81, 0x01,          /*     Input (Constant)                               */\r
+       0xc0,                /*   End Collection                                   */\r
+       0xc0                 /* End Collection                                     */\r
+};\r
+\r
+/** Device descriptor structure. This descriptor, located in FLASH memory, describes the overall\r
+ *  device characteristics, including the supported USB version, control endpoint size and the\r
+ *  number of device configurations. The descriptor is read out by the USB host when the enumeration\r
+ *  process begins.\r
+ */\r
+USB_Descriptor_Device_t PROGMEM DeviceDescriptor =\r
+{\r
+       .Header                 = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device},\r
+               \r
+       .USBSpecification       = VERSION_BCD(01.10),\r
+       .Class                  = 0x00,\r
+       .SubClass               = 0x00,\r
+       .Protocol               = 0x00,\r
+                               \r
+       .Endpoint0Size          = FIXED_CONTROL_ENDPOINT_SIZE,\r
+               \r
+       .VendorID               = 0x03EB,\r
+       .ProductID              = 0x2043,\r
+       .ReleaseNumber          = 0x0000,\r
+               \r
+       .ManufacturerStrIndex   = 0x01,\r
+       .ProductStrIndex        = 0x02,\r
+       .SerialNumStrIndex      = NO_DESCRIPTOR,\r
+               \r
+       .NumberOfConfigurations = 1\r
+};\r
+\r
+/** Configuration descriptor structure. This descriptor, located in FLASH memory, describes the usage\r
+ *  of the device in one of its supported configurations, including information about any device interfaces\r
+ *  and endpoints. The descriptor is read out by the USB host during the enumeration process when selecting\r
+ *  a configuration so that the host may correctly communicate with the USB device.\r
+ */\r
+USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =\r
+{\r
+       .Config = \r
+               {\r
+                       .Header                 = {.Size = sizeof(USB_Descriptor_Configuration_Header_t), .Type = DTYPE_Configuration},\r
+\r
+                       .TotalConfigurationSize = sizeof(USB_Descriptor_Configuration_t),\r
+                       .TotalInterfaces        = 1,\r
+                               \r
+                       .ConfigurationNumber    = 1,\r
+                       .ConfigurationStrIndex  = NO_DESCRIPTOR,\r
+                               \r
+                       .ConfigAttributes       = (USB_CONFIG_ATTR_BUSPOWERED | USB_CONFIG_ATTR_SELFPOWERED),\r
+                       \r
+                       .MaxPowerConsumption    = USB_CONFIG_POWER_MA(100)\r
+               },\r
+               \r
+       .Interface = \r
+               {\r
+                       .Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},\r
+\r
+                       .InterfaceNumber        = 0x00,\r
+                       .AlternateSetting       = 0x00,\r
+                       \r
+                       .TotalEndpoints         = 1,\r
+                               \r
+                       .Class                  = 0x03,\r
+                       .SubClass               = 0x00,\r
+                       .Protocol               = 0x00,\r
+                               \r
+                       .InterfaceStrIndex      = NO_DESCRIPTOR\r
+               },\r
+\r
+       .JoystickHID = \r
+               {\r
+                       .Header                 = {.Size = sizeof(USB_Descriptor_HID_t), .Type = DTYPE_HID},\r
+                                                                        \r
+                       .HIDSpec                = VERSION_BCD(01.11),\r
+                       .CountryCode            = 0x00,\r
+                       .TotalReportDescriptors = 1,\r
+                       .HIDReportType          = DTYPE_Report,\r
+                       .HIDReportLength        = sizeof(JoystickReport)\r
+               },\r
+\r
+       .JoystickEndpoint = \r
+               {\r
+                       .Header                 = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},\r
+                                                                                \r
+                       .EndpointAddress        = (ENDPOINT_DESCRIPTOR_DIR_IN | JOYSTICK_EPNUM),\r
+                       .Attributes             = EP_TYPE_INTERRUPT,\r
+                       .EndpointSize           = JOYSTICK_EPSIZE,\r
+                       .PollingIntervalMS      = 0x02\r
+               }       \r
+};\r
+\r
+/** Language descriptor structure. This descriptor, located in FLASH memory, is returned when the host requests\r
+ *  the string descriptor with index 0 (the first index). It is actually an array of 16-bit integers, which indicate\r
+ *  via the language ID table available at USB.org what languages the device supports for its string descriptors.\r
+ */\r
+USB_Descriptor_String_t PROGMEM LanguageString =\r
+{\r
+       .Header                 = {.Size = USB_STRING_LEN(1), .Type = DTYPE_String},\r
+               \r
+       .UnicodeString          = {LANGUAGE_ID_ENG}\r
+};\r
+\r
+/** Manufacturer descriptor string. This is a Unicode string containing the manufacturer's details in human readable\r
+ *  form, and is read out upon request by the host when the appropriate string ID is requested, listed in the Device\r
+ *  Descriptor.\r
+ */\r
+USB_Descriptor_String_t PROGMEM ManufacturerString =\r
+{\r
+       .Header                 = {.Size = USB_STRING_LEN(11), .Type = DTYPE_String},\r
+               \r
+       .UnicodeString          = L"Dean Camera"\r
+};\r
+\r
+/** Product descriptor string. This is a Unicode string containing the product's details in human readable form,\r
+ *  and is read out upon request by the host when the appropriate string ID is requested, listed in the Device\r
+ *  Descriptor.\r
+ */\r
+USB_Descriptor_String_t PROGMEM ProductString =\r
+{\r
+       .Header                 = {.Size = USB_STRING_LEN(18), .Type = DTYPE_String},\r
+               \r
+       .UnicodeString          = L"LUFA Joystick Demo"\r
+};\r
+\r
+/** This function is called by the library when in device mode, and must be overridden (see library "USB Descriptors"\r
+ *  documentation) by the application code so that the address and size of a requested descriptor can be given\r
+ *  to the USB library. When the device receives a Get Descriptor request on the control endpoint, this function\r
+ *  is called so that the descriptor details can be passed back and the appropriate descriptor sent back to the\r
+ *  USB host.\r
+ */\r
+uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
+{\r
+       const uint8_t  DescriptorType   = (wValue >> 8);\r
+       const uint8_t  DescriptorNumber = (wValue & 0xFF);\r
+\r
+       void*    Address = NULL;\r
+       uint16_t Size    = NO_DESCRIPTOR;\r
+\r
+       switch (DescriptorType)\r
+       {\r
+               case DTYPE_Device:\r
+                       Address = (void*)&DeviceDescriptor;\r
+                       Size    = sizeof(USB_Descriptor_Device_t);\r
+                       break;\r
+               case DTYPE_Configuration: \r
+                       Address = (void*)&ConfigurationDescriptor;\r
+                       Size    = sizeof(USB_Descriptor_Configuration_t);\r
+                       break;\r
+               case DTYPE_String: \r
+                       switch (DescriptorNumber)\r
+                       {\r
+                               case 0x00: \r
+                                       Address = (void*)&LanguageString;\r
+                                       Size    = pgm_read_byte(&LanguageString.Header.Size);\r
+                                       break;\r
+                               case 0x01: \r
+                                       Address = (void*)&ManufacturerString;\r
+                                       Size    = pgm_read_byte(&ManufacturerString.Header.Size);\r
+                                       break;\r
+                               case 0x02: \r
+                                       Address = (void*)&ProductString;\r
+                                       Size    = pgm_read_byte(&ProductString.Header.Size);\r
+                                       break;\r
+                       }\r
+                       \r
+                       break;\r
+               case DTYPE_HID: \r
+                       Address = (void*)&ConfigurationDescriptor.JoystickHID;\r
+                       Size    = sizeof(USB_Descriptor_HID_t);\r
+                       break;\r
+               case DTYPE_Report: \r
+                       Address = (void*)&JoystickReport;\r
+                       Size    = sizeof(JoystickReport);\r
+                       break;\r
+       }\r
+       \r
+       *DescriptorAddress = Address;\r
+       return Size;\r
+}\r
diff --git a/Demos/Device/ClassDriver/Joystick/Descriptors.h b/Demos/Device/ClassDriver/Joystick/Descriptors.h
new file mode 100644 (file)
index 0000000..1241ad1
--- /dev/null
@@ -0,0 +1,69 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  Header file for Descriptors.c.\r
+ */\r
\r
+#ifndef _DESCRIPTORS_H_\r
+#define _DESCRIPTORS_H_\r
+\r
+       /* Includes: */\r
+               #include <avr/pgmspace.h>\r
+\r
+               #include <LUFA/Drivers/USB/USB.h>\r
+               #include <LUFA/Drivers/USB/Class/Device/HID.h>\r
+\r
+       /* Type Defines: */\r
+               /** Type define for the device configuration descriptor structure. This must be defined in the\r
+                *  application code, as the configuration descriptor contains several sub-descriptors which\r
+                *  vary between devices, and which describe the device's usage to the host.\r
+                */\r
+               typedef struct\r
+               {\r
+                       USB_Descriptor_Configuration_Header_t Config;\r
+                       USB_Descriptor_Interface_t            Interface;\r
+                       USB_Descriptor_HID_t                  JoystickHID;\r
+               USB_Descriptor_Endpoint_t             JoystickEndpoint;\r
+               } USB_Descriptor_Configuration_t;\r
+                                       \r
+       /* Macros: */\r
+               /** Endpoint number of the Joystick HID reporting IN endpoint. */\r
+               #define JOYSTICK_EPNUM               1\r
+\r
+               /** Size in bytes of the Joystick HID reporting IN endpoint. */\r
+               #define JOYSTICK_EPSIZE              8\r
+\r
+       /* Function Prototypes: */\r
+               uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
+                                                                                       ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);\r
+\r
+#endif\r
diff --git a/Demos/Device/ClassDriver/Joystick/Doxygen.conf b/Demos/Device/ClassDriver/Joystick/Doxygen.conf
new file mode 100644 (file)
index 0000000..2af5ce6
--- /dev/null
@@ -0,0 +1,1485 @@
+# Doxyfile 1.5.7.1\r
+\r
+# This file describes the settings to be used by the documentation system\r
+# doxygen (www.doxygen.org) for a project\r
+#\r
+# All text after a hash (#) is considered a comment and will be ignored\r
+# The format is:\r
+#       TAG = value [value, ...]\r
+# For lists items can also be appended using:\r
+#       TAG += value [value, ...]\r
+# Values that contain spaces should be placed between quotes (" ")\r
+\r
+#---------------------------------------------------------------------------\r
+# Project related configuration options\r
+#---------------------------------------------------------------------------\r
+\r
+# This tag specifies the encoding used for all characters in the config file \r
+# that follow. The default is UTF-8 which is also the encoding used for all \r
+# text before the first occurrence of this tag. Doxygen uses libiconv (or the \r
+# iconv built into libc) for the transcoding. See \r
+# http://www.gnu.org/software/libiconv for the list of possible encodings.\r
+\r
+DOXYFILE_ENCODING      = UTF-8\r
+\r
+# The PROJECT_NAME tag is a single word (or a sequence of words surrounded \r
+# by quotes) that should identify the project.\r
+\r
+PROJECT_NAME           = "LUFA Library - Joystick Device Demo"\r
+\r
+# The PROJECT_NUMBER tag can be used to enter a project or revision number. \r
+# This could be handy for archiving the generated documentation or \r
+# if some version control system is used.\r
+\r
+PROJECT_NUMBER         = 0.0.0\r
+\r
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) \r
+# base path where the generated documentation will be put. \r
+# If a relative path is entered, it will be relative to the location \r
+# where doxygen was started. If left blank the current directory will be used.\r
+\r
+OUTPUT_DIRECTORY       = ./Documentation/\r
+\r
+# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create \r
+# 4096 sub-directories (in 2 levels) under the output directory of each output \r
+# format and will distribute the generated files over these directories. \r
+# Enabling this option can be useful when feeding doxygen a huge amount of \r
+# source files, where putting all generated files in the same directory would \r
+# otherwise cause performance problems for the file system.\r
+\r
+CREATE_SUBDIRS         = YES\r
+\r
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all \r
+# documentation generated by doxygen is written. Doxygen will use this \r
+# information to generate all constant output in the proper language. \r
+# The default language is English, other supported languages are: \r
+# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, \r
+# Croatian, Czech, Danish, Dutch, Farsi, Finnish, French, German, Greek, \r
+# Hungarian, Italian, Japanese, Japanese-en (Japanese with English messages), \r
+# Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, Polish, \r
+# Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, Slovene, \r
+# Spanish, Swedish, and Ukrainian.\r
+\r
+OUTPUT_LANGUAGE        = English\r
+\r
+# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will \r
+# include brief member descriptions after the members that are listed in \r
+# the file and class documentation (similar to JavaDoc). \r
+# Set to NO to disable this.\r
+\r
+BRIEF_MEMBER_DESC      = YES\r
+\r
+# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend \r
+# the brief description of a member or function before the detailed description. \r
+# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the \r
+# brief descriptions will be completely suppressed.\r
+\r
+REPEAT_BRIEF           = YES\r
+\r
+# This tag implements a quasi-intelligent brief description abbreviator \r
+# that is used to form the text in various listings. Each string \r
+# in this list, if found as the leading text of the brief description, will be \r
+# stripped from the text and the result after processing the whole list, is \r
+# used as the annotated text. Otherwise, the brief description is used as-is. \r
+# If left blank, the following values are used ("$name" is automatically \r
+# replaced with the name of the entity): "The $name class" "The $name widget" \r
+# "The $name file" "is" "provides" "specifies" "contains" \r
+# "represents" "a" "an" "the"\r
+\r
+ABBREVIATE_BRIEF       = "The $name class" \\r
+                         "The $name widget" \\r
+                         "The $name file" \\r
+                         is \\r
+                         provides \\r
+                         specifies \\r
+                         contains \\r
+                         represents \\r
+                         a \\r
+                         an \\r
+                         the\r
+\r
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then \r
+# Doxygen will generate a detailed section even if there is only a brief \r
+# description.\r
+\r
+ALWAYS_DETAILED_SEC    = NO\r
+\r
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all \r
+# inherited members of a class in the documentation of that class as if those \r
+# members were ordinary class members. Constructors, destructors and assignment \r
+# operators of the base classes will not be shown.\r
+\r
+INLINE_INHERITED_MEMB  = NO\r
+\r
+# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full \r
+# path before files name in the file list and in the header files. If set \r
+# to NO the shortest path that makes the file name unique will be used.\r
+\r
+FULL_PATH_NAMES        = YES\r
+\r
+# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag \r
+# can be used to strip a user-defined part of the path. Stripping is \r
+# only done if one of the specified strings matches the left-hand part of \r
+# the path. The tag can be used to show relative paths in the file list. \r
+# If left blank the directory from which doxygen is run is used as the \r
+# path to strip.\r
+\r
+STRIP_FROM_PATH        = \r
+\r
+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of \r
+# the path mentioned in the documentation of a class, which tells \r
+# the reader which header file to include in order to use a class. \r
+# If left blank only the name of the header file containing the class \r
+# definition is used. Otherwise one should specify the include paths that \r
+# are normally passed to the compiler using the -I flag.\r
+\r
+STRIP_FROM_INC_PATH    = \r
+\r
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter \r
+# (but less readable) file names. This can be useful is your file systems \r
+# doesn't support long names like on DOS, Mac, or CD-ROM.\r
+\r
+SHORT_NAMES            = YES\r
+\r
+# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen \r
+# will interpret the first line (until the first dot) of a JavaDoc-style \r
+# comment as the brief description. If set to NO, the JavaDoc \r
+# comments will behave just like regular Qt-style comments \r
+# (thus requiring an explicit @brief command for a brief description.)\r
+\r
+JAVADOC_AUTOBRIEF      = NO\r
+\r
+# If the QT_AUTOBRIEF tag is set to YES then Doxygen will \r
+# interpret the first line (until the first dot) of a Qt-style \r
+# comment as the brief description. If set to NO, the comments \r
+# will behave just like regular Qt-style comments (thus requiring \r
+# an explicit \brief command for a brief description.)\r
+\r
+QT_AUTOBRIEF           = NO\r
+\r
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen \r
+# treat a multi-line C++ special comment block (i.e. a block of //! or /// \r
+# comments) as a brief description. This used to be the default behaviour. \r
+# The new default is to treat a multi-line C++ comment block as a detailed \r
+# description. Set this tag to YES if you prefer the old behaviour instead.\r
+\r
+MULTILINE_CPP_IS_BRIEF = NO\r
+\r
+# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented \r
+# member inherits the documentation from any documented member that it \r
+# re-implements.\r
+\r
+INHERIT_DOCS           = YES\r
+\r
+# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce \r
+# a new page for each member. If set to NO, the documentation of a member will \r
+# be part of the file/class/namespace that contains it.\r
+\r
+SEPARATE_MEMBER_PAGES  = NO\r
+\r
+# The TAB_SIZE tag can be used to set the number of spaces in a tab. \r
+# Doxygen uses this value to replace tabs by spaces in code fragments.\r
+\r
+TAB_SIZE               = 4\r
+\r
+# This tag can be used to specify a number of aliases that acts \r
+# as commands in the documentation. An alias has the form "name=value". \r
+# For example adding "sideeffect=\par Side Effects:\n" will allow you to \r
+# put the command \sideeffect (or @sideeffect) in the documentation, which \r
+# will result in a user-defined paragraph with heading "Side Effects:". \r
+# You can put \n's in the value part of an alias to insert newlines.\r
+\r
+ALIASES                = \r
+\r
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C \r
+# sources only. Doxygen will then generate output that is more tailored for C. \r
+# For instance, some of the names that are used will be different. The list \r
+# of all members will be omitted, etc.\r
+\r
+OPTIMIZE_OUTPUT_FOR_C  = YES\r
+\r
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java \r
+# sources only. Doxygen will then generate output that is more tailored for \r
+# Java. For instance, namespaces will be presented as packages, qualified \r
+# scopes will look different, etc.\r
+\r
+OPTIMIZE_OUTPUT_JAVA   = NO\r
+\r
+# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran \r
+# sources only. Doxygen will then generate output that is more tailored for \r
+# Fortran.\r
+\r
+OPTIMIZE_FOR_FORTRAN   = NO\r
+\r
+# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL \r
+# sources. Doxygen will then generate output that is tailored for \r
+# VHDL.\r
+\r
+OPTIMIZE_OUTPUT_VHDL   = NO\r
+\r
+# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want \r
+# to include (a tag file for) the STL sources as input, then you should \r
+# set this tag to YES in order to let doxygen match functions declarations and \r
+# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. \r
+# func(std::string) {}). This also make the inheritance and collaboration \r
+# diagrams that involve STL classes more complete and accurate.\r
+\r
+BUILTIN_STL_SUPPORT    = NO\r
+\r
+# If you use Microsoft's C++/CLI language, you should set this option to YES to\r
+# enable parsing support.\r
+\r
+CPP_CLI_SUPPORT        = NO\r
+\r
+# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. \r
+# Doxygen will parse them like normal C++ but will assume all classes use public \r
+# instead of private inheritance when no explicit protection keyword is present.\r
+\r
+SIP_SUPPORT            = NO\r
+\r
+# For Microsoft's IDL there are propget and propput attributes to indicate getter \r
+# and setter methods for a property. Setting this option to YES (the default) \r
+# will make doxygen to replace the get and set methods by a property in the \r
+# documentation. This will only work if the methods are indeed getting or \r
+# setting a simple type. If this is not the case, or you want to show the \r
+# methods anyway, you should set this option to NO.\r
+\r
+IDL_PROPERTY_SUPPORT   = YES\r
+\r
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC \r
+# tag is set to YES, then doxygen will reuse the documentation of the first \r
+# member in the group (if any) for the other members of the group. By default \r
+# all members of a group must be documented explicitly.\r
+\r
+DISTRIBUTE_GROUP_DOC   = NO\r
+\r
+# Set the SUBGROUPING tag to YES (the default) to allow class member groups of \r
+# the same type (for instance a group of public functions) to be put as a \r
+# subgroup of that type (e.g. under the Public Functions section). Set it to \r
+# NO to prevent subgrouping. Alternatively, this can be done per class using \r
+# the \nosubgrouping command.\r
+\r
+SUBGROUPING            = YES\r
+\r
+# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum \r
+# is documented as struct, union, or enum with the name of the typedef. So \r
+# typedef struct TypeS {} TypeT, will appear in the documentation as a struct \r
+# with name TypeT. When disabled the typedef will appear as a member of a file, \r
+# namespace, or class. And the struct will be named TypeS. This can typically \r
+# be useful for C code in case the coding convention dictates that all compound \r
+# types are typedef'ed and only the typedef is referenced, never the tag name.\r
+\r
+TYPEDEF_HIDES_STRUCT   = NO\r
+\r
+# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to \r
+# determine which symbols to keep in memory and which to flush to disk.\r
+# When the cache is full, less often used symbols will be written to disk.\r
+# For small to medium size projects (<1000 input files) the default value is \r
+# probably good enough. For larger projects a too small cache size can cause \r
+# doxygen to be busy swapping symbols to and from disk most of the time \r
+# causing a significant performance penality. \r
+# If the system has enough physical memory increasing the cache will improve the \r
+# performance by keeping more symbols in memory. Note that the value works on \r
+# a logarithmic scale so increasing the size by one will rougly double the \r
+# memory usage. The cache size is given by this formula: \r
+# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, \r
+# corresponding to a cache size of 2^16 = 65536 symbols\r
+\r
+SYMBOL_CACHE_SIZE      = 0\r
+\r
+#---------------------------------------------------------------------------\r
+# Build related configuration options\r
+#---------------------------------------------------------------------------\r
+\r
+# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in \r
+# documentation are documented, even if no documentation was available. \r
+# Private class members and static file members will be hidden unless \r
+# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES\r
+\r
+EXTRACT_ALL            = YES\r
+\r
+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class \r
+# will be included in the documentation.\r
+\r
+EXTRACT_PRIVATE        = YES\r
+\r
+# If the EXTRACT_STATIC tag is set to YES all static members of a file \r
+# will be included in the documentation.\r
+\r
+EXTRACT_STATIC         = YES\r
+\r
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) \r
+# defined locally in source files will be included in the documentation. \r
+# If set to NO only classes defined in header files are included.\r
+\r
+EXTRACT_LOCAL_CLASSES  = YES\r
+\r
+# This flag is only useful for Objective-C code. When set to YES local \r
+# methods, which are defined in the implementation section but not in \r
+# the interface are included in the documentation. \r
+# If set to NO (the default) only methods in the interface are included.\r
+\r
+EXTRACT_LOCAL_METHODS  = NO\r
+\r
+# If this flag is set to YES, the members of anonymous namespaces will be \r
+# extracted and appear in the documentation as a namespace called \r
+# 'anonymous_namespace{file}', where file will be replaced with the base \r
+# name of the file that contains the anonymous namespace. By default \r
+# anonymous namespace are hidden.\r
+\r
+EXTRACT_ANON_NSPACES   = NO\r
+\r
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all \r
+# undocumented members of documented classes, files or namespaces. \r
+# If set to NO (the default) these members will be included in the \r
+# various overviews, but no documentation section is generated. \r
+# This option has no effect if EXTRACT_ALL is enabled.\r
+\r
+HIDE_UNDOC_MEMBERS     = NO\r
+\r
+# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all \r
+# undocumented classes that are normally visible in the class hierarchy. \r
+# If set to NO (the default) these classes will be included in the various \r
+# overviews. This option has no effect if EXTRACT_ALL is enabled.\r
+\r
+HIDE_UNDOC_CLASSES     = NO\r
+\r
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all \r
+# friend (class|struct|union) declarations. \r
+# If set to NO (the default) these declarations will be included in the \r
+# documentation.\r
+\r
+HIDE_FRIEND_COMPOUNDS  = NO\r
+\r
+# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any \r
+# documentation blocks found inside the body of a function. \r
+# If set to NO (the default) these blocks will be appended to the \r
+# function's detailed documentation block.\r
+\r
+HIDE_IN_BODY_DOCS      = NO\r
+\r
+# The INTERNAL_DOCS tag determines if documentation \r
+# that is typed after a \internal command is included. If the tag is set \r
+# to NO (the default) then the documentation will be excluded. \r
+# Set it to YES to include the internal documentation.\r
+\r
+INTERNAL_DOCS          = NO\r
+\r
+# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate \r
+# file names in lower-case letters. If set to YES upper-case letters are also \r
+# allowed. This is useful if you have classes or files whose names only differ \r
+# in case and if your file system supports case sensitive file names. Windows \r
+# and Mac users are advised to set this option to NO.\r
+\r
+CASE_SENSE_NAMES       = NO\r
+\r
+# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen \r
+# will show members with their full class and namespace scopes in the \r
+# documentation. If set to YES the scope will be hidden.\r
+\r
+HIDE_SCOPE_NAMES       = NO\r
+\r
+# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen \r
+# will put a list of the files that are included by a file in the documentation \r
+# of that file.\r
+\r
+SHOW_INCLUDE_FILES     = YES\r
+\r
+# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] \r
+# is inserted in the documentation for inline members.\r
+\r
+INLINE_INFO            = YES\r
+\r
+# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen \r
+# will sort the (detailed) documentation of file and class members \r
+# alphabetically by member name. If set to NO the members will appear in \r
+# declaration order.\r
+\r
+SORT_MEMBER_DOCS       = YES\r
+\r
+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the \r
+# brief documentation of file, namespace and class members alphabetically \r
+# by member name. If set to NO (the default) the members will appear in \r
+# declaration order.\r
+\r
+SORT_BRIEF_DOCS        = NO\r
+\r
+# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the \r
+# hierarchy of group names into alphabetical order. If set to NO (the default) \r
+# the group names will appear in their defined order.\r
+\r
+SORT_GROUP_NAMES       = NO\r
+\r
+# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be \r
+# sorted by fully-qualified names, including namespaces. If set to \r
+# NO (the default), the class list will be sorted only by class name, \r
+# not including the namespace part. \r
+# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.\r
+# Note: This option applies only to the class list, not to the \r
+# alphabetical list.\r
+\r
+SORT_BY_SCOPE_NAME     = NO\r
+\r
+# The GENERATE_TODOLIST tag can be used to enable (YES) or \r
+# disable (NO) the todo list. This list is created by putting \todo \r
+# commands in the documentation.\r
+\r
+GENERATE_TODOLIST      = NO\r
+\r
+# The GENERATE_TESTLIST tag can be used to enable (YES) or \r
+# disable (NO) the test list. This list is created by putting \test \r
+# commands in the documentation.\r
+\r
+GENERATE_TESTLIST      = NO\r
+\r
+# The GENERATE_BUGLIST tag can be used to enable (YES) or \r
+# disable (NO) the bug list. This list is created by putting \bug \r
+# commands in the documentation.\r
+\r
+GENERATE_BUGLIST       = NO\r
+\r
+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or \r
+# disable (NO) the deprecated list. This list is created by putting \r
+# \deprecated commands in the documentation.\r
+\r
+GENERATE_DEPRECATEDLIST= YES\r
+\r
+# The ENABLED_SECTIONS tag can be used to enable conditional \r
+# documentation sections, marked by \if sectionname ... \endif.\r
+\r
+ENABLED_SECTIONS       = \r
+\r
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines \r
+# the initial value of a variable or define consists of for it to appear in \r
+# the documentation. If the initializer consists of more lines than specified \r
+# here it will be hidden. Use a value of 0 to hide initializers completely. \r
+# The appearance of the initializer of individual variables and defines in the \r
+# documentation can be controlled using \showinitializer or \hideinitializer \r
+# command in the documentation regardless of this setting.\r
+\r
+MAX_INITIALIZER_LINES  = 30\r
+\r
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated \r
+# at the bottom of the documentation of classes and structs. If set to YES the \r
+# list will mention the files that were used to generate the documentation.\r
+\r
+SHOW_USED_FILES        = YES\r
+\r
+# If the sources in your project are distributed over multiple directories \r
+# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy \r
+# in the documentation. The default is NO.\r
+\r
+SHOW_DIRECTORIES       = YES\r
+\r
+# Set the SHOW_FILES tag to NO to disable the generation of the Files page.\r
+# This will remove the Files entry from the Quick Index and from the \r
+# Folder Tree View (if specified). The default is YES.\r
+\r
+SHOW_FILES             = YES\r
+\r
+# Set the SHOW_NAMESPACES tag to NO to disable the generation of the \r
+# Namespaces page.  This will remove the Namespaces entry from the Quick Index\r
+# and from the Folder Tree View (if specified). The default is YES.\r
+\r
+SHOW_NAMESPACES        = YES\r
+\r
+# The FILE_VERSION_FILTER tag can be used to specify a program or script that \r
+# doxygen should invoke to get the current version for each file (typically from \r
+# the version control system). Doxygen will invoke the program by executing (via \r
+# popen()) the command <command> <input-file>, where <command> is the value of \r
+# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file \r
+# provided by doxygen. Whatever the program writes to standard output \r
+# is used as the file version. See the manual for examples.\r
+\r
+FILE_VERSION_FILTER    = \r
+\r
+# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by \r
+# doxygen. The layout file controls the global structure of the generated output files \r
+# in an output format independent way. The create the layout file that represents \r
+# doxygen's defaults, run doxygen with the -l option. You can optionally specify a \r
+# file name after the option, if omitted DoxygenLayout.xml will be used as the name \r
+# of the layout file.\r
+\r
+LAYOUT_FILE            = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to warning and progress messages\r
+#---------------------------------------------------------------------------\r
+\r
+# The QUIET tag can be used to turn on/off the messages that are generated \r
+# by doxygen. Possible values are YES and NO. If left blank NO is used.\r
+\r
+QUIET                  = YES\r
+\r
+# The WARNINGS tag can be used to turn on/off the warning messages that are \r
+# generated by doxygen. Possible values are YES and NO. If left blank \r
+# NO is used.\r
+\r
+WARNINGS               = YES\r
+\r
+# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings \r
+# for undocumented members. If EXTRACT_ALL is set to YES then this flag will \r
+# automatically be disabled.\r
+\r
+WARN_IF_UNDOCUMENTED   = YES\r
+\r
+# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for \r
+# potential errors in the documentation, such as not documenting some \r
+# parameters in a documented function, or documenting parameters that \r
+# don't exist or using markup commands wrongly.\r
+\r
+WARN_IF_DOC_ERROR      = YES\r
+\r
+# This WARN_NO_PARAMDOC option can be abled to get warnings for \r
+# functions that are documented, but have no documentation for their parameters \r
+# or return value. If set to NO (the default) doxygen will only warn about \r
+# wrong or incomplete parameter documentation, but not about the absence of \r
+# documentation.\r
+\r
+WARN_NO_PARAMDOC       = YES\r
+\r
+# The WARN_FORMAT tag determines the format of the warning messages that \r
+# doxygen can produce. The string should contain the $file, $line, and $text \r
+# tags, which will be replaced by the file and line number from which the \r
+# warning originated and the warning text. Optionally the format may contain \r
+# $version, which will be replaced by the version of the file (if it could \r
+# be obtained via FILE_VERSION_FILTER)\r
+\r
+WARN_FORMAT            = "$file:$line: $text"\r
+\r
+# The WARN_LOGFILE tag can be used to specify a file to which warning \r
+# and error messages should be written. If left blank the output is written \r
+# to stderr.\r
+\r
+WARN_LOGFILE           = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the input files\r
+#---------------------------------------------------------------------------\r
+\r
+# The INPUT tag can be used to specify the files and/or directories that contain \r
+# documented source files. You may enter file names like "myfile.cpp" or \r
+# directories like "/usr/src/myproject". Separate the files or directories \r
+# with spaces.\r
+\r
+INPUT                  = ./\r
+\r
+# This tag can be used to specify the character encoding of the source files \r
+# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is \r
+# also the default input encoding. Doxygen uses libiconv (or the iconv built \r
+# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for \r
+# the list of possible encodings.\r
+\r
+INPUT_ENCODING         = UTF-8\r
+\r
+# If the value of the INPUT tag contains directories, you can use the \r
+# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \r
+# and *.h) to filter out the source-files in the directories. If left \r
+# blank the following patterns are tested: \r
+# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx \r
+# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90\r
+\r
+FILE_PATTERNS          = *.h \\r
+                         *.c \\r
+                                                *.txt\r
+\r
+# The RECURSIVE tag can be used to turn specify whether or not subdirectories \r
+# should be searched for input files as well. Possible values are YES and NO. \r
+# If left blank NO is used.\r
+\r
+RECURSIVE              = YES\r
+\r
+# The EXCLUDE tag can be used to specify files and/or directories that should \r
+# excluded from the INPUT source files. This way you can easily exclude a \r
+# subdirectory from a directory tree whose root is specified with the INPUT tag.\r
+\r
+EXCLUDE                = \r
+\r
+# The EXCLUDE_SYMLINKS tag can be used select whether or not files or \r
+# directories that are symbolic links (a Unix filesystem feature) are excluded \r
+# from the input.\r
+\r
+EXCLUDE_SYMLINKS       = NO\r
+\r
+# If the value of the INPUT tag contains directories, you can use the \r
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude \r
+# certain files from those directories. Note that the wildcards are matched \r
+# against the file with absolute path, so to exclude all test directories \r
+# for example use the pattern */test/*\r
+\r
+EXCLUDE_PATTERNS       = */LowLevel/USBMode.h\r
+\r
+# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names \r
+# (namespaces, classes, functions, etc.) that should be excluded from the \r
+# output. The symbol name can be a fully qualified name, a word, or if the \r
+# wildcard * is used, a substring. Examples: ANamespace, AClass, \r
+# AClass::ANamespace, ANamespace::*Test\r
+\r
+EXCLUDE_SYMBOLS        = __*\r
+\r
+# The EXAMPLE_PATH tag can be used to specify one or more files or \r
+# directories that contain example code fragments that are included (see \r
+# the \include command).\r
+\r
+EXAMPLE_PATH           = \r
+\r
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the \r
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \r
+# and *.h) to filter out the source-files in the directories. If left \r
+# blank all files are included.\r
+\r
+EXAMPLE_PATTERNS       = *\r
+\r
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be \r
+# searched for input files to be used with the \include or \dontinclude \r
+# commands irrespective of the value of the RECURSIVE tag. \r
+# Possible values are YES and NO. If left blank NO is used.\r
+\r
+EXAMPLE_RECURSIVE      = NO\r
+\r
+# The IMAGE_PATH tag can be used to specify one or more files or \r
+# directories that contain image that are included in the documentation (see \r
+# the \image command).\r
+\r
+IMAGE_PATH             = \r
+\r
+# The INPUT_FILTER tag can be used to specify a program that doxygen should \r
+# invoke to filter for each input file. Doxygen will invoke the filter program \r
+# by executing (via popen()) the command <filter> <input-file>, where <filter> \r
+# is the value of the INPUT_FILTER tag, and <input-file> is the name of an \r
+# input file. Doxygen will then use the output that the filter program writes \r
+# to standard output.  If FILTER_PATTERNS is specified, this tag will be \r
+# ignored.\r
+\r
+INPUT_FILTER           = \r
+\r
+# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern \r
+# basis.  Doxygen will compare the file name with each pattern and apply the \r
+# filter if there is a match.  The filters are a list of the form: \r
+# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further \r
+# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER \r
+# is applied to all files.\r
+\r
+FILTER_PATTERNS        = \r
+\r
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using \r
+# INPUT_FILTER) will be used to filter the input files when producing source \r
+# files to browse (i.e. when SOURCE_BROWSER is set to YES).\r
+\r
+FILTER_SOURCE_FILES    = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to source browsing\r
+#---------------------------------------------------------------------------\r
+\r
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will \r
+# be generated. Documented entities will be cross-referenced with these sources. \r
+# Note: To get rid of all source code in the generated output, make sure also \r
+# VERBATIM_HEADERS is set to NO.\r
+\r
+SOURCE_BROWSER         = NO\r
+\r
+# Setting the INLINE_SOURCES tag to YES will include the body \r
+# of functions and classes directly in the documentation.\r
+\r
+INLINE_SOURCES         = NO\r
+\r
+# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct \r
+# doxygen to hide any special comment blocks from generated source code \r
+# fragments. Normal C and C++ comments will always remain visible.\r
+\r
+STRIP_CODE_COMMENTS    = YES\r
+\r
+# If the REFERENCED_BY_RELATION tag is set to YES \r
+# then for each documented function all documented \r
+# functions referencing it will be listed.\r
+\r
+REFERENCED_BY_RELATION = NO\r
+\r
+# If the REFERENCES_RELATION tag is set to YES \r
+# then for each documented function all documented entities \r
+# called/used by that function will be listed.\r
+\r
+REFERENCES_RELATION    = NO\r
+\r
+# If the REFERENCES_LINK_SOURCE tag is set to YES (the default)\r
+# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from\r
+# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will\r
+# link to the source code.  Otherwise they will link to the documentstion.\r
+\r
+REFERENCES_LINK_SOURCE = NO\r
+\r
+# If the USE_HTAGS tag is set to YES then the references to source code \r
+# will point to the HTML generated by the htags(1) tool instead of doxygen \r
+# built-in source browser. The htags tool is part of GNU's global source \r
+# tagging system (see http://www.gnu.org/software/global/global.html). You \r
+# will need version 4.8.6 or higher.\r
+\r
+USE_HTAGS              = NO\r
+\r
+# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen \r
+# will generate a verbatim copy of the header file for each class for \r
+# which an include is specified. Set to NO to disable this.\r
+\r
+VERBATIM_HEADERS       = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the alphabetical class index\r
+#---------------------------------------------------------------------------\r
+\r
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index \r
+# of all compounds will be generated. Enable this if the project \r
+# contains a lot of classes, structs, unions or interfaces.\r
+\r
+ALPHABETICAL_INDEX     = YES\r
+\r
+# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then \r
+# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns \r
+# in which this list will be split (can be a number in the range [1..20])\r
+\r
+COLS_IN_ALPHA_INDEX    = 5\r
+\r
+# In case all classes in a project start with a common prefix, all \r
+# classes will be put under the same header in the alphabetical index. \r
+# The IGNORE_PREFIX tag can be used to specify one or more prefixes that \r
+# should be ignored while generating the index headers.\r
+\r
+IGNORE_PREFIX          = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the HTML output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_HTML tag is set to YES (the default) Doxygen will \r
+# generate HTML output.\r
+\r
+GENERATE_HTML          = YES\r
+\r
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `html' will be used as the default path.\r
+\r
+HTML_OUTPUT            = html\r
+\r
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for \r
+# each generated HTML page (for example: .htm,.php,.asp). If it is left blank \r
+# doxygen will generate files with .html extension.\r
+\r
+HTML_FILE_EXTENSION    = .html\r
+\r
+# The HTML_HEADER tag can be used to specify a personal HTML header for \r
+# each generated HTML page. If it is left blank doxygen will generate a \r
+# standard header.\r
+\r
+HTML_HEADER            = \r
+\r
+# The HTML_FOOTER tag can be used to specify a personal HTML footer for \r
+# each generated HTML page. If it is left blank doxygen will generate a \r
+# standard footer.\r
+\r
+HTML_FOOTER            = \r
+\r
+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading \r
+# style sheet that is used by each HTML page. It can be used to \r
+# fine-tune the look of the HTML output. If the tag is left blank doxygen \r
+# will generate a default style sheet. Note that doxygen will try to copy \r
+# the style sheet file to the HTML output directory, so don't put your own \r
+# stylesheet in the HTML output directory as well, or it will be erased!\r
+\r
+HTML_STYLESHEET        = \r
+\r
+# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, \r
+# files or namespaces will be aligned in HTML using tables. If set to \r
+# NO a bullet list will be used.\r
+\r
+HTML_ALIGN_MEMBERS     = YES\r
+\r
+# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML \r
+# documentation will contain sections that can be hidden and shown after the \r
+# page has loaded. For this to work a browser that supports \r
+# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox \r
+# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari).\r
+\r
+HTML_DYNAMIC_SECTIONS  = YES\r
+\r
+# If the GENERATE_DOCSET tag is set to YES, additional index files \r
+# will be generated that can be used as input for Apple's Xcode 3 \r
+# integrated development environment, introduced with OSX 10.5 (Leopard). \r
+# To create a documentation set, doxygen will generate a Makefile in the \r
+# HTML output directory. Running make will produce the docset in that \r
+# directory and running "make install" will install the docset in \r
+# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find \r
+# it at startup. \r
+# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information.\r
+\r
+GENERATE_DOCSET        = NO\r
+\r
+# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the \r
+# feed. A documentation feed provides an umbrella under which multiple \r
+# documentation sets from a single provider (such as a company or product suite) \r
+# can be grouped.\r
+\r
+DOCSET_FEEDNAME        = "Doxygen generated docs"\r
+\r
+# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that \r
+# should uniquely identify the documentation set bundle. This should be a \r
+# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen \r
+# will append .docset to the name.\r
+\r
+DOCSET_BUNDLE_ID       = org.doxygen.Project\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, additional index files \r
+# will be generated that can be used as input for tools like the \r
+# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) \r
+# of the generated HTML documentation.\r
+\r
+GENERATE_HTMLHELP      = NO\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can \r
+# be used to specify the file name of the resulting .chm file. You \r
+# can add a path in front of the file if the result should not be \r
+# written to the html output directory.\r
+\r
+CHM_FILE               = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can \r
+# be used to specify the location (absolute path including file name) of \r
+# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run \r
+# the HTML help compiler on the generated index.hhp.\r
+\r
+HHC_LOCATION           = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag \r
+# controls if a separate .chi index file is generated (YES) or that \r
+# it should be included in the master .chm file (NO).\r
+\r
+GENERATE_CHI           = NO\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING\r
+# is used to encode HtmlHelp index (hhk), content (hhc) and project file\r
+# content.\r
+\r
+CHM_INDEX_ENCODING     = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag \r
+# controls whether a binary table of contents is generated (YES) or a \r
+# normal table of contents (NO) in the .chm file.\r
+\r
+BINARY_TOC             = NO\r
+\r
+# The TOC_EXPAND flag can be set to YES to add extra items for group members \r
+# to the contents of the HTML help documentation and to the tree view.\r
+\r
+TOC_EXPAND             = YES\r
+\r
+# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER \r
+# are set, an additional index file will be generated that can be used as input for \r
+# Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated \r
+# HTML documentation.\r
+\r
+GENERATE_QHP           = NO\r
+\r
+# If the QHG_LOCATION tag is specified, the QCH_FILE tag can \r
+# be used to specify the file name of the resulting .qch file. \r
+# The path specified is relative to the HTML output folder.\r
+\r
+QCH_FILE               = \r
+\r
+# The QHP_NAMESPACE tag specifies the namespace to use when generating \r
+# Qt Help Project output. For more information please see \r
+# <a href="http://doc.trolltech.com/qthelpproject.html#namespace">Qt Help Project / Namespace</a>.\r
+\r
+QHP_NAMESPACE          = org.doxygen.Project\r
+\r
+# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating \r
+# Qt Help Project output. For more information please see \r
+# <a href="http://doc.trolltech.com/qthelpproject.html#virtual-folders">Qt Help Project / Virtual Folders</a>.\r
+\r
+QHP_VIRTUAL_FOLDER     = doc\r
+\r
+# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can \r
+# be used to specify the location of Qt's qhelpgenerator. \r
+# If non-empty doxygen will try to run qhelpgenerator on the generated \r
+# .qhp file .\r
+\r
+QHG_LOCATION           = \r
+\r
+# The DISABLE_INDEX tag can be used to turn on/off the condensed index at \r
+# top of each HTML page. The value NO (the default) enables the index and \r
+# the value YES disables it.\r
+\r
+DISABLE_INDEX          = NO\r
+\r
+# This tag can be used to set the number of enum values (range [1..20]) \r
+# that doxygen will group on one line in the generated HTML documentation.\r
+\r
+ENUM_VALUES_PER_LINE   = 1\r
+\r
+# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index\r
+# structure should be generated to display hierarchical information.\r
+# If the tag value is set to FRAME, a side panel will be generated\r
+# containing a tree-like index structure (just like the one that \r
+# is generated for HTML Help). For this to work a browser that supports \r
+# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, \r
+# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are \r
+# probably better off using the HTML help feature. Other possible values \r
+# for this tag are: HIERARCHIES, which will generate the Groups, Directories,\r
+# and Class Hierarchy pages using a tree view instead of an ordered list;\r
+# ALL, which combines the behavior of FRAME and HIERARCHIES; and NONE, which\r
+# disables this behavior completely. For backwards compatibility with previous\r
+# releases of Doxygen, the values YES and NO are equivalent to FRAME and NONE\r
+# respectively.\r
+\r
+GENERATE_TREEVIEW      = YES\r
+\r
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be \r
+# used to set the initial width (in pixels) of the frame in which the tree \r
+# is shown.\r
+\r
+TREEVIEW_WIDTH         = 250\r
+\r
+# Use this tag to change the font size of Latex formulas included \r
+# as images in the HTML documentation. The default is 10. Note that \r
+# when you change the font size after a successful doxygen run you need \r
+# to manually remove any form_*.png images from the HTML output directory \r
+# to force them to be regenerated.\r
+\r
+FORMULA_FONTSIZE       = 10\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the LaTeX output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will \r
+# generate Latex output.\r
+\r
+GENERATE_LATEX         = NO\r
+\r
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `latex' will be used as the default path.\r
+\r
+LATEX_OUTPUT           = latex\r
+\r
+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be \r
+# invoked. If left blank `latex' will be used as the default command name.\r
+\r
+LATEX_CMD_NAME         = latex\r
+\r
+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to \r
+# generate index for LaTeX. If left blank `makeindex' will be used as the \r
+# default command name.\r
+\r
+MAKEINDEX_CMD_NAME     = makeindex\r
+\r
+# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact \r
+# LaTeX documents. This may be useful for small projects and may help to \r
+# save some trees in general.\r
+\r
+COMPACT_LATEX          = NO\r
+\r
+# The PAPER_TYPE tag can be used to set the paper type that is used \r
+# by the printer. Possible values are: a4, a4wide, letter, legal and \r
+# executive. If left blank a4wide will be used.\r
+\r
+PAPER_TYPE             = a4wide\r
+\r
+# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX \r
+# packages that should be included in the LaTeX output.\r
+\r
+EXTRA_PACKAGES         = \r
+\r
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for \r
+# the generated latex document. The header should contain everything until \r
+# the first chapter. If it is left blank doxygen will generate a \r
+# standard header. Notice: only use this tag if you know what you are doing!\r
+\r
+LATEX_HEADER           = \r
+\r
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated \r
+# is prepared for conversion to pdf (using ps2pdf). The pdf file will \r
+# contain links (just like the HTML output) instead of page references \r
+# This makes the output suitable for online browsing using a pdf viewer.\r
+\r
+PDF_HYPERLINKS         = YES\r
+\r
+# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of \r
+# plain latex in the generated Makefile. Set this option to YES to get a \r
+# higher quality PDF documentation.\r
+\r
+USE_PDFLATEX           = YES\r
+\r
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. \r
+# command to the generated LaTeX files. This will instruct LaTeX to keep \r
+# running if errors occur, instead of asking the user for help. \r
+# This option is also used when generating formulas in HTML.\r
+\r
+LATEX_BATCHMODE        = NO\r
+\r
+# If LATEX_HIDE_INDICES is set to YES then doxygen will not \r
+# include the index chapters (such as File Index, Compound Index, etc.) \r
+# in the output.\r
+\r
+LATEX_HIDE_INDICES     = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the RTF output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output \r
+# The RTF output is optimized for Word 97 and may not look very pretty with \r
+# other RTF readers or editors.\r
+\r
+GENERATE_RTF           = NO\r
+\r
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `rtf' will be used as the default path.\r
+\r
+RTF_OUTPUT             = rtf\r
+\r
+# If the COMPACT_RTF tag is set to YES Doxygen generates more compact \r
+# RTF documents. This may be useful for small projects and may help to \r
+# save some trees in general.\r
+\r
+COMPACT_RTF            = NO\r
+\r
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated \r
+# will contain hyperlink fields. The RTF file will \r
+# contain links (just like the HTML output) instead of page references. \r
+# This makes the output suitable for online browsing using WORD or other \r
+# programs which support those fields. \r
+# Note: wordpad (write) and others do not support links.\r
+\r
+RTF_HYPERLINKS         = NO\r
+\r
+# Load stylesheet definitions from file. Syntax is similar to doxygen's \r
+# config file, i.e. a series of assignments. You only have to provide \r
+# replacements, missing definitions are set to their default value.\r
+\r
+RTF_STYLESHEET_FILE    = \r
+\r
+# Set optional variables used in the generation of an rtf document. \r
+# Syntax is similar to doxygen's config file.\r
+\r
+RTF_EXTENSIONS_FILE    = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the man page output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_MAN tag is set to YES (the default) Doxygen will \r
+# generate man pages\r
+\r
+GENERATE_MAN           = NO\r
+\r
+# The MAN_OUTPUT tag is used to specify where the man pages will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `man' will be used as the default path.\r
+\r
+MAN_OUTPUT             = man\r
+\r
+# The MAN_EXTENSION tag determines the extension that is added to \r
+# the generated man pages (default is the subroutine's section .3)\r
+\r
+MAN_EXTENSION          = .3\r
+\r
+# If the MAN_LINKS tag is set to YES and Doxygen generates man output, \r
+# then it will generate one additional man file for each entity \r
+# documented in the real man page(s). These additional files \r
+# only source the real man page, but without them the man command \r
+# would be unable to find the correct page. The default is NO.\r
+\r
+MAN_LINKS              = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the XML output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_XML tag is set to YES Doxygen will \r
+# generate an XML file that captures the structure of \r
+# the code including all documentation.\r
+\r
+GENERATE_XML           = NO\r
+\r
+# The XML_OUTPUT tag is used to specify where the XML pages will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `xml' will be used as the default path.\r
+\r
+XML_OUTPUT             = xml\r
+\r
+# The XML_SCHEMA tag can be used to specify an XML schema, \r
+# which can be used by a validating XML parser to check the \r
+# syntax of the XML files.\r
+\r
+XML_SCHEMA             = \r
+\r
+# The XML_DTD tag can be used to specify an XML DTD, \r
+# which can be used by a validating XML parser to check the \r
+# syntax of the XML files.\r
+\r
+XML_DTD                = \r
+\r
+# If the XML_PROGRAMLISTING tag is set to YES Doxygen will \r
+# dump the program listings (including syntax highlighting \r
+# and cross-referencing information) to the XML output. Note that \r
+# enabling this will significantly increase the size of the XML output.\r
+\r
+XML_PROGRAMLISTING     = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options for the AutoGen Definitions output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will \r
+# generate an AutoGen Definitions (see autogen.sf.net) file \r
+# that captures the structure of the code including all \r
+# documentation. Note that this feature is still experimental \r
+# and incomplete at the moment.\r
+\r
+GENERATE_AUTOGEN_DEF   = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the Perl module output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_PERLMOD tag is set to YES Doxygen will \r
+# generate a Perl module file that captures the structure of \r
+# the code including all documentation. Note that this \r
+# feature is still experimental and incomplete at the \r
+# moment.\r
+\r
+GENERATE_PERLMOD       = NO\r
+\r
+# If the PERLMOD_LATEX tag is set to YES Doxygen will generate \r
+# the necessary Makefile rules, Perl scripts and LaTeX code to be able \r
+# to generate PDF and DVI output from the Perl module output.\r
+\r
+PERLMOD_LATEX          = NO\r
+\r
+# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be \r
+# nicely formatted so it can be parsed by a human reader.  This is useful \r
+# if you want to understand what is going on.  On the other hand, if this \r
+# tag is set to NO the size of the Perl module output will be much smaller \r
+# and Perl will parse it just the same.\r
+\r
+PERLMOD_PRETTY         = YES\r
+\r
+# The names of the make variables in the generated doxyrules.make file \r
+# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. \r
+# This is useful so different doxyrules.make files included by the same \r
+# Makefile don't overwrite each other's variables.\r
+\r
+PERLMOD_MAKEVAR_PREFIX = \r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration options related to the preprocessor   \r
+#---------------------------------------------------------------------------\r
+\r
+# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will \r
+# evaluate all C-preprocessor directives found in the sources and include \r
+# files.\r
+\r
+ENABLE_PREPROCESSING   = YES\r
+\r
+# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro \r
+# names in the source code. If set to NO (the default) only conditional \r
+# compilation will be performed. Macro expansion can be done in a controlled \r
+# way by setting EXPAND_ONLY_PREDEF to YES.\r
+\r
+MACRO_EXPANSION        = YES\r
+\r
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES \r
+# then the macro expansion is limited to the macros specified with the \r
+# PREDEFINED and EXPAND_AS_DEFINED tags.\r
+\r
+EXPAND_ONLY_PREDEF     = YES\r
+\r
+# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files \r
+# in the INCLUDE_PATH (see below) will be search if a #include is found.\r
+\r
+SEARCH_INCLUDES        = YES\r
+\r
+# The INCLUDE_PATH tag can be used to specify one or more directories that \r
+# contain include files that are not input files but should be processed by \r
+# the preprocessor.\r
+\r
+INCLUDE_PATH           = \r
+\r
+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard \r
+# patterns (like *.h and *.hpp) to filter out the header-files in the \r
+# directories. If left blank, the patterns specified with FILE_PATTERNS will \r
+# be used.\r
+\r
+INCLUDE_FILE_PATTERNS  = \r
+\r
+# The PREDEFINED tag can be used to specify one or more macro names that \r
+# are defined before the preprocessor is started (similar to the -D option of \r
+# gcc). The argument of the tag is a list of macros of the form: name \r
+# or name=definition (no spaces). If the definition and the = are \r
+# omitted =1 is assumed. To prevent a macro definition from being \r
+# undefined via #undef or recursively expanded use the := operator \r
+# instead of the = operator.\r
+\r
+PREDEFINED             = __DOXYGEN__\r
+\r
+# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then \r
+# this tag can be used to specify a list of macro names that should be expanded. \r
+# The macro definition that is found in the sources will be used. \r
+# Use the PREDEFINED tag if you want to use a different macro definition.\r
+\r
+EXPAND_AS_DEFINED      = BUTTLOADTAG\r
+\r
+# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then \r
+# doxygen's preprocessor will remove all function-like macros that are alone \r
+# on a line, have an all uppercase name, and do not end with a semicolon. Such \r
+# function macros are typically used for boiler-plate code, and will confuse \r
+# the parser if not removed.\r
+\r
+SKIP_FUNCTION_MACROS   = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration::additions related to external references   \r
+#---------------------------------------------------------------------------\r
+\r
+# The TAGFILES option can be used to specify one or more tagfiles. \r
+# Optionally an initial location of the external documentation \r
+# can be added for each tagfile. The format of a tag file without \r
+# this location is as follows: \r
+#   TAGFILES = file1 file2 ... \r
+# Adding location for the tag files is done as follows: \r
+#   TAGFILES = file1=loc1 "file2 = loc2" ... \r
+# where "loc1" and "loc2" can be relative or absolute paths or \r
+# URLs. If a location is present for each tag, the installdox tool \r
+# does not have to be run to correct the links.\r
+# Note that each tag file must have a unique name\r
+# (where the name does NOT include the path)\r
+# If a tag file is not located in the directory in which doxygen \r
+# is run, you must also specify the path to the tagfile here.\r
+\r
+TAGFILES               = \r
+\r
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create \r
+# a tag file that is based on the input files it reads.\r
+\r
+GENERATE_TAGFILE       = \r
+\r
+# If the ALLEXTERNALS tag is set to YES all external classes will be listed \r
+# in the class index. If set to NO only the inherited external classes \r
+# will be listed.\r
+\r
+ALLEXTERNALS           = NO\r
+\r
+# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed \r
+# in the modules index. If set to NO, only the current project's groups will \r
+# be listed.\r
+\r
+EXTERNAL_GROUPS        = YES\r
+\r
+# The PERL_PATH should be the absolute path and name of the perl script \r
+# interpreter (i.e. the result of `which perl').\r
+\r
+PERL_PATH              = /usr/bin/perl\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration options related to the dot tool   \r
+#---------------------------------------------------------------------------\r
+\r
+# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will \r
+# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base \r
+# or super classes. Setting the tag to NO turns the diagrams off. Note that \r
+# this option is superseded by the HAVE_DOT option below. This is only a \r
+# fallback. It is recommended to install and use dot, since it yields more \r
+# powerful graphs.\r
+\r
+CLASS_DIAGRAMS         = NO\r
+\r
+# You can define message sequence charts within doxygen comments using the \msc \r
+# command. Doxygen will then run the mscgen tool (see \r
+# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the \r
+# documentation. The MSCGEN_PATH tag allows you to specify the directory where \r
+# the mscgen tool resides. If left empty the tool is assumed to be found in the \r
+# default search path.\r
+\r
+MSCGEN_PATH            = \r
+\r
+# If set to YES, the inheritance and collaboration graphs will hide \r
+# inheritance and usage relations if the target is undocumented \r
+# or is not a class.\r
+\r
+HIDE_UNDOC_RELATIONS   = YES\r
+\r
+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is \r
+# available from the path. This tool is part of Graphviz, a graph visualization \r
+# toolkit from AT&T and Lucent Bell Labs. The other options in this section \r
+# have no effect if this option is set to NO (the default)\r
+\r
+HAVE_DOT               = NO\r
+\r
+# By default doxygen will write a font called FreeSans.ttf to the output \r
+# directory and reference it in all dot files that doxygen generates. This \r
+# font does not include all possible unicode characters however, so when you need \r
+# these (or just want a differently looking font) you can specify the font name \r
+# using DOT_FONTNAME. You need need to make sure dot is able to find the font, \r
+# which can be done by putting it in a standard location or by setting the \r
+# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory \r
+# containing the font.\r
+\r
+DOT_FONTNAME           = FreeSans\r
+\r
+# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. \r
+# The default size is 10pt.\r
+\r
+DOT_FONTSIZE           = 10\r
+\r
+# By default doxygen will tell dot to use the output directory to look for the \r
+# FreeSans.ttf font (which doxygen will put there itself). If you specify a \r
+# different font using DOT_FONTNAME you can set the path where dot \r
+# can find it using this tag.\r
+\r
+DOT_FONTPATH           = \r
+\r
+# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for each documented class showing the direct and \r
+# indirect inheritance relations. Setting this tag to YES will force the \r
+# the CLASS_DIAGRAMS tag to NO.\r
+\r
+CLASS_GRAPH            = NO\r
+\r
+# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for each documented class showing the direct and \r
+# indirect implementation dependencies (inheritance, containment, and \r
+# class references variables) of the class with other documented classes.\r
+\r
+COLLABORATION_GRAPH    = NO\r
+\r
+# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for groups, showing the direct groups dependencies\r
+\r
+GROUP_GRAPHS           = NO\r
+\r
+# If the UML_LOOK tag is set to YES doxygen will generate inheritance and \r
+# collaboration diagrams in a style similar to the OMG's Unified Modeling \r
+# Language.\r
+\r
+UML_LOOK               = NO\r
+\r
+# If set to YES, the inheritance and collaboration graphs will show the \r
+# relations between templates and their instances.\r
+\r
+TEMPLATE_RELATIONS     = NO\r
+\r
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT \r
+# tags are set to YES then doxygen will generate a graph for each documented \r
+# file showing the direct and indirect include dependencies of the file with \r
+# other documented files.\r
+\r
+INCLUDE_GRAPH          = NO\r
+\r
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and \r
+# HAVE_DOT tags are set to YES then doxygen will generate a graph for each \r
+# documented header file showing the documented files that directly or \r
+# indirectly include this file.\r
+\r
+INCLUDED_BY_GRAPH      = NO\r
+\r
+# If the CALL_GRAPH and HAVE_DOT options are set to YES then \r
+# doxygen will generate a call dependency graph for every global function \r
+# or class method. Note that enabling this option will significantly increase \r
+# the time of a run. So in most cases it will be better to enable call graphs \r
+# for selected functions only using the \callgraph command.\r
+\r
+CALL_GRAPH             = NO\r
+\r
+# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then \r
+# doxygen will generate a caller dependency graph for every global function \r
+# or class method. Note that enabling this option will significantly increase \r
+# the time of a run. So in most cases it will be better to enable caller \r
+# graphs for selected functions only using the \callergraph command.\r
+\r
+CALLER_GRAPH           = NO\r
+\r
+# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen \r
+# will graphical hierarchy of all classes instead of a textual one.\r
+\r
+GRAPHICAL_HIERARCHY    = NO\r
+\r
+# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES \r
+# then doxygen will show the dependencies a directory has on other directories \r
+# in a graphical way. The dependency relations are determined by the #include\r
+# relations between the files in the directories.\r
+\r
+DIRECTORY_GRAPH        = NO\r
+\r
+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images \r
+# generated by dot. Possible values are png, jpg, or gif\r
+# If left blank png will be used.\r
+\r
+DOT_IMAGE_FORMAT       = png\r
+\r
+# The tag DOT_PATH can be used to specify the path where the dot tool can be \r
+# found. If left blank, it is assumed the dot tool can be found in the path.\r
+\r
+DOT_PATH               = "C:/Program Files/Graphviz2.18/bin"\r
+\r
+# The DOTFILE_DIRS tag can be used to specify one or more directories that \r
+# contain dot files that are included in the documentation (see the \r
+# \dotfile command).\r
+\r
+DOTFILE_DIRS           = \r
+\r
+# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of \r
+# nodes that will be shown in the graph. If the number of nodes in a graph \r
+# becomes larger than this value, doxygen will truncate the graph, which is \r
+# visualized by representing a node as a red box. Note that doxygen if the \r
+# number of direct children of the root node in a graph is already larger than \r
+# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note \r
+# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.\r
+\r
+DOT_GRAPH_MAX_NODES    = 15\r
+\r
+# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the \r
+# graphs generated by dot. A depth value of 3 means that only nodes reachable \r
+# from the root by following a path via at most 3 edges will be shown. Nodes \r
+# that lay further from the root node will be omitted. Note that setting this \r
+# option to 1 or 2 may greatly reduce the computation time needed for large \r
+# code bases. Also note that the size of a graph can be further restricted by \r
+# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.\r
+\r
+MAX_DOT_GRAPH_DEPTH    = 2\r
+\r
+# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent \r
+# background. This is disabled by default, because dot on Windows does not \r
+# seem to support this out of the box. Warning: Depending on the platform used, \r
+# enabling this option may lead to badly anti-aliased labels on the edges of \r
+# a graph (i.e. they become hard to read).\r
+\r
+DOT_TRANSPARENT        = YES\r
+\r
+# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output \r
+# files in one run (i.e. multiple -o and -T options on the command line). This \r
+# makes dot run faster, but since only newer versions of dot (>1.8.10) \r
+# support this, this feature is disabled by default.\r
+\r
+DOT_MULTI_TARGETS      = NO\r
+\r
+# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will \r
+# generate a legend page explaining the meaning of the various boxes and \r
+# arrows in the dot generated graphs.\r
+\r
+GENERATE_LEGEND        = YES\r
+\r
+# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will \r
+# remove the intermediate dot files that are used to generate \r
+# the various graphs.\r
+\r
+DOT_CLEANUP            = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration::additions related to the search engine   \r
+#---------------------------------------------------------------------------\r
+\r
+# The SEARCHENGINE tag specifies whether or not a search engine should be \r
+# used. If set to NO the values of all tags below this one will be ignored.\r
+\r
+SEARCHENGINE           = NO\r
diff --git a/Demos/Device/ClassDriver/Joystick/Joystick.aps b/Demos/Device/ClassDriver/Joystick/Joystick.aps
new file mode 100644 (file)
index 0000000..245245d
--- /dev/null
@@ -0,0 +1 @@
+<AVRStudio><MANAGEMENT><ProjectName>Joystick</ProjectName><Created>30-Sep-2008 14:06:38</Created><LastEdit>30-Sep-2008 14:07:27</LastEdit><ICON>241</ICON><ProjectType>0</ProjectType><Created>30-Sep-2008 14:06:38</Created><Version>4</Version><Build>4, 14, 0, 589</Build><ProjectTypeName>AVR GCC</ProjectTypeName></MANAGEMENT><CODE_CREATION><ObjectFile></ObjectFile><EntryFile></EntryFile><SaveFolder>C:\Users\Dean\Documents\Electronics\Projects\WORK\MyUSBWORK\Demos\Joystick\</SaveFolder></CODE_CREATION><DEBUG_TARGET><CURRENT_TARGET>JTAGICE mkII</CURRENT_TARGET><CURRENT_PART>AT90USB1287.xml</CURRENT_PART><BREAKPOINTS></BREAKPOINTS><IO_EXPAND><HIDE>false</HIDE></IO_EXPAND><REGISTERNAMES><Register>R00</Register><Register>R01</Register><Register>R02</Register><Register>R03</Register><Register>R04</Register><Register>R05</Register><Register>R06</Register><Register>R07</Register><Register>R08</Register><Register>R09</Register><Register>R10</Register><Register>R11</Register><Register>R12</Register><Register>R13</Register><Register>R14</Register><Register>R15</Register><Register>R16</Register><Register>R17</Register><Register>R18</Register><Register>R19</Register><Register>R20</Register><Register>R21</Register><Register>R22</Register><Register>R23</Register><Register>R24</Register><Register>R25</Register><Register>R26</Register><Register>R27</Register><Register>R28</Register><Register>R29</Register><Register>R30</Register><Register>R31</Register></REGISTERNAMES><COM>Auto</COM><COMType>0</COMType><WATCHNUM>0</WATCHNUM><WATCHNAMES><Pane0></Pane0><Pane1></Pane1><Pane2></Pane2><Pane3></Pane3></WATCHNAMES><BreakOnTrcaeFull>0</BreakOnTrcaeFull></DEBUG_TARGET><Debugger><Triggers></Triggers></Debugger><AVRGCCPLUGIN><FILES><SOURCEFILE>Descriptors.c</SOURCEFILE><SOURCEFILE>Joystick.c</SOURCEFILE><HEADERFILE>Descriptors.h</HEADERFILE><HEADERFILE>Joystick.h</HEADERFILE><OTHERFILE>makefile</OTHERFILE></FILES><CONFIGS><CONFIG><NAME>default</NAME><USESEXTERNALMAKEFILE>YES</USESEXTERNALMAKEFILE><EXTERNALMAKEFILE>makefile</EXTERNALMAKEFILE><PART>at90usb1287</PART><HEX>1</HEX><LIST>1</LIST><MAP>1</MAP><OUTPUTFILENAME>Joystick.elf</OUTPUTFILENAME><OUTPUTDIR>default\</OUTPUTDIR><ISDIRTY>1</ISDIRTY><OPTIONS/><INCDIRS/><LIBDIRS/><LIBS/><LINKOBJECTS/><OPTIONSFORALL>-Wall -gdwarf-2 -std=gnu99 -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums</OPTIONSFORALL><LINKEROPTIONS></LINKEROPTIONS><SEGMENTS/></CONFIG></CONFIGS><LASTCONFIG>default</LASTCONFIG><USES_WINAVR>1</USES_WINAVR><GCC_LOC>C:\WinAVR-20080512\bin\avr-gcc.exe</GCC_LOC><MAKE_LOC>C:\WinAVR-20080512\utils\bin\make.exe</MAKE_LOC></AVRGCCPLUGIN><IOView><usergroups/><sort sorted="0" column="0" ordername="0" orderaddress="0" ordergroup="0"/></IOView><Files></Files><Events><Bookmarks></Bookmarks></Events><Trace><Filters></Filters></Trace></AVRStudio>\r
diff --git a/Demos/Device/ClassDriver/Joystick/Joystick.c b/Demos/Device/ClassDriver/Joystick/Joystick.c
new file mode 100644 (file)
index 0000000..1cf59bb
--- /dev/null
@@ -0,0 +1,171 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  Main source file for the Joystick demo. This file contains the main tasks of\r
+ *  the demo and is responsible for the initial application hardware configuration.\r
+ */\r
+\r
+#include "Joystick.h"\r
+\r
+/** LUFA HID Class driver interface configuration and state information. This structure is\r
+ *  passed to all HID Class driver functions, so that multiple instances of the same class\r
+ *  within a device can be differentiated from one another.\r
+ */\r
+USB_ClassInfo_HID_t Joystick_HID_Interface =\r
+       {\r
+               .InterfaceNumber         = 0,\r
+\r
+               .ReportINEndpointNumber  = JOYSTICK_EPNUM,\r
+               .ReportINEndpointSize    = JOYSTICK_EPSIZE,\r
+               \r
+               .ReportINBufferSize      = sizeof(USB_JoystickReport_Data_t),\r
+\r
+               .UsingReportProtocol     = true,\r
+       };\r
+\r
+/** Main program entry point. This routine contains the overall program flow, including initial\r
+ *  setup of all components and the main program loop.\r
+ */\r
+int main(void)\r
+{\r
+       SetupHardware();\r
+       \r
+       LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);\r
+       \r
+       for (;;)\r
+       {\r
+               USB_HID_USBTask(&Joystick_HID_Interface);\r
+               USB_USBTask();\r
+       }\r
+}\r
+\r
+/** Configures the board hardware and chip peripherals for the demo's functionality. */\r
+void SetupHardware(void)\r
+{\r
+       /* Disable watchdog if enabled by bootloader/fuses */\r
+       MCUSR &= ~(1 << WDRF);\r
+       wdt_disable();\r
+\r
+       /* Disable clock division */\r
+       clock_prescale_set(clock_div_1);\r
+\r
+       /* Hardware Initialization */\r
+       Joystick_Init();\r
+       LEDs_Init();\r
+       Buttons_Init();\r
+       USB_Init();\r
+\r
+       /* Millisecond timer initialization, with output compare interrupt enabled for the idle timing */\r
+       OCR0A  = ((F_CPU / 64) / 1000);\r
+       TCCR0A = (1 << WGM01);\r
+       TCCR0B = ((1 << CS01) | (1 << CS00));\r
+       TIMSK0 = (1 << OCIE0A);\r
+}\r
+\r
+/** Event handler for the library USB Connection event. */\r
+void EVENT_USB_Connect(void)\r
+{\r
+       LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING);\r
+}\r
+\r
+/** Event handler for the library USB Disconnection event. */\r
+void EVENT_USB_Disconnect(void)\r
+{\r
+       LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);\r
+}\r
+\r
+/** Event handler for the library USB Configuration Changed event. */\r
+void EVENT_USB_ConfigurationChanged(void)\r
+{\r
+       LEDs_SetAllLEDs(LEDMASK_USB_READY);\r
+\r
+       if (!(USB_HID_ConfigureEndpoints(&Joystick_HID_Interface)))\r
+         LEDs_SetAllLEDs(LEDMASK_USB_ERROR);\r
+}\r
+\r
+/** Event handler for the library USB Unhandled Control Packet event. */\r
+void EVENT_USB_UnhandledControlPacket(void)\r
+{\r
+       USB_HID_ProcessControlPacket(&Joystick_HID_Interface);\r
+}\r
+\r
+/** ISR to keep track of each millisecond interrupt, for determining the HID class idle period remaining when set. */\r
+ISR(TIMER0_COMPA_vect, ISR_BLOCK)\r
+{\r
+       if (Joystick_HID_Interface.IdleMSRemaining)\r
+         Joystick_HID_Interface.IdleMSRemaining--;\r
+}\r
+\r
+/** HID class driver callback function for the creation of HID reports to the host.\r
+ *\r
+ *  \param HIDInterfaceInfo  Pointer to the HID class interface configuration structure being referenced\r
+ *  \param ReportData  Pointer to a buffer where the created report should be stored\r
+ *\r
+ *  \return Number of bytes written in the report (or zero if no report is to be sent\r
+ */\r
+uint16_t CALLBACK_USB_HID_CreateNextHIDReport(USB_ClassInfo_HID_t* HIDInterfaceInfo, uint8_t* ReportID, void* ReportData)\r
+{\r
+       USB_JoystickReport_Data_t* JoystickReport = (USB_JoystickReport_Data_t*)ReportData;\r
+       \r
+       uint8_t JoyStatus_LCL    = Joystick_GetStatus();\r
+       uint8_t ButtonStatus_LCL = Buttons_GetStatus();\r
+\r
+       if (JoyStatus_LCL & JOY_UP)\r
+         JoystickReport->Y = -100;\r
+       else if (JoyStatus_LCL & JOY_DOWN)\r
+         JoystickReport->Y =  100;\r
+\r
+       if (JoyStatus_LCL & JOY_RIGHT)\r
+         JoystickReport->X =  100;\r
+       else if (JoyStatus_LCL & JOY_LEFT)\r
+         JoystickReport->X = -100;\r
+\r
+       if (JoyStatus_LCL & JOY_PRESS)\r
+         JoystickReport->Button  = (1 << 1);\r
+         \r
+       if (ButtonStatus_LCL & BUTTONS_BUTTON1)\r
+         JoystickReport->Button |= (1 << 0);\r
+         \r
+       return sizeof(USB_JoystickReport_Data_t);\r
+}\r
+\r
+/** HID class driver callback function for the processing of HID reports from the host.\r
+ *\r
+ *  \param HIDInterfaceInfo  Pointer to the HID class interface configuration structure being referenced\r
+ *  \param ReportData  Pointer to a buffer where the created report has been stored\r
+ *  \param ReportSize  Size in bytes of the received HID report\r
+ */\r
+void CALLBACK_USB_HID_ProcessReceivedHIDReport(USB_ClassInfo_HID_t* HIDInterfaceInfo, uint8_t ReportID,\r
+                                               void* ReportData, uint16_t ReportSize)\r
+{\r
+       // Unused (but mandatory for the HID class driver) in this demo, since there are no Host->Device reports\r
+}\r
diff --git a/Demos/Device/ClassDriver/Joystick/Joystick.h b/Demos/Device/ClassDriver/Joystick/Joystick.h
new file mode 100644 (file)
index 0000000..4209f4d
--- /dev/null
@@ -0,0 +1,90 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  Header file for Joystick.c.\r
+ */\r
\r
+#ifndef _JOYSTICK_H_\r
+#define _JOYSTICK_H_\r
+\r
+       /* Includes: */\r
+               #include <avr/io.h>\r
+               #include <avr/wdt.h>\r
+               #include <avr/power.h>\r
+               #include <string.h>\r
+\r
+               #include "Descriptors.h"\r
+\r
+               #include <LUFA/Version.h>\r
+               #include <LUFA/Drivers/Board/Joystick.h>\r
+               #include <LUFA/Drivers/Board/LEDs.h>\r
+               #include <LUFA/Drivers/Board/Buttons.h>\r
+               #include <LUFA/Drivers/USB/USB.h>\r
+               #include <LUFA/Drivers/USB/Class/Device/HID.h>\r
+\r
+       /* Type Defines: */\r
+               /** Type define for the joystick HID report structure, for creating and sending HID reports to the host PC.\r
+                *  This mirrors the layout described to the host in the HID report descriptor, in Descriptors.c.\r
+                */\r
+               typedef struct\r
+               {\r
+                       int8_t  X; /**< Current absolute joystick X position, as a signed 8-bit integer */\r
+                       int8_t  Y; /**< Current absolute joystick Y position, as a signed 8-bit integer */\r
+                       uint8_t Button; /**< Bit mask of the currently pressed joystick buttons */\r
+               } USB_JoystickReport_Data_t;\r
+                       \r
+       /* Macros: */\r
+               /** LED mask for the library LED driver, to indicate that the USB interface is not ready. */\r
+               #define LEDMASK_USB_NOTREADY      LEDS_LED1\r
+\r
+               /** LED mask for the library LED driver, to indicate that the USB interface is enumerating. */\r
+               #define LEDMASK_USB_ENUMERATING  (LEDS_LED2 | LEDS_LED3)\r
+\r
+               /** LED mask for the library LED driver, to indicate that the USB interface is ready. */\r
+               #define LEDMASK_USB_READY        (LEDS_LED2 | LEDS_LED4)\r
+\r
+               /** LED mask for the library LED driver, to indicate that an error has occurred in the USB interface. */\r
+               #define LEDMASK_USB_ERROR        (LEDS_LED1 | LEDS_LED3)\r
+\r
+       /* Function Prototypes: */\r
+               void SetupHardware(void);\r
+\r
+               void EVENT_USB_Connect(void);\r
+               void EVENT_USB_Disconnect(void);\r
+               void EVENT_USB_ConfigurationChanged(void);\r
+               void EVENT_USB_UnhandledControlPacket(void);\r
+\r
+               uint16_t CALLBACK_USB_HID_CreateNextHIDReport(USB_ClassInfo_HID_t* HIDInterfaceInfo, uint8_t* ReportID, void* ReportData);\r
+               void     CALLBACK_USB_HID_ProcessReceivedHIDReport(USB_ClassInfo_HID_t* HIDInterfaceInfo, uint8_t ReportID, \r
+                                                                  void* ReportData, uint16_t ReportSize);\r
+\r
+#endif\r
diff --git a/Demos/Device/ClassDriver/Joystick/Joystick.txt b/Demos/Device/ClassDriver/Joystick/Joystick.txt
new file mode 100644 (file)
index 0000000..7d47ae9
--- /dev/null
@@ -0,0 +1,62 @@
+/** \file\r
+ *\r
+ *  This file contains special DoxyGen information for the generation of the main page and other special\r
+ *  documentation pages. It is not a project source file.\r
+ */\r
\r
+/** \mainpage Joystick Device Demo\r
+ *\r
+ *  \section SSec_Info USB Information:\r
+ *\r
+ *  The following table gives a rundown of the USB utilization of this demo.\r
+ *\r
+ *  <table>\r
+ *   <tr>\r
+ *    <td><b>USB Mode:</b></td>\r
+ *    <td>Device</td>\r
+ *   </tr>\r
+ *   <tr>\r
+ *    <td><b>USB Class:</b></td>\r
+ *    <td>Human Interface Device (HID)</td>\r
+ *   </tr>\r
+ *   <tr> \r
+ *    <td><b>USB Subclass:</b></td>\r
+ *    <td>N/A</td>\r
+ *   </tr>\r
+ *   <tr>\r
+ *    <td><b>Relevant Standards:</b></td>\r
+ *    <td>USBIF HID Specification, USBIF HID Usage Tables</td>\r
+ *   </tr>\r
+ *   <tr>\r
+ *    <td><b>Usable Speeds:</b></td>\r
+ *    <td>Low Speed Mode, Full Speed Mode</td>\r
+ *   </tr>\r
+ *  </table>\r
+ *\r
+ *  \section SSec_Description Project Description: \r
+ *\r
+ *  Joystick demonstration application. This gives a simple reference\r
+ *  application for implementing a USB Keyboard device, for USB Joysticks\r
+ *  using the standard Keyboard HID profile.\r
+ *  \r
+ *  This device will show up as a generic joystick device, with two buttons.\r
+ *  Pressing the joystick inwards is the first button, and the HWB button\r
+ *  is the second.\r
+ *  \r
+ *  Moving the joystick on the selected board moves the joystick location on\r
+ *  the host computer.\r
+ *  \r
+ *  Currently only single interface joysticks are supported.\r
+ *\r
+ *  \section SSec_Options Project Options\r
+ *\r
+ *  The following defines can be found in this demo, which can control the demo behaviour when defined, or changed in value.\r
+ *\r
+ *  <table>\r
+ *   <tr>\r
+ *    <td>\r
+ *     None\r
+ *    </td>\r
+ *   </tr>\r
+ *  </table>\r
+ */
\ No newline at end of file
diff --git a/Demos/Device/ClassDriver/Joystick/makefile b/Demos/Device/ClassDriver/Joystick/makefile
new file mode 100644 (file)
index 0000000..826766c
--- /dev/null
@@ -0,0 +1,733 @@
+# Hey Emacs, this is a -*- makefile -*-\r
+#----------------------------------------------------------------------------\r
+# WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al.\r
+#  >> Modified for use with the LUFA project. <<\r
+#\r
+# Released to the Public Domain\r
+#\r
+# Additional material for this makefile was written by:\r
+# Peter Fleury\r
+# Tim Henigan\r
+# Colin O'Flynn\r
+# Reiner Patommel\r
+# Markus Pfaff\r
+# Sander Pool\r
+# Frederik Rouleau\r
+# Carlos Lamas\r
+# Dean Camera\r
+# Opendous Inc.\r
+# Denver Gingerich\r
+#\r
+#----------------------------------------------------------------------------\r
+# On command line:\r
+#\r
+# make all = Make software.\r
+#\r
+# make clean = Clean out built project files.\r
+#\r
+# make coff = Convert ELF to AVR COFF.\r
+#\r
+# make extcoff = Convert ELF to AVR Extended COFF.\r
+#\r
+# make program = Download the hex file to the device, using avrdude.\r
+#                Please customize the avrdude settings below first!\r
+#\r
+# make dfu = Download the hex file to the device, using dfu-programmer (must\r
+#            have dfu-programmer installed).\r
+#\r
+# make flip = Download the hex file to the device, using Atmel FLIP (must\r
+#             have Atmel FLIP installed).\r
+#\r
+# make dfu-ee = Download the eeprom file to the device, using dfu-programmer\r
+#               (must have dfu-programmer installed).\r
+#\r
+# make flip-ee = Download the eeprom file to the device, using Atmel FLIP\r
+#                (must have Atmel FLIP installed).\r
+#\r
+# make doxygen = Generate DoxyGen documentation for the project (must have\r
+#                DoxyGen installed)\r
+#\r
+# make debug = Start either simulavr or avarice as specified for debugging, \r
+#              with avr-gdb or avr-insight as the front end for debugging.\r
+#\r
+# make filename.s = Just compile filename.c into the assembler code only.\r
+#\r
+# make filename.i = Create a preprocessed source file for use in submitting\r
+#                   bug reports to the GCC project.\r
+#\r
+# To rebuild project do "make clean" then "make all".\r
+#----------------------------------------------------------------------------\r
+\r
+\r
+# MCU name\r
+MCU = at90usb1287\r
+\r
+\r
+# Target board (see library "Board Types" documentation, USER or blank for projects not requiring\r
+# LUFA board drivers). If USER is selected, put custom board drivers in a directory called \r
+# "Board" inside the application directory.\r
+BOARD  = USBKEY\r
+\r
+\r
+# Processor frequency.\r
+#     This will define a symbol, F_CPU, in all source code files equal to the \r
+#     processor frequency. You can then use this symbol in your source code to \r
+#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done\r
+#     automatically to create a 32-bit value in your source code.\r
+#     Typical values are:\r
+#         F_CPU =  1000000\r
+#         F_CPU =  1843200\r
+#         F_CPU =  2000000\r
+#         F_CPU =  3686400\r
+#         F_CPU =  4000000\r
+#         F_CPU =  7372800\r
+#         F_CPU =  8000000\r
+#         F_CPU = 11059200\r
+#         F_CPU = 14745600\r
+#         F_CPU = 16000000\r
+#         F_CPU = 18432000\r
+#         F_CPU = 20000000\r
+F_CPU = 8000000\r
+\r
+\r
+# Input clock frequency.\r
+#     This will define a symbol, F_CLOCK, in all source code files equal to the \r
+#     input clock frequency (before any prescaling is performed). This value may\r
+#     differ from F_CPU if prescaling is used on the latter, and is required as the\r
+#     raw input clock is fed directly to the PLL sections of the AVR for high speed\r
+#     clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'\r
+#     at the end, this will be done automatically to create a 32-bit value in your\r
+#     source code.\r
+#\r
+#     If no clock division is performed on the input clock inside the AVR (via the\r
+#     CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.\r
+F_CLOCK = 8000000\r
+\r
+\r
+# Output format. (can be srec, ihex, binary)\r
+FORMAT = ihex\r
+\r
+\r
+# Target file name (without extension).\r
+TARGET = Joystick\r
+\r
+\r
+# Object files directory\r
+#     To put object files in current directory, use a dot (.), do NOT make\r
+#     this an empty or blank macro!\r
+OBJDIR = .\r
+\r
+\r
+# Path to the LUFA library\r
+LUFA_PATH = ../../..\r
+\r
+\r
+# List C source files here. (C dependencies are automatically generated.)\r
+SRC = $(TARGET).c                                                 \\r
+         Descriptors.c                                               \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/DevChapter9.c        \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Endpoint.c           \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Host.c               \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/HostChapter9.c       \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/LowLevel.c           \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Pipe.c               \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/Events.c            \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBInterrupt.c      \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBTask.c           \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/ConfigDescriptor.c  \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/Class/Device/HID.c            \\r
+\r
+\r
+# List C++ source files here. (C dependencies are automatically generated.)\r
+CPPSRC = \r
+\r
+\r
+# List Assembler source files here.\r
+#     Make them always end in a capital .S.  Files ending in a lowercase .s\r
+#     will not be considered source files but generated files (assembler\r
+#     output from the compiler), and will be deleted upon "make clean"!\r
+#     Even though the DOS/Win* filesystem matches both .s and .S the same,\r
+#     it will preserve the spelling of the filenames, and gcc itself does\r
+#     care about how the name is spelled on its command-line.\r
+ASRC =\r
+\r
+\r
+# Optimization level, can be [0, 1, 2, 3, s]. \r
+#     0 = turn off optimization. s = optimize for size.\r
+#     (Note: 3 is not always the best optimization level. See avr-libc FAQ.)\r
+OPT = s\r
+\r
+\r
+# Debugging format.\r
+#     Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs.\r
+#     AVR Studio 4.10 requires dwarf-2.\r
+#     AVR [Extended] COFF format requires stabs, plus an avr-objcopy run.\r
+DEBUG = dwarf-2\r
+\r
+\r
+# List any extra directories to look for include files here.\r
+#     Each directory must be seperated by a space.\r
+#     Use forward slashes for directory separators.\r
+#     For a directory that has spaces, enclose it in quotes.\r
+EXTRAINCDIRS = $(LUFA_PATH)/\r
+\r
+\r
+# Compiler flag to set the C Standard level.\r
+#     c89   = "ANSI" C\r
+#     gnu89 = c89 plus GCC extensions\r
+#     c99   = ISO C99 standard (not yet fully implemented)\r
+#     gnu99 = c99 plus GCC extensions\r
+CSTANDARD = -std=gnu99\r
+\r
+\r
+# Place -D or -U options here for C sources\r
+CDEFS  = -DF_CPU=$(F_CPU)UL -DF_CLOCK=$(F_CLOCK)UL -DBOARD=BOARD_$(BOARD)\r
+CDEFS += -DUSE_NONSTANDARD_DESCRIPTOR_NAMES -DUSB_DEVICE_ONLY\r
+CDEFS += -DFIXED_CONTROL_ENDPOINT_SIZE=8 -DUSE_SINGLE_DEVICE_CONFIGURATION\r
+CDEFS += -DUSE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)"\r
+\r
+\r
+# Place -D or -U options here for ASM sources\r
+ADEFS = -DF_CPU=$(F_CPU)\r
+\r
+\r
+# Place -D or -U options here for C++ sources\r
+CPPDEFS = -DF_CPU=$(F_CPU)UL\r
+#CPPDEFS += -D__STDC_LIMIT_MACROS\r
+#CPPDEFS += -D__STDC_CONSTANT_MACROS\r
+\r
+\r
+\r
+#---------------- Compiler Options C ----------------\r
+#  -g*:          generate debugging information\r
+#  -O*:          optimization level\r
+#  -f...:        tuning, see GCC manual and avr-libc documentation\r
+#  -Wall...:     warning level\r
+#  -Wa,...:      tell GCC to pass this to the assembler.\r
+#    -adhlns...: create assembler listing\r
+CFLAGS = -g$(DEBUG)\r
+CFLAGS += $(CDEFS)\r
+CFLAGS += -O$(OPT)\r
+CFLAGS += -funsigned-char\r
+CFLAGS += -funsigned-bitfields\r
+CFLAGS += -ffunction-sections\r
+CFLAGS += -fpack-struct\r
+CFLAGS += -fshort-enums\r
+CFLAGS += -finline-limit=20\r
+CFLAGS += -Wall\r
+CFLAGS += -Wstrict-prototypes\r
+CFLAGS += -Wundef\r
+#CFLAGS += -fno-unit-at-a-time\r
+#CFLAGS += -Wunreachable-code\r
+#CFLAGS += -Wsign-compare\r
+CFLAGS += -Wa,-adhlns=$(<:%.c=$(OBJDIR)/%.lst)\r
+CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))\r
+CFLAGS += $(CSTANDARD)\r
+\r
+\r
+#---------------- Compiler Options C++ ----------------\r
+#  -g*:          generate debugging information\r
+#  -O*:          optimization level\r
+#  -f...:        tuning, see GCC manual and avr-libc documentation\r
+#  -Wall...:     warning level\r
+#  -Wa,...:      tell GCC to pass this to the assembler.\r
+#    -adhlns...: create assembler listing\r
+CPPFLAGS = -g$(DEBUG)\r
+CPPFLAGS += $(CPPDEFS)\r
+CPPFLAGS += -O$(OPT)\r
+CPPFLAGS += -funsigned-char\r
+CPPFLAGS += -funsigned-bitfields\r
+CPPFLAGS += -fpack-struct\r
+CPPFLAGS += -fshort-enums\r
+CPPFLAGS += -fno-exceptions\r
+CPPFLAGS += -Wall\r
+CFLAGS += -Wundef\r
+#CPPFLAGS += -mshort-calls\r
+#CPPFLAGS += -fno-unit-at-a-time\r
+#CPPFLAGS += -Wstrict-prototypes\r
+#CPPFLAGS += -Wunreachable-code\r
+#CPPFLAGS += -Wsign-compare\r
+CPPFLAGS += -Wa,-adhlns=$(<:%.cpp=$(OBJDIR)/%.lst)\r
+CPPFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))\r
+#CPPFLAGS += $(CSTANDARD)\r
+\r
+\r
+#---------------- Assembler Options ----------------\r
+#  -Wa,...:   tell GCC to pass this to the assembler.\r
+#  -adhlns:   create listing\r
+#  -gstabs:   have the assembler create line number information; note that\r
+#             for use in COFF files, additional information about filenames\r
+#             and function names needs to be present in the assembler source\r
+#             files -- see avr-libc docs [FIXME: not yet described there]\r
+#  -listing-cont-lines: Sets the maximum number of continuation lines of hex \r
+#       dump that will be displayed for a given single line of source input.\r
+ASFLAGS = $(ADEFS) -Wa,-adhlns=$(<:%.S=$(OBJDIR)/%.lst),-gstabs,--listing-cont-lines=100\r
+\r
+\r
+#---------------- Library Options ----------------\r
+# Minimalistic printf version\r
+PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min\r
+\r
+# Floating point printf version (requires MATH_LIB = -lm below)\r
+PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt\r
+\r
+# If this is left blank, then it will use the Standard printf version.\r
+PRINTF_LIB = \r
+#PRINTF_LIB = $(PRINTF_LIB_MIN)\r
+#PRINTF_LIB = $(PRINTF_LIB_FLOAT)\r
+\r
+\r
+# Minimalistic scanf version\r
+SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min\r
+\r
+# Floating point + %[ scanf version (requires MATH_LIB = -lm below)\r
+SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt\r
+\r
+# If this is left blank, then it will use the Standard scanf version.\r
+SCANF_LIB = \r
+#SCANF_LIB = $(SCANF_LIB_MIN)\r
+#SCANF_LIB = $(SCANF_LIB_FLOAT)\r
+\r
+\r
+MATH_LIB = -lm\r
+\r
+\r
+# List any extra directories to look for libraries here.\r
+#     Each directory must be seperated by a space.\r
+#     Use forward slashes for directory separators.\r
+#     For a directory that has spaces, enclose it in quotes.\r
+EXTRALIBDIRS = \r
+\r
+\r
+\r
+#---------------- External Memory Options ----------------\r
+\r
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),\r
+# used for variables (.data/.bss) and heap (malloc()).\r
+#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff\r
+\r
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),\r
+# only used for heap (malloc()).\r
+#EXTMEMOPTS = -Wl,--section-start,.data=0x801100,--defsym=__heap_end=0x80ffff\r
+\r
+EXTMEMOPTS =\r
+\r
+\r
+\r
+#---------------- Linker Options ----------------\r
+#  -Wl,...:     tell GCC to pass this to linker.\r
+#    -Map:      create map file\r
+#    --cref:    add cross reference to  map file\r
+LDFLAGS = -Wl,-Map=$(TARGET).map,--cref\r
+LDFLAGS += -Wl,--relax \r
+LDFLAGS += -Wl,--gc-sections\r
+LDFLAGS += $(EXTMEMOPTS)\r
+LDFLAGS += $(patsubst %,-L%,$(EXTRALIBDIRS))\r
+LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)\r
+#LDFLAGS += -T linker_script.x\r
+\r
+\r
+\r
+#---------------- Programming Options (avrdude) ----------------\r
+\r
+# Programming hardware: alf avr910 avrisp bascom bsd \r
+# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500\r
+#\r
+# Type: avrdude -c ?\r
+# to get a full listing.\r
+#\r
+AVRDUDE_PROGRAMMER = jtagmkII\r
+\r
+# com1 = serial port. Use lpt1 to connect to parallel port.\r
+AVRDUDE_PORT = usb\r
+\r
+AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex\r
+#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep\r
+\r
+\r
+# Uncomment the following if you want avrdude's erase cycle counter.\r
+# Note that this counter needs to be initialized first using -Yn,\r
+# see avrdude manual.\r
+#AVRDUDE_ERASE_COUNTER = -y\r
+\r
+# Uncomment the following if you do /not/ wish a verification to be\r
+# performed after programming the device.\r
+#AVRDUDE_NO_VERIFY = -V\r
+\r
+# Increase verbosity level.  Please use this when submitting bug\r
+# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude> \r
+# to submit bug reports.\r
+#AVRDUDE_VERBOSE = -v -v\r
+\r
+AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)\r
+AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY)\r
+AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE)\r
+AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER)\r
+\r
+\r
+\r
+#---------------- Debugging Options ----------------\r
+\r
+# For simulavr only - target MCU frequency.\r
+DEBUG_MFREQ = $(F_CPU)\r
+\r
+# Set the DEBUG_UI to either gdb or insight.\r
+# DEBUG_UI = gdb\r
+DEBUG_UI = insight\r
+\r
+# Set the debugging back-end to either avarice, simulavr.\r
+DEBUG_BACKEND = avarice\r
+#DEBUG_BACKEND = simulavr\r
+\r
+# GDB Init Filename.\r
+GDBINIT_FILE = __avr_gdbinit\r
+\r
+# When using avarice settings for the JTAG\r
+JTAG_DEV = /dev/com1\r
+\r
+# Debugging port used to communicate between GDB / avarice / simulavr.\r
+DEBUG_PORT = 4242\r
+\r
+# Debugging host used to communicate between GDB / avarice / simulavr, normally\r
+#     just set to localhost unless doing some sort of crazy debugging when \r
+#     avarice is running on a different computer.\r
+DEBUG_HOST = localhost\r
+\r
+\r
+\r
+#============================================================================\r
+\r
+\r
+# Define programs and commands.\r
+SHELL = sh\r
+CC = avr-gcc\r
+OBJCOPY = avr-objcopy\r
+OBJDUMP = avr-objdump\r
+SIZE = avr-size\r
+AR = avr-ar rcs\r
+NM = avr-nm\r
+AVRDUDE = avrdude\r
+REMOVE = rm -f\r
+REMOVEDIR = rm -rf\r
+COPY = cp\r
+WINSHELL = cmd\r
+\r
+# Define Messages\r
+# English\r
+MSG_ERRORS_NONE = Errors: none\r
+MSG_BEGIN = -------- begin --------\r
+MSG_END = --------  end  --------\r
+MSG_SIZE_BEFORE = Size before: \r
+MSG_SIZE_AFTER = Size after:\r
+MSG_COFF = Converting to AVR COFF:\r
+MSG_EXTENDED_COFF = Converting to AVR Extended COFF:\r
+MSG_FLASH = Creating load file for Flash:\r
+MSG_EEPROM = Creating load file for EEPROM:\r
+MSG_EXTENDED_LISTING = Creating Extended Listing:\r
+MSG_SYMBOL_TABLE = Creating Symbol Table:\r
+MSG_LINKING = Linking:\r
+MSG_COMPILING = Compiling C:\r
+MSG_COMPILING_CPP = Compiling C++:\r
+MSG_ASSEMBLING = Assembling:\r
+MSG_CLEANING = Cleaning project:\r
+MSG_CREATING_LIBRARY = Creating library:\r
+\r
+\r
+\r
+\r
+# Define all object files.\r
+OBJ = $(SRC:%.c=$(OBJDIR)/%.o) $(CPPSRC:%.cpp=$(OBJDIR)/%.o) $(ASRC:%.S=$(OBJDIR)/%.o) \r
+\r
+# Define all listing files.\r
+LST = $(SRC:%.c=$(OBJDIR)/%.lst) $(CPPSRC:%.cpp=$(OBJDIR)/%.lst) $(ASRC:%.S=$(OBJDIR)/%.lst) \r
+\r
+\r
+# Compiler flags to generate dependency files.\r
+GENDEPFLAGS = -MMD -MP -MF .dep/$(@F).d\r
+\r
+\r
+# Combine all necessary flags and optional flags.\r
+# Add target processor to flags.\r
+ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS)\r
+ALL_CPPFLAGS = -mmcu=$(MCU) -I. -x c++ $(CPPFLAGS) $(GENDEPFLAGS)\r
+ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)\r
+\r
+\r
+\r
+\r
+\r
+# Default target.\r
+all: begin gccversion sizebefore build checkhooks checklibmode checkboard sizeafter end\r
+\r
+# Change the build target to build a HEX file or a library.\r
+build: elf hex eep lss sym\r
+#build: lib\r
+\r
+\r
+elf: $(TARGET).elf\r
+hex: $(TARGET).hex\r
+eep: $(TARGET).eep\r
+lss: $(TARGET).lss\r
+sym: $(TARGET).sym\r
+LIBNAME=lib$(TARGET).a\r
+lib: $(LIBNAME)\r
+\r
+\r
+\r
+# Eye candy.\r
+# AVR Studio 3.x does not check make's exit code but relies on\r
+# the following magic strings to be generated by the compile job.\r
+begin:\r
+       @echo\r
+       @echo $(MSG_BEGIN)\r
+\r
+end:\r
+       @echo $(MSG_END)\r
+       @echo\r
+\r
+\r
+# Display size of file.\r
+HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex\r
+ELFSIZE = $(SIZE) $(MCU_FLAG) $(FORMAT_FLAG) $(TARGET).elf\r
+MCU_FLAG = $(shell $(SIZE) --help | grep -- --mcu > /dev/null && echo --mcu=$(MCU) )\r
+FORMAT_FLAG = $(shell $(SIZE) --help | grep -- --format=.*avr > /dev/null && echo --format=avr )\r
+\r
+sizebefore:\r
+       @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \\r
+       2>/dev/null; echo; fi\r
+\r
+sizeafter:\r
+       @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \\r
+       2>/dev/null; echo; fi\r
+\r
+checkhooks: build\r
+       @echo\r
+       @echo ------- Unhooked LUFA Events -------\r
+       @$(shell) (grep -s '^EVENT_.*LUFA/.*\\.o' $(TARGET).map | \\r
+                  cut -d' ' -f1 | cut -d'_' -f2- | grep ".*") || \\r
+                          echo "(None)"\r
+       @echo ------------------------------------\r
+\r
+checklibmode:\r
+       @echo\r
+       @echo ----------- Library Mode -----------\r
+       @$(shell) ($(CC) $(ALL_CFLAGS) -E -dM - < /dev/null \\r
+                 | grep 'USB_\(DEVICE\|HOST\)_ONLY' | cut -d' ' -f2 | grep ".*") \\r
+                 || echo "No specific mode (both device and host mode allowable)."\r
+       @echo ------------------------------------\r
+\r
+checkboard:\r
+       @echo\r
+       @echo ---------- Selected Board ----------\r
+       @echo Selected board model is $(BOARD).\r
+       @echo ------------------------------------\r
+       \r
+# Display compiler version information.\r
+gccversion : \r
+       @$(CC) --version\r
+\r
+\r
+\r
+# Program the device.  \r
+program: $(TARGET).hex $(TARGET).eep\r
+       $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)\r
+\r
+flip: $(TARGET).hex\r
+       batchisp -hardware usb -device $(MCU) -operation erase f\r
+       batchisp -hardware usb -device $(MCU) -operation loadbuffer $(TARGET).hex program\r
+       batchisp -hardware usb -device $(MCU) -operation start reset 0\r
+\r
+dfu: $(TARGET).hex\r
+       dfu-programmer $(MCU) erase\r
+       dfu-programmer $(MCU) flash --debug 1 $(TARGET).hex\r
+       dfu-programmer $(MCU) reset\r
+\r
+flip-ee: $(TARGET).hex $(TARGET).eep\r
+       copy $(TARGET).eep $(TARGET)eep.hex\r
+       batchisp -hardware usb -device $(MCU) -operation memory EEPROM erase\r
+       batchisp -hardware usb -device $(MCU) -operation memory EEPROM loadbuffer $(TARGET)eep.hex program\r
+       batchisp -hardware usb -device $(MCU) -operation start reset 0\r
+\r
+dfu-ee: $(TARGET).hex $(TARGET).eep\r
+       dfu-programmer $(MCU) flash-eeprom --debug 1 --suppress-bootloader-mem $(TARGET).eep\r
+       dfu-programmer $(MCU) reset\r
+\r
+\r
+# Generate avr-gdb config/init file which does the following:\r
+#     define the reset signal, load the target file, connect to target, and set \r
+#     a breakpoint at main().\r
+gdb-config: \r
+       @$(REMOVE) $(GDBINIT_FILE)\r
+       @echo define reset >> $(GDBINIT_FILE)\r
+       @echo SIGNAL SIGHUP >> $(GDBINIT_FILE)\r
+       @echo end >> $(GDBINIT_FILE)\r
+       @echo file $(TARGET).elf >> $(GDBINIT_FILE)\r
+       @echo target remote $(DEBUG_HOST):$(DEBUG_PORT)  >> $(GDBINIT_FILE)\r
+ifeq ($(DEBUG_BACKEND),simulavr)\r
+       @echo load  >> $(GDBINIT_FILE)\r
+endif\r
+       @echo break main >> $(GDBINIT_FILE)\r
+\r
+debug: gdb-config $(TARGET).elf\r
+ifeq ($(DEBUG_BACKEND), avarice)\r
+       @echo Starting AVaRICE - Press enter when "waiting to connect" message displays.\r
+       @$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \\r
+       $(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT)\r
+       @$(WINSHELL) /c pause\r
+\r
+else\r
+       @$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \\r
+       $(DEBUG_MFREQ) --port $(DEBUG_PORT)\r
+endif\r
+       @$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE)\r
+\r
+\r
+\r
+\r
+# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.\r
+COFFCONVERT = $(OBJCOPY) --debugging\r
+COFFCONVERT += --change-section-address .data-0x800000\r
+COFFCONVERT += --change-section-address .bss-0x800000\r
+COFFCONVERT += --change-section-address .noinit-0x800000\r
+COFFCONVERT += --change-section-address .eeprom-0x810000\r
+\r
+\r
+\r
+coff: $(TARGET).elf\r
+       @echo\r
+       @echo $(MSG_COFF) $(TARGET).cof\r
+       $(COFFCONVERT) -O coff-avr $< $(TARGET).cof\r
+\r
+\r
+extcoff: $(TARGET).elf\r
+       @echo\r
+       @echo $(MSG_EXTENDED_COFF) $(TARGET).cof\r
+       $(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof\r
+\r
+\r
+\r
+# Create final output files (.hex, .eep) from ELF output file.\r
+%.hex: %.elf\r
+       @echo\r
+       @echo $(MSG_FLASH) $@\r
+       $(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@\r
+\r
+%.eep: %.elf\r
+       @echo\r
+       @echo $(MSG_EEPROM) $@\r
+       -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \\r
+       --change-section-lma .eeprom=0 --no-change-warnings -O $(FORMAT) $< $@ || exit 0\r
+\r
+# Create extended listing file from ELF output file.\r
+%.lss: %.elf\r
+       @echo\r
+       @echo $(MSG_EXTENDED_LISTING) $@\r
+       $(OBJDUMP) -h -z -S $< > $@\r
+\r
+# Create a symbol table from ELF output file.\r
+%.sym: %.elf\r
+       @echo\r
+       @echo $(MSG_SYMBOL_TABLE) $@\r
+       $(NM) -n $< > $@\r
+\r
+\r
+\r
+# Create library from object files.\r
+.SECONDARY : $(TARGET).a\r
+.PRECIOUS : $(OBJ)\r
+%.a: $(OBJ)\r
+       @echo\r
+       @echo $(MSG_CREATING_LIBRARY) $@\r
+       $(AR) $@ $(OBJ)\r
+\r
+\r
+# Link: create ELF output file from object files.\r
+.SECONDARY : $(TARGET).elf\r
+.PRECIOUS : $(OBJ)\r
+%.elf: $(OBJ)\r
+       @echo\r
+       @echo $(MSG_LINKING) $@\r
+       $(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)\r
+\r
+\r
+# Compile: create object files from C source files.\r
+$(OBJDIR)/%.o : %.c\r
+       @echo\r
+       @echo $(MSG_COMPILING) $<\r
+       $(CC) -c $(ALL_CFLAGS) $< -o $@ \r
+\r
+\r
+# Compile: create object files from C++ source files.\r
+$(OBJDIR)/%.o : %.cpp\r
+       @echo\r
+       @echo $(MSG_COMPILING_CPP) $<\r
+       $(CC) -c $(ALL_CPPFLAGS) $< -o $@ \r
+\r
+\r
+# Compile: create assembler files from C source files.\r
+%.s : %.c\r
+       $(CC) -S $(ALL_CFLAGS) $< -o $@\r
+\r
+\r
+# Compile: create assembler files from C++ source files.\r
+%.s : %.cpp\r
+       $(CC) -S $(ALL_CPPFLAGS) $< -o $@\r
+\r
+\r
+# Assemble: create object files from assembler source files.\r
+$(OBJDIR)/%.o : %.S\r
+       @echo\r
+       @echo $(MSG_ASSEMBLING) $<\r
+       $(CC) -c $(ALL_ASFLAGS) $< -o $@\r
+\r
+\r
+# Create preprocessed source for use in sending a bug report.\r
+%.i : %.c\r
+       $(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ \r
+       \r
+\r
+# Target: clean project.\r
+clean: begin clean_list clean_binary end\r
+\r
+clean_binary:\r
+       $(REMOVE) $(TARGET).hex\r
+       \r
+clean_list:\r
+       @echo $(MSG_CLEANING)\r
+       $(REMOVE) $(TARGET).eep\r
+       $(REMOVE) $(TARGET)eep.hex\r
+       $(REMOVE) $(TARGET).cof\r
+       $(REMOVE) $(TARGET).elf\r
+       $(REMOVE) $(TARGET).map\r
+       $(REMOVE) $(TARGET).sym\r
+       $(REMOVE) $(TARGET).lss\r
+       $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.o)\r
+       $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.lst)\r
+       $(REMOVE) $(SRC:.c=.s)\r
+       $(REMOVE) $(SRC:.c=.d)\r
+       $(REMOVE) $(SRC:.c=.i)\r
+       $(REMOVEDIR) .dep\r
+\r
+\r
+doxygen:\r
+       @echo Generating Project Documentation...\r
+       @doxygen Doxygen.conf\r
+       @echo Documentation Generation Complete.\r
+\r
+clean_doxygen:\r
+       rm -rf Documentation\r
+\r
+# Create object files directory\r
+$(shell mkdir $(OBJDIR) 2>/dev/null)\r
+\r
+\r
+# Include the dependency files.\r
+-include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)\r
+\r
+\r
+# Listing of phony targets.\r
+.PHONY : all checkhooks checklibmode checkboard   \\r
+begin finish end sizebefore sizeafter gccversion  \\r
+build elf hex eep lss sym coff extcoff clean      \\r
+clean_list clean_binary program debug gdb-config  \\r
+doxygen dfu flip flip-ee dfu-ee
\ No newline at end of file
diff --git a/Demos/Device/ClassDriver/Keyboard/Descriptors.c b/Demos/Device/ClassDriver/Keyboard/Descriptors.c
new file mode 100644 (file)
index 0000000..8914909
--- /dev/null
@@ -0,0 +1,257 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Denver Gingerich (denver [at] ossguy [dot] com)\r
+      Based on code by Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+         \r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  USB Device Descriptors, for library use when in USB device mode. Descriptors are special \r
+ *  computer-readable structures which the host requests upon device enumeration, to determine\r
+ *  the device's capabilities and functions.  \r
+ */\r
+\r
+#include "Descriptors.h"\r
+\r
+/** HID class report descriptor. This is a special descriptor constructed with values from the\r
+ *  USBIF HID class specification to describe the reports and capabilities of the HID device. This\r
+ *  descriptor is parsed by the host and its contents used to determine what data (and in what encoding)\r
+ *  the device will send, and what it may be sent back from the host. Refer to the HID specification for\r
+ *  more details on HID report descriptors.\r
+ */\r
+USB_Descriptor_HIDReport_Datatype_t PROGMEM KeyboardReport[] =\r
+{\r
+       0x05, 0x01,          /* Usage Page (Generic Desktop)                    */\r
+       0x09, 0x06,          /* Usage (Keyboard)                                */\r
+       0xa1, 0x01,          /* Collection (Application)                        */\r
+       0x75, 0x01,          /*   Report Size (1)                               */\r
+       0x95, 0x08,          /*   Report Count (8)                              */\r
+       0x05, 0x07,          /*   Usage Page (Key Codes)                        */\r
+       0x19, 0xe0,          /*   Usage Minimum (Keyboard LeftControl)          */\r
+       0x29, 0xe7,          /*   Usage Maximum (Keyboard Right GUI)            */\r
+       0x15, 0x00,          /*   Logical Minimum (0)                           */\r
+       0x25, 0x01,          /*   Logical Maximum (1)                           */\r
+       0x81, 0x02,          /*   Input (Data, Variable, Absolute)              */\r
+       0x95, 0x01,          /*   Report Count (1)                              */\r
+       0x75, 0x08,          /*   Report Size (8)                               */\r
+       0x81, 0x03,          /*   Input (Const, Variable, Absolute)             */\r
+       0x95, 0x05,          /*   Report Count (5)                              */\r
+       0x75, 0x01,          /*   Report Size (1)                               */\r
+       0x05, 0x08,          /*   Usage Page (LEDs)                             */\r
+       0x19, 0x01,          /*   Usage Minimum (Num Lock)                      */\r
+       0x29, 0x05,          /*   Usage Maximum (Kana)                          */\r
+       0x91, 0x02,          /*   Output (Data, Variable, Absolute)             */\r
+       0x95, 0x01,          /*   Report Count (1)                              */\r
+       0x75, 0x03,          /*   Report Size (3)                               */\r
+       0x91, 0x03,          /*   Output (Const, Variable, Absolute)            */\r
+       0x95, 0x06,          /*   Report Count (6)                              */\r
+       0x75, 0x08,          /*   Report Size (8)                               */\r
+       0x15, 0x00,          /*   Logical Minimum (0)                           */\r
+       0x25, 0x65,          /*   Logical Maximum (101)                         */\r
+       0x05, 0x07,          /*   Usage Page (Keyboard)                         */\r
+       0x19, 0x00,          /*   Usage Minimum (Reserved (no event indicated)) */\r
+       0x29, 0x65,          /*   Usage Maximum (Keyboard Application)          */\r
+       0x81, 0x00,          /*   Input (Data, Array, Absolute)                 */\r
+       0xc0                 /* End Collection                                  */\r
+};\r
+\r
+/** Device descriptor structure. This descriptor, located in FLASH memory, describes the overall\r
+ *  device characteristics, including the supported USB version, control endpoint size and the\r
+ *  number of device configurations. The descriptor is read out by the USB host when the enumeration\r
+ *  process begins.\r
+ */\r
+USB_Descriptor_Device_t PROGMEM DeviceDescriptor =\r
+{\r
+       .Header                 = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device},\r
+               \r
+       .USBSpecification       = VERSION_BCD(01.10),\r
+       .Class                  = 0x00,\r
+       .SubClass               = 0x00,\r
+       .Protocol               = 0x00,\r
+                               \r
+       .Endpoint0Size          = FIXED_CONTROL_ENDPOINT_SIZE,\r
+               \r
+       .VendorID               = 0x03EB,\r
+       .ProductID              = 0x2042,\r
+       .ReleaseNumber          = 0x0000,\r
+               \r
+       .ManufacturerStrIndex   = 0x01,\r
+       .ProductStrIndex        = 0x02,\r
+       .SerialNumStrIndex      = NO_DESCRIPTOR,\r
+               \r
+       .NumberOfConfigurations = 1\r
+};\r
+\r
+/** Configuration descriptor structure. This descriptor, located in FLASH memory, describes the usage\r
+ *  of the device in one of its supported configurations, including information about any device interfaces\r
+ *  and endpoints. The descriptor is read out by the USB host during the enumeration process when selecting\r
+ *  a configuration so that the host may correctly communicate with the USB device.\r
+ */\r
+USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =\r
+{\r
+       .Config = \r
+               {\r
+                       .Header                 = {.Size = sizeof(USB_Descriptor_Configuration_Header_t), .Type = DTYPE_Configuration},\r
+\r
+                       .TotalConfigurationSize = sizeof(USB_Descriptor_Configuration_t),\r
+                       .TotalInterfaces        = 1,\r
+                               \r
+                       .ConfigurationNumber    = 1,\r
+                       .ConfigurationStrIndex  = NO_DESCRIPTOR,\r
+                               \r
+                       .ConfigAttributes       = (USB_CONFIG_ATTR_BUSPOWERED | USB_CONFIG_ATTR_SELFPOWERED),\r
+                       \r
+                       .MaxPowerConsumption    = USB_CONFIG_POWER_MA(100)\r
+               },\r
+               \r
+       .Interface = \r
+               {\r
+                       .Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},\r
+\r
+                       .InterfaceNumber        = 0x00,\r
+                       .AlternateSetting       = 0x00,\r
+                       \r
+                       .TotalEndpoints         = 1,\r
+                               \r
+                       .Class                  = 0x03,\r
+                       .SubClass               = 0x01,\r
+                       .Protocol               = 0x01,\r
+                               \r
+                       .InterfaceStrIndex      = NO_DESCRIPTOR\r
+               },\r
+\r
+       .KeyboardHID = \r
+               {  \r
+                       .Header                 = {.Size = sizeof(USB_Descriptor_HID_t), .Type = DTYPE_HID},\r
+                       \r
+                       .HIDSpec                = VERSION_BCD(01.11),\r
+                       .CountryCode            = 0x00,\r
+                       .TotalReportDescriptors = 1,\r
+                       .HIDReportType          = DTYPE_Report,\r
+                       .HIDReportLength        = sizeof(KeyboardReport)\r
+               },\r
+               \r
+       .KeyboardEndpoint = \r
+               {\r
+                       .Header                 = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},\r
+\r
+                       .EndpointAddress        = (ENDPOINT_DESCRIPTOR_DIR_IN | KEYBOARD_EPNUM),\r
+                       .Attributes             = EP_TYPE_INTERRUPT,\r
+                       .EndpointSize           = KEYBOARD_EPSIZE,\r
+                       .PollingIntervalMS      = 0x04\r
+               },\r
+};\r
+\r
+/** Language descriptor structure. This descriptor, located in FLASH memory, is returned when the host requests\r
+ *  the string descriptor with index 0 (the first index). It is actually an array of 16-bit integers, which indicate\r
+ *  via the language ID table available at USB.org what languages the device supports for its string descriptors.\r
+ */\r
+USB_Descriptor_String_t PROGMEM LanguageString =\r
+{\r
+       .Header                 = {.Size = USB_STRING_LEN(1), .Type = DTYPE_String},\r
+               \r
+       .UnicodeString          = {LANGUAGE_ID_ENG}\r
+};\r
+\r
+/** Manufacturer descriptor string. This is a Unicode string containing the manufacturer's details in human readable\r
+ *  form, and is read out upon request by the host when the appropriate string ID is requested, listed in the Device\r
+ *  Descriptor.\r
+ */\r
+USB_Descriptor_String_t PROGMEM ManufacturerString =\r
+{\r
+       .Header                 = {.Size = USB_STRING_LEN(16), .Type = DTYPE_String},\r
+               \r
+       .UnicodeString          = L"Denver Gingerich"\r
+};\r
+\r
+/** Product descriptor string. This is a Unicode string containing the product's details in human readable form,\r
+ *  and is read out upon request by the host when the appropriate string ID is requested, listed in the Device\r
+ *  Descriptor.\r
+ */\r
+USB_Descriptor_String_t PROGMEM ProductString =\r
+{\r
+       .Header                 = {.Size = USB_STRING_LEN(18), .Type = DTYPE_String},\r
+               \r
+       .UnicodeString          = L"LUFA Keyboard Demo"\r
+};\r
+\r
+/** This function is called by the library when in device mode, and must be overridden (see library "USB Descriptors"\r
+ *  documentation) by the application code so that the address and size of a requested descriptor can be given\r
+ *  to the USB library. When the device receives a Get Descriptor request on the control endpoint, this function\r
+ *  is called so that the descriptor details can be passed back and the appropriate descriptor sent back to the\r
+ *  USB host.\r
+ */\r
+uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
+{\r
+       const uint8_t  DescriptorType   = (wValue >> 8);\r
+       const uint8_t  DescriptorNumber = (wValue & 0xFF);\r
+\r
+       void*    Address = NULL;\r
+       uint16_t Size    = NO_DESCRIPTOR;\r
+\r
+       switch (DescriptorType)\r
+       {\r
+               case DTYPE_Device: \r
+                       Address = (void*)&DeviceDescriptor;\r
+                       Size    = sizeof(USB_Descriptor_Device_t);\r
+                       break;\r
+               case DTYPE_Configuration: \r
+                       Address = (void*)&ConfigurationDescriptor;\r
+                       Size    = sizeof(USB_Descriptor_Configuration_t);\r
+                       break;\r
+               case DTYPE_String: \r
+                       switch (DescriptorNumber)\r
+                       {\r
+                               case 0x00: \r
+                                       Address = (void*)&LanguageString;\r
+                                       Size    = pgm_read_byte(&LanguageString.Header.Size);\r
+                                       break;\r
+                               case 0x01: \r
+                                       Address = (void*)&ManufacturerString;\r
+                                       Size    = pgm_read_byte(&ManufacturerString.Header.Size);\r
+                                       break;\r
+                               case 0x02: \r
+                                       Address = (void*)&ProductString;\r
+                                       Size    = pgm_read_byte(&ProductString.Header.Size);\r
+                                       break;\r
+                       }\r
+                       \r
+                       break;\r
+               case DTYPE_HID: \r
+                       Address = (void*)&ConfigurationDescriptor.KeyboardHID;\r
+                       Size    = sizeof(USB_Descriptor_HID_t);\r
+                       break;\r
+               case DTYPE_Report: \r
+                       Address = (void*)&KeyboardReport;\r
+                       Size    = sizeof(KeyboardReport);\r
+                       break;\r
+       }\r
+       \r
+       *DescriptorAddress = Address;\r
+       return Size;\r
+}\r
diff --git a/Demos/Device/ClassDriver/Keyboard/Descriptors.h b/Demos/Device/ClassDriver/Keyboard/Descriptors.h
new file mode 100644 (file)
index 0000000..40b358c
--- /dev/null
@@ -0,0 +1,70 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Denver Gingerich (denver [at] ossguy [dot] com)\r
+      Based on code by Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+         \r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  Header file for Descriptors.c.\r
+ */\r
+\r
+#ifndef _DESCRIPTORS_H_\r
+#define _DESCRIPTORS_H_\r
+\r
+       /* Includes: */\r
+               #include <avr/pgmspace.h>\r
+\r
+               #include <LUFA/Drivers/USB/USB.h>\r
+               #include <LUFA/Drivers/USB/Class/Device/HID.h>\r
+\r
+       /* Type Defines: */\r
+               /** Type define for the device configuration descriptor structure. This must be defined in the\r
+                *  application code, as the configuration descriptor contains several sub-descriptors which\r
+                *  vary between devices, and which describe the device's usage to the host.\r
+                */\r
+               typedef struct\r
+               {\r
+                       USB_Descriptor_Configuration_Header_t Config;\r
+                       USB_Descriptor_Interface_t            Interface;\r
+                       USB_Descriptor_HID_t                  KeyboardHID;\r
+               USB_Descriptor_Endpoint_t             KeyboardEndpoint;\r
+               } USB_Descriptor_Configuration_t;\r
+                                       \r
+       /* Macros: */\r
+               /** Endpoint number of the Keyboard HID reporting IN endpoint. */\r
+               #define KEYBOARD_EPNUM               1\r
+               \r
+               /** Size in bytes of the Keyboard HID reporting IN and OUT endpoints. */                \r
+               #define KEYBOARD_EPSIZE              8\r
+\r
+       /* Function Prototypes: */\r
+               uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
+                                                                                       ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);\r
+\r
+#endif\r
diff --git a/Demos/Device/ClassDriver/Keyboard/Doxygen.conf b/Demos/Device/ClassDriver/Keyboard/Doxygen.conf
new file mode 100644 (file)
index 0000000..79a300a
--- /dev/null
@@ -0,0 +1,1485 @@
+# Doxyfile 1.5.7.1\r
+\r
+# This file describes the settings to be used by the documentation system\r
+# doxygen (www.doxygen.org) for a project\r
+#\r
+# All text after a hash (#) is considered a comment and will be ignored\r
+# The format is:\r
+#       TAG = value [value, ...]\r
+# For lists items can also be appended using:\r
+#       TAG += value [value, ...]\r
+# Values that contain spaces should be placed between quotes (" ")\r
+\r
+#---------------------------------------------------------------------------\r
+# Project related configuration options\r
+#---------------------------------------------------------------------------\r
+\r
+# This tag specifies the encoding used for all characters in the config file \r
+# that follow. The default is UTF-8 which is also the encoding used for all \r
+# text before the first occurrence of this tag. Doxygen uses libiconv (or the \r
+# iconv built into libc) for the transcoding. See \r
+# http://www.gnu.org/software/libiconv for the list of possible encodings.\r
+\r
+DOXYFILE_ENCODING      = UTF-8\r
+\r
+# The PROJECT_NAME tag is a single word (or a sequence of words surrounded \r
+# by quotes) that should identify the project.\r
+\r
+PROJECT_NAME           = "LUFA Library - Keyboard Device Demo"\r
+\r
+# The PROJECT_NUMBER tag can be used to enter a project or revision number. \r
+# This could be handy for archiving the generated documentation or \r
+# if some version control system is used.\r
+\r
+PROJECT_NUMBER         = 0.0.0\r
+\r
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) \r
+# base path where the generated documentation will be put. \r
+# If a relative path is entered, it will be relative to the location \r
+# where doxygen was started. If left blank the current directory will be used.\r
+\r
+OUTPUT_DIRECTORY       = ./Documentation/\r
+\r
+# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create \r
+# 4096 sub-directories (in 2 levels) under the output directory of each output \r
+# format and will distribute the generated files over these directories. \r
+# Enabling this option can be useful when feeding doxygen a huge amount of \r
+# source files, where putting all generated files in the same directory would \r
+# otherwise cause performance problems for the file system.\r
+\r
+CREATE_SUBDIRS         = YES\r
+\r
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all \r
+# documentation generated by doxygen is written. Doxygen will use this \r
+# information to generate all constant output in the proper language. \r
+# The default language is English, other supported languages are: \r
+# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, \r
+# Croatian, Czech, Danish, Dutch, Farsi, Finnish, French, German, Greek, \r
+# Hungarian, Italian, Japanese, Japanese-en (Japanese with English messages), \r
+# Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, Polish, \r
+# Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, Slovene, \r
+# Spanish, Swedish, and Ukrainian.\r
+\r
+OUTPUT_LANGUAGE        = English\r
+\r
+# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will \r
+# include brief member descriptions after the members that are listed in \r
+# the file and class documentation (similar to JavaDoc). \r
+# Set to NO to disable this.\r
+\r
+BRIEF_MEMBER_DESC      = YES\r
+\r
+# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend \r
+# the brief description of a member or function before the detailed description. \r
+# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the \r
+# brief descriptions will be completely suppressed.\r
+\r
+REPEAT_BRIEF           = YES\r
+\r
+# This tag implements a quasi-intelligent brief description abbreviator \r
+# that is used to form the text in various listings. Each string \r
+# in this list, if found as the leading text of the brief description, will be \r
+# stripped from the text and the result after processing the whole list, is \r
+# used as the annotated text. Otherwise, the brief description is used as-is. \r
+# If left blank, the following values are used ("$name" is automatically \r
+# replaced with the name of the entity): "The $name class" "The $name widget" \r
+# "The $name file" "is" "provides" "specifies" "contains" \r
+# "represents" "a" "an" "the"\r
+\r
+ABBREVIATE_BRIEF       = "The $name class" \\r
+                         "The $name widget" \\r
+                         "The $name file" \\r
+                         is \\r
+                         provides \\r
+                         specifies \\r
+                         contains \\r
+                         represents \\r
+                         a \\r
+                         an \\r
+                         the\r
+\r
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then \r
+# Doxygen will generate a detailed section even if there is only a brief \r
+# description.\r
+\r
+ALWAYS_DETAILED_SEC    = NO\r
+\r
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all \r
+# inherited members of a class in the documentation of that class as if those \r
+# members were ordinary class members. Constructors, destructors and assignment \r
+# operators of the base classes will not be shown.\r
+\r
+INLINE_INHERITED_MEMB  = NO\r
+\r
+# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full \r
+# path before files name in the file list and in the header files. If set \r
+# to NO the shortest path that makes the file name unique will be used.\r
+\r
+FULL_PATH_NAMES        = YES\r
+\r
+# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag \r
+# can be used to strip a user-defined part of the path. Stripping is \r
+# only done if one of the specified strings matches the left-hand part of \r
+# the path. The tag can be used to show relative paths in the file list. \r
+# If left blank the directory from which doxygen is run is used as the \r
+# path to strip.\r
+\r
+STRIP_FROM_PATH        = \r
+\r
+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of \r
+# the path mentioned in the documentation of a class, which tells \r
+# the reader which header file to include in order to use a class. \r
+# If left blank only the name of the header file containing the class \r
+# definition is used. Otherwise one should specify the include paths that \r
+# are normally passed to the compiler using the -I flag.\r
+\r
+STRIP_FROM_INC_PATH    = \r
+\r
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter \r
+# (but less readable) file names. This can be useful is your file systems \r
+# doesn't support long names like on DOS, Mac, or CD-ROM.\r
+\r
+SHORT_NAMES            = YES\r
+\r
+# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen \r
+# will interpret the first line (until the first dot) of a JavaDoc-style \r
+# comment as the brief description. If set to NO, the JavaDoc \r
+# comments will behave just like regular Qt-style comments \r
+# (thus requiring an explicit @brief command for a brief description.)\r
+\r
+JAVADOC_AUTOBRIEF      = NO\r
+\r
+# If the QT_AUTOBRIEF tag is set to YES then Doxygen will \r
+# interpret the first line (until the first dot) of a Qt-style \r
+# comment as the brief description. If set to NO, the comments \r
+# will behave just like regular Qt-style comments (thus requiring \r
+# an explicit \brief command for a brief description.)\r
+\r
+QT_AUTOBRIEF           = NO\r
+\r
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen \r
+# treat a multi-line C++ special comment block (i.e. a block of //! or /// \r
+# comments) as a brief description. This used to be the default behaviour. \r
+# The new default is to treat a multi-line C++ comment block as a detailed \r
+# description. Set this tag to YES if you prefer the old behaviour instead.\r
+\r
+MULTILINE_CPP_IS_BRIEF = NO\r
+\r
+# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented \r
+# member inherits the documentation from any documented member that it \r
+# re-implements.\r
+\r
+INHERIT_DOCS           = YES\r
+\r
+# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce \r
+# a new page for each member. If set to NO, the documentation of a member will \r
+# be part of the file/class/namespace that contains it.\r
+\r
+SEPARATE_MEMBER_PAGES  = NO\r
+\r
+# The TAB_SIZE tag can be used to set the number of spaces in a tab. \r
+# Doxygen uses this value to replace tabs by spaces in code fragments.\r
+\r
+TAB_SIZE               = 4\r
+\r
+# This tag can be used to specify a number of aliases that acts \r
+# as commands in the documentation. An alias has the form "name=value". \r
+# For example adding "sideeffect=\par Side Effects:\n" will allow you to \r
+# put the command \sideeffect (or @sideeffect) in the documentation, which \r
+# will result in a user-defined paragraph with heading "Side Effects:". \r
+# You can put \n's in the value part of an alias to insert newlines.\r
+\r
+ALIASES                = \r
+\r
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C \r
+# sources only. Doxygen will then generate output that is more tailored for C. \r
+# For instance, some of the names that are used will be different. The list \r
+# of all members will be omitted, etc.\r
+\r
+OPTIMIZE_OUTPUT_FOR_C  = YES\r
+\r
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java \r
+# sources only. Doxygen will then generate output that is more tailored for \r
+# Java. For instance, namespaces will be presented as packages, qualified \r
+# scopes will look different, etc.\r
+\r
+OPTIMIZE_OUTPUT_JAVA   = NO\r
+\r
+# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran \r
+# sources only. Doxygen will then generate output that is more tailored for \r
+# Fortran.\r
+\r
+OPTIMIZE_FOR_FORTRAN   = NO\r
+\r
+# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL \r
+# sources. Doxygen will then generate output that is tailored for \r
+# VHDL.\r
+\r
+OPTIMIZE_OUTPUT_VHDL   = NO\r
+\r
+# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want \r
+# to include (a tag file for) the STL sources as input, then you should \r
+# set this tag to YES in order to let doxygen match functions declarations and \r
+# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. \r
+# func(std::string) {}). This also make the inheritance and collaboration \r
+# diagrams that involve STL classes more complete and accurate.\r
+\r
+BUILTIN_STL_SUPPORT    = NO\r
+\r
+# If you use Microsoft's C++/CLI language, you should set this option to YES to\r
+# enable parsing support.\r
+\r
+CPP_CLI_SUPPORT        = NO\r
+\r
+# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. \r
+# Doxygen will parse them like normal C++ but will assume all classes use public \r
+# instead of private inheritance when no explicit protection keyword is present.\r
+\r
+SIP_SUPPORT            = NO\r
+\r
+# For Microsoft's IDL there are propget and propput attributes to indicate getter \r
+# and setter methods for a property. Setting this option to YES (the default) \r
+# will make doxygen to replace the get and set methods by a property in the \r
+# documentation. This will only work if the methods are indeed getting or \r
+# setting a simple type. If this is not the case, or you want to show the \r
+# methods anyway, you should set this option to NO.\r
+\r
+IDL_PROPERTY_SUPPORT   = YES\r
+\r
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC \r
+# tag is set to YES, then doxygen will reuse the documentation of the first \r
+# member in the group (if any) for the other members of the group. By default \r
+# all members of a group must be documented explicitly.\r
+\r
+DISTRIBUTE_GROUP_DOC   = NO\r
+\r
+# Set the SUBGROUPING tag to YES (the default) to allow class member groups of \r
+# the same type (for instance a group of public functions) to be put as a \r
+# subgroup of that type (e.g. under the Public Functions section). Set it to \r
+# NO to prevent subgrouping. Alternatively, this can be done per class using \r
+# the \nosubgrouping command.\r
+\r
+SUBGROUPING            = YES\r
+\r
+# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum \r
+# is documented as struct, union, or enum with the name of the typedef. So \r
+# typedef struct TypeS {} TypeT, will appear in the documentation as a struct \r
+# with name TypeT. When disabled the typedef will appear as a member of a file, \r
+# namespace, or class. And the struct will be named TypeS. This can typically \r
+# be useful for C code in case the coding convention dictates that all compound \r
+# types are typedef'ed and only the typedef is referenced, never the tag name.\r
+\r
+TYPEDEF_HIDES_STRUCT   = NO\r
+\r
+# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to \r
+# determine which symbols to keep in memory and which to flush to disk.\r
+# When the cache is full, less often used symbols will be written to disk.\r
+# For small to medium size projects (<1000 input files) the default value is \r
+# probably good enough. For larger projects a too small cache size can cause \r
+# doxygen to be busy swapping symbols to and from disk most of the time \r
+# causing a significant performance penality. \r
+# If the system has enough physical memory increasing the cache will improve the \r
+# performance by keeping more symbols in memory. Note that the value works on \r
+# a logarithmic scale so increasing the size by one will rougly double the \r
+# memory usage. The cache size is given by this formula: \r
+# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, \r
+# corresponding to a cache size of 2^16 = 65536 symbols\r
+\r
+SYMBOL_CACHE_SIZE      = 0\r
+\r
+#---------------------------------------------------------------------------\r
+# Build related configuration options\r
+#---------------------------------------------------------------------------\r
+\r
+# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in \r
+# documentation are documented, even if no documentation was available. \r
+# Private class members and static file members will be hidden unless \r
+# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES\r
+\r
+EXTRACT_ALL            = YES\r
+\r
+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class \r
+# will be included in the documentation.\r
+\r
+EXTRACT_PRIVATE        = YES\r
+\r
+# If the EXTRACT_STATIC tag is set to YES all static members of a file \r
+# will be included in the documentation.\r
+\r
+EXTRACT_STATIC         = YES\r
+\r
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) \r
+# defined locally in source files will be included in the documentation. \r
+# If set to NO only classes defined in header files are included.\r
+\r
+EXTRACT_LOCAL_CLASSES  = YES\r
+\r
+# This flag is only useful for Objective-C code. When set to YES local \r
+# methods, which are defined in the implementation section but not in \r
+# the interface are included in the documentation. \r
+# If set to NO (the default) only methods in the interface are included.\r
+\r
+EXTRACT_LOCAL_METHODS  = NO\r
+\r
+# If this flag is set to YES, the members of anonymous namespaces will be \r
+# extracted and appear in the documentation as a namespace called \r
+# 'anonymous_namespace{file}', where file will be replaced with the base \r
+# name of the file that contains the anonymous namespace. By default \r
+# anonymous namespace are hidden.\r
+\r
+EXTRACT_ANON_NSPACES   = NO\r
+\r
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all \r
+# undocumented members of documented classes, files or namespaces. \r
+# If set to NO (the default) these members will be included in the \r
+# various overviews, but no documentation section is generated. \r
+# This option has no effect if EXTRACT_ALL is enabled.\r
+\r
+HIDE_UNDOC_MEMBERS     = NO\r
+\r
+# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all \r
+# undocumented classes that are normally visible in the class hierarchy. \r
+# If set to NO (the default) these classes will be included in the various \r
+# overviews. This option has no effect if EXTRACT_ALL is enabled.\r
+\r
+HIDE_UNDOC_CLASSES     = NO\r
+\r
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all \r
+# friend (class|struct|union) declarations. \r
+# If set to NO (the default) these declarations will be included in the \r
+# documentation.\r
+\r
+HIDE_FRIEND_COMPOUNDS  = NO\r
+\r
+# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any \r
+# documentation blocks found inside the body of a function. \r
+# If set to NO (the default) these blocks will be appended to the \r
+# function's detailed documentation block.\r
+\r
+HIDE_IN_BODY_DOCS      = NO\r
+\r
+# The INTERNAL_DOCS tag determines if documentation \r
+# that is typed after a \internal command is included. If the tag is set \r
+# to NO (the default) then the documentation will be excluded. \r
+# Set it to YES to include the internal documentation.\r
+\r
+INTERNAL_DOCS          = NO\r
+\r
+# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate \r
+# file names in lower-case letters. If set to YES upper-case letters are also \r
+# allowed. This is useful if you have classes or files whose names only differ \r
+# in case and if your file system supports case sensitive file names. Windows \r
+# and Mac users are advised to set this option to NO.\r
+\r
+CASE_SENSE_NAMES       = NO\r
+\r
+# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen \r
+# will show members with their full class and namespace scopes in the \r
+# documentation. If set to YES the scope will be hidden.\r
+\r
+HIDE_SCOPE_NAMES       = NO\r
+\r
+# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen \r
+# will put a list of the files that are included by a file in the documentation \r
+# of that file.\r
+\r
+SHOW_INCLUDE_FILES     = YES\r
+\r
+# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] \r
+# is inserted in the documentation for inline members.\r
+\r
+INLINE_INFO            = YES\r
+\r
+# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen \r
+# will sort the (detailed) documentation of file and class members \r
+# alphabetically by member name. If set to NO the members will appear in \r
+# declaration order.\r
+\r
+SORT_MEMBER_DOCS       = YES\r
+\r
+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the \r
+# brief documentation of file, namespace and class members alphabetically \r
+# by member name. If set to NO (the default) the members will appear in \r
+# declaration order.\r
+\r
+SORT_BRIEF_DOCS        = NO\r
+\r
+# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the \r
+# hierarchy of group names into alphabetical order. If set to NO (the default) \r
+# the group names will appear in their defined order.\r
+\r
+SORT_GROUP_NAMES       = NO\r
+\r
+# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be \r
+# sorted by fully-qualified names, including namespaces. If set to \r
+# NO (the default), the class list will be sorted only by class name, \r
+# not including the namespace part. \r
+# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.\r
+# Note: This option applies only to the class list, not to the \r
+# alphabetical list.\r
+\r
+SORT_BY_SCOPE_NAME     = NO\r
+\r
+# The GENERATE_TODOLIST tag can be used to enable (YES) or \r
+# disable (NO) the todo list. This list is created by putting \todo \r
+# commands in the documentation.\r
+\r
+GENERATE_TODOLIST      = NO\r
+\r
+# The GENERATE_TESTLIST tag can be used to enable (YES) or \r
+# disable (NO) the test list. This list is created by putting \test \r
+# commands in the documentation.\r
+\r
+GENERATE_TESTLIST      = NO\r
+\r
+# The GENERATE_BUGLIST tag can be used to enable (YES) or \r
+# disable (NO) the bug list. This list is created by putting \bug \r
+# commands in the documentation.\r
+\r
+GENERATE_BUGLIST       = NO\r
+\r
+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or \r
+# disable (NO) the deprecated list. This list is created by putting \r
+# \deprecated commands in the documentation.\r
+\r
+GENERATE_DEPRECATEDLIST= YES\r
+\r
+# The ENABLED_SECTIONS tag can be used to enable conditional \r
+# documentation sections, marked by \if sectionname ... \endif.\r
+\r
+ENABLED_SECTIONS       = \r
+\r
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines \r
+# the initial value of a variable or define consists of for it to appear in \r
+# the documentation. If the initializer consists of more lines than specified \r
+# here it will be hidden. Use a value of 0 to hide initializers completely. \r
+# The appearance of the initializer of individual variables and defines in the \r
+# documentation can be controlled using \showinitializer or \hideinitializer \r
+# command in the documentation regardless of this setting.\r
+\r
+MAX_INITIALIZER_LINES  = 30\r
+\r
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated \r
+# at the bottom of the documentation of classes and structs. If set to YES the \r
+# list will mention the files that were used to generate the documentation.\r
+\r
+SHOW_USED_FILES        = YES\r
+\r
+# If the sources in your project are distributed over multiple directories \r
+# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy \r
+# in the documentation. The default is NO.\r
+\r
+SHOW_DIRECTORIES       = YES\r
+\r
+# Set the SHOW_FILES tag to NO to disable the generation of the Files page.\r
+# This will remove the Files entry from the Quick Index and from the \r
+# Folder Tree View (if specified). The default is YES.\r
+\r
+SHOW_FILES             = YES\r
+\r
+# Set the SHOW_NAMESPACES tag to NO to disable the generation of the \r
+# Namespaces page.  This will remove the Namespaces entry from the Quick Index\r
+# and from the Folder Tree View (if specified). The default is YES.\r
+\r
+SHOW_NAMESPACES        = YES\r
+\r
+# The FILE_VERSION_FILTER tag can be used to specify a program or script that \r
+# doxygen should invoke to get the current version for each file (typically from \r
+# the version control system). Doxygen will invoke the program by executing (via \r
+# popen()) the command <command> <input-file>, where <command> is the value of \r
+# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file \r
+# provided by doxygen. Whatever the program writes to standard output \r
+# is used as the file version. See the manual for examples.\r
+\r
+FILE_VERSION_FILTER    = \r
+\r
+# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by \r
+# doxygen. The layout file controls the global structure of the generated output files \r
+# in an output format independent way. The create the layout file that represents \r
+# doxygen's defaults, run doxygen with the -l option. You can optionally specify a \r
+# file name after the option, if omitted DoxygenLayout.xml will be used as the name \r
+# of the layout file.\r
+\r
+LAYOUT_FILE            = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to warning and progress messages\r
+#---------------------------------------------------------------------------\r
+\r
+# The QUIET tag can be used to turn on/off the messages that are generated \r
+# by doxygen. Possible values are YES and NO. If left blank NO is used.\r
+\r
+QUIET                  = YES\r
+\r
+# The WARNINGS tag can be used to turn on/off the warning messages that are \r
+# generated by doxygen. Possible values are YES and NO. If left blank \r
+# NO is used.\r
+\r
+WARNINGS               = YES\r
+\r
+# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings \r
+# for undocumented members. If EXTRACT_ALL is set to YES then this flag will \r
+# automatically be disabled.\r
+\r
+WARN_IF_UNDOCUMENTED   = YES\r
+\r
+# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for \r
+# potential errors in the documentation, such as not documenting some \r
+# parameters in a documented function, or documenting parameters that \r
+# don't exist or using markup commands wrongly.\r
+\r
+WARN_IF_DOC_ERROR      = YES\r
+\r
+# This WARN_NO_PARAMDOC option can be abled to get warnings for \r
+# functions that are documented, but have no documentation for their parameters \r
+# or return value. If set to NO (the default) doxygen will only warn about \r
+# wrong or incomplete parameter documentation, but not about the absence of \r
+# documentation.\r
+\r
+WARN_NO_PARAMDOC       = YES\r
+\r
+# The WARN_FORMAT tag determines the format of the warning messages that \r
+# doxygen can produce. The string should contain the $file, $line, and $text \r
+# tags, which will be replaced by the file and line number from which the \r
+# warning originated and the warning text. Optionally the format may contain \r
+# $version, which will be replaced by the version of the file (if it could \r
+# be obtained via FILE_VERSION_FILTER)\r
+\r
+WARN_FORMAT            = "$file:$line: $text"\r
+\r
+# The WARN_LOGFILE tag can be used to specify a file to which warning \r
+# and error messages should be written. If left blank the output is written \r
+# to stderr.\r
+\r
+WARN_LOGFILE           = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the input files\r
+#---------------------------------------------------------------------------\r
+\r
+# The INPUT tag can be used to specify the files and/or directories that contain \r
+# documented source files. You may enter file names like "myfile.cpp" or \r
+# directories like "/usr/src/myproject". Separate the files or directories \r
+# with spaces.\r
+\r
+INPUT                  = ./\r
+\r
+# This tag can be used to specify the character encoding of the source files \r
+# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is \r
+# also the default input encoding. Doxygen uses libiconv (or the iconv built \r
+# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for \r
+# the list of possible encodings.\r
+\r
+INPUT_ENCODING         = UTF-8\r
+\r
+# If the value of the INPUT tag contains directories, you can use the \r
+# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \r
+# and *.h) to filter out the source-files in the directories. If left \r
+# blank the following patterns are tested: \r
+# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx \r
+# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90\r
+\r
+FILE_PATTERNS          = *.h \\r
+                         *.c \\r
+                                                *.txt\r
+\r
+# The RECURSIVE tag can be used to turn specify whether or not subdirectories \r
+# should be searched for input files as well. Possible values are YES and NO. \r
+# If left blank NO is used.\r
+\r
+RECURSIVE              = YES\r
+\r
+# The EXCLUDE tag can be used to specify files and/or directories that should \r
+# excluded from the INPUT source files. This way you can easily exclude a \r
+# subdirectory from a directory tree whose root is specified with the INPUT tag.\r
+\r
+EXCLUDE                = \r
+\r
+# The EXCLUDE_SYMLINKS tag can be used select whether or not files or \r
+# directories that are symbolic links (a Unix filesystem feature) are excluded \r
+# from the input.\r
+\r
+EXCLUDE_SYMLINKS       = NO\r
+\r
+# If the value of the INPUT tag contains directories, you can use the \r
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude \r
+# certain files from those directories. Note that the wildcards are matched \r
+# against the file with absolute path, so to exclude all test directories \r
+# for example use the pattern */test/*\r
+\r
+EXCLUDE_PATTERNS       = */LowLevel/USBMode.h\r
+\r
+# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names \r
+# (namespaces, classes, functions, etc.) that should be excluded from the \r
+# output. The symbol name can be a fully qualified name, a word, or if the \r
+# wildcard * is used, a substring. Examples: ANamespace, AClass, \r
+# AClass::ANamespace, ANamespace::*Test\r
+\r
+EXCLUDE_SYMBOLS        = __*\r
+\r
+# The EXAMPLE_PATH tag can be used to specify one or more files or \r
+# directories that contain example code fragments that are included (see \r
+# the \include command).\r
+\r
+EXAMPLE_PATH           = \r
+\r
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the \r
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \r
+# and *.h) to filter out the source-files in the directories. If left \r
+# blank all files are included.\r
+\r
+EXAMPLE_PATTERNS       = *\r
+\r
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be \r
+# searched for input files to be used with the \include or \dontinclude \r
+# commands irrespective of the value of the RECURSIVE tag. \r
+# Possible values are YES and NO. If left blank NO is used.\r
+\r
+EXAMPLE_RECURSIVE      = NO\r
+\r
+# The IMAGE_PATH tag can be used to specify one or more files or \r
+# directories that contain image that are included in the documentation (see \r
+# the \image command).\r
+\r
+IMAGE_PATH             = \r
+\r
+# The INPUT_FILTER tag can be used to specify a program that doxygen should \r
+# invoke to filter for each input file. Doxygen will invoke the filter program \r
+# by executing (via popen()) the command <filter> <input-file>, where <filter> \r
+# is the value of the INPUT_FILTER tag, and <input-file> is the name of an \r
+# input file. Doxygen will then use the output that the filter program writes \r
+# to standard output.  If FILTER_PATTERNS is specified, this tag will be \r
+# ignored.\r
+\r
+INPUT_FILTER           = \r
+\r
+# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern \r
+# basis.  Doxygen will compare the file name with each pattern and apply the \r
+# filter if there is a match.  The filters are a list of the form: \r
+# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further \r
+# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER \r
+# is applied to all files.\r
+\r
+FILTER_PATTERNS        = \r
+\r
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using \r
+# INPUT_FILTER) will be used to filter the input files when producing source \r
+# files to browse (i.e. when SOURCE_BROWSER is set to YES).\r
+\r
+FILTER_SOURCE_FILES    = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to source browsing\r
+#---------------------------------------------------------------------------\r
+\r
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will \r
+# be generated. Documented entities will be cross-referenced with these sources. \r
+# Note: To get rid of all source code in the generated output, make sure also \r
+# VERBATIM_HEADERS is set to NO.\r
+\r
+SOURCE_BROWSER         = NO\r
+\r
+# Setting the INLINE_SOURCES tag to YES will include the body \r
+# of functions and classes directly in the documentation.\r
+\r
+INLINE_SOURCES         = NO\r
+\r
+# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct \r
+# doxygen to hide any special comment blocks from generated source code \r
+# fragments. Normal C and C++ comments will always remain visible.\r
+\r
+STRIP_CODE_COMMENTS    = YES\r
+\r
+# If the REFERENCED_BY_RELATION tag is set to YES \r
+# then for each documented function all documented \r
+# functions referencing it will be listed.\r
+\r
+REFERENCED_BY_RELATION = NO\r
+\r
+# If the REFERENCES_RELATION tag is set to YES \r
+# then for each documented function all documented entities \r
+# called/used by that function will be listed.\r
+\r
+REFERENCES_RELATION    = NO\r
+\r
+# If the REFERENCES_LINK_SOURCE tag is set to YES (the default)\r
+# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from\r
+# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will\r
+# link to the source code.  Otherwise they will link to the documentstion.\r
+\r
+REFERENCES_LINK_SOURCE = NO\r
+\r
+# If the USE_HTAGS tag is set to YES then the references to source code \r
+# will point to the HTML generated by the htags(1) tool instead of doxygen \r
+# built-in source browser. The htags tool is part of GNU's global source \r
+# tagging system (see http://www.gnu.org/software/global/global.html). You \r
+# will need version 4.8.6 or higher.\r
+\r
+USE_HTAGS              = NO\r
+\r
+# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen \r
+# will generate a verbatim copy of the header file for each class for \r
+# which an include is specified. Set to NO to disable this.\r
+\r
+VERBATIM_HEADERS       = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the alphabetical class index\r
+#---------------------------------------------------------------------------\r
+\r
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index \r
+# of all compounds will be generated. Enable this if the project \r
+# contains a lot of classes, structs, unions or interfaces.\r
+\r
+ALPHABETICAL_INDEX     = YES\r
+\r
+# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then \r
+# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns \r
+# in which this list will be split (can be a number in the range [1..20])\r
+\r
+COLS_IN_ALPHA_INDEX    = 5\r
+\r
+# In case all classes in a project start with a common prefix, all \r
+# classes will be put under the same header in the alphabetical index. \r
+# The IGNORE_PREFIX tag can be used to specify one or more prefixes that \r
+# should be ignored while generating the index headers.\r
+\r
+IGNORE_PREFIX          = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the HTML output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_HTML tag is set to YES (the default) Doxygen will \r
+# generate HTML output.\r
+\r
+GENERATE_HTML          = YES\r
+\r
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `html' will be used as the default path.\r
+\r
+HTML_OUTPUT            = html\r
+\r
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for \r
+# each generated HTML page (for example: .htm,.php,.asp). If it is left blank \r
+# doxygen will generate files with .html extension.\r
+\r
+HTML_FILE_EXTENSION    = .html\r
+\r
+# The HTML_HEADER tag can be used to specify a personal HTML header for \r
+# each generated HTML page. If it is left blank doxygen will generate a \r
+# standard header.\r
+\r
+HTML_HEADER            = \r
+\r
+# The HTML_FOOTER tag can be used to specify a personal HTML footer for \r
+# each generated HTML page. If it is left blank doxygen will generate a \r
+# standard footer.\r
+\r
+HTML_FOOTER            = \r
+\r
+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading \r
+# style sheet that is used by each HTML page. It can be used to \r
+# fine-tune the look of the HTML output. If the tag is left blank doxygen \r
+# will generate a default style sheet. Note that doxygen will try to copy \r
+# the style sheet file to the HTML output directory, so don't put your own \r
+# stylesheet in the HTML output directory as well, or it will be erased!\r
+\r
+HTML_STYLESHEET        = \r
+\r
+# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, \r
+# files or namespaces will be aligned in HTML using tables. If set to \r
+# NO a bullet list will be used.\r
+\r
+HTML_ALIGN_MEMBERS     = YES\r
+\r
+# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML \r
+# documentation will contain sections that can be hidden and shown after the \r
+# page has loaded. For this to work a browser that supports \r
+# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox \r
+# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari).\r
+\r
+HTML_DYNAMIC_SECTIONS  = YES\r
+\r
+# If the GENERATE_DOCSET tag is set to YES, additional index files \r
+# will be generated that can be used as input for Apple's Xcode 3 \r
+# integrated development environment, introduced with OSX 10.5 (Leopard). \r
+# To create a documentation set, doxygen will generate a Makefile in the \r
+# HTML output directory. Running make will produce the docset in that \r
+# directory and running "make install" will install the docset in \r
+# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find \r
+# it at startup. \r
+# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information.\r
+\r
+GENERATE_DOCSET        = NO\r
+\r
+# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the \r
+# feed. A documentation feed provides an umbrella under which multiple \r
+# documentation sets from a single provider (such as a company or product suite) \r
+# can be grouped.\r
+\r
+DOCSET_FEEDNAME        = "Doxygen generated docs"\r
+\r
+# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that \r
+# should uniquely identify the documentation set bundle. This should be a \r
+# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen \r
+# will append .docset to the name.\r
+\r
+DOCSET_BUNDLE_ID       = org.doxygen.Project\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, additional index files \r
+# will be generated that can be used as input for tools like the \r
+# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) \r
+# of the generated HTML documentation.\r
+\r
+GENERATE_HTMLHELP      = NO\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can \r
+# be used to specify the file name of the resulting .chm file. You \r
+# can add a path in front of the file if the result should not be \r
+# written to the html output directory.\r
+\r
+CHM_FILE               = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can \r
+# be used to specify the location (absolute path including file name) of \r
+# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run \r
+# the HTML help compiler on the generated index.hhp.\r
+\r
+HHC_LOCATION           = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag \r
+# controls if a separate .chi index file is generated (YES) or that \r
+# it should be included in the master .chm file (NO).\r
+\r
+GENERATE_CHI           = NO\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING\r
+# is used to encode HtmlHelp index (hhk), content (hhc) and project file\r
+# content.\r
+\r
+CHM_INDEX_ENCODING     = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag \r
+# controls whether a binary table of contents is generated (YES) or a \r
+# normal table of contents (NO) in the .chm file.\r
+\r
+BINARY_TOC             = NO\r
+\r
+# The TOC_EXPAND flag can be set to YES to add extra items for group members \r
+# to the contents of the HTML help documentation and to the tree view.\r
+\r
+TOC_EXPAND             = YES\r
+\r
+# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER \r
+# are set, an additional index file will be generated that can be used as input for \r
+# Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated \r
+# HTML documentation.\r
+\r
+GENERATE_QHP           = NO\r
+\r
+# If the QHG_LOCATION tag is specified, the QCH_FILE tag can \r
+# be used to specify the file name of the resulting .qch file. \r
+# The path specified is relative to the HTML output folder.\r
+\r
+QCH_FILE               = \r
+\r
+# The QHP_NAMESPACE tag specifies the namespace to use when generating \r
+# Qt Help Project output. For more information please see \r
+# <a href="http://doc.trolltech.com/qthelpproject.html#namespace">Qt Help Project / Namespace</a>.\r
+\r
+QHP_NAMESPACE          = org.doxygen.Project\r
+\r
+# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating \r
+# Qt Help Project output. For more information please see \r
+# <a href="http://doc.trolltech.com/qthelpproject.html#virtual-folders">Qt Help Project / Virtual Folders</a>.\r
+\r
+QHP_VIRTUAL_FOLDER     = doc\r
+\r
+# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can \r
+# be used to specify the location of Qt's qhelpgenerator. \r
+# If non-empty doxygen will try to run qhelpgenerator on the generated \r
+# .qhp file .\r
+\r
+QHG_LOCATION           = \r
+\r
+# The DISABLE_INDEX tag can be used to turn on/off the condensed index at \r
+# top of each HTML page. The value NO (the default) enables the index and \r
+# the value YES disables it.\r
+\r
+DISABLE_INDEX          = NO\r
+\r
+# This tag can be used to set the number of enum values (range [1..20]) \r
+# that doxygen will group on one line in the generated HTML documentation.\r
+\r
+ENUM_VALUES_PER_LINE   = 1\r
+\r
+# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index\r
+# structure should be generated to display hierarchical information.\r
+# If the tag value is set to FRAME, a side panel will be generated\r
+# containing a tree-like index structure (just like the one that \r
+# is generated for HTML Help). For this to work a browser that supports \r
+# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, \r
+# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are \r
+# probably better off using the HTML help feature. Other possible values \r
+# for this tag are: HIERARCHIES, which will generate the Groups, Directories,\r
+# and Class Hierarchy pages using a tree view instead of an ordered list;\r
+# ALL, which combines the behavior of FRAME and HIERARCHIES; and NONE, which\r
+# disables this behavior completely. For backwards compatibility with previous\r
+# releases of Doxygen, the values YES and NO are equivalent to FRAME and NONE\r
+# respectively.\r
+\r
+GENERATE_TREEVIEW      = YES\r
+\r
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be \r
+# used to set the initial width (in pixels) of the frame in which the tree \r
+# is shown.\r
+\r
+TREEVIEW_WIDTH         = 250\r
+\r
+# Use this tag to change the font size of Latex formulas included \r
+# as images in the HTML documentation. The default is 10. Note that \r
+# when you change the font size after a successful doxygen run you need \r
+# to manually remove any form_*.png images from the HTML output directory \r
+# to force them to be regenerated.\r
+\r
+FORMULA_FONTSIZE       = 10\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the LaTeX output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will \r
+# generate Latex output.\r
+\r
+GENERATE_LATEX         = NO\r
+\r
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `latex' will be used as the default path.\r
+\r
+LATEX_OUTPUT           = latex\r
+\r
+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be \r
+# invoked. If left blank `latex' will be used as the default command name.\r
+\r
+LATEX_CMD_NAME         = latex\r
+\r
+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to \r
+# generate index for LaTeX. If left blank `makeindex' will be used as the \r
+# default command name.\r
+\r
+MAKEINDEX_CMD_NAME     = makeindex\r
+\r
+# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact \r
+# LaTeX documents. This may be useful for small projects and may help to \r
+# save some trees in general.\r
+\r
+COMPACT_LATEX          = NO\r
+\r
+# The PAPER_TYPE tag can be used to set the paper type that is used \r
+# by the printer. Possible values are: a4, a4wide, letter, legal and \r
+# executive. If left blank a4wide will be used.\r
+\r
+PAPER_TYPE             = a4wide\r
+\r
+# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX \r
+# packages that should be included in the LaTeX output.\r
+\r
+EXTRA_PACKAGES         = \r
+\r
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for \r
+# the generated latex document. The header should contain everything until \r
+# the first chapter. If it is left blank doxygen will generate a \r
+# standard header. Notice: only use this tag if you know what you are doing!\r
+\r
+LATEX_HEADER           = \r
+\r
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated \r
+# is prepared for conversion to pdf (using ps2pdf). The pdf file will \r
+# contain links (just like the HTML output) instead of page references \r
+# This makes the output suitable for online browsing using a pdf viewer.\r
+\r
+PDF_HYPERLINKS         = YES\r
+\r
+# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of \r
+# plain latex in the generated Makefile. Set this option to YES to get a \r
+# higher quality PDF documentation.\r
+\r
+USE_PDFLATEX           = YES\r
+\r
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. \r
+# command to the generated LaTeX files. This will instruct LaTeX to keep \r
+# running if errors occur, instead of asking the user for help. \r
+# This option is also used when generating formulas in HTML.\r
+\r
+LATEX_BATCHMODE        = NO\r
+\r
+# If LATEX_HIDE_INDICES is set to YES then doxygen will not \r
+# include the index chapters (such as File Index, Compound Index, etc.) \r
+# in the output.\r
+\r
+LATEX_HIDE_INDICES     = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the RTF output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output \r
+# The RTF output is optimized for Word 97 and may not look very pretty with \r
+# other RTF readers or editors.\r
+\r
+GENERATE_RTF           = NO\r
+\r
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `rtf' will be used as the default path.\r
+\r
+RTF_OUTPUT             = rtf\r
+\r
+# If the COMPACT_RTF tag is set to YES Doxygen generates more compact \r
+# RTF documents. This may be useful for small projects and may help to \r
+# save some trees in general.\r
+\r
+COMPACT_RTF            = NO\r
+\r
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated \r
+# will contain hyperlink fields. The RTF file will \r
+# contain links (just like the HTML output) instead of page references. \r
+# This makes the output suitable for online browsing using WORD or other \r
+# programs which support those fields. \r
+# Note: wordpad (write) and others do not support links.\r
+\r
+RTF_HYPERLINKS         = NO\r
+\r
+# Load stylesheet definitions from file. Syntax is similar to doxygen's \r
+# config file, i.e. a series of assignments. You only have to provide \r
+# replacements, missing definitions are set to their default value.\r
+\r
+RTF_STYLESHEET_FILE    = \r
+\r
+# Set optional variables used in the generation of an rtf document. \r
+# Syntax is similar to doxygen's config file.\r
+\r
+RTF_EXTENSIONS_FILE    = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the man page output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_MAN tag is set to YES (the default) Doxygen will \r
+# generate man pages\r
+\r
+GENERATE_MAN           = NO\r
+\r
+# The MAN_OUTPUT tag is used to specify where the man pages will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `man' will be used as the default path.\r
+\r
+MAN_OUTPUT             = man\r
+\r
+# The MAN_EXTENSION tag determines the extension that is added to \r
+# the generated man pages (default is the subroutine's section .3)\r
+\r
+MAN_EXTENSION          = .3\r
+\r
+# If the MAN_LINKS tag is set to YES and Doxygen generates man output, \r
+# then it will generate one additional man file for each entity \r
+# documented in the real man page(s). These additional files \r
+# only source the real man page, but without them the man command \r
+# would be unable to find the correct page. The default is NO.\r
+\r
+MAN_LINKS              = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the XML output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_XML tag is set to YES Doxygen will \r
+# generate an XML file that captures the structure of \r
+# the code including all documentation.\r
+\r
+GENERATE_XML           = NO\r
+\r
+# The XML_OUTPUT tag is used to specify where the XML pages will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `xml' will be used as the default path.\r
+\r
+XML_OUTPUT             = xml\r
+\r
+# The XML_SCHEMA tag can be used to specify an XML schema, \r
+# which can be used by a validating XML parser to check the \r
+# syntax of the XML files.\r
+\r
+XML_SCHEMA             = \r
+\r
+# The XML_DTD tag can be used to specify an XML DTD, \r
+# which can be used by a validating XML parser to check the \r
+# syntax of the XML files.\r
+\r
+XML_DTD                = \r
+\r
+# If the XML_PROGRAMLISTING tag is set to YES Doxygen will \r
+# dump the program listings (including syntax highlighting \r
+# and cross-referencing information) to the XML output. Note that \r
+# enabling this will significantly increase the size of the XML output.\r
+\r
+XML_PROGRAMLISTING     = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options for the AutoGen Definitions output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will \r
+# generate an AutoGen Definitions (see autogen.sf.net) file \r
+# that captures the structure of the code including all \r
+# documentation. Note that this feature is still experimental \r
+# and incomplete at the moment.\r
+\r
+GENERATE_AUTOGEN_DEF   = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the Perl module output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_PERLMOD tag is set to YES Doxygen will \r
+# generate a Perl module file that captures the structure of \r
+# the code including all documentation. Note that this \r
+# feature is still experimental and incomplete at the \r
+# moment.\r
+\r
+GENERATE_PERLMOD       = NO\r
+\r
+# If the PERLMOD_LATEX tag is set to YES Doxygen will generate \r
+# the necessary Makefile rules, Perl scripts and LaTeX code to be able \r
+# to generate PDF and DVI output from the Perl module output.\r
+\r
+PERLMOD_LATEX          = NO\r
+\r
+# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be \r
+# nicely formatted so it can be parsed by a human reader.  This is useful \r
+# if you want to understand what is going on.  On the other hand, if this \r
+# tag is set to NO the size of the Perl module output will be much smaller \r
+# and Perl will parse it just the same.\r
+\r
+PERLMOD_PRETTY         = YES\r
+\r
+# The names of the make variables in the generated doxyrules.make file \r
+# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. \r
+# This is useful so different doxyrules.make files included by the same \r
+# Makefile don't overwrite each other's variables.\r
+\r
+PERLMOD_MAKEVAR_PREFIX = \r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration options related to the preprocessor   \r
+#---------------------------------------------------------------------------\r
+\r
+# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will \r
+# evaluate all C-preprocessor directives found in the sources and include \r
+# files.\r
+\r
+ENABLE_PREPROCESSING   = YES\r
+\r
+# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro \r
+# names in the source code. If set to NO (the default) only conditional \r
+# compilation will be performed. Macro expansion can be done in a controlled \r
+# way by setting EXPAND_ONLY_PREDEF to YES.\r
+\r
+MACRO_EXPANSION        = YES\r
+\r
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES \r
+# then the macro expansion is limited to the macros specified with the \r
+# PREDEFINED and EXPAND_AS_DEFINED tags.\r
+\r
+EXPAND_ONLY_PREDEF     = YES\r
+\r
+# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files \r
+# in the INCLUDE_PATH (see below) will be search if a #include is found.\r
+\r
+SEARCH_INCLUDES        = YES\r
+\r
+# The INCLUDE_PATH tag can be used to specify one or more directories that \r
+# contain include files that are not input files but should be processed by \r
+# the preprocessor.\r
+\r
+INCLUDE_PATH           = \r
+\r
+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard \r
+# patterns (like *.h and *.hpp) to filter out the header-files in the \r
+# directories. If left blank, the patterns specified with FILE_PATTERNS will \r
+# be used.\r
+\r
+INCLUDE_FILE_PATTERNS  = \r
+\r
+# The PREDEFINED tag can be used to specify one or more macro names that \r
+# are defined before the preprocessor is started (similar to the -D option of \r
+# gcc). The argument of the tag is a list of macros of the form: name \r
+# or name=definition (no spaces). If the definition and the = are \r
+# omitted =1 is assumed. To prevent a macro definition from being \r
+# undefined via #undef or recursively expanded use the := operator \r
+# instead of the = operator.\r
+\r
+PREDEFINED             = __DOXYGEN__\r
+\r
+# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then \r
+# this tag can be used to specify a list of macro names that should be expanded. \r
+# The macro definition that is found in the sources will be used. \r
+# Use the PREDEFINED tag if you want to use a different macro definition.\r
+\r
+EXPAND_AS_DEFINED      = BUTTLOADTAG\r
+\r
+# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then \r
+# doxygen's preprocessor will remove all function-like macros that are alone \r
+# on a line, have an all uppercase name, and do not end with a semicolon. Such \r
+# function macros are typically used for boiler-plate code, and will confuse \r
+# the parser if not removed.\r
+\r
+SKIP_FUNCTION_MACROS   = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration::additions related to external references   \r
+#---------------------------------------------------------------------------\r
+\r
+# The TAGFILES option can be used to specify one or more tagfiles. \r
+# Optionally an initial location of the external documentation \r
+# can be added for each tagfile. The format of a tag file without \r
+# this location is as follows: \r
+#   TAGFILES = file1 file2 ... \r
+# Adding location for the tag files is done as follows: \r
+#   TAGFILES = file1=loc1 "file2 = loc2" ... \r
+# where "loc1" and "loc2" can be relative or absolute paths or \r
+# URLs. If a location is present for each tag, the installdox tool \r
+# does not have to be run to correct the links.\r
+# Note that each tag file must have a unique name\r
+# (where the name does NOT include the path)\r
+# If a tag file is not located in the directory in which doxygen \r
+# is run, you must also specify the path to the tagfile here.\r
+\r
+TAGFILES               = \r
+\r
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create \r
+# a tag file that is based on the input files it reads.\r
+\r
+GENERATE_TAGFILE       = \r
+\r
+# If the ALLEXTERNALS tag is set to YES all external classes will be listed \r
+# in the class index. If set to NO only the inherited external classes \r
+# will be listed.\r
+\r
+ALLEXTERNALS           = NO\r
+\r
+# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed \r
+# in the modules index. If set to NO, only the current project's groups will \r
+# be listed.\r
+\r
+EXTERNAL_GROUPS        = YES\r
+\r
+# The PERL_PATH should be the absolute path and name of the perl script \r
+# interpreter (i.e. the result of `which perl').\r
+\r
+PERL_PATH              = /usr/bin/perl\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration options related to the dot tool   \r
+#---------------------------------------------------------------------------\r
+\r
+# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will \r
+# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base \r
+# or super classes. Setting the tag to NO turns the diagrams off. Note that \r
+# this option is superseded by the HAVE_DOT option below. This is only a \r
+# fallback. It is recommended to install and use dot, since it yields more \r
+# powerful graphs.\r
+\r
+CLASS_DIAGRAMS         = NO\r
+\r
+# You can define message sequence charts within doxygen comments using the \msc \r
+# command. Doxygen will then run the mscgen tool (see \r
+# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the \r
+# documentation. The MSCGEN_PATH tag allows you to specify the directory where \r
+# the mscgen tool resides. If left empty the tool is assumed to be found in the \r
+# default search path.\r
+\r
+MSCGEN_PATH            = \r
+\r
+# If set to YES, the inheritance and collaboration graphs will hide \r
+# inheritance and usage relations if the target is undocumented \r
+# or is not a class.\r
+\r
+HIDE_UNDOC_RELATIONS   = YES\r
+\r
+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is \r
+# available from the path. This tool is part of Graphviz, a graph visualization \r
+# toolkit from AT&T and Lucent Bell Labs. The other options in this section \r
+# have no effect if this option is set to NO (the default)\r
+\r
+HAVE_DOT               = NO\r
+\r
+# By default doxygen will write a font called FreeSans.ttf to the output \r
+# directory and reference it in all dot files that doxygen generates. This \r
+# font does not include all possible unicode characters however, so when you need \r
+# these (or just want a differently looking font) you can specify the font name \r
+# using DOT_FONTNAME. You need need to make sure dot is able to find the font, \r
+# which can be done by putting it in a standard location or by setting the \r
+# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory \r
+# containing the font.\r
+\r
+DOT_FONTNAME           = FreeSans\r
+\r
+# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. \r
+# The default size is 10pt.\r
+\r
+DOT_FONTSIZE           = 10\r
+\r
+# By default doxygen will tell dot to use the output directory to look for the \r
+# FreeSans.ttf font (which doxygen will put there itself). If you specify a \r
+# different font using DOT_FONTNAME you can set the path where dot \r
+# can find it using this tag.\r
+\r
+DOT_FONTPATH           = \r
+\r
+# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for each documented class showing the direct and \r
+# indirect inheritance relations. Setting this tag to YES will force the \r
+# the CLASS_DIAGRAMS tag to NO.\r
+\r
+CLASS_GRAPH            = NO\r
+\r
+# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for each documented class showing the direct and \r
+# indirect implementation dependencies (inheritance, containment, and \r
+# class references variables) of the class with other documented classes.\r
+\r
+COLLABORATION_GRAPH    = NO\r
+\r
+# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for groups, showing the direct groups dependencies\r
+\r
+GROUP_GRAPHS           = NO\r
+\r
+# If the UML_LOOK tag is set to YES doxygen will generate inheritance and \r
+# collaboration diagrams in a style similar to the OMG's Unified Modeling \r
+# Language.\r
+\r
+UML_LOOK               = NO\r
+\r
+# If set to YES, the inheritance and collaboration graphs will show the \r
+# relations between templates and their instances.\r
+\r
+TEMPLATE_RELATIONS     = NO\r
+\r
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT \r
+# tags are set to YES then doxygen will generate a graph for each documented \r
+# file showing the direct and indirect include dependencies of the file with \r
+# other documented files.\r
+\r
+INCLUDE_GRAPH          = NO\r
+\r
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and \r
+# HAVE_DOT tags are set to YES then doxygen will generate a graph for each \r
+# documented header file showing the documented files that directly or \r
+# indirectly include this file.\r
+\r
+INCLUDED_BY_GRAPH      = NO\r
+\r
+# If the CALL_GRAPH and HAVE_DOT options are set to YES then \r
+# doxygen will generate a call dependency graph for every global function \r
+# or class method. Note that enabling this option will significantly increase \r
+# the time of a run. So in most cases it will be better to enable call graphs \r
+# for selected functions only using the \callgraph command.\r
+\r
+CALL_GRAPH             = NO\r
+\r
+# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then \r
+# doxygen will generate a caller dependency graph for every global function \r
+# or class method. Note that enabling this option will significantly increase \r
+# the time of a run. So in most cases it will be better to enable caller \r
+# graphs for selected functions only using the \callergraph command.\r
+\r
+CALLER_GRAPH           = NO\r
+\r
+# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen \r
+# will graphical hierarchy of all classes instead of a textual one.\r
+\r
+GRAPHICAL_HIERARCHY    = NO\r
+\r
+# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES \r
+# then doxygen will show the dependencies a directory has on other directories \r
+# in a graphical way. The dependency relations are determined by the #include\r
+# relations between the files in the directories.\r
+\r
+DIRECTORY_GRAPH        = NO\r
+\r
+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images \r
+# generated by dot. Possible values are png, jpg, or gif\r
+# If left blank png will be used.\r
+\r
+DOT_IMAGE_FORMAT       = png\r
+\r
+# The tag DOT_PATH can be used to specify the path where the dot tool can be \r
+# found. If left blank, it is assumed the dot tool can be found in the path.\r
+\r
+DOT_PATH               = "C:/Program Files/Graphviz2.18/bin"\r
+\r
+# The DOTFILE_DIRS tag can be used to specify one or more directories that \r
+# contain dot files that are included in the documentation (see the \r
+# \dotfile command).\r
+\r
+DOTFILE_DIRS           = \r
+\r
+# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of \r
+# nodes that will be shown in the graph. If the number of nodes in a graph \r
+# becomes larger than this value, doxygen will truncate the graph, which is \r
+# visualized by representing a node as a red box. Note that doxygen if the \r
+# number of direct children of the root node in a graph is already larger than \r
+# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note \r
+# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.\r
+\r
+DOT_GRAPH_MAX_NODES    = 15\r
+\r
+# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the \r
+# graphs generated by dot. A depth value of 3 means that only nodes reachable \r
+# from the root by following a path via at most 3 edges will be shown. Nodes \r
+# that lay further from the root node will be omitted. Note that setting this \r
+# option to 1 or 2 may greatly reduce the computation time needed for large \r
+# code bases. Also note that the size of a graph can be further restricted by \r
+# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.\r
+\r
+MAX_DOT_GRAPH_DEPTH    = 2\r
+\r
+# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent \r
+# background. This is disabled by default, because dot on Windows does not \r
+# seem to support this out of the box. Warning: Depending on the platform used, \r
+# enabling this option may lead to badly anti-aliased labels on the edges of \r
+# a graph (i.e. they become hard to read).\r
+\r
+DOT_TRANSPARENT        = YES\r
+\r
+# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output \r
+# files in one run (i.e. multiple -o and -T options on the command line). This \r
+# makes dot run faster, but since only newer versions of dot (>1.8.10) \r
+# support this, this feature is disabled by default.\r
+\r
+DOT_MULTI_TARGETS      = NO\r
+\r
+# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will \r
+# generate a legend page explaining the meaning of the various boxes and \r
+# arrows in the dot generated graphs.\r
+\r
+GENERATE_LEGEND        = YES\r
+\r
+# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will \r
+# remove the intermediate dot files that are used to generate \r
+# the various graphs.\r
+\r
+DOT_CLEANUP            = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration::additions related to the search engine   \r
+#---------------------------------------------------------------------------\r
+\r
+# The SEARCHENGINE tag specifies whether or not a search engine should be \r
+# used. If set to NO the values of all tags below this one will be ignored.\r
+\r
+SEARCHENGINE           = NO\r
diff --git a/Demos/Device/ClassDriver/Keyboard/Keyboard.aps b/Demos/Device/ClassDriver/Keyboard/Keyboard.aps
new file mode 100644 (file)
index 0000000..541c175
--- /dev/null
@@ -0,0 +1 @@
+<AVRStudio><MANAGEMENT><ProjectName>Keyboard</ProjectName><Created>30-Sep-2008 13:59:29</Created><LastEdit>30-Sep-2008 14:00:25</LastEdit><ICON>241</ICON><ProjectType>0</ProjectType><Created>30-Sep-2008 13:59:29</Created><Version>4</Version><Build>4, 14, 0, 589</Build><ProjectTypeName>AVR GCC</ProjectTypeName></MANAGEMENT><CODE_CREATION><ObjectFile>Keyboard.elf</ObjectFile><EntryFile></EntryFile><SaveFolder>C:\Users\Dean\Documents\Electronics\Projects\WORK\MyUSBWORK\Demos\Keyboard\</SaveFolder></CODE_CREATION><DEBUG_TARGET><CURRENT_TARGET>JTAGICE mkII</CURRENT_TARGET><CURRENT_PART>AT90USB1287.xml</CURRENT_PART><BREAKPOINTS></BREAKPOINTS><IO_EXPAND><HIDE>false</HIDE></IO_EXPAND><REGISTERNAMES><Register>R00</Register><Register>R01</Register><Register>R02</Register><Register>R03</Register><Register>R04</Register><Register>R05</Register><Register>R06</Register><Register>R07</Register><Register>R08</Register><Register>R09</Register><Register>R10</Register><Register>R11</Register><Register>R12</Register><Register>R13</Register><Register>R14</Register><Register>R15</Register><Register>R16</Register><Register>R17</Register><Register>R18</Register><Register>R19</Register><Register>R20</Register><Register>R21</Register><Register>R22</Register><Register>R23</Register><Register>R24</Register><Register>R25</Register><Register>R26</Register><Register>R27</Register><Register>R28</Register><Register>R29</Register><Register>R30</Register><Register>R31</Register></REGISTERNAMES><COM>Auto</COM><COMType>0</COMType><WATCHNUM>0</WATCHNUM><WATCHNAMES><Pane0></Pane0><Pane1></Pane1><Pane2></Pane2><Pane3></Pane3></WATCHNAMES><BreakOnTrcaeFull>0</BreakOnTrcaeFull></DEBUG_TARGET><Debugger><Triggers></Triggers></Debugger><AVRGCCPLUGIN><FILES><SOURCEFILE>Descriptors.c</SOURCEFILE><SOURCEFILE>Keyboard.c</SOURCEFILE><HEADERFILE>Descriptors.h</HEADERFILE><HEADERFILE>Keyboard.h</HEADERFILE><OTHERFILE>makefile</OTHERFILE></FILES><CONFIGS><CONFIG><NAME>default</NAME><USESEXTERNALMAKEFILE>YES</USESEXTERNALMAKEFILE><EXTERNALMAKEFILE>makefile</EXTERNALMAKEFILE><PART>at90usb1287</PART><HEX>1</HEX><LIST>1</LIST><MAP>1</MAP><OUTPUTFILENAME>Keyboard.elf</OUTPUTFILENAME><OUTPUTDIR>default\</OUTPUTDIR><ISDIRTY>1</ISDIRTY><OPTIONS/><INCDIRS/><LIBDIRS/><LIBS/><LINKOBJECTS/><OPTIONSFORALL>-Wall -gdwarf-2 -std=gnu99 -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums</OPTIONSFORALL><LINKEROPTIONS></LINKEROPTIONS><SEGMENTS/></CONFIG></CONFIGS><LASTCONFIG>default</LASTCONFIG><USES_WINAVR>1</USES_WINAVR><GCC_LOC>C:\WinAVR-20080512\bin\avr-gcc.exe</GCC_LOC><MAKE_LOC>C:\WinAVR-20080512\utils\bin\make.exe</MAKE_LOC></AVRGCCPLUGIN><IOView><usergroups/><sort sorted="0" column="0" ordername="0" orderaddress="0" ordergroup="0"/></IOView><Files><File00000><FileId>00000</FileId><FileName>makefile</FileName><Status>1</Status></File00000></Files><Events><Bookmarks></Bookmarks></Events><Trace><Filters></Filters></Trace></AVRStudio>\r
diff --git a/Demos/Device/ClassDriver/Keyboard/Keyboard.c b/Demos/Device/ClassDriver/Keyboard/Keyboard.c
new file mode 100644 (file)
index 0000000..bebad12
--- /dev/null
@@ -0,0 +1,184 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Denver Gingerich (denver [at] ossguy [dot] com)\r
+      Based on code by Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  Main source file for the Keyboard demo. This file contains the main tasks of\r
+ *  the demo and is responsible for the initial application hardware configuration.\r
+ */\r
+\r
+#include "Keyboard.h"\r
+\r
+/** LUFA HID Class driver interface configuration and state information. This structure is\r
+ *  passed to all HID Class driver functions, so that multiple instances of the same class\r
+ *  within a device can be differentiated from one another.\r
+ */\r
+USB_ClassInfo_HID_t Keyboard_HID_Interface =\r
+    {\r
+        .InterfaceNumber         = 0,\r
+\r
+        .ReportINEndpointNumber  = KEYBOARD_EPNUM,\r
+        .ReportINEndpointSize    = KEYBOARD_EPSIZE,\r
+\r
+               .ReportINBufferSize      = sizeof(USB_KeyboardReport_Data_t),\r
+\r
+        .IdleCount               = 500,\r
+    };\r
+\r
+/** Main program entry point. This routine contains the overall program flow, including initial\r
+ *  setup of all components and the main program loop.\r
+ */\r
+int main(void)\r
+{\r
+    SetupHardware();\r
+\r
+    LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);\r
+    \r
+    for (;;)\r
+    {\r
+        USB_HID_USBTask(&Keyboard_HID_Interface);\r
+        USB_USBTask();\r
+    }\r
+}\r
+\r
+/** Configures the board hardware and chip peripherals for the demo's functionality. */\r
+void SetupHardware()\r
+{\r
+    /* Disable watchdog if enabled by bootloader/fuses */\r
+    MCUSR &= ~(1 << WDRF);\r
+    wdt_disable();\r
+\r
+    /* Disable clock division */\r
+    clock_prescale_set(clock_div_1);\r
+\r
+    /* Hardware Initialization */\r
+    Joystick_Init();\r
+    LEDs_Init();\r
+    Buttons_Init();\r
+    USB_Init();\r
+\r
+       /* Millisecond timer initialization, with output compare interrupt enabled for the idle timing */\r
+       OCR0A  = ((F_CPU / 64) / 1000);\r
+       TCCR0A = (1 << WGM01);\r
+       TCCR0B = ((1 << CS01) | (1 << CS00));\r
+       TIMSK0 = (1 << OCIE0A);\r
+}\r
+\r
+/** Event handler for the library USB Connection event. */\r
+void EVENT_USB_Connect(void)\r
+{\r
+    LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING);\r
+}\r
+\r
+/** Event handler for the library USB Disconnection event. */\r
+void EVENT_USB_Disconnect(void)\r
+{\r
+    LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);\r
+}\r
+\r
+/** Event handler for the library USB Configuration Changed event. */\r
+void EVENT_USB_ConfigurationChanged(void)\r
+{\r
+    LEDs_SetAllLEDs(LEDMASK_USB_READY);\r
+\r
+    if (!(USB_HID_ConfigureEndpoints(&Keyboard_HID_Interface)))\r
+      LEDs_SetAllLEDs(LEDMASK_USB_ERROR);\r
+}\r
+\r
+/** Event handler for the library USB Unhandled Control Packet event. */\r
+void EVENT_USB_UnhandledControlPacket(void)\r
+{\r
+    USB_HID_ProcessControlPacket(&Keyboard_HID_Interface);\r
+}\r
+\r
+/** ISR to keep track of each millisecond interrupt, for determining the HID class idle period remaining when set. */\r
+ISR(TIMER0_COMPA_vect, ISR_BLOCK)\r
+{\r
+       if (Keyboard_HID_Interface.IdleMSRemaining)\r
+         Keyboard_HID_Interface.IdleMSRemaining--;\r
+}\r
+\r
+/** HID class driver callback function for the creation of HID reports to the host.\r
+ *\r
+ *  \param HIDInterfaceInfo  Pointer to the HID class interface configuration structure being referenced\r
+ *  \param ReportData  Pointer to a buffer where the created report should be stored\r
+ *\r
+ *  \return Number of bytes written in the report (or zero if no report is to be sent\r
+ */\r
+uint16_t CALLBACK_USB_HID_CreateNextHIDReport(USB_ClassInfo_HID_t* HIDInterfaceInfo, uint8_t* ReportID, void* ReportData)\r
+{\r
+    USB_KeyboardReport_Data_t* KeyboardReport = (USB_KeyboardReport_Data_t*)ReportData;\r
+    \r
+    uint8_t JoyStatus_LCL    = Joystick_GetStatus();\r
+    uint8_t ButtonStatus_LCL = Buttons_GetStatus();\r
+\r
+    if (JoyStatus_LCL & JOY_UP)\r
+      KeyboardReport->KeyCode[0] = 0x04; // A\r
+    else if (JoyStatus_LCL & JOY_DOWN)\r
+      KeyboardReport->KeyCode[0] = 0x05; // B\r
+\r
+    if (JoyStatus_LCL & JOY_LEFT)\r
+      KeyboardReport->KeyCode[0] = 0x06; // C\r
+    else if (JoyStatus_LCL & JOY_RIGHT)\r
+      KeyboardReport->KeyCode[0] = 0x07; // D\r
+\r
+    if (JoyStatus_LCL & JOY_PRESS)\r
+      KeyboardReport->KeyCode[0] = 0x08; // E\r
+      \r
+    if (ButtonStatus_LCL & BUTTONS_BUTTON1)\r
+      KeyboardReport->KeyCode[0] = 0x09; // F\r
+      \r
+    return sizeof(USB_KeyboardReport_Data_t);\r
+}\r
+\r
+/** HID class driver callback function for the processing of HID reports from the host.\r
+ *\r
+ *  \param HIDInterfaceInfo  Pointer to the HID class interface configuration structure being referenced\r
+ *  \param ReportData  Pointer to a buffer where the created report has been stored\r
+ *  \param ReportSize  Size in bytes of the received HID report\r
+ */\r
+void CALLBACK_USB_HID_ProcessReceivedHIDReport(USB_ClassInfo_HID_t* HIDInterfaceInfo, uint8_t ReportID,\r
+                                               void* ReportData, uint16_t ReportSize)\r
+{\r
+    uint8_t  LEDMask   = LEDS_NO_LEDS;\r
+    uint8_t* LEDReport = (uint8_t*)ReportData;\r
+\r
+    if (*LEDReport & 0x01) // NUM Lock\r
+      LEDMask |= LEDS_LED1;\r
+    \r
+    if (*LEDReport & 0x02) // CAPS Lock\r
+      LEDMask |= LEDS_LED3;\r
+\r
+    if (*LEDReport & 0x04) // SCROLL Lock\r
+      LEDMask |= LEDS_LED4;\r
+      \r
+    LEDs_SetAllLEDs(LEDMask);\r
+}\r
diff --git a/Demos/Device/ClassDriver/Keyboard/Keyboard.h b/Demos/Device/ClassDriver/Keyboard/Keyboard.h
new file mode 100644 (file)
index 0000000..1b4bb70
--- /dev/null
@@ -0,0 +1,93 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Denver Gingerich (denver [at] ossguy [dot] com)\r
+      Based on code by Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  Header file for Keyboard.c.\r
+ */\r
+\r
+#ifndef _KEYBOARD_H_\r
+#define _KEYBOARD_H_\r
+\r
+       /* Includes: */\r
+               #include <avr/io.h>\r
+               #include <avr/wdt.h>\r
+               #include <avr/interrupt.h>\r
+               #include <avr/power.h>\r
+               #include <stdbool.h>\r
+               #include <string.h>\r
+\r
+               #include "Descriptors.h"\r
+\r
+               #include <LUFA/Version.h>\r
+               #include <LUFA/Drivers/Board/Joystick.h>\r
+               #include <LUFA/Drivers/Board/LEDs.h>\r
+               #include <LUFA/Drivers/Board/Buttons.h>\r
+               #include <LUFA/Drivers/USB/USB.h>\r
+               #include <LUFA/Drivers/USB/Class/Device/HID.h>\r
+\r
+       /* Type Defines: */\r
+               /** Type define for the keyboard HID report structure, for creating and sending HID reports to the host PC.\r
+                *  This mirrors the layout described to the host in the HID report descriptor, in Descriptors.c.\r
+                */\r
+               typedef struct\r
+               {\r
+                       uint8_t Modifier; /**< Modifier mask byte, containing a mask of modifier keys set (such as shift or CTRL) */\r
+                       uint8_t Reserved; /**< Reserved, always set as 0x00 */\r
+                       uint8_t KeyCode[6]; /**< Array of up to six simultaneous key codes of pressed keys */\r
+               } USB_KeyboardReport_Data_t;\r
+                       \r
+       /* Macros: */\r
+               /** LED mask for the library LED driver, to indicate that the USB interface is not ready. */\r
+               #define LEDMASK_USB_NOTREADY      LEDS_LED1\r
+\r
+               /** LED mask for the library LED driver, to indicate that the USB interface is enumerating. */\r
+               #define LEDMASK_USB_ENUMERATING  (LEDS_LED2 | LEDS_LED3)\r
+\r
+               /** LED mask for the library LED driver, to indicate that the USB interface is ready. */\r
+               #define LEDMASK_USB_READY        (LEDS_LED2 | LEDS_LED4)\r
+\r
+               /** LED mask for the library LED driver, to indicate that an error has occurred in the USB interface. */\r
+               #define LEDMASK_USB_ERROR        (LEDS_LED1 | LEDS_LED3)\r
+               \r
+       /* Function Prototypes: */\r
+               void SetupHardware(void);\r
+\r
+               void EVENT_USB_Connect(void);\r
+               void EVENT_USB_Disconnect(void);\r
+               void EVENT_USB_ConfigurationChanged(void);\r
+               void EVENT_USB_UnhandledControlPacket(void);\r
+\r
+               uint16_t CALLBACK_USB_HID_CreateNextHIDReport(USB_ClassInfo_HID_t* HIDInterfaceInfo, uint8_t* ReportID, void* ReportData);\r
+               void     CALLBACK_USB_HID_ProcessReceivedHIDReport(USB_ClassInfo_HID_t* HIDInterfaceInfo, uint8_t ReportID, \r
+                                                                  void* ReportData, uint16_t ReportSize);\r
+\r
+#endif\r
diff --git a/Demos/Device/ClassDriver/Keyboard/Keyboard.txt b/Demos/Device/ClassDriver/Keyboard/Keyboard.txt
new file mode 100644 (file)
index 0000000..3fc9bee
--- /dev/null
@@ -0,0 +1,60 @@
+/** \file\r
+ *\r
+ *  This file contains special DoxyGen information for the generation of the main page and other special\r
+ *  documentation pages. It is not a project source file.\r
+ */\r
\r
+/** \mainpage Keyboard Device Demo\r
+ *\r
+ *  \section SSec_Info USB Information:\r
+ *\r
+ *  The following table gives a rundown of the USB utilization of this demo.\r
+ *\r
+ *  <table>\r
+ *   <tr>\r
+ *    <td><b>USB Mode:</b></td>\r
+ *    <td>Device</td>\r
+ *   </tr>\r
+ *   <tr>\r
+ *    <td><b>USB Class:</b></td>\r
+ *    <td>Human Interface Device (HID)</td>\r
+ *   </tr>\r
+ *   <tr> \r
+ *    <td><b>USB Subclass:</b></td>\r
+ *    <td>N/A</td>\r
+ *   </tr>\r
+ *   <tr>\r
+ *    <td><b>Relevant Standards:</b></td>\r
+ *    <td>USBIF HID Specification, USBIF HID Usage Tables</td>\r
+ *   </tr>\r
+ *   <tr>\r
+ *    <td><b>Usable Speeds:</b></td>\r
+ *    <td>Low Speed Mode, Full Speed Mode</td>\r
+ *   </tr>\r
+ *  </table>\r
+ *\r
+ *  \section SSec_Description Project Description:\r
+ *\r
+ *  Keyboard demonstration application. This gives a simple reference application\r
+ *  for implementing a USB Keyboard using the basic USB HID drivers in all modern\r
+ *  OSes (i.e. no special drivers required). It is boot protocol compatible, and thus\r
+ *  works under compatible BIOS as if it was a native keyboard (e.g. PS/2).\r
+ *  \r
+ *  On start-up the system will automatically enumerate and function\r
+ *  as a keyboard when the USB connection to a host is present. To use\r
+ *  the keyboard example, manipulate the joystick to send the letters\r
+ *  a, b, c, d and e. See the USB HID documentation for more information\r
+ *  on sending keyboard event and key presses.\r
+ *\r
+ *  \section SSec_Options Project Options\r
+ *  \r
+ *  The following defines can be found in this demo, which can control the demo behaviour when defined, or changed in value.\r
+ *\r
+ *  <table>\r
+ *   <tr>\r
+ *    <td>\r
+ *     None\r
+ *    </td>\r
+ *   </tr>\r
+ *  </table>\r
+ */\r
diff --git a/Demos/Device/ClassDriver/Keyboard/makefile b/Demos/Device/ClassDriver/Keyboard/makefile
new file mode 100644 (file)
index 0000000..98cda2f
--- /dev/null
@@ -0,0 +1,732 @@
+# Hey Emacs, this is a -*- makefile -*-\r
+#----------------------------------------------------------------------------\r
+# WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al.\r
+#  >> Modified for use with the LUFA project. <<\r
+#\r
+# Released to the Public Domain\r
+#\r
+# Additional material for this makefile was written by:\r
+# Peter Fleury\r
+# Tim Henigan\r
+# Colin O'Flynn\r
+# Reiner Patommel\r
+# Markus Pfaff\r
+# Sander Pool\r
+# Frederik Rouleau\r
+# Carlos Lamas\r
+# Dean Camera\r
+# Opendous Inc.\r
+# Denver Gingerich\r
+#\r
+#----------------------------------------------------------------------------\r
+# On command line:\r
+#\r
+# make all = Make software.\r
+#\r
+# make clean = Clean out built project files.\r
+#\r
+# make coff = Convert ELF to AVR COFF.\r
+#\r
+# make extcoff = Convert ELF to AVR Extended COFF.\r
+#\r
+# make program = Download the hex file to the device, using avrdude.\r
+#                Please customize the avrdude settings below first!\r
+#\r
+# make dfu = Download the hex file to the device, using dfu-programmer (must\r
+#            have dfu-programmer installed).\r
+#\r
+# make flip = Download the hex file to the device, using Atmel FLIP (must\r
+#             have Atmel FLIP installed).\r
+#\r
+# make dfu-ee = Download the eeprom file to the device, using dfu-programmer\r
+#               (must have dfu-programmer installed).\r
+#\r
+# make flip-ee = Download the eeprom file to the device, using Atmel FLIP\r
+#                (must have Atmel FLIP installed).\r
+#\r
+# make doxygen = Generate DoxyGen documentation for the project (must have\r
+#                DoxyGen installed)\r
+#\r
+# make debug = Start either simulavr or avarice as specified for debugging, \r
+#              with avr-gdb or avr-insight as the front end for debugging.\r
+#\r
+# make filename.s = Just compile filename.c into the assembler code only.\r
+#\r
+# make filename.i = Create a preprocessed source file for use in submitting\r
+#                   bug reports to the GCC project.\r
+#\r
+# To rebuild project do "make clean" then "make all".\r
+#----------------------------------------------------------------------------\r
+\r
+\r
+# MCU name\r
+MCU = at90usb1287\r
+\r
+\r
+# Target board (see library "Board Types" documentation, USER or blank for projects not requiring\r
+# LUFA board drivers). If USER is selected, put custom board drivers in a directory called \r
+# "Board" inside the application directory.\r
+BOARD  = USBKEY\r
+\r
+\r
+# Processor frequency.\r
+#     This will define a symbol, F_CPU, in all source code files equal to the \r
+#     processor frequency. You can then use this symbol in your source code to \r
+#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done\r
+#     automatically to create a 32-bit value in your source code.\r
+#     Typical values are:\r
+#         F_CPU =  1000000\r
+#         F_CPU =  1843200\r
+#         F_CPU =  2000000\r
+#         F_CPU =  3686400\r
+#         F_CPU =  4000000\r
+#         F_CPU =  7372800\r
+#         F_CPU =  8000000\r
+#         F_CPU = 11059200\r
+#         F_CPU = 14745600\r
+#         F_CPU = 16000000\r
+#         F_CPU = 18432000\r
+#         F_CPU = 20000000\r
+F_CPU = 8000000\r
+\r
+\r
+# Input clock frequency.\r
+#     This will define a symbol, F_CLOCK, in all source code files equal to the \r
+#     input clock frequency (before any prescaling is performed). This value may\r
+#     differ from F_CPU if prescaling is used on the latter, and is required as the\r
+#     raw input clock is fed directly to the PLL sections of the AVR for high speed\r
+#     clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'\r
+#     at the end, this will be done automatically to create a 32-bit value in your\r
+#     source code.\r
+#\r
+#     If no clock division is performed on the input clock inside the AVR (via the\r
+#     CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.\r
+F_CLOCK = 8000000\r
+\r
+\r
+# Output format. (can be srec, ihex, binary)\r
+FORMAT = ihex\r
+\r
+\r
+# Target file name (without extension).\r
+TARGET = Keyboard\r
+\r
+\r
+# Object files directory\r
+#     To put object files in current directory, use a dot (.), do NOT make\r
+#     this an empty or blank macro!\r
+OBJDIR = .\r
+\r
+\r
+# Path to the LUFA library\r
+LUFA_PATH = ../../..\r
+\r
+\r
+# List C source files here. (C dependencies are automatically generated.)\r
+SRC = $(TARGET).c                                                 \\r
+         Descriptors.c                                               \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/DevChapter9.c        \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Endpoint.c           \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Host.c               \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/HostChapter9.c       \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/LowLevel.c           \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Pipe.c               \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/Events.c            \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBInterrupt.c      \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBTask.c           \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/ConfigDescriptor.c  \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/Class/Device/HID.c            \\r
+\r
+\r
+# List C++ source files here. (C dependencies are automatically generated.)\r
+CPPSRC = \r
+\r
+\r
+# List Assembler source files here.\r
+#     Make them always end in a capital .S.  Files ending in a lowercase .s\r
+#     will not be considered source files but generated files (assembler\r
+#     output from the compiler), and will be deleted upon "make clean"!\r
+#     Even though the DOS/Win* filesystem matches both .s and .S the same,\r
+#     it will preserve the spelling of the filenames, and gcc itself does\r
+#     care about how the name is spelled on its command-line.\r
+ASRC =\r
+\r
+\r
+# Optimization level, can be [0, 1, 2, 3, s]. \r
+#     0 = turn off optimization. s = optimize for size.\r
+#     (Note: 3 is not always the best optimization level. See avr-libc FAQ.)\r
+OPT = s\r
+\r
+\r
+# Debugging format.\r
+#     Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs.\r
+#     AVR Studio 4.10 requires dwarf-2.\r
+#     AVR [Extended] COFF format requires stabs, plus an avr-objcopy run.\r
+DEBUG = dwarf-2\r
+\r
+\r
+# List any extra directories to look for include files here.\r
+#     Each directory must be seperated by a space.\r
+#     Use forward slashes for directory separators.\r
+#     For a directory that has spaces, enclose it in quotes.\r
+EXTRAINCDIRS = $(LUFA_PATH)/\r
+\r
+\r
+# Compiler flag to set the C Standard level.\r
+#     c89   = "ANSI" C\r
+#     gnu89 = c89 plus GCC extensions\r
+#     c99   = ISO C99 standard (not yet fully implemented)\r
+#     gnu99 = c99 plus GCC extensions\r
+CSTANDARD = -std=gnu99\r
+\r
+\r
+# Place -D or -U options here for C sources\r
+CDEFS  = -DF_CPU=$(F_CPU)UL -DF_CLOCK=$(F_CLOCK)UL -DBOARD=BOARD_$(BOARD)\r
+CDEFS += -DUSE_NONSTANDARD_DESCRIPTOR_NAMES -DUSB_DEVICE_ONLY\r
+CDEFS += -DFIXED_CONTROL_ENDPOINT_SIZE=8 -DUSE_SINGLE_DEVICE_CONFIGURATION\r
+CDEFS += -DUSE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)"\r
+\r
+# Place -D or -U options here for ASM sources\r
+ADEFS = -DF_CPU=$(F_CPU)\r
+\r
+\r
+# Place -D or -U options here for C++ sources\r
+CPPDEFS = -DF_CPU=$(F_CPU)UL\r
+#CPPDEFS += -D__STDC_LIMIT_MACROS\r
+#CPPDEFS += -D__STDC_CONSTANT_MACROS\r
+\r
+\r
+\r
+#---------------- Compiler Options C ----------------\r
+#  -g*:          generate debugging information\r
+#  -O*:          optimization level\r
+#  -f...:        tuning, see GCC manual and avr-libc documentation\r
+#  -Wall...:     warning level\r
+#  -Wa,...:      tell GCC to pass this to the assembler.\r
+#    -adhlns...: create assembler listing\r
+CFLAGS = -g$(DEBUG)\r
+CFLAGS += $(CDEFS)\r
+CFLAGS += -O$(OPT)\r
+CFLAGS += -funsigned-char\r
+CFLAGS += -funsigned-bitfields\r
+CFLAGS += -ffunction-sections\r
+CFLAGS += -fpack-struct\r
+CFLAGS += -fshort-enums\r
+CFLAGS += -finline-limit=20\r
+CFLAGS += -Wall\r
+CFLAGS += -Wstrict-prototypes\r
+CFLAGS += -Wundef\r
+#CFLAGS += -fno-unit-at-a-time\r
+#CFLAGS += -Wunreachable-code\r
+#CFLAGS += -Wsign-compare\r
+CFLAGS += -Wa,-adhlns=$(<:%.c=$(OBJDIR)/%.lst)\r
+CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))\r
+CFLAGS += $(CSTANDARD)\r
+\r
+\r
+#---------------- Compiler Options C++ ----------------\r
+#  -g*:          generate debugging information\r
+#  -O*:          optimization level\r
+#  -f...:        tuning, see GCC manual and avr-libc documentation\r
+#  -Wall...:     warning level\r
+#  -Wa,...:      tell GCC to pass this to the assembler.\r
+#    -adhlns...: create assembler listing\r
+CPPFLAGS = -g$(DEBUG)\r
+CPPFLAGS += $(CPPDEFS)\r
+CPPFLAGS += -O$(OPT)\r
+CPPFLAGS += -funsigned-char\r
+CPPFLAGS += -funsigned-bitfields\r
+CPPFLAGS += -fpack-struct\r
+CPPFLAGS += -fshort-enums\r
+CPPFLAGS += -fno-exceptions\r
+CPPFLAGS += -Wall\r
+CFLAGS += -Wundef\r
+#CPPFLAGS += -mshort-calls\r
+#CPPFLAGS += -fno-unit-at-a-time\r
+#CPPFLAGS += -Wstrict-prototypes\r
+#CPPFLAGS += -Wunreachable-code\r
+#CPPFLAGS += -Wsign-compare\r
+CPPFLAGS += -Wa,-adhlns=$(<:%.cpp=$(OBJDIR)/%.lst)\r
+CPPFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))\r
+#CPPFLAGS += $(CSTANDARD)\r
+\r
+\r
+#---------------- Assembler Options ----------------\r
+#  -Wa,...:   tell GCC to pass this to the assembler.\r
+#  -adhlns:   create listing\r
+#  -gstabs:   have the assembler create line number information; note that\r
+#             for use in COFF files, additional information about filenames\r
+#             and function names needs to be present in the assembler source\r
+#             files -- see avr-libc docs [FIXME: not yet described there]\r
+#  -listing-cont-lines: Sets the maximum number of continuation lines of hex \r
+#       dump that will be displayed for a given single line of source input.\r
+ASFLAGS = $(ADEFS) -Wa,-adhlns=$(<:%.S=$(OBJDIR)/%.lst),-gstabs,--listing-cont-lines=100\r
+\r
+\r
+#---------------- Library Options ----------------\r
+# Minimalistic printf version\r
+PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min\r
+\r
+# Floating point printf version (requires MATH_LIB = -lm below)\r
+PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt\r
+\r
+# If this is left blank, then it will use the Standard printf version.\r
+PRINTF_LIB = \r
+#PRINTF_LIB = $(PRINTF_LIB_MIN)\r
+#PRINTF_LIB = $(PRINTF_LIB_FLOAT)\r
+\r
+\r
+# Minimalistic scanf version\r
+SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min\r
+\r
+# Floating point + %[ scanf version (requires MATH_LIB = -lm below)\r
+SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt\r
+\r
+# If this is left blank, then it will use the Standard scanf version.\r
+SCANF_LIB = \r
+#SCANF_LIB = $(SCANF_LIB_MIN)\r
+#SCANF_LIB = $(SCANF_LIB_FLOAT)\r
+\r
+\r
+MATH_LIB = -lm\r
+\r
+\r
+# List any extra directories to look for libraries here.\r
+#     Each directory must be seperated by a space.\r
+#     Use forward slashes for directory separators.\r
+#     For a directory that has spaces, enclose it in quotes.\r
+EXTRALIBDIRS = \r
+\r
+\r
+\r
+#---------------- External Memory Options ----------------\r
+\r
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),\r
+# used for variables (.data/.bss) and heap (malloc()).\r
+#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff\r
+\r
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),\r
+# only used for heap (malloc()).\r
+#EXTMEMOPTS = -Wl,--section-start,.data=0x801100,--defsym=__heap_end=0x80ffff\r
+\r
+EXTMEMOPTS =\r
+\r
+\r
+\r
+#---------------- Linker Options ----------------\r
+#  -Wl,...:     tell GCC to pass this to linker.\r
+#    -Map:      create map file\r
+#    --cref:    add cross reference to  map file\r
+LDFLAGS = -Wl,-Map=$(TARGET).map,--cref\r
+LDFLAGS += -Wl,--relax \r
+LDFLAGS += -Wl,--gc-sections\r
+LDFLAGS += $(EXTMEMOPTS)\r
+LDFLAGS += $(patsubst %,-L%,$(EXTRALIBDIRS))\r
+LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)\r
+#LDFLAGS += -T linker_script.x\r
+\r
+\r
+\r
+#---------------- Programming Options (avrdude) ----------------\r
+\r
+# Programming hardware: alf avr910 avrisp bascom bsd \r
+# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500\r
+#\r
+# Type: avrdude -c ?\r
+# to get a full listing.\r
+#\r
+AVRDUDE_PROGRAMMER = jtagmkII\r
+\r
+# com1 = serial port. Use lpt1 to connect to parallel port.\r
+AVRDUDE_PORT = usb\r
+\r
+AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex\r
+#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep\r
+\r
+\r
+# Uncomment the following if you want avrdude's erase cycle counter.\r
+# Note that this counter needs to be initialized first using -Yn,\r
+# see avrdude manual.\r
+#AVRDUDE_ERASE_COUNTER = -y\r
+\r
+# Uncomment the following if you do /not/ wish a verification to be\r
+# performed after programming the device.\r
+#AVRDUDE_NO_VERIFY = -V\r
+\r
+# Increase verbosity level.  Please use this when submitting bug\r
+# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude> \r
+# to submit bug reports.\r
+#AVRDUDE_VERBOSE = -v -v\r
+\r
+AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)\r
+AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY)\r
+AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE)\r
+AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER)\r
+\r
+\r
+\r
+#---------------- Debugging Options ----------------\r
+\r
+# For simulavr only - target MCU frequency.\r
+DEBUG_MFREQ = $(F_CPU)\r
+\r
+# Set the DEBUG_UI to either gdb or insight.\r
+# DEBUG_UI = gdb\r
+DEBUG_UI = insight\r
+\r
+# Set the debugging back-end to either avarice, simulavr.\r
+DEBUG_BACKEND = avarice\r
+#DEBUG_BACKEND = simulavr\r
+\r
+# GDB Init Filename.\r
+GDBINIT_FILE = __avr_gdbinit\r
+\r
+# When using avarice settings for the JTAG\r
+JTAG_DEV = /dev/com1\r
+\r
+# Debugging port used to communicate between GDB / avarice / simulavr.\r
+DEBUG_PORT = 4242\r
+\r
+# Debugging host used to communicate between GDB / avarice / simulavr, normally\r
+#     just set to localhost unless doing some sort of crazy debugging when \r
+#     avarice is running on a different computer.\r
+DEBUG_HOST = localhost\r
+\r
+\r
+\r
+#============================================================================\r
+\r
+\r
+# Define programs and commands.\r
+SHELL = sh\r
+CC = avr-gcc\r
+OBJCOPY = avr-objcopy\r
+OBJDUMP = avr-objdump\r
+SIZE = avr-size\r
+AR = avr-ar rcs\r
+NM = avr-nm\r
+AVRDUDE = avrdude\r
+REMOVE = rm -f\r
+REMOVEDIR = rm -rf\r
+COPY = cp\r
+WINSHELL = cmd\r
+\r
+# Define Messages\r
+# English\r
+MSG_ERRORS_NONE = Errors: none\r
+MSG_BEGIN = -------- begin --------\r
+MSG_END = --------  end  --------\r
+MSG_SIZE_BEFORE = Size before: \r
+MSG_SIZE_AFTER = Size after:\r
+MSG_COFF = Converting to AVR COFF:\r
+MSG_EXTENDED_COFF = Converting to AVR Extended COFF:\r
+MSG_FLASH = Creating load file for Flash:\r
+MSG_EEPROM = Creating load file for EEPROM:\r
+MSG_EXTENDED_LISTING = Creating Extended Listing:\r
+MSG_SYMBOL_TABLE = Creating Symbol Table:\r
+MSG_LINKING = Linking:\r
+MSG_COMPILING = Compiling C:\r
+MSG_COMPILING_CPP = Compiling C++:\r
+MSG_ASSEMBLING = Assembling:\r
+MSG_CLEANING = Cleaning project:\r
+MSG_CREATING_LIBRARY = Creating library:\r
+\r
+\r
+\r
+\r
+# Define all object files.\r
+OBJ = $(SRC:%.c=$(OBJDIR)/%.o) $(CPPSRC:%.cpp=$(OBJDIR)/%.o) $(ASRC:%.S=$(OBJDIR)/%.o) \r
+\r
+# Define all listing files.\r
+LST = $(SRC:%.c=$(OBJDIR)/%.lst) $(CPPSRC:%.cpp=$(OBJDIR)/%.lst) $(ASRC:%.S=$(OBJDIR)/%.lst) \r
+\r
+\r
+# Compiler flags to generate dependency files.\r
+GENDEPFLAGS = -MMD -MP -MF .dep/$(@F).d\r
+\r
+\r
+# Combine all necessary flags and optional flags.\r
+# Add target processor to flags.\r
+ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS)\r
+ALL_CPPFLAGS = -mmcu=$(MCU) -I. -x c++ $(CPPFLAGS) $(GENDEPFLAGS)\r
+ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)\r
+\r
+\r
+\r
+\r
+\r
+# Default target.\r
+all: begin gccversion sizebefore build checkhooks checklibmode checkboard sizeafter end\r
+\r
+# Change the build target to build a HEX file or a library.\r
+build: elf hex eep lss sym\r
+#build: lib\r
+\r
+\r
+elf: $(TARGET).elf\r
+hex: $(TARGET).hex\r
+eep: $(TARGET).eep\r
+lss: $(TARGET).lss\r
+sym: $(TARGET).sym\r
+LIBNAME=lib$(TARGET).a\r
+lib: $(LIBNAME)\r
+\r
+\r
+\r
+# Eye candy.\r
+# AVR Studio 3.x does not check make's exit code but relies on\r
+# the following magic strings to be generated by the compile job.\r
+begin:\r
+       @echo\r
+       @echo $(MSG_BEGIN)\r
+\r
+end:\r
+       @echo $(MSG_END)\r
+       @echo\r
+\r
+\r
+# Display size of file.\r
+HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex\r
+ELFSIZE = $(SIZE) $(MCU_FLAG) $(FORMAT_FLAG) $(TARGET).elf\r
+MCU_FLAG = $(shell $(SIZE) --help | grep -- --mcu > /dev/null && echo --mcu=$(MCU) )\r
+FORMAT_FLAG = $(shell $(SIZE) --help | grep -- --format=.*avr > /dev/null && echo --format=avr )\r
+\r
+sizebefore:\r
+       @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \\r
+       2>/dev/null; echo; fi\r
+\r
+sizeafter:\r
+       @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \\r
+       2>/dev/null; echo; fi\r
+\r
+checkhooks: build\r
+       @echo\r
+       @echo ------- Unhooked LUFA Events -------\r
+       @$(shell) (grep -s '^EVENT_.*LUFA/.*\\.o' $(TARGET).map | \\r
+                  cut -d' ' -f1 | cut -d'_' -f2- | grep ".*") || \\r
+                          echo "(None)"\r
+       @echo ------------------------------------\r
+\r
+checklibmode:\r
+       @echo\r
+       @echo ----------- Library Mode -----------\r
+       @$(shell) ($(CC) $(ALL_CFLAGS) -E -dM - < /dev/null \\r
+                 | grep 'USB_\(DEVICE\|HOST\)_ONLY' | cut -d' ' -f2 | grep ".*") \\r
+                 || echo "No specific mode (both device and host mode allowable)."\r
+       @echo ------------------------------------\r
+\r
+checkboard:\r
+       @echo\r
+       @echo ---------- Selected Board ----------\r
+       @echo Selected board model is $(BOARD).\r
+       @echo ------------------------------------\r
+       \r
+# Display compiler version information.\r
+gccversion : \r
+       @$(CC) --version\r
+\r
+\r
+\r
+# Program the device.  \r
+program: $(TARGET).hex $(TARGET).eep\r
+       $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)\r
+\r
+flip: $(TARGET).hex\r
+       batchisp -hardware usb -device $(MCU) -operation erase f\r
+       batchisp -hardware usb -device $(MCU) -operation loadbuffer $(TARGET).hex program\r
+       batchisp -hardware usb -device $(MCU) -operation start reset 0\r
+\r
+dfu: $(TARGET).hex\r
+       dfu-programmer $(MCU) erase\r
+       dfu-programmer $(MCU) flash --debug 1 $(TARGET).hex\r
+       dfu-programmer $(MCU) reset\r
+\r
+flip-ee: $(TARGET).hex $(TARGET).eep\r
+       copy $(TARGET).eep $(TARGET)eep.hex\r
+       batchisp -hardware usb -device $(MCU) -operation memory EEPROM erase\r
+       batchisp -hardware usb -device $(MCU) -operation memory EEPROM loadbuffer $(TARGET)eep.hex program\r
+       batchisp -hardware usb -device $(MCU) -operation start reset 0\r
+\r
+dfu-ee: $(TARGET).hex $(TARGET).eep\r
+       dfu-programmer $(MCU) flash-eeprom --debug 1 --suppress-bootloader-mem $(TARGET).eep\r
+       dfu-programmer $(MCU) reset\r
+\r
+\r
+# Generate avr-gdb config/init file which does the following:\r
+#     define the reset signal, load the target file, connect to target, and set \r
+#     a breakpoint at main().\r
+gdb-config: \r
+       @$(REMOVE) $(GDBINIT_FILE)\r
+       @echo define reset >> $(GDBINIT_FILE)\r
+       @echo SIGNAL SIGHUP >> $(GDBINIT_FILE)\r
+       @echo end >> $(GDBINIT_FILE)\r
+       @echo file $(TARGET).elf >> $(GDBINIT_FILE)\r
+       @echo target remote $(DEBUG_HOST):$(DEBUG_PORT)  >> $(GDBINIT_FILE)\r
+ifeq ($(DEBUG_BACKEND),simulavr)\r
+       @echo load  >> $(GDBINIT_FILE)\r
+endif\r
+       @echo break main >> $(GDBINIT_FILE)\r
+\r
+debug: gdb-config $(TARGET).elf\r
+ifeq ($(DEBUG_BACKEND), avarice)\r
+       @echo Starting AVaRICE - Press enter when "waiting to connect" message displays.\r
+       @$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \\r
+       $(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT)\r
+       @$(WINSHELL) /c pause\r
+\r
+else\r
+       @$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \\r
+       $(DEBUG_MFREQ) --port $(DEBUG_PORT)\r
+endif\r
+       @$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE)\r
+\r
+\r
+\r
+\r
+# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.\r
+COFFCONVERT = $(OBJCOPY) --debugging\r
+COFFCONVERT += --change-section-address .data-0x800000\r
+COFFCONVERT += --change-section-address .bss-0x800000\r
+COFFCONVERT += --change-section-address .noinit-0x800000\r
+COFFCONVERT += --change-section-address .eeprom-0x810000\r
+\r
+\r
+\r
+coff: $(TARGET).elf\r
+       @echo\r
+       @echo $(MSG_COFF) $(TARGET).cof\r
+       $(COFFCONVERT) -O coff-avr $< $(TARGET).cof\r
+\r
+\r
+extcoff: $(TARGET).elf\r
+       @echo\r
+       @echo $(MSG_EXTENDED_COFF) $(TARGET).cof\r
+       $(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof\r
+\r
+\r
+\r
+# Create final output files (.hex, .eep) from ELF output file.\r
+%.hex: %.elf\r
+       @echo\r
+       @echo $(MSG_FLASH) $@\r
+       $(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@\r
+\r
+%.eep: %.elf\r
+       @echo\r
+       @echo $(MSG_EEPROM) $@\r
+       -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \\r
+       --change-section-lma .eeprom=0 --no-change-warnings -O $(FORMAT) $< $@ || exit 0\r
+\r
+# Create extended listing file from ELF output file.\r
+%.lss: %.elf\r
+       @echo\r
+       @echo $(MSG_EXTENDED_LISTING) $@\r
+       $(OBJDUMP) -h -z -S $< > $@\r
+\r
+# Create a symbol table from ELF output file.\r
+%.sym: %.elf\r
+       @echo\r
+       @echo $(MSG_SYMBOL_TABLE) $@\r
+       $(NM) -n $< > $@\r
+\r
+\r
+\r
+# Create library from object files.\r
+.SECONDARY : $(TARGET).a\r
+.PRECIOUS : $(OBJ)\r
+%.a: $(OBJ)\r
+       @echo\r
+       @echo $(MSG_CREATING_LIBRARY) $@\r
+       $(AR) $@ $(OBJ)\r
+\r
+\r
+# Link: create ELF output file from object files.\r
+.SECONDARY : $(TARGET).elf\r
+.PRECIOUS : $(OBJ)\r
+%.elf: $(OBJ)\r
+       @echo\r
+       @echo $(MSG_LINKING) $@\r
+       $(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)\r
+\r
+\r
+# Compile: create object files from C source files.\r
+$(OBJDIR)/%.o : %.c\r
+       @echo\r
+       @echo $(MSG_COMPILING) $<\r
+       $(CC) -c $(ALL_CFLAGS) $< -o $@ \r
+\r
+\r
+# Compile: create object files from C++ source files.\r
+$(OBJDIR)/%.o : %.cpp\r
+       @echo\r
+       @echo $(MSG_COMPILING_CPP) $<\r
+       $(CC) -c $(ALL_CPPFLAGS) $< -o $@ \r
+\r
+\r
+# Compile: create assembler files from C source files.\r
+%.s : %.c\r
+       $(CC) -S $(ALL_CFLAGS) $< -o $@\r
+\r
+\r
+# Compile: create assembler files from C++ source files.\r
+%.s : %.cpp\r
+       $(CC) -S $(ALL_CPPFLAGS) $< -o $@\r
+\r
+\r
+# Assemble: create object files from assembler source files.\r
+$(OBJDIR)/%.o : %.S\r
+       @echo\r
+       @echo $(MSG_ASSEMBLING) $<\r
+       $(CC) -c $(ALL_ASFLAGS) $< -o $@\r
+\r
+\r
+# Create preprocessed source for use in sending a bug report.\r
+%.i : %.c\r
+       $(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ \r
+       \r
+\r
+# Target: clean project.\r
+clean: begin clean_list clean_binary end\r
+\r
+clean_binary:\r
+       $(REMOVE) $(TARGET).hex\r
+       \r
+clean_list:\r
+       @echo $(MSG_CLEANING)\r
+       $(REMOVE) $(TARGET).eep\r
+       $(REMOVE) $(TARGET)eep.hex\r
+       $(REMOVE) $(TARGET).cof\r
+       $(REMOVE) $(TARGET).elf\r
+       $(REMOVE) $(TARGET).map\r
+       $(REMOVE) $(TARGET).sym\r
+       $(REMOVE) $(TARGET).lss\r
+       $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.o)\r
+       $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.lst)\r
+       $(REMOVE) $(SRC:.c=.s)\r
+       $(REMOVE) $(SRC:.c=.d)\r
+       $(REMOVE) $(SRC:.c=.i)\r
+       $(REMOVEDIR) .dep\r
+\r
+\r
+doxygen:\r
+       @echo Generating Project Documentation...\r
+       @doxygen Doxygen.conf\r
+       @echo Documentation Generation Complete.\r
+\r
+clean_doxygen:\r
+       rm -rf Documentation\r
+\r
+# Create object files directory\r
+$(shell mkdir $(OBJDIR) 2>/dev/null)\r
+\r
+\r
+# Include the dependency files.\r
+-include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)\r
+\r
+\r
+# Listing of phony targets.\r
+.PHONY : all checkhooks checklibmode checkboard   \\r
+begin finish end sizebefore sizeafter gccversion  \\r
+build elf hex eep lss sym coff extcoff clean      \\r
+clean_list clean_binary program debug gdb-config  \\r
+doxygen dfu flip flip-ee dfu-ee
\ No newline at end of file
diff --git a/Demos/Device/ClassDriver/KeyboardMouse/Descriptors.c b/Demos/Device/ClassDriver/KeyboardMouse/Descriptors.c
new file mode 100644 (file)
index 0000000..c9a778f
--- /dev/null
@@ -0,0 +1,344 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+  Copyright 2009  Denver Gingerich (denver [at] ossguy [dot] com)\r
+  \r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  USB Device Descriptors, for library use when in USB device mode. Descriptors are special \r
+ *  computer-readable structures which the host requests upon device enumeration, to determine\r
+ *  the device's capabilities and functions.  \r
+ */\r
+\r
+#include "Descriptors.h"\r
+\r
+/** HID class report descriptor. This is a special descriptor constructed with values from the\r
+ *  USBIF HID class specification to describe the reports and capabilities of the HID device. This\r
+ *  descriptor is parsed by the host and its contents used to determine what data (and in what encoding)\r
+ *  the device will send, and what it may be sent back from the host. Refer to the HID specification for\r
+ *  more details on HID report descriptors.\r
+ *\r
+ *  This descriptor describes the mouse HID interface's report structure.\r
+ */\r
+USB_Descriptor_HIDReport_Datatype_t PROGMEM MouseReport[] =\r
+{\r
+       0x05, 0x01,          /* Usage Page (Generic Desktop)                    */\r
+       0x09, 0x02,          /* Usage (Mouse)                                   */\r
+       0xA1, 0x01,          /* Collection (Application)                        */\r
+       0x09, 0x01,          /*   Usage (Pointer)                               */\r
+       0xA1, 0x00,          /*   Collection (Physical)                         */\r
+       0x95, 0x03,          /*     Report Count (3)                            */\r
+       0x75, 0x01,          /*     Report Size (1)                             */\r
+       0x05, 0x09,          /*     Usage Page (Button)                         */\r
+       0x19, 0x01,          /*     Usage Minimum (Button 1)                    */\r
+       0x29, 0x03,          /*     Usage Maximum (Button 3)                    */\r
+       0x15, 0x00,          /*     Logical Minimum (0)                         */\r
+       0x25, 0x01,          /*     Logical Maximum (1)                         */\r
+       0x81, 0x02,          /*     Input (Data, Variable, Absolute)            */\r
+       0x95, 0x01,          /*     Report Count (1)                            */\r
+       0x75, 0x05,          /*     Report Size (5)                             */\r
+       0x81, 0x01,          /*     Input (Constant)                            */\r
+       0x75, 0x08,          /*     Report Size (8)                             */\r
+       0x95, 0x02,          /*     Report Count (2)                            */\r
+       0x05, 0x01,          /*     Usage Page (Generic Desktop Control)        */\r
+       0x09, 0x30,          /*     Usage X                                     */\r
+       0x09, 0x31,          /*     Usage Y                                     */\r
+       0x15, 0x81,          /*     Logical Minimum (-127)                      */\r
+       0x25, 0x7F,          /*     Logical Maximum (127)                       */\r
+       0x81, 0x06,          /*     Input (Data, Variable, Relative)            */\r
+       0xC0,                /*   End Collection                                */\r
+       0xC0,                /* End Collection                                  */\r
+};\r
+\r
+/** Same as the MouseReport structure, but defines the keyboard HID interface's report structure. */\r
+USB_Descriptor_HIDReport_Datatype_t PROGMEM KeyboardReport[] =\r
+{\r
+       0x05, 0x01,          /* Usage Page (Generic Desktop)                    */\r
+       0x09, 0x06,          /* Usage (Keyboard)                                */\r
+       0xa1, 0x01,          /* Collection (Application)                        */\r
+       0x75, 0x01,          /*   Report Size (1)                               */\r
+       0x95, 0x08,          /*   Report Count (8)                              */\r
+       0x05, 0x07,          /*   Usage Page (Key Codes)                        */\r
+       0x19, 0xe0,          /*   Usage Minimum (Keyboard LeftControl)          */\r
+       0x29, 0xe7,          /*   Usage Maximum (Keyboard Right GUI)            */\r
+       0x15, 0x00,          /*   Logical Minimum (0)                           */\r
+       0x25, 0x01,          /*   Logical Maximum (1)                           */\r
+       0x81, 0x02,          /*   Input (Data, Variable, Absolute)              */\r
+       0x95, 0x01,          /*   Report Count (1)                              */\r
+       0x75, 0x08,          /*   Report Size (8)                               */\r
+       0x81, 0x03,          /*   Input (Const, Variable, Absolute)             */\r
+       0x95, 0x05,          /*   Report Count (5)                              */\r
+       0x75, 0x01,          /*   Report Size (1)                               */\r
+       0x05, 0x08,          /*   Usage Page (LEDs)                             */\r
+       0x19, 0x01,          /*   Usage Minimum (Num Lock)                      */\r
+       0x29, 0x05,          /*   Usage Maximum (Kana)                          */\r
+       0x91, 0x02,          /*   Output (Data, Variable, Absolute)             */\r
+       0x95, 0x01,          /*   Report Count (1)                              */\r
+       0x75, 0x03,          /*   Report Size (3)                               */\r
+       0x91, 0x03,          /*   Output (Const, Variable, Absolute)            */\r
+       0x95, 0x06,          /*   Report Count (6)                              */\r
+       0x75, 0x08,          /*   Report Size (8)                               */\r
+       0x15, 0x00,          /*   Logical Minimum (0)                           */\r
+       0x25, 0x65,          /*   Logical Maximum (101)                         */\r
+       0x05, 0x07,          /*   Usage Page (Keyboard)                         */\r
+       0x19, 0x00,          /*   Usage Minimum (Reserved (no event indicated)) */\r
+       0x29, 0x65,          /*   Usage Maximum (Keyboard Application)          */\r
+       0x81, 0x00,          /*   Input (Data, Array, Absolute)                 */\r
+       0xC0                 /* End Collection                                  */\r
+};\r
+\r
+/** Device descriptor structure. This descriptor, located in FLASH memory, describes the overall\r
+ *  device characteristics, including the supported USB version, control endpoint size and the\r
+ *  number of device configurations. The descriptor is read out by the USB host when the enumeration\r
+ *  process begins.\r
+ */\r
+USB_Descriptor_Device_t PROGMEM DeviceDescriptor =\r
+{\r
+       .Header                 = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device},\r
+               \r
+       .USBSpecification       = VERSION_BCD(01.10),\r
+       .Class                  = 0x00,\r
+       .SubClass               = 0x00,\r
+       .Protocol               = 0x00,\r
+                               \r
+       .Endpoint0Size          = FIXED_CONTROL_ENDPOINT_SIZE,\r
+               \r
+       .VendorID               = 0x03EB,\r
+       .ProductID              = 0x204D,\r
+       .ReleaseNumber          = 0x0000,\r
+               \r
+       .ManufacturerStrIndex   = 0x01,\r
+       .ProductStrIndex        = 0x02,\r
+       .SerialNumStrIndex      = NO_DESCRIPTOR,\r
+               \r
+       .NumberOfConfigurations = 1\r
+};\r
+\r
+/** Configuration descriptor structure. This descriptor, located in FLASH memory, describes the usage\r
+ *  of the device in one of its supported configurations, including information about any device interfaces\r
+ *  and endpoints. The descriptor is read out by the USB host during the enumeration process when selecting\r
+ *  a configuration so that the host may correctly communicate with the USB device.\r
+ */\r
+USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =\r
+{\r
+       .Config = \r
+               {\r
+                       .Header                 = {.Size = sizeof(USB_Descriptor_Configuration_Header_t), .Type = DTYPE_Configuration},\r
+\r
+                       .TotalConfigurationSize = sizeof(USB_Descriptor_Configuration_t),\r
+                       .TotalInterfaces        = 2,\r
+                               \r
+                       .ConfigurationNumber    = 1,\r
+                       .ConfigurationStrIndex  = NO_DESCRIPTOR,\r
+                               \r
+                       .ConfigAttributes       = (USB_CONFIG_ATTR_BUSPOWERED | USB_CONFIG_ATTR_SELFPOWERED),\r
+                       \r
+                       .MaxPowerConsumption    = USB_CONFIG_POWER_MA(100)\r
+               },\r
+               \r
+       .KeyboardInterface = \r
+               {\r
+                       .Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},\r
+\r
+                       .InterfaceNumber        = 0x00,\r
+                       .AlternateSetting       = 0x00,\r
+                       \r
+                       .TotalEndpoints         = 1,\r
+                               \r
+                       .Class                  = 0x03,\r
+                       .SubClass               = 0x01,\r
+                       .Protocol               = 0x01,\r
+                               \r
+                       .InterfaceStrIndex      = NO_DESCRIPTOR\r
+               },\r
+\r
+       .KeyboardHID = \r
+               {  \r
+                       .Header                 = {.Size = sizeof(USB_Descriptor_HID_t), .Type = DTYPE_HID},\r
+                       \r
+                       .HIDSpec                = VERSION_BCD(01.11),\r
+                       .CountryCode            = 0x00,\r
+                       .TotalReportDescriptors = 1,\r
+                       .HIDReportType          = DTYPE_Report,\r
+                       .HIDReportLength        = sizeof(KeyboardReport)\r
+               },\r
+               \r
+       .KeyboardInEndpoint = \r
+               {\r
+                       .Header                 = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},\r
+\r
+                       .EndpointAddress        = (ENDPOINT_DESCRIPTOR_DIR_IN | KEYBOARD_IN_EPNUM),\r
+                       .Attributes             = EP_TYPE_INTERRUPT,\r
+                       .EndpointSize           = HID_EPSIZE,\r
+                       .PollingIntervalMS      = 0x02\r
+               },\r
+\r
+       .MouseInterface = \r
+               {\r
+                       .Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},\r
+\r
+                       .InterfaceNumber        = 0x01,\r
+                       .AlternateSetting       = 0x00,\r
+                       \r
+                       .TotalEndpoints         = 1,\r
+                               \r
+                       .Class                  = 0x03,\r
+                       .SubClass               = 0x01,\r
+                       .Protocol               = 0x02,\r
+                               \r
+                       .InterfaceStrIndex      = NO_DESCRIPTOR\r
+               },\r
+\r
+       .MouseHID = \r
+               {  \r
+                       .Header                 = {.Size = sizeof(USB_Descriptor_HID_t), .Type = DTYPE_HID},\r
+                       \r
+                       .HIDSpec                = VERSION_BCD(01.11),\r
+                       .CountryCode            = 0x00,\r
+                       .TotalReportDescriptors = 1,\r
+                       .HIDReportType          = DTYPE_Report,\r
+                       .HIDReportLength        = sizeof(MouseReport)\r
+               },\r
+               \r
+       .MouseInEndpoint = \r
+               {\r
+                       .Header                 = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},\r
+\r
+                       .EndpointAddress        = (ENDPOINT_DESCRIPTOR_DIR_IN | MOUSE_IN_EPNUM),\r
+                       .Attributes             = EP_TYPE_INTERRUPT,\r
+                       .EndpointSize           = HID_EPSIZE,\r
+                       .PollingIntervalMS      = 0x02\r
+               }\r
+};\r
+\r
+/** Language descriptor structure. This descriptor, located in FLASH memory, is returned when the host requests\r
+ *  the string descriptor with index 0 (the first index). It is actually an array of 16-bit integers, which indicate\r
+ *  via the language ID table available at USB.org what languages the device supports for its string descriptors.\r
+ */\r
+USB_Descriptor_String_t PROGMEM LanguageString =\r
+{\r
+       .Header                 = {.Size = USB_STRING_LEN(1), .Type = DTYPE_String},\r
+               \r
+       .UnicodeString          = {LANGUAGE_ID_ENG}\r
+};\r
+\r
+/** Manufacturer descriptor string. This is a Unicode string containing the manufacturer's details in human readable\r
+ *  form, and is read out upon request by the host when the appropriate string ID is requested, listed in the Device\r
+ *  Descriptor.\r
+ */\r
+USB_Descriptor_String_t PROGMEM ManufacturerString =\r
+{\r
+       .Header                 = {.Size = USB_STRING_LEN(11), .Type = DTYPE_String},\r
+               \r
+       .UnicodeString          = L"Dean Camera"\r
+};\r
+\r
+/** Product descriptor string. This is a Unicode string containing the product's details in human readable form,\r
+ *  and is read out upon request by the host when the appropriate string ID is requested, listed in the Device\r
+ *  Descriptor.\r
+ */\r
+USB_Descriptor_String_t PROGMEM ProductString =\r
+{\r
+       .Header                 = {.Size = USB_STRING_LEN(28), .Type = DTYPE_String},\r
+               \r
+       .UnicodeString          = L"LUFA Mouse and Keyboard Demo"\r
+};\r
+\r
+/** This function is called by the library when in device mode, and must be overridden (see library "USB Descriptors"\r
+ *  documentation) by the application code so that the address and size of a requested descriptor can be given\r
+ *  to the USB library. When the device receives a Get Descriptor request on the control endpoint, this function\r
+ *  is called so that the descriptor details can be passed back and the appropriate descriptor sent back to the\r
+ *  USB host.\r
+ */\r
+uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
+{\r
+       const uint8_t  DescriptorType   = (wValue >> 8);\r
+       const uint8_t  DescriptorNumber = (wValue & 0xFF);\r
+\r
+       void*    Address = NULL;\r
+       uint16_t Size    = NO_DESCRIPTOR;\r
+\r
+       switch (DescriptorType)\r
+       {\r
+               case DTYPE_Device: \r
+                       Address = (void*)&DeviceDescriptor;\r
+                       Size    = sizeof(USB_Descriptor_Device_t);\r
+                       break;\r
+               case DTYPE_Configuration: \r
+                       Address = (void*)&ConfigurationDescriptor;\r
+                       Size    = sizeof(USB_Descriptor_Configuration_t);\r
+                       break;\r
+               case DTYPE_String: \r
+                       switch (DescriptorNumber)\r
+                       {\r
+                               case 0x00: \r
+                                       Address = (void*)&LanguageString;\r
+                                       Size    = pgm_read_byte(&LanguageString.Header.Size);\r
+                                       break;\r
+                               case 0x01: \r
+                                       Address = (void*)&ManufacturerString;\r
+                                       Size    = pgm_read_byte(&ManufacturerString.Header.Size);\r
+                                       break;\r
+                               case 0x02: \r
+                                       Address = (void*)&ProductString;\r
+                                       Size    = pgm_read_byte(&ProductString.Header.Size);\r
+                                       break;\r
+                       }\r
+                       \r
+                       break;\r
+               case DTYPE_HID: \r
+                       if (!(wIndex))\r
+                       {\r
+                               Address = (void*)&ConfigurationDescriptor.KeyboardHID;\r
+                               Size    = sizeof(USB_Descriptor_HID_t);\r
+                       }\r
+                       else\r
+                       {\r
+                               Address = (void*)&ConfigurationDescriptor.MouseHID;\r
+                               Size    = sizeof(USB_Descriptor_HID_t);                 \r
+                       }\r
+                       break;\r
+               case DTYPE_Report: \r
+                       if (!(wIndex))\r
+                       {\r
+                               Address = (void*)&KeyboardReport;\r
+                               Size    = sizeof(KeyboardReport);\r
+                       }\r
+                       else\r
+                       {                       \r
+                               Address = (void*)&MouseReport;\r
+                               Size    = sizeof(MouseReport);\r
+                       }\r
+                       \r
+                       break;\r
+       }\r
+       \r
+       *DescriptorAddress = Address;\r
+       return Size;\r
+}\r
diff --git a/Demos/Device/ClassDriver/KeyboardMouse/Descriptors.h b/Demos/Device/ClassDriver/KeyboardMouse/Descriptors.h
new file mode 100644 (file)
index 0000000..1dcad08
--- /dev/null
@@ -0,0 +1,76 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+  Copyright 2009  Denver Gingerich (denver [at] ossguy [dot] com)\r
+  \r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  Header file for Descriptors.c.\r
+ */\r
\r
+#ifndef _DESCRIPTORS_H_\r
+#define _DESCRIPTORS_H_\r
+\r
+       /* Includes: */\r
+               #include <avr/pgmspace.h>\r
+\r
+               #include <LUFA/Drivers/USB/USB.h>\r
+               #include <LUFA/Drivers/USB/Class/Device/HID.h>\r
+\r
+       /* Type Defines: */\r
+               /** Type define for the device configuration descriptor structure. This must be defined in the\r
+                *  application code, as the configuration descriptor contains several sub-descriptors which\r
+                *  vary between devices, and which describe the device's usage to the host.\r
+                */\r
+               typedef struct\r
+               {\r
+                       USB_Descriptor_Configuration_Header_t Config;\r
+                       USB_Descriptor_Interface_t            KeyboardInterface;\r
+                       USB_Descriptor_HID_t                  KeyboardHID;\r
+               USB_Descriptor_Endpoint_t             KeyboardInEndpoint;\r
+                       USB_Descriptor_Interface_t            MouseInterface;\r
+                       USB_Descriptor_HID_t                  MouseHID;\r
+               USB_Descriptor_Endpoint_t             MouseInEndpoint;\r
+               } USB_Descriptor_Configuration_t;\r
+                                       \r
+       /* Macros: */\r
+               /** Endpoint number of the Keyboard HID reporting IN endpoint. */\r
+               #define KEYBOARD_IN_EPNUM         1\r
+\r
+               /** Endpoint number of the Mouse HID reporting IN endpoint. */\r
+               #define MOUSE_IN_EPNUM            3\r
+\r
+               /** Size in bytes of each of the HID reporting IN and OUT endpoints. */\r
+               #define HID_EPSIZE                8\r
+\r
+       /* Function Prototypes: */\r
+               uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
+                                                                                       ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);\r
+\r
+#endif\r
diff --git a/Demos/Device/ClassDriver/KeyboardMouse/Doxygen.conf b/Demos/Device/ClassDriver/KeyboardMouse/Doxygen.conf
new file mode 100644 (file)
index 0000000..1291685
--- /dev/null
@@ -0,0 +1,1485 @@
+# Doxyfile 1.5.7.1\r
+\r
+# This file describes the settings to be used by the documentation system\r
+# doxygen (www.doxygen.org) for a project\r
+#\r
+# All text after a hash (#) is considered a comment and will be ignored\r
+# The format is:\r
+#       TAG = value [value, ...]\r
+# For lists items can also be appended using:\r
+#       TAG += value [value, ...]\r
+# Values that contain spaces should be placed between quotes (" ")\r
+\r
+#---------------------------------------------------------------------------\r
+# Project related configuration options\r
+#---------------------------------------------------------------------------\r
+\r
+# This tag specifies the encoding used for all characters in the config file \r
+# that follow. The default is UTF-8 which is also the encoding used for all \r
+# text before the first occurrence of this tag. Doxygen uses libiconv (or the \r
+# iconv built into libc) for the transcoding. See \r
+# http://www.gnu.org/software/libiconv for the list of possible encodings.\r
+\r
+DOXYFILE_ENCODING      = UTF-8\r
+\r
+# The PROJECT_NAME tag is a single word (or a sequence of words surrounded \r
+# by quotes) that should identify the project.\r
+\r
+PROJECT_NAME           = "LUFA Library - Combined Keyboard/Mouse Device Demo"\r
+\r
+# The PROJECT_NUMBER tag can be used to enter a project or revision number. \r
+# This could be handy for archiving the generated documentation or \r
+# if some version control system is used.\r
+\r
+PROJECT_NUMBER         = 0.0.0\r
+\r
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) \r
+# base path where the generated documentation will be put. \r
+# If a relative path is entered, it will be relative to the location \r
+# where doxygen was started. If left blank the current directory will be used.\r
+\r
+OUTPUT_DIRECTORY       = ./Documentation/\r
+\r
+# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create \r
+# 4096 sub-directories (in 2 levels) under the output directory of each output \r
+# format and will distribute the generated files over these directories. \r
+# Enabling this option can be useful when feeding doxygen a huge amount of \r
+# source files, where putting all generated files in the same directory would \r
+# otherwise cause performance problems for the file system.\r
+\r
+CREATE_SUBDIRS         = YES\r
+\r
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all \r
+# documentation generated by doxygen is written. Doxygen will use this \r
+# information to generate all constant output in the proper language. \r
+# The default language is English, other supported languages are: \r
+# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, \r
+# Croatian, Czech, Danish, Dutch, Farsi, Finnish, French, German, Greek, \r
+# Hungarian, Italian, Japanese, Japanese-en (Japanese with English messages), \r
+# Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, Polish, \r
+# Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, Slovene, \r
+# Spanish, Swedish, and Ukrainian.\r
+\r
+OUTPUT_LANGUAGE        = English\r
+\r
+# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will \r
+# include brief member descriptions after the members that are listed in \r
+# the file and class documentation (similar to JavaDoc). \r
+# Set to NO to disable this.\r
+\r
+BRIEF_MEMBER_DESC      = YES\r
+\r
+# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend \r
+# the brief description of a member or function before the detailed description. \r
+# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the \r
+# brief descriptions will be completely suppressed.\r
+\r
+REPEAT_BRIEF           = YES\r
+\r
+# This tag implements a quasi-intelligent brief description abbreviator \r
+# that is used to form the text in various listings. Each string \r
+# in this list, if found as the leading text of the brief description, will be \r
+# stripped from the text and the result after processing the whole list, is \r
+# used as the annotated text. Otherwise, the brief description is used as-is. \r
+# If left blank, the following values are used ("$name" is automatically \r
+# replaced with the name of the entity): "The $name class" "The $name widget" \r
+# "The $name file" "is" "provides" "specifies" "contains" \r
+# "represents" "a" "an" "the"\r
+\r
+ABBREVIATE_BRIEF       = "The $name class" \\r
+                         "The $name widget" \\r
+                         "The $name file" \\r
+                         is \\r
+                         provides \\r
+                         specifies \\r
+                         contains \\r
+                         represents \\r
+                         a \\r
+                         an \\r
+                         the\r
+\r
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then \r
+# Doxygen will generate a detailed section even if there is only a brief \r
+# description.\r
+\r
+ALWAYS_DETAILED_SEC    = NO\r
+\r
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all \r
+# inherited members of a class in the documentation of that class as if those \r
+# members were ordinary class members. Constructors, destructors and assignment \r
+# operators of the base classes will not be shown.\r
+\r
+INLINE_INHERITED_MEMB  = NO\r
+\r
+# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full \r
+# path before files name in the file list and in the header files. If set \r
+# to NO the shortest path that makes the file name unique will be used.\r
+\r
+FULL_PATH_NAMES        = YES\r
+\r
+# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag \r
+# can be used to strip a user-defined part of the path. Stripping is \r
+# only done if one of the specified strings matches the left-hand part of \r
+# the path. The tag can be used to show relative paths in the file list. \r
+# If left blank the directory from which doxygen is run is used as the \r
+# path to strip.\r
+\r
+STRIP_FROM_PATH        = \r
+\r
+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of \r
+# the path mentioned in the documentation of a class, which tells \r
+# the reader which header file to include in order to use a class. \r
+# If left blank only the name of the header file containing the class \r
+# definition is used. Otherwise one should specify the include paths that \r
+# are normally passed to the compiler using the -I flag.\r
+\r
+STRIP_FROM_INC_PATH    = \r
+\r
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter \r
+# (but less readable) file names. This can be useful is your file systems \r
+# doesn't support long names like on DOS, Mac, or CD-ROM.\r
+\r
+SHORT_NAMES            = YES\r
+\r
+# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen \r
+# will interpret the first line (until the first dot) of a JavaDoc-style \r
+# comment as the brief description. If set to NO, the JavaDoc \r
+# comments will behave just like regular Qt-style comments \r
+# (thus requiring an explicit @brief command for a brief description.)\r
+\r
+JAVADOC_AUTOBRIEF      = NO\r
+\r
+# If the QT_AUTOBRIEF tag is set to YES then Doxygen will \r
+# interpret the first line (until the first dot) of a Qt-style \r
+# comment as the brief description. If set to NO, the comments \r
+# will behave just like regular Qt-style comments (thus requiring \r
+# an explicit \brief command for a brief description.)\r
+\r
+QT_AUTOBRIEF           = NO\r
+\r
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen \r
+# treat a multi-line C++ special comment block (i.e. a block of //! or /// \r
+# comments) as a brief description. This used to be the default behaviour. \r
+# The new default is to treat a multi-line C++ comment block as a detailed \r
+# description. Set this tag to YES if you prefer the old behaviour instead.\r
+\r
+MULTILINE_CPP_IS_BRIEF = NO\r
+\r
+# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented \r
+# member inherits the documentation from any documented member that it \r
+# re-implements.\r
+\r
+INHERIT_DOCS           = YES\r
+\r
+# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce \r
+# a new page for each member. If set to NO, the documentation of a member will \r
+# be part of the file/class/namespace that contains it.\r
+\r
+SEPARATE_MEMBER_PAGES  = NO\r
+\r
+# The TAB_SIZE tag can be used to set the number of spaces in a tab. \r
+# Doxygen uses this value to replace tabs by spaces in code fragments.\r
+\r
+TAB_SIZE               = 4\r
+\r
+# This tag can be used to specify a number of aliases that acts \r
+# as commands in the documentation. An alias has the form "name=value". \r
+# For example adding "sideeffect=\par Side Effects:\n" will allow you to \r
+# put the command \sideeffect (or @sideeffect) in the documentation, which \r
+# will result in a user-defined paragraph with heading "Side Effects:". \r
+# You can put \n's in the value part of an alias to insert newlines.\r
+\r
+ALIASES                = \r
+\r
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C \r
+# sources only. Doxygen will then generate output that is more tailored for C. \r
+# For instance, some of the names that are used will be different. The list \r
+# of all members will be omitted, etc.\r
+\r
+OPTIMIZE_OUTPUT_FOR_C  = YES\r
+\r
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java \r
+# sources only. Doxygen will then generate output that is more tailored for \r
+# Java. For instance, namespaces will be presented as packages, qualified \r
+# scopes will look different, etc.\r
+\r
+OPTIMIZE_OUTPUT_JAVA   = NO\r
+\r
+# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran \r
+# sources only. Doxygen will then generate output that is more tailored for \r
+# Fortran.\r
+\r
+OPTIMIZE_FOR_FORTRAN   = NO\r
+\r
+# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL \r
+# sources. Doxygen will then generate output that is tailored for \r
+# VHDL.\r
+\r
+OPTIMIZE_OUTPUT_VHDL   = NO\r
+\r
+# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want \r
+# to include (a tag file for) the STL sources as input, then you should \r
+# set this tag to YES in order to let doxygen match functions declarations and \r
+# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. \r
+# func(std::string) {}). This also make the inheritance and collaboration \r
+# diagrams that involve STL classes more complete and accurate.\r
+\r
+BUILTIN_STL_SUPPORT    = NO\r
+\r
+# If you use Microsoft's C++/CLI language, you should set this option to YES to\r
+# enable parsing support.\r
+\r
+CPP_CLI_SUPPORT        = NO\r
+\r
+# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. \r
+# Doxygen will parse them like normal C++ but will assume all classes use public \r
+# instead of private inheritance when no explicit protection keyword is present.\r
+\r
+SIP_SUPPORT            = NO\r
+\r
+# For Microsoft's IDL there are propget and propput attributes to indicate getter \r
+# and setter methods for a property. Setting this option to YES (the default) \r
+# will make doxygen to replace the get and set methods by a property in the \r
+# documentation. This will only work if the methods are indeed getting or \r
+# setting a simple type. If this is not the case, or you want to show the \r
+# methods anyway, you should set this option to NO.\r
+\r
+IDL_PROPERTY_SUPPORT   = YES\r
+\r
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC \r
+# tag is set to YES, then doxygen will reuse the documentation of the first \r
+# member in the group (if any) for the other members of the group. By default \r
+# all members of a group must be documented explicitly.\r
+\r
+DISTRIBUTE_GROUP_DOC   = NO\r
+\r
+# Set the SUBGROUPING tag to YES (the default) to allow class member groups of \r
+# the same type (for instance a group of public functions) to be put as a \r
+# subgroup of that type (e.g. under the Public Functions section). Set it to \r
+# NO to prevent subgrouping. Alternatively, this can be done per class using \r
+# the \nosubgrouping command.\r
+\r
+SUBGROUPING            = YES\r
+\r
+# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum \r
+# is documented as struct, union, or enum with the name of the typedef. So \r
+# typedef struct TypeS {} TypeT, will appear in the documentation as a struct \r
+# with name TypeT. When disabled the typedef will appear as a member of a file, \r
+# namespace, or class. And the struct will be named TypeS. This can typically \r
+# be useful for C code in case the coding convention dictates that all compound \r
+# types are typedef'ed and only the typedef is referenced, never the tag name.\r
+\r
+TYPEDEF_HIDES_STRUCT   = NO\r
+\r
+# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to \r
+# determine which symbols to keep in memory and which to flush to disk.\r
+# When the cache is full, less often used symbols will be written to disk.\r
+# For small to medium size projects (<1000 input files) the default value is \r
+# probably good enough. For larger projects a too small cache size can cause \r
+# doxygen to be busy swapping symbols to and from disk most of the time \r
+# causing a significant performance penality. \r
+# If the system has enough physical memory increasing the cache will improve the \r
+# performance by keeping more symbols in memory. Note that the value works on \r
+# a logarithmic scale so increasing the size by one will rougly double the \r
+# memory usage. The cache size is given by this formula: \r
+# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, \r
+# corresponding to a cache size of 2^16 = 65536 symbols\r
+\r
+SYMBOL_CACHE_SIZE      = 0\r
+\r
+#---------------------------------------------------------------------------\r
+# Build related configuration options\r
+#---------------------------------------------------------------------------\r
+\r
+# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in \r
+# documentation are documented, even if no documentation was available. \r
+# Private class members and static file members will be hidden unless \r
+# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES\r
+\r
+EXTRACT_ALL            = YES\r
+\r
+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class \r
+# will be included in the documentation.\r
+\r
+EXTRACT_PRIVATE        = YES\r
+\r
+# If the EXTRACT_STATIC tag is set to YES all static members of a file \r
+# will be included in the documentation.\r
+\r
+EXTRACT_STATIC         = YES\r
+\r
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) \r
+# defined locally in source files will be included in the documentation. \r
+# If set to NO only classes defined in header files are included.\r
+\r
+EXTRACT_LOCAL_CLASSES  = YES\r
+\r
+# This flag is only useful for Objective-C code. When set to YES local \r
+# methods, which are defined in the implementation section but not in \r
+# the interface are included in the documentation. \r
+# If set to NO (the default) only methods in the interface are included.\r
+\r
+EXTRACT_LOCAL_METHODS  = NO\r
+\r
+# If this flag is set to YES, the members of anonymous namespaces will be \r
+# extracted and appear in the documentation as a namespace called \r
+# 'anonymous_namespace{file}', where file will be replaced with the base \r
+# name of the file that contains the anonymous namespace. By default \r
+# anonymous namespace are hidden.\r
+\r
+EXTRACT_ANON_NSPACES   = NO\r
+\r
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all \r
+# undocumented members of documented classes, files or namespaces. \r
+# If set to NO (the default) these members will be included in the \r
+# various overviews, but no documentation section is generated. \r
+# This option has no effect if EXTRACT_ALL is enabled.\r
+\r
+HIDE_UNDOC_MEMBERS     = NO\r
+\r
+# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all \r
+# undocumented classes that are normally visible in the class hierarchy. \r
+# If set to NO (the default) these classes will be included in the various \r
+# overviews. This option has no effect if EXTRACT_ALL is enabled.\r
+\r
+HIDE_UNDOC_CLASSES     = NO\r
+\r
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all \r
+# friend (class|struct|union) declarations. \r
+# If set to NO (the default) these declarations will be included in the \r
+# documentation.\r
+\r
+HIDE_FRIEND_COMPOUNDS  = NO\r
+\r
+# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any \r
+# documentation blocks found inside the body of a function. \r
+# If set to NO (the default) these blocks will be appended to the \r
+# function's detailed documentation block.\r
+\r
+HIDE_IN_BODY_DOCS      = NO\r
+\r
+# The INTERNAL_DOCS tag determines if documentation \r
+# that is typed after a \internal command is included. If the tag is set \r
+# to NO (the default) then the documentation will be excluded. \r
+# Set it to YES to include the internal documentation.\r
+\r
+INTERNAL_DOCS          = NO\r
+\r
+# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate \r
+# file names in lower-case letters. If set to YES upper-case letters are also \r
+# allowed. This is useful if you have classes or files whose names only differ \r
+# in case and if your file system supports case sensitive file names. Windows \r
+# and Mac users are advised to set this option to NO.\r
+\r
+CASE_SENSE_NAMES       = NO\r
+\r
+# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen \r
+# will show members with their full class and namespace scopes in the \r
+# documentation. If set to YES the scope will be hidden.\r
+\r
+HIDE_SCOPE_NAMES       = NO\r
+\r
+# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen \r
+# will put a list of the files that are included by a file in the documentation \r
+# of that file.\r
+\r
+SHOW_INCLUDE_FILES     = YES\r
+\r
+# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] \r
+# is inserted in the documentation for inline members.\r
+\r
+INLINE_INFO            = YES\r
+\r
+# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen \r
+# will sort the (detailed) documentation of file and class members \r
+# alphabetically by member name. If set to NO the members will appear in \r
+# declaration order.\r
+\r
+SORT_MEMBER_DOCS       = YES\r
+\r
+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the \r
+# brief documentation of file, namespace and class members alphabetically \r
+# by member name. If set to NO (the default) the members will appear in \r
+# declaration order.\r
+\r
+SORT_BRIEF_DOCS        = NO\r
+\r
+# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the \r
+# hierarchy of group names into alphabetical order. If set to NO (the default) \r
+# the group names will appear in their defined order.\r
+\r
+SORT_GROUP_NAMES       = NO\r
+\r
+# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be \r
+# sorted by fully-qualified names, including namespaces. If set to \r
+# NO (the default), the class list will be sorted only by class name, \r
+# not including the namespace part. \r
+# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.\r
+# Note: This option applies only to the class list, not to the \r
+# alphabetical list.\r
+\r
+SORT_BY_SCOPE_NAME     = NO\r
+\r
+# The GENERATE_TODOLIST tag can be used to enable (YES) or \r
+# disable (NO) the todo list. This list is created by putting \todo \r
+# commands in the documentation.\r
+\r
+GENERATE_TODOLIST      = NO\r
+\r
+# The GENERATE_TESTLIST tag can be used to enable (YES) or \r
+# disable (NO) the test list. This list is created by putting \test \r
+# commands in the documentation.\r
+\r
+GENERATE_TESTLIST      = NO\r
+\r
+# The GENERATE_BUGLIST tag can be used to enable (YES) or \r
+# disable (NO) the bug list. This list is created by putting \bug \r
+# commands in the documentation.\r
+\r
+GENERATE_BUGLIST       = NO\r
+\r
+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or \r
+# disable (NO) the deprecated list. This list is created by putting \r
+# \deprecated commands in the documentation.\r
+\r
+GENERATE_DEPRECATEDLIST= YES\r
+\r
+# The ENABLED_SECTIONS tag can be used to enable conditional \r
+# documentation sections, marked by \if sectionname ... \endif.\r
+\r
+ENABLED_SECTIONS       = \r
+\r
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines \r
+# the initial value of a variable or define consists of for it to appear in \r
+# the documentation. If the initializer consists of more lines than specified \r
+# here it will be hidden. Use a value of 0 to hide initializers completely. \r
+# The appearance of the initializer of individual variables and defines in the \r
+# documentation can be controlled using \showinitializer or \hideinitializer \r
+# command in the documentation regardless of this setting.\r
+\r
+MAX_INITIALIZER_LINES  = 30\r
+\r
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated \r
+# at the bottom of the documentation of classes and structs. If set to YES the \r
+# list will mention the files that were used to generate the documentation.\r
+\r
+SHOW_USED_FILES        = YES\r
+\r
+# If the sources in your project are distributed over multiple directories \r
+# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy \r
+# in the documentation. The default is NO.\r
+\r
+SHOW_DIRECTORIES       = YES\r
+\r
+# Set the SHOW_FILES tag to NO to disable the generation of the Files page.\r
+# This will remove the Files entry from the Quick Index and from the \r
+# Folder Tree View (if specified). The default is YES.\r
+\r
+SHOW_FILES             = YES\r
+\r
+# Set the SHOW_NAMESPACES tag to NO to disable the generation of the \r
+# Namespaces page.  This will remove the Namespaces entry from the Quick Index\r
+# and from the Folder Tree View (if specified). The default is YES.\r
+\r
+SHOW_NAMESPACES        = YES\r
+\r
+# The FILE_VERSION_FILTER tag can be used to specify a program or script that \r
+# doxygen should invoke to get the current version for each file (typically from \r
+# the version control system). Doxygen will invoke the program by executing (via \r
+# popen()) the command <command> <input-file>, where <command> is the value of \r
+# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file \r
+# provided by doxygen. Whatever the program writes to standard output \r
+# is used as the file version. See the manual for examples.\r
+\r
+FILE_VERSION_FILTER    = \r
+\r
+# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by \r
+# doxygen. The layout file controls the global structure of the generated output files \r
+# in an output format independent way. The create the layout file that represents \r
+# doxygen's defaults, run doxygen with the -l option. You can optionally specify a \r
+# file name after the option, if omitted DoxygenLayout.xml will be used as the name \r
+# of the layout file.\r
+\r
+LAYOUT_FILE            = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to warning and progress messages\r
+#---------------------------------------------------------------------------\r
+\r
+# The QUIET tag can be used to turn on/off the messages that are generated \r
+# by doxygen. Possible values are YES and NO. If left blank NO is used.\r
+\r
+QUIET                  = YES\r
+\r
+# The WARNINGS tag can be used to turn on/off the warning messages that are \r
+# generated by doxygen. Possible values are YES and NO. If left blank \r
+# NO is used.\r
+\r
+WARNINGS               = YES\r
+\r
+# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings \r
+# for undocumented members. If EXTRACT_ALL is set to YES then this flag will \r
+# automatically be disabled.\r
+\r
+WARN_IF_UNDOCUMENTED   = YES\r
+\r
+# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for \r
+# potential errors in the documentation, such as not documenting some \r
+# parameters in a documented function, or documenting parameters that \r
+# don't exist or using markup commands wrongly.\r
+\r
+WARN_IF_DOC_ERROR      = YES\r
+\r
+# This WARN_NO_PARAMDOC option can be abled to get warnings for \r
+# functions that are documented, but have no documentation for their parameters \r
+# or return value. If set to NO (the default) doxygen will only warn about \r
+# wrong or incomplete parameter documentation, but not about the absence of \r
+# documentation.\r
+\r
+WARN_NO_PARAMDOC       = YES\r
+\r
+# The WARN_FORMAT tag determines the format of the warning messages that \r
+# doxygen can produce. The string should contain the $file, $line, and $text \r
+# tags, which will be replaced by the file and line number from which the \r
+# warning originated and the warning text. Optionally the format may contain \r
+# $version, which will be replaced by the version of the file (if it could \r
+# be obtained via FILE_VERSION_FILTER)\r
+\r
+WARN_FORMAT            = "$file:$line: $text"\r
+\r
+# The WARN_LOGFILE tag can be used to specify a file to which warning \r
+# and error messages should be written. If left blank the output is written \r
+# to stderr.\r
+\r
+WARN_LOGFILE           = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the input files\r
+#---------------------------------------------------------------------------\r
+\r
+# The INPUT tag can be used to specify the files and/or directories that contain \r
+# documented source files. You may enter file names like "myfile.cpp" or \r
+# directories like "/usr/src/myproject". Separate the files or directories \r
+# with spaces.\r
+\r
+INPUT                  = ./\r
+\r
+# This tag can be used to specify the character encoding of the source files \r
+# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is \r
+# also the default input encoding. Doxygen uses libiconv (or the iconv built \r
+# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for \r
+# the list of possible encodings.\r
+\r
+INPUT_ENCODING         = UTF-8\r
+\r
+# If the value of the INPUT tag contains directories, you can use the \r
+# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \r
+# and *.h) to filter out the source-files in the directories. If left \r
+# blank the following patterns are tested: \r
+# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx \r
+# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90\r
+\r
+FILE_PATTERNS          = *.h \\r
+                         *.c \\r
+                                                *.txt\r
+\r
+# The RECURSIVE tag can be used to turn specify whether or not subdirectories \r
+# should be searched for input files as well. Possible values are YES and NO. \r
+# If left blank NO is used.\r
+\r
+RECURSIVE              = YES\r
+\r
+# The EXCLUDE tag can be used to specify files and/or directories that should \r
+# excluded from the INPUT source files. This way you can easily exclude a \r
+# subdirectory from a directory tree whose root is specified with the INPUT tag.\r
+\r
+EXCLUDE                = \r
+\r
+# The EXCLUDE_SYMLINKS tag can be used select whether or not files or \r
+# directories that are symbolic links (a Unix filesystem feature) are excluded \r
+# from the input.\r
+\r
+EXCLUDE_SYMLINKS       = NO\r
+\r
+# If the value of the INPUT tag contains directories, you can use the \r
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude \r
+# certain files from those directories. Note that the wildcards are matched \r
+# against the file with absolute path, so to exclude all test directories \r
+# for example use the pattern */test/*\r
+\r
+EXCLUDE_PATTERNS       = */LowLevel/USBMode.h\r
+\r
+# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names \r
+# (namespaces, classes, functions, etc.) that should be excluded from the \r
+# output. The symbol name can be a fully qualified name, a word, or if the \r
+# wildcard * is used, a substring. Examples: ANamespace, AClass, \r
+# AClass::ANamespace, ANamespace::*Test\r
+\r
+EXCLUDE_SYMBOLS        = __*\r
+\r
+# The EXAMPLE_PATH tag can be used to specify one or more files or \r
+# directories that contain example code fragments that are included (see \r
+# the \include command).\r
+\r
+EXAMPLE_PATH           = \r
+\r
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the \r
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \r
+# and *.h) to filter out the source-files in the directories. If left \r
+# blank all files are included.\r
+\r
+EXAMPLE_PATTERNS       = *\r
+\r
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be \r
+# searched for input files to be used with the \include or \dontinclude \r
+# commands irrespective of the value of the RECURSIVE tag. \r
+# Possible values are YES and NO. If left blank NO is used.\r
+\r
+EXAMPLE_RECURSIVE      = NO\r
+\r
+# The IMAGE_PATH tag can be used to specify one or more files or \r
+# directories that contain image that are included in the documentation (see \r
+# the \image command).\r
+\r
+IMAGE_PATH             = \r
+\r
+# The INPUT_FILTER tag can be used to specify a program that doxygen should \r
+# invoke to filter for each input file. Doxygen will invoke the filter program \r
+# by executing (via popen()) the command <filter> <input-file>, where <filter> \r
+# is the value of the INPUT_FILTER tag, and <input-file> is the name of an \r
+# input file. Doxygen will then use the output that the filter program writes \r
+# to standard output.  If FILTER_PATTERNS is specified, this tag will be \r
+# ignored.\r
+\r
+INPUT_FILTER           = \r
+\r
+# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern \r
+# basis.  Doxygen will compare the file name with each pattern and apply the \r
+# filter if there is a match.  The filters are a list of the form: \r
+# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further \r
+# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER \r
+# is applied to all files.\r
+\r
+FILTER_PATTERNS        = \r
+\r
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using \r
+# INPUT_FILTER) will be used to filter the input files when producing source \r
+# files to browse (i.e. when SOURCE_BROWSER is set to YES).\r
+\r
+FILTER_SOURCE_FILES    = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to source browsing\r
+#---------------------------------------------------------------------------\r
+\r
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will \r
+# be generated. Documented entities will be cross-referenced with these sources. \r
+# Note: To get rid of all source code in the generated output, make sure also \r
+# VERBATIM_HEADERS is set to NO.\r
+\r
+SOURCE_BROWSER         = NO\r
+\r
+# Setting the INLINE_SOURCES tag to YES will include the body \r
+# of functions and classes directly in the documentation.\r
+\r
+INLINE_SOURCES         = NO\r
+\r
+# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct \r
+# doxygen to hide any special comment blocks from generated source code \r
+# fragments. Normal C and C++ comments will always remain visible.\r
+\r
+STRIP_CODE_COMMENTS    = YES\r
+\r
+# If the REFERENCED_BY_RELATION tag is set to YES \r
+# then for each documented function all documented \r
+# functions referencing it will be listed.\r
+\r
+REFERENCED_BY_RELATION = NO\r
+\r
+# If the REFERENCES_RELATION tag is set to YES \r
+# then for each documented function all documented entities \r
+# called/used by that function will be listed.\r
+\r
+REFERENCES_RELATION    = NO\r
+\r
+# If the REFERENCES_LINK_SOURCE tag is set to YES (the default)\r
+# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from\r
+# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will\r
+# link to the source code.  Otherwise they will link to the documentstion.\r
+\r
+REFERENCES_LINK_SOURCE = NO\r
+\r
+# If the USE_HTAGS tag is set to YES then the references to source code \r
+# will point to the HTML generated by the htags(1) tool instead of doxygen \r
+# built-in source browser. The htags tool is part of GNU's global source \r
+# tagging system (see http://www.gnu.org/software/global/global.html). You \r
+# will need version 4.8.6 or higher.\r
+\r
+USE_HTAGS              = NO\r
+\r
+# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen \r
+# will generate a verbatim copy of the header file for each class for \r
+# which an include is specified. Set to NO to disable this.\r
+\r
+VERBATIM_HEADERS       = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the alphabetical class index\r
+#---------------------------------------------------------------------------\r
+\r
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index \r
+# of all compounds will be generated. Enable this if the project \r
+# contains a lot of classes, structs, unions or interfaces.\r
+\r
+ALPHABETICAL_INDEX     = YES\r
+\r
+# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then \r
+# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns \r
+# in which this list will be split (can be a number in the range [1..20])\r
+\r
+COLS_IN_ALPHA_INDEX    = 5\r
+\r
+# In case all classes in a project start with a common prefix, all \r
+# classes will be put under the same header in the alphabetical index. \r
+# The IGNORE_PREFIX tag can be used to specify one or more prefixes that \r
+# should be ignored while generating the index headers.\r
+\r
+IGNORE_PREFIX          = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the HTML output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_HTML tag is set to YES (the default) Doxygen will \r
+# generate HTML output.\r
+\r
+GENERATE_HTML          = YES\r
+\r
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `html' will be used as the default path.\r
+\r
+HTML_OUTPUT            = html\r
+\r
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for \r
+# each generated HTML page (for example: .htm,.php,.asp). If it is left blank \r
+# doxygen will generate files with .html extension.\r
+\r
+HTML_FILE_EXTENSION    = .html\r
+\r
+# The HTML_HEADER tag can be used to specify a personal HTML header for \r
+# each generated HTML page. If it is left blank doxygen will generate a \r
+# standard header.\r
+\r
+HTML_HEADER            = \r
+\r
+# The HTML_FOOTER tag can be used to specify a personal HTML footer for \r
+# each generated HTML page. If it is left blank doxygen will generate a \r
+# standard footer.\r
+\r
+HTML_FOOTER            = \r
+\r
+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading \r
+# style sheet that is used by each HTML page. It can be used to \r
+# fine-tune the look of the HTML output. If the tag is left blank doxygen \r
+# will generate a default style sheet. Note that doxygen will try to copy \r
+# the style sheet file to the HTML output directory, so don't put your own \r
+# stylesheet in the HTML output directory as well, or it will be erased!\r
+\r
+HTML_STYLESHEET        = \r
+\r
+# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, \r
+# files or namespaces will be aligned in HTML using tables. If set to \r
+# NO a bullet list will be used.\r
+\r
+HTML_ALIGN_MEMBERS     = YES\r
+\r
+# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML \r
+# documentation will contain sections that can be hidden and shown after the \r
+# page has loaded. For this to work a browser that supports \r
+# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox \r
+# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari).\r
+\r
+HTML_DYNAMIC_SECTIONS  = YES\r
+\r
+# If the GENERATE_DOCSET tag is set to YES, additional index files \r
+# will be generated that can be used as input for Apple's Xcode 3 \r
+# integrated development environment, introduced with OSX 10.5 (Leopard). \r
+# To create a documentation set, doxygen will generate a Makefile in the \r
+# HTML output directory. Running make will produce the docset in that \r
+# directory and running "make install" will install the docset in \r
+# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find \r
+# it at startup. \r
+# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information.\r
+\r
+GENERATE_DOCSET        = NO\r
+\r
+# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the \r
+# feed. A documentation feed provides an umbrella under which multiple \r
+# documentation sets from a single provider (such as a company or product suite) \r
+# can be grouped.\r
+\r
+DOCSET_FEEDNAME        = "Doxygen generated docs"\r
+\r
+# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that \r
+# should uniquely identify the documentation set bundle. This should be a \r
+# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen \r
+# will append .docset to the name.\r
+\r
+DOCSET_BUNDLE_ID       = org.doxygen.Project\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, additional index files \r
+# will be generated that can be used as input for tools like the \r
+# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) \r
+# of the generated HTML documentation.\r
+\r
+GENERATE_HTMLHELP      = NO\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can \r
+# be used to specify the file name of the resulting .chm file. You \r
+# can add a path in front of the file if the result should not be \r
+# written to the html output directory.\r
+\r
+CHM_FILE               = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can \r
+# be used to specify the location (absolute path including file name) of \r
+# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run \r
+# the HTML help compiler on the generated index.hhp.\r
+\r
+HHC_LOCATION           = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag \r
+# controls if a separate .chi index file is generated (YES) or that \r
+# it should be included in the master .chm file (NO).\r
+\r
+GENERATE_CHI           = NO\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING\r
+# is used to encode HtmlHelp index (hhk), content (hhc) and project file\r
+# content.\r
+\r
+CHM_INDEX_ENCODING     = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag \r
+# controls whether a binary table of contents is generated (YES) or a \r
+# normal table of contents (NO) in the .chm file.\r
+\r
+BINARY_TOC             = NO\r
+\r
+# The TOC_EXPAND flag can be set to YES to add extra items for group members \r
+# to the contents of the HTML help documentation and to the tree view.\r
+\r
+TOC_EXPAND             = YES\r
+\r
+# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER \r
+# are set, an additional index file will be generated that can be used as input for \r
+# Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated \r
+# HTML documentation.\r
+\r
+GENERATE_QHP           = NO\r
+\r
+# If the QHG_LOCATION tag is specified, the QCH_FILE tag can \r
+# be used to specify the file name of the resulting .qch file. \r
+# The path specified is relative to the HTML output folder.\r
+\r
+QCH_FILE               = \r
+\r
+# The QHP_NAMESPACE tag specifies the namespace to use when generating \r
+# Qt Help Project output. For more information please see \r
+# <a href="http://doc.trolltech.com/qthelpproject.html#namespace">Qt Help Project / Namespace</a>.\r
+\r
+QHP_NAMESPACE          = org.doxygen.Project\r
+\r
+# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating \r
+# Qt Help Project output. For more information please see \r
+# <a href="http://doc.trolltech.com/qthelpproject.html#virtual-folders">Qt Help Project / Virtual Folders</a>.\r
+\r
+QHP_VIRTUAL_FOLDER     = doc\r
+\r
+# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can \r
+# be used to specify the location of Qt's qhelpgenerator. \r
+# If non-empty doxygen will try to run qhelpgenerator on the generated \r
+# .qhp file .\r
+\r
+QHG_LOCATION           = \r
+\r
+# The DISABLE_INDEX tag can be used to turn on/off the condensed index at \r
+# top of each HTML page. The value NO (the default) enables the index and \r
+# the value YES disables it.\r
+\r
+DISABLE_INDEX          = NO\r
+\r
+# This tag can be used to set the number of enum values (range [1..20]) \r
+# that doxygen will group on one line in the generated HTML documentation.\r
+\r
+ENUM_VALUES_PER_LINE   = 1\r
+\r
+# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index\r
+# structure should be generated to display hierarchical information.\r
+# If the tag value is set to FRAME, a side panel will be generated\r
+# containing a tree-like index structure (just like the one that \r
+# is generated for HTML Help). For this to work a browser that supports \r
+# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, \r
+# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are \r
+# probably better off using the HTML help feature. Other possible values \r
+# for this tag are: HIERARCHIES, which will generate the Groups, Directories,\r
+# and Class Hierarchy pages using a tree view instead of an ordered list;\r
+# ALL, which combines the behavior of FRAME and HIERARCHIES; and NONE, which\r
+# disables this behavior completely. For backwards compatibility with previous\r
+# releases of Doxygen, the values YES and NO are equivalent to FRAME and NONE\r
+# respectively.\r
+\r
+GENERATE_TREEVIEW      = YES\r
+\r
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be \r
+# used to set the initial width (in pixels) of the frame in which the tree \r
+# is shown.\r
+\r
+TREEVIEW_WIDTH         = 250\r
+\r
+# Use this tag to change the font size of Latex formulas included \r
+# as images in the HTML documentation. The default is 10. Note that \r
+# when you change the font size after a successful doxygen run you need \r
+# to manually remove any form_*.png images from the HTML output directory \r
+# to force them to be regenerated.\r
+\r
+FORMULA_FONTSIZE       = 10\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the LaTeX output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will \r
+# generate Latex output.\r
+\r
+GENERATE_LATEX         = NO\r
+\r
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `latex' will be used as the default path.\r
+\r
+LATEX_OUTPUT           = latex\r
+\r
+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be \r
+# invoked. If left blank `latex' will be used as the default command name.\r
+\r
+LATEX_CMD_NAME         = latex\r
+\r
+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to \r
+# generate index for LaTeX. If left blank `makeindex' will be used as the \r
+# default command name.\r
+\r
+MAKEINDEX_CMD_NAME     = makeindex\r
+\r
+# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact \r
+# LaTeX documents. This may be useful for small projects and may help to \r
+# save some trees in general.\r
+\r
+COMPACT_LATEX          = NO\r
+\r
+# The PAPER_TYPE tag can be used to set the paper type that is used \r
+# by the printer. Possible values are: a4, a4wide, letter, legal and \r
+# executive. If left blank a4wide will be used.\r
+\r
+PAPER_TYPE             = a4wide\r
+\r
+# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX \r
+# packages that should be included in the LaTeX output.\r
+\r
+EXTRA_PACKAGES         = \r
+\r
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for \r
+# the generated latex document. The header should contain everything until \r
+# the first chapter. If it is left blank doxygen will generate a \r
+# standard header. Notice: only use this tag if you know what you are doing!\r
+\r
+LATEX_HEADER           = \r
+\r
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated \r
+# is prepared for conversion to pdf (using ps2pdf). The pdf file will \r
+# contain links (just like the HTML output) instead of page references \r
+# This makes the output suitable for online browsing using a pdf viewer.\r
+\r
+PDF_HYPERLINKS         = YES\r
+\r
+# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of \r
+# plain latex in the generated Makefile. Set this option to YES to get a \r
+# higher quality PDF documentation.\r
+\r
+USE_PDFLATEX           = YES\r
+\r
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. \r
+# command to the generated LaTeX files. This will instruct LaTeX to keep \r
+# running if errors occur, instead of asking the user for help. \r
+# This option is also used when generating formulas in HTML.\r
+\r
+LATEX_BATCHMODE        = NO\r
+\r
+# If LATEX_HIDE_INDICES is set to YES then doxygen will not \r
+# include the index chapters (such as File Index, Compound Index, etc.) \r
+# in the output.\r
+\r
+LATEX_HIDE_INDICES     = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the RTF output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output \r
+# The RTF output is optimized for Word 97 and may not look very pretty with \r
+# other RTF readers or editors.\r
+\r
+GENERATE_RTF           = NO\r
+\r
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `rtf' will be used as the default path.\r
+\r
+RTF_OUTPUT             = rtf\r
+\r
+# If the COMPACT_RTF tag is set to YES Doxygen generates more compact \r
+# RTF documents. This may be useful for small projects and may help to \r
+# save some trees in general.\r
+\r
+COMPACT_RTF            = NO\r
+\r
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated \r
+# will contain hyperlink fields. The RTF file will \r
+# contain links (just like the HTML output) instead of page references. \r
+# This makes the output suitable for online browsing using WORD or other \r
+# programs which support those fields. \r
+# Note: wordpad (write) and others do not support links.\r
+\r
+RTF_HYPERLINKS         = NO\r
+\r
+# Load stylesheet definitions from file. Syntax is similar to doxygen's \r
+# config file, i.e. a series of assignments. You only have to provide \r
+# replacements, missing definitions are set to their default value.\r
+\r
+RTF_STYLESHEET_FILE    = \r
+\r
+# Set optional variables used in the generation of an rtf document. \r
+# Syntax is similar to doxygen's config file.\r
+\r
+RTF_EXTENSIONS_FILE    = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the man page output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_MAN tag is set to YES (the default) Doxygen will \r
+# generate man pages\r
+\r
+GENERATE_MAN           = NO\r
+\r
+# The MAN_OUTPUT tag is used to specify where the man pages will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `man' will be used as the default path.\r
+\r
+MAN_OUTPUT             = man\r
+\r
+# The MAN_EXTENSION tag determines the extension that is added to \r
+# the generated man pages (default is the subroutine's section .3)\r
+\r
+MAN_EXTENSION          = .3\r
+\r
+# If the MAN_LINKS tag is set to YES and Doxygen generates man output, \r
+# then it will generate one additional man file for each entity \r
+# documented in the real man page(s). These additional files \r
+# only source the real man page, but without them the man command \r
+# would be unable to find the correct page. The default is NO.\r
+\r
+MAN_LINKS              = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the XML output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_XML tag is set to YES Doxygen will \r
+# generate an XML file that captures the structure of \r
+# the code including all documentation.\r
+\r
+GENERATE_XML           = NO\r
+\r
+# The XML_OUTPUT tag is used to specify where the XML pages will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `xml' will be used as the default path.\r
+\r
+XML_OUTPUT             = xml\r
+\r
+# The XML_SCHEMA tag can be used to specify an XML schema, \r
+# which can be used by a validating XML parser to check the \r
+# syntax of the XML files.\r
+\r
+XML_SCHEMA             = \r
+\r
+# The XML_DTD tag can be used to specify an XML DTD, \r
+# which can be used by a validating XML parser to check the \r
+# syntax of the XML files.\r
+\r
+XML_DTD                = \r
+\r
+# If the XML_PROGRAMLISTING tag is set to YES Doxygen will \r
+# dump the program listings (including syntax highlighting \r
+# and cross-referencing information) to the XML output. Note that \r
+# enabling this will significantly increase the size of the XML output.\r
+\r
+XML_PROGRAMLISTING     = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options for the AutoGen Definitions output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will \r
+# generate an AutoGen Definitions (see autogen.sf.net) file \r
+# that captures the structure of the code including all \r
+# documentation. Note that this feature is still experimental \r
+# and incomplete at the moment.\r
+\r
+GENERATE_AUTOGEN_DEF   = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the Perl module output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_PERLMOD tag is set to YES Doxygen will \r
+# generate a Perl module file that captures the structure of \r
+# the code including all documentation. Note that this \r
+# feature is still experimental and incomplete at the \r
+# moment.\r
+\r
+GENERATE_PERLMOD       = NO\r
+\r
+# If the PERLMOD_LATEX tag is set to YES Doxygen will generate \r
+# the necessary Makefile rules, Perl scripts and LaTeX code to be able \r
+# to generate PDF and DVI output from the Perl module output.\r
+\r
+PERLMOD_LATEX          = NO\r
+\r
+# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be \r
+# nicely formatted so it can be parsed by a human reader.  This is useful \r
+# if you want to understand what is going on.  On the other hand, if this \r
+# tag is set to NO the size of the Perl module output will be much smaller \r
+# and Perl will parse it just the same.\r
+\r
+PERLMOD_PRETTY         = YES\r
+\r
+# The names of the make variables in the generated doxyrules.make file \r
+# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. \r
+# This is useful so different doxyrules.make files included by the same \r
+# Makefile don't overwrite each other's variables.\r
+\r
+PERLMOD_MAKEVAR_PREFIX = \r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration options related to the preprocessor   \r
+#---------------------------------------------------------------------------\r
+\r
+# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will \r
+# evaluate all C-preprocessor directives found in the sources and include \r
+# files.\r
+\r
+ENABLE_PREPROCESSING   = YES\r
+\r
+# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro \r
+# names in the source code. If set to NO (the default) only conditional \r
+# compilation will be performed. Macro expansion can be done in a controlled \r
+# way by setting EXPAND_ONLY_PREDEF to YES.\r
+\r
+MACRO_EXPANSION        = YES\r
+\r
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES \r
+# then the macro expansion is limited to the macros specified with the \r
+# PREDEFINED and EXPAND_AS_DEFINED tags.\r
+\r
+EXPAND_ONLY_PREDEF     = YES\r
+\r
+# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files \r
+# in the INCLUDE_PATH (see below) will be search if a #include is found.\r
+\r
+SEARCH_INCLUDES        = YES\r
+\r
+# The INCLUDE_PATH tag can be used to specify one or more directories that \r
+# contain include files that are not input files but should be processed by \r
+# the preprocessor.\r
+\r
+INCLUDE_PATH           = \r
+\r
+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard \r
+# patterns (like *.h and *.hpp) to filter out the header-files in the \r
+# directories. If left blank, the patterns specified with FILE_PATTERNS will \r
+# be used.\r
+\r
+INCLUDE_FILE_PATTERNS  = \r
+\r
+# The PREDEFINED tag can be used to specify one or more macro names that \r
+# are defined before the preprocessor is started (similar to the -D option of \r
+# gcc). The argument of the tag is a list of macros of the form: name \r
+# or name=definition (no spaces). If the definition and the = are \r
+# omitted =1 is assumed. To prevent a macro definition from being \r
+# undefined via #undef or recursively expanded use the := operator \r
+# instead of the = operator.\r
+\r
+PREDEFINED             = __DOXYGEN__\r
+\r
+# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then \r
+# this tag can be used to specify a list of macro names that should be expanded. \r
+# The macro definition that is found in the sources will be used. \r
+# Use the PREDEFINED tag if you want to use a different macro definition.\r
+\r
+EXPAND_AS_DEFINED      = BUTTLOADTAG\r
+\r
+# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then \r
+# doxygen's preprocessor will remove all function-like macros that are alone \r
+# on a line, have an all uppercase name, and do not end with a semicolon. Such \r
+# function macros are typically used for boiler-plate code, and will confuse \r
+# the parser if not removed.\r
+\r
+SKIP_FUNCTION_MACROS   = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration::additions related to external references   \r
+#---------------------------------------------------------------------------\r
+\r
+# The TAGFILES option can be used to specify one or more tagfiles. \r
+# Optionally an initial location of the external documentation \r
+# can be added for each tagfile. The format of a tag file without \r
+# this location is as follows: \r
+#   TAGFILES = file1 file2 ... \r
+# Adding location for the tag files is done as follows: \r
+#   TAGFILES = file1=loc1 "file2 = loc2" ... \r
+# where "loc1" and "loc2" can be relative or absolute paths or \r
+# URLs. If a location is present for each tag, the installdox tool \r
+# does not have to be run to correct the links.\r
+# Note that each tag file must have a unique name\r
+# (where the name does NOT include the path)\r
+# If a tag file is not located in the directory in which doxygen \r
+# is run, you must also specify the path to the tagfile here.\r
+\r
+TAGFILES               = \r
+\r
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create \r
+# a tag file that is based on the input files it reads.\r
+\r
+GENERATE_TAGFILE       = \r
+\r
+# If the ALLEXTERNALS tag is set to YES all external classes will be listed \r
+# in the class index. If set to NO only the inherited external classes \r
+# will be listed.\r
+\r
+ALLEXTERNALS           = NO\r
+\r
+# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed \r
+# in the modules index. If set to NO, only the current project's groups will \r
+# be listed.\r
+\r
+EXTERNAL_GROUPS        = YES\r
+\r
+# The PERL_PATH should be the absolute path and name of the perl script \r
+# interpreter (i.e. the result of `which perl').\r
+\r
+PERL_PATH              = /usr/bin/perl\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration options related to the dot tool   \r
+#---------------------------------------------------------------------------\r
+\r
+# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will \r
+# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base \r
+# or super classes. Setting the tag to NO turns the diagrams off. Note that \r
+# this option is superseded by the HAVE_DOT option below. This is only a \r
+# fallback. It is recommended to install and use dot, since it yields more \r
+# powerful graphs.\r
+\r
+CLASS_DIAGRAMS         = NO\r
+\r
+# You can define message sequence charts within doxygen comments using the \msc \r
+# command. Doxygen will then run the mscgen tool (see \r
+# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the \r
+# documentation. The MSCGEN_PATH tag allows you to specify the directory where \r
+# the mscgen tool resides. If left empty the tool is assumed to be found in the \r
+# default search path.\r
+\r
+MSCGEN_PATH            = \r
+\r
+# If set to YES, the inheritance and collaboration graphs will hide \r
+# inheritance and usage relations if the target is undocumented \r
+# or is not a class.\r
+\r
+HIDE_UNDOC_RELATIONS   = YES\r
+\r
+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is \r
+# available from the path. This tool is part of Graphviz, a graph visualization \r
+# toolkit from AT&T and Lucent Bell Labs. The other options in this section \r
+# have no effect if this option is set to NO (the default)\r
+\r
+HAVE_DOT               = NO\r
+\r
+# By default doxygen will write a font called FreeSans.ttf to the output \r
+# directory and reference it in all dot files that doxygen generates. This \r
+# font does not include all possible unicode characters however, so when you need \r
+# these (or just want a differently looking font) you can specify the font name \r
+# using DOT_FONTNAME. You need need to make sure dot is able to find the font, \r
+# which can be done by putting it in a standard location or by setting the \r
+# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory \r
+# containing the font.\r
+\r
+DOT_FONTNAME           = FreeSans\r
+\r
+# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. \r
+# The default size is 10pt.\r
+\r
+DOT_FONTSIZE           = 10\r
+\r
+# By default doxygen will tell dot to use the output directory to look for the \r
+# FreeSans.ttf font (which doxygen will put there itself). If you specify a \r
+# different font using DOT_FONTNAME you can set the path where dot \r
+# can find it using this tag.\r
+\r
+DOT_FONTPATH           = \r
+\r
+# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for each documented class showing the direct and \r
+# indirect inheritance relations. Setting this tag to YES will force the \r
+# the CLASS_DIAGRAMS tag to NO.\r
+\r
+CLASS_GRAPH            = NO\r
+\r
+# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for each documented class showing the direct and \r
+# indirect implementation dependencies (inheritance, containment, and \r
+# class references variables) of the class with other documented classes.\r
+\r
+COLLABORATION_GRAPH    = NO\r
+\r
+# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for groups, showing the direct groups dependencies\r
+\r
+GROUP_GRAPHS           = NO\r
+\r
+# If the UML_LOOK tag is set to YES doxygen will generate inheritance and \r
+# collaboration diagrams in a style similar to the OMG's Unified Modeling \r
+# Language.\r
+\r
+UML_LOOK               = NO\r
+\r
+# If set to YES, the inheritance and collaboration graphs will show the \r
+# relations between templates and their instances.\r
+\r
+TEMPLATE_RELATIONS     = NO\r
+\r
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT \r
+# tags are set to YES then doxygen will generate a graph for each documented \r
+# file showing the direct and indirect include dependencies of the file with \r
+# other documented files.\r
+\r
+INCLUDE_GRAPH          = NO\r
+\r
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and \r
+# HAVE_DOT tags are set to YES then doxygen will generate a graph for each \r
+# documented header file showing the documented files that directly or \r
+# indirectly include this file.\r
+\r
+INCLUDED_BY_GRAPH      = NO\r
+\r
+# If the CALL_GRAPH and HAVE_DOT options are set to YES then \r
+# doxygen will generate a call dependency graph for every global function \r
+# or class method. Note that enabling this option will significantly increase \r
+# the time of a run. So in most cases it will be better to enable call graphs \r
+# for selected functions only using the \callgraph command.\r
+\r
+CALL_GRAPH             = NO\r
+\r
+# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then \r
+# doxygen will generate a caller dependency graph for every global function \r
+# or class method. Note that enabling this option will significantly increase \r
+# the time of a run. So in most cases it will be better to enable caller \r
+# graphs for selected functions only using the \callergraph command.\r
+\r
+CALLER_GRAPH           = NO\r
+\r
+# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen \r
+# will graphical hierarchy of all classes instead of a textual one.\r
+\r
+GRAPHICAL_HIERARCHY    = NO\r
+\r
+# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES \r
+# then doxygen will show the dependencies a directory has on other directories \r
+# in a graphical way. The dependency relations are determined by the #include\r
+# relations between the files in the directories.\r
+\r
+DIRECTORY_GRAPH        = NO\r
+\r
+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images \r
+# generated by dot. Possible values are png, jpg, or gif\r
+# If left blank png will be used.\r
+\r
+DOT_IMAGE_FORMAT       = png\r
+\r
+# The tag DOT_PATH can be used to specify the path where the dot tool can be \r
+# found. If left blank, it is assumed the dot tool can be found in the path.\r
+\r
+DOT_PATH               = "C:/Program Files/Graphviz2.18/bin"\r
+\r
+# The DOTFILE_DIRS tag can be used to specify one or more directories that \r
+# contain dot files that are included in the documentation (see the \r
+# \dotfile command).\r
+\r
+DOTFILE_DIRS           = \r
+\r
+# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of \r
+# nodes that will be shown in the graph. If the number of nodes in a graph \r
+# becomes larger than this value, doxygen will truncate the graph, which is \r
+# visualized by representing a node as a red box. Note that doxygen if the \r
+# number of direct children of the root node in a graph is already larger than \r
+# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note \r
+# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.\r
+\r
+DOT_GRAPH_MAX_NODES    = 15\r
+\r
+# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the \r
+# graphs generated by dot. A depth value of 3 means that only nodes reachable \r
+# from the root by following a path via at most 3 edges will be shown. Nodes \r
+# that lay further from the root node will be omitted. Note that setting this \r
+# option to 1 or 2 may greatly reduce the computation time needed for large \r
+# code bases. Also note that the size of a graph can be further restricted by \r
+# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.\r
+\r
+MAX_DOT_GRAPH_DEPTH    = 2\r
+\r
+# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent \r
+# background. This is disabled by default, because dot on Windows does not \r
+# seem to support this out of the box. Warning: Depending on the platform used, \r
+# enabling this option may lead to badly anti-aliased labels on the edges of \r
+# a graph (i.e. they become hard to read).\r
+\r
+DOT_TRANSPARENT        = YES\r
+\r
+# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output \r
+# files in one run (i.e. multiple -o and -T options on the command line). This \r
+# makes dot run faster, but since only newer versions of dot (>1.8.10) \r
+# support this, this feature is disabled by default.\r
+\r
+DOT_MULTI_TARGETS      = NO\r
+\r
+# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will \r
+# generate a legend page explaining the meaning of the various boxes and \r
+# arrows in the dot generated graphs.\r
+\r
+GENERATE_LEGEND        = YES\r
+\r
+# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will \r
+# remove the intermediate dot files that are used to generate \r
+# the various graphs.\r
+\r
+DOT_CLEANUP            = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration::additions related to the search engine   \r
+#---------------------------------------------------------------------------\r
+\r
+# The SEARCHENGINE tag specifies whether or not a search engine should be \r
+# used. If set to NO the values of all tags below this one will be ignored.\r
+\r
+SEARCHENGINE           = NO\r
diff --git a/Demos/Device/ClassDriver/KeyboardMouse/KeyboardMouse.aps b/Demos/Device/ClassDriver/KeyboardMouse/KeyboardMouse.aps
new file mode 100644 (file)
index 0000000..eb54f1d
--- /dev/null
@@ -0,0 +1 @@
+<AVRStudio><MANAGEMENT><ProjectName>KeyboardMouse</ProjectName><Created>30-Sep-2008 14:11:00</Created><LastEdit>30-Sep-2008 14:11:17</LastEdit><ICON>241</ICON><ProjectType>0</ProjectType><Created>30-Sep-2008 14:11:00</Created><Version>4</Version><Build>4, 14, 0, 589</Build><ProjectTypeName>AVR GCC</ProjectTypeName></MANAGEMENT><CODE_CREATION><ObjectFile></ObjectFile><EntryFile></EntryFile><SaveFolder>C:\Users\Dean\Documents\Electronics\Projects\WORK\MyUSBWORK\Demos\KeyboardMouse\</SaveFolder></CODE_CREATION><DEBUG_TARGET><CURRENT_TARGET>JTAGICE mkII</CURRENT_TARGET><CURRENT_PART>AT90USB1287.xml</CURRENT_PART><BREAKPOINTS></BREAKPOINTS><IO_EXPAND><HIDE>false</HIDE></IO_EXPAND><REGISTERNAMES><Register>R00</Register><Register>R01</Register><Register>R02</Register><Register>R03</Register><Register>R04</Register><Register>R05</Register><Register>R06</Register><Register>R07</Register><Register>R08</Register><Register>R09</Register><Register>R10</Register><Register>R11</Register><Register>R12</Register><Register>R13</Register><Register>R14</Register><Register>R15</Register><Register>R16</Register><Register>R17</Register><Register>R18</Register><Register>R19</Register><Register>R20</Register><Register>R21</Register><Register>R22</Register><Register>R23</Register><Register>R24</Register><Register>R25</Register><Register>R26</Register><Register>R27</Register><Register>R28</Register><Register>R29</Register><Register>R30</Register><Register>R31</Register></REGISTERNAMES><COM>Auto</COM><COMType>0</COMType><WATCHNUM>0</WATCHNUM><WATCHNAMES><Pane0></Pane0><Pane1></Pane1><Pane2></Pane2><Pane3></Pane3></WATCHNAMES><BreakOnTrcaeFull>0</BreakOnTrcaeFull></DEBUG_TARGET><Debugger><Triggers></Triggers></Debugger><AVRGCCPLUGIN><FILES><SOURCEFILE>Descriptors.c</SOURCEFILE><SOURCEFILE>KeyboardMouse.c</SOURCEFILE><HEADERFILE>Descriptors.h</HEADERFILE><HEADERFILE>KeyboardMouse.h</HEADERFILE><OTHERFILE>makefile</OTHERFILE></FILES><CONFIGS><CONFIG><NAME>default</NAME><USESEXTERNALMAKEFILE>YES</USESEXTERNALMAKEFILE><EXTERNALMAKEFILE>makefile</EXTERNALMAKEFILE><PART>at90usb1287</PART><HEX>1</HEX><LIST>1</LIST><MAP>1</MAP><OUTPUTFILENAME>KeyboardMouse.elf</OUTPUTFILENAME><OUTPUTDIR>default\</OUTPUTDIR><ISDIRTY>1</ISDIRTY><OPTIONS/><INCDIRS/><LIBDIRS/><LIBS/><LINKOBJECTS/><OPTIONSFORALL>-Wall -gdwarf-2 -std=gnu99 -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums</OPTIONSFORALL><LINKEROPTIONS></LINKEROPTIONS><SEGMENTS/></CONFIG></CONFIGS><LASTCONFIG>default</LASTCONFIG><USES_WINAVR>1</USES_WINAVR><GCC_LOC>C:\WinAVR-20080512\bin\avr-gcc.exe</GCC_LOC><MAKE_LOC>C:\WinAVR-20080512\utils\bin\make.exe</MAKE_LOC></AVRGCCPLUGIN><IOView><usergroups/><sort sorted="0" column="0" ordername="0" orderaddress="0" ordergroup="0"/></IOView><Files></Files><Events><Bookmarks></Bookmarks></Events><Trace><Filters></Filters></Trace></AVRStudio>\r
diff --git a/Demos/Device/ClassDriver/KeyboardMouse/KeyboardMouse.c b/Demos/Device/ClassDriver/KeyboardMouse/KeyboardMouse.c
new file mode 100644 (file)
index 0000000..5cea555
--- /dev/null
@@ -0,0 +1,237 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+  Copyright 2009  Denver Gingerich (denver [at] ossguy [dot] com)\r
+         \r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  Main source file for the KeyboardMouse demo. This file contains the main tasks of\r
+ *  the demo and is responsible for the initial application hardware configuration.\r
+ */\r
+\r
+#include "KeyboardMouse.h"\r
+\r
+/** LUFA HID Class driver interface configuration and state information. This structure is\r
+ *  passed to all HID Class driver functions, so that multiple instances of the same class\r
+ *  within a device can be differentiated from one another. This is for the keyboard HID\r
+ *  interface within the device.\r
+ */\r
+USB_ClassInfo_HID_t Keyboard_HID_Interface =\r
+       {\r
+               .InterfaceNumber         = 0,\r
+\r
+               .ReportINEndpointNumber  = KEYBOARD_IN_EPNUM,\r
+               .ReportINEndpointSize    = HID_EPSIZE,\r
+               \r
+               .ReportINBufferSize      = sizeof(USB_KeyboardReport_Data_t),\r
+\r
+               .IdleCount               = 500,\r
+       };\r
+       \r
+/** LUFA HID Class driver interface configuration and state information. This structure is\r
+ *  passed to all HID Class driver functions, so that multiple instances of the same class\r
+ *  within a device can be differentiated from one another. This is for the mouse HID\r
+ *  interface within the device.\r
+ */\r
+USB_ClassInfo_HID_t Mouse_HID_Interface =\r
+       {\r
+               .InterfaceNumber         = 0,\r
+\r
+               .ReportINEndpointNumber  = MOUSE_IN_EPNUM,\r
+               .ReportINEndpointSize    = HID_EPSIZE,\r
+\r
+               .ReportINBufferSize      = sizeof(USB_MouseReport_Data_t),\r
+       };\r
+\r
+/** Main program entry point. This routine contains the overall program flow, including initial\r
+ *  setup of all components and the main program loop.\r
+ */\r
+int main(void)\r
+{\r
+       SetupHardware();\r
+\r
+       LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);\r
+\r
+       for (;;)\r
+       {\r
+               USB_HID_USBTask(&Keyboard_HID_Interface);\r
+               USB_HID_USBTask(&Mouse_HID_Interface);\r
+               USB_USBTask();\r
+       }\r
+}\r
+\r
+/** Configures the board hardware and chip peripherals for the demo's functionality. */\r
+void SetupHardware()\r
+{\r
+       /* Disable watchdog if enabled by bootloader/fuses */\r
+       MCUSR &= ~(1 << WDRF);\r
+       wdt_disable();\r
+\r
+       /* Disable clock division */\r
+       clock_prescale_set(clock_div_1);\r
+\r
+       /* Hardware Initialization */\r
+       Joystick_Init();\r
+       LEDs_Init();\r
+       USB_Init();\r
+\r
+       /* Millisecond timer initialization, with output compare interrupt enabled for the idle timing */\r
+       OCR0A  = ((F_CPU / 64) / 1000);\r
+       TCCR0A = (1 << WGM01);\r
+       TCCR0B = ((1 << CS01) | (1 << CS00));\r
+       TIMSK0 = (1 << OCIE0A);\r
+}\r
+\r
+/** Event handler for the library USB Connection event. */\r
+void EVENT_USB_Connect(void)\r
+{\r
+    LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING);\r
+}\r
+\r
+/** Event handler for the library USB Disconnection event. */\r
+void EVENT_USB_Disconnect(void)\r
+{\r
+    LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);\r
+}\r
+\r
+/** Event handler for the library USB Configuration Changed event. */\r
+void EVENT_USB_ConfigurationChanged(void)\r
+{\r
+       LEDs_SetAllLEDs(LEDMASK_USB_READY);\r
+\r
+       if (!(USB_HID_ConfigureEndpoints(&Keyboard_HID_Interface)))\r
+         LEDs_SetAllLEDs(LEDMASK_USB_ERROR);\r
+       \r
+       if (!(USB_HID_ConfigureEndpoints(&Mouse_HID_Interface)))\r
+         LEDs_SetAllLEDs(LEDMASK_USB_ERROR);\r
+}\r
+\r
+/** Event handler for the library USB Unhandled Control Packet event. */\r
+void EVENT_USB_UnhandledControlPacket(void)\r
+{\r
+       USB_HID_ProcessControlPacket(&Keyboard_HID_Interface);\r
+       USB_HID_ProcessControlPacket(&Mouse_HID_Interface);\r
+}\r
+\r
+/** ISR to keep track of each millisecond interrupt, for determining the HID class idle period remaining when set. */\r
+ISR(TIMER0_COMPA_vect, ISR_BLOCK)\r
+{\r
+       if (Keyboard_HID_Interface.IdleMSRemaining)\r
+         Keyboard_HID_Interface.IdleMSRemaining--;\r
+\r
+       if (Mouse_HID_Interface.IdleMSRemaining)\r
+         Mouse_HID_Interface.IdleMSRemaining--;\r
+}\r
+\r
+/** HID class driver callback function for the creation of HID reports to the host.\r
+ *\r
+ *  \param HIDInterfaceInfo  Pointer to the HID class interface configuration structure being referenced\r
+ *  \param ReportData  Pointer to a buffer where the created report should be stored\r
+ *\r
+ *  \return Number of bytes written in the report (or zero if no report is to be sent\r
+ */\r
+uint16_t CALLBACK_USB_HID_CreateNextHIDReport(USB_ClassInfo_HID_t* HIDInterfaceInfo, uint8_t* ReportID, void* ReportData)\r
+{\r
+       uint8_t JoyStatus_LCL    = Joystick_GetStatus();\r
+       uint8_t ButtonStatus_LCL = Buttons_GetStatus();\r
+\r
+       if (HIDInterfaceInfo == &Keyboard_HID_Interface)\r
+       {\r
+               USB_KeyboardReport_Data_t* KeyboardReport = (USB_KeyboardReport_Data_t*)ReportData;\r
+               \r
+               /* If first board button not being held down, no keyboard report */\r
+               if (!(ButtonStatus_LCL & BUTTONS_BUTTON1))\r
+                 return 0;\r
+               \r
+               if (JoyStatus_LCL & JOY_UP)\r
+                 KeyboardReport->KeyCode[0] = 0x04; // A\r
+               else if (JoyStatus_LCL & JOY_DOWN)\r
+                 KeyboardReport->KeyCode[0] = 0x05; // B\r
+\r
+               if (JoyStatus_LCL & JOY_LEFT)\r
+                 KeyboardReport->KeyCode[0] = 0x06; // C\r
+               else if (JoyStatus_LCL & JOY_RIGHT)\r
+                 KeyboardReport->KeyCode[0] = 0x07; // D\r
+\r
+               if (JoyStatus_LCL & JOY_PRESS)\r
+                 KeyboardReport->KeyCode[0] = 0x08; // E\r
+                 \r
+               return sizeof(USB_KeyboardReport_Data_t);\r
+       }\r
+       else\r
+       {\r
+               USB_MouseReport_Data_t* MouseReport = (USB_MouseReport_Data_t*)ReportData;\r
+\r
+               /* If first board button being held down, no mouse report */\r
+               if (ButtonStatus_LCL & BUTTONS_BUTTON1)\r
+                 return 0;\r
+                 \r
+               if (JoyStatus_LCL & JOY_UP)\r
+                 MouseReport->Y = -1;\r
+               else if (JoyStatus_LCL & JOY_DOWN)\r
+                 MouseReport->Y =  1;\r
+\r
+               if (JoyStatus_LCL & JOY_RIGHT)\r
+                 MouseReport->X =  1;\r
+               else if (JoyStatus_LCL & JOY_LEFT)\r
+                 MouseReport->X = -1;\r
+\r
+               if (JoyStatus_LCL & JOY_PRESS)\r
+                 MouseReport->Button  = (1 << 0);\r
+               \r
+               return sizeof(USB_MouseReport_Data_t);          \r
+       }\r
+}\r
+\r
+/** HID class driver callback function for the processing of HID reports from the host.\r
+ *\r
+ *  \param HIDInterfaceInfo  Pointer to the HID class interface configuration structure being referenced\r
+ *  \param ReportData  Pointer to a buffer where the created report has been stored\r
+ *  \param ReportSize  Size in bytes of the received HID report\r
+ */\r
+void CALLBACK_USB_HID_ProcessReceivedHIDReport(USB_ClassInfo_HID_t* HIDInterfaceInfo, uint8_t ReportID,\r
+                                               void* ReportData, uint16_t ReportSize)\r
+{\r
+       if (HIDInterfaceInfo == &Keyboard_HID_Interface)\r
+       {\r
+               uint8_t  LEDMask   = LEDS_NO_LEDS;\r
+               uint8_t* LEDReport = (uint8_t*)ReportData;\r
+\r
+               if (*LEDReport & 0x01) // NUM Lock\r
+                 LEDMask |= LEDS_LED1;\r
+               \r
+               if (*LEDReport & 0x02) // CAPS Lock\r
+                 LEDMask |= LEDS_LED3;\r
+\r
+               if (*LEDReport & 0x04) // SCROLL Lock\r
+                 LEDMask |= LEDS_LED4;\r
+                 \r
+               LEDs_SetAllLEDs(LEDMask);\r
+       }\r
+}
\ No newline at end of file
diff --git a/Demos/Device/ClassDriver/KeyboardMouse/KeyboardMouse.h b/Demos/Device/ClassDriver/KeyboardMouse/KeyboardMouse.h
new file mode 100644 (file)
index 0000000..74b1c9e
--- /dev/null
@@ -0,0 +1,97 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+  Copyright 2009  Denver Gingerich (denver [at] ossguy [dot] com)\r
+  \r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+#ifndef _KEYBOARD_MOUSE_H_\r
+#define _KEYBOARD_MOUSE_H_\r
+\r
+       /* Includes: */\r
+               #include <avr/io.h>\r
+               #include <avr/wdt.h>\r
+               #include <avr/power.h>\r
+               #include <stdbool.h>\r
+               #include <string.h>\r
+\r
+               #include "Descriptors.h"\r
+\r
+               #include <LUFA/Version.h>\r
+               #include <LUFA/Drivers/Board/Joystick.h>\r
+               #include <LUFA/Drivers/Board/LEDs.h>\r
+               #include <LUFA/Drivers/Board/Buttons.h>\r
+               #include <LUFA/Drivers/USB/USB.h>\r
+               #include <LUFA/Drivers/USB/Class/Device/HID.h>\r
+\r
+       /* Macros: */\r
+               /** LED mask for the library LED driver, to indicate that the USB interface is not ready. */\r
+               #define LEDMASK_USB_NOTREADY      LEDS_LED1\r
+\r
+               /** LED mask for the library LED driver, to indicate that the USB interface is enumerating. */\r
+               #define LEDMASK_USB_ENUMERATING  (LEDS_LED2 | LEDS_LED3)\r
+\r
+               /** LED mask for the library LED driver, to indicate that the USB interface is ready. */\r
+               #define LEDMASK_USB_READY        (LEDS_LED2 | LEDS_LED4)\r
+\r
+               /** LED mask for the library LED driver, to indicate that an error has occurred in the USB interface. */\r
+               #define LEDMASK_USB_ERROR        (LEDS_LED1 | LEDS_LED3)\r
+               \r
+       /* Type Defines: */\r
+               /** Type define for the keyboard HID report structure, for creating and sending HID reports to the host PC.\r
+                *  This mirrors the layout described to the host in the HID report descriptor, in Descriptors.c.\r
+                */\r
+               typedef struct\r
+               {\r
+                       uint8_t Modifier; /**< Modifier mask byte, containing a mask of modifier keys set (such as shift or CTRL) */\r
+                       uint8_t Reserved; /**< Reserved, always set as 0x00 */\r
+                       uint8_t KeyCode[6]; /**< Array of up to six simultaneous key codes of pressed keys */\r
+               } USB_KeyboardReport_Data_t;\r
+\r
+               /** Type define for the mouse HID report structure, for creating and sending HID reports to the host PC.\r
+                *  This mirrors the layout described to the host in the HID report descriptor, in Descriptors.c.\r
+                */\r
+               typedef struct\r
+               {\r
+                       uint8_t Button; /**< Bit mask of the currently pressed mouse buttons */\r
+                       int8_t  X; /**< Current mouse delta X movement, as a signed 8-bit integer */\r
+                       int8_t  Y; /**< Current mouse delta Y movement, as a signed 8-bit integer */\r
+               } USB_MouseReport_Data_t;\r
+                       \r
+       /* Function Prototypes: */\r
+               void SetupHardware(void);\r
+\r
+               void EVENT_USB_Connect(void);\r
+               void EVENT_USB_Disconnect(void);\r
+               void EVENT_USB_ConfigurationChanged(void);\r
+               void EVENT_USB_UnhandledControlPacket(void);\r
+\r
+               uint16_t CALLBACK_USB_HID_CreateNextHIDReport(USB_ClassInfo_HID_t* HIDInterfaceInfo, uint8_t* ReportID, void* ReportData);\r
+               void     CALLBACK_USB_HID_ProcessReceivedHIDReport(USB_ClassInfo_HID_t* HIDInterfaceInfo, uint8_t ReportID, \r
+                                                                  void* ReportData, uint16_t ReportSize);\r
+               \r
+#endif\r
diff --git a/Demos/Device/ClassDriver/KeyboardMouse/KeyboardMouse.txt b/Demos/Device/ClassDriver/KeyboardMouse/KeyboardMouse.txt
new file mode 100644 (file)
index 0000000..3e31057
--- /dev/null
@@ -0,0 +1,66 @@
+/** \file\r
+ *\r
+ *  This file contains special DoxyGen information for the generation of the main page and other special\r
+ *  documentation pages. It is not a project source file.\r
+ */\r
\r
+/** \mainpage Dual HID Keyboard and Mouse Device Demo\r
+ *\r
+ *  \section SSec_Info USB Information:\r
+ *\r
+ *  The following table gives a rundown of the USB utilization of this demo.\r
+ *\r
+ *  <table>\r
+ *   <tr>\r
+ *    <td><b>USB Mode:</b></td>\r
+ *    <td>Device</td>\r
+ *   </tr>\r
+ *   <tr>\r
+ *    <td><b>USB Class:</b></td>\r
+ *    <td>Human Interface Device (HID)</td>\r
+ *   </tr>\r
+ *   <tr> \r
+ *    <td><b>USB Subclass:</b></td>\r
+ *    <td>N/A</td>\r
+ *   </tr>\r
+ *   <tr>\r
+ *    <td><b>Relevant Standards:</b></td>\r
+ *    <td>USBIF HID Specification, USBIF HID Usage Tables</td>\r
+ *   </tr>\r
+ *   <tr>\r
+ *    <td><b>Usable Speeds:</b></td>\r
+ *    <td>Low Speed Mode, Full Speed Mode</td>\r
+ *   </tr>\r
+ *  </table>\r
+ *\r
+ *  \section SSec_Description Project Description: \r
+ *\r
+ *  Keyboard/Mouse demonstration application. This gives a simple reference\r
+ *  application for implementing a composite device containing both USB Keyboard\r
+ *  and USB Mouse functionality using the basic USB HID drivers in all modern OSes\r
+ *  (i.e. no special drivers required). This example uses two separate HID\r
+ *  interfaces for each function. It is boot protocol compatible, and thus works under\r
+ *  compatible BIOS as if it was a native keyboard and mouse (e.g. PS/2).\r
+ *  \r
+ *  On start-up the system will automatically enumerate and function\r
+ *  as a keyboard when the USB connection to a host is present and the HWB is not\r
+ *  pressed. When enabled, manipulate the joystick to send the letters\r
+ *  a, b, c, d and e. See the USB HID documentation for more information\r
+ *  on sending keyboard event and key presses.\r
+ *  \r
+ *  When the HWB is pressed, the mouse mode is enabled. When enabled, move the\r
+ *  joystick to move the pointer, and push the joystick inwards to simulate a\r
+ *  left-button click.\r
+ *\r
+ *  \section SSec_Options Project Options\r
+ *\r
+ *  The following defines can be found in this demo, which can control the demo behaviour when defined, or changed in value.\r
+ *\r
+ *  <table>\r
+ *   <tr>\r
+ *    <td>\r
+ *     None\r
+ *    </td>\r
+ *   </tr>\r
+ *  </table>\r
+ */\r
diff --git a/Demos/Device/ClassDriver/KeyboardMouse/makefile b/Demos/Device/ClassDriver/KeyboardMouse/makefile
new file mode 100644 (file)
index 0000000..ddad7d2
--- /dev/null
@@ -0,0 +1,733 @@
+# Hey Emacs, this is a -*- makefile -*-\r
+#----------------------------------------------------------------------------\r
+# WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al.\r
+#  >> Modified for use with the LUFA project. <<\r
+#\r
+# Released to the Public Domain\r
+#\r
+# Additional material for this makefile was written by:\r
+# Peter Fleury\r
+# Tim Henigan\r
+# Colin O'Flynn\r
+# Reiner Patommel\r
+# Markus Pfaff\r
+# Sander Pool\r
+# Frederik Rouleau\r
+# Carlos Lamas\r
+# Dean Camera\r
+# Opendous Inc.\r
+# Denver Gingerich\r
+#\r
+#----------------------------------------------------------------------------\r
+# On command line:\r
+#\r
+# make all = Make software.\r
+#\r
+# make clean = Clean out built project files.\r
+#\r
+# make coff = Convert ELF to AVR COFF.\r
+#\r
+# make extcoff = Convert ELF to AVR Extended COFF.\r
+#\r
+# make program = Download the hex file to the device, using avrdude.\r
+#                Please customize the avrdude settings below first!\r
+#\r
+# make dfu = Download the hex file to the device, using dfu-programmer (must\r
+#            have dfu-programmer installed).\r
+#\r
+# make flip = Download the hex file to the device, using Atmel FLIP (must\r
+#             have Atmel FLIP installed).\r
+#\r
+# make dfu-ee = Download the eeprom file to the device, using dfu-programmer\r
+#               (must have dfu-programmer installed).\r
+#\r
+# make flip-ee = Download the eeprom file to the device, using Atmel FLIP\r
+#                (must have Atmel FLIP installed).\r
+#\r
+# make doxygen = Generate DoxyGen documentation for the project (must have\r
+#                DoxyGen installed)\r
+#\r
+# make debug = Start either simulavr or avarice as specified for debugging, \r
+#              with avr-gdb or avr-insight as the front end for debugging.\r
+#\r
+# make filename.s = Just compile filename.c into the assembler code only.\r
+#\r
+# make filename.i = Create a preprocessed source file for use in submitting\r
+#                   bug reports to the GCC project.\r
+#\r
+# To rebuild project do "make clean" then "make all".\r
+#----------------------------------------------------------------------------\r
+\r
+\r
+# MCU name\r
+MCU = at90usb1287\r
+\r
+\r
+# Target board (see library "Board Types" documentation, USER or blank for projects not requiring\r
+# LUFA board drivers). If USER is selected, put custom board drivers in a directory called \r
+# "Board" inside the application directory.\r
+BOARD  = USBKEY\r
+\r
+\r
+# Processor frequency.\r
+#     This will define a symbol, F_CPU, in all source code files equal to the \r
+#     processor frequency. You can then use this symbol in your source code to \r
+#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done\r
+#     automatically to create a 32-bit value in your source code.\r
+#     Typical values are:\r
+#         F_CPU =  1000000\r
+#         F_CPU =  1843200\r
+#         F_CPU =  2000000\r
+#         F_CPU =  3686400\r
+#         F_CPU =  4000000\r
+#         F_CPU =  7372800\r
+#         F_CPU =  8000000\r
+#         F_CPU = 11059200\r
+#         F_CPU = 14745600\r
+#         F_CPU = 16000000\r
+#         F_CPU = 18432000\r
+#         F_CPU = 20000000\r
+F_CPU = 8000000\r
+\r
+\r
+# Input clock frequency.\r
+#     This will define a symbol, F_CLOCK, in all source code files equal to the \r
+#     input clock frequency (before any prescaling is performed). This value may\r
+#     differ from F_CPU if prescaling is used on the latter, and is required as the\r
+#     raw input clock is fed directly to the PLL sections of the AVR for high speed\r
+#     clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'\r
+#     at the end, this will be done automatically to create a 32-bit value in your\r
+#     source code.\r
+#\r
+#     If no clock division is performed on the input clock inside the AVR (via the\r
+#     CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.\r
+F_CLOCK = 8000000\r
+\r
+\r
+# Output format. (can be srec, ihex, binary)\r
+FORMAT = ihex\r
+\r
+\r
+# Target file name (without extension).\r
+TARGET = KeyboardMouse\r
+\r
+\r
+# Object files directory\r
+#     To put object files in current directory, use a dot (.), do NOT make\r
+#     this an empty or blank macro!\r
+OBJDIR = .\r
+\r
+\r
+# Path to the LUFA library\r
+LUFA_PATH = ../../..\r
+\r
+\r
+# List C source files here. (C dependencies are automatically generated.)\r
+SRC = $(TARGET).c                                                 \\r
+         Descriptors.c                                               \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/DevChapter9.c        \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Endpoint.c           \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Host.c               \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/HostChapter9.c       \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/LowLevel.c           \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Pipe.c               \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/Events.c            \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBInterrupt.c      \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBTask.c           \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/ConfigDescriptor.c  \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/Class/Device/HID.c            \\r
+\r
+\r
+# List C++ source files here. (C dependencies are automatically generated.)\r
+CPPSRC = \r
+\r
+\r
+# List Assembler source files here.\r
+#     Make them always end in a capital .S.  Files ending in a lowercase .s\r
+#     will not be considered source files but generated files (assembler\r
+#     output from the compiler), and will be deleted upon "make clean"!\r
+#     Even though the DOS/Win* filesystem matches both .s and .S the same,\r
+#     it will preserve the spelling of the filenames, and gcc itself does\r
+#     care about how the name is spelled on its command-line.\r
+ASRC =\r
+\r
+\r
+# Optimization level, can be [0, 1, 2, 3, s]. \r
+#     0 = turn off optimization. s = optimize for size.\r
+#     (Note: 3 is not always the best optimization level. See avr-libc FAQ.)\r
+OPT = s\r
+\r
+\r
+# Debugging format.\r
+#     Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs.\r
+#     AVR Studio 4.10 requires dwarf-2.\r
+#     AVR [Extended] COFF format requires stabs, plus an avr-objcopy run.\r
+DEBUG = dwarf-2\r
+\r
+\r
+# List any extra directories to look for include files here.\r
+#     Each directory must be seperated by a space.\r
+#     Use forward slashes for directory separators.\r
+#     For a directory that has spaces, enclose it in quotes.\r
+EXTRAINCDIRS = $(LUFA_PATH)/\r
+\r
+\r
+# Compiler flag to set the C Standard level.\r
+#     c89   = "ANSI" C\r
+#     gnu89 = c89 plus GCC extensions\r
+#     c99   = ISO C99 standard (not yet fully implemented)\r
+#     gnu99 = c99 plus GCC extensions\r
+CSTANDARD = -std=gnu99\r
+\r
+\r
+# Place -D or -U options here for C sources\r
+CDEFS  = -DF_CPU=$(F_CPU)UL -DF_CLOCK=$(F_CLOCK)UL -DBOARD=BOARD_$(BOARD)\r
+CDEFS += -DUSE_NONSTANDARD_DESCRIPTOR_NAMES -DUSB_DEVICE_ONLY\r
+CDEFS += -DFIXED_CONTROL_ENDPOINT_SIZE=8 -DUSE_SINGLE_DEVICE_CONFIGURATION\r
+CDEFS += -DUSE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)"\r
+\r
+\r
+# Place -D or -U options here for ASM sources\r
+ADEFS = -DF_CPU=$(F_CPU)\r
+\r
+\r
+# Place -D or -U options here for C++ sources\r
+CPPDEFS = -DF_CPU=$(F_CPU)UL\r
+#CPPDEFS += -D__STDC_LIMIT_MACROS\r
+#CPPDEFS += -D__STDC_CONSTANT_MACROS\r
+\r
+\r
+\r
+#---------------- Compiler Options C ----------------\r
+#  -g*:          generate debugging information\r
+#  -O*:          optimization level\r
+#  -f...:        tuning, see GCC manual and avr-libc documentation\r
+#  -Wall...:     warning level\r
+#  -Wa,...:      tell GCC to pass this to the assembler.\r
+#    -adhlns...: create assembler listing\r
+CFLAGS = -g$(DEBUG)\r
+CFLAGS += $(CDEFS)\r
+CFLAGS += -O$(OPT)\r
+CFLAGS += -funsigned-char\r
+CFLAGS += -funsigned-bitfields\r
+CFLAGS += -ffunction-sections\r
+CFLAGS += -fpack-struct\r
+CFLAGS += -fshort-enums\r
+CFLAGS += -finline-limit=20\r
+CFLAGS += -Wall\r
+CFLAGS += -Wstrict-prototypes\r
+CFLAGS += -Wundef\r
+#CFLAGS += -fno-unit-at-a-time\r
+#CFLAGS += -Wunreachable-code\r
+#CFLAGS += -Wsign-compare\r
+CFLAGS += -Wa,-adhlns=$(<:%.c=$(OBJDIR)/%.lst)\r
+CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))\r
+CFLAGS += $(CSTANDARD)\r
+\r
+\r
+#---------------- Compiler Options C++ ----------------\r
+#  -g*:          generate debugging information\r
+#  -O*:          optimization level\r
+#  -f...:        tuning, see GCC manual and avr-libc documentation\r
+#  -Wall...:     warning level\r
+#  -Wa,...:      tell GCC to pass this to the assembler.\r
+#    -adhlns...: create assembler listing\r
+CPPFLAGS = -g$(DEBUG)\r
+CPPFLAGS += $(CPPDEFS)\r
+CPPFLAGS += -O$(OPT)\r
+CPPFLAGS += -funsigned-char\r
+CPPFLAGS += -funsigned-bitfields\r
+CPPFLAGS += -fpack-struct\r
+CPPFLAGS += -fshort-enums\r
+CPPFLAGS += -fno-exceptions\r
+CPPFLAGS += -Wall\r
+CFLAGS += -Wundef\r
+#CPPFLAGS += -mshort-calls\r
+#CPPFLAGS += -fno-unit-at-a-time\r
+#CPPFLAGS += -Wstrict-prototypes\r
+#CPPFLAGS += -Wunreachable-code\r
+#CPPFLAGS += -Wsign-compare\r
+CPPFLAGS += -Wa,-adhlns=$(<:%.cpp=$(OBJDIR)/%.lst)\r
+CPPFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))\r
+#CPPFLAGS += $(CSTANDARD)\r
+\r
+\r
+#---------------- Assembler Options ----------------\r
+#  -Wa,...:   tell GCC to pass this to the assembler.\r
+#  -adhlns:   create listing\r
+#  -gstabs:   have the assembler create line number information; note that\r
+#             for use in COFF files, additional information about filenames\r
+#             and function names needs to be present in the assembler source\r
+#             files -- see avr-libc docs [FIXME: not yet described there]\r
+#  -listing-cont-lines: Sets the maximum number of continuation lines of hex \r
+#       dump that will be displayed for a given single line of source input.\r
+ASFLAGS = $(ADEFS) -Wa,-adhlns=$(<:%.S=$(OBJDIR)/%.lst),-gstabs,--listing-cont-lines=100\r
+\r
+\r
+#---------------- Library Options ----------------\r
+# Minimalistic printf version\r
+PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min\r
+\r
+# Floating point printf version (requires MATH_LIB = -lm below)\r
+PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt\r
+\r
+# If this is left blank, then it will use the Standard printf version.\r
+PRINTF_LIB = \r
+#PRINTF_LIB = $(PRINTF_LIB_MIN)\r
+#PRINTF_LIB = $(PRINTF_LIB_FLOAT)\r
+\r
+\r
+# Minimalistic scanf version\r
+SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min\r
+\r
+# Floating point + %[ scanf version (requires MATH_LIB = -lm below)\r
+SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt\r
+\r
+# If this is left blank, then it will use the Standard scanf version.\r
+SCANF_LIB = \r
+#SCANF_LIB = $(SCANF_LIB_MIN)\r
+#SCANF_LIB = $(SCANF_LIB_FLOAT)\r
+\r
+\r
+MATH_LIB = -lm\r
+\r
+\r
+# List any extra directories to look for libraries here.\r
+#     Each directory must be seperated by a space.\r
+#     Use forward slashes for directory separators.\r
+#     For a directory that has spaces, enclose it in quotes.\r
+EXTRALIBDIRS = \r
+\r
+\r
+\r
+#---------------- External Memory Options ----------------\r
+\r
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),\r
+# used for variables (.data/.bss) and heap (malloc()).\r
+#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff\r
+\r
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),\r
+# only used for heap (malloc()).\r
+#EXTMEMOPTS = -Wl,--section-start,.data=0x801100,--defsym=__heap_end=0x80ffff\r
+\r
+EXTMEMOPTS =\r
+\r
+\r
+\r
+#---------------- Linker Options ----------------\r
+#  -Wl,...:     tell GCC to pass this to linker.\r
+#    -Map:      create map file\r
+#    --cref:    add cross reference to  map file\r
+LDFLAGS = -Wl,-Map=$(TARGET).map,--cref\r
+LDFLAGS += -Wl,--relax \r
+LDFLAGS += -Wl,--gc-sections\r
+LDFLAGS += $(EXTMEMOPTS)\r
+LDFLAGS += $(patsubst %,-L%,$(EXTRALIBDIRS))\r
+LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)\r
+#LDFLAGS += -T linker_script.x\r
+\r
+\r
+\r
+#---------------- Programming Options (avrdude) ----------------\r
+\r
+# Programming hardware: alf avr910 avrisp bascom bsd \r
+# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500\r
+#\r
+# Type: avrdude -c ?\r
+# to get a full listing.\r
+#\r
+AVRDUDE_PROGRAMMER = jtagmkII\r
+\r
+# com1 = serial port. Use lpt1 to connect to parallel port.\r
+AVRDUDE_PORT = usb\r
+\r
+AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex\r
+#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep\r
+\r
+\r
+# Uncomment the following if you want avrdude's erase cycle counter.\r
+# Note that this counter needs to be initialized first using -Yn,\r
+# see avrdude manual.\r
+#AVRDUDE_ERASE_COUNTER = -y\r
+\r
+# Uncomment the following if you do /not/ wish a verification to be\r
+# performed after programming the device.\r
+#AVRDUDE_NO_VERIFY = -V\r
+\r
+# Increase verbosity level.  Please use this when submitting bug\r
+# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude> \r
+# to submit bug reports.\r
+#AVRDUDE_VERBOSE = -v -v\r
+\r
+AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)\r
+AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY)\r
+AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE)\r
+AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER)\r
+\r
+\r
+\r
+#---------------- Debugging Options ----------------\r
+\r
+# For simulavr only - target MCU frequency.\r
+DEBUG_MFREQ = $(F_CPU)\r
+\r
+# Set the DEBUG_UI to either gdb or insight.\r
+# DEBUG_UI = gdb\r
+DEBUG_UI = insight\r
+\r
+# Set the debugging back-end to either avarice, simulavr.\r
+DEBUG_BACKEND = avarice\r
+#DEBUG_BACKEND = simulavr\r
+\r
+# GDB Init Filename.\r
+GDBINIT_FILE = __avr_gdbinit\r
+\r
+# When using avarice settings for the JTAG\r
+JTAG_DEV = /dev/com1\r
+\r
+# Debugging port used to communicate between GDB / avarice / simulavr.\r
+DEBUG_PORT = 4242\r
+\r
+# Debugging host used to communicate between GDB / avarice / simulavr, normally\r
+#     just set to localhost unless doing some sort of crazy debugging when \r
+#     avarice is running on a different computer.\r
+DEBUG_HOST = localhost\r
+\r
+\r
+\r
+#============================================================================\r
+\r
+\r
+# Define programs and commands.\r
+SHELL = sh\r
+CC = avr-gcc\r
+OBJCOPY = avr-objcopy\r
+OBJDUMP = avr-objdump\r
+SIZE = avr-size\r
+AR = avr-ar rcs\r
+NM = avr-nm\r
+AVRDUDE = avrdude\r
+REMOVE = rm -f\r
+REMOVEDIR = rm -rf\r
+COPY = cp\r
+WINSHELL = cmd\r
+\r
+# Define Messages\r
+# English\r
+MSG_ERRORS_NONE = Errors: none\r
+MSG_BEGIN = -------- begin --------\r
+MSG_END = --------  end  --------\r
+MSG_SIZE_BEFORE = Size before: \r
+MSG_SIZE_AFTER = Size after:\r
+MSG_COFF = Converting to AVR COFF:\r
+MSG_EXTENDED_COFF = Converting to AVR Extended COFF:\r
+MSG_FLASH = Creating load file for Flash:\r
+MSG_EEPROM = Creating load file for EEPROM:\r
+MSG_EXTENDED_LISTING = Creating Extended Listing:\r
+MSG_SYMBOL_TABLE = Creating Symbol Table:\r
+MSG_LINKING = Linking:\r
+MSG_COMPILING = Compiling C:\r
+MSG_COMPILING_CPP = Compiling C++:\r
+MSG_ASSEMBLING = Assembling:\r
+MSG_CLEANING = Cleaning project:\r
+MSG_CREATING_LIBRARY = Creating library:\r
+\r
+\r
+\r
+\r
+# Define all object files.\r
+OBJ = $(SRC:%.c=$(OBJDIR)/%.o) $(CPPSRC:%.cpp=$(OBJDIR)/%.o) $(ASRC:%.S=$(OBJDIR)/%.o) \r
+\r
+# Define all listing files.\r
+LST = $(SRC:%.c=$(OBJDIR)/%.lst) $(CPPSRC:%.cpp=$(OBJDIR)/%.lst) $(ASRC:%.S=$(OBJDIR)/%.lst) \r
+\r
+\r
+# Compiler flags to generate dependency files.\r
+GENDEPFLAGS = -MMD -MP -MF .dep/$(@F).d\r
+\r
+\r
+# Combine all necessary flags and optional flags.\r
+# Add target processor to flags.\r
+ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS)\r
+ALL_CPPFLAGS = -mmcu=$(MCU) -I. -x c++ $(CPPFLAGS) $(GENDEPFLAGS)\r
+ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)\r
+\r
+\r
+\r
+\r
+\r
+# Default target.\r
+all: begin gccversion sizebefore build checkhooks checklibmode checkboard sizeafter end\r
+\r
+# Change the build target to build a HEX file or a library.\r
+build: elf hex eep lss sym\r
+#build: lib\r
+\r
+\r
+elf: $(TARGET).elf\r
+hex: $(TARGET).hex\r
+eep: $(TARGET).eep\r
+lss: $(TARGET).lss\r
+sym: $(TARGET).sym\r
+LIBNAME=lib$(TARGET).a\r
+lib: $(LIBNAME)\r
+\r
+\r
+\r
+# Eye candy.\r
+# AVR Studio 3.x does not check make's exit code but relies on\r
+# the following magic strings to be generated by the compile job.\r
+begin:\r
+       @echo\r
+       @echo $(MSG_BEGIN)\r
+\r
+end:\r
+       @echo $(MSG_END)\r
+       @echo\r
+\r
+\r
+# Display size of file.\r
+HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex\r
+ELFSIZE = $(SIZE) $(MCU_FLAG) $(FORMAT_FLAG) $(TARGET).elf\r
+MCU_FLAG = $(shell $(SIZE) --help | grep -- --mcu > /dev/null && echo --mcu=$(MCU) )\r
+FORMAT_FLAG = $(shell $(SIZE) --help | grep -- --format=.*avr > /dev/null && echo --format=avr )\r
+\r
+sizebefore:\r
+       @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \\r
+       2>/dev/null; echo; fi\r
+\r
+sizeafter:\r
+       @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \\r
+       2>/dev/null; echo; fi\r
+\r
+checkhooks: build\r
+       @echo\r
+       @echo ------- Unhooked LUFA Events -------\r
+       @$(shell) (grep -s '^EVENT_.*LUFA/.*\\.o' $(TARGET).map | \\r
+                  cut -d' ' -f1 | cut -d'_' -f2- | grep ".*") || \\r
+                          echo "(None)"\r
+       @echo ------------------------------------\r
+\r
+checklibmode:\r
+       @echo\r
+       @echo ----------- Library Mode -----------\r
+       @$(shell) ($(CC) $(ALL_CFLAGS) -E -dM - < /dev/null \\r
+                 | grep 'USB_\(DEVICE\|HOST\)_ONLY' | cut -d' ' -f2 | grep ".*") \\r
+                 || echo "No specific mode (both device and host mode allowable)."\r
+       @echo ------------------------------------\r
+\r
+checkboard:\r
+       @echo\r
+       @echo ---------- Selected Board ----------\r
+       @echo Selected board model is $(BOARD).\r
+       @echo ------------------------------------\r
+       \r
+# Display compiler version information.\r
+gccversion : \r
+       @$(CC) --version\r
+\r
+\r
+\r
+# Program the device.  \r
+program: $(TARGET).hex $(TARGET).eep\r
+       $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)\r
+\r
+flip: $(TARGET).hex\r
+       batchisp -hardware usb -device $(MCU) -operation erase f\r
+       batchisp -hardware usb -device $(MCU) -operation loadbuffer $(TARGET).hex program\r
+       batchisp -hardware usb -device $(MCU) -operation start reset 0\r
+\r
+dfu: $(TARGET).hex\r
+       dfu-programmer $(MCU) erase\r
+       dfu-programmer $(MCU) flash --debug 1 $(TARGET).hex\r
+       dfu-programmer $(MCU) reset\r
+\r
+flip-ee: $(TARGET).hex $(TARGET).eep\r
+       copy $(TARGET).eep $(TARGET)eep.hex\r
+       batchisp -hardware usb -device $(MCU) -operation memory EEPROM erase\r
+       batchisp -hardware usb -device $(MCU) -operation memory EEPROM loadbuffer $(TARGET)eep.hex program\r
+       batchisp -hardware usb -device $(MCU) -operation start reset 0\r
+\r
+dfu-ee: $(TARGET).hex $(TARGET).eep\r
+       dfu-programmer $(MCU) flash-eeprom --debug 1 --suppress-bootloader-mem $(TARGET).eep\r
+       dfu-programmer $(MCU) reset\r
+\r
+\r
+# Generate avr-gdb config/init file which does the following:\r
+#     define the reset signal, load the target file, connect to target, and set \r
+#     a breakpoint at main().\r
+gdb-config: \r
+       @$(REMOVE) $(GDBINIT_FILE)\r
+       @echo define reset >> $(GDBINIT_FILE)\r
+       @echo SIGNAL SIGHUP >> $(GDBINIT_FILE)\r
+       @echo end >> $(GDBINIT_FILE)\r
+       @echo file $(TARGET).elf >> $(GDBINIT_FILE)\r
+       @echo target remote $(DEBUG_HOST):$(DEBUG_PORT)  >> $(GDBINIT_FILE)\r
+ifeq ($(DEBUG_BACKEND),simulavr)\r
+       @echo load  >> $(GDBINIT_FILE)\r
+endif\r
+       @echo break main >> $(GDBINIT_FILE)\r
+\r
+debug: gdb-config $(TARGET).elf\r
+ifeq ($(DEBUG_BACKEND), avarice)\r
+       @echo Starting AVaRICE - Press enter when "waiting to connect" message displays.\r
+       @$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \\r
+       $(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT)\r
+       @$(WINSHELL) /c pause\r
+\r
+else\r
+       @$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \\r
+       $(DEBUG_MFREQ) --port $(DEBUG_PORT)\r
+endif\r
+       @$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE)\r
+\r
+\r
+\r
+\r
+# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.\r
+COFFCONVERT = $(OBJCOPY) --debugging\r
+COFFCONVERT += --change-section-address .data-0x800000\r
+COFFCONVERT += --change-section-address .bss-0x800000\r
+COFFCONVERT += --change-section-address .noinit-0x800000\r
+COFFCONVERT += --change-section-address .eeprom-0x810000\r
+\r
+\r
+\r
+coff: $(TARGET).elf\r
+       @echo\r
+       @echo $(MSG_COFF) $(TARGET).cof\r
+       $(COFFCONVERT) -O coff-avr $< $(TARGET).cof\r
+\r
+\r
+extcoff: $(TARGET).elf\r
+       @echo\r
+       @echo $(MSG_EXTENDED_COFF) $(TARGET).cof\r
+       $(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof\r
+\r
+\r
+\r
+# Create final output files (.hex, .eep) from ELF output file.\r
+%.hex: %.elf\r
+       @echo\r
+       @echo $(MSG_FLASH) $@\r
+       $(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@\r
+\r
+%.eep: %.elf\r
+       @echo\r
+       @echo $(MSG_EEPROM) $@\r
+       -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \\r
+       --change-section-lma .eeprom=0 --no-change-warnings -O $(FORMAT) $< $@ || exit 0\r
+\r
+# Create extended listing file from ELF output file.\r
+%.lss: %.elf\r
+       @echo\r
+       @echo $(MSG_EXTENDED_LISTING) $@\r
+       $(OBJDUMP) -h -z -S $< > $@\r
+\r
+# Create a symbol table from ELF output file.\r
+%.sym: %.elf\r
+       @echo\r
+       @echo $(MSG_SYMBOL_TABLE) $@\r
+       $(NM) -n $< > $@\r
+\r
+\r
+\r
+# Create library from object files.\r
+.SECONDARY : $(TARGET).a\r
+.PRECIOUS : $(OBJ)\r
+%.a: $(OBJ)\r
+       @echo\r
+       @echo $(MSG_CREATING_LIBRARY) $@\r
+       $(AR) $@ $(OBJ)\r
+\r
+\r
+# Link: create ELF output file from object files.\r
+.SECONDARY : $(TARGET).elf\r
+.PRECIOUS : $(OBJ)\r
+%.elf: $(OBJ)\r
+       @echo\r
+       @echo $(MSG_LINKING) $@\r
+       $(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)\r
+\r
+\r
+# Compile: create object files from C source files.\r
+$(OBJDIR)/%.o : %.c\r
+       @echo\r
+       @echo $(MSG_COMPILING) $<\r
+       $(CC) -c $(ALL_CFLAGS) $< -o $@ \r
+\r
+\r
+# Compile: create object files from C++ source files.\r
+$(OBJDIR)/%.o : %.cpp\r
+       @echo\r
+       @echo $(MSG_COMPILING_CPP) $<\r
+       $(CC) -c $(ALL_CPPFLAGS) $< -o $@ \r
+\r
+\r
+# Compile: create assembler files from C source files.\r
+%.s : %.c\r
+       $(CC) -S $(ALL_CFLAGS) $< -o $@\r
+\r
+\r
+# Compile: create assembler files from C++ source files.\r
+%.s : %.cpp\r
+       $(CC) -S $(ALL_CPPFLAGS) $< -o $@\r
+\r
+\r
+# Assemble: create object files from assembler source files.\r
+$(OBJDIR)/%.o : %.S\r
+       @echo\r
+       @echo $(MSG_ASSEMBLING) $<\r
+       $(CC) -c $(ALL_ASFLAGS) $< -o $@\r
+\r
+\r
+# Create preprocessed source for use in sending a bug report.\r
+%.i : %.c\r
+       $(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ \r
+       \r
+\r
+# Target: clean project.\r
+clean: begin clean_list clean_binary end\r
+\r
+clean_binary:\r
+       $(REMOVE) $(TARGET).hex\r
+       \r
+clean_list:\r
+       @echo $(MSG_CLEANING)\r
+       $(REMOVE) $(TARGET).eep\r
+       $(REMOVE) $(TARGET)eep.hex\r
+       $(REMOVE) $(TARGET).cof\r
+       $(REMOVE) $(TARGET).elf\r
+       $(REMOVE) $(TARGET).map\r
+       $(REMOVE) $(TARGET).sym\r
+       $(REMOVE) $(TARGET).lss\r
+       $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.o)\r
+       $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.lst)\r
+       $(REMOVE) $(SRC:.c=.s)\r
+       $(REMOVE) $(SRC:.c=.d)\r
+       $(REMOVE) $(SRC:.c=.i)\r
+       $(REMOVEDIR) .dep\r
+\r
+\r
+doxygen:\r
+       @echo Generating Project Documentation...\r
+       @doxygen Doxygen.conf\r
+       @echo Documentation Generation Complete.\r
+\r
+clean_doxygen:\r
+       rm -rf Documentation\r
+\r
+# Create object files directory\r
+$(shell mkdir $(OBJDIR) 2>/dev/null)\r
+\r
+\r
+# Include the dependency files.\r
+-include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)\r
+\r
+\r
+# Listing of phony targets.\r
+.PHONY : all checkhooks checklibmode checkboard   \\r
+begin finish end sizebefore sizeafter gccversion  \\r
+build elf hex eep lss sym coff extcoff clean      \\r
+clean_list clean_binary program debug gdb-config  \\r
+doxygen dfu flip flip-ee dfu-ee
\ No newline at end of file
diff --git a/Demos/Device/ClassDriver/MIDI/Descriptors.c b/Demos/Device/ClassDriver/MIDI/Descriptors.c
new file mode 100644 (file)
index 0000000..6973a4c
--- /dev/null
@@ -0,0 +1,325 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  USB Device Descriptors, for library use when in USB device mode. Descriptors are special \r
+ *  computer-readable structures which the host requests upon device enumeration, to determine\r
+ *  the device's capabilities and functions.  \r
+ */\r
\r
+#include "Descriptors.h"\r
+\r
+/** Device descriptor structure. This descriptor, located in FLASH memory, describes the overall\r
+ *  device characteristics, including the supported USB version, control endpoint size and the\r
+ *  number of device configurations. The descriptor is read out by the USB host when the enumeration\r
+ *  process begins.\r
+ */\r
+USB_Descriptor_Device_t PROGMEM DeviceDescriptor =\r
+{\r
+       .Header                 = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device},\r
+               \r
+       .USBSpecification       = VERSION_BCD(01.10),\r
+       .Class                  = 0x00,\r
+       .SubClass               = 0x00,\r
+       .Protocol               = 0x00,\r
+                               \r
+       .Endpoint0Size          = FIXED_CONTROL_ENDPOINT_SIZE,\r
+               \r
+       .VendorID               = 0x03EB,\r
+       .ProductID              = 0x2048,\r
+       .ReleaseNumber          = 0x0000,\r
+               \r
+       .ManufacturerStrIndex   = 0x01,\r
+       .ProductStrIndex        = 0x02,\r
+       .SerialNumStrIndex      = NO_DESCRIPTOR,\r
+               \r
+       .NumberOfConfigurations = 1\r
+};\r
+\r
+/** Configuration descriptor structure. This descriptor, located in FLASH memory, describes the usage\r
+ *  of the device in one of its supported configurations, including information about any device interfaces\r
+ *  and endpoints. The descriptor is read out by the USB host during the enumeration process when selecting\r
+ *  a configuration so that the host may correctly communicate with the USB device.\r
+ */\r
+USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =\r
+{\r
+       .Config = \r
+               {\r
+                       .Header                   = {.Size = sizeof(USB_Descriptor_Configuration_Header_t), .Type = DTYPE_Configuration},\r
+\r
+                       .TotalConfigurationSize   = sizeof(USB_Descriptor_Configuration_t),\r
+                       .TotalInterfaces          = 2,\r
+\r
+                       .ConfigurationNumber      = 1,\r
+                       .ConfigurationStrIndex    = NO_DESCRIPTOR,\r
+                               \r
+                       .ConfigAttributes         = (USB_CONFIG_ATTR_BUSPOWERED | USB_CONFIG_ATTR_SELFPOWERED),\r
+                       \r
+                       .MaxPowerConsumption      = USB_CONFIG_POWER_MA(100)\r
+               },\r
+               \r
+       .AudioControlInterface = \r
+               {\r
+                       .Header                   = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},\r
+\r
+                       .InterfaceNumber          = 0,\r
+                       .AlternateSetting         = 0,\r
+                       \r
+                       .TotalEndpoints           = 0,\r
+                               \r
+                       .Class                    = 0x01,\r
+                       .SubClass                 = 0x01,\r
+                       .Protocol                 = 0x00,\r
+                               \r
+                       .InterfaceStrIndex        = NO_DESCRIPTOR                       \r
+               },\r
+       \r
+       .AudioControlInterface_SPC = \r
+               {\r
+                       .Header                   = {.Size = sizeof(USB_AudioInterface_AC_t), .Type = DTYPE_AudioInterface},\r
+                       .Subtype                  = DSUBTYPE_Header,\r
+                       \r
+                       .ACSpecification          = VERSION_BCD(01.00),\r
+                       .TotalLength              = sizeof(USB_AudioInterface_AC_t),\r
+                       \r
+                       .InCollection             = 1,\r
+                       .InterfaceNumbers         = {1},                        \r
+               },\r
+\r
+       .AudioStreamInterface = \r
+               {\r
+                       .Header                   = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},\r
+\r
+                       .InterfaceNumber          = 1,\r
+                       .AlternateSetting         = 0,\r
+                       \r
+                       .TotalEndpoints           = 2,\r
+                               \r
+                       .Class                    = 0x01,\r
+                       .SubClass                 = 0x03,\r
+                       .Protocol                 = 0x00,\r
+                               \r
+                       .InterfaceStrIndex        = NO_DESCRIPTOR\r
+               },\r
+               \r
+       .AudioStreamInterface_SPC = \r
+               {\r
+                       .Header                   = {.Size = sizeof(USB_AudioInterface_MIDI_AS_t), .Type = DTYPE_AudioInterface},\r
+                       .Subtype                  = DSUBTYPE_General,\r
+\r
+                       .AudioSpecification       = VERSION_BCD(01.00),\r
+                       \r
+                       .TotalLength              = (sizeof(USB_Descriptor_Configuration_t) - offsetof(USB_Descriptor_Configuration_t, AudioStreamInterface_SPC))\r
+               },\r
+\r
+       .MIDI_In_Jack_Emb = \r
+               {\r
+                       .Header                   = {.Size = sizeof(USB_MIDI_In_Jack_t), .Type = DTYPE_AudioInterface},\r
+                       .Subtype                  = DSUBTYPE_InputJack,\r
+                       \r
+                       .JackType                 = MIDI_JACKTYPE_EMBEDDED,\r
+                       .JackID                   = 0x01,\r
+                       \r
+                       .JackStrIndex             = NO_DESCRIPTOR\r
+               },\r
+\r
+       .MIDI_In_Jack_Ext = \r
+               {\r
+                       .Header                   = {.Size = sizeof(USB_MIDI_In_Jack_t), .Type = DTYPE_AudioInterface},\r
+                       .Subtype                  = DSUBTYPE_InputJack,\r
+                       \r
+                       .JackType                 = MIDI_JACKTYPE_EXTERNAL,\r
+                       .JackID                   = 0x02,\r
+                       \r
+                       .JackStrIndex             = NO_DESCRIPTOR\r
+               },\r
+               \r
+       .MIDI_Out_Jack_Emb = \r
+               {\r
+                       .Header                   = {.Size = sizeof(USB_MIDI_Out_Jack_t), .Type = DTYPE_AudioInterface},\r
+                       .Subtype                  = DSUBTYPE_OutputJack,\r
+                       \r
+                       .JackType                 = MIDI_JACKTYPE_EMBEDDED,\r
+                       .JackID                   = 0x03,\r
+\r
+                       .NumberOfPins             = 1,\r
+                       .SourceJackID             = {0x02},\r
+                       .SourcePinID              = {0x01},\r
+                       \r
+                       .JackStrIndex             = NO_DESCRIPTOR\r
+               },\r
+\r
+       .MIDI_Out_Jack_Ext = \r
+               {\r
+                       .Header                   = {.Size = sizeof(USB_MIDI_Out_Jack_t), .Type = DTYPE_AudioInterface},\r
+                       .Subtype                  = DSUBTYPE_OutputJack,\r
+                       \r
+                       .JackType                 = MIDI_JACKTYPE_EXTERNAL,\r
+                       .JackID                   = 0x04,\r
+\r
+                       .NumberOfPins             = 1,\r
+                       .SourceJackID             = {0x01},\r
+                       .SourcePinID              = {0x01},\r
+                       \r
+                       .JackStrIndex             = NO_DESCRIPTOR\r
+               },\r
+\r
+       .MIDI_In_Jack_Endpoint = \r
+               {\r
+                       .Endpoint = \r
+                               {\r
+                                       .Header              = {.Size = sizeof(USB_AudioStreamEndpoint_Std_t), .Type = DTYPE_Endpoint},\r
+\r
+                                       .EndpointAddress     = (ENDPOINT_DESCRIPTOR_DIR_OUT | MIDI_STREAM_OUT_EPNUM),\r
+                                       .Attributes          = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA),\r
+                                       .EndpointSize        = MIDI_STREAM_EPSIZE,\r
+                                       .PollingIntervalMS   = 0\r
+                               },\r
+                       \r
+                       .Refresh                  = 0,\r
+                       .SyncEndpointNumber       = 0\r
+               },\r
+               \r
+       .MIDI_In_Jack_Endpoint_SPC = \r
+               {\r
+                       .Header                   = {.Size = sizeof(USB_MIDI_Jack_Endpoint_t), .Type = DTYPE_AudioEndpoint},\r
+                       .Subtype                  = DSUBTYPE_General,\r
+\r
+                       .TotalEmbeddedJacks       = 0x01,\r
+                       .AssociatedJackID         = {0x01}\r
+               },\r
+\r
+       .MIDI_Out_Jack_Endpoint = \r
+               {\r
+                       .Endpoint = \r
+                               {\r
+                                       .Header              = {.Size = sizeof(USB_AudioStreamEndpoint_Std_t), .Type = DTYPE_Endpoint},\r
+\r
+                                       .EndpointAddress     = (ENDPOINT_DESCRIPTOR_DIR_IN | MIDI_STREAM_IN_EPNUM),\r
+                                       .Attributes          = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA),\r
+                                       .EndpointSize        = MIDI_STREAM_EPSIZE,\r
+                                       .PollingIntervalMS   = 0\r
+                               },\r
+                       \r
+                       .Refresh                  = 0,\r
+                       .SyncEndpointNumber       = 0\r
+               },\r
+               \r
+       .MIDI_Out_Jack_Endpoint_SPC = \r
+               {\r
+                       .Header                   = {.Size = sizeof(USB_MIDI_Jack_Endpoint_t), .Type = DTYPE_AudioEndpoint},\r
+                       .Subtype                  = DSUBTYPE_General,\r
+\r
+                       .TotalEmbeddedJacks       = 0x01,\r
+                       .AssociatedJackID         = {0x03}\r
+               }\r
+};\r
+\r
+/** Language descriptor structure. This descriptor, located in FLASH memory, is returned when the host requests\r
+ *  the string descriptor with index 0 (the first index). It is actually an array of 16-bit integers, which indicate\r
+ *  via the language ID table available at USB.org what languages the device supports for its string descriptors.\r
+ */\r
+USB_Descriptor_String_t PROGMEM LanguageString =\r
+{\r
+       .Header                 = {.Size = USB_STRING_LEN(1), .Type = DTYPE_String},\r
+               \r
+       .UnicodeString          = {LANGUAGE_ID_ENG}\r
+};\r
+\r
+/** Manufacturer descriptor string. This is a Unicode string containing the manufacturer's details in human readable\r
+ *  form, and is read out upon request by the host when the appropriate string ID is requested, listed in the Device\r
+ *  Descriptor.\r
+ */\r
+USB_Descriptor_String_t PROGMEM ManufacturerString =\r
+{\r
+       .Header                 = {.Size = USB_STRING_LEN(11), .Type = DTYPE_String},\r
+               \r
+       .UnicodeString          = L"Dean Camera"\r
+};\r
+\r
+/** Product descriptor string. This is a Unicode string containing the product's details in human readable form,\r
+ *  and is read out upon request by the host when the appropriate string ID is requested, listed in the Device\r
+ *  Descriptor.\r
+ */\r
+USB_Descriptor_String_t PROGMEM ProductString =\r
+{\r
+       .Header                 = {.Size = USB_STRING_LEN(14), .Type = DTYPE_String},\r
+               \r
+       .UnicodeString          = L"LUFA MIDI Demo"\r
+};\r
+\r
+/** This function is called by the library when in device mode, and must be overridden (see library "USB Descriptors"\r
+ *  documentation) by the application code so that the address and size of a requested descriptor can be given\r
+ *  to the USB library. When the device receives a Get Descriptor request on the control endpoint, this function\r
+ *  is called so that the descriptor details can be passed back and the appropriate descriptor sent back to the\r
+ *  USB host.\r
+ */\r
+uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
+{\r
+       const uint8_t  DescriptorType   = (wValue >> 8);\r
+       const uint8_t  DescriptorNumber = (wValue & 0xFF);\r
+\r
+       void*    Address = NULL;\r
+       uint16_t Size    = NO_DESCRIPTOR;\r
+\r
+       switch (DescriptorType)\r
+       {\r
+               case DTYPE_Device: \r
+                       Address = (void*)&DeviceDescriptor;\r
+                       Size    = sizeof(USB_Descriptor_Device_t);\r
+                       break;\r
+               case DTYPE_Configuration: \r
+                       Address = (void*)&ConfigurationDescriptor;\r
+                       Size    = sizeof(USB_Descriptor_Configuration_t);\r
+                       break;\r
+               case DTYPE_String: \r
+                       switch (DescriptorNumber)\r
+                       {\r
+                               case 0x00: \r
+                                       Address = (void*)&LanguageString;\r
+                                       Size    = pgm_read_byte(&LanguageString.Header.Size);\r
+                                       break;\r
+                               case 0x01: \r
+                                       Address = (void*)&ManufacturerString;\r
+                                       Size    = pgm_read_byte(&ManufacturerString.Header.Size);\r
+                                       break;\r
+                               case 0x02: \r
+                                       Address = (void*)&ProductString;\r
+                                       Size    = pgm_read_byte(&ProductString.Header.Size);\r
+                                       break;\r
+                       }\r
+                       \r
+                       break;\r
+       }\r
+       \r
+       *DescriptorAddress = Address;\r
+       return Size;\r
+}\r
diff --git a/Demos/Device/ClassDriver/MIDI/Descriptors.h b/Demos/Device/ClassDriver/MIDI/Descriptors.h
new file mode 100644 (file)
index 0000000..d9b1339
--- /dev/null
@@ -0,0 +1,81 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  Header file for Descriptors.c.\r
+ */\r
\r
+#ifndef _DESCRIPTORS_H_\r
+#define _DESCRIPTORS_H_\r
+\r
+       /* Includes: */\r
+               #include <LUFA/Drivers/USB/USB.h>\r
+               #include <LUFA/Drivers/USB/Class/Device/MIDI.h>\r
+\r
+               #include <avr/pgmspace.h>\r
+\r
+       /* Macros: */\r
+               /** Endpoint number of the MIDI streaming data IN endpoint, for device-to-host data transfers. */\r
+               #define MIDI_STREAM_IN_EPNUM        2\r
+\r
+               /** Endpoint number of the MIDI streaming data OUT endpoint, for host-to-device data transfers. */\r
+               #define MIDI_STREAM_OUT_EPNUM       1\r
+\r
+               /** Endpoint size in bytes of the Audio isochronous streaming data IN and OUT endpoints. */\r
+               #define MIDI_STREAM_EPSIZE          64\r
+               \r
+       /* Type Defines: */\r
+               /** Type define for the device configuration descriptor structure. This must be defined in the\r
+                *  application code, as the configuration descriptor contains several sub-descriptors which\r
+                *  vary between devices, and which describe the device's usage to the host.\r
+                */\r
+               typedef struct\r
+               {\r
+                       USB_Descriptor_Configuration_Header_t Config;\r
+                       USB_Descriptor_Interface_t            AudioControlInterface;\r
+                       USB_AudioInterface_AC_t               AudioControlInterface_SPC;\r
+                       USB_Descriptor_Interface_t            AudioStreamInterface;\r
+                       USB_AudioInterface_MIDI_AS_t          AudioStreamInterface_SPC;\r
+                       USB_MIDI_In_Jack_t                    MIDI_In_Jack_Emb;\r
+                       USB_MIDI_In_Jack_t                    MIDI_In_Jack_Ext;\r
+                       USB_MIDI_Out_Jack_t                   MIDI_Out_Jack_Emb;\r
+                       USB_MIDI_Out_Jack_t                   MIDI_Out_Jack_Ext;\r
+                       USB_AudioStreamEndpoint_Std_t         MIDI_In_Jack_Endpoint;\r
+                       USB_MIDI_Jack_Endpoint_t              MIDI_In_Jack_Endpoint_SPC;\r
+                       USB_AudioStreamEndpoint_Std_t         MIDI_Out_Jack_Endpoint;\r
+                       USB_MIDI_Jack_Endpoint_t              MIDI_Out_Jack_Endpoint_SPC;\r
+               } USB_Descriptor_Configuration_t;\r
+               \r
+       /* Function Prototypes: */\r
+               uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
+                                                                                       ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);\r
+\r
+#endif\r
diff --git a/Demos/Device/ClassDriver/MIDI/Doxygen.conf b/Demos/Device/ClassDriver/MIDI/Doxygen.conf
new file mode 100644 (file)
index 0000000..7d36de8
--- /dev/null
@@ -0,0 +1,1485 @@
+# Doxyfile 1.5.7.1\r
+\r
+# This file describes the settings to be used by the documentation system\r
+# doxygen (www.doxygen.org) for a project\r
+#\r
+# All text after a hash (#) is considered a comment and will be ignored\r
+# The format is:\r
+#       TAG = value [value, ...]\r
+# For lists items can also be appended using:\r
+#       TAG += value [value, ...]\r
+# Values that contain spaces should be placed between quotes (" ")\r
+\r
+#---------------------------------------------------------------------------\r
+# Project related configuration options\r
+#---------------------------------------------------------------------------\r
+\r
+# This tag specifies the encoding used for all characters in the config file \r
+# that follow. The default is UTF-8 which is also the encoding used for all \r
+# text before the first occurrence of this tag. Doxygen uses libiconv (or the \r
+# iconv built into libc) for the transcoding. See \r
+# http://www.gnu.org/software/libiconv for the list of possible encodings.\r
+\r
+DOXYFILE_ENCODING      = UTF-8\r
+\r
+# The PROJECT_NAME tag is a single word (or a sequence of words surrounded \r
+# by quotes) that should identify the project.\r
+\r
+PROJECT_NAME           = "LUFA Library - MIDI Device Demo"\r
+\r
+# The PROJECT_NUMBER tag can be used to enter a project or revision number. \r
+# This could be handy for archiving the generated documentation or \r
+# if some version control system is used.\r
+\r
+PROJECT_NUMBER         = 0.0.0\r
+\r
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) \r
+# base path where the generated documentation will be put. \r
+# If a relative path is entered, it will be relative to the location \r
+# where doxygen was started. If left blank the current directory will be used.\r
+\r
+OUTPUT_DIRECTORY       = ./Documentation/\r
+\r
+# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create \r
+# 4096 sub-directories (in 2 levels) under the output directory of each output \r
+# format and will distribute the generated files over these directories. \r
+# Enabling this option can be useful when feeding doxygen a huge amount of \r
+# source files, where putting all generated files in the same directory would \r
+# otherwise cause performance problems for the file system.\r
+\r
+CREATE_SUBDIRS         = YES\r
+\r
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all \r
+# documentation generated by doxygen is written. Doxygen will use this \r
+# information to generate all constant output in the proper language. \r
+# The default language is English, other supported languages are: \r
+# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, \r
+# Croatian, Czech, Danish, Dutch, Farsi, Finnish, French, German, Greek, \r
+# Hungarian, Italian, Japanese, Japanese-en (Japanese with English messages), \r
+# Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, Polish, \r
+# Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, Slovene, \r
+# Spanish, Swedish, and Ukrainian.\r
+\r
+OUTPUT_LANGUAGE        = English\r
+\r
+# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will \r
+# include brief member descriptions after the members that are listed in \r
+# the file and class documentation (similar to JavaDoc). \r
+# Set to NO to disable this.\r
+\r
+BRIEF_MEMBER_DESC      = YES\r
+\r
+# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend \r
+# the brief description of a member or function before the detailed description. \r
+# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the \r
+# brief descriptions will be completely suppressed.\r
+\r
+REPEAT_BRIEF           = YES\r
+\r
+# This tag implements a quasi-intelligent brief description abbreviator \r
+# that is used to form the text in various listings. Each string \r
+# in this list, if found as the leading text of the brief description, will be \r
+# stripped from the text and the result after processing the whole list, is \r
+# used as the annotated text. Otherwise, the brief description is used as-is. \r
+# If left blank, the following values are used ("$name" is automatically \r
+# replaced with the name of the entity): "The $name class" "The $name widget" \r
+# "The $name file" "is" "provides" "specifies" "contains" \r
+# "represents" "a" "an" "the"\r
+\r
+ABBREVIATE_BRIEF       = "The $name class" \\r
+                         "The $name widget" \\r
+                         "The $name file" \\r
+                         is \\r
+                         provides \\r
+                         specifies \\r
+                         contains \\r
+                         represents \\r
+                         a \\r
+                         an \\r
+                         the\r
+\r
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then \r
+# Doxygen will generate a detailed section even if there is only a brief \r
+# description.\r
+\r
+ALWAYS_DETAILED_SEC    = NO\r
+\r
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all \r
+# inherited members of a class in the documentation of that class as if those \r
+# members were ordinary class members. Constructors, destructors and assignment \r
+# operators of the base classes will not be shown.\r
+\r
+INLINE_INHERITED_MEMB  = NO\r
+\r
+# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full \r
+# path before files name in the file list and in the header files. If set \r
+# to NO the shortest path that makes the file name unique will be used.\r
+\r
+FULL_PATH_NAMES        = YES\r
+\r
+# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag \r
+# can be used to strip a user-defined part of the path. Stripping is \r
+# only done if one of the specified strings matches the left-hand part of \r
+# the path. The tag can be used to show relative paths in the file list. \r
+# If left blank the directory from which doxygen is run is used as the \r
+# path to strip.\r
+\r
+STRIP_FROM_PATH        = \r
+\r
+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of \r
+# the path mentioned in the documentation of a class, which tells \r
+# the reader which header file to include in order to use a class. \r
+# If left blank only the name of the header file containing the class \r
+# definition is used. Otherwise one should specify the include paths that \r
+# are normally passed to the compiler using the -I flag.\r
+\r
+STRIP_FROM_INC_PATH    = \r
+\r
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter \r
+# (but less readable) file names. This can be useful is your file systems \r
+# doesn't support long names like on DOS, Mac, or CD-ROM.\r
+\r
+SHORT_NAMES            = YES\r
+\r
+# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen \r
+# will interpret the first line (until the first dot) of a JavaDoc-style \r
+# comment as the brief description. If set to NO, the JavaDoc \r
+# comments will behave just like regular Qt-style comments \r
+# (thus requiring an explicit @brief command for a brief description.)\r
+\r
+JAVADOC_AUTOBRIEF      = NO\r
+\r
+# If the QT_AUTOBRIEF tag is set to YES then Doxygen will \r
+# interpret the first line (until the first dot) of a Qt-style \r
+# comment as the brief description. If set to NO, the comments \r
+# will behave just like regular Qt-style comments (thus requiring \r
+# an explicit \brief command for a brief description.)\r
+\r
+QT_AUTOBRIEF           = NO\r
+\r
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen \r
+# treat a multi-line C++ special comment block (i.e. a block of //! or /// \r
+# comments) as a brief description. This used to be the default behaviour. \r
+# The new default is to treat a multi-line C++ comment block as a detailed \r
+# description. Set this tag to YES if you prefer the old behaviour instead.\r
+\r
+MULTILINE_CPP_IS_BRIEF = NO\r
+\r
+# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented \r
+# member inherits the documentation from any documented member that it \r
+# re-implements.\r
+\r
+INHERIT_DOCS           = YES\r
+\r
+# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce \r
+# a new page for each member. If set to NO, the documentation of a member will \r
+# be part of the file/class/namespace that contains it.\r
+\r
+SEPARATE_MEMBER_PAGES  = NO\r
+\r
+# The TAB_SIZE tag can be used to set the number of spaces in a tab. \r
+# Doxygen uses this value to replace tabs by spaces in code fragments.\r
+\r
+TAB_SIZE               = 4\r
+\r
+# This tag can be used to specify a number of aliases that acts \r
+# as commands in the documentation. An alias has the form "name=value". \r
+# For example adding "sideeffect=\par Side Effects:\n" will allow you to \r
+# put the command \sideeffect (or @sideeffect) in the documentation, which \r
+# will result in a user-defined paragraph with heading "Side Effects:". \r
+# You can put \n's in the value part of an alias to insert newlines.\r
+\r
+ALIASES                = \r
+\r
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C \r
+# sources only. Doxygen will then generate output that is more tailored for C. \r
+# For instance, some of the names that are used will be different. The list \r
+# of all members will be omitted, etc.\r
+\r
+OPTIMIZE_OUTPUT_FOR_C  = YES\r
+\r
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java \r
+# sources only. Doxygen will then generate output that is more tailored for \r
+# Java. For instance, namespaces will be presented as packages, qualified \r
+# scopes will look different, etc.\r
+\r
+OPTIMIZE_OUTPUT_JAVA   = NO\r
+\r
+# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran \r
+# sources only. Doxygen will then generate output that is more tailored for \r
+# Fortran.\r
+\r
+OPTIMIZE_FOR_FORTRAN   = NO\r
+\r
+# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL \r
+# sources. Doxygen will then generate output that is tailored for \r
+# VHDL.\r
+\r
+OPTIMIZE_OUTPUT_VHDL   = NO\r
+\r
+# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want \r
+# to include (a tag file for) the STL sources as input, then you should \r
+# set this tag to YES in order to let doxygen match functions declarations and \r
+# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. \r
+# func(std::string) {}). This also make the inheritance and collaboration \r
+# diagrams that involve STL classes more complete and accurate.\r
+\r
+BUILTIN_STL_SUPPORT    = NO\r
+\r
+# If you use Microsoft's C++/CLI language, you should set this option to YES to\r
+# enable parsing support.\r
+\r
+CPP_CLI_SUPPORT        = NO\r
+\r
+# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. \r
+# Doxygen will parse them like normal C++ but will assume all classes use public \r
+# instead of private inheritance when no explicit protection keyword is present.\r
+\r
+SIP_SUPPORT            = NO\r
+\r
+# For Microsoft's IDL there are propget and propput attributes to indicate getter \r
+# and setter methods for a property. Setting this option to YES (the default) \r
+# will make doxygen to replace the get and set methods by a property in the \r
+# documentation. This will only work if the methods are indeed getting or \r
+# setting a simple type. If this is not the case, or you want to show the \r
+# methods anyway, you should set this option to NO.\r
+\r
+IDL_PROPERTY_SUPPORT   = YES\r
+\r
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC \r
+# tag is set to YES, then doxygen will reuse the documentation of the first \r
+# member in the group (if any) for the other members of the group. By default \r
+# all members of a group must be documented explicitly.\r
+\r
+DISTRIBUTE_GROUP_DOC   = NO\r
+\r
+# Set the SUBGROUPING tag to YES (the default) to allow class member groups of \r
+# the same type (for instance a group of public functions) to be put as a \r
+# subgroup of that type (e.g. under the Public Functions section). Set it to \r
+# NO to prevent subgrouping. Alternatively, this can be done per class using \r
+# the \nosubgrouping command.\r
+\r
+SUBGROUPING            = YES\r
+\r
+# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum \r
+# is documented as struct, union, or enum with the name of the typedef. So \r
+# typedef struct TypeS {} TypeT, will appear in the documentation as a struct \r
+# with name TypeT. When disabled the typedef will appear as a member of a file, \r
+# namespace, or class. And the struct will be named TypeS. This can typically \r
+# be useful for C code in case the coding convention dictates that all compound \r
+# types are typedef'ed and only the typedef is referenced, never the tag name.\r
+\r
+TYPEDEF_HIDES_STRUCT   = NO\r
+\r
+# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to \r
+# determine which symbols to keep in memory and which to flush to disk.\r
+# When the cache is full, less often used symbols will be written to disk.\r
+# For small to medium size projects (<1000 input files) the default value is \r
+# probably good enough. For larger projects a too small cache size can cause \r
+# doxygen to be busy swapping symbols to and from disk most of the time \r
+# causing a significant performance penality. \r
+# If the system has enough physical memory increasing the cache will improve the \r
+# performance by keeping more symbols in memory. Note that the value works on \r
+# a logarithmic scale so increasing the size by one will rougly double the \r
+# memory usage. The cache size is given by this formula: \r
+# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, \r
+# corresponding to a cache size of 2^16 = 65536 symbols\r
+\r
+SYMBOL_CACHE_SIZE      = 0\r
+\r
+#---------------------------------------------------------------------------\r
+# Build related configuration options\r
+#---------------------------------------------------------------------------\r
+\r
+# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in \r
+# documentation are documented, even if no documentation was available. \r
+# Private class members and static file members will be hidden unless \r
+# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES\r
+\r
+EXTRACT_ALL            = YES\r
+\r
+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class \r
+# will be included in the documentation.\r
+\r
+EXTRACT_PRIVATE        = YES\r
+\r
+# If the EXTRACT_STATIC tag is set to YES all static members of a file \r
+# will be included in the documentation.\r
+\r
+EXTRACT_STATIC         = YES\r
+\r
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) \r
+# defined locally in source files will be included in the documentation. \r
+# If set to NO only classes defined in header files are included.\r
+\r
+EXTRACT_LOCAL_CLASSES  = YES\r
+\r
+# This flag is only useful for Objective-C code. When set to YES local \r
+# methods, which are defined in the implementation section but not in \r
+# the interface are included in the documentation. \r
+# If set to NO (the default) only methods in the interface are included.\r
+\r
+EXTRACT_LOCAL_METHODS  = NO\r
+\r
+# If this flag is set to YES, the members of anonymous namespaces will be \r
+# extracted and appear in the documentation as a namespace called \r
+# 'anonymous_namespace{file}', where file will be replaced with the base \r
+# name of the file that contains the anonymous namespace. By default \r
+# anonymous namespace are hidden.\r
+\r
+EXTRACT_ANON_NSPACES   = NO\r
+\r
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all \r
+# undocumented members of documented classes, files or namespaces. \r
+# If set to NO (the default) these members will be included in the \r
+# various overviews, but no documentation section is generated. \r
+# This option has no effect if EXTRACT_ALL is enabled.\r
+\r
+HIDE_UNDOC_MEMBERS     = NO\r
+\r
+# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all \r
+# undocumented classes that are normally visible in the class hierarchy. \r
+# If set to NO (the default) these classes will be included in the various \r
+# overviews. This option has no effect if EXTRACT_ALL is enabled.\r
+\r
+HIDE_UNDOC_CLASSES     = NO\r
+\r
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all \r
+# friend (class|struct|union) declarations. \r
+# If set to NO (the default) these declarations will be included in the \r
+# documentation.\r
+\r
+HIDE_FRIEND_COMPOUNDS  = NO\r
+\r
+# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any \r
+# documentation blocks found inside the body of a function. \r
+# If set to NO (the default) these blocks will be appended to the \r
+# function's detailed documentation block.\r
+\r
+HIDE_IN_BODY_DOCS      = NO\r
+\r
+# The INTERNAL_DOCS tag determines if documentation \r
+# that is typed after a \internal command is included. If the tag is set \r
+# to NO (the default) then the documentation will be excluded. \r
+# Set it to YES to include the internal documentation.\r
+\r
+INTERNAL_DOCS          = NO\r
+\r
+# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate \r
+# file names in lower-case letters. If set to YES upper-case letters are also \r
+# allowed. This is useful if you have classes or files whose names only differ \r
+# in case and if your file system supports case sensitive file names. Windows \r
+# and Mac users are advised to set this option to NO.\r
+\r
+CASE_SENSE_NAMES       = NO\r
+\r
+# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen \r
+# will show members with their full class and namespace scopes in the \r
+# documentation. If set to YES the scope will be hidden.\r
+\r
+HIDE_SCOPE_NAMES       = NO\r
+\r
+# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen \r
+# will put a list of the files that are included by a file in the documentation \r
+# of that file.\r
+\r
+SHOW_INCLUDE_FILES     = YES\r
+\r
+# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] \r
+# is inserted in the documentation for inline members.\r
+\r
+INLINE_INFO            = YES\r
+\r
+# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen \r
+# will sort the (detailed) documentation of file and class members \r
+# alphabetically by member name. If set to NO the members will appear in \r
+# declaration order.\r
+\r
+SORT_MEMBER_DOCS       = YES\r
+\r
+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the \r
+# brief documentation of file, namespace and class members alphabetically \r
+# by member name. If set to NO (the default) the members will appear in \r
+# declaration order.\r
+\r
+SORT_BRIEF_DOCS        = NO\r
+\r
+# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the \r
+# hierarchy of group names into alphabetical order. If set to NO (the default) \r
+# the group names will appear in their defined order.\r
+\r
+SORT_GROUP_NAMES       = NO\r
+\r
+# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be \r
+# sorted by fully-qualified names, including namespaces. If set to \r
+# NO (the default), the class list will be sorted only by class name, \r
+# not including the namespace part. \r
+# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.\r
+# Note: This option applies only to the class list, not to the \r
+# alphabetical list.\r
+\r
+SORT_BY_SCOPE_NAME     = NO\r
+\r
+# The GENERATE_TODOLIST tag can be used to enable (YES) or \r
+# disable (NO) the todo list. This list is created by putting \todo \r
+# commands in the documentation.\r
+\r
+GENERATE_TODOLIST      = NO\r
+\r
+# The GENERATE_TESTLIST tag can be used to enable (YES) or \r
+# disable (NO) the test list. This list is created by putting \test \r
+# commands in the documentation.\r
+\r
+GENERATE_TESTLIST      = NO\r
+\r
+# The GENERATE_BUGLIST tag can be used to enable (YES) or \r
+# disable (NO) the bug list. This list is created by putting \bug \r
+# commands in the documentation.\r
+\r
+GENERATE_BUGLIST       = NO\r
+\r
+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or \r
+# disable (NO) the deprecated list. This list is created by putting \r
+# \deprecated commands in the documentation.\r
+\r
+GENERATE_DEPRECATEDLIST= YES\r
+\r
+# The ENABLED_SECTIONS tag can be used to enable conditional \r
+# documentation sections, marked by \if sectionname ... \endif.\r
+\r
+ENABLED_SECTIONS       = \r
+\r
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines \r
+# the initial value of a variable or define consists of for it to appear in \r
+# the documentation. If the initializer consists of more lines than specified \r
+# here it will be hidden. Use a value of 0 to hide initializers completely. \r
+# The appearance of the initializer of individual variables and defines in the \r
+# documentation can be controlled using \showinitializer or \hideinitializer \r
+# command in the documentation regardless of this setting.\r
+\r
+MAX_INITIALIZER_LINES  = 30\r
+\r
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated \r
+# at the bottom of the documentation of classes and structs. If set to YES the \r
+# list will mention the files that were used to generate the documentation.\r
+\r
+SHOW_USED_FILES        = YES\r
+\r
+# If the sources in your project are distributed over multiple directories \r
+# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy \r
+# in the documentation. The default is NO.\r
+\r
+SHOW_DIRECTORIES       = YES\r
+\r
+# Set the SHOW_FILES tag to NO to disable the generation of the Files page.\r
+# This will remove the Files entry from the Quick Index and from the \r
+# Folder Tree View (if specified). The default is YES.\r
+\r
+SHOW_FILES             = YES\r
+\r
+# Set the SHOW_NAMESPACES tag to NO to disable the generation of the \r
+# Namespaces page.  This will remove the Namespaces entry from the Quick Index\r
+# and from the Folder Tree View (if specified). The default is YES.\r
+\r
+SHOW_NAMESPACES        = YES\r
+\r
+# The FILE_VERSION_FILTER tag can be used to specify a program or script that \r
+# doxygen should invoke to get the current version for each file (typically from \r
+# the version control system). Doxygen will invoke the program by executing (via \r
+# popen()) the command <command> <input-file>, where <command> is the value of \r
+# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file \r
+# provided by doxygen. Whatever the program writes to standard output \r
+# is used as the file version. See the manual for examples.\r
+\r
+FILE_VERSION_FILTER    = \r
+\r
+# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by \r
+# doxygen. The layout file controls the global structure of the generated output files \r
+# in an output format independent way. The create the layout file that represents \r
+# doxygen's defaults, run doxygen with the -l option. You can optionally specify a \r
+# file name after the option, if omitted DoxygenLayout.xml will be used as the name \r
+# of the layout file.\r
+\r
+LAYOUT_FILE            = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to warning and progress messages\r
+#---------------------------------------------------------------------------\r
+\r
+# The QUIET tag can be used to turn on/off the messages that are generated \r
+# by doxygen. Possible values are YES and NO. If left blank NO is used.\r
+\r
+QUIET                  = YES\r
+\r
+# The WARNINGS tag can be used to turn on/off the warning messages that are \r
+# generated by doxygen. Possible values are YES and NO. If left blank \r
+# NO is used.\r
+\r
+WARNINGS               = YES\r
+\r
+# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings \r
+# for undocumented members. If EXTRACT_ALL is set to YES then this flag will \r
+# automatically be disabled.\r
+\r
+WARN_IF_UNDOCUMENTED   = YES\r
+\r
+# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for \r
+# potential errors in the documentation, such as not documenting some \r
+# parameters in a documented function, or documenting parameters that \r
+# don't exist or using markup commands wrongly.\r
+\r
+WARN_IF_DOC_ERROR      = YES\r
+\r
+# This WARN_NO_PARAMDOC option can be abled to get warnings for \r
+# functions that are documented, but have no documentation for their parameters \r
+# or return value. If set to NO (the default) doxygen will only warn about \r
+# wrong or incomplete parameter documentation, but not about the absence of \r
+# documentation.\r
+\r
+WARN_NO_PARAMDOC       = YES\r
+\r
+# The WARN_FORMAT tag determines the format of the warning messages that \r
+# doxygen can produce. The string should contain the $file, $line, and $text \r
+# tags, which will be replaced by the file and line number from which the \r
+# warning originated and the warning text. Optionally the format may contain \r
+# $version, which will be replaced by the version of the file (if it could \r
+# be obtained via FILE_VERSION_FILTER)\r
+\r
+WARN_FORMAT            = "$file:$line: $text"\r
+\r
+# The WARN_LOGFILE tag can be used to specify a file to which warning \r
+# and error messages should be written. If left blank the output is written \r
+# to stderr.\r
+\r
+WARN_LOGFILE           = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the input files\r
+#---------------------------------------------------------------------------\r
+\r
+# The INPUT tag can be used to specify the files and/or directories that contain \r
+# documented source files. You may enter file names like "myfile.cpp" or \r
+# directories like "/usr/src/myproject". Separate the files or directories \r
+# with spaces.\r
+\r
+INPUT                  = ./\r
+\r
+# This tag can be used to specify the character encoding of the source files \r
+# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is \r
+# also the default input encoding. Doxygen uses libiconv (or the iconv built \r
+# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for \r
+# the list of possible encodings.\r
+\r
+INPUT_ENCODING         = UTF-8\r
+\r
+# If the value of the INPUT tag contains directories, you can use the \r
+# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \r
+# and *.h) to filter out the source-files in the directories. If left \r
+# blank the following patterns are tested: \r
+# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx \r
+# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90\r
+\r
+FILE_PATTERNS          = *.h \\r
+                         *.c \\r
+                                                *.txt\r
+\r
+# The RECURSIVE tag can be used to turn specify whether or not subdirectories \r
+# should be searched for input files as well. Possible values are YES and NO. \r
+# If left blank NO is used.\r
+\r
+RECURSIVE              = YES\r
+\r
+# The EXCLUDE tag can be used to specify files and/or directories that should \r
+# excluded from the INPUT source files. This way you can easily exclude a \r
+# subdirectory from a directory tree whose root is specified with the INPUT tag.\r
+\r
+EXCLUDE                = \r
+\r
+# The EXCLUDE_SYMLINKS tag can be used select whether or not files or \r
+# directories that are symbolic links (a Unix filesystem feature) are excluded \r
+# from the input.\r
+\r
+EXCLUDE_SYMLINKS       = NO\r
+\r
+# If the value of the INPUT tag contains directories, you can use the \r
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude \r
+# certain files from those directories. Note that the wildcards are matched \r
+# against the file with absolute path, so to exclude all test directories \r
+# for example use the pattern */test/*\r
+\r
+EXCLUDE_PATTERNS       = */LowLevel/USBMode.h\r
+\r
+# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names \r
+# (namespaces, classes, functions, etc.) that should be excluded from the \r
+# output. The symbol name can be a fully qualified name, a word, or if the \r
+# wildcard * is used, a substring. Examples: ANamespace, AClass, \r
+# AClass::ANamespace, ANamespace::*Test\r
+\r
+EXCLUDE_SYMBOLS        = __*\r
+\r
+# The EXAMPLE_PATH tag can be used to specify one or more files or \r
+# directories that contain example code fragments that are included (see \r
+# the \include command).\r
+\r
+EXAMPLE_PATH           = \r
+\r
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the \r
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \r
+# and *.h) to filter out the source-files in the directories. If left \r
+# blank all files are included.\r
+\r
+EXAMPLE_PATTERNS       = *\r
+\r
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be \r
+# searched for input files to be used with the \include or \dontinclude \r
+# commands irrespective of the value of the RECURSIVE tag. \r
+# Possible values are YES and NO. If left blank NO is used.\r
+\r
+EXAMPLE_RECURSIVE      = NO\r
+\r
+# The IMAGE_PATH tag can be used to specify one or more files or \r
+# directories that contain image that are included in the documentation (see \r
+# the \image command).\r
+\r
+IMAGE_PATH             = \r
+\r
+# The INPUT_FILTER tag can be used to specify a program that doxygen should \r
+# invoke to filter for each input file. Doxygen will invoke the filter program \r
+# by executing (via popen()) the command <filter> <input-file>, where <filter> \r
+# is the value of the INPUT_FILTER tag, and <input-file> is the name of an \r
+# input file. Doxygen will then use the output that the filter program writes \r
+# to standard output.  If FILTER_PATTERNS is specified, this tag will be \r
+# ignored.\r
+\r
+INPUT_FILTER           = \r
+\r
+# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern \r
+# basis.  Doxygen will compare the file name with each pattern and apply the \r
+# filter if there is a match.  The filters are a list of the form: \r
+# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further \r
+# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER \r
+# is applied to all files.\r
+\r
+FILTER_PATTERNS        = \r
+\r
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using \r
+# INPUT_FILTER) will be used to filter the input files when producing source \r
+# files to browse (i.e. when SOURCE_BROWSER is set to YES).\r
+\r
+FILTER_SOURCE_FILES    = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to source browsing\r
+#---------------------------------------------------------------------------\r
+\r
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will \r
+# be generated. Documented entities will be cross-referenced with these sources. \r
+# Note: To get rid of all source code in the generated output, make sure also \r
+# VERBATIM_HEADERS is set to NO.\r
+\r
+SOURCE_BROWSER         = NO\r
+\r
+# Setting the INLINE_SOURCES tag to YES will include the body \r
+# of functions and classes directly in the documentation.\r
+\r
+INLINE_SOURCES         = NO\r
+\r
+# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct \r
+# doxygen to hide any special comment blocks from generated source code \r
+# fragments. Normal C and C++ comments will always remain visible.\r
+\r
+STRIP_CODE_COMMENTS    = YES\r
+\r
+# If the REFERENCED_BY_RELATION tag is set to YES \r
+# then for each documented function all documented \r
+# functions referencing it will be listed.\r
+\r
+REFERENCED_BY_RELATION = NO\r
+\r
+# If the REFERENCES_RELATION tag is set to YES \r
+# then for each documented function all documented entities \r
+# called/used by that function will be listed.\r
+\r
+REFERENCES_RELATION    = NO\r
+\r
+# If the REFERENCES_LINK_SOURCE tag is set to YES (the default)\r
+# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from\r
+# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will\r
+# link to the source code.  Otherwise they will link to the documentstion.\r
+\r
+REFERENCES_LINK_SOURCE = NO\r
+\r
+# If the USE_HTAGS tag is set to YES then the references to source code \r
+# will point to the HTML generated by the htags(1) tool instead of doxygen \r
+# built-in source browser. The htags tool is part of GNU's global source \r
+# tagging system (see http://www.gnu.org/software/global/global.html). You \r
+# will need version 4.8.6 or higher.\r
+\r
+USE_HTAGS              = NO\r
+\r
+# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen \r
+# will generate a verbatim copy of the header file for each class for \r
+# which an include is specified. Set to NO to disable this.\r
+\r
+VERBATIM_HEADERS       = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the alphabetical class index\r
+#---------------------------------------------------------------------------\r
+\r
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index \r
+# of all compounds will be generated. Enable this if the project \r
+# contains a lot of classes, structs, unions or interfaces.\r
+\r
+ALPHABETICAL_INDEX     = YES\r
+\r
+# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then \r
+# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns \r
+# in which this list will be split (can be a number in the range [1..20])\r
+\r
+COLS_IN_ALPHA_INDEX    = 5\r
+\r
+# In case all classes in a project start with a common prefix, all \r
+# classes will be put under the same header in the alphabetical index. \r
+# The IGNORE_PREFIX tag can be used to specify one or more prefixes that \r
+# should be ignored while generating the index headers.\r
+\r
+IGNORE_PREFIX          = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the HTML output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_HTML tag is set to YES (the default) Doxygen will \r
+# generate HTML output.\r
+\r
+GENERATE_HTML          = YES\r
+\r
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `html' will be used as the default path.\r
+\r
+HTML_OUTPUT            = html\r
+\r
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for \r
+# each generated HTML page (for example: .htm,.php,.asp). If it is left blank \r
+# doxygen will generate files with .html extension.\r
+\r
+HTML_FILE_EXTENSION    = .html\r
+\r
+# The HTML_HEADER tag can be used to specify a personal HTML header for \r
+# each generated HTML page. If it is left blank doxygen will generate a \r
+# standard header.\r
+\r
+HTML_HEADER            = \r
+\r
+# The HTML_FOOTER tag can be used to specify a personal HTML footer for \r
+# each generated HTML page. If it is left blank doxygen will generate a \r
+# standard footer.\r
+\r
+HTML_FOOTER            = \r
+\r
+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading \r
+# style sheet that is used by each HTML page. It can be used to \r
+# fine-tune the look of the HTML output. If the tag is left blank doxygen \r
+# will generate a default style sheet. Note that doxygen will try to copy \r
+# the style sheet file to the HTML output directory, so don't put your own \r
+# stylesheet in the HTML output directory as well, or it will be erased!\r
+\r
+HTML_STYLESHEET        = \r
+\r
+# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, \r
+# files or namespaces will be aligned in HTML using tables. If set to \r
+# NO a bullet list will be used.\r
+\r
+HTML_ALIGN_MEMBERS     = YES\r
+\r
+# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML \r
+# documentation will contain sections that can be hidden and shown after the \r
+# page has loaded. For this to work a browser that supports \r
+# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox \r
+# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari).\r
+\r
+HTML_DYNAMIC_SECTIONS  = YES\r
+\r
+# If the GENERATE_DOCSET tag is set to YES, additional index files \r
+# will be generated that can be used as input for Apple's Xcode 3 \r
+# integrated development environment, introduced with OSX 10.5 (Leopard). \r
+# To create a documentation set, doxygen will generate a Makefile in the \r
+# HTML output directory. Running make will produce the docset in that \r
+# directory and running "make install" will install the docset in \r
+# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find \r
+# it at startup. \r
+# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information.\r
+\r
+GENERATE_DOCSET        = NO\r
+\r
+# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the \r
+# feed. A documentation feed provides an umbrella under which multiple \r
+# documentation sets from a single provider (such as a company or product suite) \r
+# can be grouped.\r
+\r
+DOCSET_FEEDNAME        = "Doxygen generated docs"\r
+\r
+# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that \r
+# should uniquely identify the documentation set bundle. This should be a \r
+# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen \r
+# will append .docset to the name.\r
+\r
+DOCSET_BUNDLE_ID       = org.doxygen.Project\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, additional index files \r
+# will be generated that can be used as input for tools like the \r
+# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) \r
+# of the generated HTML documentation.\r
+\r
+GENERATE_HTMLHELP      = NO\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can \r
+# be used to specify the file name of the resulting .chm file. You \r
+# can add a path in front of the file if the result should not be \r
+# written to the html output directory.\r
+\r
+CHM_FILE               = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can \r
+# be used to specify the location (absolute path including file name) of \r
+# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run \r
+# the HTML help compiler on the generated index.hhp.\r
+\r
+HHC_LOCATION           = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag \r
+# controls if a separate .chi index file is generated (YES) or that \r
+# it should be included in the master .chm file (NO).\r
+\r
+GENERATE_CHI           = NO\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING\r
+# is used to encode HtmlHelp index (hhk), content (hhc) and project file\r
+# content.\r
+\r
+CHM_INDEX_ENCODING     = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag \r
+# controls whether a binary table of contents is generated (YES) or a \r
+# normal table of contents (NO) in the .chm file.\r
+\r
+BINARY_TOC             = NO\r
+\r
+# The TOC_EXPAND flag can be set to YES to add extra items for group members \r
+# to the contents of the HTML help documentation and to the tree view.\r
+\r
+TOC_EXPAND             = YES\r
+\r
+# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER \r
+# are set, an additional index file will be generated that can be used as input for \r
+# Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated \r
+# HTML documentation.\r
+\r
+GENERATE_QHP           = NO\r
+\r
+# If the QHG_LOCATION tag is specified, the QCH_FILE tag can \r
+# be used to specify the file name of the resulting .qch file. \r
+# The path specified is relative to the HTML output folder.\r
+\r
+QCH_FILE               = \r
+\r
+# The QHP_NAMESPACE tag specifies the namespace to use when generating \r
+# Qt Help Project output. For more information please see \r
+# <a href="http://doc.trolltech.com/qthelpproject.html#namespace">Qt Help Project / Namespace</a>.\r
+\r
+QHP_NAMESPACE          = org.doxygen.Project\r
+\r
+# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating \r
+# Qt Help Project output. For more information please see \r
+# <a href="http://doc.trolltech.com/qthelpproject.html#virtual-folders">Qt Help Project / Virtual Folders</a>.\r
+\r
+QHP_VIRTUAL_FOLDER     = doc\r
+\r
+# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can \r
+# be used to specify the location of Qt's qhelpgenerator. \r
+# If non-empty doxygen will try to run qhelpgenerator on the generated \r
+# .qhp file .\r
+\r
+QHG_LOCATION           = \r
+\r
+# The DISABLE_INDEX tag can be used to turn on/off the condensed index at \r
+# top of each HTML page. The value NO (the default) enables the index and \r
+# the value YES disables it.\r
+\r
+DISABLE_INDEX          = NO\r
+\r
+# This tag can be used to set the number of enum values (range [1..20]) \r
+# that doxygen will group on one line in the generated HTML documentation.\r
+\r
+ENUM_VALUES_PER_LINE   = 1\r
+\r
+# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index\r
+# structure should be generated to display hierarchical information.\r
+# If the tag value is set to FRAME, a side panel will be generated\r
+# containing a tree-like index structure (just like the one that \r
+# is generated for HTML Help). For this to work a browser that supports \r
+# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, \r
+# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are \r
+# probably better off using the HTML help feature. Other possible values \r
+# for this tag are: HIERARCHIES, which will generate the Groups, Directories,\r
+# and Class Hierarchy pages using a tree view instead of an ordered list;\r
+# ALL, which combines the behavior of FRAME and HIERARCHIES; and NONE, which\r
+# disables this behavior completely. For backwards compatibility with previous\r
+# releases of Doxygen, the values YES and NO are equivalent to FRAME and NONE\r
+# respectively.\r
+\r
+GENERATE_TREEVIEW      = YES\r
+\r
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be \r
+# used to set the initial width (in pixels) of the frame in which the tree \r
+# is shown.\r
+\r
+TREEVIEW_WIDTH         = 250\r
+\r
+# Use this tag to change the font size of Latex formulas included \r
+# as images in the HTML documentation. The default is 10. Note that \r
+# when you change the font size after a successful doxygen run you need \r
+# to manually remove any form_*.png images from the HTML output directory \r
+# to force them to be regenerated.\r
+\r
+FORMULA_FONTSIZE       = 10\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the LaTeX output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will \r
+# generate Latex output.\r
+\r
+GENERATE_LATEX         = NO\r
+\r
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `latex' will be used as the default path.\r
+\r
+LATEX_OUTPUT           = latex\r
+\r
+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be \r
+# invoked. If left blank `latex' will be used as the default command name.\r
+\r
+LATEX_CMD_NAME         = latex\r
+\r
+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to \r
+# generate index for LaTeX. If left blank `makeindex' will be used as the \r
+# default command name.\r
+\r
+MAKEINDEX_CMD_NAME     = makeindex\r
+\r
+# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact \r
+# LaTeX documents. This may be useful for small projects and may help to \r
+# save some trees in general.\r
+\r
+COMPACT_LATEX          = NO\r
+\r
+# The PAPER_TYPE tag can be used to set the paper type that is used \r
+# by the printer. Possible values are: a4, a4wide, letter, legal and \r
+# executive. If left blank a4wide will be used.\r
+\r
+PAPER_TYPE             = a4wide\r
+\r
+# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX \r
+# packages that should be included in the LaTeX output.\r
+\r
+EXTRA_PACKAGES         = \r
+\r
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for \r
+# the generated latex document. The header should contain everything until \r
+# the first chapter. If it is left blank doxygen will generate a \r
+# standard header. Notice: only use this tag if you know what you are doing!\r
+\r
+LATEX_HEADER           = \r
+\r
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated \r
+# is prepared for conversion to pdf (using ps2pdf). The pdf file will \r
+# contain links (just like the HTML output) instead of page references \r
+# This makes the output suitable for online browsing using a pdf viewer.\r
+\r
+PDF_HYPERLINKS         = YES\r
+\r
+# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of \r
+# plain latex in the generated Makefile. Set this option to YES to get a \r
+# higher quality PDF documentation.\r
+\r
+USE_PDFLATEX           = YES\r
+\r
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. \r
+# command to the generated LaTeX files. This will instruct LaTeX to keep \r
+# running if errors occur, instead of asking the user for help. \r
+# This option is also used when generating formulas in HTML.\r
+\r
+LATEX_BATCHMODE        = NO\r
+\r
+# If LATEX_HIDE_INDICES is set to YES then doxygen will not \r
+# include the index chapters (such as File Index, Compound Index, etc.) \r
+# in the output.\r
+\r
+LATEX_HIDE_INDICES     = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the RTF output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output \r
+# The RTF output is optimized for Word 97 and may not look very pretty with \r
+# other RTF readers or editors.\r
+\r
+GENERATE_RTF           = NO\r
+\r
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `rtf' will be used as the default path.\r
+\r
+RTF_OUTPUT             = rtf\r
+\r
+# If the COMPACT_RTF tag is set to YES Doxygen generates more compact \r
+# RTF documents. This may be useful for small projects and may help to \r
+# save some trees in general.\r
+\r
+COMPACT_RTF            = NO\r
+\r
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated \r
+# will contain hyperlink fields. The RTF file will \r
+# contain links (just like the HTML output) instead of page references. \r
+# This makes the output suitable for online browsing using WORD or other \r
+# programs which support those fields. \r
+# Note: wordpad (write) and others do not support links.\r
+\r
+RTF_HYPERLINKS         = NO\r
+\r
+# Load stylesheet definitions from file. Syntax is similar to doxygen's \r
+# config file, i.e. a series of assignments. You only have to provide \r
+# replacements, missing definitions are set to their default value.\r
+\r
+RTF_STYLESHEET_FILE    = \r
+\r
+# Set optional variables used in the generation of an rtf document. \r
+# Syntax is similar to doxygen's config file.\r
+\r
+RTF_EXTENSIONS_FILE    = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the man page output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_MAN tag is set to YES (the default) Doxygen will \r
+# generate man pages\r
+\r
+GENERATE_MAN           = NO\r
+\r
+# The MAN_OUTPUT tag is used to specify where the man pages will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `man' will be used as the default path.\r
+\r
+MAN_OUTPUT             = man\r
+\r
+# The MAN_EXTENSION tag determines the extension that is added to \r
+# the generated man pages (default is the subroutine's section .3)\r
+\r
+MAN_EXTENSION          = .3\r
+\r
+# If the MAN_LINKS tag is set to YES and Doxygen generates man output, \r
+# then it will generate one additional man file for each entity \r
+# documented in the real man page(s). These additional files \r
+# only source the real man page, but without them the man command \r
+# would be unable to find the correct page. The default is NO.\r
+\r
+MAN_LINKS              = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the XML output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_XML tag is set to YES Doxygen will \r
+# generate an XML file that captures the structure of \r
+# the code including all documentation.\r
+\r
+GENERATE_XML           = NO\r
+\r
+# The XML_OUTPUT tag is used to specify where the XML pages will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `xml' will be used as the default path.\r
+\r
+XML_OUTPUT             = xml\r
+\r
+# The XML_SCHEMA tag can be used to specify an XML schema, \r
+# which can be used by a validating XML parser to check the \r
+# syntax of the XML files.\r
+\r
+XML_SCHEMA             = \r
+\r
+# The XML_DTD tag can be used to specify an XML DTD, \r
+# which can be used by a validating XML parser to check the \r
+# syntax of the XML files.\r
+\r
+XML_DTD                = \r
+\r
+# If the XML_PROGRAMLISTING tag is set to YES Doxygen will \r
+# dump the program listings (including syntax highlighting \r
+# and cross-referencing information) to the XML output. Note that \r
+# enabling this will significantly increase the size of the XML output.\r
+\r
+XML_PROGRAMLISTING     = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options for the AutoGen Definitions output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will \r
+# generate an AutoGen Definitions (see autogen.sf.net) file \r
+# that captures the structure of the code including all \r
+# documentation. Note that this feature is still experimental \r
+# and incomplete at the moment.\r
+\r
+GENERATE_AUTOGEN_DEF   = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the Perl module output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_PERLMOD tag is set to YES Doxygen will \r
+# generate a Perl module file that captures the structure of \r
+# the code including all documentation. Note that this \r
+# feature is still experimental and incomplete at the \r
+# moment.\r
+\r
+GENERATE_PERLMOD       = NO\r
+\r
+# If the PERLMOD_LATEX tag is set to YES Doxygen will generate \r
+# the necessary Makefile rules, Perl scripts and LaTeX code to be able \r
+# to generate PDF and DVI output from the Perl module output.\r
+\r
+PERLMOD_LATEX          = NO\r
+\r
+# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be \r
+# nicely formatted so it can be parsed by a human reader.  This is useful \r
+# if you want to understand what is going on.  On the other hand, if this \r
+# tag is set to NO the size of the Perl module output will be much smaller \r
+# and Perl will parse it just the same.\r
+\r
+PERLMOD_PRETTY         = YES\r
+\r
+# The names of the make variables in the generated doxyrules.make file \r
+# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. \r
+# This is useful so different doxyrules.make files included by the same \r
+# Makefile don't overwrite each other's variables.\r
+\r
+PERLMOD_MAKEVAR_PREFIX = \r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration options related to the preprocessor   \r
+#---------------------------------------------------------------------------\r
+\r
+# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will \r
+# evaluate all C-preprocessor directives found in the sources and include \r
+# files.\r
+\r
+ENABLE_PREPROCESSING   = YES\r
+\r
+# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro \r
+# names in the source code. If set to NO (the default) only conditional \r
+# compilation will be performed. Macro expansion can be done in a controlled \r
+# way by setting EXPAND_ONLY_PREDEF to YES.\r
+\r
+MACRO_EXPANSION        = YES\r
+\r
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES \r
+# then the macro expansion is limited to the macros specified with the \r
+# PREDEFINED and EXPAND_AS_DEFINED tags.\r
+\r
+EXPAND_ONLY_PREDEF     = YES\r
+\r
+# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files \r
+# in the INCLUDE_PATH (see below) will be search if a #include is found.\r
+\r
+SEARCH_INCLUDES        = YES\r
+\r
+# The INCLUDE_PATH tag can be used to specify one or more directories that \r
+# contain include files that are not input files but should be processed by \r
+# the preprocessor.\r
+\r
+INCLUDE_PATH           = \r
+\r
+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard \r
+# patterns (like *.h and *.hpp) to filter out the header-files in the \r
+# directories. If left blank, the patterns specified with FILE_PATTERNS will \r
+# be used.\r
+\r
+INCLUDE_FILE_PATTERNS  = \r
+\r
+# The PREDEFINED tag can be used to specify one or more macro names that \r
+# are defined before the preprocessor is started (similar to the -D option of \r
+# gcc). The argument of the tag is a list of macros of the form: name \r
+# or name=definition (no spaces). If the definition and the = are \r
+# omitted =1 is assumed. To prevent a macro definition from being \r
+# undefined via #undef or recursively expanded use the := operator \r
+# instead of the = operator.\r
+\r
+PREDEFINED             = __DOXYGEN__\r
+\r
+# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then \r
+# this tag can be used to specify a list of macro names that should be expanded. \r
+# The macro definition that is found in the sources will be used. \r
+# Use the PREDEFINED tag if you want to use a different macro definition.\r
+\r
+EXPAND_AS_DEFINED      = BUTTLOADTAG\r
+\r
+# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then \r
+# doxygen's preprocessor will remove all function-like macros that are alone \r
+# on a line, have an all uppercase name, and do not end with a semicolon. Such \r
+# function macros are typically used for boiler-plate code, and will confuse \r
+# the parser if not removed.\r
+\r
+SKIP_FUNCTION_MACROS   = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration::additions related to external references   \r
+#---------------------------------------------------------------------------\r
+\r
+# The TAGFILES option can be used to specify one or more tagfiles. \r
+# Optionally an initial location of the external documentation \r
+# can be added for each tagfile. The format of a tag file without \r
+# this location is as follows: \r
+#   TAGFILES = file1 file2 ... \r
+# Adding location for the tag files is done as follows: \r
+#   TAGFILES = file1=loc1 "file2 = loc2" ... \r
+# where "loc1" and "loc2" can be relative or absolute paths or \r
+# URLs. If a location is present for each tag, the installdox tool \r
+# does not have to be run to correct the links.\r
+# Note that each tag file must have a unique name\r
+# (where the name does NOT include the path)\r
+# If a tag file is not located in the directory in which doxygen \r
+# is run, you must also specify the path to the tagfile here.\r
+\r
+TAGFILES               = \r
+\r
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create \r
+# a tag file that is based on the input files it reads.\r
+\r
+GENERATE_TAGFILE       = \r
+\r
+# If the ALLEXTERNALS tag is set to YES all external classes will be listed \r
+# in the class index. If set to NO only the inherited external classes \r
+# will be listed.\r
+\r
+ALLEXTERNALS           = NO\r
+\r
+# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed \r
+# in the modules index. If set to NO, only the current project's groups will \r
+# be listed.\r
+\r
+EXTERNAL_GROUPS        = YES\r
+\r
+# The PERL_PATH should be the absolute path and name of the perl script \r
+# interpreter (i.e. the result of `which perl').\r
+\r
+PERL_PATH              = /usr/bin/perl\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration options related to the dot tool   \r
+#---------------------------------------------------------------------------\r
+\r
+# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will \r
+# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base \r
+# or super classes. Setting the tag to NO turns the diagrams off. Note that \r
+# this option is superseded by the HAVE_DOT option below. This is only a \r
+# fallback. It is recommended to install and use dot, since it yields more \r
+# powerful graphs.\r
+\r
+CLASS_DIAGRAMS         = NO\r
+\r
+# You can define message sequence charts within doxygen comments using the \msc \r
+# command. Doxygen will then run the mscgen tool (see \r
+# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the \r
+# documentation. The MSCGEN_PATH tag allows you to specify the directory where \r
+# the mscgen tool resides. If left empty the tool is assumed to be found in the \r
+# default search path.\r
+\r
+MSCGEN_PATH            = \r
+\r
+# If set to YES, the inheritance and collaboration graphs will hide \r
+# inheritance and usage relations if the target is undocumented \r
+# or is not a class.\r
+\r
+HIDE_UNDOC_RELATIONS   = YES\r
+\r
+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is \r
+# available from the path. This tool is part of Graphviz, a graph visualization \r
+# toolkit from AT&T and Lucent Bell Labs. The other options in this section \r
+# have no effect if this option is set to NO (the default)\r
+\r
+HAVE_DOT               = NO\r
+\r
+# By default doxygen will write a font called FreeSans.ttf to the output \r
+# directory and reference it in all dot files that doxygen generates. This \r
+# font does not include all possible unicode characters however, so when you need \r
+# these (or just want a differently looking font) you can specify the font name \r
+# using DOT_FONTNAME. You need need to make sure dot is able to find the font, \r
+# which can be done by putting it in a standard location or by setting the \r
+# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory \r
+# containing the font.\r
+\r
+DOT_FONTNAME           = FreeSans\r
+\r
+# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. \r
+# The default size is 10pt.\r
+\r
+DOT_FONTSIZE           = 10\r
+\r
+# By default doxygen will tell dot to use the output directory to look for the \r
+# FreeSans.ttf font (which doxygen will put there itself). If you specify a \r
+# different font using DOT_FONTNAME you can set the path where dot \r
+# can find it using this tag.\r
+\r
+DOT_FONTPATH           = \r
+\r
+# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for each documented class showing the direct and \r
+# indirect inheritance relations. Setting this tag to YES will force the \r
+# the CLASS_DIAGRAMS tag to NO.\r
+\r
+CLASS_GRAPH            = NO\r
+\r
+# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for each documented class showing the direct and \r
+# indirect implementation dependencies (inheritance, containment, and \r
+# class references variables) of the class with other documented classes.\r
+\r
+COLLABORATION_GRAPH    = NO\r
+\r
+# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for groups, showing the direct groups dependencies\r
+\r
+GROUP_GRAPHS           = NO\r
+\r
+# If the UML_LOOK tag is set to YES doxygen will generate inheritance and \r
+# collaboration diagrams in a style similar to the OMG's Unified Modeling \r
+# Language.\r
+\r
+UML_LOOK               = NO\r
+\r
+# If set to YES, the inheritance and collaboration graphs will show the \r
+# relations between templates and their instances.\r
+\r
+TEMPLATE_RELATIONS     = NO\r
+\r
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT \r
+# tags are set to YES then doxygen will generate a graph for each documented \r
+# file showing the direct and indirect include dependencies of the file with \r
+# other documented files.\r
+\r
+INCLUDE_GRAPH          = NO\r
+\r
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and \r
+# HAVE_DOT tags are set to YES then doxygen will generate a graph for each \r
+# documented header file showing the documented files that directly or \r
+# indirectly include this file.\r
+\r
+INCLUDED_BY_GRAPH      = NO\r
+\r
+# If the CALL_GRAPH and HAVE_DOT options are set to YES then \r
+# doxygen will generate a call dependency graph for every global function \r
+# or class method. Note that enabling this option will significantly increase \r
+# the time of a run. So in most cases it will be better to enable call graphs \r
+# for selected functions only using the \callgraph command.\r
+\r
+CALL_GRAPH             = NO\r
+\r
+# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then \r
+# doxygen will generate a caller dependency graph for every global function \r
+# or class method. Note that enabling this option will significantly increase \r
+# the time of a run. So in most cases it will be better to enable caller \r
+# graphs for selected functions only using the \callergraph command.\r
+\r
+CALLER_GRAPH           = NO\r
+\r
+# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen \r
+# will graphical hierarchy of all classes instead of a textual one.\r
+\r
+GRAPHICAL_HIERARCHY    = NO\r
+\r
+# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES \r
+# then doxygen will show the dependencies a directory has on other directories \r
+# in a graphical way. The dependency relations are determined by the #include\r
+# relations between the files in the directories.\r
+\r
+DIRECTORY_GRAPH        = NO\r
+\r
+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images \r
+# generated by dot. Possible values are png, jpg, or gif\r
+# If left blank png will be used.\r
+\r
+DOT_IMAGE_FORMAT       = png\r
+\r
+# The tag DOT_PATH can be used to specify the path where the dot tool can be \r
+# found. If left blank, it is assumed the dot tool can be found in the path.\r
+\r
+DOT_PATH               = "C:/Program Files/Graphviz2.18/bin"\r
+\r
+# The DOTFILE_DIRS tag can be used to specify one or more directories that \r
+# contain dot files that are included in the documentation (see the \r
+# \dotfile command).\r
+\r
+DOTFILE_DIRS           = \r
+\r
+# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of \r
+# nodes that will be shown in the graph. If the number of nodes in a graph \r
+# becomes larger than this value, doxygen will truncate the graph, which is \r
+# visualized by representing a node as a red box. Note that doxygen if the \r
+# number of direct children of the root node in a graph is already larger than \r
+# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note \r
+# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.\r
+\r
+DOT_GRAPH_MAX_NODES    = 15\r
+\r
+# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the \r
+# graphs generated by dot. A depth value of 3 means that only nodes reachable \r
+# from the root by following a path via at most 3 edges will be shown. Nodes \r
+# that lay further from the root node will be omitted. Note that setting this \r
+# option to 1 or 2 may greatly reduce the computation time needed for large \r
+# code bases. Also note that the size of a graph can be further restricted by \r
+# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.\r
+\r
+MAX_DOT_GRAPH_DEPTH    = 2\r
+\r
+# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent \r
+# background. This is disabled by default, because dot on Windows does not \r
+# seem to support this out of the box. Warning: Depending on the platform used, \r
+# enabling this option may lead to badly anti-aliased labels on the edges of \r
+# a graph (i.e. they become hard to read).\r
+\r
+DOT_TRANSPARENT        = YES\r
+\r
+# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output \r
+# files in one run (i.e. multiple -o and -T options on the command line). This \r
+# makes dot run faster, but since only newer versions of dot (>1.8.10) \r
+# support this, this feature is disabled by default.\r
+\r
+DOT_MULTI_TARGETS      = NO\r
+\r
+# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will \r
+# generate a legend page explaining the meaning of the various boxes and \r
+# arrows in the dot generated graphs.\r
+\r
+GENERATE_LEGEND        = YES\r
+\r
+# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will \r
+# remove the intermediate dot files that are used to generate \r
+# the various graphs.\r
+\r
+DOT_CLEANUP            = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration::additions related to the search engine   \r
+#---------------------------------------------------------------------------\r
+\r
+# The SEARCHENGINE tag specifies whether or not a search engine should be \r
+# used. If set to NO the values of all tags below this one will be ignored.\r
+\r
+SEARCHENGINE           = NO\r
diff --git a/Demos/Device/ClassDriver/MIDI/MIDI.aps b/Demos/Device/ClassDriver/MIDI/MIDI.aps
new file mode 100644 (file)
index 0000000..e61e770
--- /dev/null
@@ -0,0 +1 @@
+<AVRStudio><MANAGEMENT><ProjectName>MIDI</ProjectName><Created>30-Sep-2008 14:13:12</Created><LastEdit>30-Sep-2008 14:13:33</LastEdit><ICON>241</ICON><ProjectType>0</ProjectType><Created>30-Sep-2008 14:13:12</Created><Version>4</Version><Build>4, 14, 0, 589</Build><ProjectTypeName>AVR GCC</ProjectTypeName></MANAGEMENT><CODE_CREATION><ObjectFile></ObjectFile><EntryFile></EntryFile><SaveFolder>C:\Users\Dean\Documents\Electronics\Projects\WORK\MyUSBWORK\Demos\MIDI\</SaveFolder></CODE_CREATION><DEBUG_TARGET><CURRENT_TARGET></CURRENT_TARGET><CURRENT_PART></CURRENT_PART><BREAKPOINTS></BREAKPOINTS><IO_EXPAND><HIDE>false</HIDE></IO_EXPAND><REGISTERNAMES><Register>R00</Register><Register>R01</Register><Register>R02</Register><Register>R03</Register><Register>R04</Register><Register>R05</Register><Register>R06</Register><Register>R07</Register><Register>R08</Register><Register>R09</Register><Register>R10</Register><Register>R11</Register><Register>R12</Register><Register>R13</Register><Register>R14</Register><Register>R15</Register><Register>R16</Register><Register>R17</Register><Register>R18</Register><Register>R19</Register><Register>R20</Register><Register>R21</Register><Register>R22</Register><Register>R23</Register><Register>R24</Register><Register>R25</Register><Register>R26</Register><Register>R27</Register><Register>R28</Register><Register>R29</Register><Register>R30</Register><Register>R31</Register></REGISTERNAMES><COM>Auto</COM><COMType>0</COMType><WATCHNUM>0</WATCHNUM><WATCHNAMES><Pane0></Pane0><Pane1></Pane1><Pane2></Pane2><Pane3></Pane3></WATCHNAMES><BreakOnTrcaeFull>0</BreakOnTrcaeFull></DEBUG_TARGET><Debugger><Triggers></Triggers></Debugger><AVRGCCPLUGIN><FILES><SOURCEFILE>Descriptors.c</SOURCEFILE><SOURCEFILE>MIDI.c</SOURCEFILE><HEADERFILE>Descriptors.h</HEADERFILE><HEADERFILE>MIDI.h</HEADERFILE><OTHERFILE>makefile</OTHERFILE></FILES><CONFIGS><CONFIG><NAME>default</NAME><USESEXTERNALMAKEFILE>YES</USESEXTERNALMAKEFILE><EXTERNALMAKEFILE>makefile</EXTERNALMAKEFILE><PART>atmega128</PART><HEX>1</HEX><LIST>1</LIST><MAP>1</MAP><OUTPUTFILENAME>MIDI.elf</OUTPUTFILENAME><OUTPUTDIR>default\</OUTPUTDIR><ISDIRTY>1</ISDIRTY><OPTIONS/><INCDIRS/><LIBDIRS/><LIBS/><LINKOBJECTS/><OPTIONSFORALL>-Wall -gdwarf-2 -std=gnu99 -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums</OPTIONSFORALL><LINKEROPTIONS></LINKEROPTIONS><SEGMENTS/></CONFIG></CONFIGS><LASTCONFIG>default</LASTCONFIG><USES_WINAVR>1</USES_WINAVR><GCC_LOC>C:\WinAVR-20080512\bin\avr-gcc.exe</GCC_LOC><MAKE_LOC>C:\WinAVR-20080512\utils\bin\make.exe</MAKE_LOC></AVRGCCPLUGIN><IOView><usergroups/><sort sorted="0" column="0" ordername="0" orderaddress="0" ordergroup="0"/></IOView><Files></Files><Events><Bookmarks></Bookmarks></Events><Trace><Filters></Filters></Trace></AVRStudio>\r
diff --git a/Demos/Device/ClassDriver/MIDI/MIDI.c b/Demos/Device/ClassDriver/MIDI/MIDI.c
new file mode 100644 (file)
index 0000000..8881d1d
--- /dev/null
@@ -0,0 +1,177 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  Main source file for the MIDI demo. This file contains the main tasks of\r
+ *  the demo and is responsible for the initial application hardware configuration.\r
+ */\r
+\r
+#include "MIDI.h"\r
+\r
+/** LUFA MIDI Class driver interface configuration and state information. This structure is\r
+ *  passed to all MIDI Class driver functions, so that multiple instances of the same class\r
+ *  within a device can be differentiated from one another.\r
+ */\r
+USB_ClassInfo_MIDI_t Keyboard_MIDI_Interface =\r
+       {\r
+               .StreamingInterfaceNumber = 1,\r
+\r
+               .DataINEndpointNumber     = MIDI_STREAM_IN_EPNUM,\r
+               .DataINEndpointSize       = MIDI_STREAM_EPSIZE,\r
+\r
+               .DataOUTEndpointNumber    = MIDI_STREAM_OUT_EPNUM,\r
+               .DataOUTEndpointSize      = MIDI_STREAM_EPSIZE,\r
+       };\r
+\r
+/** Main program entry point. This routine contains the overall program flow, including initial\r
+ *  setup of all components and the main program loop.\r
+ */\r
+int main(void)\r
+{\r
+       SetupHardware();\r
+\r
+       LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);\r
+       \r
+       for (;;)\r
+       {\r
+               CheckJoystickMovement();\r
+       \r
+               USB_MIDI_USBTask(&Keyboard_MIDI_Interface);\r
+               USB_USBTask();\r
+       }\r
+}\r
+\r
+/** Configures the board hardware and chip peripherals for the demo's functionality. */\r
+void SetupHardware(void)\r
+{\r
+       /* Disable watchdog if enabled by bootloader/fuses */\r
+       MCUSR &= ~(1 << WDRF);\r
+       wdt_disable();\r
+\r
+       /* Disable clock division */\r
+       clock_prescale_set(clock_div_1);\r
+       \r
+       /* Hardware Initialization */\r
+       Joystick_Init();\r
+       LEDs_Init();\r
+       Buttons_Init();\r
+       USB_Init();\r
+}\r
+\r
+/** Checks for changes in the position of the board joystick, sending MIDI events to the host upon each change. */\r
+void CheckJoystickMovement(void)\r
+{\r
+       static uint8_t PrevJoystickStatus;\r
+\r
+       uint8_t MIDICommand = 0;\r
+       uint8_t MIDIPitch;\r
+       \r
+       /* Get current joystick mask, XOR with previous to detect joystick changes */\r
+       uint8_t JoystickStatus  = Joystick_GetStatus();\r
+       uint8_t JoystickChanges = (JoystickStatus ^ PrevJoystickStatus);\r
+               \r
+       /* Get board button status - if pressed use channel 10 (percussion), otherwise use channel 1 */\r
+       uint8_t Channel = ((Buttons_GetStatus() & BUTTONS_BUTTON1) ? MIDI_CHANNEL(10) : MIDI_CHANNEL(1));\r
+\r
+       if (JoystickChanges & JOY_LEFT)\r
+       {\r
+               MIDICommand = ((JoystickStatus & JOY_LEFT)? MIDI_COMMAND_NOTE_ON : MIDI_COMMAND_NOTE_OFF);\r
+               MIDIPitch   = 0x3C;\r
+       }\r
+\r
+       if (JoystickChanges & JOY_UP)\r
+       {\r
+               MIDICommand = ((JoystickStatus & JOY_UP)? MIDI_COMMAND_NOTE_ON : MIDI_COMMAND_NOTE_OFF);\r
+               MIDIPitch   = 0x3D;\r
+       }\r
+\r
+       if (JoystickChanges & JOY_RIGHT)\r
+       {\r
+               MIDICommand = ((JoystickStatus & JOY_RIGHT)? MIDI_COMMAND_NOTE_ON : MIDI_COMMAND_NOTE_OFF);\r
+               MIDIPitch   = 0x3E;\r
+       }\r
+       \r
+       if (JoystickChanges & JOY_DOWN)\r
+       {\r
+               MIDICommand = ((JoystickStatus & JOY_DOWN)? MIDI_COMMAND_NOTE_ON : MIDI_COMMAND_NOTE_OFF);\r
+               MIDIPitch   = 0x3F;\r
+       }\r
+\r
+       if (JoystickChanges & JOY_PRESS)\r
+       {\r
+               MIDICommand = ((JoystickStatus & JOY_PRESS)? MIDI_COMMAND_NOTE_ON : MIDI_COMMAND_NOTE_OFF);\r
+               MIDIPitch   = 0x3B;\r
+       }\r
+       \r
+       if (MIDICommand)\r
+       {\r
+               USB_MIDI_EventPacket_t MIDIEvent = (USB_MIDI_EventPacket_t)\r
+                       {\r
+                               .CableNumber = 0,\r
+                               .Command     = MIDICommand,\r
+                               \r
+                               .Data1       = (MIDICommand << 4) | Channel,\r
+                               .Data2       = MIDIPitch,\r
+                               .Data3       = MIDI_STANDARD_VELOCITY,                  \r
+                       };\r
+                       \r
+               USB_MIDI_SendEventPacket(&Keyboard_MIDI_Interface, &MIDIEvent);\r
+       }\r
+\r
+       PrevJoystickStatus = JoystickStatus;\r
+}\r
+\r
+/** Event handler for the library USB Connection event. */\r
+void EVENT_USB_Connect(void)\r
+{\r
+       LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING);\r
+}\r
+\r
+/** Event handler for the library USB Disconnection event. */\r
+void EVENT_USB_Disconnect(void)\r
+{\r
+       LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);\r
+}\r
+\r
+/** Event handler for the library USB Configuration Changed event. */\r
+void EVENT_USB_ConfigurationChanged(void)\r
+{\r
+       LEDs_SetAllLEDs(LEDMASK_USB_READY);\r
+       \r
+       if (!(USB_MIDI_ConfigureEndpoints(&Keyboard_MIDI_Interface)))\r
+         LEDs_SetAllLEDs(LEDMASK_USB_ERROR);\r
+}\r
+\r
+/** Event handler for the library USB Unhandled Control Packet event. */\r
+void EVENT_USB_UnhandledControlPacket(void)\r
+{\r
+       USB_MIDI_ProcessControlPacket(&Keyboard_MIDI_Interface);\r
+}\r
diff --git a/Demos/Device/ClassDriver/MIDI/MIDI.h b/Demos/Device/ClassDriver/MIDI/MIDI.h
new file mode 100644 (file)
index 0000000..913b318
--- /dev/null
@@ -0,0 +1,77 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  Header file for AudioOutput.c.\r
+ */\r
\r
+#ifndef _AUDIO_OUTPUT_H_\r
+#define _AUDIO_OUTPUT_H_\r
+\r
+       /* Includes: */\r
+               #include <avr/io.h>\r
+               #include <avr/wdt.h>\r
+               #include <avr/power.h>\r
+               #include <stdbool.h>\r
+\r
+               #include "Descriptors.h"\r
+                               \r
+               #include <LUFA/Version.h>\r
+               #include <LUFA/Drivers/Board/LEDs.h>\r
+               #include <LUFA/Drivers/Board/Joystick.h>\r
+               #include <LUFA/Drivers/Board/Buttons.h>\r
+               #include <LUFA/Drivers/Peripheral/ADC.h>\r
+               #include <LUFA/Drivers/USB/USB.h>\r
+               #include <LUFA/Drivers/USB/Class/Device/MIDI.h>\r
+\r
+       /* Macros: */\r
+               /** LED mask for the library LED driver, to indicate that the USB interface is not ready. */\r
+               #define LEDMASK_USB_NOTREADY      LEDS_LED1\r
+\r
+               /** LED mask for the library LED driver, to indicate that the USB interface is enumerating. */\r
+               #define LEDMASK_USB_ENUMERATING  (LEDS_LED2 | LEDS_LED3)\r
+\r
+               /** LED mask for the library LED driver, to indicate that the USB interface is ready. */\r
+               #define LEDMASK_USB_READY        (LEDS_LED2 | LEDS_LED4)\r
+\r
+               /** LED mask for the library LED driver, to indicate that an error has occurred in the USB interface. */\r
+               #define LEDMASK_USB_ERROR        (LEDS_LED1 | LEDS_LED3)\r
+               \r
+       /* Function Prototypes: */\r
+               void SetupHardware(void);\r
+               void CheckJoystickMovement(void);\r
+               \r
+               void EVENT_USB_Connect(void);\r
+               void EVENT_USB_Disconnect(void);\r
+               void EVENT_USB_ConfigurationChanged(void);\r
+               void EVENT_USB_UnhandledControlPacket(void);\r
+               \r
+#endif\r
diff --git a/Demos/Device/ClassDriver/MIDI/MIDI.txt b/Demos/Device/ClassDriver/MIDI/MIDI.txt
new file mode 100644 (file)
index 0000000..5a31350
--- /dev/null
@@ -0,0 +1,65 @@
+/** \file\r
+ *\r
+ *  This file contains special DoxyGen information for the generation of the main page and other special\r
+ *  documentation pages. It is not a project source file.\r
+ */\r
\r
+/** \mainpage MIDI Input Device Demo\r
+ *\r
+ *  \section SSec_Info USB Information:\r
+ *\r
+ *  The following table gives a rundown of the USB utilization of this demo.\r
+ *\r
+ *  <table>\r
+ *   <tr>\r
+ *    <td><b>USB Mode:</b></td>\r
+ *    <td>Device</td>\r
+ *   </tr>\r
+ *   <tr>\r
+ *    <td><b>USB Class:</b></td>\r
+ *    <td>Audio Class</td>\r
+ *   </tr>\r
+ *   <tr> \r
+ *    <td><b>USB Subclass:</b></td>\r
+ *    <td>Standard Audio Device</td>\r
+ *   </tr>\r
+ *   <tr>\r
+ *    <td><b>Relevant Standards:</b></td>\r
+ *    <td>USBIF Audio Class Specification</td>\r
+ *    <td>USB-MIDI Audio Class Extension Specification</td>\r
+ *    <td>General MIDI Specification</td>\r
+ *   </tr>\r
+ *   <tr>\r
+ *    <td><b>Usable Speeds:</b></td>\r
+ *    <td>Full Speed Mode</td>\r
+ *   </tr>\r
+ *  </table>\r
+ *\r
+ *  \section SSec_Description Project Description: \r
+ *\r
+ *  MIDI demonstration application. This gives a simple reference\r
+ *  application for implementing the USB-MIDI class in USB devices.\r
+ *  It is built upon the USB Audio class.\r
+ *  \r
+ *  Joystick movements are translated into note on/off messages and\r
+ *  are sent to the host PC as MIDI streams which can be read by any\r
+ *  MIDI program supporting MIDI IN devices.\r
+ *  \r
+ *  If the HWB is not pressed, channel 1 (default piano) is used. If\r
+ *  the HWB is set, then channel 10 (default percussion) is selected.\r
+ *  \r
+ *  This device implements MIDI-THRU mode, with the IN MIDI data being\r
+ *  generated by the device itself. OUT MIDI data is discarded.\r
+ *\r
+ *  \section SSec_Options Project Options\r
+ *\r
+ *  The following defines can be found in this demo, which can control the demo behaviour when defined, or changed in value.\r
+ *\r
+ *  <table>\r
+ *   <tr>\r
+ *    <td>\r
+ *     None\r
+ *    </td>\r
+ *   </tr>\r
+ *  </table>\r
+ */\r
diff --git a/Demos/Device/ClassDriver/MIDI/makefile b/Demos/Device/ClassDriver/MIDI/makefile
new file mode 100644 (file)
index 0000000..f850421
--- /dev/null
@@ -0,0 +1,733 @@
+# Hey Emacs, this is a -*- makefile -*-\r
+#----------------------------------------------------------------------------\r
+# WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al.\r
+#  >> Modified for use with the LUFA project. <<\r
+#\r
+# Released to the Public Domain\r
+#\r
+# Additional material for this makefile was written by:\r
+# Peter Fleury\r
+# Tim Henigan\r
+# Colin O'Flynn\r
+# Reiner Patommel\r
+# Markus Pfaff\r
+# Sander Pool\r
+# Frederik Rouleau\r
+# Carlos Lamas\r
+# Dean Camera\r
+# Opendous Inc.\r
+# Denver Gingerich\r
+#\r
+#----------------------------------------------------------------------------\r
+# On command line:\r
+#\r
+# make all = Make software.\r
+#\r
+# make clean = Clean out built project files.\r
+#\r
+# make coff = Convert ELF to AVR COFF.\r
+#\r
+# make extcoff = Convert ELF to AVR Extended COFF.\r
+#\r
+# make program = Download the hex file to the device, using avrdude.\r
+#                Please customize the avrdude settings below first!\r
+#\r
+# make dfu = Download the hex file to the device, using dfu-programmer (must\r
+#            have dfu-programmer installed).\r
+#\r
+# make flip = Download the hex file to the device, using Atmel FLIP (must\r
+#             have Atmel FLIP installed).\r
+#\r
+# make dfu-ee = Download the eeprom file to the device, using dfu-programmer\r
+#               (must have dfu-programmer installed).\r
+#\r
+# make flip-ee = Download the eeprom file to the device, using Atmel FLIP\r
+#                (must have Atmel FLIP installed).\r
+#\r
+# make doxygen = Generate DoxyGen documentation for the project (must have\r
+#                DoxyGen installed)\r
+#\r
+# make debug = Start either simulavr or avarice as specified for debugging, \r
+#              with avr-gdb or avr-insight as the front end for debugging.\r
+#\r
+# make filename.s = Just compile filename.c into the assembler code only.\r
+#\r
+# make filename.i = Create a preprocessed source file for use in submitting\r
+#                   bug reports to the GCC project.\r
+#\r
+# To rebuild project do "make clean" then "make all".\r
+#----------------------------------------------------------------------------\r
+\r
+\r
+# MCU name\r
+MCU = at90usb1287\r
+\r
+\r
+# Target board (see library "Board Types" documentation, USER or blank for projects not requiring\r
+# LUFA board drivers). If USER is selected, put custom board drivers in a directory called \r
+# "Board" inside the application directory.\r
+BOARD  = USBKEY\r
+\r
+\r
+# Processor frequency.\r
+#     This will define a symbol, F_CPU, in all source code files equal to the \r
+#     processor frequency. You can then use this symbol in your source code to \r
+#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done\r
+#     automatically to create a 32-bit value in your source code.\r
+#     Typical values are:\r
+#         F_CPU =  1000000\r
+#         F_CPU =  1843200\r
+#         F_CPU =  2000000\r
+#         F_CPU =  3686400\r
+#         F_CPU =  4000000\r
+#         F_CPU =  7372800\r
+#         F_CPU =  8000000\r
+#         F_CPU = 11059200\r
+#         F_CPU = 14745600\r
+#         F_CPU = 16000000\r
+#         F_CPU = 18432000\r
+#         F_CPU = 20000000\r
+F_CPU = 8000000\r
+\r
+\r
+# Input clock frequency.\r
+#     This will define a symbol, F_CLOCK, in all source code files equal to the \r
+#     input clock frequency (before any prescaling is performed). This value may\r
+#     differ from F_CPU if prescaling is used on the latter, and is required as the\r
+#     raw input clock is fed directly to the PLL sections of the AVR for high speed\r
+#     clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'\r
+#     at the end, this will be done automatically to create a 32-bit value in your\r
+#     source code.\r
+#\r
+#     If no clock division is performed on the input clock inside the AVR (via the\r
+#     CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.\r
+F_CLOCK = 8000000\r
+\r
+\r
+# Output format. (can be srec, ihex, binary)\r
+FORMAT = ihex\r
+\r
+\r
+# Target file name (without extension).\r
+TARGET = MIDI\r
+\r
+\r
+# Object files directory\r
+#     To put object files in current directory, use a dot (.), do NOT make\r
+#     this an empty or blank macro!\r
+OBJDIR = .\r
+\r
+\r
+# Path to the LUFA library\r
+LUFA_PATH = ../../..\r
+\r
+\r
+# List C source files here. (C dependencies are automatically generated.)\r
+SRC = $(TARGET).c                                                 \\r
+         Descriptors.c                                               \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/DevChapter9.c        \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Endpoint.c           \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Host.c               \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/HostChapter9.c       \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/LowLevel.c           \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Pipe.c               \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/Events.c            \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBInterrupt.c      \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBTask.c           \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/ConfigDescriptor.c  \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/Class/Device/MIDI.c           \\r
+\r
+\r
+# List C++ source files here. (C dependencies are automatically generated.)\r
+CPPSRC = \r
+\r
+\r
+# List Assembler source files here.\r
+#     Make them always end in a capital .S.  Files ending in a lowercase .s\r
+#     will not be considered source files but generated files (assembler\r
+#     output from the compiler), and will be deleted upon "make clean"!\r
+#     Even though the DOS/Win* filesystem matches both .s and .S the same,\r
+#     it will preserve the spelling of the filenames, and gcc itself does\r
+#     care about how the name is spelled on its command-line.\r
+ASRC =\r
+\r
+\r
+# Optimization level, can be [0, 1, 2, 3, s]. \r
+#     0 = turn off optimization. s = optimize for size.\r
+#     (Note: 3 is not always the best optimization level. See avr-libc FAQ.)\r
+OPT = s\r
+\r
+\r
+# Debugging format.\r
+#     Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs.\r
+#     AVR Studio 4.10 requires dwarf-2.\r
+#     AVR [Extended] COFF format requires stabs, plus an avr-objcopy run.\r
+DEBUG = dwarf-2\r
+\r
+\r
+# List any extra directories to look for include files here.\r
+#     Each directory must be seperated by a space.\r
+#     Use forward slashes for directory separators.\r
+#     For a directory that has spaces, enclose it in quotes.\r
+EXTRAINCDIRS = $(LUFA_PATH)/\r
+\r
+\r
+# Compiler flag to set the C Standard level.\r
+#     c89   = "ANSI" C\r
+#     gnu89 = c89 plus GCC extensions\r
+#     c99   = ISO C99 standard (not yet fully implemented)\r
+#     gnu99 = c99 plus GCC extensions\r
+CSTANDARD = -std=gnu99\r
+\r
+\r
+# Place -D or -U options here for C sources\r
+CDEFS  = -DF_CPU=$(F_CPU)UL -DF_CLOCK=$(F_CLOCK)UL -DBOARD=BOARD_$(BOARD)\r
+CDEFS += -DUSE_NONSTANDARD_DESCRIPTOR_NAMES -DUSB_DEVICE_ONLY\r
+CDEFS += -DFIXED_CONTROL_ENDPOINT_SIZE=8 -DUSE_SINGLE_DEVICE_CONFIGURATION\r
+CDEFS += -DUSE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)"\r
+\r
+\r
+# Place -D or -U options here for ASM sources\r
+ADEFS = -DF_CPU=$(F_CPU)\r
+\r
+\r
+# Place -D or -U options here for C++ sources\r
+CPPDEFS = -DF_CPU=$(F_CPU)UL\r
+#CPPDEFS += -D__STDC_LIMIT_MACROS\r
+#CPPDEFS += -D__STDC_CONSTANT_MACROS\r
+\r
+\r
+\r
+#---------------- Compiler Options C ----------------\r
+#  -g*:          generate debugging information\r
+#  -O*:          optimization level\r
+#  -f...:        tuning, see GCC manual and avr-libc documentation\r
+#  -Wall...:     warning level\r
+#  -Wa,...:      tell GCC to pass this to the assembler.\r
+#    -adhlns...: create assembler listing\r
+CFLAGS = -g$(DEBUG)\r
+CFLAGS += $(CDEFS)\r
+CFLAGS += -O$(OPT)\r
+CFLAGS += -funsigned-char\r
+CFLAGS += -funsigned-bitfields\r
+CFLAGS += -ffunction-sections\r
+CFLAGS += -fpack-struct\r
+CFLAGS += -fshort-enums\r
+CFLAGS += -finline-limit=20\r
+CFLAGS += -Wall\r
+CFLAGS += -Wstrict-prototypes\r
+CFLAGS += -Wundef\r
+#CFLAGS += -fno-unit-at-a-time\r
+#CFLAGS += -Wunreachable-code\r
+#CFLAGS += -Wsign-compare\r
+CFLAGS += -Wa,-adhlns=$(<:%.c=$(OBJDIR)/%.lst)\r
+CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))\r
+CFLAGS += $(CSTANDARD)\r
+\r
+\r
+#---------------- Compiler Options C++ ----------------\r
+#  -g*:          generate debugging information\r
+#  -O*:          optimization level\r
+#  -f...:        tuning, see GCC manual and avr-libc documentation\r
+#  -Wall...:     warning level\r
+#  -Wa,...:      tell GCC to pass this to the assembler.\r
+#    -adhlns...: create assembler listing\r
+CPPFLAGS = -g$(DEBUG)\r
+CPPFLAGS += $(CPPDEFS)\r
+CPPFLAGS += -O$(OPT)\r
+CPPFLAGS += -funsigned-char\r
+CPPFLAGS += -funsigned-bitfields\r
+CPPFLAGS += -fpack-struct\r
+CPPFLAGS += -fshort-enums\r
+CPPFLAGS += -fno-exceptions\r
+CPPFLAGS += -Wall\r
+CFLAGS += -Wundef\r
+#CPPFLAGS += -mshort-calls\r
+#CPPFLAGS += -fno-unit-at-a-time\r
+#CPPFLAGS += -Wstrict-prototypes\r
+#CPPFLAGS += -Wunreachable-code\r
+#CPPFLAGS += -Wsign-compare\r
+CPPFLAGS += -Wa,-adhlns=$(<:%.cpp=$(OBJDIR)/%.lst)\r
+CPPFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))\r
+#CPPFLAGS += $(CSTANDARD)\r
+\r
+\r
+#---------------- Assembler Options ----------------\r
+#  -Wa,...:   tell GCC to pass this to the assembler.\r
+#  -adhlns:   create listing\r
+#  -gstabs:   have the assembler create line number information; note that\r
+#             for use in COFF files, additional information about filenames\r
+#             and function names needs to be present in the assembler source\r
+#             files -- see avr-libc docs [FIXME: not yet described there]\r
+#  -listing-cont-lines: Sets the maximum number of continuation lines of hex \r
+#       dump that will be displayed for a given single line of source input.\r
+ASFLAGS = $(ADEFS) -Wa,-adhlns=$(<:%.S=$(OBJDIR)/%.lst),-gstabs,--listing-cont-lines=100\r
+\r
+\r
+#---------------- Library Options ----------------\r
+# Minimalistic printf version\r
+PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min\r
+\r
+# Floating point printf version (requires MATH_LIB = -lm below)\r
+PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt\r
+\r
+# If this is left blank, then it will use the Standard printf version.\r
+PRINTF_LIB = \r
+#PRINTF_LIB = $(PRINTF_LIB_MIN)\r
+#PRINTF_LIB = $(PRINTF_LIB_FLOAT)\r
+\r
+\r
+# Minimalistic scanf version\r
+SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min\r
+\r
+# Floating point + %[ scanf version (requires MATH_LIB = -lm below)\r
+SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt\r
+\r
+# If this is left blank, then it will use the Standard scanf version.\r
+SCANF_LIB = \r
+#SCANF_LIB = $(SCANF_LIB_MIN)\r
+#SCANF_LIB = $(SCANF_LIB_FLOAT)\r
+\r
+\r
+MATH_LIB = -lm\r
+\r
+\r
+# List any extra directories to look for libraries here.\r
+#     Each directory must be seperated by a space.\r
+#     Use forward slashes for directory separators.\r
+#     For a directory that has spaces, enclose it in quotes.\r
+EXTRALIBDIRS = \r
+\r
+\r
+\r
+#---------------- External Memory Options ----------------\r
+\r
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),\r
+# used for variables (.data/.bss) and heap (malloc()).\r
+#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff\r
+\r
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),\r
+# only used for heap (malloc()).\r
+#EXTMEMOPTS = -Wl,--section-start,.data=0x801100,--defsym=__heap_end=0x80ffff\r
+\r
+EXTMEMOPTS =\r
+\r
+\r
+\r
+#---------------- Linker Options ----------------\r
+#  -Wl,...:     tell GCC to pass this to linker.\r
+#    -Map:      create map file\r
+#    --cref:    add cross reference to  map file\r
+LDFLAGS = -Wl,-Map=$(TARGET).map,--cref\r
+LDFLAGS += -Wl,--relax \r
+LDFLAGS += -Wl,--gc-sections\r
+LDFLAGS += $(EXTMEMOPTS)\r
+LDFLAGS += $(patsubst %,-L%,$(EXTRALIBDIRS))\r
+LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)\r
+#LDFLAGS += -T linker_script.x\r
+\r
+\r
+\r
+#---------------- Programming Options (avrdude) ----------------\r
+\r
+# Programming hardware: alf avr910 avrisp bascom bsd \r
+# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500\r
+#\r
+# Type: avrdude -c ?\r
+# to get a full listing.\r
+#\r
+AVRDUDE_PROGRAMMER = jtagmkII\r
+\r
+# com1 = serial port. Use lpt1 to connect to parallel port.\r
+AVRDUDE_PORT = usb\r
+\r
+AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex\r
+#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep\r
+\r
+\r
+# Uncomment the following if you want avrdude's erase cycle counter.\r
+# Note that this counter needs to be initialized first using -Yn,\r
+# see avrdude manual.\r
+#AVRDUDE_ERASE_COUNTER = -y\r
+\r
+# Uncomment the following if you do /not/ wish a verification to be\r
+# performed after programming the device.\r
+#AVRDUDE_NO_VERIFY = -V\r
+\r
+# Increase verbosity level.  Please use this when submitting bug\r
+# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude> \r
+# to submit bug reports.\r
+#AVRDUDE_VERBOSE = -v -v\r
+\r
+AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)\r
+AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY)\r
+AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE)\r
+AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER)\r
+\r
+\r
+\r
+#---------------- Debugging Options ----------------\r
+\r
+# For simulavr only - target MCU frequency.\r
+DEBUG_MFREQ = $(F_CPU)\r
+\r
+# Set the DEBUG_UI to either gdb or insight.\r
+# DEBUG_UI = gdb\r
+DEBUG_UI = insight\r
+\r
+# Set the debugging back-end to either avarice, simulavr.\r
+DEBUG_BACKEND = avarice\r
+#DEBUG_BACKEND = simulavr\r
+\r
+# GDB Init Filename.\r
+GDBINIT_FILE = __avr_gdbinit\r
+\r
+# When using avarice settings for the JTAG\r
+JTAG_DEV = /dev/com1\r
+\r
+# Debugging port used to communicate between GDB / avarice / simulavr.\r
+DEBUG_PORT = 4242\r
+\r
+# Debugging host used to communicate between GDB / avarice / simulavr, normally\r
+#     just set to localhost unless doing some sort of crazy debugging when \r
+#     avarice is running on a different computer.\r
+DEBUG_HOST = localhost\r
+\r
+\r
+\r
+#============================================================================\r
+\r
+\r
+# Define programs and commands.\r
+SHELL = sh\r
+CC = avr-gcc\r
+OBJCOPY = avr-objcopy\r
+OBJDUMP = avr-objdump\r
+SIZE = avr-size\r
+AR = avr-ar rcs\r
+NM = avr-nm\r
+AVRDUDE = avrdude\r
+REMOVE = rm -f\r
+REMOVEDIR = rm -rf\r
+COPY = cp\r
+WINSHELL = cmd\r
+\r
+# Define Messages\r
+# English\r
+MSG_ERRORS_NONE = Errors: none\r
+MSG_BEGIN = -------- begin --------\r
+MSG_END = --------  end  --------\r
+MSG_SIZE_BEFORE = Size before: \r
+MSG_SIZE_AFTER = Size after:\r
+MSG_COFF = Converting to AVR COFF:\r
+MSG_EXTENDED_COFF = Converting to AVR Extended COFF:\r
+MSG_FLASH = Creating load file for Flash:\r
+MSG_EEPROM = Creating load file for EEPROM:\r
+MSG_EXTENDED_LISTING = Creating Extended Listing:\r
+MSG_SYMBOL_TABLE = Creating Symbol Table:\r
+MSG_LINKING = Linking:\r
+MSG_COMPILING = Compiling C:\r
+MSG_COMPILING_CPP = Compiling C++:\r
+MSG_ASSEMBLING = Assembling:\r
+MSG_CLEANING = Cleaning project:\r
+MSG_CREATING_LIBRARY = Creating library:\r
+\r
+\r
+\r
+\r
+# Define all object files.\r
+OBJ = $(SRC:%.c=$(OBJDIR)/%.o) $(CPPSRC:%.cpp=$(OBJDIR)/%.o) $(ASRC:%.S=$(OBJDIR)/%.o) \r
+\r
+# Define all listing files.\r
+LST = $(SRC:%.c=$(OBJDIR)/%.lst) $(CPPSRC:%.cpp=$(OBJDIR)/%.lst) $(ASRC:%.S=$(OBJDIR)/%.lst) \r
+\r
+\r
+# Compiler flags to generate dependency files.\r
+GENDEPFLAGS = -MMD -MP -MF .dep/$(@F).d\r
+\r
+\r
+# Combine all necessary flags and optional flags.\r
+# Add target processor to flags.\r
+ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS)\r
+ALL_CPPFLAGS = -mmcu=$(MCU) -I. -x c++ $(CPPFLAGS) $(GENDEPFLAGS)\r
+ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)\r
+\r
+\r
+\r
+\r
+\r
+# Default target.\r
+all: begin gccversion sizebefore build checkhooks checklibmode checkboard sizeafter end\r
+\r
+# Change the build target to build a HEX file or a library.\r
+build: elf hex eep lss sym\r
+#build: lib\r
+\r
+\r
+elf: $(TARGET).elf\r
+hex: $(TARGET).hex\r
+eep: $(TARGET).eep\r
+lss: $(TARGET).lss\r
+sym: $(TARGET).sym\r
+LIBNAME=lib$(TARGET).a\r
+lib: $(LIBNAME)\r
+\r
+\r
+\r
+# Eye candy.\r
+# AVR Studio 3.x does not check make's exit code but relies on\r
+# the following magic strings to be generated by the compile job.\r
+begin:\r
+       @echo\r
+       @echo $(MSG_BEGIN)\r
+\r
+end:\r
+       @echo $(MSG_END)\r
+       @echo\r
+\r
+\r
+# Display size of file.\r
+HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex\r
+ELFSIZE = $(SIZE) $(MCU_FLAG) $(FORMAT_FLAG) $(TARGET).elf\r
+MCU_FLAG = $(shell $(SIZE) --help | grep -- --mcu > /dev/null && echo --mcu=$(MCU) )\r
+FORMAT_FLAG = $(shell $(SIZE) --help | grep -- --format=.*avr > /dev/null && echo --format=avr )\r
+\r
+sizebefore:\r
+       @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \\r
+       2>/dev/null; echo; fi\r
+\r
+sizeafter:\r
+       @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \\r
+       2>/dev/null; echo; fi\r
+\r
+checkhooks: build\r
+       @echo\r
+       @echo ------- Unhooked LUFA Events -------\r
+       @$(shell) (grep -s '^EVENT_.*LUFA/.*\\.o' $(TARGET).map | \\r
+                  cut -d' ' -f1 | cut -d'_' -f2- | grep ".*") || \\r
+                          echo "(None)"\r
+       @echo ------------------------------------\r
+\r
+checklibmode:\r
+       @echo\r
+       @echo ----------- Library Mode -----------\r
+       @$(shell) ($(CC) $(ALL_CFLAGS) -E -dM - < /dev/null \\r
+                 | grep 'USB_\(DEVICE\|HOST\)_ONLY' | cut -d' ' -f2 | grep ".*") \\r
+                 || echo "No specific mode (both device and host mode allowable)."\r
+       @echo ------------------------------------\r
+\r
+checkboard:\r
+       @echo\r
+       @echo ---------- Selected Board ----------\r
+       @echo Selected board model is $(BOARD).\r
+       @echo ------------------------------------\r
+       \r
+# Display compiler version information.\r
+gccversion : \r
+       @$(CC) --version\r
+\r
+\r
+\r
+# Program the device.  \r
+program: $(TARGET).hex $(TARGET).eep\r
+       $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)\r
+\r
+flip: $(TARGET).hex\r
+       batchisp -hardware usb -device $(MCU) -operation erase f\r
+       batchisp -hardware usb -device $(MCU) -operation loadbuffer $(TARGET).hex program\r
+       batchisp -hardware usb -device $(MCU) -operation start reset 0\r
+\r
+dfu: $(TARGET).hex\r
+       dfu-programmer $(MCU) erase\r
+       dfu-programmer $(MCU) flash --debug 1 $(TARGET).hex\r
+       dfu-programmer $(MCU) reset\r
+\r
+flip-ee: $(TARGET).hex $(TARGET).eep\r
+       copy $(TARGET).eep $(TARGET)eep.hex\r
+       batchisp -hardware usb -device $(MCU) -operation memory EEPROM erase\r
+       batchisp -hardware usb -device $(MCU) -operation memory EEPROM loadbuffer $(TARGET)eep.hex program\r
+       batchisp -hardware usb -device $(MCU) -operation start reset 0\r
+\r
+dfu-ee: $(TARGET).hex $(TARGET).eep\r
+       dfu-programmer $(MCU) flash-eeprom --debug 1 --suppress-bootloader-mem $(TARGET).eep\r
+       dfu-programmer $(MCU) reset\r
+\r
+\r
+# Generate avr-gdb config/init file which does the following:\r
+#     define the reset signal, load the target file, connect to target, and set \r
+#     a breakpoint at main().\r
+gdb-config: \r
+       @$(REMOVE) $(GDBINIT_FILE)\r
+       @echo define reset >> $(GDBINIT_FILE)\r
+       @echo SIGNAL SIGHUP >> $(GDBINIT_FILE)\r
+       @echo end >> $(GDBINIT_FILE)\r
+       @echo file $(TARGET).elf >> $(GDBINIT_FILE)\r
+       @echo target remote $(DEBUG_HOST):$(DEBUG_PORT)  >> $(GDBINIT_FILE)\r
+ifeq ($(DEBUG_BACKEND),simulavr)\r
+       @echo load  >> $(GDBINIT_FILE)\r
+endif\r
+       @echo break main >> $(GDBINIT_FILE)\r
+\r
+debug: gdb-config $(TARGET).elf\r
+ifeq ($(DEBUG_BACKEND), avarice)\r
+       @echo Starting AVaRICE - Press enter when "waiting to connect" message displays.\r
+       @$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \\r
+       $(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT)\r
+       @$(WINSHELL) /c pause\r
+\r
+else\r
+       @$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \\r
+       $(DEBUG_MFREQ) --port $(DEBUG_PORT)\r
+endif\r
+       @$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE)\r
+\r
+\r
+\r
+\r
+# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.\r
+COFFCONVERT = $(OBJCOPY) --debugging\r
+COFFCONVERT += --change-section-address .data-0x800000\r
+COFFCONVERT += --change-section-address .bss-0x800000\r
+COFFCONVERT += --change-section-address .noinit-0x800000\r
+COFFCONVERT += --change-section-address .eeprom-0x810000\r
+\r
+\r
+\r
+coff: $(TARGET).elf\r
+       @echo\r
+       @echo $(MSG_COFF) $(TARGET).cof\r
+       $(COFFCONVERT) -O coff-avr $< $(TARGET).cof\r
+\r
+\r
+extcoff: $(TARGET).elf\r
+       @echo\r
+       @echo $(MSG_EXTENDED_COFF) $(TARGET).cof\r
+       $(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof\r
+\r
+\r
+\r
+# Create final output files (.hex, .eep) from ELF output file.\r
+%.hex: %.elf\r
+       @echo\r
+       @echo $(MSG_FLASH) $@\r
+       $(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@\r
+\r
+%.eep: %.elf\r
+       @echo\r
+       @echo $(MSG_EEPROM) $@\r
+       -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \\r
+       --change-section-lma .eeprom=0 --no-change-warnings -O $(FORMAT) $< $@ || exit 0\r
+\r
+# Create extended listing file from ELF output file.\r
+%.lss: %.elf\r
+       @echo\r
+       @echo $(MSG_EXTENDED_LISTING) $@\r
+       $(OBJDUMP) -h -z -S $< > $@\r
+\r
+# Create a symbol table from ELF output file.\r
+%.sym: %.elf\r
+       @echo\r
+       @echo $(MSG_SYMBOL_TABLE) $@\r
+       $(NM) -n $< > $@\r
+\r
+\r
+\r
+# Create library from object files.\r
+.SECONDARY : $(TARGET).a\r
+.PRECIOUS : $(OBJ)\r
+%.a: $(OBJ)\r
+       @echo\r
+       @echo $(MSG_CREATING_LIBRARY) $@\r
+       $(AR) $@ $(OBJ)\r
+\r
+\r
+# Link: create ELF output file from object files.\r
+.SECONDARY : $(TARGET).elf\r
+.PRECIOUS : $(OBJ)\r
+%.elf: $(OBJ)\r
+       @echo\r
+       @echo $(MSG_LINKING) $@\r
+       $(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)\r
+\r
+\r
+# Compile: create object files from C source files.\r
+$(OBJDIR)/%.o : %.c\r
+       @echo\r
+       @echo $(MSG_COMPILING) $<\r
+       $(CC) -c $(ALL_CFLAGS) $< -o $@ \r
+\r
+\r
+# Compile: create object files from C++ source files.\r
+$(OBJDIR)/%.o : %.cpp\r
+       @echo\r
+       @echo $(MSG_COMPILING_CPP) $<\r
+       $(CC) -c $(ALL_CPPFLAGS) $< -o $@ \r
+\r
+\r
+# Compile: create assembler files from C source files.\r
+%.s : %.c\r
+       $(CC) -S $(ALL_CFLAGS) $< -o $@\r
+\r
+\r
+# Compile: create assembler files from C++ source files.\r
+%.s : %.cpp\r
+       $(CC) -S $(ALL_CPPFLAGS) $< -o $@\r
+\r
+\r
+# Assemble: create object files from assembler source files.\r
+$(OBJDIR)/%.o : %.S\r
+       @echo\r
+       @echo $(MSG_ASSEMBLING) $<\r
+       $(CC) -c $(ALL_ASFLAGS) $< -o $@\r
+\r
+\r
+# Create preprocessed source for use in sending a bug report.\r
+%.i : %.c\r
+       $(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ \r
+       \r
+\r
+# Target: clean project.\r
+clean: begin clean_list clean_binary end\r
+\r
+clean_binary:\r
+       $(REMOVE) $(TARGET).hex\r
+       \r
+clean_list:\r
+       @echo $(MSG_CLEANING)\r
+       $(REMOVE) $(TARGET).eep\r
+       $(REMOVE) $(TARGET)eep.hex\r
+       $(REMOVE) $(TARGET).cof\r
+       $(REMOVE) $(TARGET).elf\r
+       $(REMOVE) $(TARGET).map\r
+       $(REMOVE) $(TARGET).sym\r
+       $(REMOVE) $(TARGET).lss\r
+       $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.o)\r
+       $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.lst)\r
+       $(REMOVE) $(SRC:.c=.s)\r
+       $(REMOVE) $(SRC:.c=.d)\r
+       $(REMOVE) $(SRC:.c=.i)\r
+       $(REMOVEDIR) .dep\r
+\r
+\r
+doxygen:\r
+       @echo Generating Project Documentation...\r
+       @doxygen Doxygen.conf\r
+       @echo Documentation Generation Complete.\r
+\r
+clean_doxygen:\r
+       rm -rf Documentation\r
+\r
+# Create object files directory\r
+$(shell mkdir $(OBJDIR) 2>/dev/null)\r
+\r
+\r
+# Include the dependency files.\r
+-include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)\r
+\r
+\r
+# Listing of phony targets.\r
+.PHONY : all checkhooks checklibmode checkboard   \\r
+begin finish end sizebefore sizeafter gccversion  \\r
+build elf hex eep lss sym coff extcoff clean      \\r
+clean_list clean_binary program debug gdb-config  \\r
+doxygen dfu flip flip-ee dfu-ee
\ No newline at end of file
diff --git a/Demos/Device/ClassDriver/MassStorage/Descriptors.c b/Demos/Device/ClassDriver/MassStorage/Descriptors.c
new file mode 100644 (file)
index 0000000..6c02a6c
--- /dev/null
@@ -0,0 +1,223 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  USB Device Descriptors, for library use when in USB device mode. Descriptors are special \r
+ *  computer-readable structures which the host requests upon device enumeration, to determine\r
+ *  the device's capabilities and functions.  \r
+ */\r
+\r
+#include "Descriptors.h"\r
+\r
+/** Device descriptor structure. This descriptor, located in FLASH memory, describes the overall\r
+ *  device characteristics, including the supported USB version, control endpoint size and the\r
+ *  number of device configurations. The descriptor is read out by the USB host when the enumeration\r
+ *  process begins.\r
+ */\r
+USB_Descriptor_Device_t PROGMEM DeviceDescriptor =\r
+{\r
+       .Header                 = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device},\r
+               \r
+       .USBSpecification       = VERSION_BCD(01.10),\r
+       .Class                  = 0x00,\r
+       .SubClass               = 0x00,\r
+       .Protocol               = 0x00,\r
+                               \r
+       .Endpoint0Size          = FIXED_CONTROL_ENDPOINT_SIZE,\r
+               \r
+       .VendorID               = 0x03EB,\r
+       .ProductID              = 0x2045,\r
+       .ReleaseNumber          = 0x0000,\r
+               \r
+       .ManufacturerStrIndex   = 0x01,\r
+       .ProductStrIndex        = 0x02,\r
+       .SerialNumStrIndex      = 0x03,\r
+               \r
+       .NumberOfConfigurations = 1\r
+};\r
+\r
+/** Configuration descriptor structure. This descriptor, located in FLASH memory, describes the usage\r
+ *  of the device in one of its supported configurations, including information about any device interfaces\r
+ *  and endpoints. The descriptor is read out by the USB host during the enumeration process when selecting\r
+ *  a configuration so that the host may correctly communicate with the USB device.\r
+ */\r
+USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =\r
+{\r
+       .Config = \r
+               {\r
+                       .Header                 = {.Size = sizeof(USB_Descriptor_Configuration_Header_t), .Type = DTYPE_Configuration},\r
+\r
+                       .TotalConfigurationSize = sizeof(USB_Descriptor_Configuration_t),\r
+                       .TotalInterfaces        = 1,\r
+                               \r
+                       .ConfigurationNumber    = 1,\r
+                       .ConfigurationStrIndex  = NO_DESCRIPTOR,\r
+                               \r
+                       .ConfigAttributes       = USB_CONFIG_ATTR_BUSPOWERED,\r
+                       \r
+                       .MaxPowerConsumption    = USB_CONFIG_POWER_MA(100)\r
+               },\r
+               \r
+       .Interface = \r
+               {\r
+                       .Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},\r
+\r
+                       .InterfaceNumber        = 0,\r
+                       .AlternateSetting       = 0,\r
+                       \r
+                       .TotalEndpoints         = 2,\r
+                               \r
+                       .Class                  = 0x08,\r
+                       .SubClass               = 0x06,\r
+                       .Protocol               = 0x50,\r
+                               \r
+                       .InterfaceStrIndex      = NO_DESCRIPTOR\r
+               },\r
+\r
+       .DataInEndpoint = \r
+               {\r
+                       .Header                 = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},\r
+\r
+                       .EndpointAddress        = (ENDPOINT_DESCRIPTOR_DIR_IN | MASS_STORAGE_IN_EPNUM),\r
+                       .Attributes             = EP_TYPE_BULK,\r
+                       .EndpointSize           = MASS_STORAGE_IO_EPSIZE,\r
+                       .PollingIntervalMS      = 0x00\r
+               },\r
+\r
+       .DataOutEndpoint = \r
+               {\r
+                       .Header                 = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},\r
+\r
+                       .EndpointAddress        = (ENDPOINT_DESCRIPTOR_DIR_OUT | MASS_STORAGE_OUT_EPNUM),\r
+                       .Attributes             = EP_TYPE_BULK,\r
+                       .EndpointSize           = MASS_STORAGE_IO_EPSIZE,\r
+                       .PollingIntervalMS      = 0x00\r
+               }\r
+};\r
+\r
+/** Language descriptor structure. This descriptor, located in FLASH memory, is returned when the host requests\r
+ *  the string descriptor with index 0 (the first index). It is actually an array of 16-bit integers, which indicate\r
+ *  via the language ID table available at USB.org what languages the device supports for its string descriptors.\r
+ */\r
+USB_Descriptor_String_t PROGMEM LanguageString =\r
+{\r
+       .Header                 = {.Size = USB_STRING_LEN(1), .Type = DTYPE_String},\r
+               \r
+       .UnicodeString          = {LANGUAGE_ID_ENG}\r
+};\r
+\r
+/** Manufacturer descriptor string. This is a Unicode string containing the manufacturer's details in human readable\r
+ *  form, and is read out upon request by the host when the appropriate string ID is requested, listed in the Device\r
+ *  Descriptor.\r
+ */\r
+USB_Descriptor_String_t PROGMEM ManufacturerString =\r
+{\r
+       .Header                 = {.Size = USB_STRING_LEN(11), .Type = DTYPE_String},\r
+               \r
+       .UnicodeString          = L"Dean Camera"\r
+};\r
+\r
+/** Product descriptor string. This is a Unicode string containing the product's details in human readable form,\r
+ *  and is read out upon request by the host when the appropriate string ID is requested, listed in the Device\r
+ *  Descriptor.\r
+ */\r
+USB_Descriptor_String_t PROGMEM ProductString =\r
+{\r
+       .Header                 = {.Size = USB_STRING_LEN(22), .Type = DTYPE_String},\r
+               \r
+       .UnicodeString          = L"LUFA Mass Storage Demo"\r
+};\r
+\r
+/** Serial number descriptor string. This is a Unicode string containing a string of HEX characters at least 12\r
+ *  digits in length to uniquely identify a device when concatenated with the device's Vendor and Product IDs. By\r
+ *  using the unique serial number string to identify a device, the device drivers do not need to be reinstalled\r
+ *  each time the device is inserted into a different USB port on the same system. <b>This should be unique between\r
+ *  devices, or conflicts will occur if two devices sharing the same serial number are inserted into the same system\r
+ *  at the same time.</b>\r
+ */\r
+USB_Descriptor_String_t PROGMEM SerialNumberString =\r
+{\r
+       .Header                 = {.Size = USB_STRING_LEN(12), .Type = DTYPE_String},\r
+               \r
+       .UnicodeString          = L"000000000000"\r
+};\r
+\r
+/** This function is called by the library when in device mode, and must be overridden (see library "USB Descriptors"\r
+ *  documentation) by the application code so that the address and size of a requested descriptor can be given\r
+ *  to the USB library. When the device receives a Get Descriptor request on the control endpoint, this function\r
+ *  is called so that the descriptor details can be passed back and the appropriate descriptor sent back to the\r
+ *  USB host.\r
+ */\r
+uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
+{\r
+       const uint8_t  DescriptorType   = (wValue >> 8);\r
+       const uint8_t  DescriptorNumber = (wValue & 0xFF);\r
+\r
+       void*    Address = NULL;\r
+       uint16_t Size    = NO_DESCRIPTOR;\r
+\r
+       switch (DescriptorType)\r
+       {\r
+               case DTYPE_Device: \r
+                       Address = (void*)&DeviceDescriptor;\r
+                       Size    = sizeof(USB_Descriptor_Device_t);\r
+                       break;\r
+               case DTYPE_Configuration: \r
+                       Address = (void*)&ConfigurationDescriptor;\r
+                       Size    = sizeof(USB_Descriptor_Configuration_t);\r
+                       break;\r
+               case DTYPE_String: \r
+                       switch (DescriptorNumber)\r
+                       {\r
+                               case 0x00: \r
+                                       Address = (void*)&LanguageString;\r
+                                       Size    = pgm_read_byte(&LanguageString.Header.Size);\r
+                                       break;\r
+                               case 0x01: \r
+                                       Address = (void*)&ManufacturerString;\r
+                                       Size    = pgm_read_byte(&ManufacturerString.Header.Size);\r
+                                       break;\r
+                               case 0x02: \r
+                                       Address = (void*)&ProductString;\r
+                                       Size    = pgm_read_byte(&ProductString.Header.Size);\r
+                                       break;\r
+                               case 0x03: \r
+                                       Address = (void*)&SerialNumberString;\r
+                                       Size    = pgm_read_byte(&SerialNumberString.Header.Size);\r
+                                       break;\r
+                       }\r
+                       \r
+                       break;\r
+       }\r
+       \r
+       *DescriptorAddress = Address;\r
+       return Size;\r
+}\r
diff --git a/Demos/Device/ClassDriver/MassStorage/Descriptors.h b/Demos/Device/ClassDriver/MassStorage/Descriptors.h
new file mode 100644 (file)
index 0000000..0fa147b
--- /dev/null
@@ -0,0 +1,71 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  Header file for Descriptors.c.\r
+ */\r
\r
+#ifndef _DESCRIPTORS_H_\r
+#define _DESCRIPTORS_H_\r
+\r
+       /* Includes: */\r
+               #include <LUFA/Drivers/USB/USB.h>\r
+\r
+               #include <avr/pgmspace.h>\r
+\r
+       /* Macros: */\r
+               /** Endpoint number of the Mass Storage device-to-host data IN endpoint. */\r
+               #define MASS_STORAGE_IN_EPNUM          3        \r
+\r
+               /** Endpoint number of the Mass Storage host-to-device data OUT endpoint. */\r
+               #define MASS_STORAGE_OUT_EPNUM         4        \r
+\r
+               /** Size in bytes of the Mass Storage data endpoints. */\r
+               #define MASS_STORAGE_IO_EPSIZE         64\r
+               \r
+       /* Type Defines: */             \r
+               /** Type define for the device configuration descriptor structure. This must be defined in the\r
+                *  application code, as the configuration descriptor contains several sub-descriptors which\r
+                *  vary between devices, and which describe the device's usage to the host.\r
+                */\r
+               typedef struct\r
+               {\r
+                       USB_Descriptor_Configuration_Header_t Config;\r
+                       USB_Descriptor_Interface_t            Interface;\r
+                       USB_Descriptor_Endpoint_t             DataInEndpoint;\r
+                       USB_Descriptor_Endpoint_t             DataOutEndpoint;\r
+               } USB_Descriptor_Configuration_t;\r
+               \r
+       /* Function Prototypes: */\r
+               uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
+                                                                                       ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);\r
+\r
+#endif\r
diff --git a/Demos/Device/ClassDriver/MassStorage/Doxygen.conf b/Demos/Device/ClassDriver/MassStorage/Doxygen.conf
new file mode 100644 (file)
index 0000000..a7b9001
--- /dev/null
@@ -0,0 +1,1485 @@
+# Doxyfile 1.5.7.1\r
+\r
+# This file describes the settings to be used by the documentation system\r
+# doxygen (www.doxygen.org) for a project\r
+#\r
+# All text after a hash (#) is considered a comment and will be ignored\r
+# The format is:\r
+#       TAG = value [value, ...]\r
+# For lists items can also be appended using:\r
+#       TAG += value [value, ...]\r
+# Values that contain spaces should be placed between quotes (" ")\r
+\r
+#---------------------------------------------------------------------------\r
+# Project related configuration options\r
+#---------------------------------------------------------------------------\r
+\r
+# This tag specifies the encoding used for all characters in the config file \r
+# that follow. The default is UTF-8 which is also the encoding used for all \r
+# text before the first occurrence of this tag. Doxygen uses libiconv (or the \r
+# iconv built into libc) for the transcoding. See \r
+# http://www.gnu.org/software/libiconv for the list of possible encodings.\r
+\r
+DOXYFILE_ENCODING      = UTF-8\r
+\r
+# The PROJECT_NAME tag is a single word (or a sequence of words surrounded \r
+# by quotes) that should identify the project.\r
+\r
+PROJECT_NAME           = "LUFA Library - Mass Storage Device Demo"\r
+\r
+# The PROJECT_NUMBER tag can be used to enter a project or revision number. \r
+# This could be handy for archiving the generated documentation or \r
+# if some version control system is used.\r
+\r
+PROJECT_NUMBER         = 0.0.0\r
+\r
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) \r
+# base path where the generated documentation will be put. \r
+# If a relative path is entered, it will be relative to the location \r
+# where doxygen was started. If left blank the current directory will be used.\r
+\r
+OUTPUT_DIRECTORY       = ./Documentation/\r
+\r
+# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create \r
+# 4096 sub-directories (in 2 levels) under the output directory of each output \r
+# format and will distribute the generated files over these directories. \r
+# Enabling this option can be useful when feeding doxygen a huge amount of \r
+# source files, where putting all generated files in the same directory would \r
+# otherwise cause performance problems for the file system.\r
+\r
+CREATE_SUBDIRS         = YES\r
+\r
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all \r
+# documentation generated by doxygen is written. Doxygen will use this \r
+# information to generate all constant output in the proper language. \r
+# The default language is English, other supported languages are: \r
+# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, \r
+# Croatian, Czech, Danish, Dutch, Farsi, Finnish, French, German, Greek, \r
+# Hungarian, Italian, Japanese, Japanese-en (Japanese with English messages), \r
+# Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, Polish, \r
+# Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, Slovene, \r
+# Spanish, Swedish, and Ukrainian.\r
+\r
+OUTPUT_LANGUAGE        = English\r
+\r
+# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will \r
+# include brief member descriptions after the members that are listed in \r
+# the file and class documentation (similar to JavaDoc). \r
+# Set to NO to disable this.\r
+\r
+BRIEF_MEMBER_DESC      = YES\r
+\r
+# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend \r
+# the brief description of a member or function before the detailed description. \r
+# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the \r
+# brief descriptions will be completely suppressed.\r
+\r
+REPEAT_BRIEF           = YES\r
+\r
+# This tag implements a quasi-intelligent brief description abbreviator \r
+# that is used to form the text in various listings. Each string \r
+# in this list, if found as the leading text of the brief description, will be \r
+# stripped from the text and the result after processing the whole list, is \r
+# used as the annotated text. Otherwise, the brief description is used as-is. \r
+# If left blank, the following values are used ("$name" is automatically \r
+# replaced with the name of the entity): "The $name class" "The $name widget" \r
+# "The $name file" "is" "provides" "specifies" "contains" \r
+# "represents" "a" "an" "the"\r
+\r
+ABBREVIATE_BRIEF       = "The $name class" \\r
+                         "The $name widget" \\r
+                         "The $name file" \\r
+                         is \\r
+                         provides \\r
+                         specifies \\r
+                         contains \\r
+                         represents \\r
+                         a \\r
+                         an \\r
+                         the\r
+\r
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then \r
+# Doxygen will generate a detailed section even if there is only a brief \r
+# description.\r
+\r
+ALWAYS_DETAILED_SEC    = NO\r
+\r
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all \r
+# inherited members of a class in the documentation of that class as if those \r
+# members were ordinary class members. Constructors, destructors and assignment \r
+# operators of the base classes will not be shown.\r
+\r
+INLINE_INHERITED_MEMB  = NO\r
+\r
+# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full \r
+# path before files name in the file list and in the header files. If set \r
+# to NO the shortest path that makes the file name unique will be used.\r
+\r
+FULL_PATH_NAMES        = YES\r
+\r
+# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag \r
+# can be used to strip a user-defined part of the path. Stripping is \r
+# only done if one of the specified strings matches the left-hand part of \r
+# the path. The tag can be used to show relative paths in the file list. \r
+# If left blank the directory from which doxygen is run is used as the \r
+# path to strip.\r
+\r
+STRIP_FROM_PATH        = \r
+\r
+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of \r
+# the path mentioned in the documentation of a class, which tells \r
+# the reader which header file to include in order to use a class. \r
+# If left blank only the name of the header file containing the class \r
+# definition is used. Otherwise one should specify the include paths that \r
+# are normally passed to the compiler using the -I flag.\r
+\r
+STRIP_FROM_INC_PATH    = \r
+\r
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter \r
+# (but less readable) file names. This can be useful is your file systems \r
+# doesn't support long names like on DOS, Mac, or CD-ROM.\r
+\r
+SHORT_NAMES            = YES\r
+\r
+# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen \r
+# will interpret the first line (until the first dot) of a JavaDoc-style \r
+# comment as the brief description. If set to NO, the JavaDoc \r
+# comments will behave just like regular Qt-style comments \r
+# (thus requiring an explicit @brief command for a brief description.)\r
+\r
+JAVADOC_AUTOBRIEF      = NO\r
+\r
+# If the QT_AUTOBRIEF tag is set to YES then Doxygen will \r
+# interpret the first line (until the first dot) of a Qt-style \r
+# comment as the brief description. If set to NO, the comments \r
+# will behave just like regular Qt-style comments (thus requiring \r
+# an explicit \brief command for a brief description.)\r
+\r
+QT_AUTOBRIEF           = NO\r
+\r
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen \r
+# treat a multi-line C++ special comment block (i.e. a block of //! or /// \r
+# comments) as a brief description. This used to be the default behaviour. \r
+# The new default is to treat a multi-line C++ comment block as a detailed \r
+# description. Set this tag to YES if you prefer the old behaviour instead.\r
+\r
+MULTILINE_CPP_IS_BRIEF = NO\r
+\r
+# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented \r
+# member inherits the documentation from any documented member that it \r
+# re-implements.\r
+\r
+INHERIT_DOCS           = YES\r
+\r
+# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce \r
+# a new page for each member. If set to NO, the documentation of a member will \r
+# be part of the file/class/namespace that contains it.\r
+\r
+SEPARATE_MEMBER_PAGES  = NO\r
+\r
+# The TAB_SIZE tag can be used to set the number of spaces in a tab. \r
+# Doxygen uses this value to replace tabs by spaces in code fragments.\r
+\r
+TAB_SIZE               = 4\r
+\r
+# This tag can be used to specify a number of aliases that acts \r
+# as commands in the documentation. An alias has the form "name=value". \r
+# For example adding "sideeffect=\par Side Effects:\n" will allow you to \r
+# put the command \sideeffect (or @sideeffect) in the documentation, which \r
+# will result in a user-defined paragraph with heading "Side Effects:". \r
+# You can put \n's in the value part of an alias to insert newlines.\r
+\r
+ALIASES                = \r
+\r
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C \r
+# sources only. Doxygen will then generate output that is more tailored for C. \r
+# For instance, some of the names that are used will be different. The list \r
+# of all members will be omitted, etc.\r
+\r
+OPTIMIZE_OUTPUT_FOR_C  = YES\r
+\r
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java \r
+# sources only. Doxygen will then generate output that is more tailored for \r
+# Java. For instance, namespaces will be presented as packages, qualified \r
+# scopes will look different, etc.\r
+\r
+OPTIMIZE_OUTPUT_JAVA   = NO\r
+\r
+# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran \r
+# sources only. Doxygen will then generate output that is more tailored for \r
+# Fortran.\r
+\r
+OPTIMIZE_FOR_FORTRAN   = NO\r
+\r
+# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL \r
+# sources. Doxygen will then generate output that is tailored for \r
+# VHDL.\r
+\r
+OPTIMIZE_OUTPUT_VHDL   = NO\r
+\r
+# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want \r
+# to include (a tag file for) the STL sources as input, then you should \r
+# set this tag to YES in order to let doxygen match functions declarations and \r
+# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. \r
+# func(std::string) {}). This also make the inheritance and collaboration \r
+# diagrams that involve STL classes more complete and accurate.\r
+\r
+BUILTIN_STL_SUPPORT    = NO\r
+\r
+# If you use Microsoft's C++/CLI language, you should set this option to YES to\r
+# enable parsing support.\r
+\r
+CPP_CLI_SUPPORT        = NO\r
+\r
+# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. \r
+# Doxygen will parse them like normal C++ but will assume all classes use public \r
+# instead of private inheritance when no explicit protection keyword is present.\r
+\r
+SIP_SUPPORT            = NO\r
+\r
+# For Microsoft's IDL there are propget and propput attributes to indicate getter \r
+# and setter methods for a property. Setting this option to YES (the default) \r
+# will make doxygen to replace the get and set methods by a property in the \r
+# documentation. This will only work if the methods are indeed getting or \r
+# setting a simple type. If this is not the case, or you want to show the \r
+# methods anyway, you should set this option to NO.\r
+\r
+IDL_PROPERTY_SUPPORT   = YES\r
+\r
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC \r
+# tag is set to YES, then doxygen will reuse the documentation of the first \r
+# member in the group (if any) for the other members of the group. By default \r
+# all members of a group must be documented explicitly.\r
+\r
+DISTRIBUTE_GROUP_DOC   = NO\r
+\r
+# Set the SUBGROUPING tag to YES (the default) to allow class member groups of \r
+# the same type (for instance a group of public functions) to be put as a \r
+# subgroup of that type (e.g. under the Public Functions section). Set it to \r
+# NO to prevent subgrouping. Alternatively, this can be done per class using \r
+# the \nosubgrouping command.\r
+\r
+SUBGROUPING            = YES\r
+\r
+# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum \r
+# is documented as struct, union, or enum with the name of the typedef. So \r
+# typedef struct TypeS {} TypeT, will appear in the documentation as a struct \r
+# with name TypeT. When disabled the typedef will appear as a member of a file, \r
+# namespace, or class. And the struct will be named TypeS. This can typically \r
+# be useful for C code in case the coding convention dictates that all compound \r
+# types are typedef'ed and only the typedef is referenced, never the tag name.\r
+\r
+TYPEDEF_HIDES_STRUCT   = NO\r
+\r
+# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to \r
+# determine which symbols to keep in memory and which to flush to disk.\r
+# When the cache is full, less often used symbols will be written to disk.\r
+# For small to medium size projects (<1000 input files) the default value is \r
+# probably good enough. For larger projects a too small cache size can cause \r
+# doxygen to be busy swapping symbols to and from disk most of the time \r
+# causing a significant performance penality. \r
+# If the system has enough physical memory increasing the cache will improve the \r
+# performance by keeping more symbols in memory. Note that the value works on \r
+# a logarithmic scale so increasing the size by one will rougly double the \r
+# memory usage. The cache size is given by this formula: \r
+# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, \r
+# corresponding to a cache size of 2^16 = 65536 symbols\r
+\r
+SYMBOL_CACHE_SIZE      = 0\r
+\r
+#---------------------------------------------------------------------------\r
+# Build related configuration options\r
+#---------------------------------------------------------------------------\r
+\r
+# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in \r
+# documentation are documented, even if no documentation was available. \r
+# Private class members and static file members will be hidden unless \r
+# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES\r
+\r
+EXTRACT_ALL            = YES\r
+\r
+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class \r
+# will be included in the documentation.\r
+\r
+EXTRACT_PRIVATE        = YES\r
+\r
+# If the EXTRACT_STATIC tag is set to YES all static members of a file \r
+# will be included in the documentation.\r
+\r
+EXTRACT_STATIC         = YES\r
+\r
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) \r
+# defined locally in source files will be included in the documentation. \r
+# If set to NO only classes defined in header files are included.\r
+\r
+EXTRACT_LOCAL_CLASSES  = YES\r
+\r
+# This flag is only useful for Objective-C code. When set to YES local \r
+# methods, which are defined in the implementation section but not in \r
+# the interface are included in the documentation. \r
+# If set to NO (the default) only methods in the interface are included.\r
+\r
+EXTRACT_LOCAL_METHODS  = NO\r
+\r
+# If this flag is set to YES, the members of anonymous namespaces will be \r
+# extracted and appear in the documentation as a namespace called \r
+# 'anonymous_namespace{file}', where file will be replaced with the base \r
+# name of the file that contains the anonymous namespace. By default \r
+# anonymous namespace are hidden.\r
+\r
+EXTRACT_ANON_NSPACES   = NO\r
+\r
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all \r
+# undocumented members of documented classes, files or namespaces. \r
+# If set to NO (the default) these members will be included in the \r
+# various overviews, but no documentation section is generated. \r
+# This option has no effect if EXTRACT_ALL is enabled.\r
+\r
+HIDE_UNDOC_MEMBERS     = NO\r
+\r
+# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all \r
+# undocumented classes that are normally visible in the class hierarchy. \r
+# If set to NO (the default) these classes will be included in the various \r
+# overviews. This option has no effect if EXTRACT_ALL is enabled.\r
+\r
+HIDE_UNDOC_CLASSES     = NO\r
+\r
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all \r
+# friend (class|struct|union) declarations. \r
+# If set to NO (the default) these declarations will be included in the \r
+# documentation.\r
+\r
+HIDE_FRIEND_COMPOUNDS  = NO\r
+\r
+# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any \r
+# documentation blocks found inside the body of a function. \r
+# If set to NO (the default) these blocks will be appended to the \r
+# function's detailed documentation block.\r
+\r
+HIDE_IN_BODY_DOCS      = NO\r
+\r
+# The INTERNAL_DOCS tag determines if documentation \r
+# that is typed after a \internal command is included. If the tag is set \r
+# to NO (the default) then the documentation will be excluded. \r
+# Set it to YES to include the internal documentation.\r
+\r
+INTERNAL_DOCS          = NO\r
+\r
+# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate \r
+# file names in lower-case letters. If set to YES upper-case letters are also \r
+# allowed. This is useful if you have classes or files whose names only differ \r
+# in case and if your file system supports case sensitive file names. Windows \r
+# and Mac users are advised to set this option to NO.\r
+\r
+CASE_SENSE_NAMES       = NO\r
+\r
+# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen \r
+# will show members with their full class and namespace scopes in the \r
+# documentation. If set to YES the scope will be hidden.\r
+\r
+HIDE_SCOPE_NAMES       = NO\r
+\r
+# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen \r
+# will put a list of the files that are included by a file in the documentation \r
+# of that file.\r
+\r
+SHOW_INCLUDE_FILES     = YES\r
+\r
+# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] \r
+# is inserted in the documentation for inline members.\r
+\r
+INLINE_INFO            = YES\r
+\r
+# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen \r
+# will sort the (detailed) documentation of file and class members \r
+# alphabetically by member name. If set to NO the members will appear in \r
+# declaration order.\r
+\r
+SORT_MEMBER_DOCS       = YES\r
+\r
+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the \r
+# brief documentation of file, namespace and class members alphabetically \r
+# by member name. If set to NO (the default) the members will appear in \r
+# declaration order.\r
+\r
+SORT_BRIEF_DOCS        = NO\r
+\r
+# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the \r
+# hierarchy of group names into alphabetical order. If set to NO (the default) \r
+# the group names will appear in their defined order.\r
+\r
+SORT_GROUP_NAMES       = NO\r
+\r
+# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be \r
+# sorted by fully-qualified names, including namespaces. If set to \r
+# NO (the default), the class list will be sorted only by class name, \r
+# not including the namespace part. \r
+# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.\r
+# Note: This option applies only to the class list, not to the \r
+# alphabetical list.\r
+\r
+SORT_BY_SCOPE_NAME     = NO\r
+\r
+# The GENERATE_TODOLIST tag can be used to enable (YES) or \r
+# disable (NO) the todo list. This list is created by putting \todo \r
+# commands in the documentation.\r
+\r
+GENERATE_TODOLIST      = NO\r
+\r
+# The GENERATE_TESTLIST tag can be used to enable (YES) or \r
+# disable (NO) the test list. This list is created by putting \test \r
+# commands in the documentation.\r
+\r
+GENERATE_TESTLIST      = NO\r
+\r
+# The GENERATE_BUGLIST tag can be used to enable (YES) or \r
+# disable (NO) the bug list. This list is created by putting \bug \r
+# commands in the documentation.\r
+\r
+GENERATE_BUGLIST       = NO\r
+\r
+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or \r
+# disable (NO) the deprecated list. This list is created by putting \r
+# \deprecated commands in the documentation.\r
+\r
+GENERATE_DEPRECATEDLIST= YES\r
+\r
+# The ENABLED_SECTIONS tag can be used to enable conditional \r
+# documentation sections, marked by \if sectionname ... \endif.\r
+\r
+ENABLED_SECTIONS       = \r
+\r
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines \r
+# the initial value of a variable or define consists of for it to appear in \r
+# the documentation. If the initializer consists of more lines than specified \r
+# here it will be hidden. Use a value of 0 to hide initializers completely. \r
+# The appearance of the initializer of individual variables and defines in the \r
+# documentation can be controlled using \showinitializer or \hideinitializer \r
+# command in the documentation regardless of this setting.\r
+\r
+MAX_INITIALIZER_LINES  = 30\r
+\r
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated \r
+# at the bottom of the documentation of classes and structs. If set to YES the \r
+# list will mention the files that were used to generate the documentation.\r
+\r
+SHOW_USED_FILES        = YES\r
+\r
+# If the sources in your project are distributed over multiple directories \r
+# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy \r
+# in the documentation. The default is NO.\r
+\r
+SHOW_DIRECTORIES       = YES\r
+\r
+# Set the SHOW_FILES tag to NO to disable the generation of the Files page.\r
+# This will remove the Files entry from the Quick Index and from the \r
+# Folder Tree View (if specified). The default is YES.\r
+\r
+SHOW_FILES             = YES\r
+\r
+# Set the SHOW_NAMESPACES tag to NO to disable the generation of the \r
+# Namespaces page.  This will remove the Namespaces entry from the Quick Index\r
+# and from the Folder Tree View (if specified). The default is YES.\r
+\r
+SHOW_NAMESPACES        = YES\r
+\r
+# The FILE_VERSION_FILTER tag can be used to specify a program or script that \r
+# doxygen should invoke to get the current version for each file (typically from \r
+# the version control system). Doxygen will invoke the program by executing (via \r
+# popen()) the command <command> <input-file>, where <command> is the value of \r
+# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file \r
+# provided by doxygen. Whatever the program writes to standard output \r
+# is used as the file version. See the manual for examples.\r
+\r
+FILE_VERSION_FILTER    = \r
+\r
+# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by \r
+# doxygen. The layout file controls the global structure of the generated output files \r
+# in an output format independent way. The create the layout file that represents \r
+# doxygen's defaults, run doxygen with the -l option. You can optionally specify a \r
+# file name after the option, if omitted DoxygenLayout.xml will be used as the name \r
+# of the layout file.\r
+\r
+LAYOUT_FILE            = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to warning and progress messages\r
+#---------------------------------------------------------------------------\r
+\r
+# The QUIET tag can be used to turn on/off the messages that are generated \r
+# by doxygen. Possible values are YES and NO. If left blank NO is used.\r
+\r
+QUIET                  = YES\r
+\r
+# The WARNINGS tag can be used to turn on/off the warning messages that are \r
+# generated by doxygen. Possible values are YES and NO. If left blank \r
+# NO is used.\r
+\r
+WARNINGS               = YES\r
+\r
+# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings \r
+# for undocumented members. If EXTRACT_ALL is set to YES then this flag will \r
+# automatically be disabled.\r
+\r
+WARN_IF_UNDOCUMENTED   = YES\r
+\r
+# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for \r
+# potential errors in the documentation, such as not documenting some \r
+# parameters in a documented function, or documenting parameters that \r
+# don't exist or using markup commands wrongly.\r
+\r
+WARN_IF_DOC_ERROR      = YES\r
+\r
+# This WARN_NO_PARAMDOC option can be abled to get warnings for \r
+# functions that are documented, but have no documentation for their parameters \r
+# or return value. If set to NO (the default) doxygen will only warn about \r
+# wrong or incomplete parameter documentation, but not about the absence of \r
+# documentation.\r
+\r
+WARN_NO_PARAMDOC       = YES\r
+\r
+# The WARN_FORMAT tag determines the format of the warning messages that \r
+# doxygen can produce. The string should contain the $file, $line, and $text \r
+# tags, which will be replaced by the file and line number from which the \r
+# warning originated and the warning text. Optionally the format may contain \r
+# $version, which will be replaced by the version of the file (if it could \r
+# be obtained via FILE_VERSION_FILTER)\r
+\r
+WARN_FORMAT            = "$file:$line: $text"\r
+\r
+# The WARN_LOGFILE tag can be used to specify a file to which warning \r
+# and error messages should be written. If left blank the output is written \r
+# to stderr.\r
+\r
+WARN_LOGFILE           = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the input files\r
+#---------------------------------------------------------------------------\r
+\r
+# The INPUT tag can be used to specify the files and/or directories that contain \r
+# documented source files. You may enter file names like "myfile.cpp" or \r
+# directories like "/usr/src/myproject". Separate the files or directories \r
+# with spaces.\r
+\r
+INPUT                  = ./\r
+\r
+# This tag can be used to specify the character encoding of the source files \r
+# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is \r
+# also the default input encoding. Doxygen uses libiconv (or the iconv built \r
+# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for \r
+# the list of possible encodings.\r
+\r
+INPUT_ENCODING         = UTF-8\r
+\r
+# If the value of the INPUT tag contains directories, you can use the \r
+# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \r
+# and *.h) to filter out the source-files in the directories. If left \r
+# blank the following patterns are tested: \r
+# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx \r
+# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90\r
+\r
+FILE_PATTERNS          = *.h \\r
+                         *.c \\r
+                                                *.txt\r
+\r
+# The RECURSIVE tag can be used to turn specify whether or not subdirectories \r
+# should be searched for input files as well. Possible values are YES and NO. \r
+# If left blank NO is used.\r
+\r
+RECURSIVE              = YES\r
+\r
+# The EXCLUDE tag can be used to specify files and/or directories that should \r
+# excluded from the INPUT source files. This way you can easily exclude a \r
+# subdirectory from a directory tree whose root is specified with the INPUT tag.\r
+\r
+EXCLUDE                = \r
+\r
+# The EXCLUDE_SYMLINKS tag can be used select whether or not files or \r
+# directories that are symbolic links (a Unix filesystem feature) are excluded \r
+# from the input.\r
+\r
+EXCLUDE_SYMLINKS       = NO\r
+\r
+# If the value of the INPUT tag contains directories, you can use the \r
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude \r
+# certain files from those directories. Note that the wildcards are matched \r
+# against the file with absolute path, so to exclude all test directories \r
+# for example use the pattern */test/*\r
+\r
+EXCLUDE_PATTERNS       = */LowLevel/USBMode.h\r
+\r
+# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names \r
+# (namespaces, classes, functions, etc.) that should be excluded from the \r
+# output. The symbol name can be a fully qualified name, a word, or if the \r
+# wildcard * is used, a substring. Examples: ANamespace, AClass, \r
+# AClass::ANamespace, ANamespace::*Test\r
+\r
+EXCLUDE_SYMBOLS        = __*\r
+\r
+# The EXAMPLE_PATH tag can be used to specify one or more files or \r
+# directories that contain example code fragments that are included (see \r
+# the \include command).\r
+\r
+EXAMPLE_PATH           = \r
+\r
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the \r
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \r
+# and *.h) to filter out the source-files in the directories. If left \r
+# blank all files are included.\r
+\r
+EXAMPLE_PATTERNS       = *\r
+\r
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be \r
+# searched for input files to be used with the \include or \dontinclude \r
+# commands irrespective of the value of the RECURSIVE tag. \r
+# Possible values are YES and NO. If left blank NO is used.\r
+\r
+EXAMPLE_RECURSIVE      = NO\r
+\r
+# The IMAGE_PATH tag can be used to specify one or more files or \r
+# directories that contain image that are included in the documentation (see \r
+# the \image command).\r
+\r
+IMAGE_PATH             = \r
+\r
+# The INPUT_FILTER tag can be used to specify a program that doxygen should \r
+# invoke to filter for each input file. Doxygen will invoke the filter program \r
+# by executing (via popen()) the command <filter> <input-file>, where <filter> \r
+# is the value of the INPUT_FILTER tag, and <input-file> is the name of an \r
+# input file. Doxygen will then use the output that the filter program writes \r
+# to standard output.  If FILTER_PATTERNS is specified, this tag will be \r
+# ignored.\r
+\r
+INPUT_FILTER           = \r
+\r
+# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern \r
+# basis.  Doxygen will compare the file name with each pattern and apply the \r
+# filter if there is a match.  The filters are a list of the form: \r
+# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further \r
+# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER \r
+# is applied to all files.\r
+\r
+FILTER_PATTERNS        = \r
+\r
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using \r
+# INPUT_FILTER) will be used to filter the input files when producing source \r
+# files to browse (i.e. when SOURCE_BROWSER is set to YES).\r
+\r
+FILTER_SOURCE_FILES    = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to source browsing\r
+#---------------------------------------------------------------------------\r
+\r
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will \r
+# be generated. Documented entities will be cross-referenced with these sources. \r
+# Note: To get rid of all source code in the generated output, make sure also \r
+# VERBATIM_HEADERS is set to NO.\r
+\r
+SOURCE_BROWSER         = NO\r
+\r
+# Setting the INLINE_SOURCES tag to YES will include the body \r
+# of functions and classes directly in the documentation.\r
+\r
+INLINE_SOURCES         = NO\r
+\r
+# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct \r
+# doxygen to hide any special comment blocks from generated source code \r
+# fragments. Normal C and C++ comments will always remain visible.\r
+\r
+STRIP_CODE_COMMENTS    = YES\r
+\r
+# If the REFERENCED_BY_RELATION tag is set to YES \r
+# then for each documented function all documented \r
+# functions referencing it will be listed.\r
+\r
+REFERENCED_BY_RELATION = NO\r
+\r
+# If the REFERENCES_RELATION tag is set to YES \r
+# then for each documented function all documented entities \r
+# called/used by that function will be listed.\r
+\r
+REFERENCES_RELATION    = NO\r
+\r
+# If the REFERENCES_LINK_SOURCE tag is set to YES (the default)\r
+# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from\r
+# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will\r
+# link to the source code.  Otherwise they will link to the documentstion.\r
+\r
+REFERENCES_LINK_SOURCE = NO\r
+\r
+# If the USE_HTAGS tag is set to YES then the references to source code \r
+# will point to the HTML generated by the htags(1) tool instead of doxygen \r
+# built-in source browser. The htags tool is part of GNU's global source \r
+# tagging system (see http://www.gnu.org/software/global/global.html). You \r
+# will need version 4.8.6 or higher.\r
+\r
+USE_HTAGS              = NO\r
+\r
+# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen \r
+# will generate a verbatim copy of the header file for each class for \r
+# which an include is specified. Set to NO to disable this.\r
+\r
+VERBATIM_HEADERS       = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the alphabetical class index\r
+#---------------------------------------------------------------------------\r
+\r
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index \r
+# of all compounds will be generated. Enable this if the project \r
+# contains a lot of classes, structs, unions or interfaces.\r
+\r
+ALPHABETICAL_INDEX     = YES\r
+\r
+# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then \r
+# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns \r
+# in which this list will be split (can be a number in the range [1..20])\r
+\r
+COLS_IN_ALPHA_INDEX    = 5\r
+\r
+# In case all classes in a project start with a common prefix, all \r
+# classes will be put under the same header in the alphabetical index. \r
+# The IGNORE_PREFIX tag can be used to specify one or more prefixes that \r
+# should be ignored while generating the index headers.\r
+\r
+IGNORE_PREFIX          = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the HTML output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_HTML tag is set to YES (the default) Doxygen will \r
+# generate HTML output.\r
+\r
+GENERATE_HTML          = YES\r
+\r
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `html' will be used as the default path.\r
+\r
+HTML_OUTPUT            = html\r
+\r
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for \r
+# each generated HTML page (for example: .htm,.php,.asp). If it is left blank \r
+# doxygen will generate files with .html extension.\r
+\r
+HTML_FILE_EXTENSION    = .html\r
+\r
+# The HTML_HEADER tag can be used to specify a personal HTML header for \r
+# each generated HTML page. If it is left blank doxygen will generate a \r
+# standard header.\r
+\r
+HTML_HEADER            = \r
+\r
+# The HTML_FOOTER tag can be used to specify a personal HTML footer for \r
+# each generated HTML page. If it is left blank doxygen will generate a \r
+# standard footer.\r
+\r
+HTML_FOOTER            = \r
+\r
+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading \r
+# style sheet that is used by each HTML page. It can be used to \r
+# fine-tune the look of the HTML output. If the tag is left blank doxygen \r
+# will generate a default style sheet. Note that doxygen will try to copy \r
+# the style sheet file to the HTML output directory, so don't put your own \r
+# stylesheet in the HTML output directory as well, or it will be erased!\r
+\r
+HTML_STYLESHEET        = \r
+\r
+# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, \r
+# files or namespaces will be aligned in HTML using tables. If set to \r
+# NO a bullet list will be used.\r
+\r
+HTML_ALIGN_MEMBERS     = YES\r
+\r
+# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML \r
+# documentation will contain sections that can be hidden and shown after the \r
+# page has loaded. For this to work a browser that supports \r
+# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox \r
+# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari).\r
+\r
+HTML_DYNAMIC_SECTIONS  = YES\r
+\r
+# If the GENERATE_DOCSET tag is set to YES, additional index files \r
+# will be generated that can be used as input for Apple's Xcode 3 \r
+# integrated development environment, introduced with OSX 10.5 (Leopard). \r
+# To create a documentation set, doxygen will generate a Makefile in the \r
+# HTML output directory. Running make will produce the docset in that \r
+# directory and running "make install" will install the docset in \r
+# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find \r
+# it at startup. \r
+# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information.\r
+\r
+GENERATE_DOCSET        = NO\r
+\r
+# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the \r
+# feed. A documentation feed provides an umbrella under which multiple \r
+# documentation sets from a single provider (such as a company or product suite) \r
+# can be grouped.\r
+\r
+DOCSET_FEEDNAME        = "Doxygen generated docs"\r
+\r
+# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that \r
+# should uniquely identify the documentation set bundle. This should be a \r
+# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen \r
+# will append .docset to the name.\r
+\r
+DOCSET_BUNDLE_ID       = org.doxygen.Project\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, additional index files \r
+# will be generated that can be used as input for tools like the \r
+# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) \r
+# of the generated HTML documentation.\r
+\r
+GENERATE_HTMLHELP      = NO\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can \r
+# be used to specify the file name of the resulting .chm file. You \r
+# can add a path in front of the file if the result should not be \r
+# written to the html output directory.\r
+\r
+CHM_FILE               = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can \r
+# be used to specify the location (absolute path including file name) of \r
+# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run \r
+# the HTML help compiler on the generated index.hhp.\r
+\r
+HHC_LOCATION           = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag \r
+# controls if a separate .chi index file is generated (YES) or that \r
+# it should be included in the master .chm file (NO).\r
+\r
+GENERATE_CHI           = NO\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING\r
+# is used to encode HtmlHelp index (hhk), content (hhc) and project file\r
+# content.\r
+\r
+CHM_INDEX_ENCODING     = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag \r
+# controls whether a binary table of contents is generated (YES) or a \r
+# normal table of contents (NO) in the .chm file.\r
+\r
+BINARY_TOC             = NO\r
+\r
+# The TOC_EXPAND flag can be set to YES to add extra items for group members \r
+# to the contents of the HTML help documentation and to the tree view.\r
+\r
+TOC_EXPAND             = YES\r
+\r
+# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER \r
+# are set, an additional index file will be generated that can be used as input for \r
+# Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated \r
+# HTML documentation.\r
+\r
+GENERATE_QHP           = NO\r
+\r
+# If the QHG_LOCATION tag is specified, the QCH_FILE tag can \r
+# be used to specify the file name of the resulting .qch file. \r
+# The path specified is relative to the HTML output folder.\r
+\r
+QCH_FILE               = \r
+\r
+# The QHP_NAMESPACE tag specifies the namespace to use when generating \r
+# Qt Help Project output. For more information please see \r
+# <a href="http://doc.trolltech.com/qthelpproject.html#namespace">Qt Help Project / Namespace</a>.\r
+\r
+QHP_NAMESPACE          = org.doxygen.Project\r
+\r
+# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating \r
+# Qt Help Project output. For more information please see \r
+# <a href="http://doc.trolltech.com/qthelpproject.html#virtual-folders">Qt Help Project / Virtual Folders</a>.\r
+\r
+QHP_VIRTUAL_FOLDER     = doc\r
+\r
+# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can \r
+# be used to specify the location of Qt's qhelpgenerator. \r
+# If non-empty doxygen will try to run qhelpgenerator on the generated \r
+# .qhp file .\r
+\r
+QHG_LOCATION           = \r
+\r
+# The DISABLE_INDEX tag can be used to turn on/off the condensed index at \r
+# top of each HTML page. The value NO (the default) enables the index and \r
+# the value YES disables it.\r
+\r
+DISABLE_INDEX          = NO\r
+\r
+# This tag can be used to set the number of enum values (range [1..20]) \r
+# that doxygen will group on one line in the generated HTML documentation.\r
+\r
+ENUM_VALUES_PER_LINE   = 1\r
+\r
+# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index\r
+# structure should be generated to display hierarchical information.\r
+# If the tag value is set to FRAME, a side panel will be generated\r
+# containing a tree-like index structure (just like the one that \r
+# is generated for HTML Help). For this to work a browser that supports \r
+# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, \r
+# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are \r
+# probably better off using the HTML help feature. Other possible values \r
+# for this tag are: HIERARCHIES, which will generate the Groups, Directories,\r
+# and Class Hierarchy pages using a tree view instead of an ordered list;\r
+# ALL, which combines the behavior of FRAME and HIERARCHIES; and NONE, which\r
+# disables this behavior completely. For backwards compatibility with previous\r
+# releases of Doxygen, the values YES and NO are equivalent to FRAME and NONE\r
+# respectively.\r
+\r
+GENERATE_TREEVIEW      = YES\r
+\r
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be \r
+# used to set the initial width (in pixels) of the frame in which the tree \r
+# is shown.\r
+\r
+TREEVIEW_WIDTH         = 250\r
+\r
+# Use this tag to change the font size of Latex formulas included \r
+# as images in the HTML documentation. The default is 10. Note that \r
+# when you change the font size after a successful doxygen run you need \r
+# to manually remove any form_*.png images from the HTML output directory \r
+# to force them to be regenerated.\r
+\r
+FORMULA_FONTSIZE       = 10\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the LaTeX output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will \r
+# generate Latex output.\r
+\r
+GENERATE_LATEX         = NO\r
+\r
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `latex' will be used as the default path.\r
+\r
+LATEX_OUTPUT           = latex\r
+\r
+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be \r
+# invoked. If left blank `latex' will be used as the default command name.\r
+\r
+LATEX_CMD_NAME         = latex\r
+\r
+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to \r
+# generate index for LaTeX. If left blank `makeindex' will be used as the \r
+# default command name.\r
+\r
+MAKEINDEX_CMD_NAME     = makeindex\r
+\r
+# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact \r
+# LaTeX documents. This may be useful for small projects and may help to \r
+# save some trees in general.\r
+\r
+COMPACT_LATEX          = NO\r
+\r
+# The PAPER_TYPE tag can be used to set the paper type that is used \r
+# by the printer. Possible values are: a4, a4wide, letter, legal and \r
+# executive. If left blank a4wide will be used.\r
+\r
+PAPER_TYPE             = a4wide\r
+\r
+# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX \r
+# packages that should be included in the LaTeX output.\r
+\r
+EXTRA_PACKAGES         = \r
+\r
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for \r
+# the generated latex document. The header should contain everything until \r
+# the first chapter. If it is left blank doxygen will generate a \r
+# standard header. Notice: only use this tag if you know what you are doing!\r
+\r
+LATEX_HEADER           = \r
+\r
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated \r
+# is prepared for conversion to pdf (using ps2pdf). The pdf file will \r
+# contain links (just like the HTML output) instead of page references \r
+# This makes the output suitable for online browsing using a pdf viewer.\r
+\r
+PDF_HYPERLINKS         = YES\r
+\r
+# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of \r
+# plain latex in the generated Makefile. Set this option to YES to get a \r
+# higher quality PDF documentation.\r
+\r
+USE_PDFLATEX           = YES\r
+\r
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. \r
+# command to the generated LaTeX files. This will instruct LaTeX to keep \r
+# running if errors occur, instead of asking the user for help. \r
+# This option is also used when generating formulas in HTML.\r
+\r
+LATEX_BATCHMODE        = NO\r
+\r
+# If LATEX_HIDE_INDICES is set to YES then doxygen will not \r
+# include the index chapters (such as File Index, Compound Index, etc.) \r
+# in the output.\r
+\r
+LATEX_HIDE_INDICES     = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the RTF output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output \r
+# The RTF output is optimized for Word 97 and may not look very pretty with \r
+# other RTF readers or editors.\r
+\r
+GENERATE_RTF           = NO\r
+\r
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `rtf' will be used as the default path.\r
+\r
+RTF_OUTPUT             = rtf\r
+\r
+# If the COMPACT_RTF tag is set to YES Doxygen generates more compact \r
+# RTF documents. This may be useful for small projects and may help to \r
+# save some trees in general.\r
+\r
+COMPACT_RTF            = NO\r
+\r
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated \r
+# will contain hyperlink fields. The RTF file will \r
+# contain links (just like the HTML output) instead of page references. \r
+# This makes the output suitable for online browsing using WORD or other \r
+# programs which support those fields. \r
+# Note: wordpad (write) and others do not support links.\r
+\r
+RTF_HYPERLINKS         = NO\r
+\r
+# Load stylesheet definitions from file. Syntax is similar to doxygen's \r
+# config file, i.e. a series of assignments. You only have to provide \r
+# replacements, missing definitions are set to their default value.\r
+\r
+RTF_STYLESHEET_FILE    = \r
+\r
+# Set optional variables used in the generation of an rtf document. \r
+# Syntax is similar to doxygen's config file.\r
+\r
+RTF_EXTENSIONS_FILE    = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the man page output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_MAN tag is set to YES (the default) Doxygen will \r
+# generate man pages\r
+\r
+GENERATE_MAN           = NO\r
+\r
+# The MAN_OUTPUT tag is used to specify where the man pages will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `man' will be used as the default path.\r
+\r
+MAN_OUTPUT             = man\r
+\r
+# The MAN_EXTENSION tag determines the extension that is added to \r
+# the generated man pages (default is the subroutine's section .3)\r
+\r
+MAN_EXTENSION          = .3\r
+\r
+# If the MAN_LINKS tag is set to YES and Doxygen generates man output, \r
+# then it will generate one additional man file for each entity \r
+# documented in the real man page(s). These additional files \r
+# only source the real man page, but without them the man command \r
+# would be unable to find the correct page. The default is NO.\r
+\r
+MAN_LINKS              = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the XML output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_XML tag is set to YES Doxygen will \r
+# generate an XML file that captures the structure of \r
+# the code including all documentation.\r
+\r
+GENERATE_XML           = NO\r
+\r
+# The XML_OUTPUT tag is used to specify where the XML pages will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `xml' will be used as the default path.\r
+\r
+XML_OUTPUT             = xml\r
+\r
+# The XML_SCHEMA tag can be used to specify an XML schema, \r
+# which can be used by a validating XML parser to check the \r
+# syntax of the XML files.\r
+\r
+XML_SCHEMA             = \r
+\r
+# The XML_DTD tag can be used to specify an XML DTD, \r
+# which can be used by a validating XML parser to check the \r
+# syntax of the XML files.\r
+\r
+XML_DTD                = \r
+\r
+# If the XML_PROGRAMLISTING tag is set to YES Doxygen will \r
+# dump the program listings (including syntax highlighting \r
+# and cross-referencing information) to the XML output. Note that \r
+# enabling this will significantly increase the size of the XML output.\r
+\r
+XML_PROGRAMLISTING     = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options for the AutoGen Definitions output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will \r
+# generate an AutoGen Definitions (see autogen.sf.net) file \r
+# that captures the structure of the code including all \r
+# documentation. Note that this feature is still experimental \r
+# and incomplete at the moment.\r
+\r
+GENERATE_AUTOGEN_DEF   = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the Perl module output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_PERLMOD tag is set to YES Doxygen will \r
+# generate a Perl module file that captures the structure of \r
+# the code including all documentation. Note that this \r
+# feature is still experimental and incomplete at the \r
+# moment.\r
+\r
+GENERATE_PERLMOD       = NO\r
+\r
+# If the PERLMOD_LATEX tag is set to YES Doxygen will generate \r
+# the necessary Makefile rules, Perl scripts and LaTeX code to be able \r
+# to generate PDF and DVI output from the Perl module output.\r
+\r
+PERLMOD_LATEX          = NO\r
+\r
+# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be \r
+# nicely formatted so it can be parsed by a human reader.  This is useful \r
+# if you want to understand what is going on.  On the other hand, if this \r
+# tag is set to NO the size of the Perl module output will be much smaller \r
+# and Perl will parse it just the same.\r
+\r
+PERLMOD_PRETTY         = YES\r
+\r
+# The names of the make variables in the generated doxyrules.make file \r
+# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. \r
+# This is useful so different doxyrules.make files included by the same \r
+# Makefile don't overwrite each other's variables.\r
+\r
+PERLMOD_MAKEVAR_PREFIX = \r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration options related to the preprocessor   \r
+#---------------------------------------------------------------------------\r
+\r
+# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will \r
+# evaluate all C-preprocessor directives found in the sources and include \r
+# files.\r
+\r
+ENABLE_PREPROCESSING   = YES\r
+\r
+# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro \r
+# names in the source code. If set to NO (the default) only conditional \r
+# compilation will be performed. Macro expansion can be done in a controlled \r
+# way by setting EXPAND_ONLY_PREDEF to YES.\r
+\r
+MACRO_EXPANSION        = YES\r
+\r
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES \r
+# then the macro expansion is limited to the macros specified with the \r
+# PREDEFINED and EXPAND_AS_DEFINED tags.\r
+\r
+EXPAND_ONLY_PREDEF     = YES\r
+\r
+# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files \r
+# in the INCLUDE_PATH (see below) will be search if a #include is found.\r
+\r
+SEARCH_INCLUDES        = YES\r
+\r
+# The INCLUDE_PATH tag can be used to specify one or more directories that \r
+# contain include files that are not input files but should be processed by \r
+# the preprocessor.\r
+\r
+INCLUDE_PATH           = \r
+\r
+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard \r
+# patterns (like *.h and *.hpp) to filter out the header-files in the \r
+# directories. If left blank, the patterns specified with FILE_PATTERNS will \r
+# be used.\r
+\r
+INCLUDE_FILE_PATTERNS  = \r
+\r
+# The PREDEFINED tag can be used to specify one or more macro names that \r
+# are defined before the preprocessor is started (similar to the -D option of \r
+# gcc). The argument of the tag is a list of macros of the form: name \r
+# or name=definition (no spaces). If the definition and the = are \r
+# omitted =1 is assumed. To prevent a macro definition from being \r
+# undefined via #undef or recursively expanded use the := operator \r
+# instead of the = operator.\r
+\r
+PREDEFINED             = __DOXYGEN__\r
+\r
+# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then \r
+# this tag can be used to specify a list of macro names that should be expanded. \r
+# The macro definition that is found in the sources will be used. \r
+# Use the PREDEFINED tag if you want to use a different macro definition.\r
+\r
+EXPAND_AS_DEFINED      = BUTTLOADTAG\r
+\r
+# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then \r
+# doxygen's preprocessor will remove all function-like macros that are alone \r
+# on a line, have an all uppercase name, and do not end with a semicolon. Such \r
+# function macros are typically used for boiler-plate code, and will confuse \r
+# the parser if not removed.\r
+\r
+SKIP_FUNCTION_MACROS   = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration::additions related to external references   \r
+#---------------------------------------------------------------------------\r
+\r
+# The TAGFILES option can be used to specify one or more tagfiles. \r
+# Optionally an initial location of the external documentation \r
+# can be added for each tagfile. The format of a tag file without \r
+# this location is as follows: \r
+#   TAGFILES = file1 file2 ... \r
+# Adding location for the tag files is done as follows: \r
+#   TAGFILES = file1=loc1 "file2 = loc2" ... \r
+# where "loc1" and "loc2" can be relative or absolute paths or \r
+# URLs. If a location is present for each tag, the installdox tool \r
+# does not have to be run to correct the links.\r
+# Note that each tag file must have a unique name\r
+# (where the name does NOT include the path)\r
+# If a tag file is not located in the directory in which doxygen \r
+# is run, you must also specify the path to the tagfile here.\r
+\r
+TAGFILES               = \r
+\r
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create \r
+# a tag file that is based on the input files it reads.\r
+\r
+GENERATE_TAGFILE       = \r
+\r
+# If the ALLEXTERNALS tag is set to YES all external classes will be listed \r
+# in the class index. If set to NO only the inherited external classes \r
+# will be listed.\r
+\r
+ALLEXTERNALS           = NO\r
+\r
+# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed \r
+# in the modules index. If set to NO, only the current project's groups will \r
+# be listed.\r
+\r
+EXTERNAL_GROUPS        = YES\r
+\r
+# The PERL_PATH should be the absolute path and name of the perl script \r
+# interpreter (i.e. the result of `which perl').\r
+\r
+PERL_PATH              = /usr/bin/perl\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration options related to the dot tool   \r
+#---------------------------------------------------------------------------\r
+\r
+# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will \r
+# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base \r
+# or super classes. Setting the tag to NO turns the diagrams off. Note that \r
+# this option is superseded by the HAVE_DOT option below. This is only a \r
+# fallback. It is recommended to install and use dot, since it yields more \r
+# powerful graphs.\r
+\r
+CLASS_DIAGRAMS         = NO\r
+\r
+# You can define message sequence charts within doxygen comments using the \msc \r
+# command. Doxygen will then run the mscgen tool (see \r
+# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the \r
+# documentation. The MSCGEN_PATH tag allows you to specify the directory where \r
+# the mscgen tool resides. If left empty the tool is assumed to be found in the \r
+# default search path.\r
+\r
+MSCGEN_PATH            = \r
+\r
+# If set to YES, the inheritance and collaboration graphs will hide \r
+# inheritance and usage relations if the target is undocumented \r
+# or is not a class.\r
+\r
+HIDE_UNDOC_RELATIONS   = YES\r
+\r
+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is \r
+# available from the path. This tool is part of Graphviz, a graph visualization \r
+# toolkit from AT&T and Lucent Bell Labs. The other options in this section \r
+# have no effect if this option is set to NO (the default)\r
+\r
+HAVE_DOT               = NO\r
+\r
+# By default doxygen will write a font called FreeSans.ttf to the output \r
+# directory and reference it in all dot files that doxygen generates. This \r
+# font does not include all possible unicode characters however, so when you need \r
+# these (or just want a differently looking font) you can specify the font name \r
+# using DOT_FONTNAME. You need need to make sure dot is able to find the font, \r
+# which can be done by putting it in a standard location or by setting the \r
+# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory \r
+# containing the font.\r
+\r
+DOT_FONTNAME           = FreeSans\r
+\r
+# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. \r
+# The default size is 10pt.\r
+\r
+DOT_FONTSIZE           = 10\r
+\r
+# By default doxygen will tell dot to use the output directory to look for the \r
+# FreeSans.ttf font (which doxygen will put there itself). If you specify a \r
+# different font using DOT_FONTNAME you can set the path where dot \r
+# can find it using this tag.\r
+\r
+DOT_FONTPATH           = \r
+\r
+# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for each documented class showing the direct and \r
+# indirect inheritance relations. Setting this tag to YES will force the \r
+# the CLASS_DIAGRAMS tag to NO.\r
+\r
+CLASS_GRAPH            = NO\r
+\r
+# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for each documented class showing the direct and \r
+# indirect implementation dependencies (inheritance, containment, and \r
+# class references variables) of the class with other documented classes.\r
+\r
+COLLABORATION_GRAPH    = NO\r
+\r
+# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for groups, showing the direct groups dependencies\r
+\r
+GROUP_GRAPHS           = NO\r
+\r
+# If the UML_LOOK tag is set to YES doxygen will generate inheritance and \r
+# collaboration diagrams in a style similar to the OMG's Unified Modeling \r
+# Language.\r
+\r
+UML_LOOK               = NO\r
+\r
+# If set to YES, the inheritance and collaboration graphs will show the \r
+# relations between templates and their instances.\r
+\r
+TEMPLATE_RELATIONS     = NO\r
+\r
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT \r
+# tags are set to YES then doxygen will generate a graph for each documented \r
+# file showing the direct and indirect include dependencies of the file with \r
+# other documented files.\r
+\r
+INCLUDE_GRAPH          = NO\r
+\r
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and \r
+# HAVE_DOT tags are set to YES then doxygen will generate a graph for each \r
+# documented header file showing the documented files that directly or \r
+# indirectly include this file.\r
+\r
+INCLUDED_BY_GRAPH      = NO\r
+\r
+# If the CALL_GRAPH and HAVE_DOT options are set to YES then \r
+# doxygen will generate a call dependency graph for every global function \r
+# or class method. Note that enabling this option will significantly increase \r
+# the time of a run. So in most cases it will be better to enable call graphs \r
+# for selected functions only using the \callgraph command.\r
+\r
+CALL_GRAPH             = NO\r
+\r
+# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then \r
+# doxygen will generate a caller dependency graph for every global function \r
+# or class method. Note that enabling this option will significantly increase \r
+# the time of a run. So in most cases it will be better to enable caller \r
+# graphs for selected functions only using the \callergraph command.\r
+\r
+CALLER_GRAPH           = NO\r
+\r
+# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen \r
+# will graphical hierarchy of all classes instead of a textual one.\r
+\r
+GRAPHICAL_HIERARCHY    = NO\r
+\r
+# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES \r
+# then doxygen will show the dependencies a directory has on other directories \r
+# in a graphical way. The dependency relations are determined by the #include\r
+# relations between the files in the directories.\r
+\r
+DIRECTORY_GRAPH        = NO\r
+\r
+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images \r
+# generated by dot. Possible values are png, jpg, or gif\r
+# If left blank png will be used.\r
+\r
+DOT_IMAGE_FORMAT       = png\r
+\r
+# The tag DOT_PATH can be used to specify the path where the dot tool can be \r
+# found. If left blank, it is assumed the dot tool can be found in the path.\r
+\r
+DOT_PATH               = "C:/Program Files/Graphviz2.18/bin"\r
+\r
+# The DOTFILE_DIRS tag can be used to specify one or more directories that \r
+# contain dot files that are included in the documentation (see the \r
+# \dotfile command).\r
+\r
+DOTFILE_DIRS           = \r
+\r
+# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of \r
+# nodes that will be shown in the graph. If the number of nodes in a graph \r
+# becomes larger than this value, doxygen will truncate the graph, which is \r
+# visualized by representing a node as a red box. Note that doxygen if the \r
+# number of direct children of the root node in a graph is already larger than \r
+# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note \r
+# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.\r
+\r
+DOT_GRAPH_MAX_NODES    = 15\r
+\r
+# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the \r
+# graphs generated by dot. A depth value of 3 means that only nodes reachable \r
+# from the root by following a path via at most 3 edges will be shown. Nodes \r
+# that lay further from the root node will be omitted. Note that setting this \r
+# option to 1 or 2 may greatly reduce the computation time needed for large \r
+# code bases. Also note that the size of a graph can be further restricted by \r
+# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.\r
+\r
+MAX_DOT_GRAPH_DEPTH    = 2\r
+\r
+# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent \r
+# background. This is disabled by default, because dot on Windows does not \r
+# seem to support this out of the box. Warning: Depending on the platform used, \r
+# enabling this option may lead to badly anti-aliased labels on the edges of \r
+# a graph (i.e. they become hard to read).\r
+\r
+DOT_TRANSPARENT        = YES\r
+\r
+# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output \r
+# files in one run (i.e. multiple -o and -T options on the command line). This \r
+# makes dot run faster, but since only newer versions of dot (>1.8.10) \r
+# support this, this feature is disabled by default.\r
+\r
+DOT_MULTI_TARGETS      = NO\r
+\r
+# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will \r
+# generate a legend page explaining the meaning of the various boxes and \r
+# arrows in the dot generated graphs.\r
+\r
+GENERATE_LEGEND        = YES\r
+\r
+# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will \r
+# remove the intermediate dot files that are used to generate \r
+# the various graphs.\r
+\r
+DOT_CLEANUP            = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration::additions related to the search engine   \r
+#---------------------------------------------------------------------------\r
+\r
+# The SEARCHENGINE tag specifies whether or not a search engine should be \r
+# used. If set to NO the values of all tags below this one will be ignored.\r
+\r
+SEARCHENGINE           = NO\r
diff --git a/Demos/Device/ClassDriver/MassStorage/Lib/DataflashManager.c b/Demos/Device/ClassDriver/MassStorage/Lib/DataflashManager.c
new file mode 100644 (file)
index 0000000..87edef1
--- /dev/null
@@ -0,0 +1,469 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  Functions to manage the physical dataflash media, including reading and writing of\r
+ *  blocks of data. These functions are called by the SCSI layer when data must be stored\r
+ *  or retrieved to/from the physical storage media. If a different media is used (such\r
+ *  as a SD card or EEPROM), functions similar to these will need to be generated.\r
+ */\r
+\r
+#define  INCLUDE_FROM_DATAFLASHMANAGER_C\r
+#include "DataflashManager.h"\r
+\r
+/** Writes blocks (OS blocks, not Dataflash pages) to the storage medium, the board dataflash IC(s), from\r
+ *  the pre-selected data OUT endpoint. This routine reads in OS sized blocks from the endpoint and writes\r
+ *  them to the dataflash in Dataflash page sized blocks.\r
+ *\r
+ *  \param BlockAddress  Data block starting address for the write sequence\r
+ *  \param TotalBlocks   Number of blocks of data to write\r
+ */\r
+void DataflashManager_WriteBlocks(USB_ClassInfo_MS_t* MSInterfaceInfo, const uint32_t BlockAddress, uint16_t TotalBlocks)\r
+{\r
+       uint16_t CurrDFPage          = ((BlockAddress * VIRTUAL_MEMORY_BLOCK_SIZE) / DATAFLASH_PAGE_SIZE);\r
+       uint16_t CurrDFPageByte      = ((BlockAddress * VIRTUAL_MEMORY_BLOCK_SIZE) % DATAFLASH_PAGE_SIZE);\r
+       uint8_t  CurrDFPageByteDiv16 = (CurrDFPageByte >> 4);\r
+\r
+       /* Copy selected dataflash's current page contents to the dataflash buffer */\r
+       Dataflash_SelectChipFromPage(CurrDFPage);\r
+       Dataflash_SendByte(DF_CMD_MAINMEMTOBUFF1);\r
+       Dataflash_SendAddressBytes(CurrDFPage, 0);\r
+       Dataflash_WaitWhileBusy();\r
+\r
+       /* Send the dataflash buffer write command */\r
+       Dataflash_ToggleSelectedChipCS();\r
+       Dataflash_SendByte(DF_CMD_BUFF1WRITE);\r
+       Dataflash_SendAddressBytes(0, CurrDFPageByte);\r
+\r
+       /* Wait until endpoint is ready before continuing */\r
+       while (!(Endpoint_IsReadWriteAllowed()));\r
+\r
+       while (TotalBlocks)\r
+       {\r
+               uint8_t BytesInBlockDiv16 = 0;\r
+               \r
+               /* Write an endpoint packet sized data block to the dataflash */\r
+               while (BytesInBlockDiv16 < (VIRTUAL_MEMORY_BLOCK_SIZE >> 4))\r
+               {\r
+                       /* Check if the endpoint is currently empty */\r
+                       if (!(Endpoint_IsReadWriteAllowed()))\r
+                       {\r
+                               /* Clear the current endpoint bank */\r
+                               Endpoint_ClearOUT();\r
+                               \r
+                               /* Wait until the host has sent another packet */\r
+                               while (!(Endpoint_IsReadWriteAllowed()));\r
+                       }\r
+\r
+                       /* Check if end of dataflash page reached */\r
+                       if (CurrDFPageByteDiv16 == (DATAFLASH_PAGE_SIZE >> 4))\r
+                       {\r
+                               /* Write the dataflash buffer contents back to the dataflash page */\r
+                               Dataflash_ToggleSelectedChipCS();\r
+                               Dataflash_SendByte(DF_CMD_BUFF1TOMAINMEMWITHERASE);\r
+                               Dataflash_SendAddressBytes(CurrDFPage, 0);\r
+\r
+                               /* Reset the dataflash buffer counter, increment the page counter */\r
+                               CurrDFPageByteDiv16 = 0;\r
+                               CurrDFPage++;\r
+\r
+                               /* Select the next dataflash chip based on the new dataflash page index */\r
+                               Dataflash_SelectChipFromPage(CurrDFPage);\r
+                               Dataflash_WaitWhileBusy();\r
+\r
+#if (DATAFLASH_PAGE_SIZE > VIRTUAL_MEMORY_BLOCK_SIZE)\r
+                               /* If less than one dataflash page remaining, copy over the existing page to preserve trailing data */\r
+                               if ((TotalBlocks * (VIRTUAL_MEMORY_BLOCK_SIZE >> 4)) < (DATAFLASH_PAGE_SIZE >> 4))\r
+                               {\r
+                                       /* Copy selected dataflash's current page contents to the dataflash buffer */\r
+                                       Dataflash_ToggleSelectedChipCS();\r
+                                       Dataflash_SendByte(DF_CMD_MAINMEMTOBUFF1);\r
+                                       Dataflash_SendAddressBytes(CurrDFPage, 0);\r
+                                       Dataflash_WaitWhileBusy();\r
+                               }\r
+#endif\r
+\r
+                               /* Send the dataflash buffer write command */\r
+                               Dataflash_ToggleSelectedChipCS();\r
+                               Dataflash_SendByte(DF_CMD_BUFF1WRITE);\r
+                               Dataflash_SendAddressBytes(0, 0);\r
+                       }\r
+\r
+                       /* Write one 16-byte chunk of data to the dataflash */\r
+                       Dataflash_SendByte(Endpoint_Read_Byte());\r
+                       Dataflash_SendByte(Endpoint_Read_Byte());\r
+                       Dataflash_SendByte(Endpoint_Read_Byte());\r
+                       Dataflash_SendByte(Endpoint_Read_Byte());\r
+                       Dataflash_SendByte(Endpoint_Read_Byte());\r
+                       Dataflash_SendByte(Endpoint_Read_Byte());\r
+                       Dataflash_SendByte(Endpoint_Read_Byte());\r
+                       Dataflash_SendByte(Endpoint_Read_Byte());\r
+                       Dataflash_SendByte(Endpoint_Read_Byte());\r
+                       Dataflash_SendByte(Endpoint_Read_Byte());\r
+                       Dataflash_SendByte(Endpoint_Read_Byte());\r
+                       Dataflash_SendByte(Endpoint_Read_Byte());\r
+                       Dataflash_SendByte(Endpoint_Read_Byte());\r
+                       Dataflash_SendByte(Endpoint_Read_Byte());\r
+                       Dataflash_SendByte(Endpoint_Read_Byte());\r
+                       Dataflash_SendByte(Endpoint_Read_Byte());\r
+                       \r
+                       /* Increment the dataflash page 16 byte block counter */\r
+                       CurrDFPageByteDiv16++;\r
+\r
+                       /* Increment the block 16 byte block counter */\r
+                       BytesInBlockDiv16++;\r
+\r
+                       /* Check if the current command is being aborted by the host */\r
+                       if (MSInterfaceInfo->IsMassStoreReset)\r
+                         return;                       \r
+               }\r
+                       \r
+               /* Decrement the blocks remaining counter and reset the sub block counter */\r
+               TotalBlocks--;\r
+       }\r
+\r
+       /* Write the dataflash buffer contents back to the dataflash page */\r
+       Dataflash_ToggleSelectedChipCS();\r
+       Dataflash_SendByte(DF_CMD_BUFF1TOMAINMEMWITHERASE);\r
+       Dataflash_SendAddressBytes(CurrDFPage, 0x00);\r
+       Dataflash_WaitWhileBusy();\r
+\r
+       /* If the endpoint is empty, clear it ready for the next packet from the host */\r
+       if (!(Endpoint_IsReadWriteAllowed()))\r
+         Endpoint_ClearOUT();\r
+\r
+       /* Deselect all dataflash chips */\r
+       Dataflash_DeselectChip();\r
+}\r
+\r
+/** Reads blocks (OS blocks, not Dataflash pages) from the storage medium, the board dataflash IC(s), into\r
+ *  the pre-selected data IN endpoint. This routine reads in Dataflash page sized blocks from the Dataflash\r
+ *  and writes them in OS sized blocks to the endpoint.\r
+ *\r
+ *  \param BlockAddress  Data block starting address for the read sequence\r
+ *  \param TotalBlocks   Number of blocks of data to read\r
+ */\r
+void DataflashManager_ReadBlocks(USB_ClassInfo_MS_t* MSInterfaceInfo, const uint32_t BlockAddress, uint16_t TotalBlocks)\r
+{\r
+       uint16_t CurrDFPage          = ((BlockAddress * VIRTUAL_MEMORY_BLOCK_SIZE) / DATAFLASH_PAGE_SIZE);\r
+       uint16_t CurrDFPageByte      = ((BlockAddress * VIRTUAL_MEMORY_BLOCK_SIZE) % DATAFLASH_PAGE_SIZE);\r
+       uint8_t  CurrDFPageByteDiv16 = (CurrDFPageByte >> 4);\r
+\r
+       /* Send the dataflash main memory page read command */\r
+       Dataflash_SelectChipFromPage(CurrDFPage);\r
+       Dataflash_SendByte(DF_CMD_MAINMEMPAGEREAD);\r
+       Dataflash_SendAddressBytes(CurrDFPage, CurrDFPageByte);\r
+       Dataflash_SendByte(0x00);\r
+       Dataflash_SendByte(0x00);\r
+       Dataflash_SendByte(0x00);\r
+       Dataflash_SendByte(0x00);\r
+       \r
+       /* Wait until endpoint is ready before continuing */\r
+       while (!(Endpoint_IsReadWriteAllowed()));\r
+       \r
+       while (TotalBlocks)\r
+       {\r
+               uint8_t BytesInBlockDiv16 = 0;\r
+               \r
+               /* Write an endpoint packet sized data block to the dataflash */\r
+               while (BytesInBlockDiv16 < (VIRTUAL_MEMORY_BLOCK_SIZE >> 4))\r
+               {\r
+                       /* Check if the endpoint is currently full */\r
+                       if (!(Endpoint_IsReadWriteAllowed()))\r
+                       {\r
+                               /* Clear the endpoint bank to send its contents to the host */\r
+                               Endpoint_ClearIN();\r
+                               \r
+                               /* Wait until the endpoint is ready for more data */\r
+                               while (!(Endpoint_IsReadWriteAllowed()));\r
+                       }\r
+                       \r
+                       /* Check if end of dataflash page reached */\r
+                       if (CurrDFPageByteDiv16 == (DATAFLASH_PAGE_SIZE >> 4))\r
+                       {\r
+                               /* Reset the dataflash buffer counter, increment the page counter */\r
+                               CurrDFPageByteDiv16 = 0;\r
+                               CurrDFPage++;\r
+\r
+                               /* Select the next dataflash chip based on the new dataflash page index */\r
+                               Dataflash_SelectChipFromPage(CurrDFPage);\r
+                               \r
+                               /* Send the dataflash main memory page read command */\r
+                               Dataflash_SendByte(DF_CMD_MAINMEMPAGEREAD);\r
+                               Dataflash_SendAddressBytes(CurrDFPage, 0);\r
+                               Dataflash_SendByte(0x00);\r
+                               Dataflash_SendByte(0x00);\r
+                               Dataflash_SendByte(0x00);\r
+                               Dataflash_SendByte(0x00);\r
+                       }       \r
+\r
+                       /* Read one 16-byte chunk of data from the dataflash */\r
+                       Endpoint_Write_Byte(Dataflash_ReceiveByte());\r
+                       Endpoint_Write_Byte(Dataflash_ReceiveByte());\r
+                       Endpoint_Write_Byte(Dataflash_ReceiveByte());\r
+                       Endpoint_Write_Byte(Dataflash_ReceiveByte());\r
+                       Endpoint_Write_Byte(Dataflash_ReceiveByte());\r
+                       Endpoint_Write_Byte(Dataflash_ReceiveByte());\r
+                       Endpoint_Write_Byte(Dataflash_ReceiveByte());\r
+                       Endpoint_Write_Byte(Dataflash_ReceiveByte());\r
+                       Endpoint_Write_Byte(Dataflash_ReceiveByte());\r
+                       Endpoint_Write_Byte(Dataflash_ReceiveByte());\r
+                       Endpoint_Write_Byte(Dataflash_ReceiveByte());\r
+                       Endpoint_Write_Byte(Dataflash_ReceiveByte());\r
+                       Endpoint_Write_Byte(Dataflash_ReceiveByte());\r
+                       Endpoint_Write_Byte(Dataflash_ReceiveByte());\r
+                       Endpoint_Write_Byte(Dataflash_ReceiveByte());\r
+                       Endpoint_Write_Byte(Dataflash_ReceiveByte());\r
+                       \r
+                       /* Increment the dataflash page 16 byte block counter */\r
+                       CurrDFPageByteDiv16++;\r
+                       \r
+                       /* Increment the block 16 byte block counter */\r
+                       BytesInBlockDiv16++;\r
+\r
+                       /* Check if the current command is being aborted by the host */\r
+                       if (MSInterfaceInfo->IsMassStoreReset)\r
+                         return;\r
+               }\r
+               \r
+               /* Decrement the blocks remaining counter */\r
+               TotalBlocks--;\r
+       }\r
+       \r
+       /* If the endpoint is full, send its contents to the host */\r
+       if (!(Endpoint_IsReadWriteAllowed()))\r
+         Endpoint_ClearIN();\r
+\r
+       /* Deselect all dataflash chips */\r
+       Dataflash_DeselectChip();\r
+}\r
+\r
+/** Writes blocks (OS blocks, not Dataflash pages) to the storage medium, the board dataflash IC(s), from\r
+ *  the a given RAM buffer. This routine reads in OS sized blocks from the buffer and writes them to the\r
+ *  dataflash in Dataflash page sized blocks. This can be linked to FAT libraries to write files to the\r
+ *  dataflash.\r
+ *\r
+ *  \param BlockAddress  Data block starting address for the write sequence\r
+ *  \param TotalBlocks   Number of blocks of data to write\r
+ *  \param BufferPtr     Pointer to the data source RAM buffer\r
+ */\r
+void DataflashManager_WriteBlocks_RAM(const uint32_t BlockAddress, uint16_t TotalBlocks, uint8_t* BufferPtr)\r
+{\r
+       uint16_t CurrDFPage          = ((BlockAddress * VIRTUAL_MEMORY_BLOCK_SIZE) / DATAFLASH_PAGE_SIZE);\r
+       uint16_t CurrDFPageByte      = ((BlockAddress * VIRTUAL_MEMORY_BLOCK_SIZE) % DATAFLASH_PAGE_SIZE);\r
+       uint8_t  CurrDFPageByteDiv16 = (CurrDFPageByte >> 4);\r
+\r
+       /* Copy selected dataflash's current page contents to the dataflash buffer */\r
+       Dataflash_SelectChipFromPage(CurrDFPage);\r
+       Dataflash_SendByte(DF_CMD_MAINMEMTOBUFF1);\r
+       Dataflash_SendAddressBytes(CurrDFPage, 0);\r
+       Dataflash_WaitWhileBusy();\r
+\r
+       /* Send the dataflash buffer write command */\r
+       Dataflash_ToggleSelectedChipCS();\r
+       Dataflash_SendByte(DF_CMD_BUFF1WRITE);\r
+       Dataflash_SendAddressBytes(0, CurrDFPageByte);\r
+\r
+       while (TotalBlocks)\r
+       {\r
+               uint8_t BytesInBlockDiv16 = 0;\r
+               \r
+               /* Write an endpoint packet sized data block to the dataflash */\r
+               while (BytesInBlockDiv16 < (VIRTUAL_MEMORY_BLOCK_SIZE >> 4))\r
+               {\r
+                       /* Check if end of dataflash page reached */\r
+                       if (CurrDFPageByteDiv16 == (DATAFLASH_PAGE_SIZE >> 4))\r
+                       {\r
+                               /* Write the dataflash buffer contents back to the dataflash page */\r
+                               Dataflash_ToggleSelectedChipCS();\r
+                               Dataflash_SendByte(DF_CMD_BUFF1TOMAINMEMWITHERASE);\r
+                               Dataflash_SendAddressBytes(CurrDFPage, 0);\r
+\r
+                               /* Reset the dataflash buffer counter, increment the page counter */\r
+                               CurrDFPageByteDiv16 = 0;\r
+                               CurrDFPage++;\r
+\r
+                               /* Select the next dataflash chip based on the new dataflash page index */\r
+                               Dataflash_SelectChipFromPage(CurrDFPage);\r
+                               Dataflash_WaitWhileBusy();\r
+\r
+#if (DATAFLASH_PAGE_SIZE > VIRTUAL_MEMORY_BLOCK_SIZE)\r
+                               /* If less than one dataflash page remaining, copy over the existing page to preserve trailing data */\r
+                               if ((TotalBlocks * (VIRTUAL_MEMORY_BLOCK_SIZE >> 4)) < (DATAFLASH_PAGE_SIZE >> 4))\r
+                               {\r
+                                       /* Copy selected dataflash's current page contents to the dataflash buffer */\r
+                                       Dataflash_ToggleSelectedChipCS();\r
+                                       Dataflash_SendByte(DF_CMD_MAINMEMTOBUFF1);\r
+                                       Dataflash_SendAddressBytes(CurrDFPage, 0);\r
+                                       Dataflash_WaitWhileBusy();\r
+                               }\r
+#endif\r
+\r
+                               /* Send the dataflash buffer write command */\r
+                               Dataflash_ToggleSelectedChipCS();\r
+                               Dataflash_SendByte(DF_CMD_BUFF1WRITE);\r
+                               Dataflash_SendAddressBytes(0, 0);\r
+                       }\r
+                       \r
+                       /* Write one 16-byte chunk of data to the dataflash */\r
+                       for (uint8_t ByteNum = 0; ByteNum < 16; ByteNum++)\r
+                         Dataflash_SendByte(*(BufferPtr++));\r
+                       \r
+                       /* Increment the dataflash page 16 byte block counter */\r
+                       CurrDFPageByteDiv16++;\r
+\r
+                       /* Increment the block 16 byte block counter */\r
+                       BytesInBlockDiv16++;            \r
+               }\r
+                       \r
+               /* Decrement the blocks remaining counter and reset the sub block counter */\r
+               TotalBlocks--;\r
+       }\r
+\r
+       /* Write the dataflash buffer contents back to the dataflash page */\r
+       Dataflash_ToggleSelectedChipCS();\r
+       Dataflash_SendByte(DF_CMD_BUFF1TOMAINMEMWITHERASE);\r
+       Dataflash_SendAddressBytes(CurrDFPage, 0x00);\r
+       Dataflash_WaitWhileBusy();\r
+\r
+       /* Deselect all dataflash chips */\r
+       Dataflash_DeselectChip();\r
+}\r
+\r
+/** Reads blocks (OS blocks, not Dataflash pages) from the storage medium, the board dataflash IC(s), into\r
+ *  the a preallocated RAM buffer. This routine reads in Dataflash page sized blocks from the Dataflash\r
+ *  and writes them in OS sized blocks to the given buffer. This can be linked to FAT libraries to read\r
+ *  the files stored on the dataflash.\r
+ *\r
+ *  \param BlockAddress  Data block starting address for the read sequence\r
+ *  \param TotalBlocks   Number of blocks of data to read\r
+ *  \param BufferPtr     Pointer to the data destination RAM buffer\r
+ */\r
+void DataflashManager_ReadBlocks_RAM(const uint32_t BlockAddress, uint16_t TotalBlocks, uint8_t* BufferPtr)\r
+{\r
+       uint16_t CurrDFPage          = ((BlockAddress * VIRTUAL_MEMORY_BLOCK_SIZE) / DATAFLASH_PAGE_SIZE);\r
+       uint16_t CurrDFPageByte      = ((BlockAddress * VIRTUAL_MEMORY_BLOCK_SIZE) % DATAFLASH_PAGE_SIZE);\r
+       uint8_t  CurrDFPageByteDiv16 = (CurrDFPageByte >> 4);\r
+\r
+       /* Send the dataflash main memory page read command */\r
+       Dataflash_SelectChipFromPage(CurrDFPage);\r
+       Dataflash_SendByte(DF_CMD_MAINMEMPAGEREAD);\r
+       Dataflash_SendAddressBytes(CurrDFPage, CurrDFPageByte);\r
+       Dataflash_SendByte(0x00);\r
+       Dataflash_SendByte(0x00);\r
+       Dataflash_SendByte(0x00);\r
+       Dataflash_SendByte(0x00);\r
+\r
+       while (TotalBlocks)\r
+       {\r
+               uint8_t BytesInBlockDiv16 = 0;\r
+               \r
+               /* Write an endpoint packet sized data block to the dataflash */\r
+               while (BytesInBlockDiv16 < (VIRTUAL_MEMORY_BLOCK_SIZE >> 4))\r
+               {\r
+                       /* Check if end of dataflash page reached */\r
+                       if (CurrDFPageByteDiv16 == (DATAFLASH_PAGE_SIZE >> 4))\r
+                       {\r
+                               /* Reset the dataflash buffer counter, increment the page counter */\r
+                               CurrDFPageByteDiv16 = 0;\r
+                               CurrDFPage++;\r
+\r
+                               /* Select the next dataflash chip based on the new dataflash page index */\r
+                               Dataflash_SelectChipFromPage(CurrDFPage);\r
+                               \r
+                               /* Send the dataflash main memory page read command */\r
+                               Dataflash_SendByte(DF_CMD_MAINMEMPAGEREAD);\r
+                               Dataflash_SendAddressBytes(CurrDFPage, 0);\r
+                               Dataflash_SendByte(0x00);\r
+                               Dataflash_SendByte(0x00);\r
+                               Dataflash_SendByte(0x00);\r
+                               Dataflash_SendByte(0x00);\r
+                       }       \r
+\r
+                       /* Read one 16-byte chunk of data from the dataflash */\r
+                       for (uint8_t ByteNum = 0; ByteNum < 16; ByteNum++)\r
+                         *(BufferPtr++) = Dataflash_ReceiveByte();\r
+                       \r
+                       /* Increment the dataflash page 16 byte block counter */\r
+                       CurrDFPageByteDiv16++;\r
+                       \r
+                       /* Increment the block 16 byte block counter */\r
+                       BytesInBlockDiv16++;\r
+               }\r
+               \r
+               /* Decrement the blocks remaining counter */\r
+               TotalBlocks--;\r
+       }\r
+\r
+       /* Deselect all dataflash chips */\r
+       Dataflash_DeselectChip();\r
+}\r
+\r
+/** Disables the dataflash memory write protection bits on the board Dataflash ICs, if enabled. */\r
+void DataflashManager_ResetDataflashProtections(void)\r
+{\r
+       /* Select first dataflash chip, send the read status register command */\r
+       Dataflash_SelectChip(DATAFLASH_CHIP1);\r
+       Dataflash_SendByte(DF_CMD_GETSTATUS);\r
+       \r
+       /* Check if sector protection is enabled */\r
+       if (Dataflash_ReceiveByte() & DF_STATUS_SECTORPROTECTION_ON)\r
+       {\r
+               Dataflash_ToggleSelectedChipCS();\r
+\r
+               /* Send the commands to disable sector protection */\r
+               Dataflash_SendByte(DF_CMD_SECTORPROTECTIONOFF[0]);\r
+               Dataflash_SendByte(DF_CMD_SECTORPROTECTIONOFF[1]);\r
+               Dataflash_SendByte(DF_CMD_SECTORPROTECTIONOFF[2]);\r
+               Dataflash_SendByte(DF_CMD_SECTORPROTECTIONOFF[3]);\r
+       }\r
+       \r
+       /* Select second dataflash chip (if present on selected board), send read status register command */\r
+       #if (DATAFLASH_TOTALCHIPS == 2)\r
+       Dataflash_SelectChip(DATAFLASH_CHIP2);\r
+       Dataflash_SendByte(DF_CMD_GETSTATUS);\r
+       \r
+       /* Check if sector protection is enabled */\r
+       if (Dataflash_ReceiveByte() & DF_STATUS_SECTORPROTECTION_ON)\r
+       {\r
+               Dataflash_ToggleSelectedChipCS();\r
+\r
+               /* Send the commands to disable sector protection */\r
+               Dataflash_SendByte(DF_CMD_SECTORPROTECTIONOFF[0]);\r
+               Dataflash_SendByte(DF_CMD_SECTORPROTECTIONOFF[1]);\r
+               Dataflash_SendByte(DF_CMD_SECTORPROTECTIONOFF[2]);\r
+               Dataflash_SendByte(DF_CMD_SECTORPROTECTIONOFF[3]);\r
+       }\r
+       #endif\r
+       \r
+       /* Deselect current dataflash chip */\r
+       Dataflash_DeselectChip();\r
+}\r
diff --git a/Demos/Device/ClassDriver/MassStorage/Lib/DataflashManager.h b/Demos/Device/ClassDriver/MassStorage/Lib/DataflashManager.h
new file mode 100644 (file)
index 0000000..b828051
--- /dev/null
@@ -0,0 +1,75 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  Header file for DataflashManager.c.\r
+ */\r
\r
+#ifndef _DATAFLASH_MANAGER_H\r
+#define _DATAFLASH_MANAGER_H\r
+\r
+       /* Includes: */\r
+               #include <avr/io.h>\r
+               \r
+               #include "MassStorage.h"\r
+               #include "Descriptors.h"\r
+\r
+               #include <LUFA/Common/Common.h>              // Function Attribute, Atomic, Debug and ISR Macros\r
+               #include <LUFA/Drivers/USB/USB.h>            // USB Functionality\r
+               #include <LUFA/Drivers/Board/Dataflash.h>    // Dataflash chip driver\r
+\r
+       /* Preprocessor Checks: */\r
+               #if (DATAFLASH_PAGE_SIZE % 16)\r
+                       #error Dataflash page size must be a multiple of 16 bytes.\r
+               #endif\r
+\r
+       /* Defines: */\r
+               /** Total number of bytes of the storage medium, comprised of one or more dataflash ICs. */\r
+               #define VIRTUAL_MEMORY_BYTES                ((uint32_t)DATAFLASH_PAGES * DATAFLASH_PAGE_SIZE * DATAFLASH_TOTALCHIPS)\r
+\r
+               /** Block size of the device. This is kept at 512 to remain compatible with the OS despite the underlying\r
+                *  storage media (Dataflash) using a different native block size.\r
+                */\r
+               #define VIRTUAL_MEMORY_BLOCK_SIZE           512\r
+               \r
+               /** Total number of blocks of the virtual memory for reporting to the host as the device's total capacity. */\r
+               #define VIRTUAL_MEMORY_BLOCKS               (VIRTUAL_MEMORY_BYTES / VIRTUAL_MEMORY_BLOCK_SIZE)\r
+               \r
+       /* Function Prototypes: */\r
+               void DataflashManager_WriteBlocks(USB_ClassInfo_MS_t* MSInterfaceInfo, const uint32_t BlockAddress, uint16_t TotalBlocks);\r
+               void DataflashManager_ReadBlocks(USB_ClassInfo_MS_t* MSInterfaceInfo, const uint32_t BlockAddress, uint16_t TotalBlocks);\r
+               void DataflashManager_WriteBlocks_RAM(const uint32_t BlockAddress, uint16_t TotalBlocks,\r
+                                                     uint8_t* BufferPtr) ATTR_NON_NULL_PTR_ARG(3);\r
+               void DataflashManager_ReadBlocks_RAM(const uint32_t BlockAddress, uint16_t TotalBlocks,\r
+                                                    uint8_t* BufferPtr) ATTR_NON_NULL_PTR_ARG(3);\r
+               void DataflashManager_ResetDataflashProtections(void);\r
+               \r
+#endif\r
diff --git a/Demos/Device/ClassDriver/MassStorage/Lib/SCSI.c b/Demos/Device/ClassDriver/MassStorage/Lib/SCSI.c
new file mode 100644 (file)
index 0000000..d56e343
--- /dev/null
@@ -0,0 +1,345 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  SCSI command processing routines, for SCSI commands issued by the host. Mass Storage\r
+ *  devices use a thin "Bulk-Only Transport" protocol for issuing commands and status information,\r
+ *  which wrap around standard SCSI device commands for controlling the actual storage medium.\r
+ */\r
\r
+#define  INCLUDE_FROM_SCSI_C\r
+#include "SCSI.h"\r
+\r
+/** Structure to hold the SCSI response data to a SCSI INQUIRY command. This gives information about the device's\r
+ *  features and capabilities.\r
+ */\r
+SCSI_Inquiry_Response_t InquiryData = \r
+       {\r
+               .DeviceType          = DEVICE_TYPE_BLOCK,\r
+               .PeripheralQualifier = 0,\r
+                       \r
+               .Removable           = true,\r
+                       \r
+               .Version             = 0,\r
+                       \r
+               .ResponseDataFormat  = 2,\r
+               .NormACA             = false,\r
+               .TrmTsk              = false,\r
+               .AERC                = false,\r
+\r
+               .AdditionalLength    = 0x1F,\r
+                       \r
+               .SoftReset           = false,\r
+               .CmdQue              = false,\r
+               .Linked              = false,\r
+               .Sync                = false,\r
+               .WideBus16Bit        = false,\r
+               .WideBus32Bit        = false,\r
+               .RelAddr             = false,\r
+               \r
+               .VendorID            = "LUFA",\r
+               .ProductID           = "Dataflash Disk",\r
+               .RevisionID          = {'0','.','0','0'},\r
+       };\r
+\r
+/** Structure to hold the sense data for the last issued SCSI command, which is returned to the host after a SCSI REQUEST SENSE\r
+ *  command is issued. This gives information on exactly why the last command failed to complete.\r
+ */\r
+SCSI_Request_Sense_Response_t SenseData =\r
+       {\r
+               .ResponseCode        = 0x70,\r
+               .AdditionalLength    = 0x0A,\r
+       };\r
+\r
+\r
+/** Main routine to process the SCSI command located in the Command Block Wrapper read from the host. This dispatches\r
+ *  to the appropriate SCSI command handling routine if the issued command is supported by the device, else it returns\r
+ *  a command failure due to a ILLEGAL REQUEST.\r
+ *\r
+ *  \param MSInterfaceInfo  Pointer to the Mass Storage class interface structure that the command is associated with\r
+ */\r
+bool SCSI_DecodeSCSICommand(USB_ClassInfo_MS_t* MSInterfaceInfo)\r
+{\r
+       bool CommandSuccess = false;\r
+\r
+       /* Run the appropriate SCSI command hander function based on the passed command */\r
+       switch (MSInterfaceInfo->CommandBlock.SCSICommandData[0])\r
+       {\r
+               case SCSI_CMD_INQUIRY:\r
+                       CommandSuccess = SCSI_Command_Inquiry(MSInterfaceInfo);                 \r
+                       break;\r
+               case SCSI_CMD_REQUEST_SENSE:\r
+                       CommandSuccess = SCSI_Command_Request_Sense(MSInterfaceInfo);\r
+                       break;\r
+               case SCSI_CMD_READ_CAPACITY_10:\r
+                       CommandSuccess = SCSI_Command_Read_Capacity_10(MSInterfaceInfo);                        \r
+                       break;\r
+               case SCSI_CMD_SEND_DIAGNOSTIC:\r
+                       CommandSuccess = SCSI_Command_Send_Diagnostic(MSInterfaceInfo);\r
+                       break;\r
+               case SCSI_CMD_WRITE_10:\r
+                       CommandSuccess = SCSI_Command_ReadWrite_10(MSInterfaceInfo, DATA_WRITE);\r
+                       break;\r
+               case SCSI_CMD_READ_10:\r
+                       CommandSuccess = SCSI_Command_ReadWrite_10(MSInterfaceInfo, DATA_READ);\r
+                       break;\r
+               case SCSI_CMD_TEST_UNIT_READY:\r
+               case SCSI_CMD_PREVENT_ALLOW_MEDIUM_REMOVAL:\r
+               case SCSI_CMD_VERIFY_10:\r
+                       /* These commands should just succeed, no handling required */\r
+                       CommandSuccess = true;\r
+                       MSInterfaceInfo->CommandBlock.DataTransferLength = 0;\r
+                       break;\r
+               default:\r
+                       /* Update the SENSE key to reflect the invalid command */\r
+                       SCSI_SET_SENSE(SCSI_SENSE_KEY_ILLEGAL_REQUEST,\r
+                                  SCSI_ASENSE_INVALID_COMMAND,\r
+                                  SCSI_ASENSEQ_NO_QUALIFIER);\r
+                       break;\r
+       }\r
+\r
+       /* Check if command was successfully processed */\r
+       if (CommandSuccess)\r
+       {\r
+               SCSI_SET_SENSE(SCSI_SENSE_KEY_GOOD,\r
+                              SCSI_ASENSE_NO_ADDITIONAL_INFORMATION,\r
+                              SCSI_ASENSEQ_NO_QUALIFIER);\r
+               \r
+               return true;\r
+       }\r
+\r
+       return false;\r
+}\r
+\r
+/** Command processing for an issued SCSI INQUIRY command. This command returns information about the device's features\r
+ *  and capabilities to the host.\r
+ *\r
+ *  \param MSInterfaceInfo  Pointer to the Mass Storage class interface structure that the command is associated with\r
+ *\r
+ *  \return Boolean true if the command completed successfully, false otherwise.\r
+ */\r
+static bool SCSI_Command_Inquiry(USB_ClassInfo_MS_t* MSInterfaceInfo)\r
+{\r
+       uint16_t AllocationLength  = (((uint16_t)MSInterfaceInfo->CommandBlock.SCSICommandData[3] << 8) |\r
+                                                MSInterfaceInfo->CommandBlock.SCSICommandData[4]);\r
+       uint16_t BytesTransferred  = (AllocationLength < sizeof(InquiryData))? AllocationLength :\r
+                                                                              sizeof(InquiryData);\r
+\r
+       /* Only the standard INQUIRY data is supported, check if any optional INQUIRY bits set */\r
+       if ((MSInterfaceInfo->CommandBlock.SCSICommandData[1] & ((1 << 0) | (1 << 1))) ||\r
+            MSInterfaceInfo->CommandBlock.SCSICommandData[2])\r
+       {\r
+               /* Optional but unsupported bits set - update the SENSE key and fail the request */\r
+               SCSI_SET_SENSE(SCSI_SENSE_KEY_ILLEGAL_REQUEST,\r
+                              SCSI_ASENSE_INVALID_FIELD_IN_CDB,\r
+                              SCSI_ASENSEQ_NO_QUALIFIER);\r
+\r
+               return false;\r
+       }\r
+       \r
+       Endpoint_Write_Stream_LE(&InquiryData, BytesTransferred, NO_STREAM_CALLBACK);\r
+\r
+       uint8_t PadBytes[AllocationLength - BytesTransferred];\r
+       \r
+       /* Pad out remaining bytes with 0x00 */\r
+       Endpoint_Write_Stream_LE(&PadBytes, (AllocationLength - BytesTransferred), NO_STREAM_CALLBACK);\r
+\r
+       /* Finalize the stream transfer to send the last packet */\r
+       Endpoint_ClearIN();\r
+\r
+       /* Succeed the command and update the bytes transferred counter */\r
+       MSInterfaceInfo->CommandBlock.DataTransferLength -= BytesTransferred;\r
+       \r
+       return true;\r
+}\r
+\r
+/** Command processing for an issued SCSI REQUEST SENSE command. This command returns information about the last issued command,\r
+ *  including the error code and additional error information so that the host can determine why a command failed to complete.\r
+ *\r
+ *  \param MSInterfaceInfo  Pointer to the Mass Storage class interface structure that the command is associated with\r
+ *\r
+ *  \return Boolean true if the command completed successfully, false otherwise.\r
+ */\r
+static bool SCSI_Command_Request_Sense(USB_ClassInfo_MS_t* MSInterfaceInfo)\r
+{\r
+       uint8_t  AllocationLength = MSInterfaceInfo->CommandBlock.SCSICommandData[4];\r
+       uint8_t  BytesTransferred = (AllocationLength < sizeof(SenseData))? AllocationLength : sizeof(SenseData);\r
+       \r
+       uint8_t PadBytes[AllocationLength - BytesTransferred];\r
+\r
+       Endpoint_Write_Stream_LE(&SenseData, BytesTransferred, NO_STREAM_CALLBACK);\r
+       Endpoint_Write_Stream_LE(&PadBytes, (AllocationLength - BytesTransferred), NO_STREAM_CALLBACK);\r
+       Endpoint_ClearIN();\r
+\r
+       /* Succeed the command and update the bytes transferred counter */\r
+       MSInterfaceInfo->CommandBlock.DataTransferLength -= BytesTransferred;\r
+\r
+       return true;\r
+}\r
+\r
+/** Command processing for an issued SCSI READ CAPACITY (10) command. This command returns information about the device's capacity\r
+ *  on the selected Logical Unit (drive), as a number of OS-sized blocks.\r
+ *\r
+ *  \param MSInterfaceInfo  Pointer to the Mass Storage class interface structure that the command is associated with\r
+ *\r
+ *  \return Boolean true if the command completed successfully, false otherwise.\r
+ */\r
+static bool SCSI_Command_Read_Capacity_10(USB_ClassInfo_MS_t* MSInterfaceInfo)\r
+{\r
+       uint32_t TotalLUNs      = (LUN_MEDIA_BLOCKS - 1);\r
+       uint32_t MediaBlockSize = VIRTUAL_MEMORY_BLOCK_SIZE;\r
+\r
+       Endpoint_Write_Stream_BE(&TotalLUNs, sizeof(TotalLUNs), NO_STREAM_CALLBACK);\r
+       Endpoint_Write_Stream_BE(&MediaBlockSize, sizeof(MediaBlockSize), NO_STREAM_CALLBACK);\r
+       Endpoint_ClearIN();\r
+       \r
+       /* Succeed the command and update the bytes transferred counter */\r
+       MSInterfaceInfo->CommandBlock.DataTransferLength -= 8;\r
+       \r
+       return true;\r
+}\r
+\r
+/** Command processing for an issued SCSI SEND DIAGNOSTIC command. This command performs a quick check of the Dataflash ICs on the\r
+ *  board, and indicates if they are present and functioning correctly. Only the Self-Test portion of the diagnostic command is\r
+ *  supported.\r
+ *\r
+ *  \param MSInterfaceInfo  Pointer to the Mass Storage class interface structure that the command is associated with\r
+ *\r
+ *  \return Boolean true if the command completed successfully, false otherwise.\r
+ */\r
+static bool SCSI_Command_Send_Diagnostic(USB_ClassInfo_MS_t* MSInterfaceInfo)\r
+{\r
+       uint8_t ReturnByte;\r
+\r
+       /* Check to see if the SELF TEST bit is not set */\r
+       if (!(MSInterfaceInfo->CommandBlock.SCSICommandData[1] & (1 << 2)))\r
+       {\r
+               /* Only self-test supported - update SENSE key and fail the command */\r
+               SCSI_SET_SENSE(SCSI_SENSE_KEY_ILLEGAL_REQUEST,\r
+                              SCSI_ASENSE_INVALID_FIELD_IN_CDB,\r
+                              SCSI_ASENSEQ_NO_QUALIFIER);\r
+\r
+               return false;\r
+       }\r
+       \r
+       /* Test first Dataflash IC is present and responding to commands */\r
+       Dataflash_SelectChip(DATAFLASH_CHIP1);\r
+       Dataflash_SendByte(DF_CMD_READMANUFACTURERDEVICEINFO);\r
+       ReturnByte = Dataflash_ReceiveByte();\r
+       Dataflash_DeselectChip();\r
+\r
+       /* If returned data is invalid, fail the command */\r
+       if (ReturnByte != DF_MANUFACTURER_ATMEL)\r
+       {\r
+               /* Update SENSE key with a hardware error condition and return command fail */\r
+               SCSI_SET_SENSE(SCSI_SENSE_KEY_HARDWARE_ERROR,\r
+                              SCSI_ASENSE_NO_ADDITIONAL_INFORMATION,\r
+                              SCSI_ASENSEQ_NO_QUALIFIER);      \r
+       \r
+               return false;\r
+       }\r
+\r
+       #if (DATAFLASH_TOTALCHIPS == 2)\r
+       /* Test second Dataflash IC is present and responding to commands */\r
+       Dataflash_SelectChip(DATAFLASH_CHIP2);\r
+       Dataflash_SendByte(DF_CMD_READMANUFACTURERDEVICEINFO);\r
+       ReturnByte = Dataflash_ReceiveByte();\r
+       Dataflash_DeselectChip();\r
+\r
+       /* If returned data is invalid, fail the command */\r
+       if (ReturnByte != DF_MANUFACTURER_ATMEL)\r
+       {\r
+               /* Update SENSE key with a hardware error condition and return command fail */\r
+               SCSI_SET_SENSE(SCSI_SENSE_KEY_HARDWARE_ERROR,\r
+                              SCSI_ASENSE_NO_ADDITIONAL_INFORMATION,\r
+                              SCSI_ASENSEQ_NO_QUALIFIER);      \r
+       \r
+               return false;\r
+       }\r
+       #endif\r
+       \r
+       /* Succeed the command and update the bytes transferred counter */\r
+       MSInterfaceInfo->CommandBlock.DataTransferLength = 0;\r
+       \r
+       return true;\r
+}\r
+\r
+/** Command processing for an issued SCSI READ (10) or WRITE (10) command. This command reads in the block start address\r
+ *  and total number of blocks to process, then calls the appropriate low-level dataflash routine to handle the actual\r
+ *  reading and writing of the data.\r
+ *\r
+ *  \param MSInterfaceInfo  Pointer to the Mass Storage class interface structure that the command is associated with\r
+ *  \param IsDataRead  Indicates if the command is a READ (10) command or WRITE (10) command (DATA_READ or DATA_WRITE)\r
+ *\r
+ *  \return Boolean true if the command completed successfully, false otherwise.\r
+ */\r
+static bool SCSI_Command_ReadWrite_10(USB_ClassInfo_MS_t* MSInterfaceInfo, const bool IsDataRead)\r
+{\r
+       uint32_t BlockAddress;\r
+       uint16_t TotalBlocks;\r
+       \r
+       /* Load in the 32-bit block address (SCSI uses big-endian, so have to do it byte-by-byte) */\r
+       ((uint8_t*)&BlockAddress)[3] = MSInterfaceInfo->CommandBlock.SCSICommandData[2];\r
+       ((uint8_t*)&BlockAddress)[2] = MSInterfaceInfo->CommandBlock.SCSICommandData[3];\r
+       ((uint8_t*)&BlockAddress)[1] = MSInterfaceInfo->CommandBlock.SCSICommandData[4];\r
+       ((uint8_t*)&BlockAddress)[0] = MSInterfaceInfo->CommandBlock.SCSICommandData[5];\r
+\r
+       /* Load in the 16-bit total blocks (SCSI uses big-endian, so have to do it byte-by-byte) */\r
+       ((uint8_t*)&TotalBlocks)[1]  = MSInterfaceInfo->CommandBlock.SCSICommandData[7];\r
+       ((uint8_t*)&TotalBlocks)[0]  = MSInterfaceInfo->CommandBlock.SCSICommandData[8];\r
+       \r
+       /* Check if the block address is outside the maximum allowable value for the LUN */\r
+       if (BlockAddress >= LUN_MEDIA_BLOCKS)\r
+       {\r
+               /* Block address is invalid, update SENSE key and return command fail */\r
+               SCSI_SET_SENSE(SCSI_SENSE_KEY_ILLEGAL_REQUEST,\r
+                              SCSI_ASENSE_LOGICAL_BLOCK_ADDRESS_OUT_OF_RANGE,\r
+                              SCSI_ASENSEQ_NO_QUALIFIER);\r
+\r
+               return false;\r
+       }\r
+\r
+       #if (TOTAL_LUNS > 1)\r
+       /* Adjust the given block address to the real media address based on the selected LUN */\r
+       BlockAddress += ((uint32_t)MSInterfaceInfo->CommandBlock.LUN * LUN_MEDIA_BLOCKS);\r
+       #endif\r
+       \r
+       /* Determine if the packet is a READ (10) or WRITE (10) command, call appropriate function */\r
+       if (IsDataRead == DATA_READ)\r
+         DataflashManager_ReadBlocks(MSInterfaceInfo, BlockAddress, TotalBlocks);\r
+       else\r
+         DataflashManager_WriteBlocks(MSInterfaceInfo, BlockAddress, TotalBlocks);\r
+\r
+       /* Update the bytes transferred counter and succeed the command */\r
+       MSInterfaceInfo->CommandBlock.DataTransferLength -= ((uint32_t)TotalBlocks * VIRTUAL_MEMORY_BLOCK_SIZE);\r
+       \r
+       return true;\r
+}\r
diff --git a/Demos/Device/ClassDriver/MassStorage/Lib/SCSI.h b/Demos/Device/ClassDriver/MassStorage/Lib/SCSI.h
new file mode 100644 (file)
index 0000000..3fd751d
--- /dev/null
@@ -0,0 +1,148 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  Header file for SCSI.c.\r
+ */\r
\r
+#ifndef _SCSI_H_\r
+#define _SCSI_H_\r
+\r
+       /* Includes: */\r
+               #include <avr/io.h>\r
+               #include <avr/pgmspace.h>\r
+\r
+               #include <LUFA/Drivers/USB/USB.h>\r
+               #include <LUFA/Drivers/USB/Class/Device/MassStorage.h>\r
+\r
+               #include "MassStorage.h"\r
+               #include "Descriptors.h"\r
+               #include "DataflashManager.h"\r
+               #include "SCSI_Codes.h"\r
+       \r
+       /* Macros: */\r
+               /** Macro to set the current SCSI sense data to the given key, additional sense code and additional sense qualifier. This\r
+                *  is for convenience, as it allows for all three sense values (returned upon request to the host to give information about\r
+                *  the last command failure) in a quick and easy manner.\r
+                *\r
+                *  \param key    New SCSI sense key to set the sense code to\r
+                *  \param acode  New SCSI additional sense key to set the additional sense code to\r
+                *  \param aqual  New SCSI additional sense key qualifier to set the additional sense qualifier code to\r
+                */\r
+               #define SCSI_SET_SENSE(key, acode, aqual)  MACROS{ SenseData.SenseKey = key;              \\r
+                                                                  SenseData.AdditionalSenseCode = acode; \\r
+                                                                  SenseData.AdditionalSenseQualifier = aqual; }MACROE\r
+\r
+               /** Macro for the SCSI_Command_ReadWrite_10() function, to indicate that data is to be read from the storage medium. */\r
+               #define DATA_READ           true\r
+\r
+               /** Macro for the SCSI_Command_ReadWrite_10() function, to indicate that data is to be written to the storage medium. */\r
+               #define DATA_WRITE          false\r
+\r
+               /** Value for the DeviceType entry in the SCSI_Inquiry_Response_t enum, indicating a Block Media device. */\r
+               #define DEVICE_TYPE_BLOCK   0x00\r
+               \r
+               /** Value for the DeviceType entry in the SCSI_Inquiry_Response_t enum, indicating a CD-ROM device. */\r
+               #define DEVICE_TYPE_CDROM   0x05\r
+\r
+       /* Type Defines: */\r
+               /** Type define for a SCSI response structure to a SCSI INQUIRY command. For details of the\r
+                *  structure contents, refer to the SCSI specifications.\r
+                */\r
+               typedef struct\r
+               {\r
+                       unsigned char DeviceType          : 5;\r
+                       unsigned char PeripheralQualifier : 3;\r
+                       \r
+                       unsigned char _RESERVED1          : 7;\r
+                       unsigned char Removable           : 1;\r
+                       \r
+                       uint8_t      Version;\r
+                       \r
+                       unsigned char ResponseDataFormat  : 4;\r
+                       unsigned char _RESERVED2          : 1;\r
+                       unsigned char NormACA             : 1;\r
+                       unsigned char TrmTsk              : 1;\r
+                       unsigned char AERC                : 1;\r
+\r
+                       uint8_t      AdditionalLength;\r
+                       uint8_t      _RESERVED3[2];\r
+\r
+                       unsigned char SoftReset           : 1;\r
+                       unsigned char CmdQue              : 1;\r
+                       unsigned char _RESERVED4          : 1;\r
+                       unsigned char Linked              : 1;\r
+                       unsigned char Sync                : 1;\r
+                       unsigned char WideBus16Bit        : 1;\r
+                       unsigned char WideBus32Bit        : 1;\r
+                       unsigned char RelAddr             : 1;\r
+                       \r
+                       uint8_t      VendorID[8];\r
+                       uint8_t      ProductID[16];\r
+                       uint8_t      RevisionID[4];\r
+               } SCSI_Inquiry_Response_t;\r
+               \r
+               /** Type define for a SCSI sense structure to a SCSI REQUEST SENSE command. For details of the\r
+                *  structure contents, refer to the SCSI specifications.\r
+                */\r
+               typedef struct\r
+               {\r
+                       uint8_t       ResponseCode;\r
+                       \r
+                       uint8_t       SegmentNumber;\r
+                       \r
+                       unsigned char SenseKey            : 4;\r
+                       unsigned char _RESERVED1          : 1;\r
+                       unsigned char ILI                 : 1;\r
+                       unsigned char EOM                 : 1;\r
+                       unsigned char FileMark            : 1;\r
+                       \r
+                       uint8_t      Information[4];\r
+                       uint8_t      AdditionalLength;\r
+                       uint8_t      CmdSpecificInformation[4];\r
+                       uint8_t      AdditionalSenseCode;\r
+                       uint8_t      AdditionalSenseQualifier;\r
+                       uint8_t      FieldReplaceableUnitCode;\r
+                       uint8_t      SenseKeySpecific[3];\r
+               } SCSI_Request_Sense_Response_t;\r
+               \r
+       /* Function Prototypes: */\r
+               bool SCSI_DecodeSCSICommand(USB_ClassInfo_MS_t* MSInterfaceInfo);\r
+               \r
+               #if defined(INCLUDE_FROM_SCSI_C)\r
+                       static bool SCSI_Command_Inquiry(USB_ClassInfo_MS_t* MSInterfaceInfo);\r
+                       static bool SCSI_Command_Request_Sense(USB_ClassInfo_MS_t* MSInterfaceInfo);\r
+                       static bool SCSI_Command_Read_Capacity_10(USB_ClassInfo_MS_t* MSInterfaceInfo);\r
+                       static bool SCSI_Command_Send_Diagnostic(USB_ClassInfo_MS_t* MSInterfaceInfo);\r
+                       static bool SCSI_Command_ReadWrite_10(USB_ClassInfo_MS_t* MSInterfaceInfo, const bool IsDataRead);\r
+               #endif\r
+               \r
+#endif\r
diff --git a/Demos/Device/ClassDriver/MassStorage/Lib/SCSI_Codes.h b/Demos/Device/ClassDriver/MassStorage/Lib/SCSI_Codes.h
new file mode 100644 (file)
index 0000000..2b2213d
--- /dev/null
@@ -0,0 +1,85 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  Header containing macros for possible SCSI commands and SENSE data. Refer to\r
+ *  the SCSI standard documentation for more information on each SCSI command and\r
+ *  the SENSE data.\r
+ */\r
\r
+#ifndef _SCSI_CODES_H_\r
+#define _SCSI_CODES_H_\r
+\r
+       /* Macros: */\r
+               #define SCSI_CMD_INQUIRY                               0x12\r
+               #define SCSI_CMD_REQUEST_SENSE                         0x03\r
+               #define SCSI_CMD_TEST_UNIT_READY                       0x00\r
+               #define SCSI_CMD_READ_CAPACITY_10                      0x25\r
+               #define SCSI_CMD_SEND_DIAGNOSTIC                       0x1D\r
+               #define SCSI_CMD_PREVENT_ALLOW_MEDIUM_REMOVAL          0x1E\r
+               #define SCSI_CMD_WRITE_10                              0x2A\r
+               #define SCSI_CMD_READ_10                               0x28\r
+               #define SCSI_CMD_WRITE_6                               0x0A\r
+               #define SCSI_CMD_READ_6                                0x08\r
+               #define SCSI_CMD_VERIFY_10                             0x2F\r
+               #define SCSI_CMD_MODE_SENSE_6                          0x1A\r
+               #define SCSI_CMD_MODE_SENSE_10                         0x5A\r
+\r
+               #define SCSI_SENSE_KEY_GOOD                            0x00\r
+               #define SCSI_SENSE_KEY_RECOVERED_ERROR                 0x01\r
+               #define SCSI_SENSE_KEY_NOT_READY                       0x02\r
+               #define SCSI_SENSE_KEY_MEDIUM_ERROR                    0x03\r
+               #define SCSI_SENSE_KEY_HARDWARE_ERROR                  0x04\r
+               #define SCSI_SENSE_KEY_ILLEGAL_REQUEST                 0x05\r
+               #define SCSI_SENSE_KEY_UNIT_ATTENTION                  0x06\r
+               #define SCSI_SENSE_KEY_DATA_PROTECT                    0x07\r
+               #define SCSI_SENSE_KEY_BLANK_CHECK                     0x08\r
+               #define SCSI_SENSE_KEY_VENDOR_SPECIFIC                 0x09\r
+               #define SCSI_SENSE_KEY_COPY_ABORTED                    0x0A\r
+               #define SCSI_SENSE_KEY_ABORTED_COMMAND                 0x0B\r
+               #define SCSI_SENSE_KEY_VOLUME_OVERFLOW                 0x0D\r
+               #define SCSI_SENSE_KEY_MISCOMPARE                      0x0E\r
+\r
+               #define SCSI_ASENSE_NO_ADDITIONAL_INFORMATION          0x00\r
+               #define SCSI_ASENSE_LOGICAL_UNIT_NOT_READY             0x04\r
+               #define SCSI_ASENSE_INVALID_FIELD_IN_CDB               0x24\r
+               #define SCSI_ASENSE_WRITE_PROTECTED                    0x27\r
+               #define SCSI_ASENSE_FORMAT_ERROR                       0x31\r
+               #define SCSI_ASENSE_INVALID_COMMAND                    0x20\r
+               #define SCSI_ASENSE_LOGICAL_BLOCK_ADDRESS_OUT_OF_RANGE 0x21\r
+               #define SCSI_ASENSE_MEDIUM_NOT_PRESENT                 0x3A\r
+\r
+               #define SCSI_ASENSEQ_NO_QUALIFIER                      0x00\r
+               #define SCSI_ASENSEQ_FORMAT_COMMAND_FAILED             0x01\r
+               #define SCSI_ASENSEQ_INITIALIZING_COMMAND_REQUIRED     0x02\r
+               #define SCSI_ASENSEQ_OPERATION_IN_PROGRESS             0x07\r
+\r
+#endif\r
diff --git a/Demos/Device/ClassDriver/MassStorage/MassStorage.aps b/Demos/Device/ClassDriver/MassStorage/MassStorage.aps
new file mode 100644 (file)
index 0000000..483bc4c
--- /dev/null
@@ -0,0 +1 @@
+<AVRStudio><MANAGEMENT><ProjectName>MassStorage</ProjectName><Created>30-Sep-2008 14:12:09</Created><LastEdit>30-Sep-2008 14:12:25</LastEdit><ICON>241</ICON><ProjectType>0</ProjectType><Created>30-Sep-2008 14:12:09</Created><Version>4</Version><Build>4, 14, 0, 589</Build><ProjectTypeName>AVR GCC</ProjectTypeName></MANAGEMENT><CODE_CREATION><ObjectFile></ObjectFile><EntryFile></EntryFile><SaveFolder>C:\Users\Dean\Documents\Electronics\Projects\WORK\MyUSBWORK\Demos\MassStorage\</SaveFolder></CODE_CREATION><DEBUG_TARGET><CURRENT_TARGET>JTAGICE mkII</CURRENT_TARGET><CURRENT_PART>AT90USB1287.xml</CURRENT_PART><BREAKPOINTS></BREAKPOINTS><IO_EXPAND><HIDE>false</HIDE></IO_EXPAND><REGISTERNAMES><Register>R00</Register><Register>R01</Register><Register>R02</Register><Register>R03</Register><Register>R04</Register><Register>R05</Register><Register>R06</Register><Register>R07</Register><Register>R08</Register><Register>R09</Register><Register>R10</Register><Register>R11</Register><Register>R12</Register><Register>R13</Register><Register>R14</Register><Register>R15</Register><Register>R16</Register><Register>R17</Register><Register>R18</Register><Register>R19</Register><Register>R20</Register><Register>R21</Register><Register>R22</Register><Register>R23</Register><Register>R24</Register><Register>R25</Register><Register>R26</Register><Register>R27</Register><Register>R28</Register><Register>R29</Register><Register>R30</Register><Register>R31</Register></REGISTERNAMES><COM>Auto</COM><COMType>0</COMType><WATCHNUM>0</WATCHNUM><WATCHNAMES><Pane0></Pane0><Pane1></Pane1><Pane2></Pane2><Pane3></Pane3></WATCHNAMES><BreakOnTrcaeFull>0</BreakOnTrcaeFull></DEBUG_TARGET><Debugger><Triggers></Triggers></Debugger><AVRGCCPLUGIN><FILES><SOURCEFILE>DataflashManager.c</SOURCEFILE><SOURCEFILE>Descriptors.c</SOURCEFILE><SOURCEFILE>MassStorage.c</SOURCEFILE><SOURCEFILE>SCSI.c</SOURCEFILE><HEADERFILE>DataflashManager.h</HEADERFILE><HEADERFILE>Descriptors.h</HEADERFILE><HEADERFILE>MassStorage.h</HEADERFILE><HEADERFILE>SCSI.h</HEADERFILE><HEADERFILE>SCSI_Codes.h</HEADERFILE><OTHERFILE>makefile</OTHERFILE></FILES><CONFIGS><CONFIG><NAME>default</NAME><USESEXTERNALMAKEFILE>YES</USESEXTERNALMAKEFILE><EXTERNALMAKEFILE>makefile</EXTERNALMAKEFILE><PART>at90usb1287</PART><HEX>1</HEX><LIST>1</LIST><MAP>1</MAP><OUTPUTFILENAME>MassStorage.elf</OUTPUTFILENAME><OUTPUTDIR>default\</OUTPUTDIR><ISDIRTY>1</ISDIRTY><OPTIONS/><INCDIRS/><LIBDIRS/><LIBS/><LINKOBJECTS/><OPTIONSFORALL>-Wall -gdwarf-2 -std=gnu99 -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums</OPTIONSFORALL><LINKEROPTIONS></LINKEROPTIONS><SEGMENTS/></CONFIG></CONFIGS><LASTCONFIG>default</LASTCONFIG><USES_WINAVR>1</USES_WINAVR><GCC_LOC>C:\WinAVR-20080512\bin\avr-gcc.exe</GCC_LOC><MAKE_LOC>C:\WinAVR-20080512\utils\bin\make.exe</MAKE_LOC></AVRGCCPLUGIN><IOView><usergroups/><sort sorted="0" column="0" ordername="0" orderaddress="0" ordergroup="0"/></IOView><Files></Files><Events><Bookmarks></Bookmarks></Events><Trace><Filters></Filters></Trace></AVRStudio>\r
diff --git a/Demos/Device/ClassDriver/MassStorage/MassStorage.c b/Demos/Device/ClassDriver/MassStorage/MassStorage.c
new file mode 100644 (file)
index 0000000..5dbc4a2
--- /dev/null
@@ -0,0 +1,131 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  Main source file for the MassStorage demo. This file contains the main tasks of\r
+ *  the demo and is responsible for the initial application hardware configuration.\r
+ */\r
+\r
+#include "MassStorage.h"\r
+\r
+/** LUFA Mass Storage Class driver interface configuration and state information. This structure is\r
+ *  passed to all Mass Storage Class driver functions, so that multiple instances of the same class\r
+ *  within a device can be differentiated from one another.\r
+ */\r
+USB_ClassInfo_MS_t Disk_MS_Interface =\r
+       {\r
+               .InterfaceNumber        = 0,\r
+\r
+               .DataINEndpointNumber   = MASS_STORAGE_IN_EPNUM,\r
+               .DataINEndpointSize     = MASS_STORAGE_IO_EPSIZE,\r
+\r
+               .DataOUTEndpointNumber  = MASS_STORAGE_OUT_EPNUM,\r
+               .DataOUTEndpointSize    = MASS_STORAGE_IO_EPSIZE,\r
+\r
+               .TotalLUNs              = TOTAL_LUNS,\r
+       };\r
+\r
+/** Main program entry point. This routine contains the overall program flow, including initial\r
+ *  setup of all components and the main program loop.\r
+ */\r
+int main(void)\r
+{\r
+       SetupHardware();\r
+\r
+       LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);\r
+\r
+       for (;;)\r
+       {\r
+               USB_MS_USBTask(&Disk_MS_Interface);\r
+               USB_USBTask();\r
+       }\r
+}\r
+\r
+/** Configures the board hardware and chip peripherals for the demo's functionality. */\r
+void SetupHardware(void)\r
+{\r
+       /* Disable watchdog if enabled by bootloader/fuses */\r
+       MCUSR &= ~(1 << WDRF);\r
+       wdt_disable();\r
+\r
+       /* Disable clock division */\r
+       clock_prescale_set(clock_div_1);\r
+\r
+       /* Hardware Initialization */\r
+       LEDs_Init();\r
+       Dataflash_Init(SPI_SPEED_FCPU_DIV_2);\r
+       USB_Init();\r
+\r
+       /* Clear Dataflash sector protections, if enabled */\r
+       DataflashManager_ResetDataflashProtections();\r
+}\r
+\r
+/** Event handler for the library USB Connection event. */\r
+void EVENT_USB_Connect(void)\r
+{\r
+       LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING);\r
+}\r
+\r
+/** Event handler for the library USB Disconnection event. */\r
+void EVENT_USB_Disconnect(void)\r
+{\r
+       LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);\r
+}\r
+\r
+/** Event handler for the library USB Configuration Changed event. */\r
+void EVENT_USB_ConfigurationChanged(void)\r
+{\r
+       LEDs_SetAllLEDs(LEDMASK_USB_READY);\r
+\r
+       if (!(USB_MS_ConfigureEndpoints(&Disk_MS_Interface)))\r
+         LEDs_SetAllLEDs(LEDMASK_USB_ERROR);\r
+}\r
+\r
+/** Event handler for the library USB Unhandled Control Packet event. */\r
+void EVENT_USB_UnhandledControlPacket(void)\r
+{\r
+       USB_MS_ProcessControlPacket(&Disk_MS_Interface);\r
+}\r
+\r
+/** Mass Storage class driver callback function the reception of SCSI commands from the host, which must be processed.\r
+ *\r
+ *  \param MSInterfaceInfo  Pointer to the Mass Storage class interface configuration structure being referenced\r
+ */\r
+bool CALLBACK_USB_MS_SCSICommandReceived(USB_ClassInfo_MS_t* MSInterfaceInfo)\r
+{\r
+       bool CommandSuccess;\r
+       \r
+       LEDs_SetAllLEDs(LEDMASK_USB_BUSY);\r
+       CommandSuccess = SCSI_DecodeSCSICommand(MSInterfaceInfo);\r
+       LEDs_SetAllLEDs(LEDMASK_USB_READY);\r
+       \r
+       return CommandSuccess;\r
+}\r
diff --git a/Demos/Device/ClassDriver/MassStorage/MassStorage.h b/Demos/Device/ClassDriver/MassStorage/MassStorage.h
new file mode 100644 (file)
index 0000000..50a7725
--- /dev/null
@@ -0,0 +1,88 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  Header file for MassStorage.c.\r
+ */\r
+\r
+#ifndef _MASS_STORAGE_H_\r
+#define _MASS_STORAGE_H_\r
+\r
+       /* Includes: */\r
+               #include <avr/io.h>\r
+               #include <avr/wdt.h>\r
+               #include <avr/power.h>\r
+\r
+               #include "Descriptors.h"\r
+\r
+               #include "Lib/SCSI.h"\r
+               #include "Lib/DataflashManager.h"\r
+\r
+               #include <LUFA/Version.h>\r
+               #include <LUFA/Drivers/Board/Joystick.h>\r
+               #include <LUFA/Drivers/Board/LEDs.h>\r
+               #include <LUFA/Drivers/Board/Buttons.h>\r
+               #include <LUFA/Drivers/USB/USB.h>\r
+               #include <LUFA/Drivers/USB/Class/Device/MassStorage.h>
+\r
+       /* Macros: */\r
+               /** LED mask for the library LED driver, to indicate that the USB interface is not ready. */\r
+               #define LEDMASK_USB_NOTREADY      LEDS_LED1\r
+\r
+               /** LED mask for the library LED driver, to indicate that the USB interface is enumerating. */\r
+               #define LEDMASK_USB_ENUMERATING  (LEDS_LED2 | LEDS_LED3)\r
+\r
+               /** LED mask for the library LED driver, to indicate that the USB interface is ready. */\r
+               #define LEDMASK_USB_READY        (LEDS_LED2 | LEDS_LED4)\r
+\r
+               /** LED mask for the library LED driver, to indicate that an error has occurred in the USB interface. */\r
+               #define LEDMASK_USB_ERROR        (LEDS_LED1 | LEDS_LED3)\r
+\r
+               /** LED mask for the library LED driver, to indicate that the USB interface is busy. */\r
+               #define LEDMASK_USB_BUSY         (LEDS_LED2)\r
+               \r
+               /** Total number of logical drives within the device - must be non-zero. */\r
+               #define TOTAL_LUNS                2\r
+               \r
+               /** Blocks in each LUN, calculated from the total capacity divided by the total number of Logical Units in the device. */\r
+               #define LUN_MEDIA_BLOCKS         (VIRTUAL_MEMORY_BLOCKS / TOTAL_LUNS)\r
+               \r
+       /* Function Prototypes: */\r
+               void SetupHardware(void);\r
+\r
+               void EVENT_USB_Connect(void);\r
+               void EVENT_USB_Disconnect(void);\r
+               void EVENT_USB_ConfigurationChanged(void);\r
+               void EVENT_USB_UnhandledControlPacket(void);\r
+\r
+               bool CALLBACK_USB_MS_SCSICommandReceived(USB_ClassInfo_MS_t* MSInterfaceInfo);\r
+\r
+#endif\r
diff --git a/Demos/Device/ClassDriver/MassStorage/MassStorage.txt b/Demos/Device/ClassDriver/MassStorage/MassStorage.txt
new file mode 100644 (file)
index 0000000..1d06cb6
--- /dev/null
@@ -0,0 +1,83 @@
+/** \file\r
+ *\r
+ *  This file contains special DoxyGen information for the generation of the main page and other special\r
+ *  documentation pages. It is not a project source file.\r
+ */\r
\r
+/** \mainpage Mass Storage Device Demo\r
+ *\r
+ *  \section SSec_Info USB Information:\r
+ *\r
+ *  The following table gives a rundown of the USB utilization of this demo.\r
+ *\r
+ *  <table>\r
+ *   <tr>\r
+ *    <td><b>USB Mode:</b></td>\r
+ *    <td>Device</td>\r
+ *   </tr>\r
+ *   <tr>\r
+ *    <td><b>USB Class:</b></td>\r
+ *    <td>Mass Storage Device</td>\r
+ *   </tr>\r
+ *   <tr> \r
+ *    <td><b>USB Subclass:</b></td>\r
+ *    <td>Bulk-Only Transport</td>\r
+ *   </tr>\r
+ *   <tr>\r
+ *    <td><b>Relevant Standards:</b></td>\r
+ *    <td>USBIF Mass Storage Standard</td>\r
+ *    <td>USB Bulk-Only Transport Standard</td>\r
+ *    <td>SCSI Primary Commands Specification</td>\r
+ *    <td>SCSI Block Commands Specification</td>\r
+ *   </tr>\r
+ *   <tr>\r
+ *    <td><b>Usable Speeds:</b></td>\r
+ *    <td>Full Speed Mode</td>\r
+ *   </tr>\r
+ *  </table>\r
+ *\r
+ *  \section SSec_Description Project Description: \r
+ *\r
+ *  Dual LUN Mass Storage demonstration application. This gives a simple\r
+ *  reference application for implementing a multiple LUN USB Mass Storage\r
+ *  device using the basic USB UFI drivers in all modern OSes (i.e. no\r
+ *  special drivers required).\r
+ *  \r
+ *  On start-up the system will automatically enumerate and function as an\r
+ *  external mass storage device with two LUNs (separate disks) which may\r
+ *  be formatted and used in the same manner as commercial USB Mass Storage\r
+ *  devices.\r
+ *     \r
+ *  You will need to format the mass storage drives upon first run of this\r
+ *  demonstration - as the device acts only as a data block transport between\r
+ *  the host and the storage media, it does not matter what file system is used,\r
+ *  as the data interpretation is performed by the host and not the USB device.\r
+ *  \r
+ *  This demo is not restricted to only two LUNs; by changing the TOTAL_LUNS\r
+ *  value in MassStorageDualLUN.h, any number of LUNs can be used (from 1 to\r
+ *  255), with each LUN being allocated an equal portion of the available\r
+ *  Dataflash memory.\r
+ *\r
+ *  The USB control endpoint is managed entirely by the library using endpoint\r
+ *  interrupts, as the INTERRUPT_CONTROL_ENDPOINT option is enabled. This allows for\r
+ *  the host to reset the Mass Storage device state during long transfers without\r
+ *  the need for complicated polling logic.\r
+ *\r
+ *  \section SSec_Options Project Options\r
+ *\r
+ *  The following defines can be found in this demo, which can control the demo behaviour when defined, or changed in value.\r
+ *\r
+ *  <table>\r
+ *   <tr>\r
+ *    <td><b>Define Name:</b></td>\r
+ *    <td><b>Location:</b></td>\r
+ *    <td><b>Description:</b></td>\r
+ *   </tr>\r
+ *   <tr>\r
+ *    <td>TOTAL_LUNS</td>\r
+ *    <td>MassStorage.h</td>\r
+ *    <td>Total number of Logical Units (drives) in the device. The total device capacity is shared equally between each drive\r
+ *        - this can be set to any positive non-zero amount.</td>\r
+ *   </tr>\r
+ *  </table>\r
+ */\r
diff --git a/Demos/Device/ClassDriver/MassStorage/makefile b/Demos/Device/ClassDriver/MassStorage/makefile
new file mode 100644 (file)
index 0000000..c4adfc9
--- /dev/null
@@ -0,0 +1,735 @@
+# Hey Emacs, this is a -*- makefile -*-\r
+#----------------------------------------------------------------------------\r
+# WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al.\r
+#  >> Modified for use with the LUFA project. <<\r
+#\r
+# Released to the Public Domain\r
+#\r
+# Additional material for this makefile was written by:\r
+# Peter Fleury\r
+# Tim Henigan\r
+# Colin O'Flynn\r
+# Reiner Patommel\r
+# Markus Pfaff\r
+# Sander Pool\r
+# Frederik Rouleau\r
+# Carlos Lamas\r
+# Dean Camera\r
+# Opendous Inc.\r
+# Denver Gingerich\r
+#\r
+#----------------------------------------------------------------------------\r
+# On command line:\r
+#\r
+# make all = Make software.\r
+#\r
+# make clean = Clean out built project files.\r
+#\r
+# make coff = Convert ELF to AVR COFF.\r
+#\r
+# make extcoff = Convert ELF to AVR Extended COFF.\r
+#\r
+# make program = Download the hex file to the device, using avrdude.\r
+#                Please customize the avrdude settings below first!\r
+#\r
+# make dfu = Download the hex file to the device, using dfu-programmer (must\r
+#            have dfu-programmer installed).\r
+#\r
+# make flip = Download the hex file to the device, using Atmel FLIP (must\r
+#             have Atmel FLIP installed).\r
+#\r
+# make dfu-ee = Download the eeprom file to the device, using dfu-programmer\r
+#               (must have dfu-programmer installed).\r
+#\r
+# make flip-ee = Download the eeprom file to the device, using Atmel FLIP\r
+#                (must have Atmel FLIP installed).\r
+#\r
+# make doxygen = Generate DoxyGen documentation for the project (must have\r
+#                DoxyGen installed)\r
+#\r
+# make debug = Start either simulavr or avarice as specified for debugging, \r
+#              with avr-gdb or avr-insight as the front end for debugging.\r
+#\r
+# make filename.s = Just compile filename.c into the assembler code only.\r
+#\r
+# make filename.i = Create a preprocessed source file for use in submitting\r
+#                   bug reports to the GCC project.\r
+#\r
+# To rebuild project do "make clean" then "make all".\r
+#----------------------------------------------------------------------------\r
+\r
+\r
+# MCU name\r
+MCU = at90usb1287\r
+\r
+\r
+# Target board (see library "Board Types" documentation, USER or blank for projects not requiring\r
+# LUFA board drivers). If USER is selected, put custom board drivers in a directory called \r
+# "Board" inside the application directory.\r
+BOARD  = USBKEY\r
+\r
+\r
+# Processor frequency.\r
+#     This will define a symbol, F_CPU, in all source code files equal to the \r
+#     processor frequency. You can then use this symbol in your source code to \r
+#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done\r
+#     automatically to create a 32-bit value in your source code.\r
+#     Typical values are:\r
+#         F_CPU =  1000000\r
+#         F_CPU =  1843200\r
+#         F_CPU =  2000000\r
+#         F_CPU =  3686400\r
+#         F_CPU =  4000000\r
+#         F_CPU =  7372800\r
+#         F_CPU =  8000000\r
+#         F_CPU = 11059200\r
+#         F_CPU = 14745600\r
+#         F_CPU = 16000000\r
+#         F_CPU = 18432000\r
+#         F_CPU = 20000000\r
+F_CPU = 8000000\r
+\r
+\r
+# Input clock frequency.\r
+#     This will define a symbol, F_CLOCK, in all source code files equal to the \r
+#     input clock frequency (before any prescaling is performed). This value may\r
+#     differ from F_CPU if prescaling is used on the latter, and is required as the\r
+#     raw input clock is fed directly to the PLL sections of the AVR for high speed\r
+#     clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'\r
+#     at the end, this will be done automatically to create a 32-bit value in your\r
+#     source code.\r
+#\r
+#     If no clock division is performed on the input clock inside the AVR (via the\r
+#     CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.\r
+F_CLOCK = 8000000\r
+\r
+\r
+# Output format. (can be srec, ihex, binary)\r
+FORMAT = ihex\r
+\r
+\r
+# Target file name (without extension).\r
+TARGET = MassStorage\r
+\r
+\r
+# Object files directory\r
+#     To put object files in current directory, use a dot (.), do NOT make\r
+#     this an empty or blank macro!\r
+OBJDIR = .\r
+\r
+\r
+# Path to the LUFA library\r
+LUFA_PATH = ../../..\r
+\r
+\r
+# List C source files here. (C dependencies are automatically generated.)\r
+SRC = $(TARGET).c                                                 \\r
+         Descriptors.c                                               \\r
+         Lib/SCSI.c                                                  \\r
+         Lib/DataflashManager.c                                      \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/DevChapter9.c        \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Endpoint.c           \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Host.c               \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/HostChapter9.c       \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/LowLevel.c           \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Pipe.c               \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/Events.c            \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBInterrupt.c      \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBTask.c           \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/ConfigDescriptor.c  \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/Class/Device/MassStorage.c    \\r
+\r
+\r
+# List C++ source files here. (C dependencies are automatically generated.)\r
+CPPSRC = \r
+\r
+\r
+# List Assembler source files here.\r
+#     Make them always end in a capital .S.  Files ending in a lowercase .s\r
+#     will not be considered source files but generated files (assembler\r
+#     output from the compiler), and will be deleted upon "make clean"!\r
+#     Even though the DOS/Win* filesystem matches both .s and .S the same,\r
+#     it will preserve the spelling of the filenames, and gcc itself does\r
+#     care about how the name is spelled on its command-line.\r
+ASRC =\r
+\r
+\r
+# Optimization level, can be [0, 1, 2, 3, s]. \r
+#     0 = turn off optimization. s = optimize for size.\r
+#     (Note: 3 is not always the best optimization level. See avr-libc FAQ.)\r
+OPT = s\r
+\r
+\r
+# Debugging format.\r
+#     Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs.\r
+#     AVR Studio 4.10 requires dwarf-2.\r
+#     AVR [Extended] COFF format requires stabs, plus an avr-objcopy run.\r
+DEBUG = dwarf-2\r
+\r
+\r
+# List any extra directories to look for include files here.\r
+#     Each directory must be seperated by a space.\r
+#     Use forward slashes for directory separators.\r
+#     For a directory that has spaces, enclose it in quotes.\r
+EXTRAINCDIRS = $(LUFA_PATH)/\r
+\r
+\r
+# Compiler flag to set the C Standard level.\r
+#     c89   = "ANSI" C\r
+#     gnu89 = c89 plus GCC extensions\r
+#     c99   = ISO C99 standard (not yet fully implemented)\r
+#     gnu99 = c99 plus GCC extensions\r
+CSTANDARD = -std=gnu99\r
+\r
+\r
+# Place -D or -U options here for C sources\r
+CDEFS  = -DF_CPU=$(F_CPU)UL -DF_CLOCK=$(F_CLOCK)UL -DBOARD=BOARD_$(BOARD)\r
+CDEFS += -DUSE_NONSTANDARD_DESCRIPTOR_NAMES -DUSB_DEVICE_ONLY\r
+CDEFS += -DFIXED_CONTROL_ENDPOINT_SIZE=8 -DUSE_SINGLE_DEVICE_CONFIGURATION\r
+CDEFS += -DUSE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)"\r
+\r
+\r
+# Place -D or -U options here for ASM sources\r
+ADEFS = -DF_CPU=$(F_CPU)\r
+\r
+\r
+# Place -D or -U options here for C++ sources\r
+CPPDEFS = -DF_CPU=$(F_CPU)UL\r
+#CPPDEFS += -D__STDC_LIMIT_MACROS\r
+#CPPDEFS += -D__STDC_CONSTANT_MACROS\r
+\r
+\r
+\r
+#---------------- Compiler Options C ----------------\r
+#  -g*:          generate debugging information\r
+#  -O*:          optimization level\r
+#  -f...:        tuning, see GCC manual and avr-libc documentation\r
+#  -Wall...:     warning level\r
+#  -Wa,...:      tell GCC to pass this to the assembler.\r
+#    -adhlns...: create assembler listing\r
+CFLAGS = -g$(DEBUG)\r
+CFLAGS += $(CDEFS)\r
+CFLAGS += -O$(OPT)\r
+CFLAGS += -funsigned-char\r
+CFLAGS += -funsigned-bitfields\r
+CFLAGS += -ffunction-sections\r
+CFLAGS += -fpack-struct\r
+CFLAGS += -fshort-enums\r
+CFLAGS += -finline-limit=20\r
+CFLAGS += -Wall\r
+CFLAGS += -Wstrict-prototypes\r
+CFLAGS += -Wundef\r
+#CFLAGS += -fno-unit-at-a-time\r
+#CFLAGS += -Wunreachable-code\r
+#CFLAGS += -Wsign-compare\r
+CFLAGS += -Wa,-adhlns=$(<:%.c=$(OBJDIR)/%.lst)\r
+CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))\r
+CFLAGS += $(CSTANDARD)\r
+\r
+\r
+#---------------- Compiler Options C++ ----------------\r
+#  -g*:          generate debugging information\r
+#  -O*:          optimization level\r
+#  -f...:        tuning, see GCC manual and avr-libc documentation\r
+#  -Wall...:     warning level\r
+#  -Wa,...:      tell GCC to pass this to the assembler.\r
+#    -adhlns...: create assembler listing\r
+CPPFLAGS = -g$(DEBUG)\r
+CPPFLAGS += $(CPPDEFS)\r
+CPPFLAGS += -O$(OPT)\r
+CPPFLAGS += -funsigned-char\r
+CPPFLAGS += -funsigned-bitfields\r
+CPPFLAGS += -fpack-struct\r
+CPPFLAGS += -fshort-enums\r
+CPPFLAGS += -fno-exceptions\r
+CPPFLAGS += -Wall\r
+CFLAGS += -Wundef\r
+#CPPFLAGS += -mshort-calls\r
+#CPPFLAGS += -fno-unit-at-a-time\r
+#CPPFLAGS += -Wstrict-prototypes\r
+#CPPFLAGS += -Wunreachable-code\r
+#CPPFLAGS += -Wsign-compare\r
+CPPFLAGS += -Wa,-adhlns=$(<:%.cpp=$(OBJDIR)/%.lst)\r
+CPPFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))\r
+#CPPFLAGS += $(CSTANDARD)\r
+\r
+\r
+#---------------- Assembler Options ----------------\r
+#  -Wa,...:   tell GCC to pass this to the assembler.\r
+#  -adhlns:   create listing\r
+#  -gstabs:   have the assembler create line number information; note that\r
+#             for use in COFF files, additional information about filenames\r
+#             and function names needs to be present in the assembler source\r
+#             files -- see avr-libc docs [FIXME: not yet described there]\r
+#  -listing-cont-lines: Sets the maximum number of continuation lines of hex \r
+#       dump that will be displayed for a given single line of source input.\r
+ASFLAGS = $(ADEFS) -Wa,-adhlns=$(<:%.S=$(OBJDIR)/%.lst),-gstabs,--listing-cont-lines=100\r
+\r
+\r
+#---------------- Library Options ----------------\r
+# Minimalistic printf version\r
+PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min\r
+\r
+# Floating point printf version (requires MATH_LIB = -lm below)\r
+PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt\r
+\r
+# If this is left blank, then it will use the Standard printf version.\r
+PRINTF_LIB = \r
+#PRINTF_LIB = $(PRINTF_LIB_MIN)\r
+#PRINTF_LIB = $(PRINTF_LIB_FLOAT)\r
+\r
+\r
+# Minimalistic scanf version\r
+SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min\r
+\r
+# Floating point + %[ scanf version (requires MATH_LIB = -lm below)\r
+SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt\r
+\r
+# If this is left blank, then it will use the Standard scanf version.\r
+SCANF_LIB = \r
+#SCANF_LIB = $(SCANF_LIB_MIN)\r
+#SCANF_LIB = $(SCANF_LIB_FLOAT)\r
+\r
+\r
+MATH_LIB = -lm\r
+\r
+\r
+# List any extra directories to look for libraries here.\r
+#     Each directory must be seperated by a space.\r
+#     Use forward slashes for directory separators.\r
+#     For a directory that has spaces, enclose it in quotes.\r
+EXTRALIBDIRS = \r
+\r
+\r
+\r
+#---------------- External Memory Options ----------------\r
+\r
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),\r
+# used for variables (.data/.bss) and heap (malloc()).\r
+#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff\r
+\r
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),\r
+# only used for heap (malloc()).\r
+#EXTMEMOPTS = -Wl,--section-start,.data=0x801100,--defsym=__heap_end=0x80ffff\r
+\r
+EXTMEMOPTS =\r
+\r
+\r
+\r
+#---------------- Linker Options ----------------\r
+#  -Wl,...:     tell GCC to pass this to linker.\r
+#    -Map:      create map file\r
+#    --cref:    add cross reference to  map file\r
+LDFLAGS = -Wl,-Map=$(TARGET).map,--cref\r
+LDFLAGS += -Wl,--relax\r
+LDFLAGS += -Wl,--gc-sections\r
+LDFLAGS += $(EXTMEMOPTS)\r
+LDFLAGS += $(patsubst %,-L%,$(EXTRALIBDIRS))\r
+LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)\r
+#LDFLAGS += -T linker_script.x\r
+\r
+\r
+\r
+#---------------- Programming Options (avrdude) ----------------\r
+\r
+# Programming hardware: alf avr910 avrisp bascom bsd \r
+# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500\r
+#\r
+# Type: avrdude -c ?\r
+# to get a full listing.\r
+#\r
+AVRDUDE_PROGRAMMER = jtagmkII\r
+\r
+# com1 = serial port. Use lpt1 to connect to parallel port.\r
+AVRDUDE_PORT = usb\r
+\r
+AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex\r
+#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep\r
+\r
+\r
+# Uncomment the following if you want avrdude's erase cycle counter.\r
+# Note that this counter needs to be initialized first using -Yn,\r
+# see avrdude manual.\r
+#AVRDUDE_ERASE_COUNTER = -y\r
+\r
+# Uncomment the following if you do /not/ wish a verification to be\r
+# performed after programming the device.\r
+#AVRDUDE_NO_VERIFY = -V\r
+\r
+# Increase verbosity level.  Please use this when submitting bug\r
+# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude> \r
+# to submit bug reports.\r
+#AVRDUDE_VERBOSE = -v -v\r
+\r
+AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)\r
+AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY)\r
+AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE)\r
+AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER)\r
+\r
+\r
+\r
+#---------------- Debugging Options ----------------\r
+\r
+# For simulavr only - target MCU frequency.\r
+DEBUG_MFREQ = $(F_CPU)\r
+\r
+# Set the DEBUG_UI to either gdb or insight.\r
+# DEBUG_UI = gdb\r
+DEBUG_UI = insight\r
+\r
+# Set the debugging back-end to either avarice, simulavr.\r
+DEBUG_BACKEND = avarice\r
+#DEBUG_BACKEND = simulavr\r
+\r
+# GDB Init Filename.\r
+GDBINIT_FILE = __avr_gdbinit\r
+\r
+# When using avarice settings for the JTAG\r
+JTAG_DEV = /dev/com1\r
+\r
+# Debugging port used to communicate between GDB / avarice / simulavr.\r
+DEBUG_PORT = 4242\r
+\r
+# Debugging host used to communicate between GDB / avarice / simulavr, normally\r
+#     just set to localhost unless doing some sort of crazy debugging when \r
+#     avarice is running on a different computer.\r
+DEBUG_HOST = localhost\r
+\r
+\r
+\r
+#============================================================================\r
+\r
+\r
+# Define programs and commands.\r
+SHELL = sh\r
+CC = avr-gcc\r
+OBJCOPY = avr-objcopy\r
+OBJDUMP = avr-objdump\r
+SIZE = avr-size\r
+AR = avr-ar rcs\r
+NM = avr-nm\r
+AVRDUDE = avrdude\r
+REMOVE = rm -f\r
+REMOVEDIR = rm -rf\r
+COPY = cp\r
+WINSHELL = cmd\r
+\r
+# Define Messages\r
+# English\r
+MSG_ERRORS_NONE = Errors: none\r
+MSG_BEGIN = -------- begin --------\r
+MSG_END = --------  end  --------\r
+MSG_SIZE_BEFORE = Size before: \r
+MSG_SIZE_AFTER = Size after:\r
+MSG_COFF = Converting to AVR COFF:\r
+MSG_EXTENDED_COFF = Converting to AVR Extended COFF:\r
+MSG_FLASH = Creating load file for Flash:\r
+MSG_EEPROM = Creating load file for EEPROM:\r
+MSG_EXTENDED_LISTING = Creating Extended Listing:\r
+MSG_SYMBOL_TABLE = Creating Symbol Table:\r
+MSG_LINKING = Linking:\r
+MSG_COMPILING = Compiling C:\r
+MSG_COMPILING_CPP = Compiling C++:\r
+MSG_ASSEMBLING = Assembling:\r
+MSG_CLEANING = Cleaning project:\r
+MSG_CREATING_LIBRARY = Creating library:\r
+\r
+\r
+\r
+\r
+# Define all object files.\r
+OBJ = $(SRC:%.c=$(OBJDIR)/%.o) $(CPPSRC:%.cpp=$(OBJDIR)/%.o) $(ASRC:%.S=$(OBJDIR)/%.o) \r
+\r
+# Define all listing files.\r
+LST = $(SRC:%.c=$(OBJDIR)/%.lst) $(CPPSRC:%.cpp=$(OBJDIR)/%.lst) $(ASRC:%.S=$(OBJDIR)/%.lst) \r
+\r
+\r
+# Compiler flags to generate dependency files.\r
+GENDEPFLAGS = -MMD -MP -MF .dep/$(@F).d\r
+\r
+\r
+# Combine all necessary flags and optional flags.\r
+# Add target processor to flags.\r
+ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS)\r
+ALL_CPPFLAGS = -mmcu=$(MCU) -I. -x c++ $(CPPFLAGS) $(GENDEPFLAGS)\r
+ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)\r
+\r
+\r
+\r
+\r
+\r
+# Default target.\r
+all: begin gccversion sizebefore build checkhooks checklibmode checkboard sizeafter end\r
+\r
+# Change the build target to build a HEX file or a library.\r
+build: elf hex eep lss sym\r
+#build: lib\r
+\r
+\r
+elf: $(TARGET).elf\r
+hex: $(TARGET).hex\r
+eep: $(TARGET).eep\r
+lss: $(TARGET).lss\r
+sym: $(TARGET).sym\r
+LIBNAME=lib$(TARGET).a\r
+lib: $(LIBNAME)\r
+\r
+\r
+\r
+# Eye candy.\r
+# AVR Studio 3.x does not check make's exit code but relies on\r
+# the following magic strings to be generated by the compile job.\r
+begin:\r
+       @echo\r
+       @echo $(MSG_BEGIN)\r
+\r
+end:\r
+       @echo $(MSG_END)\r
+       @echo\r
+\r
+\r
+# Display size of file.\r
+HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex\r
+ELFSIZE = $(SIZE) $(MCU_FLAG) $(FORMAT_FLAG) $(TARGET).elf\r
+MCU_FLAG = $(shell $(SIZE) --help | grep -- --mcu > /dev/null && echo --mcu=$(MCU) )\r
+FORMAT_FLAG = $(shell $(SIZE) --help | grep -- --format=.*avr > /dev/null && echo --format=avr )\r
+\r
+sizebefore:\r
+       @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \\r
+       2>/dev/null; echo; fi\r
+\r
+sizeafter:\r
+       @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \\r
+       2>/dev/null; echo; fi\r
+\r
+checkhooks: build\r
+       @echo\r
+       @echo ------- Unhooked LUFA Events -------\r
+       @$(shell) (grep -s '^EVENT_.*LUFA/.*\\.o' $(TARGET).map | \\r
+                  cut -d' ' -f1 | cut -d'_' -f2- | grep ".*") || \\r
+                          echo "(None)"\r
+       @echo ------------------------------------\r
+\r
+checklibmode:\r
+       @echo\r
+       @echo ----------- Library Mode -----------\r
+       @$(shell) ($(CC) $(ALL_CFLAGS) -E -dM - < /dev/null \\r
+                 | grep 'USB_\(DEVICE\|HOST\)_ONLY' | cut -d' ' -f2 | grep ".*") \\r
+                 || echo "No specific mode (both device and host mode allowable)."\r
+       @echo ------------------------------------\r
+\r
+checkboard:\r
+       @echo\r
+       @echo ---------- Selected Board ----------\r
+       @echo Selected board model is $(BOARD).\r
+       @echo ------------------------------------\r
+       \r
+# Display compiler version information.\r
+gccversion : \r
+       @$(CC) --version\r
+\r
+\r
+\r
+# Program the device.  \r
+program: $(TARGET).hex $(TARGET).eep\r
+       $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)\r
+\r
+flip: $(TARGET).hex\r
+       batchisp -hardware usb -device $(MCU) -operation erase f\r
+       batchisp -hardware usb -device $(MCU) -operation loadbuffer $(TARGET).hex program\r
+       batchisp -hardware usb -device $(MCU) -operation start reset 0\r
+\r
+dfu: $(TARGET).hex\r
+       dfu-programmer $(MCU) erase\r
+       dfu-programmer $(MCU) flash --debug 1 $(TARGET).hex\r
+       dfu-programmer $(MCU) reset\r
+\r
+flip-ee: $(TARGET).hex $(TARGET).eep\r
+       copy $(TARGET).eep $(TARGET)eep.hex\r
+       batchisp -hardware usb -device $(MCU) -operation memory EEPROM erase\r
+       batchisp -hardware usb -device $(MCU) -operation memory EEPROM loadbuffer $(TARGET)eep.hex program\r
+       batchisp -hardware usb -device $(MCU) -operation start reset 0\r
+\r
+dfu-ee: $(TARGET).hex $(TARGET).eep\r
+       dfu-programmer $(MCU) flash-eeprom --debug 1 --suppress-bootloader-mem $(TARGET).eep\r
+       dfu-programmer $(MCU) reset\r
+\r
+\r
+# Generate avr-gdb config/init file which does the following:\r
+#     define the reset signal, load the target file, connect to target, and set \r
+#     a breakpoint at main().\r
+gdb-config: \r
+       @$(REMOVE) $(GDBINIT_FILE)\r
+       @echo define reset >> $(GDBINIT_FILE)\r
+       @echo SIGNAL SIGHUP >> $(GDBINIT_FILE)\r
+       @echo end >> $(GDBINIT_FILE)\r
+       @echo file $(TARGET).elf >> $(GDBINIT_FILE)\r
+       @echo target remote $(DEBUG_HOST):$(DEBUG_PORT)  >> $(GDBINIT_FILE)\r
+ifeq ($(DEBUG_BACKEND),simulavr)\r
+       @echo load  >> $(GDBINIT_FILE)\r
+endif\r
+       @echo break main >> $(GDBINIT_FILE)\r
+\r
+debug: gdb-config $(TARGET).elf\r
+ifeq ($(DEBUG_BACKEND), avarice)\r
+       @echo Starting AVaRICE - Press enter when "waiting to connect" message displays.\r
+       @$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \\r
+       $(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT)\r
+       @$(WINSHELL) /c pause\r
+\r
+else\r
+       @$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \\r
+       $(DEBUG_MFREQ) --port $(DEBUG_PORT)\r
+endif\r
+       @$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE)\r
+\r
+\r
+\r
+\r
+# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.\r
+COFFCONVERT = $(OBJCOPY) --debugging\r
+COFFCONVERT += --change-section-address .data-0x800000\r
+COFFCONVERT += --change-section-address .bss-0x800000\r
+COFFCONVERT += --change-section-address .noinit-0x800000\r
+COFFCONVERT += --change-section-address .eeprom-0x810000\r
+\r
+\r
+\r
+coff: $(TARGET).elf\r
+       @echo\r
+       @echo $(MSG_COFF) $(TARGET).cof\r
+       $(COFFCONVERT) -O coff-avr $< $(TARGET).cof\r
+\r
+\r
+extcoff: $(TARGET).elf\r
+       @echo\r
+       @echo $(MSG_EXTENDED_COFF) $(TARGET).cof\r
+       $(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof\r
+\r
+\r
+\r
+# Create final output files (.hex, .eep) from ELF output file.\r
+%.hex: %.elf\r
+       @echo\r
+       @echo $(MSG_FLASH) $@\r
+       $(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@\r
+\r
+%.eep: %.elf\r
+       @echo\r
+       @echo $(MSG_EEPROM) $@\r
+       -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \\r
+       --change-section-lma .eeprom=0 --no-change-warnings -O $(FORMAT) $< $@ || exit 0\r
+\r
+# Create extended listing file from ELF output file.\r
+%.lss: %.elf\r
+       @echo\r
+       @echo $(MSG_EXTENDED_LISTING) $@\r
+       $(OBJDUMP) -h -z -S $< > $@\r
+\r
+# Create a symbol table from ELF output file.\r
+%.sym: %.elf\r
+       @echo\r
+       @echo $(MSG_SYMBOL_TABLE) $@\r
+       $(NM) -n $< > $@\r
+\r
+\r
+\r
+# Create library from object files.\r
+.SECONDARY : $(TARGET).a\r
+.PRECIOUS : $(OBJ)\r
+%.a: $(OBJ)\r
+       @echo\r
+       @echo $(MSG_CREATING_LIBRARY) $@\r
+       $(AR) $@ $(OBJ)\r
+\r
+\r
+# Link: create ELF output file from object files.\r
+.SECONDARY : $(TARGET).elf\r
+.PRECIOUS : $(OBJ)\r
+%.elf: $(OBJ)\r
+       @echo\r
+       @echo $(MSG_LINKING) $@\r
+       $(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)\r
+\r
+\r
+# Compile: create object files from C source files.\r
+$(OBJDIR)/%.o : %.c\r
+       @echo\r
+       @echo $(MSG_COMPILING) $<\r
+       $(CC) -c $(ALL_CFLAGS) $< -o $@ \r
+\r
+\r
+# Compile: create object files from C++ source files.\r
+$(OBJDIR)/%.o : %.cpp\r
+       @echo\r
+       @echo $(MSG_COMPILING_CPP) $<\r
+       $(CC) -c $(ALL_CPPFLAGS) $< -o $@ \r
+\r
+\r
+# Compile: create assembler files from C source files.\r
+%.s : %.c\r
+       $(CC) -S $(ALL_CFLAGS) $< -o $@\r
+\r
+\r
+# Compile: create assembler files from C++ source files.\r
+%.s : %.cpp\r
+       $(CC) -S $(ALL_CPPFLAGS) $< -o $@\r
+\r
+\r
+# Assemble: create object files from assembler source files.\r
+$(OBJDIR)/%.o : %.S\r
+       @echo\r
+       @echo $(MSG_ASSEMBLING) $<\r
+       $(CC) -c $(ALL_ASFLAGS) $< -o $@\r
+\r
+\r
+# Create preprocessed source for use in sending a bug report.\r
+%.i : %.c\r
+       $(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ \r
+       \r
+\r
+# Target: clean project.\r
+clean: begin clean_list clean_binary end\r
+\r
+clean_binary:\r
+       $(REMOVE) $(TARGET).hex\r
+       \r
+clean_list:\r
+       @echo $(MSG_CLEANING)\r
+       $(REMOVE) $(TARGET).eep\r
+       $(REMOVE) $(TARGET)eep.hex\r
+       $(REMOVE) $(TARGET).cof\r
+       $(REMOVE) $(TARGET).elf\r
+       $(REMOVE) $(TARGET).map\r
+       $(REMOVE) $(TARGET).sym\r
+       $(REMOVE) $(TARGET).lss\r
+       $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.o)\r
+       $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.lst)\r
+       $(REMOVE) $(SRC:.c=.s)\r
+       $(REMOVE) $(SRC:.c=.d)\r
+       $(REMOVE) $(SRC:.c=.i)\r
+       $(REMOVEDIR) .dep\r
+\r
+\r
+doxygen:\r
+       @echo Generating Project Documentation...\r
+       @doxygen Doxygen.conf\r
+       @echo Documentation Generation Complete.\r
+\r
+clean_doxygen:\r
+       rm -rf Documentation\r
+\r
+# Create object files directory\r
+$(shell mkdir $(OBJDIR) 2>/dev/null)\r
+\r
+\r
+# Include the dependency files.\r
+-include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)\r
+\r
+\r
+# Listing of phony targets.\r
+.PHONY : all checkhooks checklibmode checkboard   \\r
+begin finish end sizebefore sizeafter gccversion  \\r
+build elf hex eep lss sym coff extcoff clean      \\r
+clean_list clean_binary program debug gdb-config  \\r
+doxygen dfu flip flip-ee dfu-ee
\ No newline at end of file
diff --git a/Demos/Device/ClassDriver/Mouse/Descriptors.c b/Demos/Device/ClassDriver/Mouse/Descriptors.c
new file mode 100644 (file)
index 0000000..8ac4570
--- /dev/null
@@ -0,0 +1,251 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  USB Device Descriptors, for library use when in USB device mode. Descriptors are special \r
+ *  computer-readable structures which the host requests upon device enumeration, to determine\r
+ *  the device's capabilities and functions.  \r
+ */\r
+\r
+#include "Descriptors.h"\r
+\r
+/** HID class report descriptor. This is a special descriptor constructed with values from the\r
+ *  USBIF HID class specification to describe the reports and capabilities of the HID device. This\r
+ *  descriptor is parsed by the host and its contents used to determine what data (and in what encoding)\r
+ *  the device will send, and what it may be sent back from the host. Refer to the HID specification for\r
+ *  more details on HID report descriptors.\r
+ */\r
+USB_Descriptor_HIDReport_Datatype_t PROGMEM MouseReport[] =\r
+{\r
+       0x05, 0x01,          /* Usage Page (Generic Desktop)             */\r
+       0x09, 0x02,          /* Usage (Mouse)                            */\r
+       0xA1, 0x01,          /* Collection (Application)                 */\r
+       0x09, 0x01,          /*   Usage (Pointer)                        */\r
+       0xA1, 0x00,          /*   Collection (Application)               */\r
+       0x95, 0x03,          /*     Report Count (3)                     */\r
+       0x75, 0x01,          /*     Report Size (1)                      */\r
+       0x05, 0x09,          /*     Usage Page (Button)                  */\r
+       0x19, 0x01,          /*     Usage Minimum (Button 1)             */\r
+       0x29, 0x03,          /*     Usage Maximum (Button 3)             */\r
+       0x15, 0x00,          /*     Logical Minimum (0)                  */\r
+       0x25, 0x01,          /*     Logical Maximum (1)                  */\r
+       0x81, 0x02,          /*     Input (Data, Variable, Absolute)     */\r
+       0x95, 0x01,          /*     Report Count (1)                     */\r
+       0x75, 0x05,          /*     Report Size (5)                      */\r
+       0x81, 0x01,          /*     Input (Constant)                     */\r
+       0x75, 0x08,          /*     Report Size (8)                      */\r
+       0x95, 0x02,          /*     Report Count (2)                     */\r
+       0x05, 0x01,          /*     Usage Page (Generic Desktop Control) */\r
+       0x09, 0x30,          /*     Usage X                              */\r
+       0x09, 0x31,          /*     Usage Y                              */\r
+       0x15, 0x81,          /*     Logical Minimum (-127)               */\r
+       0x25, 0x7F,          /*     Logical Maximum (127)                */\r
+       0x81, 0x06,          /*     Input (Data, Variable, Relative)     */\r
+       0xC0,                /*   End Collection                         */\r
+       0xC0                 /* End Collection                           */\r
+};\r
+\r
+/** Device descriptor structure. This descriptor, located in FLASH memory, describes the overall\r
+ *  device characteristics, including the supported USB version, control endpoint size and the\r
+ *  number of device configurations. The descriptor is read out by the USB host when the enumeration\r
+ *  process begins.\r
+ */\r
+USB_Descriptor_Device_t PROGMEM DeviceDescriptor =\r
+{\r
+       .Header                 = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device},\r
+               \r
+       .USBSpecification       = VERSION_BCD(01.10),\r
+       .Class                  = 0x00,\r
+       .SubClass               = 0x00,\r
+       .Protocol               = 0x00,\r
+                               \r
+       .Endpoint0Size          = FIXED_CONTROL_ENDPOINT_SIZE,\r
+               \r
+       .VendorID               = 0x03EB,\r
+       .ProductID              = 0x2041,\r
+       .ReleaseNumber          = 0x0000,\r
+               \r
+       .ManufacturerStrIndex   = 0x01,\r
+       .ProductStrIndex        = 0x02,\r
+       .SerialNumStrIndex      = NO_DESCRIPTOR,\r
+               \r
+       .NumberOfConfigurations = 1\r
+};\r
+\r
+/** Configuration descriptor structure. This descriptor, located in FLASH memory, describes the usage\r
+ *  of the device in one of its supported configurations, including information about any device interfaces\r
+ *  and endpoints. The descriptor is read out by the USB host during the enumeration process when selecting\r
+ *  a configuration so that the host may correctly communicate with the USB device.\r
+ */\r
+USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =\r
+{\r
+       .Config = \r
+               {\r
+                       .Header                 = {.Size = sizeof(USB_Descriptor_Configuration_Header_t), .Type = DTYPE_Configuration},\r
+\r
+                       .TotalConfigurationSize = sizeof(USB_Descriptor_Configuration_t),\r
+                       .TotalInterfaces        = 1,\r
+                               \r
+                       .ConfigurationNumber    = 1,\r
+                       .ConfigurationStrIndex  = NO_DESCRIPTOR,\r
+                               \r
+                       .ConfigAttributes       = (USB_CONFIG_ATTR_BUSPOWERED | USB_CONFIG_ATTR_SELFPOWERED),\r
+                       \r
+                       .MaxPowerConsumption    = USB_CONFIG_POWER_MA(100)\r
+               },\r
+               \r
+       .Interface = \r
+               {\r
+                       .Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},\r
+\r
+                       .InterfaceNumber        = 0x00,\r
+                       .AlternateSetting       = 0x00,\r
+                       \r
+                       .TotalEndpoints         = 1,\r
+                               \r
+                       .Class                  = 0x03,\r
+                       .SubClass               = 0x01,\r
+                       .Protocol               = 0x02,\r
+                               \r
+                       .InterfaceStrIndex      = NO_DESCRIPTOR\r
+               },\r
+\r
+       .MouseHID = \r
+               {\r
+                       .Header                 = {.Size = sizeof(USB_Descriptor_HID_t), .Type = DTYPE_HID},\r
+                                                                        \r
+                       .HIDSpec                = VERSION_BCD(01.11),\r
+                       .CountryCode            = 0x00,\r
+                       .TotalReportDescriptors = 1,\r
+                       .HIDReportType          = DTYPE_Report,\r
+                       .HIDReportLength        = sizeof(MouseReport)\r
+               },\r
+\r
+       .MouseEndpoint = \r
+               {\r
+                       .Header                 = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},\r
+                                                                                \r
+                       .EndpointAddress        = (ENDPOINT_DESCRIPTOR_DIR_IN | MOUSE_EPNUM),\r
+                       .Attributes             = EP_TYPE_INTERRUPT,\r
+                       .EndpointSize           = MOUSE_EPSIZE,\r
+                       .PollingIntervalMS      = 0x02\r
+               }       \r
+};\r
+\r
+/** Language descriptor structure. This descriptor, located in FLASH memory, is returned when the host requests\r
+ *  the string descriptor with index 0 (the first index). It is actually an array of 16-bit integers, which indicate\r
+ *  via the language ID table available at USB.org what languages the device supports for its string descriptors.\r
+ */\r
+USB_Descriptor_String_t PROGMEM LanguageString =\r
+{\r
+       .Header                 = {.Size = USB_STRING_LEN(1), .Type = DTYPE_String},\r
+               \r
+       .UnicodeString          = {LANGUAGE_ID_ENG}\r
+};\r
+\r
+/** Manufacturer descriptor string. This is a Unicode string containing the manufacturer's details in human readable\r
+ *  form, and is read out upon request by the host when the appropriate string ID is requested, listed in the Device\r
+ *  Descriptor.\r
+ */\r
+USB_Descriptor_String_t PROGMEM ManufacturerString =\r
+{\r
+       .Header                 = {.Size = USB_STRING_LEN(11), .Type = DTYPE_String},\r
+               \r
+       .UnicodeString          = L"Dean Camera"\r
+};\r
+\r
+/** Product descriptor string. This is a Unicode string containing the product's details in human readable form,\r
+ *  and is read out upon request by the host when the appropriate string ID is requested, listed in the Device\r
+ *  Descriptor.\r
+ */\r
+USB_Descriptor_String_t PROGMEM ProductString =\r
+{\r
+       .Header                 = {.Size = USB_STRING_LEN(15), .Type = DTYPE_String},\r
+               \r
+       .UnicodeString          = L"LUFA Mouse Demo"\r
+};\r
+\r
+/** This function is called by the library when in device mode, and must be overridden (see library "USB Descriptors"\r
+ *  documentation) by the application code so that the address and size of a requested descriptor can be given\r
+ *  to the USB library. When the device receives a Get Descriptor request on the control endpoint, this function\r
+ *  is called so that the descriptor details can be passed back and the appropriate descriptor sent back to the\r
+ *  USB host.\r
+ */\r
+uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
+{\r
+       const uint8_t  DescriptorType   = (wValue >> 8);\r
+       const uint8_t  DescriptorNumber = (wValue & 0xFF);\r
+\r
+       void*    Address = NULL;\r
+       uint16_t Size    = NO_DESCRIPTOR;\r
+\r
+       switch (DescriptorType)\r
+       {\r
+               case DTYPE_Device:\r
+                       Address = (void*)&DeviceDescriptor;\r
+                       Size    = sizeof(USB_Descriptor_Device_t);\r
+                       break;\r
+               case DTYPE_Configuration:\r
+                       Address = (void*)&ConfigurationDescriptor;\r
+                       Size    = sizeof(USB_Descriptor_Configuration_t);\r
+                       break;\r
+               case DTYPE_String:\r
+                       switch (DescriptorNumber)\r
+                       {\r
+                               case 0x00:\r
+                                       Address = (void*)&LanguageString;\r
+                                       Size    = pgm_read_byte(&LanguageString.Header.Size);\r
+                                       break;\r
+                               case 0x01:\r
+                                       Address = (void*)&ManufacturerString;\r
+                                       Size    = pgm_read_byte(&ManufacturerString.Header.Size);\r
+                                       break;\r
+                               case 0x02:\r
+                                       Address = (void*)&ProductString;\r
+                                       Size    = pgm_read_byte(&ProductString.Header.Size);\r
+                                       break;\r
+                       }\r
+                       \r
+                       break;\r
+               case DTYPE_HID: \r
+                       Address = (void*)&ConfigurationDescriptor.MouseHID;\r
+                       Size    = sizeof(USB_Descriptor_HID_t);\r
+                       break;\r
+               case DTYPE_Report: \r
+                       Address = (void*)&MouseReport;\r
+                       Size    = sizeof(MouseReport);\r
+                       break;\r
+       }\r
+       \r
+       *DescriptorAddress = Address;           \r
+       return Size;\r
+}\r
+\r
diff --git a/Demos/Device/ClassDriver/Mouse/Descriptors.h b/Demos/Device/ClassDriver/Mouse/Descriptors.h
new file mode 100644 (file)
index 0000000..ef3215c
--- /dev/null
@@ -0,0 +1,69 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  Header file for Descriptors.c.\r
+ */\r
\r
+#ifndef _DESCRIPTORS_H_\r
+#define _DESCRIPTORS_H_\r
+\r
+       /* Includes: */\r
+               #include <avr/pgmspace.h>\r
+\r
+               #include <LUFA/Drivers/USB/USB.h>\r
+               #include <LUFA/Drivers/USB/Class/Device/HID.h>\r
+\r
+       /* Type Defines: */\r
+               /** Type define for the device configuration descriptor structure. This must be defined in the\r
+                *  application code, as the configuration descriptor contains several sub-descriptors which\r
+                *  vary between devices, and which describe the device's usage to the host.\r
+                */\r
+               typedef struct\r
+               {\r
+                       USB_Descriptor_Configuration_Header_t Config;\r
+                       USB_Descriptor_Interface_t            Interface;\r
+                       USB_Descriptor_HID_t                  MouseHID;\r
+               USB_Descriptor_Endpoint_t             MouseEndpoint;\r
+               } USB_Descriptor_Configuration_t;\r
+                                       \r
+       /* Macros: */\r
+               /** Endpoint number of the Mouse HID reporting IN endpoint. */\r
+               #define MOUSE_EPNUM               1\r
+               \r
+               /** Size in bytes of the Mouse HID reporting IN endpoint. */\r
+               #define MOUSE_EPSIZE              8\r
+\r
+       /* Function Prototypes: */\r
+               uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
+                                                                                       ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);\r
+\r
+#endif\r
diff --git a/Demos/Device/ClassDriver/Mouse/Doxygen.conf b/Demos/Device/ClassDriver/Mouse/Doxygen.conf
new file mode 100644 (file)
index 0000000..62c4db1
--- /dev/null
@@ -0,0 +1,1485 @@
+# Doxyfile 1.5.7.1\r
+\r
+# This file describes the settings to be used by the documentation system\r
+# doxygen (www.doxygen.org) for a project\r
+#\r
+# All text after a hash (#) is considered a comment and will be ignored\r
+# The format is:\r
+#       TAG = value [value, ...]\r
+# For lists items can also be appended using:\r
+#       TAG += value [value, ...]\r
+# Values that contain spaces should be placed between quotes (" ")\r
+\r
+#---------------------------------------------------------------------------\r
+# Project related configuration options\r
+#---------------------------------------------------------------------------\r
+\r
+# This tag specifies the encoding used for all characters in the config file \r
+# that follow. The default is UTF-8 which is also the encoding used for all \r
+# text before the first occurrence of this tag. Doxygen uses libiconv (or the \r
+# iconv built into libc) for the transcoding. See \r
+# http://www.gnu.org/software/libiconv for the list of possible encodings.\r
+\r
+DOXYFILE_ENCODING      = UTF-8\r
+\r
+# The PROJECT_NAME tag is a single word (or a sequence of words surrounded \r
+# by quotes) that should identify the project.\r
+\r
+PROJECT_NAME           = "LUFA Library - Mouse Device Demo"\r
+\r
+# The PROJECT_NUMBER tag can be used to enter a project or revision number. \r
+# This could be handy for archiving the generated documentation or \r
+# if some version control system is used.\r
+\r
+PROJECT_NUMBER         = 0.0.0\r
+\r
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) \r
+# base path where the generated documentation will be put. \r
+# If a relative path is entered, it will be relative to the location \r
+# where doxygen was started. If left blank the current directory will be used.\r
+\r
+OUTPUT_DIRECTORY       = ./Documentation/\r
+\r
+# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create \r
+# 4096 sub-directories (in 2 levels) under the output directory of each output \r
+# format and will distribute the generated files over these directories. \r
+# Enabling this option can be useful when feeding doxygen a huge amount of \r
+# source files, where putting all generated files in the same directory would \r
+# otherwise cause performance problems for the file system.\r
+\r
+CREATE_SUBDIRS         = YES\r
+\r
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all \r
+# documentation generated by doxygen is written. Doxygen will use this \r
+# information to generate all constant output in the proper language. \r
+# The default language is English, other supported languages are: \r
+# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, \r
+# Croatian, Czech, Danish, Dutch, Farsi, Finnish, French, German, Greek, \r
+# Hungarian, Italian, Japanese, Japanese-en (Japanese with English messages), \r
+# Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, Polish, \r
+# Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, Slovene, \r
+# Spanish, Swedish, and Ukrainian.\r
+\r
+OUTPUT_LANGUAGE        = English\r
+\r
+# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will \r
+# include brief member descriptions after the members that are listed in \r
+# the file and class documentation (similar to JavaDoc). \r
+# Set to NO to disable this.\r
+\r
+BRIEF_MEMBER_DESC      = YES\r
+\r
+# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend \r
+# the brief description of a member or function before the detailed description. \r
+# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the \r
+# brief descriptions will be completely suppressed.\r
+\r
+REPEAT_BRIEF           = YES\r
+\r
+# This tag implements a quasi-intelligent brief description abbreviator \r
+# that is used to form the text in various listings. Each string \r
+# in this list, if found as the leading text of the brief description, will be \r
+# stripped from the text and the result after processing the whole list, is \r
+# used as the annotated text. Otherwise, the brief description is used as-is. \r
+# If left blank, the following values are used ("$name" is automatically \r
+# replaced with the name of the entity): "The $name class" "The $name widget" \r
+# "The $name file" "is" "provides" "specifies" "contains" \r
+# "represents" "a" "an" "the"\r
+\r
+ABBREVIATE_BRIEF       = "The $name class" \\r
+                         "The $name widget" \\r
+                         "The $name file" \\r
+                         is \\r
+                         provides \\r
+                         specifies \\r
+                         contains \\r
+                         represents \\r
+                         a \\r
+                         an \\r
+                         the\r
+\r
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then \r
+# Doxygen will generate a detailed section even if there is only a brief \r
+# description.\r
+\r
+ALWAYS_DETAILED_SEC    = NO\r
+\r
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all \r
+# inherited members of a class in the documentation of that class as if those \r
+# members were ordinary class members. Constructors, destructors and assignment \r
+# operators of the base classes will not be shown.\r
+\r
+INLINE_INHERITED_MEMB  = NO\r
+\r
+# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full \r
+# path before files name in the file list and in the header files. If set \r
+# to NO the shortest path that makes the file name unique will be used.\r
+\r
+FULL_PATH_NAMES        = YES\r
+\r
+# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag \r
+# can be used to strip a user-defined part of the path. Stripping is \r
+# only done if one of the specified strings matches the left-hand part of \r
+# the path. The tag can be used to show relative paths in the file list. \r
+# If left blank the directory from which doxygen is run is used as the \r
+# path to strip.\r
+\r
+STRIP_FROM_PATH        = \r
+\r
+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of \r
+# the path mentioned in the documentation of a class, which tells \r
+# the reader which header file to include in order to use a class. \r
+# If left blank only the name of the header file containing the class \r
+# definition is used. Otherwise one should specify the include paths that \r
+# are normally passed to the compiler using the -I flag.\r
+\r
+STRIP_FROM_INC_PATH    = \r
+\r
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter \r
+# (but less readable) file names. This can be useful is your file systems \r
+# doesn't support long names like on DOS, Mac, or CD-ROM.\r
+\r
+SHORT_NAMES            = YES\r
+\r
+# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen \r
+# will interpret the first line (until the first dot) of a JavaDoc-style \r
+# comment as the brief description. If set to NO, the JavaDoc \r
+# comments will behave just like regular Qt-style comments \r
+# (thus requiring an explicit @brief command for a brief description.)\r
+\r
+JAVADOC_AUTOBRIEF      = NO\r
+\r
+# If the QT_AUTOBRIEF tag is set to YES then Doxygen will \r
+# interpret the first line (until the first dot) of a Qt-style \r
+# comment as the brief description. If set to NO, the comments \r
+# will behave just like regular Qt-style comments (thus requiring \r
+# an explicit \brief command for a brief description.)\r
+\r
+QT_AUTOBRIEF           = NO\r
+\r
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen \r
+# treat a multi-line C++ special comment block (i.e. a block of //! or /// \r
+# comments) as a brief description. This used to be the default behaviour. \r
+# The new default is to treat a multi-line C++ comment block as a detailed \r
+# description. Set this tag to YES if you prefer the old behaviour instead.\r
+\r
+MULTILINE_CPP_IS_BRIEF = NO\r
+\r
+# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented \r
+# member inherits the documentation from any documented member that it \r
+# re-implements.\r
+\r
+INHERIT_DOCS           = YES\r
+\r
+# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce \r
+# a new page for each member. If set to NO, the documentation of a member will \r
+# be part of the file/class/namespace that contains it.\r
+\r
+SEPARATE_MEMBER_PAGES  = NO\r
+\r
+# The TAB_SIZE tag can be used to set the number of spaces in a tab. \r
+# Doxygen uses this value to replace tabs by spaces in code fragments.\r
+\r
+TAB_SIZE               = 4\r
+\r
+# This tag can be used to specify a number of aliases that acts \r
+# as commands in the documentation. An alias has the form "name=value". \r
+# For example adding "sideeffect=\par Side Effects:\n" will allow you to \r
+# put the command \sideeffect (or @sideeffect) in the documentation, which \r
+# will result in a user-defined paragraph with heading "Side Effects:". \r
+# You can put \n's in the value part of an alias to insert newlines.\r
+\r
+ALIASES                = \r
+\r
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C \r
+# sources only. Doxygen will then generate output that is more tailored for C. \r
+# For instance, some of the names that are used will be different. The list \r
+# of all members will be omitted, etc.\r
+\r
+OPTIMIZE_OUTPUT_FOR_C  = YES\r
+\r
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java \r
+# sources only. Doxygen will then generate output that is more tailored for \r
+# Java. For instance, namespaces will be presented as packages, qualified \r
+# scopes will look different, etc.\r
+\r
+OPTIMIZE_OUTPUT_JAVA   = NO\r
+\r
+# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran \r
+# sources only. Doxygen will then generate output that is more tailored for \r
+# Fortran.\r
+\r
+OPTIMIZE_FOR_FORTRAN   = NO\r
+\r
+# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL \r
+# sources. Doxygen will then generate output that is tailored for \r
+# VHDL.\r
+\r
+OPTIMIZE_OUTPUT_VHDL   = NO\r
+\r
+# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want \r
+# to include (a tag file for) the STL sources as input, then you should \r
+# set this tag to YES in order to let doxygen match functions declarations and \r
+# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. \r
+# func(std::string) {}). This also make the inheritance and collaboration \r
+# diagrams that involve STL classes more complete and accurate.\r
+\r
+BUILTIN_STL_SUPPORT    = NO\r
+\r
+# If you use Microsoft's C++/CLI language, you should set this option to YES to\r
+# enable parsing support.\r
+\r
+CPP_CLI_SUPPORT        = NO\r
+\r
+# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. \r
+# Doxygen will parse them like normal C++ but will assume all classes use public \r
+# instead of private inheritance when no explicit protection keyword is present.\r
+\r
+SIP_SUPPORT            = NO\r
+\r
+# For Microsoft's IDL there are propget and propput attributes to indicate getter \r
+# and setter methods for a property. Setting this option to YES (the default) \r
+# will make doxygen to replace the get and set methods by a property in the \r
+# documentation. This will only work if the methods are indeed getting or \r
+# setting a simple type. If this is not the case, or you want to show the \r
+# methods anyway, you should set this option to NO.\r
+\r
+IDL_PROPERTY_SUPPORT   = YES\r
+\r
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC \r
+# tag is set to YES, then doxygen will reuse the documentation of the first \r
+# member in the group (if any) for the other members of the group. By default \r
+# all members of a group must be documented explicitly.\r
+\r
+DISTRIBUTE_GROUP_DOC   = NO\r
+\r
+# Set the SUBGROUPING tag to YES (the default) to allow class member groups of \r
+# the same type (for instance a group of public functions) to be put as a \r
+# subgroup of that type (e.g. under the Public Functions section). Set it to \r
+# NO to prevent subgrouping. Alternatively, this can be done per class using \r
+# the \nosubgrouping command.\r
+\r
+SUBGROUPING            = YES\r
+\r
+# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum \r
+# is documented as struct, union, or enum with the name of the typedef. So \r
+# typedef struct TypeS {} TypeT, will appear in the documentation as a struct \r
+# with name TypeT. When disabled the typedef will appear as a member of a file, \r
+# namespace, or class. And the struct will be named TypeS. This can typically \r
+# be useful for C code in case the coding convention dictates that all compound \r
+# types are typedef'ed and only the typedef is referenced, never the tag name.\r
+\r
+TYPEDEF_HIDES_STRUCT   = NO\r
+\r
+# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to \r
+# determine which symbols to keep in memory and which to flush to disk.\r
+# When the cache is full, less often used symbols will be written to disk.\r
+# For small to medium size projects (<1000 input files) the default value is \r
+# probably good enough. For larger projects a too small cache size can cause \r
+# doxygen to be busy swapping symbols to and from disk most of the time \r
+# causing a significant performance penality. \r
+# If the system has enough physical memory increasing the cache will improve the \r
+# performance by keeping more symbols in memory. Note that the value works on \r
+# a logarithmic scale so increasing the size by one will rougly double the \r
+# memory usage. The cache size is given by this formula: \r
+# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, \r
+# corresponding to a cache size of 2^16 = 65536 symbols\r
+\r
+SYMBOL_CACHE_SIZE      = 0\r
+\r
+#---------------------------------------------------------------------------\r
+# Build related configuration options\r
+#---------------------------------------------------------------------------\r
+\r
+# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in \r
+# documentation are documented, even if no documentation was available. \r
+# Private class members and static file members will be hidden unless \r
+# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES\r
+\r
+EXTRACT_ALL            = YES\r
+\r
+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class \r
+# will be included in the documentation.\r
+\r
+EXTRACT_PRIVATE        = YES\r
+\r
+# If the EXTRACT_STATIC tag is set to YES all static members of a file \r
+# will be included in the documentation.\r
+\r
+EXTRACT_STATIC         = YES\r
+\r
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) \r
+# defined locally in source files will be included in the documentation. \r
+# If set to NO only classes defined in header files are included.\r
+\r
+EXTRACT_LOCAL_CLASSES  = YES\r
+\r
+# This flag is only useful for Objective-C code. When set to YES local \r
+# methods, which are defined in the implementation section but not in \r
+# the interface are included in the documentation. \r
+# If set to NO (the default) only methods in the interface are included.\r
+\r
+EXTRACT_LOCAL_METHODS  = NO\r
+\r
+# If this flag is set to YES, the members of anonymous namespaces will be \r
+# extracted and appear in the documentation as a namespace called \r
+# 'anonymous_namespace{file}', where file will be replaced with the base \r
+# name of the file that contains the anonymous namespace. By default \r
+# anonymous namespace are hidden.\r
+\r
+EXTRACT_ANON_NSPACES   = NO\r
+\r
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all \r
+# undocumented members of documented classes, files or namespaces. \r
+# If set to NO (the default) these members will be included in the \r
+# various overviews, but no documentation section is generated. \r
+# This option has no effect if EXTRACT_ALL is enabled.\r
+\r
+HIDE_UNDOC_MEMBERS     = NO\r
+\r
+# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all \r
+# undocumented classes that are normally visible in the class hierarchy. \r
+# If set to NO (the default) these classes will be included in the various \r
+# overviews. This option has no effect if EXTRACT_ALL is enabled.\r
+\r
+HIDE_UNDOC_CLASSES     = NO\r
+\r
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all \r
+# friend (class|struct|union) declarations. \r
+# If set to NO (the default) these declarations will be included in the \r
+# documentation.\r
+\r
+HIDE_FRIEND_COMPOUNDS  = NO\r
+\r
+# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any \r
+# documentation blocks found inside the body of a function. \r
+# If set to NO (the default) these blocks will be appended to the \r
+# function's detailed documentation block.\r
+\r
+HIDE_IN_BODY_DOCS      = NO\r
+\r
+# The INTERNAL_DOCS tag determines if documentation \r
+# that is typed after a \internal command is included. If the tag is set \r
+# to NO (the default) then the documentation will be excluded. \r
+# Set it to YES to include the internal documentation.\r
+\r
+INTERNAL_DOCS          = NO\r
+\r
+# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate \r
+# file names in lower-case letters. If set to YES upper-case letters are also \r
+# allowed. This is useful if you have classes or files whose names only differ \r
+# in case and if your file system supports case sensitive file names. Windows \r
+# and Mac users are advised to set this option to NO.\r
+\r
+CASE_SENSE_NAMES       = NO\r
+\r
+# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen \r
+# will show members with their full class and namespace scopes in the \r
+# documentation. If set to YES the scope will be hidden.\r
+\r
+HIDE_SCOPE_NAMES       = NO\r
+\r
+# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen \r
+# will put a list of the files that are included by a file in the documentation \r
+# of that file.\r
+\r
+SHOW_INCLUDE_FILES     = YES\r
+\r
+# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] \r
+# is inserted in the documentation for inline members.\r
+\r
+INLINE_INFO            = YES\r
+\r
+# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen \r
+# will sort the (detailed) documentation of file and class members \r
+# alphabetically by member name. If set to NO the members will appear in \r
+# declaration order.\r
+\r
+SORT_MEMBER_DOCS       = YES\r
+\r
+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the \r
+# brief documentation of file, namespace and class members alphabetically \r
+# by member name. If set to NO (the default) the members will appear in \r
+# declaration order.\r
+\r
+SORT_BRIEF_DOCS        = NO\r
+\r
+# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the \r
+# hierarchy of group names into alphabetical order. If set to NO (the default) \r
+# the group names will appear in their defined order.\r
+\r
+SORT_GROUP_NAMES       = NO\r
+\r
+# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be \r
+# sorted by fully-qualified names, including namespaces. If set to \r
+# NO (the default), the class list will be sorted only by class name, \r
+# not including the namespace part. \r
+# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.\r
+# Note: This option applies only to the class list, not to the \r
+# alphabetical list.\r
+\r
+SORT_BY_SCOPE_NAME     = NO\r
+\r
+# The GENERATE_TODOLIST tag can be used to enable (YES) or \r
+# disable (NO) the todo list. This list is created by putting \todo \r
+# commands in the documentation.\r
+\r
+GENERATE_TODOLIST      = NO\r
+\r
+# The GENERATE_TESTLIST tag can be used to enable (YES) or \r
+# disable (NO) the test list. This list is created by putting \test \r
+# commands in the documentation.\r
+\r
+GENERATE_TESTLIST      = NO\r
+\r
+# The GENERATE_BUGLIST tag can be used to enable (YES) or \r
+# disable (NO) the bug list. This list is created by putting \bug \r
+# commands in the documentation.\r
+\r
+GENERATE_BUGLIST       = NO\r
+\r
+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or \r
+# disable (NO) the deprecated list. This list is created by putting \r
+# \deprecated commands in the documentation.\r
+\r
+GENERATE_DEPRECATEDLIST= YES\r
+\r
+# The ENABLED_SECTIONS tag can be used to enable conditional \r
+# documentation sections, marked by \if sectionname ... \endif.\r
+\r
+ENABLED_SECTIONS       = \r
+\r
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines \r
+# the initial value of a variable or define consists of for it to appear in \r
+# the documentation. If the initializer consists of more lines than specified \r
+# here it will be hidden. Use a value of 0 to hide initializers completely. \r
+# The appearance of the initializer of individual variables and defines in the \r
+# documentation can be controlled using \showinitializer or \hideinitializer \r
+# command in the documentation regardless of this setting.\r
+\r
+MAX_INITIALIZER_LINES  = 30\r
+\r
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated \r
+# at the bottom of the documentation of classes and structs. If set to YES the \r
+# list will mention the files that were used to generate the documentation.\r
+\r
+SHOW_USED_FILES        = YES\r
+\r
+# If the sources in your project are distributed over multiple directories \r
+# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy \r
+# in the documentation. The default is NO.\r
+\r
+SHOW_DIRECTORIES       = YES\r
+\r
+# Set the SHOW_FILES tag to NO to disable the generation of the Files page.\r
+# This will remove the Files entry from the Quick Index and from the \r
+# Folder Tree View (if specified). The default is YES.\r
+\r
+SHOW_FILES             = YES\r
+\r
+# Set the SHOW_NAMESPACES tag to NO to disable the generation of the \r
+# Namespaces page.  This will remove the Namespaces entry from the Quick Index\r
+# and from the Folder Tree View (if specified). The default is YES.\r
+\r
+SHOW_NAMESPACES        = YES\r
+\r
+# The FILE_VERSION_FILTER tag can be used to specify a program or script that \r
+# doxygen should invoke to get the current version for each file (typically from \r
+# the version control system). Doxygen will invoke the program by executing (via \r
+# popen()) the command <command> <input-file>, where <command> is the value of \r
+# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file \r
+# provided by doxygen. Whatever the program writes to standard output \r
+# is used as the file version. See the manual for examples.\r
+\r
+FILE_VERSION_FILTER    = \r
+\r
+# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by \r
+# doxygen. The layout file controls the global structure of the generated output files \r
+# in an output format independent way. The create the layout file that represents \r
+# doxygen's defaults, run doxygen with the -l option. You can optionally specify a \r
+# file name after the option, if omitted DoxygenLayout.xml will be used as the name \r
+# of the layout file.\r
+\r
+LAYOUT_FILE            = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to warning and progress messages\r
+#---------------------------------------------------------------------------\r
+\r
+# The QUIET tag can be used to turn on/off the messages that are generated \r
+# by doxygen. Possible values are YES and NO. If left blank NO is used.\r
+\r
+QUIET                  = YES\r
+\r
+# The WARNINGS tag can be used to turn on/off the warning messages that are \r
+# generated by doxygen. Possible values are YES and NO. If left blank \r
+# NO is used.\r
+\r
+WARNINGS               = YES\r
+\r
+# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings \r
+# for undocumented members. If EXTRACT_ALL is set to YES then this flag will \r
+# automatically be disabled.\r
+\r
+WARN_IF_UNDOCUMENTED   = YES\r
+\r
+# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for \r
+# potential errors in the documentation, such as not documenting some \r
+# parameters in a documented function, or documenting parameters that \r
+# don't exist or using markup commands wrongly.\r
+\r
+WARN_IF_DOC_ERROR      = YES\r
+\r
+# This WARN_NO_PARAMDOC option can be abled to get warnings for \r
+# functions that are documented, but have no documentation for their parameters \r
+# or return value. If set to NO (the default) doxygen will only warn about \r
+# wrong or incomplete parameter documentation, but not about the absence of \r
+# documentation.\r
+\r
+WARN_NO_PARAMDOC       = YES\r
+\r
+# The WARN_FORMAT tag determines the format of the warning messages that \r
+# doxygen can produce. The string should contain the $file, $line, and $text \r
+# tags, which will be replaced by the file and line number from which the \r
+# warning originated and the warning text. Optionally the format may contain \r
+# $version, which will be replaced by the version of the file (if it could \r
+# be obtained via FILE_VERSION_FILTER)\r
+\r
+WARN_FORMAT            = "$file:$line: $text"\r
+\r
+# The WARN_LOGFILE tag can be used to specify a file to which warning \r
+# and error messages should be written. If left blank the output is written \r
+# to stderr.\r
+\r
+WARN_LOGFILE           = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the input files\r
+#---------------------------------------------------------------------------\r
+\r
+# The INPUT tag can be used to specify the files and/or directories that contain \r
+# documented source files. You may enter file names like "myfile.cpp" or \r
+# directories like "/usr/src/myproject". Separate the files or directories \r
+# with spaces.\r
+\r
+INPUT                  = ./\r
+\r
+# This tag can be used to specify the character encoding of the source files \r
+# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is \r
+# also the default input encoding. Doxygen uses libiconv (or the iconv built \r
+# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for \r
+# the list of possible encodings.\r
+\r
+INPUT_ENCODING         = UTF-8\r
+\r
+# If the value of the INPUT tag contains directories, you can use the \r
+# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \r
+# and *.h) to filter out the source-files in the directories. If left \r
+# blank the following patterns are tested: \r
+# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx \r
+# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90\r
+\r
+FILE_PATTERNS          = *.h \\r
+                         *.c \\r
+                                                *.txt\r
+\r
+# The RECURSIVE tag can be used to turn specify whether or not subdirectories \r
+# should be searched for input files as well. Possible values are YES and NO. \r
+# If left blank NO is used.\r
+\r
+RECURSIVE              = YES\r
+\r
+# The EXCLUDE tag can be used to specify files and/or directories that should \r
+# excluded from the INPUT source files. This way you can easily exclude a \r
+# subdirectory from a directory tree whose root is specified with the INPUT tag.\r
+\r
+EXCLUDE                = \r
+\r
+# The EXCLUDE_SYMLINKS tag can be used select whether or not files or \r
+# directories that are symbolic links (a Unix filesystem feature) are excluded \r
+# from the input.\r
+\r
+EXCLUDE_SYMLINKS       = NO\r
+\r
+# If the value of the INPUT tag contains directories, you can use the \r
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude \r
+# certain files from those directories. Note that the wildcards are matched \r
+# against the file with absolute path, so to exclude all test directories \r
+# for example use the pattern */test/*\r
+\r
+EXCLUDE_PATTERNS       = */LowLevel/USBMode.h\r
+\r
+# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names \r
+# (namespaces, classes, functions, etc.) that should be excluded from the \r
+# output. The symbol name can be a fully qualified name, a word, or if the \r
+# wildcard * is used, a substring. Examples: ANamespace, AClass, \r
+# AClass::ANamespace, ANamespace::*Test\r
+\r
+EXCLUDE_SYMBOLS        = __*\r
+\r
+# The EXAMPLE_PATH tag can be used to specify one or more files or \r
+# directories that contain example code fragments that are included (see \r
+# the \include command).\r
+\r
+EXAMPLE_PATH           = \r
+\r
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the \r
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \r
+# and *.h) to filter out the source-files in the directories. If left \r
+# blank all files are included.\r
+\r
+EXAMPLE_PATTERNS       = *\r
+\r
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be \r
+# searched for input files to be used with the \include or \dontinclude \r
+# commands irrespective of the value of the RECURSIVE tag. \r
+# Possible values are YES and NO. If left blank NO is used.\r
+\r
+EXAMPLE_RECURSIVE      = NO\r
+\r
+# The IMAGE_PATH tag can be used to specify one or more files or \r
+# directories that contain image that are included in the documentation (see \r
+# the \image command).\r
+\r
+IMAGE_PATH             = \r
+\r
+# The INPUT_FILTER tag can be used to specify a program that doxygen should \r
+# invoke to filter for each input file. Doxygen will invoke the filter program \r
+# by executing (via popen()) the command <filter> <input-file>, where <filter> \r
+# is the value of the INPUT_FILTER tag, and <input-file> is the name of an \r
+# input file. Doxygen will then use the output that the filter program writes \r
+# to standard output.  If FILTER_PATTERNS is specified, this tag will be \r
+# ignored.\r
+\r
+INPUT_FILTER           = \r
+\r
+# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern \r
+# basis.  Doxygen will compare the file name with each pattern and apply the \r
+# filter if there is a match.  The filters are a list of the form: \r
+# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further \r
+# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER \r
+# is applied to all files.\r
+\r
+FILTER_PATTERNS        = \r
+\r
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using \r
+# INPUT_FILTER) will be used to filter the input files when producing source \r
+# files to browse (i.e. when SOURCE_BROWSER is set to YES).\r
+\r
+FILTER_SOURCE_FILES    = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to source browsing\r
+#---------------------------------------------------------------------------\r
+\r
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will \r
+# be generated. Documented entities will be cross-referenced with these sources. \r
+# Note: To get rid of all source code in the generated output, make sure also \r
+# VERBATIM_HEADERS is set to NO.\r
+\r
+SOURCE_BROWSER         = NO\r
+\r
+# Setting the INLINE_SOURCES tag to YES will include the body \r
+# of functions and classes directly in the documentation.\r
+\r
+INLINE_SOURCES         = NO\r
+\r
+# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct \r
+# doxygen to hide any special comment blocks from generated source code \r
+# fragments. Normal C and C++ comments will always remain visible.\r
+\r
+STRIP_CODE_COMMENTS    = YES\r
+\r
+# If the REFERENCED_BY_RELATION tag is set to YES \r
+# then for each documented function all documented \r
+# functions referencing it will be listed.\r
+\r
+REFERENCED_BY_RELATION = NO\r
+\r
+# If the REFERENCES_RELATION tag is set to YES \r
+# then for each documented function all documented entities \r
+# called/used by that function will be listed.\r
+\r
+REFERENCES_RELATION    = NO\r
+\r
+# If the REFERENCES_LINK_SOURCE tag is set to YES (the default)\r
+# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from\r
+# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will\r
+# link to the source code.  Otherwise they will link to the documentstion.\r
+\r
+REFERENCES_LINK_SOURCE = NO\r
+\r
+# If the USE_HTAGS tag is set to YES then the references to source code \r
+# will point to the HTML generated by the htags(1) tool instead of doxygen \r
+# built-in source browser. The htags tool is part of GNU's global source \r
+# tagging system (see http://www.gnu.org/software/global/global.html). You \r
+# will need version 4.8.6 or higher.\r
+\r
+USE_HTAGS              = NO\r
+\r
+# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen \r
+# will generate a verbatim copy of the header file for each class for \r
+# which an include is specified. Set to NO to disable this.\r
+\r
+VERBATIM_HEADERS       = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the alphabetical class index\r
+#---------------------------------------------------------------------------\r
+\r
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index \r
+# of all compounds will be generated. Enable this if the project \r
+# contains a lot of classes, structs, unions or interfaces.\r
+\r
+ALPHABETICAL_INDEX     = YES\r
+\r
+# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then \r
+# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns \r
+# in which this list will be split (can be a number in the range [1..20])\r
+\r
+COLS_IN_ALPHA_INDEX    = 5\r
+\r
+# In case all classes in a project start with a common prefix, all \r
+# classes will be put under the same header in the alphabetical index. \r
+# The IGNORE_PREFIX tag can be used to specify one or more prefixes that \r
+# should be ignored while generating the index headers.\r
+\r
+IGNORE_PREFIX          = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the HTML output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_HTML tag is set to YES (the default) Doxygen will \r
+# generate HTML output.\r
+\r
+GENERATE_HTML          = YES\r
+\r
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `html' will be used as the default path.\r
+\r
+HTML_OUTPUT            = html\r
+\r
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for \r
+# each generated HTML page (for example: .htm,.php,.asp). If it is left blank \r
+# doxygen will generate files with .html extension.\r
+\r
+HTML_FILE_EXTENSION    = .html\r
+\r
+# The HTML_HEADER tag can be used to specify a personal HTML header for \r
+# each generated HTML page. If it is left blank doxygen will generate a \r
+# standard header.\r
+\r
+HTML_HEADER            = \r
+\r
+# The HTML_FOOTER tag can be used to specify a personal HTML footer for \r
+# each generated HTML page. If it is left blank doxygen will generate a \r
+# standard footer.\r
+\r
+HTML_FOOTER            = \r
+\r
+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading \r
+# style sheet that is used by each HTML page. It can be used to \r
+# fine-tune the look of the HTML output. If the tag is left blank doxygen \r
+# will generate a default style sheet. Note that doxygen will try to copy \r
+# the style sheet file to the HTML output directory, so don't put your own \r
+# stylesheet in the HTML output directory as well, or it will be erased!\r
+\r
+HTML_STYLESHEET        = \r
+\r
+# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, \r
+# files or namespaces will be aligned in HTML using tables. If set to \r
+# NO a bullet list will be used.\r
+\r
+HTML_ALIGN_MEMBERS     = YES\r
+\r
+# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML \r
+# documentation will contain sections that can be hidden and shown after the \r
+# page has loaded. For this to work a browser that supports \r
+# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox \r
+# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari).\r
+\r
+HTML_DYNAMIC_SECTIONS  = YES\r
+\r
+# If the GENERATE_DOCSET tag is set to YES, additional index files \r
+# will be generated that can be used as input for Apple's Xcode 3 \r
+# integrated development environment, introduced with OSX 10.5 (Leopard). \r
+# To create a documentation set, doxygen will generate a Makefile in the \r
+# HTML output directory. Running make will produce the docset in that \r
+# directory and running "make install" will install the docset in \r
+# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find \r
+# it at startup. \r
+# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information.\r
+\r
+GENERATE_DOCSET        = NO\r
+\r
+# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the \r
+# feed. A documentation feed provides an umbrella under which multiple \r
+# documentation sets from a single provider (such as a company or product suite) \r
+# can be grouped.\r
+\r
+DOCSET_FEEDNAME        = "Doxygen generated docs"\r
+\r
+# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that \r
+# should uniquely identify the documentation set bundle. This should be a \r
+# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen \r
+# will append .docset to the name.\r
+\r
+DOCSET_BUNDLE_ID       = org.doxygen.Project\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, additional index files \r
+# will be generated that can be used as input for tools like the \r
+# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) \r
+# of the generated HTML documentation.\r
+\r
+GENERATE_HTMLHELP      = NO\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can \r
+# be used to specify the file name of the resulting .chm file. You \r
+# can add a path in front of the file if the result should not be \r
+# written to the html output directory.\r
+\r
+CHM_FILE               = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can \r
+# be used to specify the location (absolute path including file name) of \r
+# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run \r
+# the HTML help compiler on the generated index.hhp.\r
+\r
+HHC_LOCATION           = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag \r
+# controls if a separate .chi index file is generated (YES) or that \r
+# it should be included in the master .chm file (NO).\r
+\r
+GENERATE_CHI           = NO\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING\r
+# is used to encode HtmlHelp index (hhk), content (hhc) and project file\r
+# content.\r
+\r
+CHM_INDEX_ENCODING     = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag \r
+# controls whether a binary table of contents is generated (YES) or a \r
+# normal table of contents (NO) in the .chm file.\r
+\r
+BINARY_TOC             = NO\r
+\r
+# The TOC_EXPAND flag can be set to YES to add extra items for group members \r
+# to the contents of the HTML help documentation and to the tree view.\r
+\r
+TOC_EXPAND             = YES\r
+\r
+# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER \r
+# are set, an additional index file will be generated that can be used as input for \r
+# Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated \r
+# HTML documentation.\r
+\r
+GENERATE_QHP           = NO\r
+\r
+# If the QHG_LOCATION tag is specified, the QCH_FILE tag can \r
+# be used to specify the file name of the resulting .qch file. \r
+# The path specified is relative to the HTML output folder.\r
+\r
+QCH_FILE               = \r
+\r
+# The QHP_NAMESPACE tag specifies the namespace to use when generating \r
+# Qt Help Project output. For more information please see \r
+# <a href="http://doc.trolltech.com/qthelpproject.html#namespace">Qt Help Project / Namespace</a>.\r
+\r
+QHP_NAMESPACE          = org.doxygen.Project\r
+\r
+# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating \r
+# Qt Help Project output. For more information please see \r
+# <a href="http://doc.trolltech.com/qthelpproject.html#virtual-folders">Qt Help Project / Virtual Folders</a>.\r
+\r
+QHP_VIRTUAL_FOLDER     = doc\r
+\r
+# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can \r
+# be used to specify the location of Qt's qhelpgenerator. \r
+# If non-empty doxygen will try to run qhelpgenerator on the generated \r
+# .qhp file .\r
+\r
+QHG_LOCATION           = \r
+\r
+# The DISABLE_INDEX tag can be used to turn on/off the condensed index at \r
+# top of each HTML page. The value NO (the default) enables the index and \r
+# the value YES disables it.\r
+\r
+DISABLE_INDEX          = NO\r
+\r
+# This tag can be used to set the number of enum values (range [1..20]) \r
+# that doxygen will group on one line in the generated HTML documentation.\r
+\r
+ENUM_VALUES_PER_LINE   = 1\r
+\r
+# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index\r
+# structure should be generated to display hierarchical information.\r
+# If the tag value is set to FRAME, a side panel will be generated\r
+# containing a tree-like index structure (just like the one that \r
+# is generated for HTML Help). For this to work a browser that supports \r
+# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, \r
+# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are \r
+# probably better off using the HTML help feature. Other possible values \r
+# for this tag are: HIERARCHIES, which will generate the Groups, Directories,\r
+# and Class Hierarchy pages using a tree view instead of an ordered list;\r
+# ALL, which combines the behavior of FRAME and HIERARCHIES; and NONE, which\r
+# disables this behavior completely. For backwards compatibility with previous\r
+# releases of Doxygen, the values YES and NO are equivalent to FRAME and NONE\r
+# respectively.\r
+\r
+GENERATE_TREEVIEW      = YES\r
+\r
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be \r
+# used to set the initial width (in pixels) of the frame in which the tree \r
+# is shown.\r
+\r
+TREEVIEW_WIDTH         = 250\r
+\r
+# Use this tag to change the font size of Latex formulas included \r
+# as images in the HTML documentation. The default is 10. Note that \r
+# when you change the font size after a successful doxygen run you need \r
+# to manually remove any form_*.png images from the HTML output directory \r
+# to force them to be regenerated.\r
+\r
+FORMULA_FONTSIZE       = 10\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the LaTeX output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will \r
+# generate Latex output.\r
+\r
+GENERATE_LATEX         = NO\r
+\r
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `latex' will be used as the default path.\r
+\r
+LATEX_OUTPUT           = latex\r
+\r
+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be \r
+# invoked. If left blank `latex' will be used as the default command name.\r
+\r
+LATEX_CMD_NAME         = latex\r
+\r
+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to \r
+# generate index for LaTeX. If left blank `makeindex' will be used as the \r
+# default command name.\r
+\r
+MAKEINDEX_CMD_NAME     = makeindex\r
+\r
+# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact \r
+# LaTeX documents. This may be useful for small projects and may help to \r
+# save some trees in general.\r
+\r
+COMPACT_LATEX          = NO\r
+\r
+# The PAPER_TYPE tag can be used to set the paper type that is used \r
+# by the printer. Possible values are: a4, a4wide, letter, legal and \r
+# executive. If left blank a4wide will be used.\r
+\r
+PAPER_TYPE             = a4wide\r
+\r
+# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX \r
+# packages that should be included in the LaTeX output.\r
+\r
+EXTRA_PACKAGES         = \r
+\r
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for \r
+# the generated latex document. The header should contain everything until \r
+# the first chapter. If it is left blank doxygen will generate a \r
+# standard header. Notice: only use this tag if you know what you are doing!\r
+\r
+LATEX_HEADER           = \r
+\r
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated \r
+# is prepared for conversion to pdf (using ps2pdf). The pdf file will \r
+# contain links (just like the HTML output) instead of page references \r
+# This makes the output suitable for online browsing using a pdf viewer.\r
+\r
+PDF_HYPERLINKS         = YES\r
+\r
+# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of \r
+# plain latex in the generated Makefile. Set this option to YES to get a \r
+# higher quality PDF documentation.\r
+\r
+USE_PDFLATEX           = YES\r
+\r
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. \r
+# command to the generated LaTeX files. This will instruct LaTeX to keep \r
+# running if errors occur, instead of asking the user for help. \r
+# This option is also used when generating formulas in HTML.\r
+\r
+LATEX_BATCHMODE        = NO\r
+\r
+# If LATEX_HIDE_INDICES is set to YES then doxygen will not \r
+# include the index chapters (such as File Index, Compound Index, etc.) \r
+# in the output.\r
+\r
+LATEX_HIDE_INDICES     = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the RTF output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output \r
+# The RTF output is optimized for Word 97 and may not look very pretty with \r
+# other RTF readers or editors.\r
+\r
+GENERATE_RTF           = NO\r
+\r
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `rtf' will be used as the default path.\r
+\r
+RTF_OUTPUT             = rtf\r
+\r
+# If the COMPACT_RTF tag is set to YES Doxygen generates more compact \r
+# RTF documents. This may be useful for small projects and may help to \r
+# save some trees in general.\r
+\r
+COMPACT_RTF            = NO\r
+\r
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated \r
+# will contain hyperlink fields. The RTF file will \r
+# contain links (just like the HTML output) instead of page references. \r
+# This makes the output suitable for online browsing using WORD or other \r
+# programs which support those fields. \r
+# Note: wordpad (write) and others do not support links.\r
+\r
+RTF_HYPERLINKS         = NO\r
+\r
+# Load stylesheet definitions from file. Syntax is similar to doxygen's \r
+# config file, i.e. a series of assignments. You only have to provide \r
+# replacements, missing definitions are set to their default value.\r
+\r
+RTF_STYLESHEET_FILE    = \r
+\r
+# Set optional variables used in the generation of an rtf document. \r
+# Syntax is similar to doxygen's config file.\r
+\r
+RTF_EXTENSIONS_FILE    = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the man page output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_MAN tag is set to YES (the default) Doxygen will \r
+# generate man pages\r
+\r
+GENERATE_MAN           = NO\r
+\r
+# The MAN_OUTPUT tag is used to specify where the man pages will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `man' will be used as the default path.\r
+\r
+MAN_OUTPUT             = man\r
+\r
+# The MAN_EXTENSION tag determines the extension that is added to \r
+# the generated man pages (default is the subroutine's section .3)\r
+\r
+MAN_EXTENSION          = .3\r
+\r
+# If the MAN_LINKS tag is set to YES and Doxygen generates man output, \r
+# then it will generate one additional man file for each entity \r
+# documented in the real man page(s). These additional files \r
+# only source the real man page, but without them the man command \r
+# would be unable to find the correct page. The default is NO.\r
+\r
+MAN_LINKS              = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the XML output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_XML tag is set to YES Doxygen will \r
+# generate an XML file that captures the structure of \r
+# the code including all documentation.\r
+\r
+GENERATE_XML           = NO\r
+\r
+# The XML_OUTPUT tag is used to specify where the XML pages will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `xml' will be used as the default path.\r
+\r
+XML_OUTPUT             = xml\r
+\r
+# The XML_SCHEMA tag can be used to specify an XML schema, \r
+# which can be used by a validating XML parser to check the \r
+# syntax of the XML files.\r
+\r
+XML_SCHEMA             = \r
+\r
+# The XML_DTD tag can be used to specify an XML DTD, \r
+# which can be used by a validating XML parser to check the \r
+# syntax of the XML files.\r
+\r
+XML_DTD                = \r
+\r
+# If the XML_PROGRAMLISTING tag is set to YES Doxygen will \r
+# dump the program listings (including syntax highlighting \r
+# and cross-referencing information) to the XML output. Note that \r
+# enabling this will significantly increase the size of the XML output.\r
+\r
+XML_PROGRAMLISTING     = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options for the AutoGen Definitions output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will \r
+# generate an AutoGen Definitions (see autogen.sf.net) file \r
+# that captures the structure of the code including all \r
+# documentation. Note that this feature is still experimental \r
+# and incomplete at the moment.\r
+\r
+GENERATE_AUTOGEN_DEF   = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the Perl module output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_PERLMOD tag is set to YES Doxygen will \r
+# generate a Perl module file that captures the structure of \r
+# the code including all documentation. Note that this \r
+# feature is still experimental and incomplete at the \r
+# moment.\r
+\r
+GENERATE_PERLMOD       = NO\r
+\r
+# If the PERLMOD_LATEX tag is set to YES Doxygen will generate \r
+# the necessary Makefile rules, Perl scripts and LaTeX code to be able \r
+# to generate PDF and DVI output from the Perl module output.\r
+\r
+PERLMOD_LATEX          = NO\r
+\r
+# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be \r
+# nicely formatted so it can be parsed by a human reader.  This is useful \r
+# if you want to understand what is going on.  On the other hand, if this \r
+# tag is set to NO the size of the Perl module output will be much smaller \r
+# and Perl will parse it just the same.\r
+\r
+PERLMOD_PRETTY         = YES\r
+\r
+# The names of the make variables in the generated doxyrules.make file \r
+# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. \r
+# This is useful so different doxyrules.make files included by the same \r
+# Makefile don't overwrite each other's variables.\r
+\r
+PERLMOD_MAKEVAR_PREFIX = \r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration options related to the preprocessor   \r
+#---------------------------------------------------------------------------\r
+\r
+# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will \r
+# evaluate all C-preprocessor directives found in the sources and include \r
+# files.\r
+\r
+ENABLE_PREPROCESSING   = YES\r
+\r
+# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro \r
+# names in the source code. If set to NO (the default) only conditional \r
+# compilation will be performed. Macro expansion can be done in a controlled \r
+# way by setting EXPAND_ONLY_PREDEF to YES.\r
+\r
+MACRO_EXPANSION        = YES\r
+\r
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES \r
+# then the macro expansion is limited to the macros specified with the \r
+# PREDEFINED and EXPAND_AS_DEFINED tags.\r
+\r
+EXPAND_ONLY_PREDEF     = YES\r
+\r
+# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files \r
+# in the INCLUDE_PATH (see below) will be search if a #include is found.\r
+\r
+SEARCH_INCLUDES        = YES\r
+\r
+# The INCLUDE_PATH tag can be used to specify one or more directories that \r
+# contain include files that are not input files but should be processed by \r
+# the preprocessor.\r
+\r
+INCLUDE_PATH           = \r
+\r
+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard \r
+# patterns (like *.h and *.hpp) to filter out the header-files in the \r
+# directories. If left blank, the patterns specified with FILE_PATTERNS will \r
+# be used.\r
+\r
+INCLUDE_FILE_PATTERNS  = \r
+\r
+# The PREDEFINED tag can be used to specify one or more macro names that \r
+# are defined before the preprocessor is started (similar to the -D option of \r
+# gcc). The argument of the tag is a list of macros of the form: name \r
+# or name=definition (no spaces). If the definition and the = are \r
+# omitted =1 is assumed. To prevent a macro definition from being \r
+# undefined via #undef or recursively expanded use the := operator \r
+# instead of the = operator.\r
+\r
+PREDEFINED             = __DOXYGEN__\r
+\r
+# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then \r
+# this tag can be used to specify a list of macro names that should be expanded. \r
+# The macro definition that is found in the sources will be used. \r
+# Use the PREDEFINED tag if you want to use a different macro definition.\r
+\r
+EXPAND_AS_DEFINED      = BUTTLOADTAG\r
+\r
+# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then \r
+# doxygen's preprocessor will remove all function-like macros that are alone \r
+# on a line, have an all uppercase name, and do not end with a semicolon. Such \r
+# function macros are typically used for boiler-plate code, and will confuse \r
+# the parser if not removed.\r
+\r
+SKIP_FUNCTION_MACROS   = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration::additions related to external references   \r
+#---------------------------------------------------------------------------\r
+\r
+# The TAGFILES option can be used to specify one or more tagfiles. \r
+# Optionally an initial location of the external documentation \r
+# can be added for each tagfile. The format of a tag file without \r
+# this location is as follows: \r
+#   TAGFILES = file1 file2 ... \r
+# Adding location for the tag files is done as follows: \r
+#   TAGFILES = file1=loc1 "file2 = loc2" ... \r
+# where "loc1" and "loc2" can be relative or absolute paths or \r
+# URLs. If a location is present for each tag, the installdox tool \r
+# does not have to be run to correct the links.\r
+# Note that each tag file must have a unique name\r
+# (where the name does NOT include the path)\r
+# If a tag file is not located in the directory in which doxygen \r
+# is run, you must also specify the path to the tagfile here.\r
+\r
+TAGFILES               = \r
+\r
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create \r
+# a tag file that is based on the input files it reads.\r
+\r
+GENERATE_TAGFILE       = \r
+\r
+# If the ALLEXTERNALS tag is set to YES all external classes will be listed \r
+# in the class index. If set to NO only the inherited external classes \r
+# will be listed.\r
+\r
+ALLEXTERNALS           = NO\r
+\r
+# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed \r
+# in the modules index. If set to NO, only the current project's groups will \r
+# be listed.\r
+\r
+EXTERNAL_GROUPS        = YES\r
+\r
+# The PERL_PATH should be the absolute path and name of the perl script \r
+# interpreter (i.e. the result of `which perl').\r
+\r
+PERL_PATH              = /usr/bin/perl\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration options related to the dot tool   \r
+#---------------------------------------------------------------------------\r
+\r
+# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will \r
+# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base \r
+# or super classes. Setting the tag to NO turns the diagrams off. Note that \r
+# this option is superseded by the HAVE_DOT option below. This is only a \r
+# fallback. It is recommended to install and use dot, since it yields more \r
+# powerful graphs.\r
+\r
+CLASS_DIAGRAMS         = NO\r
+\r
+# You can define message sequence charts within doxygen comments using the \msc \r
+# command. Doxygen will then run the mscgen tool (see \r
+# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the \r
+# documentation. The MSCGEN_PATH tag allows you to specify the directory where \r
+# the mscgen tool resides. If left empty the tool is assumed to be found in the \r
+# default search path.\r
+\r
+MSCGEN_PATH            = \r
+\r
+# If set to YES, the inheritance and collaboration graphs will hide \r
+# inheritance and usage relations if the target is undocumented \r
+# or is not a class.\r
+\r
+HIDE_UNDOC_RELATIONS   = YES\r
+\r
+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is \r
+# available from the path. This tool is part of Graphviz, a graph visualization \r
+# toolkit from AT&T and Lucent Bell Labs. The other options in this section \r
+# have no effect if this option is set to NO (the default)\r
+\r
+HAVE_DOT               = NO\r
+\r
+# By default doxygen will write a font called FreeSans.ttf to the output \r
+# directory and reference it in all dot files that doxygen generates. This \r
+# font does not include all possible unicode characters however, so when you need \r
+# these (or just want a differently looking font) you can specify the font name \r
+# using DOT_FONTNAME. You need need to make sure dot is able to find the font, \r
+# which can be done by putting it in a standard location or by setting the \r
+# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory \r
+# containing the font.\r
+\r
+DOT_FONTNAME           = FreeSans\r
+\r
+# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. \r
+# The default size is 10pt.\r
+\r
+DOT_FONTSIZE           = 10\r
+\r
+# By default doxygen will tell dot to use the output directory to look for the \r
+# FreeSans.ttf font (which doxygen will put there itself). If you specify a \r
+# different font using DOT_FONTNAME you can set the path where dot \r
+# can find it using this tag.\r
+\r
+DOT_FONTPATH           = \r
+\r
+# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for each documented class showing the direct and \r
+# indirect inheritance relations. Setting this tag to YES will force the \r
+# the CLASS_DIAGRAMS tag to NO.\r
+\r
+CLASS_GRAPH            = NO\r
+\r
+# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for each documented class showing the direct and \r
+# indirect implementation dependencies (inheritance, containment, and \r
+# class references variables) of the class with other documented classes.\r
+\r
+COLLABORATION_GRAPH    = NO\r
+\r
+# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for groups, showing the direct groups dependencies\r
+\r
+GROUP_GRAPHS           = NO\r
+\r
+# If the UML_LOOK tag is set to YES doxygen will generate inheritance and \r
+# collaboration diagrams in a style similar to the OMG's Unified Modeling \r
+# Language.\r
+\r
+UML_LOOK               = NO\r
+\r
+# If set to YES, the inheritance and collaboration graphs will show the \r
+# relations between templates and their instances.\r
+\r
+TEMPLATE_RELATIONS     = NO\r
+\r
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT \r
+# tags are set to YES then doxygen will generate a graph for each documented \r
+# file showing the direct and indirect include dependencies of the file with \r
+# other documented files.\r
+\r
+INCLUDE_GRAPH          = NO\r
+\r
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and \r
+# HAVE_DOT tags are set to YES then doxygen will generate a graph for each \r
+# documented header file showing the documented files that directly or \r
+# indirectly include this file.\r
+\r
+INCLUDED_BY_GRAPH      = NO\r
+\r
+# If the CALL_GRAPH and HAVE_DOT options are set to YES then \r
+# doxygen will generate a call dependency graph for every global function \r
+# or class method. Note that enabling this option will significantly increase \r
+# the time of a run. So in most cases it will be better to enable call graphs \r
+# for selected functions only using the \callgraph command.\r
+\r
+CALL_GRAPH             = NO\r
+\r
+# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then \r
+# doxygen will generate a caller dependency graph for every global function \r
+# or class method. Note that enabling this option will significantly increase \r
+# the time of a run. So in most cases it will be better to enable caller \r
+# graphs for selected functions only using the \callergraph command.\r
+\r
+CALLER_GRAPH           = NO\r
+\r
+# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen \r
+# will graphical hierarchy of all classes instead of a textual one.\r
+\r
+GRAPHICAL_HIERARCHY    = NO\r
+\r
+# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES \r
+# then doxygen will show the dependencies a directory has on other directories \r
+# in a graphical way. The dependency relations are determined by the #include\r
+# relations between the files in the directories.\r
+\r
+DIRECTORY_GRAPH        = NO\r
+\r
+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images \r
+# generated by dot. Possible values are png, jpg, or gif\r
+# If left blank png will be used.\r
+\r
+DOT_IMAGE_FORMAT       = png\r
+\r
+# The tag DOT_PATH can be used to specify the path where the dot tool can be \r
+# found. If left blank, it is assumed the dot tool can be found in the path.\r
+\r
+DOT_PATH               = "C:/Program Files/Graphviz2.18/bin"\r
+\r
+# The DOTFILE_DIRS tag can be used to specify one or more directories that \r
+# contain dot files that are included in the documentation (see the \r
+# \dotfile command).\r
+\r
+DOTFILE_DIRS           = \r
+\r
+# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of \r
+# nodes that will be shown in the graph. If the number of nodes in a graph \r
+# becomes larger than this value, doxygen will truncate the graph, which is \r
+# visualized by representing a node as a red box. Note that doxygen if the \r
+# number of direct children of the root node in a graph is already larger than \r
+# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note \r
+# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.\r
+\r
+DOT_GRAPH_MAX_NODES    = 15\r
+\r
+# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the \r
+# graphs generated by dot. A depth value of 3 means that only nodes reachable \r
+# from the root by following a path via at most 3 edges will be shown. Nodes \r
+# that lay further from the root node will be omitted. Note that setting this \r
+# option to 1 or 2 may greatly reduce the computation time needed for large \r
+# code bases. Also note that the size of a graph can be further restricted by \r
+# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.\r
+\r
+MAX_DOT_GRAPH_DEPTH    = 2\r
+\r
+# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent \r
+# background. This is disabled by default, because dot on Windows does not \r
+# seem to support this out of the box. Warning: Depending on the platform used, \r
+# enabling this option may lead to badly anti-aliased labels on the edges of \r
+# a graph (i.e. they become hard to read).\r
+\r
+DOT_TRANSPARENT        = YES\r
+\r
+# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output \r
+# files in one run (i.e. multiple -o and -T options on the command line). This \r
+# makes dot run faster, but since only newer versions of dot (>1.8.10) \r
+# support this, this feature is disabled by default.\r
+\r
+DOT_MULTI_TARGETS      = NO\r
+\r
+# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will \r
+# generate a legend page explaining the meaning of the various boxes and \r
+# arrows in the dot generated graphs.\r
+\r
+GENERATE_LEGEND        = YES\r
+\r
+# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will \r
+# remove the intermediate dot files that are used to generate \r
+# the various graphs.\r
+\r
+DOT_CLEANUP            = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration::additions related to the search engine   \r
+#---------------------------------------------------------------------------\r
+\r
+# The SEARCHENGINE tag specifies whether or not a search engine should be \r
+# used. If set to NO the values of all tags below this one will be ignored.\r
+\r
+SEARCHENGINE           = NO\r
diff --git a/Demos/Device/ClassDriver/Mouse/Mouse.aps b/Demos/Device/ClassDriver/Mouse/Mouse.aps
new file mode 100644 (file)
index 0000000..3ae1637
--- /dev/null
@@ -0,0 +1 @@
+<AVRStudio><MANAGEMENT><ProjectName>Mouse</ProjectName><Created>30-Sep-2008 14:13:52</Created><LastEdit>30-Sep-2008 14:14:08</LastEdit><ICON>241</ICON><ProjectType>0</ProjectType><Created>30-Sep-2008 14:13:52</Created><Version>4</Version><Build>4, 14, 0, 589</Build><ProjectTypeName>AVR GCC</ProjectTypeName></MANAGEMENT><CODE_CREATION><ObjectFile></ObjectFile><EntryFile></EntryFile><SaveFolder>C:\Users\Dean\Documents\Electronics\Projects\WORK\MyUSBWORK\Demos\Mouse\</SaveFolder></CODE_CREATION><DEBUG_TARGET><CURRENT_TARGET>JTAGICE mkII</CURRENT_TARGET><CURRENT_PART>AT90USB1287.xml</CURRENT_PART><BREAKPOINTS></BREAKPOINTS><IO_EXPAND><HIDE>false</HIDE></IO_EXPAND><REGISTERNAMES><Register>R00</Register><Register>R01</Register><Register>R02</Register><Register>R03</Register><Register>R04</Register><Register>R05</Register><Register>R06</Register><Register>R07</Register><Register>R08</Register><Register>R09</Register><Register>R10</Register><Register>R11</Register><Register>R12</Register><Register>R13</Register><Register>R14</Register><Register>R15</Register><Register>R16</Register><Register>R17</Register><Register>R18</Register><Register>R19</Register><Register>R20</Register><Register>R21</Register><Register>R22</Register><Register>R23</Register><Register>R24</Register><Register>R25</Register><Register>R26</Register><Register>R27</Register><Register>R28</Register><Register>R29</Register><Register>R30</Register><Register>R31</Register></REGISTERNAMES><COM>Auto</COM><COMType>0</COMType><WATCHNUM>0</WATCHNUM><WATCHNAMES><Pane0></Pane0><Pane1></Pane1><Pane2></Pane2><Pane3></Pane3></WATCHNAMES><BreakOnTrcaeFull>0</BreakOnTrcaeFull></DEBUG_TARGET><Debugger><Triggers></Triggers></Debugger><AVRGCCPLUGIN><FILES><SOURCEFILE>Descriptors.c</SOURCEFILE><SOURCEFILE>Mouse.c</SOURCEFILE><HEADERFILE>Descriptors.h</HEADERFILE><HEADERFILE>Mouse.h</HEADERFILE><OTHERFILE>makefile</OTHERFILE></FILES><CONFIGS><CONFIG><NAME>default</NAME><USESEXTERNALMAKEFILE>YES</USESEXTERNALMAKEFILE><EXTERNALMAKEFILE>makefile</EXTERNALMAKEFILE><PART>at90usb1287</PART><HEX>1</HEX><LIST>1</LIST><MAP>1</MAP><OUTPUTFILENAME>Mouse.elf</OUTPUTFILENAME><OUTPUTDIR>default\</OUTPUTDIR><ISDIRTY>1</ISDIRTY><OPTIONS/><INCDIRS/><LIBDIRS/><LIBS/><LINKOBJECTS/><OPTIONSFORALL>-Wall -gdwarf-2 -std=gnu99 -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums</OPTIONSFORALL><LINKEROPTIONS></LINKEROPTIONS><SEGMENTS/></CONFIG></CONFIGS><LASTCONFIG>default</LASTCONFIG><USES_WINAVR>1</USES_WINAVR><GCC_LOC>C:\WinAVR-20080512\bin\avr-gcc.exe</GCC_LOC><MAKE_LOC>C:\WinAVR-20080512\utils\bin\make.exe</MAKE_LOC></AVRGCCPLUGIN><IOView><usergroups/><sort sorted="0" column="0" ordername="0" orderaddress="0" ordergroup="0"/></IOView><Files></Files><Events><Bookmarks></Bookmarks></Events><Trace><Filters></Filters></Trace></AVRStudio>\r
diff --git a/Demos/Device/ClassDriver/Mouse/Mouse.c b/Demos/Device/ClassDriver/Mouse/Mouse.c
new file mode 100644 (file)
index 0000000..f5bd931
--- /dev/null
@@ -0,0 +1,169 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  Main source file for the Mouse demo. This file contains the main tasks of\r
+ *  the demo and is responsible for the initial application hardware configuration.\r
+ */\r
+\r
+#include "Mouse.h"\r
+\r
+/** LUFA HID Class driver interface configuration and state information. This structure is\r
+ *  passed to all HID Class driver functions, so that multiple instances of the same class\r
+ *  within a device can be differentiated from one another.\r
+ */\r
+USB_ClassInfo_HID_t Mouse_HID_Interface =\r
+       {\r
+               .InterfaceNumber         = 0,\r
+\r
+               .ReportINEndpointNumber  = MOUSE_EPNUM,\r
+               .ReportINEndpointSize    = MOUSE_EPSIZE,\r
+\r
+               .ReportINBufferSize      = sizeof(USB_MouseReport_Data_t),\r
+       };\r
+\r
+/** Main program entry point. This routine contains the overall program flow, including initial\r
+ *  setup of all components and the main program loop.\r
+ */\r
+int main(void)\r
+{      \r
+       SetupHardware();\r
+       \r
+       LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);\r
+\r
+       for (;;)\r
+       {\r
+               USB_HID_USBTask(&Mouse_HID_Interface);\r
+               USB_USBTask();\r
+       }\r
+}\r
+\r
+/** Configures the board hardware and chip peripherals for the demo's functionality. */\r
+void SetupHardware(void)\r
+{\r
+       /* Disable watchdog if enabled by bootloader/fuses */\r
+       MCUSR &= ~(1 << WDRF);\r
+       wdt_disable();\r
+\r
+       /* Disable clock division */\r
+       clock_prescale_set(clock_div_1);\r
+\r
+       /* Hardware Initialization */\r
+       Joystick_Init();\r
+       LEDs_Init();\r
+       Buttons_Init();\r
+       USB_Init();\r
+\r
+       /* Millisecond timer initialization, with output compare interrupt enabled for the idle timing */\r
+       OCR0A  = ((F_CPU / 64) / 1000);\r
+       TCCR0A = (1 << WGM01);\r
+       TCCR0B = ((1 << CS01) | (1 << CS00));\r
+       TIMSK0 = (1 << OCIE0A);\r
+}\r
+\r
+/** Event handler for the library USB Connection event. */\r
+void EVENT_USB_Connect(void)\r
+{\r
+    LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING);\r
+}\r
+\r
+/** Event handler for the library USB Disconnection event. */\r
+void EVENT_USB_Disconnect(void)\r
+{\r
+    LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);\r
+}\r
+\r
+/** Event handler for the library USB Configuration Changed event. */\r
+void EVENT_USB_ConfigurationChanged(void)\r
+{\r
+       LEDs_SetAllLEDs(LEDMASK_USB_READY);\r
+\r
+       if (!(USB_HID_ConfigureEndpoints(&Mouse_HID_Interface)))\r
+         LEDs_SetAllLEDs(LEDMASK_USB_ERROR);\r
+}\r
+\r
+/** Event handler for the library USB Unhandled Control Packet event. */\r
+void EVENT_USB_UnhandledControlPacket(void)\r
+{\r
+       USB_HID_ProcessControlPacket(&Mouse_HID_Interface);\r
+}\r
+\r
+/** ISR to keep track of each millisecond interrupt, for determining the HID class idle period remaining when set. */\r
+ISR(TIMER0_COMPA_vect, ISR_BLOCK)\r
+{\r
+       if (Mouse_HID_Interface.IdleMSRemaining)\r
+         Mouse_HID_Interface.IdleMSRemaining--;\r
+}\r
+\r
+/** HID class driver callback function for the creation of HID reports to the host.\r
+ *\r
+ *  \param HIDInterfaceInfo  Pointer to the HID class interface configuration structure being referenced\r
+ *  \param ReportData  Pointer to a buffer where the created report should be stored\r
+ *\r
+ *  \return Number of bytes written in the report (or zero if no report is to be sent\r
+ */\r
+uint16_t CALLBACK_USB_HID_CreateNextHIDReport(USB_ClassInfo_HID_t* HIDInterfaceInfo, uint8_t* ReportID, void* ReportData)\r
+{\r
+       USB_MouseReport_Data_t* MouseReport = (USB_MouseReport_Data_t*)ReportData;\r
+               \r
+       uint8_t JoyStatus_LCL    = Joystick_GetStatus();\r
+       uint8_t ButtonStatus_LCL = Buttons_GetStatus();\r
+\r
+       if (JoyStatus_LCL & JOY_UP)\r
+         MouseReport->Y = -1;\r
+       else if (JoyStatus_LCL & JOY_DOWN)\r
+         MouseReport->Y =  1;\r
+\r
+       if (JoyStatus_LCL & JOY_RIGHT)\r
+         MouseReport->X =  1;\r
+       else if (JoyStatus_LCL & JOY_LEFT)\r
+         MouseReport->X = -1;\r
+\r
+       if (JoyStatus_LCL & JOY_PRESS)\r
+         MouseReport->Button  = (1 << 0);\r
+         \r
+       if (ButtonStatus_LCL & BUTTONS_BUTTON1)\r
+         MouseReport->Button |= (1 << 1);\r
+       \r
+       return sizeof(USB_MouseReport_Data_t);\r
+}\r
+\r
+/** HID class driver callback function for the processing of HID reports from the host.\r
+ *\r
+ *  \param HIDInterfaceInfo  Pointer to the HID class interface configuration structure being referenced\r
+ *  \param ReportData  Pointer to a buffer where the created report has been stored\r
+ *  \param ReportSize  Size in bytes of the received HID report\r
+ */\r
+void CALLBACK_USB_HID_ProcessReceivedHIDReport(USB_ClassInfo_HID_t* HIDInterfaceInfo, uint8_t ReportID,\r
+                                               void* ReportData, uint16_t ReportSize)\r
+{\r
+       // Unused (but mandatory for the HID class driver) in this demo, since there are no Host->Device reports\r
+}\r
diff --git a/Demos/Device/ClassDriver/Mouse/Mouse.h b/Demos/Device/ClassDriver/Mouse/Mouse.h
new file mode 100644 (file)
index 0000000..6de20ee
--- /dev/null
@@ -0,0 +1,92 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  Header file for Mouse.c.\r
+ */\r
+\r
+#ifndef _MOUSE_H_\r
+#define _MOUSE_H_\r
+\r
+       /* Includes: */\r
+               #include <avr/io.h>\r
+               #include <avr/wdt.h>\r
+               #include <avr/interrupt.h>\r
+               #include <avr/power.h>\r
+               #include <stdbool.h>\r
+               #include <string.h>\r
+               \r
+               #include "Descriptors.h"\r
+\r
+               #include <LUFA/Version.h>\r
+               #include <LUFA/Drivers/Board/Joystick.h>\r
+               #include <LUFA/Drivers/Board/LEDs.h>\r
+               #include <LUFA/Drivers/Board/Buttons.h>\r
+               #include <LUFA/Drivers/USB/USB.h>\r
+               #include <LUFA/Drivers/USB/Class/Device/HID.h>\r
+\r
+       /* Type Defines: */\r
+               /** Type define for the mouse HID report structure, for creating and sending HID reports to the host PC.\r
+                *  This mirrors the layout described to the host in the HID report descriptor, in Descriptors.c.\r
+                */\r
+               typedef struct\r
+               {\r
+                       uint8_t Button; /**< Bit mask of the currently pressed mouse buttons */\r
+                       int8_t  X; /**< Current mouse delta X movement, as a signed 8-bit integer */\r
+                       int8_t  Y; /**< Current mouse delta Y movement, as a signed 8-bit integer */\r
+               } USB_MouseReport_Data_t;\r
+               \r
+       /* Macros: */\r
+               /** LED mask for the library LED driver, to indicate that the USB interface is not ready. */\r
+               #define LEDMASK_USB_NOTREADY      LEDS_LED1\r
+\r
+               /** LED mask for the library LED driver, to indicate that the USB interface is enumerating. */\r
+               #define LEDMASK_USB_ENUMERATING  (LEDS_LED2 | LEDS_LED3)\r
+\r
+               /** LED mask for the library LED driver, to indicate that the USB interface is ready. */\r
+               #define LEDMASK_USB_READY        (LEDS_LED2 | LEDS_LED4)\r
+\r
+               /** LED mask for the library LED driver, to indicate that an error has occurred in the USB interface. */\r
+               #define LEDMASK_USB_ERROR        (LEDS_LED1 | LEDS_LED3)\r
+                       \r
+       /* Function Prototypes: */\r
+               void SetupHardware(void);\r
+\r
+               void EVENT_USB_Connect(void);\r
+               void EVENT_USB_Disconnect(void);\r
+               void EVENT_USB_ConfigurationChanged(void);\r
+               void EVENT_USB_UnhandledControlPacket(void);\r
+\r
+               uint16_t CALLBACK_USB_HID_CreateNextHIDReport(USB_ClassInfo_HID_t* HIDInterfaceInfo, uint8_t* ReportID, void* ReportData);\r
+               void     CALLBACK_USB_HID_ProcessReceivedHIDReport(USB_ClassInfo_HID_t* HIDInterfaceInfo, uint8_t ReportID, \r
+                                                                  void* ReportData, uint16_t ReportSize);\r
+\r
+#endif\r
diff --git a/Demos/Device/ClassDriver/Mouse/Mouse.txt b/Demos/Device/ClassDriver/Mouse/Mouse.txt
new file mode 100644 (file)
index 0000000..07982a7
--- /dev/null
@@ -0,0 +1,61 @@
+/** \file\r
+ *\r
+ *  This file contains special DoxyGen information for the generation of the main page and other special\r
+ *  documentation pages. It is not a project source file.\r
+ */\r
\r
+/** \mainpage Mouse Device Demo\r
+ *\r
+ *  \section SSec_Info USB Information:\r
+ *\r
+ *  The following table gives a rundown of the USB utilization of this demo.\r
+ *\r
+ *  <table>\r
+ *   <tr>\r
+ *    <td><b>USB Mode:</b></td>\r
+ *    <td>Device</td>\r
+ *   </tr>\r
+ *   <tr>\r
+ *    <td><b>USB Class:</b></td>\r
+ *    <td>Human Interface Device (HID)</td>\r
+ *   </tr>\r
+ *   <tr> \r
+ *    <td><b>USB Subclass:</b></td>\r
+ *    <td>N/A</td>\r
+ *   </tr>\r
+ *   <tr>\r
+ *    <td><b>Relevant Standards:</b></td>\r
+ *    <td>USBIF HID Specification, USBIF HID Usage Tables</td>\r
+ *   </tr>\r
+ *   <tr>\r
+ *    <td><b>Usable Speeds:</b></td>\r
+ *    <td>Low Speed Mode, Full Speed Mode</td>\r
+ *   </tr>\r
+ *  </table>\r
+ *\r
+ *  \section SSec_Description Project Description: \r
+ *\r
+ *  Mouse demonstration application. This gives a simple reference\r
+ *  application for implementing a USB Mouse using the basic USB HID\r
+ *  drivers in all modern OSes (i.e. no special drivers required). It is\r
+ *  boot protocol compatible, and thus works under compatible BIOS as if\r
+ *  it was a native mouse (e.g. PS/2).\r
+ *  \r
+ *  On start-up the system will automatically enumerate and function\r
+ *  as a mouse when the USB connection to a host is present. To use\r
+ *  the mouse, move the joystick to move the pointer, and push the\r
+ *  joystick inwards to simulate a left-button click. The HWB serves as\r
+ *  the right mouse button.\r
+ *\r
+ *  \section SSec_Options Project Options\r
+ *\r
+ *  The following defines can be found in this demo, which can control the demo behaviour when defined, or changed in value.\r
+ *\r
+ *  <table>\r
+ *   <tr>\r
+ *    <td>\r
+ *     None\r
+ *    </td>\r
+ *   </tr>\r
+ *  </table>\r
+ */\r
diff --git a/Demos/Device/ClassDriver/Mouse/makefile b/Demos/Device/ClassDriver/Mouse/makefile
new file mode 100644 (file)
index 0000000..4c18f9d
--- /dev/null
@@ -0,0 +1,732 @@
+# Hey Emacs, this is a -*- makefile -*-\r
+#----------------------------------------------------------------------------\r
+# WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al.\r
+#  >> Modified for use with the LUFA project. <<\r
+#\r
+# Released to the Public Domain\r
+#\r
+# Additional material for this makefile was written by:\r
+# Peter Fleury\r
+# Tim Henigan\r
+# Colin O'Flynn\r
+# Reiner Patommel\r
+# Markus Pfaff\r
+# Sander Pool\r
+# Frederik Rouleau\r
+# Carlos Lamas\r
+# Dean Camera\r
+# Opendous Inc.\r
+# Denver Gingerich\r
+#\r
+#----------------------------------------------------------------------------\r
+# On command line:\r
+#\r
+# make all = Make software.\r
+#\r
+# make clean = Clean out built project files.\r
+#\r
+# make coff = Convert ELF to AVR COFF.\r
+#\r
+# make extcoff = Convert ELF to AVR Extended COFF.\r
+#\r
+# make program = Download the hex file to the device, using avrdude.\r
+#                Please customize the avrdude settings below first!\r
+#\r
+# make dfu = Download the hex file to the device, using dfu-programmer (must\r
+#            have dfu-programmer installed).\r
+#\r
+# make flip = Download the hex file to the device, using Atmel FLIP (must\r
+#             have Atmel FLIP installed).\r
+#\r
+# make dfu-ee = Download the eeprom file to the device, using dfu-programmer\r
+#               (must have dfu-programmer installed).\r
+#\r
+# make flip-ee = Download the eeprom file to the device, using Atmel FLIP\r
+#                (must have Atmel FLIP installed).\r
+#\r
+# make doxygen = Generate DoxyGen documentation for the project (must have\r
+#                DoxyGen installed)\r
+#\r
+# make debug = Start either simulavr or avarice as specified for debugging, \r
+#              with avr-gdb or avr-insight as the front end for debugging.\r
+#\r
+# make filename.s = Just compile filename.c into the assembler code only.\r
+#\r
+# make filename.i = Create a preprocessed source file for use in submitting\r
+#                   bug reports to the GCC project.\r
+#\r
+# To rebuild project do "make clean" then "make all".\r
+#----------------------------------------------------------------------------\r
+\r
+\r
+# MCU name\r
+MCU = at90usb1287\r
+\r
+\r
+# Target board (see library "Board Types" documentation, USER or blank for projects not requiring\r
+# LUFA board drivers). If USER is selected, put custom board drivers in a directory called \r
+# "Board" inside the application directory.\r
+BOARD  = USBKEY\r
+\r
+\r
+# Processor frequency.\r
+#     This will define a symbol, F_CPU, in all source code files equal to the \r
+#     processor frequency. You can then use this symbol in your source code to \r
+#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done\r
+#     automatically to create a 32-bit value in your source code.\r
+#     Typical values are:\r
+#         F_CPU =  1000000\r
+#         F_CPU =  1843200\r
+#         F_CPU =  2000000\r
+#         F_CPU =  3686400\r
+#         F_CPU =  4000000\r
+#         F_CPU =  7372800\r
+#         F_CPU =  8000000\r
+#         F_CPU = 11059200\r
+#         F_CPU = 14745600\r
+#         F_CPU = 16000000\r
+#         F_CPU = 18432000\r
+#         F_CPU = 20000000\r
+F_CPU = 8000000\r
+\r
+\r
+# Input clock frequency.\r
+#     This will define a symbol, F_CLOCK, in all source code files equal to the \r
+#     input clock frequency (before any prescaling is performed). This value may\r
+#     differ from F_CPU if prescaling is used on the latter, and is required as the\r
+#     raw input clock is fed directly to the PLL sections of the AVR for high speed\r
+#     clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'\r
+#     at the end, this will be done automatically to create a 32-bit value in your\r
+#     source code.\r
+#\r
+#     If no clock division is performed on the input clock inside the AVR (via the\r
+#     CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.\r
+F_CLOCK = 8000000\r
+\r
+\r
+# Output format. (can be srec, ihex, binary)\r
+FORMAT = ihex\r
+\r
+\r
+# Target file name (without extension).\r
+TARGET = Mouse\r
+\r
+\r
+# Object files directory\r
+#     To put object files in current directory, use a dot (.), do NOT make\r
+#     this an empty or blank macro!\r
+OBJDIR = .\r
+\r
+\r
+# Path to the LUFA library\r
+LUFA_PATH = ../../..\r
+\r
+\r
+# List C source files here. (C dependencies are automatically generated.)\r
+SRC = $(TARGET).c                                                 \\r
+         Descriptors.c                                               \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/DevChapter9.c        \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Endpoint.c           \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Host.c               \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/HostChapter9.c       \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/LowLevel.c           \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Pipe.c               \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/Events.c            \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBInterrupt.c      \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBTask.c           \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/ConfigDescriptor.c  \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/Class/Device/HID.c            \\r
\r
+# List C++ source files here. (C dependencies are automatically generated.)\r
+CPPSRC = \r
+\r
+\r
+# List Assembler source files here.\r
+#     Make them always end in a capital .S.  Files ending in a lowercase .s\r
+#     will not be considered source files but generated files (assembler\r
+#     output from the compiler), and will be deleted upon "make clean"!\r
+#     Even though the DOS/Win* filesystem matches both .s and .S the same,\r
+#     it will preserve the spelling of the filenames, and gcc itself does\r
+#     care about how the name is spelled on its command-line.\r
+ASRC =\r
+\r
+\r
+# Optimization level, can be [0, 1, 2, 3, s]. \r
+#     0 = turn off optimization. s = optimize for size.\r
+#     (Note: 3 is not always the best optimization level. See avr-libc FAQ.)\r
+OPT = s\r
+\r
+\r
+# Debugging format.\r
+#     Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs.\r
+#     AVR Studio 4.10 requires dwarf-2.\r
+#     AVR [Extended] COFF format requires stabs, plus an avr-objcopy run.\r
+DEBUG = dwarf-2\r
+\r
+\r
+# List any extra directories to look for include files here.\r
+#     Each directory must be seperated by a space.\r
+#     Use forward slashes for directory separators.\r
+#     For a directory that has spaces, enclose it in quotes.\r
+EXTRAINCDIRS = $(LUFA_PATH)/\r
+\r
+\r
+# Compiler flag to set the C Standard level.\r
+#     c89   = "ANSI" C\r
+#     gnu89 = c89 plus GCC extensions\r
+#     c99   = ISO C99 standard (not yet fully implemented)\r
+#     gnu99 = c99 plus GCC extensions\r
+CSTANDARD = -std=gnu99\r
+\r
+\r
+# Place -D or -U options here for C sources\r
+CDEFS  = -DF_CPU=$(F_CPU)UL -DF_CLOCK=$(F_CLOCK)UL -DBOARD=BOARD_$(BOARD)\r
+CDEFS += -DUSE_NONSTANDARD_DESCRIPTOR_NAMES -DUSB_DEVICE_ONLY\r
+CDEFS += -DFIXED_CONTROL_ENDPOINT_SIZE=8 -DUSE_SINGLE_DEVICE_CONFIGURATION\r
+CDEFS += -DUSE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)"\r
+\r
+# Place -D or -U options here for ASM sources\r
+ADEFS = -DF_CPU=$(F_CPU)\r
+\r
+\r
+# Place -D or -U options here for C++ sources\r
+CPPDEFS = -DF_CPU=$(F_CPU)UL\r
+#CPPDEFS += -D__STDC_LIMIT_MACROS\r
+#CPPDEFS += -D__STDC_CONSTANT_MACROS\r
+\r
+\r
+\r
+#---------------- Compiler Options C ----------------\r
+#  -g*:          generate debugging information\r
+#  -O*:          optimization level\r
+#  -f...:        tuning, see GCC manual and avr-libc documentation\r
+#  -Wall...:     warning level\r
+#  -Wa,...:      tell GCC to pass this to the assembler.\r
+#    -adhlns...: create assembler listing\r
+CFLAGS = -g$(DEBUG)\r
+CFLAGS += $(CDEFS)\r
+CFLAGS += -O$(OPT)\r
+CFLAGS += -funsigned-char\r
+CFLAGS += -funsigned-bitfields\r
+CFLAGS += -ffunction-sections\r
+CFLAGS += -fpack-struct\r
+CFLAGS += -fshort-enums\r
+CFLAGS += -finline-limit=20\r
+CFLAGS += -Wall\r
+CFLAGS += -Wstrict-prototypes\r
+#CFLAGS += -mshort-calls\r
+CFLAGS += -Wundef\r
+#CFLAGS += -fno-unit-at-a-time\r
+#CFLAGS += -Wunreachable-code\r
+#CFLAGS += -Wsign-compare\r
+CFLAGS += -Wa,-adhlns=$(<:%.c=$(OBJDIR)/%.lst)\r
+CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))\r
+CFLAGS += $(CSTANDARD)\r
+\r
+\r
+#---------------- Compiler Options C++ ----------------\r
+#  -g*:          generate debugging information\r
+#  -O*:          optimization level\r
+#  -f...:        tuning, see GCC manual and avr-libc documentation\r
+#  -Wall...:     warning level\r
+#  -Wa,...:      tell GCC to pass this to the assembler.\r
+#    -adhlns...: create assembler listing\r
+CPPFLAGS = -g$(DEBUG)\r
+CPPFLAGS += $(CPPDEFS)\r
+CPPFLAGS += -O$(OPT)\r
+CPPFLAGS += -funsigned-char\r
+CPPFLAGS += -funsigned-bitfields\r
+CPPFLAGS += -fpack-struct\r
+CPPFLAGS += -fshort-enums\r
+CPPFLAGS += -fno-exceptions\r
+CPPFLAGS += -Wall\r
+CFLAGS += -Wundef\r
+#CPPFLAGS += -mshort-calls\r
+#CPPFLAGS += -fno-unit-at-a-time\r
+#CPPFLAGS += -Wstrict-prototypes\r
+#CPPFLAGS += -Wunreachable-code\r
+#CPPFLAGS += -Wsign-compare\r
+CPPFLAGS += -Wa,-adhlns=$(<:%.cpp=$(OBJDIR)/%.lst)\r
+CPPFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))\r
+#CPPFLAGS += $(CSTANDARD)\r
+\r
+\r
+#---------------- Assembler Options ----------------\r
+#  -Wa,...:   tell GCC to pass this to the assembler.\r
+#  -adhlns:   create listing\r
+#  -gstabs:   have the assembler create line number information; note that\r
+#             for use in COFF files, additional information about filenames\r
+#             and function names needs to be present in the assembler source\r
+#             files -- see avr-libc docs [FIXME: not yet described there]\r
+#  -listing-cont-lines: Sets the maximum number of continuation lines of hex \r
+#       dump that will be displayed for a given single line of source input.\r
+ASFLAGS = $(ADEFS) -Wa,-adhlns=$(<:%.S=$(OBJDIR)/%.lst),-gstabs,--listing-cont-lines=100\r
+\r
+\r
+#---------------- Library Options ----------------\r
+# Minimalistic printf version\r
+PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min\r
+\r
+# Floating point printf version (requires MATH_LIB = -lm below)\r
+PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt\r
+\r
+# If this is left blank, then it will use the Standard printf version.\r
+PRINTF_LIB = \r
+#PRINTF_LIB = $(PRINTF_LIB_MIN)\r
+#PRINTF_LIB = $(PRINTF_LIB_FLOAT)\r
+\r
+\r
+# Minimalistic scanf version\r
+SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min\r
+\r
+# Floating point + %[ scanf version (requires MATH_LIB = -lm below)\r
+SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt\r
+\r
+# If this is left blank, then it will use the Standard scanf version.\r
+SCANF_LIB = \r
+#SCANF_LIB = $(SCANF_LIB_MIN)\r
+#SCANF_LIB = $(SCANF_LIB_FLOAT)\r
+\r
+\r
+MATH_LIB = -lm\r
+\r
+\r
+# List any extra directories to look for libraries here.\r
+#     Each directory must be seperated by a space.\r
+#     Use forward slashes for directory separators.\r
+#     For a directory that has spaces, enclose it in quotes.\r
+EXTRALIBDIRS = \r
+\r
+\r
+\r
+#---------------- External Memory Options ----------------\r
+\r
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),\r
+# used for variables (.data/.bss) and heap (malloc()).\r
+#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff\r
+\r
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),\r
+# only used for heap (malloc()).\r
+#EXTMEMOPTS = -Wl,--section-start,.data=0x801100,--defsym=__heap_end=0x80ffff\r
+\r
+EXTMEMOPTS =\r
+\r
+\r
+\r
+#---------------- Linker Options ----------------\r
+#  -Wl,...:     tell GCC to pass this to linker.\r
+#    -Map:      create map file\r
+#    --cref:    add cross reference to  map file\r
+LDFLAGS = -Wl,-Map=$(TARGET).map,--cref\r
+LDFLAGS += -Wl,--relax \r
+LDFLAGS += -Wl,--gc-sections\r
+LDFLAGS += $(EXTMEMOPTS)\r
+LDFLAGS += $(patsubst %,-L%,$(EXTRALIBDIRS))\r
+LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)\r
+#LDFLAGS += -T linker_script.x\r
+\r
+\r
+\r
+#---------------- Programming Options (avrdude) ----------------\r
+\r
+# Programming hardware: alf avr910 avrisp bascom bsd \r
+# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500\r
+#\r
+# Type: avrdude -c ?\r
+# to get a full listing.\r
+#\r
+AVRDUDE_PROGRAMMER = jtagmkII\r
+\r
+# com1 = serial port. Use lpt1 to connect to parallel port.\r
+AVRDUDE_PORT = usb\r
+\r
+AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex\r
+#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep\r
+\r
+\r
+# Uncomment the following if you want avrdude's erase cycle counter.\r
+# Note that this counter needs to be initialized first using -Yn,\r
+# see avrdude manual.\r
+#AVRDUDE_ERASE_COUNTER = -y\r
+\r
+# Uncomment the following if you do /not/ wish a verification to be\r
+# performed after programming the device.\r
+#AVRDUDE_NO_VERIFY = -V\r
+\r
+# Increase verbosity level.  Please use this when submitting bug\r
+# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude> \r
+# to submit bug reports.\r
+#AVRDUDE_VERBOSE = -v -v\r
+\r
+AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)\r
+AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY)\r
+AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE)\r
+AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER)\r
+\r
+\r
+\r
+#---------------- Debugging Options ----------------\r
+\r
+# For simulavr only - target MCU frequency.\r
+DEBUG_MFREQ = $(F_CPU)\r
+\r
+# Set the DEBUG_UI to either gdb or insight.\r
+# DEBUG_UI = gdb\r
+DEBUG_UI = insight\r
+\r
+# Set the debugging back-end to either avarice, simulavr.\r
+DEBUG_BACKEND = avarice\r
+#DEBUG_BACKEND = simulavr\r
+\r
+# GDB Init Filename.\r
+GDBINIT_FILE = __avr_gdbinit\r
+\r
+# When using avarice settings for the JTAG\r
+JTAG_DEV = /dev/com1\r
+\r
+# Debugging port used to communicate between GDB / avarice / simulavr.\r
+DEBUG_PORT = 4242\r
+\r
+# Debugging host used to communicate between GDB / avarice / simulavr, normally\r
+#     just set to localhost unless doing some sort of crazy debugging when \r
+#     avarice is running on a different computer.\r
+DEBUG_HOST = localhost\r
+\r
+\r
+\r
+#============================================================================\r
+\r
+\r
+# Define programs and commands.\r
+SHELL = sh\r
+CC = avr-gcc\r
+OBJCOPY = avr-objcopy\r
+OBJDUMP = avr-objdump\r
+SIZE = avr-size\r
+AR = avr-ar rcs\r
+NM = avr-nm\r
+AVRDUDE = avrdude\r
+REMOVE = rm -f\r
+REMOVEDIR = rm -rf\r
+COPY = cp\r
+WINSHELL = cmd\r
+\r
+# Define Messages\r
+# English\r
+MSG_ERRORS_NONE = Errors: none\r
+MSG_BEGIN = -------- begin --------\r
+MSG_END = --------  end  --------\r
+MSG_SIZE_BEFORE = Size before: \r
+MSG_SIZE_AFTER = Size after:\r
+MSG_COFF = Converting to AVR COFF:\r
+MSG_EXTENDED_COFF = Converting to AVR Extended COFF:\r
+MSG_FLASH = Creating load file for Flash:\r
+MSG_EEPROM = Creating load file for EEPROM:\r
+MSG_EXTENDED_LISTING = Creating Extended Listing:\r
+MSG_SYMBOL_TABLE = Creating Symbol Table:\r
+MSG_LINKING = Linking:\r
+MSG_COMPILING = Compiling C:\r
+MSG_COMPILING_CPP = Compiling C++:\r
+MSG_ASSEMBLING = Assembling:\r
+MSG_CLEANING = Cleaning project:\r
+MSG_CREATING_LIBRARY = Creating library:\r
+\r
+\r
+\r
+\r
+# Define all object files.\r
+OBJ = $(SRC:%.c=$(OBJDIR)/%.o) $(CPPSRC:%.cpp=$(OBJDIR)/%.o) $(ASRC:%.S=$(OBJDIR)/%.o) \r
+\r
+# Define all listing files.\r
+LST = $(SRC:%.c=$(OBJDIR)/%.lst) $(CPPSRC:%.cpp=$(OBJDIR)/%.lst) $(ASRC:%.S=$(OBJDIR)/%.lst) \r
+\r
+\r
+# Compiler flags to generate dependency files.\r
+GENDEPFLAGS = -MMD -MP -MF .dep/$(@F).d\r
+\r
+\r
+# Combine all necessary flags and optional flags.\r
+# Add target processor to flags.\r
+ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS)\r
+ALL_CPPFLAGS = -mmcu=$(MCU) -I. -x c++ $(CPPFLAGS) $(GENDEPFLAGS)\r
+ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)\r
+\r
+\r
+\r
+\r
+\r
+# Default target.\r
+all: begin gccversion sizebefore build checkhooks checklibmode checkboard sizeafter end\r
+\r
+# Change the build target to build a HEX file or a library.\r
+build: elf hex eep lss sym\r
+#build: lib\r
+\r
+\r
+elf: $(TARGET).elf\r
+hex: $(TARGET).hex\r
+eep: $(TARGET).eep\r
+lss: $(TARGET).lss\r
+sym: $(TARGET).sym\r
+LIBNAME=lib$(TARGET).a\r
+lib: $(LIBNAME)\r
+\r
+\r
+\r
+# Eye candy.\r
+# AVR Studio 3.x does not check make's exit code but relies on\r
+# the following magic strings to be generated by the compile job.\r
+begin:\r
+       @echo\r
+       @echo $(MSG_BEGIN)\r
+\r
+end:\r
+       @echo $(MSG_END)\r
+       @echo\r
+\r
+\r
+# Display size of file.\r
+HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex\r
+ELFSIZE = $(SIZE) $(MCU_FLAG) $(FORMAT_FLAG) $(TARGET).elf\r
+MCU_FLAG = $(shell $(SIZE) --help | grep -- --mcu > /dev/null && echo --mcu=$(MCU) )\r
+FORMAT_FLAG = $(shell $(SIZE) --help | grep -- --format=.*avr > /dev/null && echo --format=avr )\r
+\r
+sizebefore:\r
+       @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \\r
+       2>/dev/null; echo; fi\r
+\r
+sizeafter:\r
+       @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \\r
+       2>/dev/null; echo; fi\r
+\r
+checkhooks: build\r
+       @echo\r
+       @echo ------- Unhooked LUFA Events -------\r
+       @$(shell) (grep -s '^EVENT_.*LUFA/.*\\.o' $(TARGET).map | \\r
+                  cut -d' ' -f1 | cut -d'_' -f2- | grep ".*") || \\r
+                          echo "(None)"\r
+       @echo ------------------------------------\r
+\r
+checklibmode:\r
+       @echo\r
+       @echo ----------- Library Mode -----------\r
+       @$(shell) ($(CC) $(ALL_CFLAGS) -E -dM - < /dev/null \\r
+                 | grep 'USB_\(DEVICE\|HOST\)_ONLY' | cut -d' ' -f2 | grep ".*") \\r
+                 || echo "No specific mode (both device and host mode allowable)."\r
+       @echo ------------------------------------\r
+\r
+checkboard:\r
+       @echo\r
+       @echo ---------- Selected Board ----------\r
+       @echo Selected board model is $(BOARD).\r
+       @echo ------------------------------------\r
+       \r
+# Display compiler version information.\r
+gccversion : \r
+       @$(CC) --version\r
+\r
+\r
+\r
+# Program the device.  \r
+program: $(TARGET).hex $(TARGET).eep\r
+       $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)\r
+\r
+flip: $(TARGET).hex\r
+       batchisp -hardware usb -device $(MCU) -operation erase f\r
+       batchisp -hardware usb -device $(MCU) -operation loadbuffer $(TARGET).hex program\r
+       batchisp -hardware usb -device $(MCU) -operation start reset 0\r
+\r
+dfu: $(TARGET).hex\r
+       dfu-programmer $(MCU) erase\r
+       dfu-programmer $(MCU) flash --debug 1 $(TARGET).hex\r
+       dfu-programmer $(MCU) reset\r
+\r
+flip-ee: $(TARGET).hex $(TARGET).eep\r
+       copy $(TARGET).eep $(TARGET)eep.hex\r
+       batchisp -hardware usb -device $(MCU) -operation memory EEPROM erase\r
+       batchisp -hardware usb -device $(MCU) -operation memory EEPROM loadbuffer $(TARGET)eep.hex program\r
+       batchisp -hardware usb -device $(MCU) -operation start reset 0\r
+\r
+dfu-ee: $(TARGET).hex $(TARGET).eep\r
+       dfu-programmer $(MCU) flash-eeprom --debug 1 --suppress-bootloader-mem $(TARGET).eep\r
+       dfu-programmer $(MCU) reset\r
+\r
+\r
+# Generate avr-gdb config/init file which does the following:\r
+#     define the reset signal, load the target file, connect to target, and set \r
+#     a breakpoint at main().\r
+gdb-config: \r
+       @$(REMOVE) $(GDBINIT_FILE)\r
+       @echo define reset >> $(GDBINIT_FILE)\r
+       @echo SIGNAL SIGHUP >> $(GDBINIT_FILE)\r
+       @echo end >> $(GDBINIT_FILE)\r
+       @echo file $(TARGET).elf >> $(GDBINIT_FILE)\r
+       @echo target remote $(DEBUG_HOST):$(DEBUG_PORT)  >> $(GDBINIT_FILE)\r
+ifeq ($(DEBUG_BACKEND),simulavr)\r
+       @echo load  >> $(GDBINIT_FILE)\r
+endif\r
+       @echo break main >> $(GDBINIT_FILE)\r
+\r
+debug: gdb-config $(TARGET).elf\r
+ifeq ($(DEBUG_BACKEND), avarice)\r
+       @echo Starting AVaRICE - Press enter when "waiting to connect" message displays.\r
+       @$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \\r
+       $(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT)\r
+       @$(WINSHELL) /c pause\r
+\r
+else\r
+       @$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \\r
+       $(DEBUG_MFREQ) --port $(DEBUG_PORT)\r
+endif\r
+       @$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE)\r
+\r
+\r
+\r
+\r
+# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.\r
+COFFCONVERT = $(OBJCOPY) --debugging\r
+COFFCONVERT += --change-section-address .data-0x800000\r
+COFFCONVERT += --change-section-address .bss-0x800000\r
+COFFCONVERT += --change-section-address .noinit-0x800000\r
+COFFCONVERT += --change-section-address .eeprom-0x810000\r
+\r
+\r
+\r
+coff: $(TARGET).elf\r
+       @echo\r
+       @echo $(MSG_COFF) $(TARGET).cof\r
+       $(COFFCONVERT) -O coff-avr $< $(TARGET).cof\r
+\r
+\r
+extcoff: $(TARGET).elf\r
+       @echo\r
+       @echo $(MSG_EXTENDED_COFF) $(TARGET).cof\r
+       $(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof\r
+\r
+\r
+\r
+# Create final output files (.hex, .eep) from ELF output file.\r
+%.hex: %.elf\r
+       @echo\r
+       @echo $(MSG_FLASH) $@\r
+       $(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@\r
+\r
+%.eep: %.elf\r
+       @echo\r
+       @echo $(MSG_EEPROM) $@\r
+       -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \\r
+       --change-section-lma .eeprom=0 --no-change-warnings -O $(FORMAT) $< $@ || exit 0\r
+\r
+# Create extended listing file from ELF output file.\r
+%.lss: %.elf\r
+       @echo\r
+       @echo $(MSG_EXTENDED_LISTING) $@\r
+       $(OBJDUMP) -h -z -S $< > $@\r
+\r
+# Create a symbol table from ELF output file.\r
+%.sym: %.elf\r
+       @echo\r
+       @echo $(MSG_SYMBOL_TABLE) $@\r
+       $(NM) -n $< > $@\r
+\r
+\r
+\r
+# Create library from object files.\r
+.SECONDARY : $(TARGET).a\r
+.PRECIOUS : $(OBJ)\r
+%.a: $(OBJ)\r
+       @echo\r
+       @echo $(MSG_CREATING_LIBRARY) $@\r
+       $(AR) $@ $(OBJ)\r
+\r
+\r
+# Link: create ELF output file from object files.\r
+.SECONDARY : $(TARGET).elf\r
+.PRECIOUS : $(OBJ)\r
+%.elf: $(OBJ)\r
+       @echo\r
+       @echo $(MSG_LINKING) $@\r
+       $(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)\r
+\r
+\r
+# Compile: create object files from C source files.\r
+$(OBJDIR)/%.o : %.c\r
+       @echo\r
+       @echo $(MSG_COMPILING) $<\r
+       $(CC) -c $(ALL_CFLAGS) $< -o $@ \r
+\r
+\r
+# Compile: create object files from C++ source files.\r
+$(OBJDIR)/%.o : %.cpp\r
+       @echo\r
+       @echo $(MSG_COMPILING_CPP) $<\r
+       $(CC) -c $(ALL_CPPFLAGS) $< -o $@ \r
+\r
+\r
+# Compile: create assembler files from C source files.\r
+%.s : %.c\r
+       $(CC) -S $(ALL_CFLAGS) $< -o $@\r
+\r
+\r
+# Compile: create assembler files from C++ source files.\r
+%.s : %.cpp\r
+       $(CC) -S $(ALL_CPPFLAGS) $< -o $@\r
+\r
+\r
+# Assemble: create object files from assembler source files.\r
+$(OBJDIR)/%.o : %.S\r
+       @echo\r
+       @echo $(MSG_ASSEMBLING) $<\r
+       $(CC) -c $(ALL_ASFLAGS) $< -o $@\r
+\r
+\r
+# Create preprocessed source for use in sending a bug report.\r
+%.i : %.c\r
+       $(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ \r
+       \r
+\r
+# Target: clean project.\r
+clean: begin clean_list clean_binary end\r
+\r
+clean_binary:\r
+       $(REMOVE) $(TARGET).hex\r
+       \r
+clean_list:\r
+       @echo $(MSG_CLEANING)\r
+       $(REMOVE) $(TARGET).eep\r
+       $(REMOVE) $(TARGET)eep.hex\r
+       $(REMOVE) $(TARGET).cof\r
+       $(REMOVE) $(TARGET).elf\r
+       $(REMOVE) $(TARGET).map\r
+       $(REMOVE) $(TARGET).sym\r
+       $(REMOVE) $(TARGET).lss\r
+       $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.o)\r
+       $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.lst)\r
+       $(REMOVE) $(SRC:.c=.s)\r
+       $(REMOVE) $(SRC:.c=.d)\r
+       $(REMOVE) $(SRC:.c=.i)\r
+       $(REMOVEDIR) .dep\r
+\r
+\r
+doxygen:\r
+       @echo Generating Project Documentation...\r
+       @doxygen Doxygen.conf\r
+       @echo Documentation Generation Complete.\r
+\r
+clean_doxygen:\r
+       rm -rf Documentation\r
+\r
+# Create object files directory\r
+$(shell mkdir $(OBJDIR) 2>/dev/null)\r
+\r
+\r
+# Include the dependency files.\r
+-include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)\r
+\r
+\r
+# Listing of phony targets.\r
+.PHONY : all checkhooks checklibmode checkboard   \\r
+begin finish end sizebefore sizeafter gccversion  \\r
+build elf hex eep lss sym coff extcoff clean      \\r
+clean_list clean_binary program debug gdb-config  \\r
+doxygen dfu flip flip-ee dfu-ee
\ No newline at end of file
diff --git a/Demos/Device/ClassDriver/RNDISEthernet/Descriptors.c b/Demos/Device/ClassDriver/RNDISEthernet/Descriptors.c
new file mode 100644 (file)
index 0000000..1be5bfd
--- /dev/null
@@ -0,0 +1,263 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  USB Device Descriptors, for library use when in USB device mode. Descriptors are special \r
+ *  computer-readable structures which the host requests upon device enumeration, to determine\r
+ *  the device's capabilities and functions.  \r
+ */\r
\r
+#include "Descriptors.h"\r
+\r
+/** Device descriptor structure. This descriptor, located in FLASH memory, describes the overall\r
+ *  device characteristics, including the supported USB version, control endpoint size and the\r
+ *  number of device configurations. The descriptor is read out by the USB host when the enumeration\r
+ *  process begins.\r
+ */\r
+USB_Descriptor_Device_t PROGMEM DeviceDescriptor =\r
+{\r
+       .Header                 = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device},\r
+               \r
+       .USBSpecification       = VERSION_BCD(01.10),\r
+       .Class                  = 0x02,\r
+       .SubClass               = 0x00,\r
+       .Protocol               = 0x00,\r
+                               \r
+       .Endpoint0Size          = FIXED_CONTROL_ENDPOINT_SIZE,\r
+               \r
+       .VendorID               = 0x03EB,\r
+       .ProductID              = 0x204C,\r
+       .ReleaseNumber          = 0x0000,\r
+               \r
+       .ManufacturerStrIndex   = 0x01,\r
+       .ProductStrIndex        = 0x02,\r
+       .SerialNumStrIndex      = NO_DESCRIPTOR,\r
+               \r
+       .NumberOfConfigurations = 1\r
+};\r
+\r
+/** Configuration descriptor structure. This descriptor, located in FLASH memory, describes the usage\r
+ *  of the device in one of its supported configurations, including information about any device interfaces\r
+ *  and endpoints. The descriptor is read out by the USB host during the enumeration process when selecting\r
+ *  a configuration so that the host may correctly communicate with the USB device.\r
+ */\r
+USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =\r
+{\r
+       .Config = \r
+               {\r
+                       .Header                 = {.Size = sizeof(USB_Descriptor_Configuration_Header_t), .Type = DTYPE_Configuration},\r
+\r
+                       .TotalConfigurationSize = sizeof(USB_Descriptor_Configuration_t),\r
+                       .TotalInterfaces        = 2,\r
+                               \r
+                       .ConfigurationNumber    = 1,\r
+                       .ConfigurationStrIndex  = NO_DESCRIPTOR,\r
+                               \r
+                       .ConfigAttributes       = (USB_CONFIG_ATTR_BUSPOWERED | USB_CONFIG_ATTR_SELFPOWERED),\r
+                       \r
+                       .MaxPowerConsumption    = USB_CONFIG_POWER_MA(100)\r
+               },\r
+               \r
+       .CCI_Interface = \r
+               {\r
+                       .Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},\r
+\r
+                       .InterfaceNumber        = 0,\r
+                       .AlternateSetting       = 0,\r
+                       \r
+                       .TotalEndpoints         = 1,\r
+                               \r
+                       .Class                  = 0x02,\r
+                       .SubClass               = 0x02,\r
+                       .Protocol               = 0xFF,\r
+                               \r
+                       .InterfaceStrIndex      = NO_DESCRIPTOR\r
+               },\r
+\r
+       .CDC_Functional_Header = \r
+               {\r
+                       .Header                 = {.Size = sizeof(CDC_FUNCTIONAL_DESCRIPTOR(2)), .Type = 0x24},\r
+                       .SubType                = 0x00,\r
+                       \r
+                       .Data                   = {0x01, 0x10}\r
+               },\r
+               \r
+       .CDC_Functional_CallManagement= \r
+               {\r
+                       .Header                 = {.Size = sizeof(CDC_FUNCTIONAL_DESCRIPTOR(2)), .Type = 0x24},\r
+                       .SubType                = 0x01,\r
+                       \r
+                       .Data                   = {0x00, 0x00}\r
+               },\r
+               \r
+       .CDC_Functional_AbstractControlManagement = \r
+               {\r
+                       .Header                 = {.Size = sizeof(CDC_FUNCTIONAL_DESCRIPTOR(1)), .Type = 0x24},\r
+                       .SubType                = 0x02,\r
+                       \r
+                       .Data                   = {0x00}\r
+               },\r
+       \r
+       .CDC_Functional_Union = \r
+               {\r
+                       .Header                 = {.Size = sizeof(CDC_FUNCTIONAL_DESCRIPTOR(2)), .Type = 0x24},\r
+                       .SubType                = 0x06,\r
+                       \r
+                       .Data                   = {0x00, 0x01}\r
+               },\r
+\r
+       .ManagementEndpoint = \r
+               {\r
+                       .Header                 = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},\r
+                                                                                \r
+                       .EndpointAddress        = (ENDPOINT_DESCRIPTOR_DIR_IN | CDC_NOTIFICATION_EPNUM),\r
+                       .Attributes             = EP_TYPE_INTERRUPT,\r
+                       .EndpointSize           = CDC_NOTIFICATION_EPSIZE,\r
+                       .PollingIntervalMS      = 0x02\r
+               },\r
+\r
+       .DCI_Interface = \r
+               {\r
+                       .Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},\r
+\r
+                       .InterfaceNumber        = 1,\r
+                       .AlternateSetting       = 0,\r
+                       \r
+                       .TotalEndpoints         = 2,\r
+                               \r
+                       .Class                  = 0x0A,\r
+                       .SubClass               = 0x00,\r
+                       .Protocol               = 0x00,\r
+                               \r
+                       .InterfaceStrIndex      = NO_DESCRIPTOR\r
+               },\r
+\r
+       .DataOutEndpoint = \r
+               {\r
+                       .Header                 = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},\r
+                                                                                \r
+                       .EndpointAddress        = (ENDPOINT_DESCRIPTOR_DIR_OUT | CDC_RX_EPNUM),\r
+                       .Attributes             = EP_TYPE_BULK,\r
+                       .EndpointSize           = CDC_TXRX_EPSIZE,\r
+                       .PollingIntervalMS      = 0x00\r
+               },\r
+               \r
+       .DataInEndpoint = \r
+               {\r
+                       .Header                 = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},\r
+                                                                                \r
+                       .EndpointAddress        = (ENDPOINT_DESCRIPTOR_DIR_IN | CDC_TX_EPNUM),\r
+                       .Attributes             = EP_TYPE_BULK,\r
+                       .EndpointSize           = CDC_TXRX_EPSIZE,\r
+                       .PollingIntervalMS      = 0x00\r
+               }\r
+};\r
+\r
+/** Language descriptor structure. This descriptor, located in FLASH memory, is returned when the host requests\r
+ *  the string descriptor with index 0 (the first index). It is actually an array of 16-bit integers, which indicate\r
+ *  via the language ID table available at USB.org what languages the device supports for its string descriptors.\r
+ */\r
+USB_Descriptor_String_t PROGMEM LanguageString =\r
+{\r
+       .Header                 = {.Size = USB_STRING_LEN(1), .Type = DTYPE_String},\r
+               \r
+       .UnicodeString          = {LANGUAGE_ID_ENG}\r
+};\r
+\r
+/** Manufacturer descriptor string. This is a Unicode string containing the manufacturer's details in human readable\r
+ *  form, and is read out upon request by the host when the appropriate string ID is requested, listed in the Device\r
+ *  Descriptor.\r
+ */\r
+USB_Descriptor_String_t PROGMEM ManufacturerString =\r
+{\r
+       .Header                 = {.Size = USB_STRING_LEN(11), .Type = DTYPE_String},\r
+               \r
+       .UnicodeString          = L"Dean Camera"\r
+};\r
+\r
+/** Product descriptor string. This is a Unicode string containing the product's details in human readable form,\r
+ *  and is read out upon request by the host when the appropriate string ID is requested, listed in the Device\r
+ *  Descriptor.\r
+ */\r
+USB_Descriptor_String_t PROGMEM ProductString =\r
+{\r
+       .Header                 = {.Size = USB_STRING_LEN(19), .Type = DTYPE_String},\r
+               \r
+       .UnicodeString          = L"LUFA RNDIS CDC Demo"\r
+};\r
+\r
+/** This function is called by the library when in device mode, and must be overridden (see library "USB Descriptors"\r
+ *  documentation) by the application code so that the address and size of a requested descriptor can be given\r
+ *  to the USB library. When the device receives a Get Descriptor request on the control endpoint, this function\r
+ *  is called so that the descriptor details can be passed back and the appropriate descriptor sent back to the\r
+ *  USB host.\r
+ */\r
+uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
+{\r
+       const uint8_t  DescriptorType   = (wValue >> 8);\r
+       const uint8_t  DescriptorNumber = (wValue & 0xFF);\r
+\r
+       void*    Address = NULL;\r
+       uint16_t Size    = NO_DESCRIPTOR;\r
+\r
+       switch (DescriptorType)\r
+       {\r
+               case DTYPE_Device:\r
+                       Address = (void*)&DeviceDescriptor;\r
+                       Size    = sizeof(USB_Descriptor_Device_t);\r
+                       break;\r
+               case DTYPE_Configuration: \r
+                       Address = (void*)&ConfigurationDescriptor;\r
+                       Size    = sizeof(USB_Descriptor_Configuration_t);\r
+                       break;\r
+               case DTYPE_String:\r
+                       switch (DescriptorNumber)\r
+                       {\r
+                               case 0x00:\r
+                                       Address = (void*)&LanguageString;\r
+                                       Size    = pgm_read_byte(&LanguageString.Header.Size);\r
+                                       break;\r
+                               case 0x01:\r
+                                       Address = (void*)&ManufacturerString;\r
+                                       Size    = pgm_read_byte(&ManufacturerString.Header.Size);\r
+                                       break;\r
+                               case 0x02:\r
+                                       Address = (void*)&ProductString;\r
+                                       Size    = pgm_read_byte(&ProductString.Header.Size);\r
+                                       break;\r
+                       }\r
+                       \r
+                       break;\r
+       }\r
+       \r
+       *DescriptorAddress = Address;\r
+       return Size;\r
+}\r
diff --git a/Demos/Device/ClassDriver/RNDISEthernet/Descriptors.h b/Demos/Device/ClassDriver/RNDISEthernet/Descriptors.h
new file mode 100644 (file)
index 0000000..eb43735
--- /dev/null
@@ -0,0 +1,98 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  Header file for Descriptors.c.\r
+ */\r
+\r
+#ifndef _DESCRIPTORS_H_\r
+#define _DESCRIPTORS_H_\r
+\r
+       /* Includes: */\r
+               #include <LUFA/Drivers/USB/USB.h>\r
+\r
+               #include <avr/pgmspace.h>\r
+\r
+       /* Macros: */\r
+               /** Macro to define a CDC class-specific functional descriptor. CDC functional descriptors have a\r
+                *  uniform structure but variable sized data payloads, thus cannot be represented accurately by\r
+                *  a single typedef struct. A macro is used instead so that functional descriptors can be created\r
+                *  easily by specifying the size of the payload. This allows sizeof() to work correctly.\r
+                *\r
+                *  \param DataSize  Size in bytes of the CDC functional descriptor's data payload\r
+                */             \r
+               #define CDC_FUNCTIONAL_DESCRIPTOR(DataSize)        \\r
+                    struct                                        \\r
+                    {                                             \\r
+                         USB_Descriptor_Header_t Header;          \\r
+                             uint8_t                 SubType;         \\r
+                         uint8_t                 Data[DataSize];  \\r
+                    }\r
+\r
+               /** Endpoint number of the CDC device-to-host notification IN endpoint. */\r
+               #define CDC_NOTIFICATION_EPNUM         3\r
+\r
+               /** Endpoint number of the CDC device-to-host data IN endpoint. */\r
+               #define CDC_TX_EPNUM                   1        \r
+\r
+               /** Endpoint number of the CDC host-to-device data OUT endpoint. */\r
+               #define CDC_RX_EPNUM                   2        \r
+\r
+               /** Size in bytes of the CDC device-to-host notification IN endpoint. */\r
+               #define CDC_NOTIFICATION_EPSIZE        8\r
+\r
+               /** Size in bytes of the CDC data IN and OUT endpoints. */\r
+               #define CDC_TXRX_EPSIZE                64\r
+\r
+       /* Type Defines: */\r
+               /** Type define for the device configuration descriptor structure. This must be defined in the\r
+                *  application code, as the configuration descriptor contains several sub-descriptors which\r
+                *  vary between devices, and which describe the device's usage to the host.\r
+                */\r
+               typedef struct\r
+               {\r
+                       USB_Descriptor_Configuration_Header_t    Config;\r
+                       USB_Descriptor_Interface_t               CCI_Interface;\r
+                       CDC_FUNCTIONAL_DESCRIPTOR(2)             CDC_Functional_Header;\r
+                       CDC_FUNCTIONAL_DESCRIPTOR(2)             CDC_Functional_CallManagement;\r
+                       CDC_FUNCTIONAL_DESCRIPTOR(1)             CDC_Functional_AbstractControlManagement;\r
+                       CDC_FUNCTIONAL_DESCRIPTOR(2)             CDC_Functional_Union;\r
+                       USB_Descriptor_Endpoint_t                ManagementEndpoint;\r
+                       USB_Descriptor_Interface_t               DCI_Interface;\r
+                       USB_Descriptor_Endpoint_t                DataOutEndpoint;\r
+                       USB_Descriptor_Endpoint_t                DataInEndpoint;\r
+               } USB_Descriptor_Configuration_t;\r
+\r
+       /* Function Prototypes: */\r
+               uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
+                                                                                       ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);\r
+\r
+#endif\r
diff --git a/Demos/Device/ClassDriver/RNDISEthernet/Doxygen.conf b/Demos/Device/ClassDriver/RNDISEthernet/Doxygen.conf
new file mode 100644 (file)
index 0000000..9d7973b
--- /dev/null
@@ -0,0 +1,1485 @@
+# Doxyfile 1.5.7.1\r
+\r
+# This file describes the settings to be used by the documentation system\r
+# doxygen (www.doxygen.org) for a project\r
+#\r
+# All text after a hash (#) is considered a comment and will be ignored\r
+# The format is:\r
+#       TAG = value [value, ...]\r
+# For lists items can also be appended using:\r
+#       TAG += value [value, ...]\r
+# Values that contain spaces should be placed between quotes (" ")\r
+\r
+#---------------------------------------------------------------------------\r
+# Project related configuration options\r
+#---------------------------------------------------------------------------\r
+\r
+# This tag specifies the encoding used for all characters in the config file \r
+# that follow. The default is UTF-8 which is also the encoding used for all \r
+# text before the first occurrence of this tag. Doxygen uses libiconv (or the \r
+# iconv built into libc) for the transcoding. See \r
+# http://www.gnu.org/software/libiconv for the list of possible encodings.\r
+\r
+DOXYFILE_ENCODING      = UTF-8\r
+\r
+# The PROJECT_NAME tag is a single word (or a sequence of words surrounded \r
+# by quotes) that should identify the project.\r
+\r
+PROJECT_NAME           = "LUFA Library - RNDIS Ethernet Demo"\r
+\r
+# The PROJECT_NUMBER tag can be used to enter a project or revision number. \r
+# This could be handy for archiving the generated documentation or \r
+# if some version control system is used.\r
+\r
+PROJECT_NUMBER         = 0.0.0\r
+\r
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) \r
+# base path where the generated documentation will be put. \r
+# If a relative path is entered, it will be relative to the location \r
+# where doxygen was started. If left blank the current directory will be used.\r
+\r
+OUTPUT_DIRECTORY       = ./Documentation/\r
+\r
+# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create \r
+# 4096 sub-directories (in 2 levels) under the output directory of each output \r
+# format and will distribute the generated files over these directories. \r
+# Enabling this option can be useful when feeding doxygen a huge amount of \r
+# source files, where putting all generated files in the same directory would \r
+# otherwise cause performance problems for the file system.\r
+\r
+CREATE_SUBDIRS         = YES\r
+\r
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all \r
+# documentation generated by doxygen is written. Doxygen will use this \r
+# information to generate all constant output in the proper language. \r
+# The default language is English, other supported languages are: \r
+# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, \r
+# Croatian, Czech, Danish, Dutch, Farsi, Finnish, French, German, Greek, \r
+# Hungarian, Italian, Japanese, Japanese-en (Japanese with English messages), \r
+# Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, Polish, \r
+# Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, Slovene, \r
+# Spanish, Swedish, and Ukrainian.\r
+\r
+OUTPUT_LANGUAGE        = English\r
+\r
+# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will \r
+# include brief member descriptions after the members that are listed in \r
+# the file and class documentation (similar to JavaDoc). \r
+# Set to NO to disable this.\r
+\r
+BRIEF_MEMBER_DESC      = YES\r
+\r
+# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend \r
+# the brief description of a member or function before the detailed description. \r
+# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the \r
+# brief descriptions will be completely suppressed.\r
+\r
+REPEAT_BRIEF           = YES\r
+\r
+# This tag implements a quasi-intelligent brief description abbreviator \r
+# that is used to form the text in various listings. Each string \r
+# in this list, if found as the leading text of the brief description, will be \r
+# stripped from the text and the result after processing the whole list, is \r
+# used as the annotated text. Otherwise, the brief description is used as-is. \r
+# If left blank, the following values are used ("$name" is automatically \r
+# replaced with the name of the entity): "The $name class" "The $name widget" \r
+# "The $name file" "is" "provides" "specifies" "contains" \r
+# "represents" "a" "an" "the"\r
+\r
+ABBREVIATE_BRIEF       = "The $name class" \\r
+                         "The $name widget" \\r
+                         "The $name file" \\r
+                         is \\r
+                         provides \\r
+                         specifies \\r
+                         contains \\r
+                         represents \\r
+                         a \\r
+                         an \\r
+                         the\r
+\r
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then \r
+# Doxygen will generate a detailed section even if there is only a brief \r
+# description.\r
+\r
+ALWAYS_DETAILED_SEC    = NO\r
+\r
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all \r
+# inherited members of a class in the documentation of that class as if those \r
+# members were ordinary class members. Constructors, destructors and assignment \r
+# operators of the base classes will not be shown.\r
+\r
+INLINE_INHERITED_MEMB  = NO\r
+\r
+# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full \r
+# path before files name in the file list and in the header files. If set \r
+# to NO the shortest path that makes the file name unique will be used.\r
+\r
+FULL_PATH_NAMES        = YES\r
+\r
+# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag \r
+# can be used to strip a user-defined part of the path. Stripping is \r
+# only done if one of the specified strings matches the left-hand part of \r
+# the path. The tag can be used to show relative paths in the file list. \r
+# If left blank the directory from which doxygen is run is used as the \r
+# path to strip.\r
+\r
+STRIP_FROM_PATH        = \r
+\r
+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of \r
+# the path mentioned in the documentation of a class, which tells \r
+# the reader which header file to include in order to use a class. \r
+# If left blank only the name of the header file containing the class \r
+# definition is used. Otherwise one should specify the include paths that \r
+# are normally passed to the compiler using the -I flag.\r
+\r
+STRIP_FROM_INC_PATH    = \r
+\r
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter \r
+# (but less readable) file names. This can be useful is your file systems \r
+# doesn't support long names like on DOS, Mac, or CD-ROM.\r
+\r
+SHORT_NAMES            = YES\r
+\r
+# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen \r
+# will interpret the first line (until the first dot) of a JavaDoc-style \r
+# comment as the brief description. If set to NO, the JavaDoc \r
+# comments will behave just like regular Qt-style comments \r
+# (thus requiring an explicit @brief command for a brief description.)\r
+\r
+JAVADOC_AUTOBRIEF      = NO\r
+\r
+# If the QT_AUTOBRIEF tag is set to YES then Doxygen will \r
+# interpret the first line (until the first dot) of a Qt-style \r
+# comment as the brief description. If set to NO, the comments \r
+# will behave just like regular Qt-style comments (thus requiring \r
+# an explicit \brief command for a brief description.)\r
+\r
+QT_AUTOBRIEF           = NO\r
+\r
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen \r
+# treat a multi-line C++ special comment block (i.e. a block of //! or /// \r
+# comments) as a brief description. This used to be the default behaviour. \r
+# The new default is to treat a multi-line C++ comment block as a detailed \r
+# description. Set this tag to YES if you prefer the old behaviour instead.\r
+\r
+MULTILINE_CPP_IS_BRIEF = NO\r
+\r
+# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented \r
+# member inherits the documentation from any documented member that it \r
+# re-implements.\r
+\r
+INHERIT_DOCS           = YES\r
+\r
+# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce \r
+# a new page for each member. If set to NO, the documentation of a member will \r
+# be part of the file/class/namespace that contains it.\r
+\r
+SEPARATE_MEMBER_PAGES  = NO\r
+\r
+# The TAB_SIZE tag can be used to set the number of spaces in a tab. \r
+# Doxygen uses this value to replace tabs by spaces in code fragments.\r
+\r
+TAB_SIZE               = 4\r
+\r
+# This tag can be used to specify a number of aliases that acts \r
+# as commands in the documentation. An alias has the form "name=value". \r
+# For example adding "sideeffect=\par Side Effects:\n" will allow you to \r
+# put the command \sideeffect (or @sideeffect) in the documentation, which \r
+# will result in a user-defined paragraph with heading "Side Effects:". \r
+# You can put \n's in the value part of an alias to insert newlines.\r
+\r
+ALIASES                = \r
+\r
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C \r
+# sources only. Doxygen will then generate output that is more tailored for C. \r
+# For instance, some of the names that are used will be different. The list \r
+# of all members will be omitted, etc.\r
+\r
+OPTIMIZE_OUTPUT_FOR_C  = YES\r
+\r
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java \r
+# sources only. Doxygen will then generate output that is more tailored for \r
+# Java. For instance, namespaces will be presented as packages, qualified \r
+# scopes will look different, etc.\r
+\r
+OPTIMIZE_OUTPUT_JAVA   = NO\r
+\r
+# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran \r
+# sources only. Doxygen will then generate output that is more tailored for \r
+# Fortran.\r
+\r
+OPTIMIZE_FOR_FORTRAN   = NO\r
+\r
+# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL \r
+# sources. Doxygen will then generate output that is tailored for \r
+# VHDL.\r
+\r
+OPTIMIZE_OUTPUT_VHDL   = NO\r
+\r
+# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want \r
+# to include (a tag file for) the STL sources as input, then you should \r
+# set this tag to YES in order to let doxygen match functions declarations and \r
+# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. \r
+# func(std::string) {}). This also make the inheritance and collaboration \r
+# diagrams that involve STL classes more complete and accurate.\r
+\r
+BUILTIN_STL_SUPPORT    = NO\r
+\r
+# If you use Microsoft's C++/CLI language, you should set this option to YES to\r
+# enable parsing support.\r
+\r
+CPP_CLI_SUPPORT        = NO\r
+\r
+# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. \r
+# Doxygen will parse them like normal C++ but will assume all classes use public \r
+# instead of private inheritance when no explicit protection keyword is present.\r
+\r
+SIP_SUPPORT            = NO\r
+\r
+# For Microsoft's IDL there are propget and propput attributes to indicate getter \r
+# and setter methods for a property. Setting this option to YES (the default) \r
+# will make doxygen to replace the get and set methods by a property in the \r
+# documentation. This will only work if the methods are indeed getting or \r
+# setting a simple type. If this is not the case, or you want to show the \r
+# methods anyway, you should set this option to NO.\r
+\r
+IDL_PROPERTY_SUPPORT   = YES\r
+\r
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC \r
+# tag is set to YES, then doxygen will reuse the documentation of the first \r
+# member in the group (if any) for the other members of the group. By default \r
+# all members of a group must be documented explicitly.\r
+\r
+DISTRIBUTE_GROUP_DOC   = NO\r
+\r
+# Set the SUBGROUPING tag to YES (the default) to allow class member groups of \r
+# the same type (for instance a group of public functions) to be put as a \r
+# subgroup of that type (e.g. under the Public Functions section). Set it to \r
+# NO to prevent subgrouping. Alternatively, this can be done per class using \r
+# the \nosubgrouping command.\r
+\r
+SUBGROUPING            = YES\r
+\r
+# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum \r
+# is documented as struct, union, or enum with the name of the typedef. So \r
+# typedef struct TypeS {} TypeT, will appear in the documentation as a struct \r
+# with name TypeT. When disabled the typedef will appear as a member of a file, \r
+# namespace, or class. And the struct will be named TypeS. This can typically \r
+# be useful for C code in case the coding convention dictates that all compound \r
+# types are typedef'ed and only the typedef is referenced, never the tag name.\r
+\r
+TYPEDEF_HIDES_STRUCT   = NO\r
+\r
+# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to \r
+# determine which symbols to keep in memory and which to flush to disk.\r
+# When the cache is full, less often used symbols will be written to disk.\r
+# For small to medium size projects (<1000 input files) the default value is \r
+# probably good enough. For larger projects a too small cache size can cause \r
+# doxygen to be busy swapping symbols to and from disk most of the time \r
+# causing a significant performance penality. \r
+# If the system has enough physical memory increasing the cache will improve the \r
+# performance by keeping more symbols in memory. Note that the value works on \r
+# a logarithmic scale so increasing the size by one will rougly double the \r
+# memory usage. The cache size is given by this formula: \r
+# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, \r
+# corresponding to a cache size of 2^16 = 65536 symbols\r
+\r
+SYMBOL_CACHE_SIZE      = 0\r
+\r
+#---------------------------------------------------------------------------\r
+# Build related configuration options\r
+#---------------------------------------------------------------------------\r
+\r
+# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in \r
+# documentation are documented, even if no documentation was available. \r
+# Private class members and static file members will be hidden unless \r
+# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES\r
+\r
+EXTRACT_ALL            = YES\r
+\r
+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class \r
+# will be included in the documentation.\r
+\r
+EXTRACT_PRIVATE        = YES\r
+\r
+# If the EXTRACT_STATIC tag is set to YES all static members of a file \r
+# will be included in the documentation.\r
+\r
+EXTRACT_STATIC         = YES\r
+\r
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) \r
+# defined locally in source files will be included in the documentation. \r
+# If set to NO only classes defined in header files are included.\r
+\r
+EXTRACT_LOCAL_CLASSES  = YES\r
+\r
+# This flag is only useful for Objective-C code. When set to YES local \r
+# methods, which are defined in the implementation section but not in \r
+# the interface are included in the documentation. \r
+# If set to NO (the default) only methods in the interface are included.\r
+\r
+EXTRACT_LOCAL_METHODS  = NO\r
+\r
+# If this flag is set to YES, the members of anonymous namespaces will be \r
+# extracted and appear in the documentation as a namespace called \r
+# 'anonymous_namespace{file}', where file will be replaced with the base \r
+# name of the file that contains the anonymous namespace. By default \r
+# anonymous namespace are hidden.\r
+\r
+EXTRACT_ANON_NSPACES   = NO\r
+\r
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all \r
+# undocumented members of documented classes, files or namespaces. \r
+# If set to NO (the default) these members will be included in the \r
+# various overviews, but no documentation section is generated. \r
+# This option has no effect if EXTRACT_ALL is enabled.\r
+\r
+HIDE_UNDOC_MEMBERS     = NO\r
+\r
+# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all \r
+# undocumented classes that are normally visible in the class hierarchy. \r
+# If set to NO (the default) these classes will be included in the various \r
+# overviews. This option has no effect if EXTRACT_ALL is enabled.\r
+\r
+HIDE_UNDOC_CLASSES     = NO\r
+\r
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all \r
+# friend (class|struct|union) declarations. \r
+# If set to NO (the default) these declarations will be included in the \r
+# documentation.\r
+\r
+HIDE_FRIEND_COMPOUNDS  = NO\r
+\r
+# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any \r
+# documentation blocks found inside the body of a function. \r
+# If set to NO (the default) these blocks will be appended to the \r
+# function's detailed documentation block.\r
+\r
+HIDE_IN_BODY_DOCS      = NO\r
+\r
+# The INTERNAL_DOCS tag determines if documentation \r
+# that is typed after a \internal command is included. If the tag is set \r
+# to NO (the default) then the documentation will be excluded. \r
+# Set it to YES to include the internal documentation.\r
+\r
+INTERNAL_DOCS          = NO\r
+\r
+# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate \r
+# file names in lower-case letters. If set to YES upper-case letters are also \r
+# allowed. This is useful if you have classes or files whose names only differ \r
+# in case and if your file system supports case sensitive file names. Windows \r
+# and Mac users are advised to set this option to NO.\r
+\r
+CASE_SENSE_NAMES       = NO\r
+\r
+# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen \r
+# will show members with their full class and namespace scopes in the \r
+# documentation. If set to YES the scope will be hidden.\r
+\r
+HIDE_SCOPE_NAMES       = NO\r
+\r
+# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen \r
+# will put a list of the files that are included by a file in the documentation \r
+# of that file.\r
+\r
+SHOW_INCLUDE_FILES     = YES\r
+\r
+# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] \r
+# is inserted in the documentation for inline members.\r
+\r
+INLINE_INFO            = YES\r
+\r
+# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen \r
+# will sort the (detailed) documentation of file and class members \r
+# alphabetically by member name. If set to NO the members will appear in \r
+# declaration order.\r
+\r
+SORT_MEMBER_DOCS       = YES\r
+\r
+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the \r
+# brief documentation of file, namespace and class members alphabetically \r
+# by member name. If set to NO (the default) the members will appear in \r
+# declaration order.\r
+\r
+SORT_BRIEF_DOCS        = NO\r
+\r
+# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the \r
+# hierarchy of group names into alphabetical order. If set to NO (the default) \r
+# the group names will appear in their defined order.\r
+\r
+SORT_GROUP_NAMES       = NO\r
+\r
+# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be \r
+# sorted by fully-qualified names, including namespaces. If set to \r
+# NO (the default), the class list will be sorted only by class name, \r
+# not including the namespace part. \r
+# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.\r
+# Note: This option applies only to the class list, not to the \r
+# alphabetical list.\r
+\r
+SORT_BY_SCOPE_NAME     = NO\r
+\r
+# The GENERATE_TODOLIST tag can be used to enable (YES) or \r
+# disable (NO) the todo list. This list is created by putting \todo \r
+# commands in the documentation.\r
+\r
+GENERATE_TODOLIST      = NO\r
+\r
+# The GENERATE_TESTLIST tag can be used to enable (YES) or \r
+# disable (NO) the test list. This list is created by putting \test \r
+# commands in the documentation.\r
+\r
+GENERATE_TESTLIST      = NO\r
+\r
+# The GENERATE_BUGLIST tag can be used to enable (YES) or \r
+# disable (NO) the bug list. This list is created by putting \bug \r
+# commands in the documentation.\r
+\r
+GENERATE_BUGLIST       = NO\r
+\r
+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or \r
+# disable (NO) the deprecated list. This list is created by putting \r
+# \deprecated commands in the documentation.\r
+\r
+GENERATE_DEPRECATEDLIST= YES\r
+\r
+# The ENABLED_SECTIONS tag can be used to enable conditional \r
+# documentation sections, marked by \if sectionname ... \endif.\r
+\r
+ENABLED_SECTIONS       = \r
+\r
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines \r
+# the initial value of a variable or define consists of for it to appear in \r
+# the documentation. If the initializer consists of more lines than specified \r
+# here it will be hidden. Use a value of 0 to hide initializers completely. \r
+# The appearance of the initializer of individual variables and defines in the \r
+# documentation can be controlled using \showinitializer or \hideinitializer \r
+# command in the documentation regardless of this setting.\r
+\r
+MAX_INITIALIZER_LINES  = 30\r
+\r
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated \r
+# at the bottom of the documentation of classes and structs. If set to YES the \r
+# list will mention the files that were used to generate the documentation.\r
+\r
+SHOW_USED_FILES        = YES\r
+\r
+# If the sources in your project are distributed over multiple directories \r
+# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy \r
+# in the documentation. The default is NO.\r
+\r
+SHOW_DIRECTORIES       = YES\r
+\r
+# Set the SHOW_FILES tag to NO to disable the generation of the Files page.\r
+# This will remove the Files entry from the Quick Index and from the \r
+# Folder Tree View (if specified). The default is YES.\r
+\r
+SHOW_FILES             = YES\r
+\r
+# Set the SHOW_NAMESPACES tag to NO to disable the generation of the \r
+# Namespaces page.  This will remove the Namespaces entry from the Quick Index\r
+# and from the Folder Tree View (if specified). The default is YES.\r
+\r
+SHOW_NAMESPACES        = YES\r
+\r
+# The FILE_VERSION_FILTER tag can be used to specify a program or script that \r
+# doxygen should invoke to get the current version for each file (typically from \r
+# the version control system). Doxygen will invoke the program by executing (via \r
+# popen()) the command <command> <input-file>, where <command> is the value of \r
+# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file \r
+# provided by doxygen. Whatever the program writes to standard output \r
+# is used as the file version. See the manual for examples.\r
+\r
+FILE_VERSION_FILTER    = \r
+\r
+# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by \r
+# doxygen. The layout file controls the global structure of the generated output files \r
+# in an output format independent way. The create the layout file that represents \r
+# doxygen's defaults, run doxygen with the -l option. You can optionally specify a \r
+# file name after the option, if omitted DoxygenLayout.xml will be used as the name \r
+# of the layout file.\r
+\r
+LAYOUT_FILE            = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to warning and progress messages\r
+#---------------------------------------------------------------------------\r
+\r
+# The QUIET tag can be used to turn on/off the messages that are generated \r
+# by doxygen. Possible values are YES and NO. If left blank NO is used.\r
+\r
+QUIET                  = YES\r
+\r
+# The WARNINGS tag can be used to turn on/off the warning messages that are \r
+# generated by doxygen. Possible values are YES and NO. If left blank \r
+# NO is used.\r
+\r
+WARNINGS               = YES\r
+\r
+# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings \r
+# for undocumented members. If EXTRACT_ALL is set to YES then this flag will \r
+# automatically be disabled.\r
+\r
+WARN_IF_UNDOCUMENTED   = YES\r
+\r
+# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for \r
+# potential errors in the documentation, such as not documenting some \r
+# parameters in a documented function, or documenting parameters that \r
+# don't exist or using markup commands wrongly.\r
+\r
+WARN_IF_DOC_ERROR      = YES\r
+\r
+# This WARN_NO_PARAMDOC option can be abled to get warnings for \r
+# functions that are documented, but have no documentation for their parameters \r
+# or return value. If set to NO (the default) doxygen will only warn about \r
+# wrong or incomplete parameter documentation, but not about the absence of \r
+# documentation.\r
+\r
+WARN_NO_PARAMDOC       = YES\r
+\r
+# The WARN_FORMAT tag determines the format of the warning messages that \r
+# doxygen can produce. The string should contain the $file, $line, and $text \r
+# tags, which will be replaced by the file and line number from which the \r
+# warning originated and the warning text. Optionally the format may contain \r
+# $version, which will be replaced by the version of the file (if it could \r
+# be obtained via FILE_VERSION_FILTER)\r
+\r
+WARN_FORMAT            = "$file:$line: $text"\r
+\r
+# The WARN_LOGFILE tag can be used to specify a file to which warning \r
+# and error messages should be written. If left blank the output is written \r
+# to stderr.\r
+\r
+WARN_LOGFILE           = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the input files\r
+#---------------------------------------------------------------------------\r
+\r
+# The INPUT tag can be used to specify the files and/or directories that contain \r
+# documented source files. You may enter file names like "myfile.cpp" or \r
+# directories like "/usr/src/myproject". Separate the files or directories \r
+# with spaces.\r
+\r
+INPUT                  = ./\r
+\r
+# This tag can be used to specify the character encoding of the source files \r
+# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is \r
+# also the default input encoding. Doxygen uses libiconv (or the iconv built \r
+# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for \r
+# the list of possible encodings.\r
+\r
+INPUT_ENCODING         = UTF-8\r
+\r
+# If the value of the INPUT tag contains directories, you can use the \r
+# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \r
+# and *.h) to filter out the source-files in the directories. If left \r
+# blank the following patterns are tested: \r
+# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx \r
+# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90\r
+\r
+FILE_PATTERNS          = *.h \\r
+                         *.c \\r
+                                                *.txt\r
+\r
+# The RECURSIVE tag can be used to turn specify whether or not subdirectories \r
+# should be searched for input files as well. Possible values are YES and NO. \r
+# If left blank NO is used.\r
+\r
+RECURSIVE              = YES\r
+\r
+# The EXCLUDE tag can be used to specify files and/or directories that should \r
+# excluded from the INPUT source files. This way you can easily exclude a \r
+# subdirectory from a directory tree whose root is specified with the INPUT tag.\r
+\r
+EXCLUDE                = \r
+\r
+# The EXCLUDE_SYMLINKS tag can be used select whether or not files or \r
+# directories that are symbolic links (a Unix filesystem feature) are excluded \r
+# from the input.\r
+\r
+EXCLUDE_SYMLINKS       = NO\r
+\r
+# If the value of the INPUT tag contains directories, you can use the \r
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude \r
+# certain files from those directories. Note that the wildcards are matched \r
+# against the file with absolute path, so to exclude all test directories \r
+# for example use the pattern */test/*\r
+\r
+EXCLUDE_PATTERNS       = */LowLevel/USBMode.h\r
+\r
+# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names \r
+# (namespaces, classes, functions, etc.) that should be excluded from the \r
+# output. The symbol name can be a fully qualified name, a word, or if the \r
+# wildcard * is used, a substring. Examples: ANamespace, AClass, \r
+# AClass::ANamespace, ANamespace::*Test\r
+\r
+EXCLUDE_SYMBOLS        = __*\r
+\r
+# The EXAMPLE_PATH tag can be used to specify one or more files or \r
+# directories that contain example code fragments that are included (see \r
+# the \include command).\r
+\r
+EXAMPLE_PATH           = \r
+\r
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the \r
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \r
+# and *.h) to filter out the source-files in the directories. If left \r
+# blank all files are included.\r
+\r
+EXAMPLE_PATTERNS       = *\r
+\r
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be \r
+# searched for input files to be used with the \include or \dontinclude \r
+# commands irrespective of the value of the RECURSIVE tag. \r
+# Possible values are YES and NO. If left blank NO is used.\r
+\r
+EXAMPLE_RECURSIVE      = NO\r
+\r
+# The IMAGE_PATH tag can be used to specify one or more files or \r
+# directories that contain image that are included in the documentation (see \r
+# the \image command).\r
+\r
+IMAGE_PATH             = \r
+\r
+# The INPUT_FILTER tag can be used to specify a program that doxygen should \r
+# invoke to filter for each input file. Doxygen will invoke the filter program \r
+# by executing (via popen()) the command <filter> <input-file>, where <filter> \r
+# is the value of the INPUT_FILTER tag, and <input-file> is the name of an \r
+# input file. Doxygen will then use the output that the filter program writes \r
+# to standard output.  If FILTER_PATTERNS is specified, this tag will be \r
+# ignored.\r
+\r
+INPUT_FILTER           = \r
+\r
+# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern \r
+# basis.  Doxygen will compare the file name with each pattern and apply the \r
+# filter if there is a match.  The filters are a list of the form: \r
+# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further \r
+# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER \r
+# is applied to all files.\r
+\r
+FILTER_PATTERNS        = \r
+\r
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using \r
+# INPUT_FILTER) will be used to filter the input files when producing source \r
+# files to browse (i.e. when SOURCE_BROWSER is set to YES).\r
+\r
+FILTER_SOURCE_FILES    = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to source browsing\r
+#---------------------------------------------------------------------------\r
+\r
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will \r
+# be generated. Documented entities will be cross-referenced with these sources. \r
+# Note: To get rid of all source code in the generated output, make sure also \r
+# VERBATIM_HEADERS is set to NO.\r
+\r
+SOURCE_BROWSER         = NO\r
+\r
+# Setting the INLINE_SOURCES tag to YES will include the body \r
+# of functions and classes directly in the documentation.\r
+\r
+INLINE_SOURCES         = NO\r
+\r
+# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct \r
+# doxygen to hide any special comment blocks from generated source code \r
+# fragments. Normal C and C++ comments will always remain visible.\r
+\r
+STRIP_CODE_COMMENTS    = YES\r
+\r
+# If the REFERENCED_BY_RELATION tag is set to YES \r
+# then for each documented function all documented \r
+# functions referencing it will be listed.\r
+\r
+REFERENCED_BY_RELATION = NO\r
+\r
+# If the REFERENCES_RELATION tag is set to YES \r
+# then for each documented function all documented entities \r
+# called/used by that function will be listed.\r
+\r
+REFERENCES_RELATION    = NO\r
+\r
+# If the REFERENCES_LINK_SOURCE tag is set to YES (the default)\r
+# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from\r
+# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will\r
+# link to the source code.  Otherwise they will link to the documentstion.\r
+\r
+REFERENCES_LINK_SOURCE = NO\r
+\r
+# If the USE_HTAGS tag is set to YES then the references to source code \r
+# will point to the HTML generated by the htags(1) tool instead of doxygen \r
+# built-in source browser. The htags tool is part of GNU's global source \r
+# tagging system (see http://www.gnu.org/software/global/global.html). You \r
+# will need version 4.8.6 or higher.\r
+\r
+USE_HTAGS              = NO\r
+\r
+# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen \r
+# will generate a verbatim copy of the header file for each class for \r
+# which an include is specified. Set to NO to disable this.\r
+\r
+VERBATIM_HEADERS       = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the alphabetical class index\r
+#---------------------------------------------------------------------------\r
+\r
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index \r
+# of all compounds will be generated. Enable this if the project \r
+# contains a lot of classes, structs, unions or interfaces.\r
+\r
+ALPHABETICAL_INDEX     = YES\r
+\r
+# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then \r
+# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns \r
+# in which this list will be split (can be a number in the range [1..20])\r
+\r
+COLS_IN_ALPHA_INDEX    = 5\r
+\r
+# In case all classes in a project start with a common prefix, all \r
+# classes will be put under the same header in the alphabetical index. \r
+# The IGNORE_PREFIX tag can be used to specify one or more prefixes that \r
+# should be ignored while generating the index headers.\r
+\r
+IGNORE_PREFIX          = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the HTML output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_HTML tag is set to YES (the default) Doxygen will \r
+# generate HTML output.\r
+\r
+GENERATE_HTML          = YES\r
+\r
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `html' will be used as the default path.\r
+\r
+HTML_OUTPUT            = html\r
+\r
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for \r
+# each generated HTML page (for example: .htm,.php,.asp). If it is left blank \r
+# doxygen will generate files with .html extension.\r
+\r
+HTML_FILE_EXTENSION    = .html\r
+\r
+# The HTML_HEADER tag can be used to specify a personal HTML header for \r
+# each generated HTML page. If it is left blank doxygen will generate a \r
+# standard header.\r
+\r
+HTML_HEADER            = \r
+\r
+# The HTML_FOOTER tag can be used to specify a personal HTML footer for \r
+# each generated HTML page. If it is left blank doxygen will generate a \r
+# standard footer.\r
+\r
+HTML_FOOTER            = \r
+\r
+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading \r
+# style sheet that is used by each HTML page. It can be used to \r
+# fine-tune the look of the HTML output. If the tag is left blank doxygen \r
+# will generate a default style sheet. Note that doxygen will try to copy \r
+# the style sheet file to the HTML output directory, so don't put your own \r
+# stylesheet in the HTML output directory as well, or it will be erased!\r
+\r
+HTML_STYLESHEET        = \r
+\r
+# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, \r
+# files or namespaces will be aligned in HTML using tables. If set to \r
+# NO a bullet list will be used.\r
+\r
+HTML_ALIGN_MEMBERS     = YES\r
+\r
+# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML \r
+# documentation will contain sections that can be hidden and shown after the \r
+# page has loaded. For this to work a browser that supports \r
+# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox \r
+# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari).\r
+\r
+HTML_DYNAMIC_SECTIONS  = YES\r
+\r
+# If the GENERATE_DOCSET tag is set to YES, additional index files \r
+# will be generated that can be used as input for Apple's Xcode 3 \r
+# integrated development environment, introduced with OSX 10.5 (Leopard). \r
+# To create a documentation set, doxygen will generate a Makefile in the \r
+# HTML output directory. Running make will produce the docset in that \r
+# directory and running "make install" will install the docset in \r
+# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find \r
+# it at startup. \r
+# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information.\r
+\r
+GENERATE_DOCSET        = NO\r
+\r
+# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the \r
+# feed. A documentation feed provides an umbrella under which multiple \r
+# documentation sets from a single provider (such as a company or product suite) \r
+# can be grouped.\r
+\r
+DOCSET_FEEDNAME        = "Doxygen generated docs"\r
+\r
+# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that \r
+# should uniquely identify the documentation set bundle. This should be a \r
+# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen \r
+# will append .docset to the name.\r
+\r
+DOCSET_BUNDLE_ID       = org.doxygen.Project\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, additional index files \r
+# will be generated that can be used as input for tools like the \r
+# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) \r
+# of the generated HTML documentation.\r
+\r
+GENERATE_HTMLHELP      = NO\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can \r
+# be used to specify the file name of the resulting .chm file. You \r
+# can add a path in front of the file if the result should not be \r
+# written to the html output directory.\r
+\r
+CHM_FILE               = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can \r
+# be used to specify the location (absolute path including file name) of \r
+# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run \r
+# the HTML help compiler on the generated index.hhp.\r
+\r
+HHC_LOCATION           = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag \r
+# controls if a separate .chi index file is generated (YES) or that \r
+# it should be included in the master .chm file (NO).\r
+\r
+GENERATE_CHI           = NO\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING\r
+# is used to encode HtmlHelp index (hhk), content (hhc) and project file\r
+# content.\r
+\r
+CHM_INDEX_ENCODING     = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag \r
+# controls whether a binary table of contents is generated (YES) or a \r
+# normal table of contents (NO) in the .chm file.\r
+\r
+BINARY_TOC             = NO\r
+\r
+# The TOC_EXPAND flag can be set to YES to add extra items for group members \r
+# to the contents of the HTML help documentation and to the tree view.\r
+\r
+TOC_EXPAND             = YES\r
+\r
+# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER \r
+# are set, an additional index file will be generated that can be used as input for \r
+# Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated \r
+# HTML documentation.\r
+\r
+GENERATE_QHP           = NO\r
+\r
+# If the QHG_LOCATION tag is specified, the QCH_FILE tag can \r
+# be used to specify the file name of the resulting .qch file. \r
+# The path specified is relative to the HTML output folder.\r
+\r
+QCH_FILE               = \r
+\r
+# The QHP_NAMESPACE tag specifies the namespace to use when generating \r
+# Qt Help Project output. For more information please see \r
+# <a href="http://doc.trolltech.com/qthelpproject.html#namespace">Qt Help Project / Namespace</a>.\r
+\r
+QHP_NAMESPACE          = org.doxygen.Project\r
+\r
+# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating \r
+# Qt Help Project output. For more information please see \r
+# <a href="http://doc.trolltech.com/qthelpproject.html#virtual-folders">Qt Help Project / Virtual Folders</a>.\r
+\r
+QHP_VIRTUAL_FOLDER     = doc\r
+\r
+# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can \r
+# be used to specify the location of Qt's qhelpgenerator. \r
+# If non-empty doxygen will try to run qhelpgenerator on the generated \r
+# .qhp file .\r
+\r
+QHG_LOCATION           = \r
+\r
+# The DISABLE_INDEX tag can be used to turn on/off the condensed index at \r
+# top of each HTML page. The value NO (the default) enables the index and \r
+# the value YES disables it.\r
+\r
+DISABLE_INDEX          = NO\r
+\r
+# This tag can be used to set the number of enum values (range [1..20]) \r
+# that doxygen will group on one line in the generated HTML documentation.\r
+\r
+ENUM_VALUES_PER_LINE   = 1\r
+\r
+# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index\r
+# structure should be generated to display hierarchical information.\r
+# If the tag value is set to FRAME, a side panel will be generated\r
+# containing a tree-like index structure (just like the one that \r
+# is generated for HTML Help). For this to work a browser that supports \r
+# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, \r
+# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are \r
+# probably better off using the HTML help feature. Other possible values \r
+# for this tag are: HIERARCHIES, which will generate the Groups, Directories,\r
+# and Class Hierarchy pages using a tree view instead of an ordered list;\r
+# ALL, which combines the behavior of FRAME and HIERARCHIES; and NONE, which\r
+# disables this behavior completely. For backwards compatibility with previous\r
+# releases of Doxygen, the values YES and NO are equivalent to FRAME and NONE\r
+# respectively.\r
+\r
+GENERATE_TREEVIEW      = YES\r
+\r
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be \r
+# used to set the initial width (in pixels) of the frame in which the tree \r
+# is shown.\r
+\r
+TREEVIEW_WIDTH         = 250\r
+\r
+# Use this tag to change the font size of Latex formulas included \r
+# as images in the HTML documentation. The default is 10. Note that \r
+# when you change the font size after a successful doxygen run you need \r
+# to manually remove any form_*.png images from the HTML output directory \r
+# to force them to be regenerated.\r
+\r
+FORMULA_FONTSIZE       = 10\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the LaTeX output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will \r
+# generate Latex output.\r
+\r
+GENERATE_LATEX         = NO\r
+\r
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `latex' will be used as the default path.\r
+\r
+LATEX_OUTPUT           = latex\r
+\r
+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be \r
+# invoked. If left blank `latex' will be used as the default command name.\r
+\r
+LATEX_CMD_NAME         = latex\r
+\r
+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to \r
+# generate index for LaTeX. If left blank `makeindex' will be used as the \r
+# default command name.\r
+\r
+MAKEINDEX_CMD_NAME     = makeindex\r
+\r
+# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact \r
+# LaTeX documents. This may be useful for small projects and may help to \r
+# save some trees in general.\r
+\r
+COMPACT_LATEX          = NO\r
+\r
+# The PAPER_TYPE tag can be used to set the paper type that is used \r
+# by the printer. Possible values are: a4, a4wide, letter, legal and \r
+# executive. If left blank a4wide will be used.\r
+\r
+PAPER_TYPE             = a4wide\r
+\r
+# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX \r
+# packages that should be included in the LaTeX output.\r
+\r
+EXTRA_PACKAGES         = \r
+\r
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for \r
+# the generated latex document. The header should contain everything until \r
+# the first chapter. If it is left blank doxygen will generate a \r
+# standard header. Notice: only use this tag if you know what you are doing!\r
+\r
+LATEX_HEADER           = \r
+\r
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated \r
+# is prepared for conversion to pdf (using ps2pdf). The pdf file will \r
+# contain links (just like the HTML output) instead of page references \r
+# This makes the output suitable for online browsing using a pdf viewer.\r
+\r
+PDF_HYPERLINKS         = YES\r
+\r
+# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of \r
+# plain latex in the generated Makefile. Set this option to YES to get a \r
+# higher quality PDF documentation.\r
+\r
+USE_PDFLATEX           = YES\r
+\r
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. \r
+# command to the generated LaTeX files. This will instruct LaTeX to keep \r
+# running if errors occur, instead of asking the user for help. \r
+# This option is also used when generating formulas in HTML.\r
+\r
+LATEX_BATCHMODE        = NO\r
+\r
+# If LATEX_HIDE_INDICES is set to YES then doxygen will not \r
+# include the index chapters (such as File Index, Compound Index, etc.) \r
+# in the output.\r
+\r
+LATEX_HIDE_INDICES     = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the RTF output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output \r
+# The RTF output is optimized for Word 97 and may not look very pretty with \r
+# other RTF readers or editors.\r
+\r
+GENERATE_RTF           = NO\r
+\r
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `rtf' will be used as the default path.\r
+\r
+RTF_OUTPUT             = rtf\r
+\r
+# If the COMPACT_RTF tag is set to YES Doxygen generates more compact \r
+# RTF documents. This may be useful for small projects and may help to \r
+# save some trees in general.\r
+\r
+COMPACT_RTF            = NO\r
+\r
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated \r
+# will contain hyperlink fields. The RTF file will \r
+# contain links (just like the HTML output) instead of page references. \r
+# This makes the output suitable for online browsing using WORD or other \r
+# programs which support those fields. \r
+# Note: wordpad (write) and others do not support links.\r
+\r
+RTF_HYPERLINKS         = NO\r
+\r
+# Load stylesheet definitions from file. Syntax is similar to doxygen's \r
+# config file, i.e. a series of assignments. You only have to provide \r
+# replacements, missing definitions are set to their default value.\r
+\r
+RTF_STYLESHEET_FILE    = \r
+\r
+# Set optional variables used in the generation of an rtf document. \r
+# Syntax is similar to doxygen's config file.\r
+\r
+RTF_EXTENSIONS_FILE    = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the man page output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_MAN tag is set to YES (the default) Doxygen will \r
+# generate man pages\r
+\r
+GENERATE_MAN           = NO\r
+\r
+# The MAN_OUTPUT tag is used to specify where the man pages will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `man' will be used as the default path.\r
+\r
+MAN_OUTPUT             = man\r
+\r
+# The MAN_EXTENSION tag determines the extension that is added to \r
+# the generated man pages (default is the subroutine's section .3)\r
+\r
+MAN_EXTENSION          = .3\r
+\r
+# If the MAN_LINKS tag is set to YES and Doxygen generates man output, \r
+# then it will generate one additional man file for each entity \r
+# documented in the real man page(s). These additional files \r
+# only source the real man page, but without them the man command \r
+# would be unable to find the correct page. The default is NO.\r
+\r
+MAN_LINKS              = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the XML output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_XML tag is set to YES Doxygen will \r
+# generate an XML file that captures the structure of \r
+# the code including all documentation.\r
+\r
+GENERATE_XML           = NO\r
+\r
+# The XML_OUTPUT tag is used to specify where the XML pages will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `xml' will be used as the default path.\r
+\r
+XML_OUTPUT             = xml\r
+\r
+# The XML_SCHEMA tag can be used to specify an XML schema, \r
+# which can be used by a validating XML parser to check the \r
+# syntax of the XML files.\r
+\r
+XML_SCHEMA             = \r
+\r
+# The XML_DTD tag can be used to specify an XML DTD, \r
+# which can be used by a validating XML parser to check the \r
+# syntax of the XML files.\r
+\r
+XML_DTD                = \r
+\r
+# If the XML_PROGRAMLISTING tag is set to YES Doxygen will \r
+# dump the program listings (including syntax highlighting \r
+# and cross-referencing information) to the XML output. Note that \r
+# enabling this will significantly increase the size of the XML output.\r
+\r
+XML_PROGRAMLISTING     = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options for the AutoGen Definitions output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will \r
+# generate an AutoGen Definitions (see autogen.sf.net) file \r
+# that captures the structure of the code including all \r
+# documentation. Note that this feature is still experimental \r
+# and incomplete at the moment.\r
+\r
+GENERATE_AUTOGEN_DEF   = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the Perl module output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_PERLMOD tag is set to YES Doxygen will \r
+# generate a Perl module file that captures the structure of \r
+# the code including all documentation. Note that this \r
+# feature is still experimental and incomplete at the \r
+# moment.\r
+\r
+GENERATE_PERLMOD       = NO\r
+\r
+# If the PERLMOD_LATEX tag is set to YES Doxygen will generate \r
+# the necessary Makefile rules, Perl scripts and LaTeX code to be able \r
+# to generate PDF and DVI output from the Perl module output.\r
+\r
+PERLMOD_LATEX          = NO\r
+\r
+# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be \r
+# nicely formatted so it can be parsed by a human reader.  This is useful \r
+# if you want to understand what is going on.  On the other hand, if this \r
+# tag is set to NO the size of the Perl module output will be much smaller \r
+# and Perl will parse it just the same.\r
+\r
+PERLMOD_PRETTY         = YES\r
+\r
+# The names of the make variables in the generated doxyrules.make file \r
+# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. \r
+# This is useful so different doxyrules.make files included by the same \r
+# Makefile don't overwrite each other's variables.\r
+\r
+PERLMOD_MAKEVAR_PREFIX = \r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration options related to the preprocessor   \r
+#---------------------------------------------------------------------------\r
+\r
+# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will \r
+# evaluate all C-preprocessor directives found in the sources and include \r
+# files.\r
+\r
+ENABLE_PREPROCESSING   = YES\r
+\r
+# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro \r
+# names in the source code. If set to NO (the default) only conditional \r
+# compilation will be performed. Macro expansion can be done in a controlled \r
+# way by setting EXPAND_ONLY_PREDEF to YES.\r
+\r
+MACRO_EXPANSION        = YES\r
+\r
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES \r
+# then the macro expansion is limited to the macros specified with the \r
+# PREDEFINED and EXPAND_AS_DEFINED tags.\r
+\r
+EXPAND_ONLY_PREDEF     = YES\r
+\r
+# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files \r
+# in the INCLUDE_PATH (see below) will be search if a #include is found.\r
+\r
+SEARCH_INCLUDES        = YES\r
+\r
+# The INCLUDE_PATH tag can be used to specify one or more directories that \r
+# contain include files that are not input files but should be processed by \r
+# the preprocessor.\r
+\r
+INCLUDE_PATH           = \r
+\r
+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard \r
+# patterns (like *.h and *.hpp) to filter out the header-files in the \r
+# directories. If left blank, the patterns specified with FILE_PATTERNS will \r
+# be used.\r
+\r
+INCLUDE_FILE_PATTERNS  = \r
+\r
+# The PREDEFINED tag can be used to specify one or more macro names that \r
+# are defined before the preprocessor is started (similar to the -D option of \r
+# gcc). The argument of the tag is a list of macros of the form: name \r
+# or name=definition (no spaces). If the definition and the = are \r
+# omitted =1 is assumed. To prevent a macro definition from being \r
+# undefined via #undef or recursively expanded use the := operator \r
+# instead of the = operator.\r
+\r
+PREDEFINED             = __DOXYGEN__\r
+\r
+# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then \r
+# this tag can be used to specify a list of macro names that should be expanded. \r
+# The macro definition that is found in the sources will be used. \r
+# Use the PREDEFINED tag if you want to use a different macro definition.\r
+\r
+EXPAND_AS_DEFINED      = BUTTLOADTAG\r
+\r
+# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then \r
+# doxygen's preprocessor will remove all function-like macros that are alone \r
+# on a line, have an all uppercase name, and do not end with a semicolon. Such \r
+# function macros are typically used for boiler-plate code, and will confuse \r
+# the parser if not removed.\r
+\r
+SKIP_FUNCTION_MACROS   = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration::additions related to external references   \r
+#---------------------------------------------------------------------------\r
+\r
+# The TAGFILES option can be used to specify one or more tagfiles. \r
+# Optionally an initial location of the external documentation \r
+# can be added for each tagfile. The format of a tag file without \r
+# this location is as follows: \r
+#   TAGFILES = file1 file2 ... \r
+# Adding location for the tag files is done as follows: \r
+#   TAGFILES = file1=loc1 "file2 = loc2" ... \r
+# where "loc1" and "loc2" can be relative or absolute paths or \r
+# URLs. If a location is present for each tag, the installdox tool \r
+# does not have to be run to correct the links.\r
+# Note that each tag file must have a unique name\r
+# (where the name does NOT include the path)\r
+# If a tag file is not located in the directory in which doxygen \r
+# is run, you must also specify the path to the tagfile here.\r
+\r
+TAGFILES               = \r
+\r
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create \r
+# a tag file that is based on the input files it reads.\r
+\r
+GENERATE_TAGFILE       = \r
+\r
+# If the ALLEXTERNALS tag is set to YES all external classes will be listed \r
+# in the class index. If set to NO only the inherited external classes \r
+# will be listed.\r
+\r
+ALLEXTERNALS           = NO\r
+\r
+# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed \r
+# in the modules index. If set to NO, only the current project's groups will \r
+# be listed.\r
+\r
+EXTERNAL_GROUPS        = YES\r
+\r
+# The PERL_PATH should be the absolute path and name of the perl script \r
+# interpreter (i.e. the result of `which perl').\r
+\r
+PERL_PATH              = /usr/bin/perl\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration options related to the dot tool   \r
+#---------------------------------------------------------------------------\r
+\r
+# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will \r
+# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base \r
+# or super classes. Setting the tag to NO turns the diagrams off. Note that \r
+# this option is superseded by the HAVE_DOT option below. This is only a \r
+# fallback. It is recommended to install and use dot, since it yields more \r
+# powerful graphs.\r
+\r
+CLASS_DIAGRAMS         = NO\r
+\r
+# You can define message sequence charts within doxygen comments using the \msc \r
+# command. Doxygen will then run the mscgen tool (see \r
+# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the \r
+# documentation. The MSCGEN_PATH tag allows you to specify the directory where \r
+# the mscgen tool resides. If left empty the tool is assumed to be found in the \r
+# default search path.\r
+\r
+MSCGEN_PATH            = \r
+\r
+# If set to YES, the inheritance and collaboration graphs will hide \r
+# inheritance and usage relations if the target is undocumented \r
+# or is not a class.\r
+\r
+HIDE_UNDOC_RELATIONS   = YES\r
+\r
+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is \r
+# available from the path. This tool is part of Graphviz, a graph visualization \r
+# toolkit from AT&T and Lucent Bell Labs. The other options in this section \r
+# have no effect if this option is set to NO (the default)\r
+\r
+HAVE_DOT               = NO\r
+\r
+# By default doxygen will write a font called FreeSans.ttf to the output \r
+# directory and reference it in all dot files that doxygen generates. This \r
+# font does not include all possible unicode characters however, so when you need \r
+# these (or just want a differently looking font) you can specify the font name \r
+# using DOT_FONTNAME. You need need to make sure dot is able to find the font, \r
+# which can be done by putting it in a standard location or by setting the \r
+# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory \r
+# containing the font.\r
+\r
+DOT_FONTNAME           = FreeSans\r
+\r
+# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. \r
+# The default size is 10pt.\r
+\r
+DOT_FONTSIZE           = 10\r
+\r
+# By default doxygen will tell dot to use the output directory to look for the \r
+# FreeSans.ttf font (which doxygen will put there itself). If you specify a \r
+# different font using DOT_FONTNAME you can set the path where dot \r
+# can find it using this tag.\r
+\r
+DOT_FONTPATH           = \r
+\r
+# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for each documented class showing the direct and \r
+# indirect inheritance relations. Setting this tag to YES will force the \r
+# the CLASS_DIAGRAMS tag to NO.\r
+\r
+CLASS_GRAPH            = NO\r
+\r
+# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for each documented class showing the direct and \r
+# indirect implementation dependencies (inheritance, containment, and \r
+# class references variables) of the class with other documented classes.\r
+\r
+COLLABORATION_GRAPH    = NO\r
+\r
+# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for groups, showing the direct groups dependencies\r
+\r
+GROUP_GRAPHS           = NO\r
+\r
+# If the UML_LOOK tag is set to YES doxygen will generate inheritance and \r
+# collaboration diagrams in a style similar to the OMG's Unified Modeling \r
+# Language.\r
+\r
+UML_LOOK               = NO\r
+\r
+# If set to YES, the inheritance and collaboration graphs will show the \r
+# relations between templates and their instances.\r
+\r
+TEMPLATE_RELATIONS     = NO\r
+\r
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT \r
+# tags are set to YES then doxygen will generate a graph for each documented \r
+# file showing the direct and indirect include dependencies of the file with \r
+# other documented files.\r
+\r
+INCLUDE_GRAPH          = NO\r
+\r
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and \r
+# HAVE_DOT tags are set to YES then doxygen will generate a graph for each \r
+# documented header file showing the documented files that directly or \r
+# indirectly include this file.\r
+\r
+INCLUDED_BY_GRAPH      = NO\r
+\r
+# If the CALL_GRAPH and HAVE_DOT options are set to YES then \r
+# doxygen will generate a call dependency graph for every global function \r
+# or class method. Note that enabling this option will significantly increase \r
+# the time of a run. So in most cases it will be better to enable call graphs \r
+# for selected functions only using the \callgraph command.\r
+\r
+CALL_GRAPH             = NO\r
+\r
+# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then \r
+# doxygen will generate a caller dependency graph for every global function \r
+# or class method. Note that enabling this option will significantly increase \r
+# the time of a run. So in most cases it will be better to enable caller \r
+# graphs for selected functions only using the \callergraph command.\r
+\r
+CALLER_GRAPH           = NO\r
+\r
+# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen \r
+# will graphical hierarchy of all classes instead of a textual one.\r
+\r
+GRAPHICAL_HIERARCHY    = NO\r
+\r
+# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES \r
+# then doxygen will show the dependencies a directory has on other directories \r
+# in a graphical way. The dependency relations are determined by the #include\r
+# relations between the files in the directories.\r
+\r
+DIRECTORY_GRAPH        = NO\r
+\r
+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images \r
+# generated by dot. Possible values are png, jpg, or gif\r
+# If left blank png will be used.\r
+\r
+DOT_IMAGE_FORMAT       = png\r
+\r
+# The tag DOT_PATH can be used to specify the path where the dot tool can be \r
+# found. If left blank, it is assumed the dot tool can be found in the path.\r
+\r
+DOT_PATH               = "C:/Program Files/Graphviz2.18/bin"\r
+\r
+# The DOTFILE_DIRS tag can be used to specify one or more directories that \r
+# contain dot files that are included in the documentation (see the \r
+# \dotfile command).\r
+\r
+DOTFILE_DIRS           = \r
+\r
+# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of \r
+# nodes that will be shown in the graph. If the number of nodes in a graph \r
+# becomes larger than this value, doxygen will truncate the graph, which is \r
+# visualized by representing a node as a red box. Note that doxygen if the \r
+# number of direct children of the root node in a graph is already larger than \r
+# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note \r
+# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.\r
+\r
+DOT_GRAPH_MAX_NODES    = 15\r
+\r
+# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the \r
+# graphs generated by dot. A depth value of 3 means that only nodes reachable \r
+# from the root by following a path via at most 3 edges will be shown. Nodes \r
+# that lay further from the root node will be omitted. Note that setting this \r
+# option to 1 or 2 may greatly reduce the computation time needed for large \r
+# code bases. Also note that the size of a graph can be further restricted by \r
+# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.\r
+\r
+MAX_DOT_GRAPH_DEPTH    = 2\r
+\r
+# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent \r
+# background. This is disabled by default, because dot on Windows does not \r
+# seem to support this out of the box. Warning: Depending on the platform used, \r
+# enabling this option may lead to badly anti-aliased labels on the edges of \r
+# a graph (i.e. they become hard to read).\r
+\r
+DOT_TRANSPARENT        = YES\r
+\r
+# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output \r
+# files in one run (i.e. multiple -o and -T options on the command line). This \r
+# makes dot run faster, but since only newer versions of dot (>1.8.10) \r
+# support this, this feature is disabled by default.\r
+\r
+DOT_MULTI_TARGETS      = NO\r
+\r
+# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will \r
+# generate a legend page explaining the meaning of the various boxes and \r
+# arrows in the dot generated graphs.\r
+\r
+GENERATE_LEGEND        = YES\r
+\r
+# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will \r
+# remove the intermediate dot files that are used to generate \r
+# the various graphs.\r
+\r
+DOT_CLEANUP            = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration::additions related to the search engine   \r
+#---------------------------------------------------------------------------\r
+\r
+# The SEARCHENGINE tag specifies whether or not a search engine should be \r
+# used. If set to NO the values of all tags below this one will be ignored.\r
+\r
+SEARCHENGINE           = NO\r
diff --git a/Demos/Device/ClassDriver/RNDISEthernet/LUFA RNDIS.inf b/Demos/Device/ClassDriver/RNDISEthernet/LUFA RNDIS.inf
new file mode 100644 (file)
index 0000000..a124afe
--- /dev/null
@@ -0,0 +1,52 @@
+;     Windows LUFA RNDIS Setup File\r
+; Copyright (c) 2000 Microsoft Corporation\r
+\r
+[Version]\r
+Signature           = "$Windows NT$"\r
+Class               = Net\r
+ClassGUID           = {4d36e972-e325-11ce-bfc1-08002be10318}\r
+Provider            = %COMPANY%\r
+DriverVer           = 06/21/2006,6.0.6000.16384\r
+;CatalogFile        = device.cat\r
+\r
+[Manufacturer]\r
+%COMPANY%         = RndisDevices,NTx86,NTamd64,NTia64\r
+\r
+; Decoration for x86 architecture\r
+[RndisDevices.NTx86]\r
+%RNDISDEV%    = RNDIS.NT.5.1, USB\VID_03EB&PID_204C\r
+\r
+; Decoration for x64 architecture\r
+[RndisDevices.NTamd64]\r
+%RNDISDEV%    = RNDIS.NT.5.1, USB\VID_03EB&PID_204C\r
+\r
+; Decoration for ia64 architecture\r
+[RndisDevices.NTia64]\r
+%RNDISDEV%    = RNDIS.NT.5.1, USB\VID_03EB&PID_204C\r
+\r
+;@@@ This is the common setting for setup\r
+[ControlFlags]\r
+ExcludeFromSelect=*\r
+\r
+; DDInstall section\r
+; References the in-build Netrndis.inf\r
+[RNDIS.NT.5.1]\r
+Characteristics = 0x84   ; NCF_PHYSICAL + NCF_HAS_UI\r
+BusType         = 15\r
+; NEVER REMOVE THE FOLLOWING REFERENCE FOR NETRNDIS.INF\r
+include         = netrndis.inf\r
+needs           = Usb_Rndis.ndi\r
+AddReg          = Rndis_AddReg_Vista\r
+\r
+; DDInstal.Services section\r
+[RNDIS.NT.5.1.Services]\r
+include     = netrndis.inf\r
+needs       = Usb_Rndis.ndi.Services\r
+\r
+; No sys copyfiles - the sys files are already in-build \r
+; (part of the operating system).\r
+\r
+; Modify these strings for your device as needed.\r
+[Strings] \r
+COMPANY="LUFA Library"\r
+RNDISDEV="LUFA USB RNDIS Demo"
\ No newline at end of file
diff --git a/Demos/Device/ClassDriver/RNDISEthernet/Lib/ARP.c b/Demos/Device/ClassDriver/RNDISEthernet/Lib/ARP.c
new file mode 100644 (file)
index 0000000..0f108c2
--- /dev/null
@@ -0,0 +1,85 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  Address Resolution Protocol (ARP) packet handling routines. This protocol handles the\r
+ *  conversion of physical MAC addresses to protocol IP addresses between the host and the\r
+ *  device.\r
+ */\r
\r
+#include "ARP.h"\r
+\r
+/** Processes an ARP packet inside an Ethernet frame, and writes the appropriate response\r
+ *  to the output Ethernet frame if the host is requesting the IP or MAC address of the\r
+ *  virtual server device on the network.\r
+ *\r
+ *  \param InDataStart   Pointer to the start of the incoming packet's ARP header\r
+ *  \param OutDataStart  Pointer to the start of the outgoing packet's ARP header\r
+ *\r
+ *  \return The number of bytes written to the out Ethernet frame if any, NO_RESPONSE otherwise\r
+ */\r
+int16_t ARP_ProcessARPPacket(void* InDataStart, void* OutDataStart)\r
+{\r
+       DecodeARPHeader(InDataStart);\r
+\r
+       ARP_Header_t* ARPHeaderIN  = (ARP_Header_t*)InDataStart;\r
+       ARP_Header_t* ARPHeaderOUT = (ARP_Header_t*)OutDataStart;\r
+\r
+       /* Ensure that the ARP request is a IPv4 request packet */\r
+       if ((SwapEndian_16(ARPHeaderIN->ProtocolType) == ETHERTYPE_IPV4) &&\r
+           (SwapEndian_16(ARPHeaderIN->Operation) == ARP_OPERATION_REQUEST))\r
+       {\r
+               /* If the ARP packet is requesting the MAC or IP of the virtual webserver, return the response */\r
+               if (IP_COMPARE(&ARPHeaderIN->TPA, &ServerIPAddress) || \r
+                   MAC_COMPARE(&ARPHeaderIN->THA, &ServerMACAddress))\r
+               {\r
+                       /* Fill out the ARP response header */\r
+                       ARPHeaderOUT->HardwareType = ARPHeaderIN->HardwareType;\r
+                       ARPHeaderOUT->ProtocolType = ARPHeaderIN->ProtocolType;\r
+                       ARPHeaderOUT->HLEN         = ARPHeaderIN->HLEN;\r
+                       ARPHeaderOUT->PLEN         = ARPHeaderIN->PLEN;\r
+                       ARPHeaderOUT->Operation    = SwapEndian_16(ARP_OPERATION_REPLY);\r
+\r
+                       /* Copy over the sender MAC/IP to the target fields for the response */\r
+                       ARPHeaderOUT->THA = ARPHeaderIN->SHA;\r
+                       ARPHeaderOUT->TPA = ARPHeaderIN->SPA;\r
+\r
+                       /* Copy over the new sender MAC/IP - MAC and IP addresses of the virtual webserver */\r
+                       ARPHeaderOUT->SHA = ServerMACAddress;\r
+                       ARPHeaderOUT->SPA = ServerIPAddress;\r
+\r
+                       /* Return the size of the response so far */\r
+                       return sizeof(ARP_Header_t);\r
+               }\r
+       }\r
+       \r
+       return NO_RESPONSE;\r
+}\r
diff --git a/Demos/Device/ClassDriver/RNDISEthernet/Lib/ARP.h b/Demos/Device/ClassDriver/RNDISEthernet/Lib/ARP.h
new file mode 100644 (file)
index 0000000..f05d8f0
--- /dev/null
@@ -0,0 +1,74 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  Header file for ARP.c.\r
+ */\r
\r
+#ifndef _ARP_H_\r
+#define _ARP_H_\r
+\r
+       /* Includes: */\r
+               #include <avr/io.h>\r
+               #include <string.h>
+               \r
+               #include "EthernetProtocols.h"\r
+               #include "Ethernet.h"\r
+               #include "ProtocolDecoders.h"\r
+               \r
+       /* Macros: */\r
+               /** ARP header operation constant, indicating a request from a host for an address translation */\r
+               #define ARP_OPERATION_REQUEST            1\r
+\r
+               /** ARP header operation constant, indicating a reply from a host giving an address translation */\r
+               #define ARP_OPERATION_REPLY              2\r
+\r
+       /* Type Defines: */\r
+               /** Type define for an ARP packet inside an Ethernet frame. */\r
+               typedef struct\r
+               {\r
+                       uint16_t      HardwareType; /**< Hardware type constant, indicating the hardware used */\r
+                       uint16_t      ProtocolType; /**< Protocol being resolved, usually ETHERTYPE_IPV4 */\r
+                       \r
+                       uint8_t       HLEN; /**< Length in bytes of the source/destination hardware addresses */\r
+                       uint8_t       PLEN; /**< Length in bytes of the source/destination protocol addresses */\r
+                       uint16_t      Operation; /**< Type of operation, either ARP_OPERATION_REQUEST or ARP_OPERATION_REPLY */\r
+                       \r
+                       MAC_Address_t SHA; /**< Sender's hardware address */\r
+                       IP_Address_t  SPA; /**< Sender's protocol address */\r
+                       MAC_Address_t THA; /**< Target's hardware address */\r
+                       IP_Address_t  TPA; /**< Target's protocol address */\r
+               } ARP_Header_t;\r
+               \r
+       /* Function Prototypes: */\r
+               int16_t ARP_ProcessARPPacket(void* InDataStart, void* OutDataStart);\r
+\r
+#endif\r
diff --git a/Demos/Device/ClassDriver/RNDISEthernet/Lib/DHCP.c b/Demos/Device/ClassDriver/RNDISEthernet/Lib/DHCP.c
new file mode 100644 (file)
index 0000000..76711fb
--- /dev/null
@@ -0,0 +1,118 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  Dynamic Host Configuration Protocol (DHCP) packet handling routines. This protocol\r
+ *  handles the automatic IP negotiation to the host, so that the host will use the provided\r
+ *  IP address given to it by the device.\r
+ */\r
\r
+#include "DHCP.h"\r
+\r
+/** Processes a DHCP packet inside an Ethernet frame, and writes the appropriate response\r
+ *  to the output Ethernet frame if the host is requesting or accepting an IP address.\r
+ *\r
+ *  \param IPHeaderInStart     Pointer to the start of the incoming packet's IP header\r
+ *  \param DHCPHeaderInStart   Pointer to the start of the incoming packet's DHCP header\r
+ *  \param DHCPHeaderOutStart  Pointer to the start of the outgoing packet's DHCP header\r
+ *\r
+ *  \return The number of bytes written to the out Ethernet frame if any, NO_RESPONSE otherwise\r
+ */\r
+int16_t DHCP_ProcessDHCPPacket(void* IPHeaderInStart, void* DHCPHeaderInStart, void* DHCPHeaderOutStart)\r
+{\r
+       IP_Header_t*   IPHeaderIN    = (IP_Header_t*)IPHeaderInStart;\r
+       DHCP_Header_t* DHCPHeaderIN  = (DHCP_Header_t*)DHCPHeaderInStart;\r
+       DHCP_Header_t* DHCPHeaderOUT = (DHCP_Header_t*)DHCPHeaderOutStart;\r
+       \r
+       uint8_t* DHCPOptionsINStart  = (uint8_t*)(DHCPHeaderInStart  + sizeof(DHCP_Header_t));\r
+       uint8_t* DHCPOptionsOUTStart = (uint8_t*)(DHCPHeaderOutStart + sizeof(DHCP_Header_t));\r
+\r
+       DecodeDHCPHeader(DHCPHeaderInStart);\r
+\r
+       /* Zero out the response DHCP packet, as much of it legacy and left at 0 */\r
+       memset(DHCPHeaderOUT, 0, sizeof(DHCP_Header_t));\r
+\r
+       /* Fill out the response DHCP packet */\r
+       DHCPHeaderOUT->HardwareType          = DHCPHeaderIN->HardwareType;\r
+       DHCPHeaderOUT->Operation             = DHCP_OP_BOOTREPLY;\r
+       DHCPHeaderOUT->HardwareAddressLength = DHCPHeaderIN->HardwareAddressLength;\r
+       DHCPHeaderOUT->Hops                  = 0;\r
+       DHCPHeaderOUT->TransactionID         = DHCPHeaderIN->TransactionID;\r
+       DHCPHeaderOUT->ElapsedSeconds        = 0;\r
+       DHCPHeaderOUT->Flags                 = DHCPHeaderIN->Flags;\r
+       DHCPHeaderOUT->YourIP                = ClientIPAddress;\r
+       memcpy(&DHCPHeaderOUT->ClientHardwareAddress, &DHCPHeaderIN->ClientHardwareAddress, sizeof(MAC_Address_t));\r
+       DHCPHeaderOUT->Cookie                = SwapEndian_32(DHCP_MAGIC_COOKIE);\r
+       \r
+       /* Alter the incoming IP packet header so that the corrected IP source and destinations are used - this means that\r
+          when the response IP header is generated, it will use the corrected addresses and not the null/broatcast addresses */\r
+       IPHeaderIN->SourceAddress      = ClientIPAddress;\r
+       IPHeaderIN->DestinationAddress = ServerIPAddress;\r
+\r
+       /* Process the incoming DHCP packet options */\r
+       while (DHCPOptionsINStart[0] != DHCP_OPTION_END)\r
+       {       \r
+               /* Find the Message Type DHCP option, to determine the type of DHCP packet */\r
+               if (DHCPOptionsINStart[0] == DHCP_OPTION_MESSAGETYPE)\r
+               {\r
+                       if ((DHCPOptionsINStart[2] == DHCP_MESSAGETYPE_DISCOVER) || (DHCPOptionsINStart[2] == DHCP_MESSAGETYPE_REQUEST))\r
+                       {\r
+                               /* Fill out the response DHCP packet options for a DHCP OFFER or ACK response */\r
+\r
+                               *(DHCPOptionsOUTStart++) = DHCP_OPTION_MESSAGETYPE;\r
+                               *(DHCPOptionsOUTStart++) = 1;\r
+                               *(DHCPOptionsOUTStart++) = (DHCPOptionsINStart[2] == DHCP_MESSAGETYPE_DISCOVER) ? DHCP_MESSAGETYPE_OFFER\r
+                                                                                                                                                                                               : DHCP_MESSAGETYPE_ACK;\r
+\r
+                               *(DHCPOptionsOUTStart++) = DHCP_OPTION_SUBNETMASK;\r
+                               *(DHCPOptionsOUTStart++) = 4;\r
+                               *(DHCPOptionsOUTStart++) = 0xFF;\r
+                               *(DHCPOptionsOUTStart++) = 0xFF;\r
+                               *(DHCPOptionsOUTStart++) = 0xFF;\r
+                               *(DHCPOptionsOUTStart++) = 0x00;\r
+\r
+                               *(DHCPOptionsOUTStart++) = DHCP_OPTION_DHCPSERVER;\r
+                               *(DHCPOptionsOUTStart++) = sizeof(IP_Address_t);\r
+                               memcpy(DHCPOptionsOUTStart, &ServerIPAddress, sizeof(IP_Address_t));\r
+                               DHCPOptionsOUTStart     += sizeof(IP_Address_t);\r
+\r
+                               *(DHCPOptionsOUTStart++) = DHCP_OPTION_END;\r
+                               \r
+                               return (sizeof(DHCP_Header_t) + 12 + sizeof(IP_Address_t));\r
+                       }\r
+               }\r
+               \r
+               /* Go to the next DHCP option - skip one byte if option is a padding byte, else skip the complete option's size */\r
+               DHCPOptionsINStart += ((DHCPOptionsINStart[0] == DHCP_OPTION_PAD) ? 1 : (DHCPOptionsINStart[1] + 2));\r
+       }\r
+       \r
+       return NO_RESPONSE;\r
+}\r
diff --git a/Demos/Device/ClassDriver/RNDISEthernet/Lib/DHCP.h b/Demos/Device/ClassDriver/RNDISEthernet/Lib/DHCP.h
new file mode 100644 (file)
index 0000000..f0e68b9
--- /dev/null
@@ -0,0 +1,125 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  Header file for DHCP.c.\r
+ */\r
\r
+#ifndef _DHCP_H_\r
+#define _DHCP_H_\r
+\r
+       /* Includes: */\r
+               #include <avr/io.h>\r
+               #include <string.h>\r
+       \r
+               #include "EthernetProtocols.h"\r
+               #include "Ethernet.h"\r
+               #include "ProtocolDecoders.h"\r
+\r
+       /* Macros: */\r
+               /** DHCP operation constant, indicating a request from a host to a DHCP server */\r
+               #define DHCP_OP_BOOTREQUEST       0x01\r
+\r
+               /** DHCP operation constant, indicating a reply from a DHCP server to a host */\r
+               #define DHCP_OP_BOOTREPLY         0x02\r
+               \r
+               /** Hardware type constant, indicating Ethernet as a carrier */\r
+               #define DHCP_HTYPE_ETHERNET       0x01\r
+               \r
+               /** Magic boot protocol "cookie", inserted into all BOOTP packets (BOOTP is the carrier of DHCP) */\r
+               #define DHCP_MAGIC_COOKIE         0x63825363\r
+               \r
+               /** DHCP option list entry header, indicating that a subnet mask will follow */\r
+               #define DHCP_OPTION_SUBNETMASK    1\r
+\r
+               /** DHCP option list entry header, indicating that the DHCP message type constant will follow */\r
+               #define DHCP_OPTION_MESSAGETYPE   53\r
+\r
+               /** DHCP option list entry header, indicating that the IP address of the DHCP server will follow */\r
+               #define DHCP_OPTION_DHCPSERVER    54\r
+\r
+               /** DHCP option list entry header, used to pad out option data */\r
+               #define DHCP_OPTION_PAD           0\r
+\r
+               /** DHCP option list entry header, indicating the end of option data */\r
+               #define DHCP_OPTION_END           255\r
+                       \r
+               /** Message type constant, used in the DHCP option data field, requesting that a DHCP server offer an IP address */\r
+               #define DHCP_MESSAGETYPE_DISCOVER 1\r
+\r
+               /** Message type constant, used in the DHCP option data field, indicating that a DHCP server is offering an IP address */\r
+               #define DHCP_MESSAGETYPE_OFFER    2\r
+\r
+               /** Message type constant, used in the DHCP option data field, requesting that a DHCP server lease a given IP address */\r
+               #define DHCP_MESSAGETYPE_REQUEST  3\r
+\r
+               /** Message type constant, used in the DHCP option data field, declining an offered DHCP server IP address lease */\r
+               #define DHCP_MESSAGETYPE_DECLINE  4\r
+\r
+               /** Message type constant, used in the DHCP option data field, ACKing a host IP lease request */\r
+               #define DHCP_MESSAGETYPE_ACK      5\r
+\r
+               /** Message type constant, used in the DHCP option data field, NACKing a host IP lease request */\r
+               #define DHCP_MESSAGETYPE_NACK     6\r
+\r
+               /** Message type constant, used in the DHCP option data field, indicating that a host is releasing a leased IP address */\r
+               #define DHCP_MESSAGETYPE_RELEASE  7\r
+\r
+       /* Type Defines: */\r
+               /** Type define for a DHCP packet inside an Ethernet frame. */\r
+               typedef struct\r
+               {\r
+                       uint8_t  Operation; /**< DHCP operation, either DHCP_OP_BOOTREQUEST or DHCP_OP_BOOTREPLY */\r
+                       uint8_t  HardwareType; /**< Hardware carrier type constant */\r
+                       uint8_t  HardwareAddressLength;  /**< Length in bytes of a hardware (MAC) address on the network */\r
+                       uint8_t  Hops; /**< Number of hops required to reach the server, unused */\r
+\r
+                       uint32_t TransactionID; /**< Unique ID of the DHCP packet, for positive matching between sent and received packets */\r
+\r
+                       uint16_t ElapsedSeconds; /**< Elapsed seconds since the request was made */\r
+                       uint16_t Flags; /**< BOOTP packet flags */\r
+                       \r
+                       IP_Address_t ClientIP; /**< Client IP address, if already leased an IP */\r
+                       IP_Address_t YourIP; /**< Client IP address */\r
+                       IP_Address_t NextServerIP; /**< Legacy BOOTP protocol field, unused for DHCP */\r
+                       IP_Address_t RelayAgentIP; /**< Legacy BOOTP protocol field, unused for DHCP */\r
+                       \r
+                       uint8_t ClientHardwareAddress[16]; /**< Hardware (MAC) address of the client making a request to the DHCP server */\r
+                       uint8_t ServerHostnameString[64]; /**< Legacy BOOTP protocol field, unused for DHCP */\r
+                       uint8_t BootFileName[128]; /**< Legacy BOOTP protocol field, unused for DHCP */\r
+                       \r
+                       uint32_t Cookie; /**< Magic BOOTP protocol cookie to indicate a valid packet */\r
+               } DHCP_Header_t;\r
+\r
+       /* Function Prototypes: */\r
+               int16_t DHCP_ProcessDHCPPacket(void* IPHeaderInStart, void* DHCPHeaderInStart, void* DHCPHeaderOutStart);\r
+\r
+#endif\r
diff --git a/Demos/Device/ClassDriver/RNDISEthernet/Lib/Ethernet.c b/Demos/Device/ClassDriver/RNDISEthernet/Lib/Ethernet.c
new file mode 100644 (file)
index 0000000..57380a0
--- /dev/null
@@ -0,0 +1,130 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  Ethernet frame packet handling routines. This protocol handles the processing of raw Ethernet\r
+ *  frames sent and received, deferring the processing of subpacket protocols to the appropriate\r
+ *  protocol handlers, such as DHCP or ARP.\r
+ */\r
\r
+#include "Ethernet.h"\r
+\r
+/* Global Variables: */\r
+/** Constant for convenience when checking against or setting a MAC address to the virtual server MAC address. */\r
+const MAC_Address_t ServerMACAddress    = {SERVER_MAC_ADDRESS};\r
+\r
+/** Constant for convenience when checking against or setting an IP address to the virtual server IP address. */\r
+const IP_Address_t  ServerIPAddress     = {SERVER_IP_ADDRESS};\r
+\r
+/** Constant for convenience when checking against or setting a MAC address to the broadcast MAC address. */\r
+const MAC_Address_t BroadcastMACAddress = {BROADCAST_MAC_ADDRESS};\r
+\r
+/** Constant for convenience when checking against or setting a IP address to the broadcast IP address. */\r
+const IP_Address_t  BroadcastIPAddress  = {BROADCAST_IP_ADDRESS};\r
+\r
+/** Constant for convenience when checking against or setting an IP address to the client (host) IP address. */\r
+const IP_Address_t  ClientIPAddress     = {CLIENT_IP_ADDRESS};\r
+\r
+\r
+/** Processes an incoming Ethernet frame, and writes the appropriate response to the output Ethernet\r
+ *  frame buffer if the sub protocol handlers create a valid response.\r
+ */\r
+void Ethernet_ProcessPacket(Ethernet_Frame_Info_t* FrameIN, Ethernet_Frame_Info_t* FrameOUT)\r
+{\r
+       DecodeEthernetFrameHeader(FrameIN->FrameData);\r
+\r
+       /* Cast the incoming Ethernet frame to the Ethernet header type */\r
+       Ethernet_Frame_Header_t* FrameINHeader  = (Ethernet_Frame_Header_t*)&FrameIN->FrameData;\r
+       Ethernet_Frame_Header_t* FrameOUTHeader = (Ethernet_Frame_Header_t*)&FrameOUT->FrameData;\r
+       \r
+       int16_t                  RetSize        = NO_RESPONSE;\r
+       \r
+       /* Ensure frame is addressed to either all (broadcast) or the virtual webserver, and is a type II frame */\r
+       if ((MAC_COMPARE(&FrameINHeader->Destination, &ServerMACAddress) ||\r
+            MAC_COMPARE(&FrameINHeader->Destination, &BroadcastMACAddress)))\r
+       {\r
+               /* Process the packet depending on its protocol */\r
+               switch (SwapEndian_16(FrameINHeader->EtherType))\r
+               {\r
+                       case ETHERTYPE_ARP:\r
+                               RetSize = ARP_ProcessARPPacket(&FrameIN->FrameData[sizeof(Ethernet_Frame_Header_t)],\r
+                                                              &FrameOUT->FrameData[sizeof(Ethernet_Frame_Header_t)]);\r
+                               break;          \r
+                       case ETHERTYPE_IPV4:\r
+                               RetSize = IP_ProcessIPPacket(FrameIN,\r
+                                                            &FrameIN->FrameData[sizeof(Ethernet_Frame_Header_t)],\r
+                                                            &FrameOUT->FrameData[sizeof(Ethernet_Frame_Header_t)]);\r
+                               break;\r
+               }\r
+               \r
+               /* Protocol processing routine has filled a response, complete the ethernet frame header */\r
+               if (RetSize > 0)\r
+               {\r
+                       /* Fill out the response Ethernet frame header */\r
+                       FrameOUTHeader->Source          = ServerMACAddress;\r
+                       FrameOUTHeader->Destination     = FrameINHeader->Source;\r
+                       FrameOUTHeader->EtherType       = FrameINHeader->EtherType;\r
+                       \r
+                       /* Set the response length in the buffer and indicate that a response is ready to be sent */\r
+                       FrameOUT->FrameLength           = (sizeof(Ethernet_Frame_Header_t) + RetSize);\r
+                       FrameOUT->FrameInBuffer         = true;\r
+               }\r
+       }\r
+\r
+       /* Check if the packet was processed */\r
+       if (RetSize != NO_PROCESS)\r
+       {\r
+               /* Clear the frame buffer */\r
+               FrameIN->FrameInBuffer = false;\r
+       }\r
+}\r
+\r
+/** Calculates the appropriate ethernet checksum, consisting of the addition of the one's\r
+ *  compliment of each word, complimented.\r
+ *\r
+ *  \param Data   Pointer to the packet buffer data whose checksum must be calculated\r
+ *  \param Bytes  Number of bytes in the data buffer to process\r
+ *\r
+ *  \return A 16-bit Ethernet checksum value\r
+ */\r
+uint16_t Ethernet_Checksum16(void* Data, uint16_t Bytes)\r
+{\r
+       uint16_t* Words    = (uint16_t*)Data;\r
+       uint32_t  Checksum = 0;\r
+\r
+       for (uint8_t CurrWord = 0; CurrWord < (Bytes >> 1); CurrWord++)\r
+         Checksum += Words[CurrWord];\r
+         \r
+       while (Checksum & 0xFFFF0000)\r
+         Checksum = ((Checksum & 0xFFFF) + (Checksum >> 16));\r
+       \r
+       return ~Checksum;\r
+}\r
diff --git a/Demos/Device/ClassDriver/RNDISEthernet/Lib/Ethernet.h b/Demos/Device/ClassDriver/RNDISEthernet/Lib/Ethernet.h
new file mode 100644 (file)
index 0000000..b300252
--- /dev/null
@@ -0,0 +1,104 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  Header file for Ethernet.c.\r
+ */\r
\r
+#ifndef _ETHERNET_H_\r
+#define _ETHERNET_H_\r
+\r
+       /* Includes: */\r
+               #include <avr/io.h>\r
+               #include <string.h>\r
+               \r
+               #include <LUFA/Drivers/USB/Class/Device/RNDIS.h>\r
+\r
+               #include "EthernetProtocols.h"\r
+               #include "ProtocolDecoders.h"\r
+               #include "ICMP.h"\r
+               #include "TCP.h"\r
+               #include "UDP.h"\r
+               #include "DHCP.h"\r
+               #include "ARP.h"\r
+               #include "IP.h"\r
+               \r
+       /* Macros: */\r
+               /** Physical MAC address of the USB RNDIS network adapter */\r
+               #define ADAPTER_MAC_ADDRESS              {0x00, 0x02, 0x00, 0x02, 0x00, 0x02}           \r
+\r
+               /** Physical MAC address of the virtual server on the network */\r
+               #define SERVER_MAC_ADDRESS               {0x00, 0x01, 0x00, 0x01, 0x00, 0x01}           \r
+\r
+               /** Physical MAC address of the network broadcast address */\r
+               #define BROADCAST_MAC_ADDRESS            {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}\r
+       \r
+               /** Performs a comparison between two MAC addresses, indicating if they are identical.\r
+                *  \r
+                *  \param MAC1  First MAC address\r
+                *  \param MAC2  Second MAC address\r
+                *\r
+                *  \return True if the addresses match, false otherwise\r
+                */\r
+               #define MAC_COMPARE(MAC1, MAC2)          (memcmp(MAC1, MAC2, sizeof(MAC_Address_t)) == 0)\r
+               \r
+               /** Return value for all sub protocol handling routines, indicating that no response packet has been generated */\r
+               #define NO_RESPONSE                      0              \r
+\r
+               /** Return value for all sub protocol handling routines, indicating that the packet has not yet been handled */\r
+               #define NO_PROCESS                       -1\r
+\r
+       /* Type Defines: */\r
+               /** Type define for an Ethernet frame header */\r
+               typedef struct\r
+               {\r
+                       MAC_Address_t Destination; /**< Physical MAC address of the packet recipient */\r
+                       MAC_Address_t Source; /**< Physics MAC address of the packet source */\r
+                       \r
+                       union\r
+                       {\r
+                               uint16_t  EtherType; /**< Ethernet packet subprotocol type, for Ethernet V2 packets */\r
+                               uint16_t  Length; /**< Ethernet frame length, for Ethernet V1 packets */\r
+                       };\r
+               } Ethernet_Frame_Header_t;\r
+               \r
+       /* External Variables: */\r
+               extern const MAC_Address_t ServerMACAddress;\r
+               extern const IP_Address_t  ServerIPAddress;\r
+               extern const MAC_Address_t BroadcastMACAddress;\r
+               extern const IP_Address_t  BroadcastIPAddress;\r
+               extern const IP_Address_t  ClientIPAddress;\r
+               \r
+       /* Function Prototypes: */\r
+               void     Ethernet_ProcessPacket(Ethernet_Frame_Info_t* FrameIN, Ethernet_Frame_Info_t* FrameOUT);\r
+               uint16_t Ethernet_Checksum16(void* Data, uint16_t Bytes);\r
+               \r
+#endif\r
diff --git a/Demos/Device/ClassDriver/RNDISEthernet/Lib/EthernetProtocols.h b/Demos/Device/ClassDriver/RNDISEthernet/Lib/EthernetProtocols.h
new file mode 100644 (file)
index 0000000..1ec5961
--- /dev/null
@@ -0,0 +1,81 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  General Ethernet protocol constants and type defines, for use by\r
+ *  all network protocol portions of the TCP/IP stack.\r
+ */\r
+\r
+#ifndef _ETHERNET_PROTOCOLS_H_\r
+#define _ETHERNET_PROTOCOLS_H_\r
+\r
+       /* Macros: */\r
+               #define ETHERTYPE_IPV4                   0x0800\r
+               #define ETHERTYPE_ARP                    0x0806\r
+               #define ETHERTYPE_RARP                   0x8035\r
+               #define ETHERTYPE_APPLETALK              0x809b\r
+               #define ETHERTYPE_APPLETALKARP           0x80f3\r
+               #define ETHERTYPE_IEEE8021Q              0x8100\r
+               #define ETHERTYPE_NOVELLIPX              0x8137\r
+               #define ETHERTYPE_NOVELL                 0x8138\r
+               #define ETHERTYPE_IPV6                   0x86DD\r
+               #define ETHERTYPE_COBRANET               0x8819\r
+               #define ETHERTYPE_PROVIDERBRIDGING       0x88a8\r
+               #define ETHERTYPE_MPLSUNICAST            0x8847\r
+               #define ETHERTYPE_MPLSMULTICAST          0x8848\r
+               #define ETHERTYPE_PPPoEDISCOVERY         0x8863\r
+               #define ETHERTYPE_PPPoESESSION           0x8864\r
+               #define ETHERTYPE_EAPOVERLAN             0x888E\r
+               #define ETHERTYPE_HYPERSCSI              0x889A\r
+               #define ETHERTYPE_ATAOVERETHERNET        0x88A2\r
+               #define ETHERTYPE_ETHERCAT               0x88A4\r
+               #define ETHERTYPE_SERCOSIII              0x88CD\r
+               #define ETHERTYPE_CESoE                  0x88D8\r
+               #define ETHERTYPE_MACSECURITY            0x88E5\r
+               #define ETHERTYPE_FIBRECHANNEL           0x8906\r
+               #define ETHERTYPE_QINQ                   0x9100\r
+               #define ETHERTYPE_VLLT                   0xCAFE\r
+               \r
+               #define PROTOCOL_ICMP                    1\r
+               #define PROTOCOL_IGMP                    2\r
+               #define PROTOCOL_TCP                     6\r
+               #define PROTOCOL_UDP                     17\r
+               #define PROTOCOL_OSPF                    89\r
+               #define PROTOCOL_SCTP                    132\r
+\r
+       /* Type Defines: */             \r
+               /** Type define for a protocol IP address of a device on a network */\r
+               typedef struct\r
+               {\r
+                       uint8_t       Octets[4]; /**< Individual bytes of an IP address */\r
+               } IP_Address_t;\r
+\r
+#endif\r
diff --git a/Demos/Device/ClassDriver/RNDISEthernet/Lib/ICMP.c b/Demos/Device/ClassDriver/RNDISEthernet/Lib/ICMP.c
new file mode 100644 (file)
index 0000000..ee87f83
--- /dev/null
@@ -0,0 +1,80 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  Internet Control Message Protocol (ICMP) packet handling routines. This protocol handles\r
+ *  Echo requests from the host, to indicate a successful network connection between the host\r
+ *  and the virtual server.\r
+ */\r
\r
+#include "ICMP.h"\r
+\r
+/** Processes an ICMP packet inside an Ethernet frame, and writes the appropriate response\r
+ *  to the output Ethernet frame if the host is issuing a ICMP ECHO request.\r
+ *\r
+ *  \param FrameIN  Pointer to the incomming Ethernet frame information structure\r
+ *  \param InDataStart   Pointer to the start of the incoming packet's ICMP header\r
+ *  \param OutDataStart  Pointer to the start of the outgoing packet's ICMP header\r
+ *\r
+ *  \return The number of bytes written to the out Ethernet frame if any, NO_RESPONSE otherwise\r
+ */\r
+int16_t ICMP_ProcessICMPPacket(Ethernet_Frame_Info_t* FrameIN, void* InDataStart, void* OutDataStart)\r
+{\r
+       ICMP_Header_t* ICMPHeaderIN  = (ICMP_Header_t*)InDataStart;\r
+       ICMP_Header_t* ICMPHeaderOUT = (ICMP_Header_t*)OutDataStart;\r
+\r
+       DecodeICMPHeader(InDataStart);\r
+\r
+       /* Determine if the ICMP packet is an echo request (ping) */\r
+       if (ICMPHeaderIN->Type == ICMP_TYPE_ECHOREQUEST)\r
+       {\r
+               /* Fill out the ICMP response packet */\r
+               ICMPHeaderOUT->Type     = ICMP_TYPE_ECHOREPLY;\r
+               ICMPHeaderOUT->Code     = 0;\r
+               ICMPHeaderOUT->Checksum = 0;\r
+               ICMPHeaderOUT->Id       = ICMPHeaderIN->Id;\r
+               ICMPHeaderOUT->Sequence = ICMPHeaderIN->Sequence;\r
+               \r
+               uint16_t DataSize = FrameIN->FrameLength - ((((uint16_t)InDataStart + sizeof(ICMP_Header_t)) - (uint16_t)FrameIN->FrameData));\r
+               \r
+               /* Copy the remaining payload to the response - echo requests should echo back any sent data */\r
+               memcpy(&((uint8_t*)OutDataStart)[sizeof(ICMP_Header_t)],\r
+                      &((uint8_t*)InDataStart)[sizeof(ICMP_Header_t)],\r
+                          DataSize);\r
+\r
+               ICMPHeaderOUT->Checksum = Ethernet_Checksum16(ICMPHeaderOUT, (DataSize + sizeof(ICMP_Header_t)));\r
+\r
+               /* Return the size of the response so far */\r
+               return (DataSize + sizeof(ICMP_Header_t));\r
+       }\r
+       \r
+       return NO_RESPONSE;\r
+}\r
diff --git a/Demos/Device/ClassDriver/RNDISEthernet/Lib/ICMP.h b/Demos/Device/ClassDriver/RNDISEthernet/Lib/ICMP.h
new file mode 100644 (file)
index 0000000..56749c0
--- /dev/null
@@ -0,0 +1,80 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  Header file for ICMP.c.\r
+ */\r
+\r
+#ifndef _ICMP_H_\r
+#define _ICMP_H_\r
+\r
+       /* Includes: */\r
+               #include <avr/io.h>\r
+               #include <string.h>\r
+               \r
+               #include "EthernetProtocols.h"\r
+               #include "Ethernet.h"\r
+               #include "ProtocolDecoders.h"\r
+       \r
+       /* Macros: */\r
+               /** ICMP message type constant, indicating an ICMP ECHO Reply message */\r
+               #define ICMP_TYPE_ECHOREPLY              0\r
+\r
+               /** ICMP message type constant, indicating a packet destination is unreachable */\r
+               #define ICMP_TYPE_DESTINATIONUNREACHABLE 3\r
+               \r
+               /** ICMP message type constant, indicating an ICMP Source Quench message */\r
+               #define ICMP_TYPE_SOURCEQUENCH           4\r
+\r
+               /** ICMP message type constant, indicating an ICMP Redirect message */\r
+               #define ICMP_TYPE_REDIRECTMESSAGE        5\r
+\r
+               /** ICMP message type constant, indicating an ICMP ECHO Request message */\r
+               #define ICMP_TYPE_ECHOREQUEST            8\r
+\r
+               /** ICMP message type constant, indicating an ICMP Time Exceeded message */\r
+               #define ICMP_TYPE_TIMEEXCEEDED           11\r
+       \r
+       /* Type Defines: */\r
+               /** Type define for an ICMP message header. */\r
+               typedef struct\r
+               {\r
+                       uint8_t       Type; /**< ICMP message type, a ICMP_TYPE_* constant */\r
+                       uint8_t       Code; /**< ICMP message code, indicating the message value */\r
+                       uint16_t      Checksum; /**< Ethernet checksum of the ICMP message */\r
+                       uint16_t      Id; /**< Id of the ICMP message */\r
+                       uint16_t      Sequence; /**< Sequence number of the ICMP message, to link together message responses */\r
+               } ICMP_Header_t;\r
+               \r
+       /* Function Prototypes: */\r
+               int16_t ICMP_ProcessICMPPacket(Ethernet_Frame_Info_t* FrameIN, void* InDataStart, void* OutDataStart);\r
+\r
+#endif\r
diff --git a/Demos/Device/ClassDriver/RNDISEthernet/Lib/IP.c b/Demos/Device/ClassDriver/RNDISEthernet/Lib/IP.c
new file mode 100644 (file)
index 0000000..c5c38fc
--- /dev/null
@@ -0,0 +1,113 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  Internet Protocol (IP) packet handling routines. This protocol handles IP packets from the\r
+ *  host which typically encapsulate other protocols such as ICMP, UDP and TCP.\r
+ */\r
\r
+#include "IP.h"\r
+\r
+/** Processes an IP packet inside an Ethernet frame, and writes the appropriate response\r
+ *  to the output Ethernet frame if one is created by a subprotocol handler.\r
+ *\r
+ *  \param FrameIN       Pointer to the incomming Ethernet frame information structure\r
+ *  \param InDataStart   Pointer to the start of the incoming packet's IP header\r
+ *  \param OutDataStart  Pointer to the start of the outgoing packet's IP header\r
+ *\r
+ *  \return The number of bytes written to the out Ethernet frame if any, NO_RESPONSE if no\r
+ *           response was generated, NO_PROCESS if the packet processing was deferred until the\r
+ *           next Ethernet packet handler iteration\r
+ */\r
+int16_t IP_ProcessIPPacket(Ethernet_Frame_Info_t* FrameIN, void* InDataStart, void* OutDataStart)\r
+{\r
+       DecodeIPHeader(InDataStart);\r
+\r
+       IP_Header_t* IPHeaderIN  = (IP_Header_t*)InDataStart;\r
+       IP_Header_t* IPHeaderOUT = (IP_Header_t*)OutDataStart;\r
+\r
+       /* Header length is specified in number of longs in the packet header, convert to bytes */\r
+       uint16_t HeaderLengthBytes = (IPHeaderIN->HeaderLength * sizeof(uint32_t));\r
+\r
+       int16_t  RetSize = NO_RESPONSE;\r
+\r
+       /* Check to ensure the IP packet is addressed to the virtual webserver's IP or the broadcast IP address */\r
+       if (!(IP_COMPARE(&IPHeaderIN->DestinationAddress, &ServerIPAddress)) &&\r
+           !(IP_COMPARE(&IPHeaderIN->DestinationAddress, &BroadcastIPAddress)))\r
+       {\r
+               return NO_RESPONSE;\r
+       }\r
+       \r
+       /* Pass off the IP payload to the appropriate protocol processing routine */\r
+       switch (IPHeaderIN->Protocol)\r
+       {\r
+               case PROTOCOL_ICMP:\r
+                       RetSize = ICMP_ProcessICMPPacket(FrameIN,\r
+                                                        &((uint8_t*)InDataStart)[HeaderLengthBytes],\r
+                                                        &((uint8_t*)OutDataStart)[sizeof(IP_Header_t)]);\r
+                       break;\r
+               case PROTOCOL_TCP:\r
+                       RetSize = TCP_ProcessTCPPacket(InDataStart,\r
+                                                      &((uint8_t*)InDataStart)[HeaderLengthBytes],\r
+                                                      &((uint8_t*)OutDataStart)[sizeof(IP_Header_t)]);         \r
+                       break;\r
+               case PROTOCOL_UDP:\r
+                       RetSize = UDP_ProcessUDPPacket(InDataStart,\r
+                                                      &((uint8_t*)InDataStart)[HeaderLengthBytes],\r
+                                                      &((uint8_t*)OutDataStart)[sizeof(IP_Header_t)]);         \r
+                       break;\r
+       }\r
+       \r
+       /* Check to see if the protocol processing routine has filled out a response */\r
+       if (RetSize > 0)\r
+       {\r
+               /* Fill out the response IP packet header */\r
+               IPHeaderOUT->TotalLength        = SwapEndian_16(sizeof(IP_Header_t) + RetSize);\r
+               IPHeaderOUT->TypeOfService      = 0;\r
+               IPHeaderOUT->HeaderLength       = (sizeof(IP_Header_t) / sizeof(uint32_t));\r
+               IPHeaderOUT->Version            = 4;\r
+               IPHeaderOUT->Flags              = 0;\r
+               IPHeaderOUT->FragmentOffset     = 0;\r
+               IPHeaderOUT->Identification     = 0;\r
+               IPHeaderOUT->HeaderChecksum     = 0;\r
+               IPHeaderOUT->Protocol           = IPHeaderIN->Protocol;\r
+               IPHeaderOUT->TTL                = DEFAULT_TTL;\r
+               IPHeaderOUT->SourceAddress      = IPHeaderIN->DestinationAddress;\r
+               IPHeaderOUT->DestinationAddress = IPHeaderIN->SourceAddress;\r
+               \r
+               IPHeaderOUT->HeaderChecksum     = Ethernet_Checksum16(IPHeaderOUT, sizeof(IP_Header_t));\r
+                                               \r
+               /* Return the size of the response so far */\r
+               return (sizeof(IP_Header_t) + RetSize);\r
+       }\r
+       \r
+       return RetSize;\r
+}\r
diff --git a/Demos/Device/ClassDriver/RNDISEthernet/Lib/IP.h b/Demos/Device/ClassDriver/RNDISEthernet/Lib/IP.h
new file mode 100644 (file)
index 0000000..f77c772
--- /dev/null
@@ -0,0 +1,93 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  Header file for IP.c.\r
+ */\r
\r
+#ifndef _IP_H_\r
+#define _IP_H_\r
+\r
+       /* Includes: */\r
+               #include <avr/io.h>\r
+               #include <string.h>\r
+               \r
+               #include "EthernetProtocols.h"\r
+               #include "Ethernet.h"\r
+               #include "ProtocolDecoders.h"\r
+       \r
+       /* Macros: */\r
+               /** Protocol IP address of the host (client) machine, once assigned by DHCP */\r
+               #define CLIENT_IP_ADDRESS                { 10,     0,    0,    1}\r
+\r
+               /** Protocol IP address of the virtual server machine */\r
+               #define SERVER_IP_ADDRESS                { 10,     0,    0,    2}\r
+\r
+               /** Protocol IP address of the broadcast address */\r
+               #define BROADCAST_IP_ADDRESS             {0xFF, 0xFF, 0xFF, 0xFF}\r
+\r
+               /** Default Time To Live (TTL) value for sent packets, indicating the maximum allowable hops until their destination is reached */\r
+               #define DEFAULT_TTL                      128\r
+               \r
+               /** Performs a comparison between two IP addresses, indicating if they are identical.\r
+                *  \r
+                *  \param IP1  First IP address\r
+                *  \param IP2  Second IP address\r
+                *\r
+                *  \return True if the addresses match, false otherwise\r
+                */\r
+               #define IP_COMPARE(IP1, IP2)             (memcmp(IP1, IP2, sizeof(IP_Address_t)) == 0)\r
+               \r
+       /* Type Defines: */\r
+               /** Type define of an IP packet header. */\r
+               typedef struct\r
+               {\r
+                       unsigned char  HeaderLength   : 4; /**< Total length of the packet header, in 4-byte blocks */\r
+                       unsigned char  Version        : 4; /**< IP protocol version */\r
+                       uint8_t        TypeOfService; /**< Special service type identifier, indicating delay/throughput/reliability levels */\r
+                       uint16_t       TotalLength; /**< Total length of the IP packet, in bytes */\r
+\r
+                       uint16_t       Identification; /**< Identification value for identifying fragmented packets */\r
+                       unsigned int   FragmentOffset : 13; /**< Offset of this IP fragment */\r
+                       unsigned int   Flags          : 3; /**< Fragment flags, to indicate if a packet is fragmented */\r
+\r
+                       uint8_t        TTL; /**< Maximum allowable number of hops to reach the packet destination */\r
+                       uint8_t        Protocol; /**< Encapsulated protocol type */\r
+                       uint16_t       HeaderChecksum; /**< Ethernet checksum of the IP header */\r
+                       \r
+                       IP_Address_t  SourceAddress; /**< Source protocol IP address of the packet */\r
+                       IP_Address_t  DestinationAddress; /**< Destination protocol IP address of the packet */\r
+               } IP_Header_t;\r
+               \r
+       /* Function Prototypes: */\r
+               int16_t IP_ProcessIPPacket(Ethernet_Frame_Info_t* FrameIN, void* InDataStart, void* OutDataStart);\r
+\r
+#endif\r
diff --git a/Demos/Device/ClassDriver/RNDISEthernet/Lib/ProtocolDecoders.c b/Demos/Device/ClassDriver/RNDISEthernet/Lib/ProtocolDecoders.c
new file mode 100644 (file)
index 0000000..add0333
--- /dev/null
@@ -0,0 +1,280 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/* Protocol decoders for Ethernet, TCP, IP, ICMP and ARP. Each of these routines\r
+   accepts a header to the appropriate protocol and prints out pertinent information\r
+   on the packet through the serial port.\r
+   \r
+   To disable printing of a specific protocol, define the token NO_DECODE_{Protocol}\r
+   in the project makefile, and pass it to the compiler using the -D switch.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  Protocol decoding routines, for the plain-text decoding of Ethernet frames for debugging purposes.\r
+ *  Enabled protocol decoders will print incoming Ethernet frame contents through the USART in a human\r
+ *  readable format.\r
+ *\r
+ *  Note that the USART is a slow transmission medium, and will slow down packet processing considerably.\r
+ *  Packet decoding routines can be disabled by defining NO_DECODE_{Protocol Name} in the project makefile\r
+ *  and passing it to the compiler via the -D switch.\r
+ */\r
\r
+#include "ProtocolDecoders.h"\r
+\r
+/** Decodes an Ethernet frame header and prints its contents to through the USART in a human readable format.\r
+ *\r
+ *  \param InDataStart  Pointer to the start of an Ethernet frame header\r
+ */\r
+void DecodeEthernetFrameHeader(void* InDataStart)\r
+{\r
+       #if !defined(NO_DECODE_ETHERNET)\r
+       Ethernet_Frame_Header_t* FrameHeader = (Ethernet_Frame_Header_t*)InDataStart;\r
+       \r
+       printf_P(PSTR("\r\n"));\r
+       \r
+       printf_P(PSTR("  ETHERNET\r\n"));\r
+       printf_P(PSTR("  + Frame Size: %u\r\n"), FrameIN.FrameLength);\r
+\r
+       if (!(MAC_COMPARE(&FrameHeader->Destination, &ServerMACAddress)) &&\r
+           !(MAC_COMPARE(&FrameHeader->Destination, &BroadcastMACAddress)))\r
+       {\r
+               printf_P(PSTR("  + NOT ADDRESSED TO DEVICE\r\n"));\r
+               return;\r
+       }\r
+\r
+       printf_P(PSTR("  + MAC Source : %02X:%02X:%02X:%02X:%02X:%02X\r\n"), FrameHeader->Source.Octets[0],\r
+                                                                            FrameHeader->Source.Octets[1],\r
+                                                                            FrameHeader->Source.Octets[2],\r
+                                                                            FrameHeader->Source.Octets[3],\r
+                                                                            FrameHeader->Source.Octets[4],\r
+                                                                            FrameHeader->Source.Octets[5]);\r
+\r
+       printf_P(PSTR("  + MAC Dest: %02X:%02X:%02X:%02X:%02X:%02X\r\n"),    FrameHeader->Destination.Octets[0],\r
+                                                                            FrameHeader->Destination.Octets[1],\r
+                                                                            FrameHeader->Destination.Octets[2],\r
+                                                                            FrameHeader->Destination.Octets[3],\r
+                                                                            FrameHeader->Destination.Octets[4],\r
+                                                                            FrameHeader->Destination.Octets[5]);\r
+\r
+       if (SwapEndian_16(FrameIN.FrameLength) > ETHERNET_VER2_MINSIZE)\r
+         printf_P(PSTR("  + Protocol: 0x%04x\r\n"), SwapEndian_16(FrameHeader->EtherType));\r
+       else\r
+         printf_P(PSTR("  + Protocol: UNKNOWN E1\r\n"));\r
+       #endif\r
+}\r
+\r
+/** Decodes an ARP header and prints its contents to through the USART in a human readable format.\r
+ *\r
+ *  \param InDataStart  Pointer to the start of an ARP packet header\r
+ */\r
+void DecodeARPHeader(void* InDataStart)\r
+{\r
+       #if !defined(NO_DECODE_ARP)\r
+       ARP_Header_t* ARPHeader = (ARP_Header_t*)InDataStart;   \r
+\r
+       printf_P(PSTR("   \\\r\n    ARP\r\n"));\r
+\r
+       if (!(IP_COMPARE(&ARPHeader->TPA, &ServerIPAddress)) &&\r
+           !(MAC_COMPARE(&ARPHeader->THA, &ServerMACAddress)))\r
+       {\r
+               printf_P(PSTR("    + NOT ADDRESSED TO DEVICE\r\n"));\r
+               return;         \r
+       }\r
+\r
+       printf_P(PSTR("    + Protocol: %x\r\n"), SwapEndian_16(ARPHeader->ProtocolType));\r
+       printf_P(PSTR("    + Operation: %u\r\n"), SwapEndian_16(ARPHeader->Operation));\r
+       \r
+       if (SwapEndian_16(ARPHeader->ProtocolType) == ETHERTYPE_IPV4)\r
+       {\r
+               printf_P(PSTR("    + SHA MAC: %02X:%02X:%02X:%02X:%02X:%02X\r\n"), ARPHeader->SHA.Octets[0],\r
+                                                                                  ARPHeader->SHA.Octets[1],\r
+                                                                                  ARPHeader->SHA.Octets[2],\r
+                                                                                  ARPHeader->SHA.Octets[3],\r
+                                                                                  ARPHeader->SHA.Octets[4],\r
+                                                                                  ARPHeader->SHA.Octets[5]);\r
+\r
+               printf_P(PSTR("    + SPA IP: %u.%u.%u.%u\r\n"), ARPHeader->SPA.Octets[0],\r
+                                                               ARPHeader->SPA.Octets[1],\r
+                                                               ARPHeader->SPA.Octets[2],\r
+                                                               ARPHeader->SPA.Octets[3]);\r
+\r
+               printf_P(PSTR("    + THA MAC: %02X:%02X:%02X:%02X:%02X:%02X\r\n"), ARPHeader->THA.Octets[0],\r
+                                                                                  ARPHeader->THA.Octets[1],\r
+                                                                                  ARPHeader->THA.Octets[2],\r
+                                                                                  ARPHeader->THA.Octets[3],\r
+                                                                                  ARPHeader->THA.Octets[4],\r
+                                                                                  ARPHeader->THA.Octets[5]);\r
+\r
+               printf_P(PSTR("    + TPA IP: %u.%u.%u.%u\r\n"), ARPHeader->TPA.Octets[0],\r
+                                                               ARPHeader->TPA.Octets[1],\r
+                                                               ARPHeader->TPA.Octets[2],\r
+                                                               ARPHeader->TPA.Octets[3]);\r
+       }\r
+       #endif\r
+}\r
+\r
+/** Decodes an IP header and prints its contents to through the USART in a human readable format.\r
+ *\r
+ *  \param InDataStart  Pointer to the start of an IP packet header\r
+ */\r
+void DecodeIPHeader(void* InDataStart)\r
+{\r
+       #if !defined(NO_DECODE_IP)\r
+       IP_Header_t* IPHeader  = (IP_Header_t*)InDataStart;\r
+\r
+       uint16_t HeaderLengthBytes = (IPHeader->HeaderLength * sizeof(uint32_t));\r
+\r
+       printf_P(PSTR("   \\\r\n    IP\r\n"));\r
+\r
+       if (!(IP_COMPARE(&IPHeader->DestinationAddress, &ServerIPAddress)))\r
+       {\r
+               printf_P(PSTR("    + NOT ADDRESSED TO DEVICE\r\n"));\r
+               return;\r
+       }\r
+\r
+       printf_P(PSTR("    + Header Length: %u Bytes\r\n"), HeaderLengthBytes);\r
+       printf_P(PSTR("    + Packet Version: %u\r\n"), IPHeader->Version);\r
+       printf_P(PSTR("    + Total Length: %u\r\n"), SwapEndian_16(IPHeader->TotalLength));\r
+       \r
+       printf_P(PSTR("    + Protocol: %u\r\n"), IPHeader->Protocol);\r
+       printf_P(PSTR("    + TTL: %u\r\n"), IPHeader->TTL);\r
+       \r
+       printf_P(PSTR("    + IP Src: %u.%u.%u.%u\r\n"), IPHeader->SourceAddress.Octets[0],\r
+                                                       IPHeader->SourceAddress.Octets[1],\r
+                                                       IPHeader->SourceAddress.Octets[2],\r
+                                                       IPHeader->SourceAddress.Octets[3]);     \r
+\r
+       printf_P(PSTR("    + IP Dst: %u.%u.%u.%u\r\n"), IPHeader->DestinationAddress.Octets[0],\r
+                                                       IPHeader->DestinationAddress.Octets[1],\r
+                                                       IPHeader->DestinationAddress.Octets[2],\r
+                                                       IPHeader->DestinationAddress.Octets[3]);\r
+       #endif\r
+}\r
+\r
+/** Decodes an ICMP header and prints its contents to through the USART in a human readable format.\r
+ *\r
+ *  \param InDataStart  Pointer to the start of an ICMP packet header\r
+ */\r
+void DecodeICMPHeader(void* InDataStart)\r
+{\r
+       #if !defined(NO_DECODE_ICMP)\r
+       ICMP_Header_t* ICMPHeader  = (ICMP_Header_t*)InDataStart;\r
+\r
+       printf_P(PSTR("    \\\r\n     ICMP\r\n"));\r
+\r
+       printf_P(PSTR("     + Type: %u\r\n"), ICMPHeader->Type);\r
+       printf_P(PSTR("     + Code: %u\r\n"), ICMPHeader->Code);\r
+       #endif\r
+}\r
+\r
+/** Decodes a TCP header and prints its contents to through the USART in a human readable format.\r
+ *\r
+ *  \param InDataStart  Pointer to the start of a TCP packet header\r
+ */\r
+void DecodeTCPHeader(void* InDataStart)\r
+{\r
+       #if !defined(NO_DECODE_TCP)\r
+       TCP_Header_t* TCPHeader  = (TCP_Header_t*)InDataStart;\r
+\r
+       uint16_t               HeaderLengthBytes = (TCPHeader->DataOffset * sizeof(uint32_t));\r
+\r
+       printf_P(PSTR("    \\\r\n     TCP\r\n"));\r
+\r
+       printf_P(PSTR("     + Header Length: %u Bytes\r\n"), HeaderLengthBytes);\r
+\r
+       printf_P(PSTR("     + Source Port: %u\r\n"), SwapEndian_16(TCPHeader->SourcePort));\r
+       printf_P(PSTR("     + Destination Port: %u\r\n"), SwapEndian_16(TCPHeader->DestinationPort));\r
+\r
+       printf_P(PSTR("     + Sequence Number: %lu\r\n"), SwapEndian_32(TCPHeader->SequenceNumber));\r
+       printf_P(PSTR("     + Acknowledgment Number: %lu\r\n"), SwapEndian_32(TCPHeader->AcknowledgmentNumber));\r
+       \r
+       printf_P(PSTR("     + Flags: 0x%02X\r\n"), TCPHeader->Flags);\r
+       \r
+       if (TCP_GetPortState(TCPHeader->DestinationPort) == TCP_Port_Closed)\r
+         printf_P(PSTR("     + NOT LISTENING ON DESTINATION PORT\r\n"));\r
+       #endif\r
+}\r
+\r
+/** Decodes an UDP header and prints its contents to through the USART in a human readable format.\r
+ *\r
+ *  \param InDataStart  Pointer to the start of a UDP packet header\r
+ */\r
+void DecodeUDPHeader(void* InDataStart)\r
+{\r
+       #if !defined(NO_DECODE_UDP)\r
+       UDP_Header_t* UDPHeader = (UDP_Header_t*)InDataStart;\r
+\r
+       printf_P(PSTR("    \\\r\n     UDP\r\n"));\r
+\r
+       printf_P(PSTR("     + Source Port: %u\r\n"), SwapEndian_16(UDPHeader->SourcePort));\r
+       printf_P(PSTR("     + Destination Port: %u\r\n"), SwapEndian_16(UDPHeader->DestinationPort));\r
+\r
+       printf_P(PSTR("     + Data Length: %d\r\n"), SwapEndian_16(UDPHeader->Length));\r
+       #endif\r
+}\r
+\r
+/** Decodes an DHCP header and prints its contents to through the USART in a human readable format.\r
+ *\r
+ *  \param InDataStart  Pointer to the start of a DHCP packet header\r
+ */\r
+void DecodeDHCPHeader(void* InDataStart)\r
+{\r
+       #if !defined(NO_DECODE_DHCP)\r
+       uint8_t* DHCPOptions = (InDataStart + sizeof(DHCP_Header_t));\r
+\r
+       printf_P(PSTR("     \\\r\n      DHCP\r\n"));\r
+\r
+       while (DHCPOptions[0] != DHCP_OPTION_END)\r
+       {\r
+               if (DHCPOptions[0] == DHCP_OPTION_MESSAGETYPE)\r
+               {\r
+                       switch (DHCPOptions[2])\r
+                       {\r
+                               case DHCP_MESSAGETYPE_DISCOVER:\r
+                                       printf_P(PSTR("      + DISCOVER\r\n"));\r
+                                       break;\r
+                               case DHCP_MESSAGETYPE_REQUEST:\r
+                                       printf_P(PSTR("      + REQUEST\r\n"));\r
+                                       break;\r
+                               case DHCP_MESSAGETYPE_RELEASE:\r
+                                       printf_P(PSTR("      + RELEASE\r\n"));\r
+                                       break;\r
+                               case DHCP_MESSAGETYPE_DECLINE:\r
+                                       printf_P(PSTR("      + DECLINE\r\n"));\r
+                                       break;\r
+                       }\r
+               }\r
+               \r
+               DHCPOptions += ((DHCPOptions[0] == DHCP_OPTION_PAD) ? 1 : (DHCPOptions[1] + 2));\r
+       }\r
+\r
+       #endif\r
+}\r
diff --git a/Demos/Device/ClassDriver/RNDISEthernet/Lib/ProtocolDecoders.h b/Demos/Device/ClassDriver/RNDISEthernet/Lib/ProtocolDecoders.h
new file mode 100644 (file)
index 0000000..fa0a869
--- /dev/null
@@ -0,0 +1,56 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  Header file for ProtocolDecoders.c.\r
+ */\r
+\r
+#ifndef _PROTOCOL_DECODERS_H_\r
+#define _PROTOCOL_DECODERS_H_\r
+\r
+       /* Includes: */\r
+               #include <avr/io.h>\r
+               \r
+               #include <LUFA/Drivers/Peripheral/SerialStream.h>\r
+               \r
+               #include "EthernetProtocols.h"\r
+               #include "Ethernet.h"\r
+               \r
+       /* Function Prototypes: */\r
+               void DecodeEthernetFrameHeader(void* InDataStart);\r
+               void DecodeARPHeader(void* InDataStart);\r
+               void DecodeIPHeader(void* InDataStart);\r
+               void DecodeICMPHeader(void* InDataStart);\r
+               void DecodeTCPHeader(void* InDataStart);\r
+               void DecodeUDPHeader(void* InDataStart);\r
+               void DecodeDHCPHeader(void* InDataStart);\r
+\r
+#endif\r
diff --git a/Demos/Device/ClassDriver/RNDISEthernet/Lib/TCP.c b/Demos/Device/ClassDriver/RNDISEthernet/Lib/TCP.c
new file mode 100644 (file)
index 0000000..7c3f3b4
--- /dev/null
@@ -0,0 +1,614 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  Transmission Control Protocol (TCP) packet handling routines. This protocol handles the reliable in-order transmission\r
+ *  and reception of packets to and from devices on a network, to "ports" on the device. It is used in situations where data\r
+ *  delivery must be reliable and correct, e.g. HTTP, TELNET and most other non-streaming protocols.\r
+ */\r
\r
+#define  INCLUDE_FROM_TCP_C\r
+#include "TCP.h"\r
+\r
+/* Global Variables: */\r
+/** Port state table array. This contains the current status of TCP ports in the device. To save on space, only open ports are\r
+ *  stored - closed ports may be overwritten at any time, and the system will assume any ports not present in the array are closed. This\r
+ *  allows for MAX_OPEN_TCP_PORTS to be less than the number of ports used by the application if desired.\r
+ */\r
+TCP_PortState_t        PortStateTable[MAX_OPEN_TCP_PORTS];\r
+\r
+/** Connection state table array. This contains the current status of TCP connections in the device. To save on space, only active\r
+ *  (non-closed) connections are stored - closed connections may be overwritten at any time, and the system will assume any connections\r
+ *  not present in the array are closed.\r
+ */\r
+TCP_ConnectionState_t  ConnectionStateTable[MAX_TCP_CONNECTIONS];\r
+\r
+\r
+/** Task to handle the calling of each registered application's callback function, to process and generate TCP packets at the application\r
+ *  level. If an application produces a response, this task constructs the appropriate Ethernet frame and places it into the Ethernet OUT\r
+ *  buffer for later transmission.\r
+ */\r
+void TCP_TCPTask(USB_ClassInfo_RNDIS_t* RNDISInterfaceInfo)\r
+{\r
+       /* Task to hand off TCP packets to and from the listening applications. */\r
+\r
+       /* Run each application in sequence, to process incoming and generate outgoing packets */\r
+       for (uint8_t CSTableEntry = 0; CSTableEntry < MAX_TCP_CONNECTIONS; CSTableEntry++)\r
+       {\r
+               /* Find the corresponding port entry in the port table */\r
+               for (uint8_t PTableEntry = 0; PTableEntry < MAX_TCP_CONNECTIONS; PTableEntry++)\r
+               {\r
+                       /* Run the application handler for the port */\r
+                       if ((PortStateTable[PTableEntry].Port  == ConnectionStateTable[CSTableEntry].Port) && \r
+                           (PortStateTable[PTableEntry].State == TCP_Port_Open))\r
+                       {\r
+                               PortStateTable[PTableEntry].ApplicationHandler(&ConnectionStateTable[CSTableEntry], &ConnectionStateTable[CSTableEntry].Info.Buffer);\r
+                       }\r
+               }\r
+       }\r
+       \r
+       /* Bail out early if there is already a frame waiting to be sent in the Ethernet OUT buffer */\r
+       if (RNDISInterfaceInfo->FrameOUT.FrameInBuffer)\r
+         return;\r
+       \r
+       /* Send response packets from each application as the TCP packet buffers are filled by the applications */\r
+       for (uint8_t CSTableEntry = 0; CSTableEntry < MAX_TCP_CONNECTIONS; CSTableEntry++)\r
+       {\r
+               /* For each completely received packet, pass it along to the listening application */\r
+               if ((ConnectionStateTable[CSTableEntry].Info.Buffer.Direction == TCP_PACKETDIR_OUT) &&\r
+                   (ConnectionStateTable[CSTableEntry].Info.Buffer.Ready))\r
+               {\r
+                       Ethernet_Frame_Header_t* FrameOUTHeader = (Ethernet_Frame_Header_t*)&RNDISInterfaceInfo->FrameOUT.FrameData;\r
+                       IP_Header_t*    IPHeaderOUT  = (IP_Header_t*)&RNDISInterfaceInfo->FrameOUT.FrameData[sizeof(Ethernet_Frame_Header_t)];\r
+                       TCP_Header_t*   TCPHeaderOUT = (TCP_Header_t*)&RNDISInterfaceInfo->FrameOUT.FrameData[sizeof(Ethernet_Frame_Header_t) +\r
+                                                                                                             sizeof(IP_Header_t)];                                             \r
+                       void*           TCPDataOUT     = &RNDISInterfaceInfo->FrameOUT.FrameData[sizeof(Ethernet_Frame_Header_t) +\r
+                                                                                                sizeof(IP_Header_t) +\r
+                                                                                                sizeof(TCP_Header_t)];\r
+\r
+                       uint16_t PacketSize = ConnectionStateTable[CSTableEntry].Info.Buffer.Length;\r
+\r
+                       /* Fill out the TCP data */\r
+                       TCPHeaderOUT->SourcePort           = ConnectionStateTable[CSTableEntry].Port;\r
+                       TCPHeaderOUT->DestinationPort      = ConnectionStateTable[CSTableEntry].RemotePort;\r
+                       TCPHeaderOUT->SequenceNumber       = SwapEndian_32(ConnectionStateTable[CSTableEntry].Info.SequenceNumberOut);\r
+                       TCPHeaderOUT->AcknowledgmentNumber = SwapEndian_32(ConnectionStateTable[CSTableEntry].Info.SequenceNumberIn);\r
+                       TCPHeaderOUT->DataOffset           = (sizeof(TCP_Header_t) / sizeof(uint32_t));\r
+                       TCPHeaderOUT->WindowSize           = SwapEndian_16(TCP_WINDOW_SIZE);\r
+\r
+                       TCPHeaderOUT->Flags                = TCP_FLAG_ACK;\r
+                       TCPHeaderOUT->UrgentPointer        = 0;\r
+                       TCPHeaderOUT->Checksum             = 0;\r
+                       TCPHeaderOUT->Reserved             = 0;\r
+\r
+                       memcpy(TCPDataOUT, ConnectionStateTable[CSTableEntry].Info.Buffer.Data, PacketSize);\r
+                       \r
+                       ConnectionStateTable[CSTableEntry].Info.SequenceNumberOut += PacketSize;\r
+\r
+                       TCPHeaderOUT->Checksum             = TCP_Checksum16(TCPHeaderOUT, ServerIPAddress,\r
+                                                                           ConnectionStateTable[CSTableEntry].RemoteAddress,\r
+                                                                           (sizeof(TCP_Header_t) + PacketSize));\r
+\r
+                       PacketSize += sizeof(TCP_Header_t);\r
+\r
+                       /* Fill out the response IP header */\r
+                       IPHeaderOUT->TotalLength        = SwapEndian_16(sizeof(IP_Header_t) + PacketSize);\r
+                       IPHeaderOUT->TypeOfService      = 0;\r
+                       IPHeaderOUT->HeaderLength       = (sizeof(IP_Header_t) / sizeof(uint32_t));\r
+                       IPHeaderOUT->Version            = 4;\r
+                       IPHeaderOUT->Flags              = 0;\r
+                       IPHeaderOUT->FragmentOffset     = 0;\r
+                       IPHeaderOUT->Identification     = 0;\r
+                       IPHeaderOUT->HeaderChecksum     = 0;\r
+                       IPHeaderOUT->Protocol           = PROTOCOL_TCP;\r
+                       IPHeaderOUT->TTL                = DEFAULT_TTL;\r
+                       IPHeaderOUT->SourceAddress      = ServerIPAddress;\r
+                       IPHeaderOUT->DestinationAddress = ConnectionStateTable[CSTableEntry].RemoteAddress;\r
+                       \r
+                       IPHeaderOUT->HeaderChecksum     = Ethernet_Checksum16(IPHeaderOUT, sizeof(IP_Header_t));\r
+               \r
+                       PacketSize += sizeof(IP_Header_t);\r
+               \r
+                       /* Fill out the response Ethernet frame header */\r
+                       FrameOUTHeader->Source          = ServerMACAddress;\r
+                       FrameOUTHeader->Destination     = (MAC_Address_t){{0x02, 0x00, 0x02, 0x00, 0x02, 0x00}};\r
+                       FrameOUTHeader->EtherType       = SwapEndian_16(ETHERTYPE_IPV4);\r
+\r
+                       PacketSize += sizeof(Ethernet_Frame_Header_t);\r
+\r
+                       /* Set the response length in the buffer and indicate that a response is ready to be sent */\r
+                       RNDISInterfaceInfo->FrameOUT.FrameLength   = PacketSize;\r
+                       RNDISInterfaceInfo->FrameOUT.FrameInBuffer = true;\r
+                       \r
+                       ConnectionStateTable[CSTableEntry].Info.Buffer.Ready = false;\r
+                       \r
+                       break;\r
+               }\r
+       }\r
+}\r
+\r
+/** Initializes the TCP protocol handler, clearing the port and connection state tables. This must be called before TCP packets are\r
+ *  processed.\r
+ */\r
+void TCP_Init(void)\r
+{\r
+       /* Initialize the port state table with all CLOSED entries */\r
+       for (uint8_t PTableEntry = 0; PTableEntry < MAX_OPEN_TCP_PORTS; PTableEntry++)\r
+         PortStateTable[PTableEntry].State = TCP_Port_Closed;\r
+\r
+       /* Initialize the connection table with all CLOSED entries */\r
+       for (uint8_t CSTableEntry = 0; CSTableEntry < MAX_TCP_CONNECTIONS; CSTableEntry++)\r
+         ConnectionStateTable[CSTableEntry].State = TCP_Connection_Closed;\r
+}\r
+\r
+/** Sets the state and callback handler of the given port, specified in big endian to the given state.\r
+ *\r
+ *  \param Port     Port whose state and callback function to set, specified in big endian\r
+ *  \param State    New state of the port, a value from the TCP_PortStates_t enum\r
+ *  \param Handler  Application callback handler for the port\r
+ *\r
+ *  \return Boolean true if the port state was set, false otherwise (no more space in the port state table)\r
+ */\r
+bool TCP_SetPortState(uint16_t Port, uint8_t State, void (*Handler)(TCP_ConnectionState_t*, TCP_ConnectionBuffer_t*))\r
+{\r
+       /* Note, Port number should be specified in BIG endian to simplify network code */\r
+\r
+       /* Check to see if the port entry is already in the port state table */\r
+       for (uint8_t PTableEntry = 0; PTableEntry < MAX_TCP_CONNECTIONS; PTableEntry++)\r
+       {\r
+               /* Find existing entry for the port in the table, update it if found */\r
+               if (PortStateTable[PTableEntry].Port == Port)\r
+               {\r
+                       PortStateTable[PTableEntry].State = State;\r
+                       PortStateTable[PTableEntry].ApplicationHandler = Handler;\r
+                       return true;\r
+               }\r
+       }\r
+\r
+       /* Check if trying to open the port -- if so we need to find an unused (closed) entry and replace it */\r
+       if (State == TCP_Port_Open)\r
+       {\r
+               for (uint8_t PTableEntry = 0; PTableEntry < MAX_TCP_CONNECTIONS; PTableEntry++)\r
+               {\r
+                       /* Find a closed port entry in the table, change it to the given port and state */\r
+                       if (PortStateTable[PTableEntry].State == TCP_Port_Closed)\r
+                       {\r
+                               PortStateTable[PTableEntry].Port  = Port;\r
+                               PortStateTable[PTableEntry].State = State;\r
+                               PortStateTable[PTableEntry].ApplicationHandler = Handler;\r
+                               return true;\r
+                       }\r
+               }\r
+               \r
+               /* Port not in table and no room to add it, return failure */\r
+               return false;\r
+       }\r
+       else\r
+       {\r
+               /* Port not in table but trying to close it, so operation successful */\r
+               return true;\r
+       }\r
+}\r
+\r
+/** Retrieves the current state of a given TCP port, specified in big endian.\r
+ *\r
+ *  \param Port  TCP port whose state is to be retrieved, given in big-endian\r
+ *\r
+ *  \return A value from the TCP_PortStates_t enum\r
+ */\r
+uint8_t TCP_GetPortState(uint16_t Port)\r
+{\r
+       /* Note, Port number should be specified in BIG endian to simplify network code */\r
+\r
+       for (uint8_t PTableEntry = 0; PTableEntry < MAX_TCP_CONNECTIONS; PTableEntry++)\r
+       {\r
+               /* Find existing entry for the port in the table, return the port status if found */\r
+               if (PortStateTable[PTableEntry].Port == Port)\r
+                 return PortStateTable[PTableEntry].State;\r
+       }\r
+       \r
+       /* Port not in table, assume closed */\r
+       return TCP_Port_Closed;\r
+}\r
+\r
+/** Sets the connection state of the given port, remote address and remote port to the given TCP connection state. If the\r
+ *  connection exists in the connection state table it is updated, otherwise it is created if possible.\r
+ *\r
+ *  \param Port           TCP port of the connection on the device, specified in big endian\r
+ *  \param RemoteAddress  Remote protocol IP address of the connected device\r
+ *  \param RemotePort     TCP port of the remote device in the connection, specified in big endian\r
+ *  \param State          TCP connection state, a value from the TCP_ConnectionStates_t enum\r
+ *\r
+ *  \return Boolean true if the connection was updated or created, false otherwise (no more space in the connection state table)\r
+ */\r
+bool TCP_SetConnectionState(uint16_t Port, IP_Address_t RemoteAddress, uint16_t RemotePort, uint8_t State)\r
+{\r
+       /* Note, Port number should be specified in BIG endian to simplify network code */\r
+\r
+       for (uint8_t CSTableEntry = 0; CSTableEntry < MAX_TCP_CONNECTIONS; CSTableEntry++)\r
+       {\r
+               /* Find port entry in the table */\r
+               if ((ConnectionStateTable[CSTableEntry].Port == Port) &&\r
+                    IP_COMPARE(&ConnectionStateTable[CSTableEntry].RemoteAddress, &RemoteAddress) &&\r
+                        ConnectionStateTable[CSTableEntry].RemotePort == RemotePort)\r
+               {\r
+                       ConnectionStateTable[CSTableEntry].State = State;\r
+                       return true;\r
+               }\r
+       }\r
+       \r
+       for (uint8_t CSTableEntry = 0; CSTableEntry < MAX_TCP_CONNECTIONS; CSTableEntry++)\r
+       {\r
+               /* Find empty entry in the table */\r
+               if (ConnectionStateTable[CSTableEntry].State == TCP_Connection_Closed)\r
+               {\r
+                       ConnectionStateTable[CSTableEntry].Port          = Port;\r
+                       ConnectionStateTable[CSTableEntry].RemoteAddress = RemoteAddress;                       \r
+                       ConnectionStateTable[CSTableEntry].RemotePort    = RemotePort;\r
+                       ConnectionStateTable[CSTableEntry].State         = State;\r
+                       return true;\r
+               }\r
+       }\r
+       \r
+       return false;\r
+}\r
+\r
+/** Retrieves the current state of a given TCP connection to a host.\r
+ *\r
+ *  \param Port           TCP port on the device in the connection, specified in big endian\r
+ *  \param RemoteAddress  Remote protocol IP address of the connected host\r
+ *  \param RemotePort     Remote TCP port of the connected host, specified in big endian\r
+ *\r
+ *  \return A value from the TCP_ConnectionStates_t enum\r
+ */\r
+uint8_t TCP_GetConnectionState(uint16_t Port, IP_Address_t RemoteAddress, uint16_t RemotePort)\r
+{\r
+       /* Note, Port number should be specified in BIG endian to simplify network code */\r
+\r
+       for (uint8_t CSTableEntry = 0; CSTableEntry < MAX_TCP_CONNECTIONS; CSTableEntry++)\r
+       {\r
+               /* Find port entry in the table */\r
+               if ((ConnectionStateTable[CSTableEntry].Port == Port) &&\r
+                    IP_COMPARE(&ConnectionStateTable[CSTableEntry].RemoteAddress, &RemoteAddress) &&\r
+                        ConnectionStateTable[CSTableEntry].RemotePort == RemotePort)\r
+                        \r
+               {\r
+                       return ConnectionStateTable[CSTableEntry].State;\r
+               }\r
+       }\r
+       \r
+       return TCP_Connection_Closed;\r
+}\r
+\r
+/** Retrieves the connection info structure of a given connection to a host.\r
+ *\r
+ *  \param Port           TCP port on the device in the connection, specified in big endian\r
+ *  \param RemoteAddress  Remote protocol IP address of the connected host\r
+ *  \param RemotePort     Remote TCP port of the connected host, specified in big endian\r
+ *\r
+ *  \return ConnectionInfo structure of the connection if found, NULL otherwise\r
+ */\r
+TCP_ConnectionInfo_t* TCP_GetConnectionInfo(uint16_t Port, IP_Address_t RemoteAddress, uint16_t RemotePort)\r
+{\r
+       /* Note, Port number should be specified in BIG endian to simplify network code */\r
+\r
+       for (uint8_t CSTableEntry = 0; CSTableEntry < MAX_TCP_CONNECTIONS; CSTableEntry++)\r
+       {\r
+               /* Find port entry in the table */\r
+               if ((ConnectionStateTable[CSTableEntry].Port == Port) &&\r
+                    IP_COMPARE(&ConnectionStateTable[CSTableEntry].RemoteAddress, &RemoteAddress) &&\r
+                        ConnectionStateTable[CSTableEntry].RemotePort == RemotePort)\r
+               {\r
+                       return &ConnectionStateTable[CSTableEntry].Info;\r
+               }\r
+       }\r
+       \r
+       return NULL;\r
+}\r
+\r
+/** Processes a TCP packet inside an Ethernet frame, and writes the appropriate response\r
+ *  to the output Ethernet frame if one is created by a application handler.\r
+ *\r
+ *  \param IPHeaderInStart    Pointer to the start of the incoming packet's IP header\r
+ *  \param TCPHeaderInStart   Pointer to the start of the incoming packet's TCP header\r
+ *  \param TCPHeaderOutStart  Pointer to the start of the outgoing packet's TCP header\r
+ *\r
+ *  \return The number of bytes written to the out Ethernet frame if any, NO_RESPONSE if no\r
+ *           response was generated, NO_PROCESS if the packet processing was deferred until the\r
+ *           next Ethernet packet handler iteration\r
+ */\r
+int16_t TCP_ProcessTCPPacket(void* IPHeaderInStart, void* TCPHeaderInStart, void* TCPHeaderOutStart)\r
+{\r
+       IP_Header_t*  IPHeaderIN   = (IP_Header_t*)IPHeaderInStart;\r
+       TCP_Header_t* TCPHeaderIN  = (TCP_Header_t*)TCPHeaderInStart;\r
+       TCP_Header_t* TCPHeaderOUT = (TCP_Header_t*)TCPHeaderOutStart;\r
+\r
+       TCP_ConnectionInfo_t* ConnectionInfo;\r
+       \r
+       DecodeTCPHeader(TCPHeaderInStart);\r
+\r
+       bool PacketResponse = false;\r
+               \r
+       /* Check if the destination port is open and allows incoming connections */\r
+       if (TCP_GetPortState(TCPHeaderIN->DestinationPort) == TCP_Port_Open)\r
+       {\r
+               /* Detect SYN from host to start a connection */\r
+               if (TCPHeaderIN->Flags & TCP_FLAG_SYN)\r
+                 TCP_SetConnectionState(TCPHeaderIN->DestinationPort, IPHeaderIN->SourceAddress, TCPHeaderIN->SourcePort, TCP_Connection_Listen);\r
+\r
+               /* Detect RST from host to abort existing connection */\r
+               if (TCPHeaderIN->Flags & TCP_FLAG_RST)\r
+               {\r
+                       TCPHeaderOUT->Flags = (TCP_FLAG_RST | TCP_FLAG_ACK);                            \r
+                       PacketResponse = true;\r
+                       \r
+                       TCP_SetConnectionState(TCPHeaderIN->DestinationPort, IPHeaderIN->SourceAddress,\r
+                                              TCPHeaderIN->SourcePort, TCP_Connection_Closed);                 \r
+               }\r
+               else\r
+               {\r
+                       /* Process the incoming TCP packet based on the current connection state for the sender and port */\r
+                       switch (TCP_GetConnectionState(TCPHeaderIN->DestinationPort, IPHeaderIN->SourceAddress, TCPHeaderIN->SourcePort))\r
+                       {\r
+                               case TCP_Connection_Listen:\r
+                                       if (TCPHeaderIN->Flags == TCP_FLAG_SYN)\r
+                                       {\r
+                                               /* SYN connection when closed starts a connection with a peer */\r
+\r
+                                               TCPHeaderOUT->Flags = (TCP_FLAG_SYN | TCP_FLAG_ACK);                            \r
+                                               PacketResponse      = true;\r
+                                                                       \r
+                                               TCP_SetConnectionState(TCPHeaderIN->DestinationPort, IPHeaderIN->SourceAddress, TCPHeaderIN->SourcePort,\r
+                                                                                          TCP_Connection_SYNReceived);\r
+                                                                                          \r
+                                               ConnectionInfo = TCP_GetConnectionInfo(TCPHeaderIN->DestinationPort, IPHeaderIN->SourceAddress, TCPHeaderIN->SourcePort);\r
+\r
+                                               ConnectionInfo->SequenceNumberIn  = (SwapEndian_32(TCPHeaderIN->SequenceNumber) + 1);\r
+                                               ConnectionInfo->SequenceNumberOut = 0;\r
+                                               ConnectionInfo->Buffer.InUse      = false;\r
+                                       }\r
+                                       \r
+                                       break;\r
+                               case TCP_Connection_SYNReceived:\r
+                                       if (TCPHeaderIN->Flags == TCP_FLAG_ACK)\r
+                                       {\r
+                                               /* ACK during the connection process completes the connection to a peer */\r
+\r
+                                               TCP_SetConnectionState(TCPHeaderIN->DestinationPort, IPHeaderIN->SourceAddress,\r
+                                                                                          TCPHeaderIN->SourcePort, TCP_Connection_Established);\r
+\r
+                                               ConnectionInfo = TCP_GetConnectionInfo(TCPHeaderIN->DestinationPort, IPHeaderIN->SourceAddress,\r
+                                                                                                                          TCPHeaderIN->SourcePort);\r
+                                                                                                                          \r
+                                               ConnectionInfo->SequenceNumberOut++;\r
+                                       }\r
+                                       \r
+                                       break;\r
+                               case TCP_Connection_Established:\r
+                                       if (TCPHeaderIN->Flags == (TCP_FLAG_FIN | TCP_FLAG_ACK))\r
+                                       {\r
+                                               /* FIN ACK when connected to a peer starts the finalization process */\r
+                                       \r
+                                               TCPHeaderOUT->Flags = (TCP_FLAG_FIN | TCP_FLAG_ACK);                            \r
+                                               PacketResponse      = true;\r
+                                               \r
+                                               TCP_SetConnectionState(TCPHeaderIN->DestinationPort, IPHeaderIN->SourceAddress,\r
+                                                                                          TCPHeaderIN->SourcePort, TCP_Connection_CloseWait);\r
+\r
+                                               ConnectionInfo = TCP_GetConnectionInfo(TCPHeaderIN->DestinationPort, IPHeaderIN->SourceAddress,\r
+                                                                                                                          TCPHeaderIN->SourcePort);\r
+\r
+                                               ConnectionInfo->SequenceNumberIn++;\r
+                                               ConnectionInfo->SequenceNumberOut++;\r
+                                       }\r
+                                       else if ((TCPHeaderIN->Flags == TCP_FLAG_ACK) || (TCPHeaderIN->Flags == (TCP_FLAG_ACK | TCP_FLAG_PSH)))\r
+                                       {\r
+                                               ConnectionInfo = TCP_GetConnectionInfo(TCPHeaderIN->DestinationPort, IPHeaderIN->SourceAddress,\r
+                                                                                                                          TCPHeaderIN->SourcePort);\r
+\r
+                                               /* Check if the buffer is currently in use either by a buffered data to send, or receive */             \r
+                                               if ((ConnectionInfo->Buffer.InUse == false) && (ConnectionInfo->Buffer.Ready == false))\r
+                                               {                                               \r
+                                                       ConnectionInfo->Buffer.Direction = TCP_PACKETDIR_IN;\r
+                                                       ConnectionInfo->Buffer.InUse     = true;\r
+                                                       ConnectionInfo->Buffer.Length    = 0;\r
+                                               }\r
+                                               \r
+                                               /* Check if the buffer has been claimed by us to read in data from the peer */\r
+                                               if ((ConnectionInfo->Buffer.Direction == TCP_PACKETDIR_IN) &&\r
+                                                       (ConnectionInfo->Buffer.Length != TCP_WINDOW_SIZE))\r
+                                               {\r
+                                                       uint16_t IPOffset   = (IPHeaderIN->HeaderLength * sizeof(uint32_t));\r
+                                                       uint16_t TCPOffset  = (TCPHeaderIN->DataOffset * sizeof(uint32_t));\r
+                                                       uint16_t DataLength = (SwapEndian_16(IPHeaderIN->TotalLength) - IPOffset - TCPOffset);\r
+\r
+                                                       /* Copy the packet data into the buffer */\r
+                                                       memcpy(&ConnectionInfo->Buffer.Data[ConnectionInfo->Buffer.Length],\r
+                                                                  &((uint8_t*)TCPHeaderInStart)[TCPOffset],\r
+                                                                  DataLength);\r
+\r
+                                                       ConnectionInfo->SequenceNumberIn += DataLength;\r
+                                                       ConnectionInfo->Buffer.Length    += DataLength;\r
+                                                       \r
+                                                       /* Check if the buffer is full or if the PSH flag is set, if so indicate buffer ready */\r
+                                                       if ((!(TCP_WINDOW_SIZE - ConnectionInfo->Buffer.Length)) || (TCPHeaderIN->Flags & TCP_FLAG_PSH))\r
+                                                       {\r
+                                                               ConnectionInfo->Buffer.InUse = false;\r
+                                                               ConnectionInfo->Buffer.Ready = true;\r
+\r
+                                                               TCPHeaderOUT->Flags = TCP_FLAG_ACK;\r
+                                                               PacketResponse      = true;\r
+                                                       }\r
+                                               }\r
+                                               else\r
+                                               {\r
+                                                       /* Buffer is currently in use by the application, defer processing of the incoming packet */\r
+                                                       return NO_PROCESS;\r
+                                               }\r
+                                       }\r
+                                       \r
+                                       break;\r
+                               case TCP_Connection_Closing:\r
+                                               ConnectionInfo = TCP_GetConnectionInfo(TCPHeaderIN->DestinationPort, IPHeaderIN->SourceAddress,\r
+                                                                                                                          TCPHeaderIN->SourcePort);\r
+\r
+                                               TCPHeaderOUT->Flags = (TCP_FLAG_ACK | TCP_FLAG_FIN);\r
+                                               PacketResponse      = true;\r
+                                               \r
+                                               ConnectionInfo->Buffer.InUse = false;\r
+                                               \r
+                                               TCP_SetConnectionState(TCPHeaderIN->DestinationPort, IPHeaderIN->SourceAddress,\r
+                                                                                          TCPHeaderIN->SourcePort, TCP_Connection_FINWait1);\r
+\r
+                                       break;\r
+                               case TCP_Connection_FINWait1:\r
+                                       if (TCPHeaderIN->Flags == (TCP_FLAG_FIN | TCP_FLAG_ACK))\r
+                                       {\r
+                                               ConnectionInfo = TCP_GetConnectionInfo(TCPHeaderIN->DestinationPort, IPHeaderIN->SourceAddress,\r
+                                                                                                                          TCPHeaderIN->SourcePort);\r
+\r
+                                               TCPHeaderOUT->Flags = TCP_FLAG_ACK;\r
+                                               PacketResponse      = true;\r
+\r
+                                               ConnectionInfo->SequenceNumberIn++;\r
+                                               ConnectionInfo->SequenceNumberOut++;\r
+                                               \r
+                                               TCP_SetConnectionState(TCPHeaderIN->DestinationPort, IPHeaderIN->SourceAddress,\r
+                                                                                          TCPHeaderIN->SourcePort, TCP_Connection_Closed);\r
+                                       }\r
+                                       else if (TCPHeaderIN->Flags == TCP_FLAG_ACK)\r
+                                       {\r
+                                               TCP_SetConnectionState(TCPHeaderIN->DestinationPort, IPHeaderIN->SourceAddress,\r
+                                                                                          TCPHeaderIN->SourcePort, TCP_Connection_FINWait2);\r
+                                       }\r
+                                       \r
+                                       break;\r
+                               case TCP_Connection_FINWait2:\r
+                                       if (TCPHeaderIN->Flags == (TCP_FLAG_FIN | TCP_FLAG_ACK))\r
+                                       {\r
+                                               ConnectionInfo = TCP_GetConnectionInfo(TCPHeaderIN->DestinationPort, IPHeaderIN->SourceAddress,\r
+                                                                                                                          TCPHeaderIN->SourcePort);\r
+\r
+                                               TCPHeaderOUT->Flags = TCP_FLAG_ACK;\r
+                                               PacketResponse      = true;\r
+\r
+                                               ConnectionInfo->SequenceNumberIn++;\r
+                                               ConnectionInfo->SequenceNumberOut++;\r
+                                               \r
+                                               TCP_SetConnectionState(TCPHeaderIN->DestinationPort, IPHeaderIN->SourceAddress,\r
+                                                                                          TCPHeaderIN->SourcePort, TCP_Connection_Closed);\r
+                                       }\r
+                               \r
+                                       break;\r
+                               case TCP_Connection_CloseWait:\r
+                                       if (TCPHeaderIN->Flags == TCP_FLAG_ACK)\r
+                                       {\r
+                                               TCP_SetConnectionState(TCPHeaderIN->DestinationPort, IPHeaderIN->SourceAddress,\r
+                                                                                          TCPHeaderIN->SourcePort, TCP_Connection_Closed);\r
+                                       }\r
+                                       \r
+                                       break;\r
+                       }\r
+               }\r
+       }\r
+       else\r
+       {\r
+               /* Port is not open, indicate via a RST/ACK response to the sender */\r
+               TCPHeaderOUT->Flags = (TCP_FLAG_RST | TCP_FLAG_ACK);                            \r
+               PacketResponse      = true;\r
+       }\r
+       \r
+       /* Check if we need to respond to the sent packet */\r
+       if (PacketResponse)\r
+       {\r
+               ConnectionInfo = TCP_GetConnectionInfo(TCPHeaderIN->DestinationPort, IPHeaderIN->SourceAddress,\r
+                                                      TCPHeaderIN->SourcePort);\r
+\r
+               TCPHeaderOUT->SourcePort           = TCPHeaderIN->DestinationPort;\r
+               TCPHeaderOUT->DestinationPort      = TCPHeaderIN->SourcePort;\r
+               TCPHeaderOUT->SequenceNumber       = SwapEndian_32(ConnectionInfo->SequenceNumberOut);\r
+               TCPHeaderOUT->AcknowledgmentNumber = SwapEndian_32(ConnectionInfo->SequenceNumberIn);\r
+               TCPHeaderOUT->DataOffset           = (sizeof(TCP_Header_t) / sizeof(uint32_t));\r
+               \r
+               if (!(ConnectionInfo->Buffer.InUse))\r
+                 TCPHeaderOUT->WindowSize         = SwapEndian_16(TCP_WINDOW_SIZE);\r
+               else\r
+                 TCPHeaderOUT->WindowSize         = SwapEndian_16(TCP_WINDOW_SIZE - ConnectionInfo->Buffer.Length);\r
+\r
+               TCPHeaderOUT->UrgentPointer        = 0;\r
+               TCPHeaderOUT->Checksum             = 0;\r
+               TCPHeaderOUT->Reserved             = 0;\r
+               \r
+               TCPHeaderOUT->Checksum             = TCP_Checksum16(TCPHeaderOUT, IPHeaderIN->DestinationAddress,\r
+                                                                   IPHeaderIN->SourceAddress, sizeof(TCP_Header_t));                                   \r
+\r
+               return sizeof(TCP_Header_t);    \r
+       }\r
+\r
+       return NO_RESPONSE;\r
+}\r
+\r
+/** Calculates the appropriate TCP checksum, consisting of the addition of the one's compliment of each word,\r
+ *  complimented.\r
+ *\r
+ *  \param TCPHeaderOutStart  Pointer to the start of the packet's outgoing TCP header\r
+ *  \param SourceAddress      Source protocol IP address of the outgoing IP header\r
+ *  \param DestinationAddress DestinationAddress protocol IP address of the outgoing IP header\r
+ *  \param TCPOutSize         Size in bytes of the TCP data header and payload\r
+ *\r
+ *  \return A 16-bit TCP checksum value\r
+ */\r
+static uint16_t TCP_Checksum16(void* TCPHeaderOutStart, IP_Address_t SourceAddress,\r
+                               IP_Address_t DestinationAddress, uint16_t TCPOutSize)\r
+{\r
+       uint32_t Checksum = 0;\r
+       \r
+       /* TCP/IP checksums are the addition of the one's compliment of each word including the IP pseudo-header,\r
+          complimented */\r
+       \r
+       Checksum += ((uint16_t*)&SourceAddress)[0];\r
+       Checksum += ((uint16_t*)&SourceAddress)[1];\r
+       Checksum += ((uint16_t*)&DestinationAddress)[0];\r
+       Checksum += ((uint16_t*)&DestinationAddress)[1];\r
+       Checksum += SwapEndian_16(PROTOCOL_TCP);\r
+       Checksum += SwapEndian_16(TCPOutSize);\r
+\r
+       for (uint8_t CurrWord = 0; CurrWord < (TCPOutSize >> 1); CurrWord++)\r
+         Checksum += ((uint16_t*)TCPHeaderOutStart)[CurrWord];\r
+       \r
+       if (TCPOutSize & 0x01)\r
+         Checksum += (((uint16_t*)TCPHeaderOutStart)[TCPOutSize >> 1] & 0x00FF);\r
+         \r
+       while (Checksum & 0xFFFF0000)\r
+         Checksum = ((Checksum & 0xFFFF) + (Checksum >> 16));\r
+       \r
+       return ~Checksum;\r
+}\r
diff --git a/Demos/Device/ClassDriver/RNDISEthernet/Lib/TCP.h b/Demos/Device/ClassDriver/RNDISEthernet/Lib/TCP.h
new file mode 100644 (file)
index 0000000..3448245
--- /dev/null
@@ -0,0 +1,249 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  Header file for TCP.c.\r
+ */\r
+\r
+#ifndef _TCP_H_\r
+#define _TCP_H_\r
+\r
+       /* Includes: */\r
+               #include <avr/io.h>\r
+               #include <stdbool.h>
+               \r
+               #include "EthernetProtocols.h"\r
+               #include "Ethernet.h"\r
+               #include "ProtocolDecoders.h"\r
+               \r
+       /* Macros: */\r
+               /** Maximum number of TCP ports which can be open at the one time */\r
+               #define MAX_OPEN_TCP_PORTS              1\r
+\r
+               /** Maximum number of TCP connections which can be sustained at the one time */\r
+               #define MAX_TCP_CONNECTIONS             1\r
+\r
+               /** TCP window size, giving the maximum number of bytes which can be buffered at the one time */\r
+               #define TCP_WINDOW_SIZE                 1024\r
+               \r
+               /** Port number for HTTP transmissions */\r
+               #define TCP_PORT_HTTP                   SwapEndian_16(80)\r
+               \r
+               /** Data direction indicator for a TCP application buffer, indicating data from host-to-device */\r
+               #define TCP_PACKETDIR_IN                false\r
+\r
+               /** Data direction indicator for a TCP application buffer, indicating data from device-to-host */\r
+               #define TCP_PACKETDIR_OUT               true\r
+               \r
+               /** Congestion Window Reduced TCP flag mask */\r
+               #define TCP_FLAG_CWR                    (1 << 7)\r
+\r
+               /** Explicit Congestion Notification TCP flag mask */\r
+               #define TCP_FLAG_ECE                    (1 << 6)\r
+\r
+               /** Urgent TCP flag mask */\r
+               #define TCP_FLAG_URG                    (1 << 5)\r
+\r
+               /** Data Acknowledge TCP flag mask */\r
+               #define TCP_FLAG_ACK                    (1 << 4)\r
+\r
+               /** Data Push TCP flag mask */\r
+               #define TCP_FLAG_PSH                    (1 << 3)\r
+\r
+               /** Reset TCP flag mask */\r
+               #define TCP_FLAG_RST                    (1 << 2)\r
+\r
+               /** Synchronize TCP flag mask */\r
+               #define TCP_FLAG_SYN                    (1 << 1)\r
+\r
+               /** Connection Finalize TCP flag mask */\r
+               #define TCP_FLAG_FIN                    (1 << 0)\r
+               \r
+               /** Application macro: Determines if the given application buffer contains a packet received from the host\r
+                *\r
+                *  \param Buffer  Application buffer to check\r
+                *\r
+                *  \return Boolean true if the buffer contains a packet from the host, false otherwise\r
+                */\r
+               #define TCP_APP_HAS_RECEIVED_PACKET(Buffer)  (Buffer->Ready && (Buffer->Direction == TCP_PACKETDIR_IN))\r
+\r
+               /** Application macro: Indicates if the application buffer is currently locked by the application for device-to-host transfers.\r
+                *\r
+                *  \param Buffer  Application buffer to check\r
+                *\r
+                *  \return Boolean true if the buffer has been captured by the application for device-to-host transmissions, false otherwise\r
+                */\r
+               #define TCP_APP_HAVE_CAPTURED_BUFFER(Buffer) (!(Buffer->Ready) && Buffer->InUse && \\r
+                                                             (Buffer->Direction == TCP_PACKETDIR_OUT))\r
+\r
+               /** Application macro: Indicates if the application can lock the buffer for multiple continued device-to-host transmissions.\r
+                *\r
+                *  \param Buffer  Application buffer to check\r
+                *\r
+                *  \return Boolean true if the buffer may be captured by the application for device-to-host transmissions, false otherwise\r
+                */\r
+               #define TCP_APP_CAN_CAPTURE_BUFFER(Buffer)   Buffer->InUse\r
+\r
+               /** Application macro: Captures the application buffer, locking it for device-to-host transmissions only. This should be\r
+                *  performed when the application needs to transmit several packets worth of data in succession with no interruptions from the host.\r
+                *\r
+                *  \note The application must check that the buffer can be locked first using TCP_APP_CAN_CAPTURE_BUFFER().\r
+                *\r
+                *  \param Buffer  Application buffer to lock\r
+                */\r
+               #define TCP_APP_CAPTURE_BUFFER(Buffer)       MACROS{ Buffer->Direction = TCP_PACKETDIR_OUT; Buffer->InUse = true; }MACROE\r
+\r
+               /** Application macro: Releases a captured application buffer, allowing for host-to-device packets to be received.\r
+                *\r
+                *  \param Buffer  Application buffer to release\r
+                */\r
+               #define TCP_APP_RELEASE_BUFFER(Buffer)       MACROS{ Buffer->InUse = false; }MACROE\r
+\r
+               /** Application macro: Sends the contents of the given application buffer to the host.\r
+                *\r
+                *  \param Buffer  Application buffer to send\r
+                *  \param Len     Length of data contained in the buffer\r
+                */\r
+               #define TCP_APP_SEND_BUFFER(Buffer, Len)     MACROS{ Buffer->Direction = TCP_PACKETDIR_OUT; Buffer->Length = Len; Buffer->Ready = true; }MACROE\r
+\r
+               /** Application macro: Clears the application buffer, ready for a packet to be written to it.\r
+                *\r
+                *  \param Buffer  Application buffer to clear\r
+                */\r
+               #define TCP_APP_CLEAR_BUFFER(Buffer)         MACROS{ Buffer->Ready = false; Buffer->Length = 0; }MACROE\r
+               \r
+               /** Application macro: Closes an open connection to a host.\r
+                *\r
+                *  \param Connection  Open TCP connection to close\r
+                */\r
+               #define TCP_APP_CLOSECONNECTION(Connection)  MACROS{ Connection->State = TCP_Connection_Closing;  }MACROE\r
+\r
+       /* Enums: */\r
+               /** Enum for possible TCP port states */\r
+               enum TCP_PortStates_t\r
+               {\r
+                       TCP_Port_Closed            = 0, /**< TCP port closed, no connections to a host may be made on this port. */\r
+                       TCP_Port_Open              = 1, /**< TCP port open, connections to a host may be made on this port. */\r
+               };\r
+       \r
+               /** Enum for possible TCP connection states */\r
+               enum TCP_ConnectionStates_t\r
+               {\r
+                       TCP_Connection_Listen      = 0, /**< Listening for a connection from a host */\r
+                       TCP_Connection_SYNSent     = 1, /**< Unused */\r
+                       TCP_Connection_SYNReceived = 2, /**< SYN received, waiting for ACK */\r
+                       TCP_Connection_Established = 3, /**< Connection established in both directions */\r
+                       TCP_Connection_FINWait1    = 4, /**< Closing, waiting for ACK */\r
+                       TCP_Connection_FINWait2    = 5, /**< Closing, waiting for FIN ACK */\r
+                       TCP_Connection_CloseWait   = 6, /**< Closing, waiting for ACK */\r
+                       TCP_Connection_Closing     = 7, /**< Unused */\r
+                       TCP_Connection_LastACK     = 8, /**< Unused */\r
+                       TCP_Connection_TimeWait    = 9, /**< Unused */\r
+                       TCP_Connection_Closed      = 10, /**< Connection closed in both directions */                   \r
+               };\r
+       \r
+       /* Type Defines: */\r
+               /** Type define for a TCP connection buffer structure, including size, data and direction */\r
+               typedef struct\r
+               {\r
+                       uint16_t               Length; /**< Length of data in the TCP application buffer */\r
+                       uint8_t                Data[TCP_WINDOW_SIZE]; /**< TCP application data buffer */\r
+                       bool                   Direction; /**< Buffer transmission direction, either TCP_PACKETDIR_IN  or TCP_PACKETDIR_OUT */\r
+                       bool                   Ready; /**< If data from host, indicates buffer ready to be read, otherwise indicates\r
+                                                      *   buffer ready to be sent to the host\r
+                                                      */\r
+                       bool                   InUse; /** Indicates if the buffer is locked to to the current direction, and cannot be changed */\r
+               } TCP_ConnectionBuffer_t;\r
+\r
+               /** Type define for a TCP connection information structure */\r
+               typedef struct\r
+               {\r
+                       uint32_t               SequenceNumberIn; /**< Current TCP sequence number for host-to-device */ \r
+                       uint32_t               SequenceNumberOut; /**< Current TCP sequence number for device-to-host */\r
+                       TCP_ConnectionBuffer_t Buffer; /**< Connection application data buffer */\r
+               } TCP_ConnectionInfo_t;\r
+\r
+               /** Type define for a complete TCP connection state */\r
+               typedef struct\r
+               {\r
+                       uint16_t               Port; /**< Connection port number on the device */\r
+                       uint16_t               RemotePort; /**< Connection port number on the host */\r
+                       IP_Address_t           RemoteAddress; /**< Connection protocol IP address of the host */\r
+                       TCP_ConnectionInfo_t   Info; /**< Connection information, including application buffer */\r
+                       uint8_t                State; /**< Current connection state, a value from the TCP_ConnectionStates_t enum */\r
+               } TCP_ConnectionState_t;\r
+\r
+               /** Type define for a TCP port state */\r
+               typedef struct\r
+               {\r
+                       uint16_t               Port; /**< TCP port number on the device */\r
+                       uint8_t                State; /**< Current port state, a value from the TCP_PortStates_t enum */\r
+                       void                   (*ApplicationHandler) (TCP_ConnectionState_t* ConnectionState,\r
+                                                                     TCP_ConnectionBuffer_t* Buffer); /**< Port application handler */\r
+               } TCP_PortState_t;\r
+\r
+               /** Type define for a TCP packet header */\r
+               typedef struct\r
+               {\r
+                       uint16_t               SourcePort; /**< Source port of the TCP packet */\r
+                       uint16_t               DestinationPort; /**< Destination port of the TCP packet */\r
+                       \r
+                       uint32_t               SequenceNumber; /**< Data sequence number of the packet */\r
+                       uint32_t               AcknowledgmentNumber; /**< Data acknowledgment number of the packet */\r
+                       \r
+                       unsigned char          Reserved : 4; /**< Reserved, must be all 0 */\r
+                       unsigned char          DataOffset : 4; /**< Offset of the data from the start of the header, in 4 byte chunks */\r
+                       uint8_t                Flags; /**< TCP packet flags */\r
+                       uint16_t               WindowSize; /**< Current data window size (bytes remaining in reception buffer) */\r
+                       \r
+                       uint16_t               Checksum; /**< TCP checksum */\r
+                       uint16_t               UrgentPointer; /**< Urgent data pointer */\r
+               } TCP_Header_t;\r
+               \r
+       /* External Variables: */\r
+               TCP_PortState_t PortStateTable[MAX_OPEN_TCP_PORTS];\r
+\r
+       /* Function Prototypes: */\r
+               void                  TCP_TCPTask(USB_ClassInfo_RNDIS_t* RNDISInterfaceInfo);\r
+               void                  TCP_Init(void);\r
+               bool                  TCP_SetPortState(uint16_t Port, uint8_t State, void (*Handler)(TCP_ConnectionState_t*, TCP_ConnectionBuffer_t*));\r
+               uint8_t               TCP_GetPortState(uint16_t Port);\r
+               bool                  TCP_SetConnectionState(uint16_t Port, IP_Address_t RemoteAddress, uint16_t RemotePort, uint8_t State);\r
+               uint8_t               TCP_GetConnectionState(uint16_t Port, IP_Address_t RemoteAddress, uint16_t RemotePort);\r
+               TCP_ConnectionInfo_t* TCP_GetConnectionInfo(uint16_t Port, IP_Address_t RemoteAddress, uint16_t RemotePort);\r
+               int16_t               TCP_ProcessTCPPacket(void* IPHeaderInStart, void* TCPHeaderInStart, void* TCPHeaderOutStart);\r
+\r
+               #if defined(INCLUDE_FROM_TCP_C)\r
+                       static uint16_t TCP_Checksum16(void* TCPHeaderOutStart, IP_Address_t SourceAddress,\r
+                                                                                  IP_Address_t DestinationAddress, uint16_t TCPOutSize);\r
+               #endif\r
+\r
+#endif\r
diff --git a/Demos/Device/ClassDriver/RNDISEthernet/Lib/UDP.c b/Demos/Device/ClassDriver/RNDISEthernet/Lib/UDP.c
new file mode 100644 (file)
index 0000000..1f571c3
--- /dev/null
@@ -0,0 +1,80 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  User Datagram Protocol (UDP) packet handling routines. This protocol handles high throughput, low\r
+ *  reliability packets which are typically used to encapsulate streaming data.\r
+ */\r
\r
+#define  INCLUDE_FROM_UDP_C\r
+#include "UDP.h"\r
+\r
+/** Processes a UDP packet inside an Ethernet frame, and writes the appropriate response\r
+ *  to the output Ethernet frame if a subprotocol handler has created a response packet.\r
+ *\r
+ *  \param IPHeaderInStart    Pointer to the start of the incoming packet's IP header\r
+ *  \param UDPHeaderInStart   Pointer to the start of the incoming packet's UDP header\r
+ *  \param UDPHeaderOutStart  Pointer to the start of the outgoing packet's UDP header\r
+ *\r
+ *  \return The number of bytes written to the out Ethernet frame if any, NO_RESPONSE otherwise\r
+ */\r
+int16_t UDP_ProcessUDPPacket(void* IPHeaderInStart, void* UDPHeaderInStart, void* UDPHeaderOutStart)\r
+{\r
+       UDP_Header_t* UDPHeaderIN  = (UDP_Header_t*)UDPHeaderInStart;\r
+       UDP_Header_t* UDPHeaderOUT = (UDP_Header_t*)UDPHeaderOutStart;\r
+       \r
+       int16_t RetSize = NO_RESPONSE;\r
+       \r
+       DecodeUDPHeader(UDPHeaderInStart);\r
+       \r
+       /* Check to see if the UDP packet is a DHCP packet */\r
+       if (SwapEndian_16(UDPHeaderIN->DestinationPort) == UDP_PORT_DHCP_REQUEST)\r
+       {\r
+               RetSize = DHCP_ProcessDHCPPacket(IPHeaderInStart,\r
+                                                &((uint8_t*)UDPHeaderInStart)[sizeof(UDP_Header_t)],\r
+                                            &((uint8_t*)UDPHeaderOutStart)[sizeof(UDP_Header_t)]);\r
+       }\r
+       \r
+       /* Check to see if the protocol processing routine has filled out a response */\r
+       if (RetSize > 0)\r
+       {\r
+               /* Fill out the response UDP packet header */\r
+               UDPHeaderOUT->SourcePort      = UDPHeaderIN->DestinationPort;\r
+               UDPHeaderOUT->DestinationPort = UDPHeaderIN->SourcePort;\r
+               UDPHeaderOUT->Checksum        = 0;\r
+               UDPHeaderOUT->Length          = SwapEndian_16(sizeof(UDP_Header_t) + RetSize);\r
+\r
+               /* Return the size of the response so far */\r
+               return (sizeof(UDP_Header_t) + RetSize);\r
+       }\r
+       \r
+       return NO_RESPONSE;\r
+}\r
diff --git a/Demos/Device/ClassDriver/RNDISEthernet/Lib/UDP.h b/Demos/Device/ClassDriver/RNDISEthernet/Lib/UDP.h
new file mode 100644 (file)
index 0000000..60bbe21
--- /dev/null
@@ -0,0 +1,66 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  Header file for IP.c.\r
+ */\r
+\r
+#ifndef _UDP_H_\r
+#define _UDP_H_\r
+\r
+       /* Includes: */\r
+               #include <avr/io.h>\r
+       \r
+               #include "EthernetProtocols.h"\r
+               #include "Ethernet.h"\r
+               #include "ProtocolDecoders.h"\r
+       \r
+       /* Macros: */\r
+               /** Source UDP port for a DHCP request */\r
+               #define UDP_PORT_DHCP_REQUEST 67\r
+\r
+               /** Destination UDP port for a DHCP reply */\r
+               #define UDP_PORT_DHCP_REPLY   68\r
+                       \r
+       /* Type Defines: */\r
+               /** Type define for a UDP packet header */\r
+               typedef struct\r
+               {\r
+                       uint16_t SourcePort; /**< Packet source port */\r
+                       uint16_t DestinationPort; /**< Packet destination port */\r
+                       uint16_t Length; /**< Total packet length, in bytes */\r
+                       uint16_t Checksum; /**< Optional UDP packet checksum */\r
+               } UDP_Header_t;\r
+               \r
+       /* Function Prototypes: */\r
+               int16_t UDP_ProcessUDPPacket(void* IPHeaderInStart, void* UDPHeaderInStart, void* UDPHeaderOutStart);\r
+\r
+#endif\r
diff --git a/Demos/Device/ClassDriver/RNDISEthernet/Lib/Webserver.c b/Demos/Device/ClassDriver/RNDISEthernet/Lib/Webserver.c
new file mode 100644 (file)
index 0000000..c07f2c8
--- /dev/null
@@ -0,0 +1,162 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  Simple webserver application for demonstrating the RNDIS demo and TCP/IP stack. This\r
+ *  application will serve up a static HTTP webpage when requested by the host.\r
+ */\r
+\r
+#include "Webserver.h"\r
+\r
+/** HTTP server response header, for transmission before the page contents. This indicates to the host that a page exists at the\r
+ *  given location, and gives extra connection information.\r
+ */\r
+char PROGMEM HTTPHeader[] = "HTTP/1.1 200 OK\r\n"\r
+                            "Server: LUFA RNDIS\r\n"\r
+                            "Content-type: text/html\r\n"\r
+                            "Connection: close\r\n\r\n";\r
+\r
+/** HTTP page to serve to the host when a HTTP request is made. This page is too long for a single response, thus it is automatically\r
+ *  broken up into smaller blocks and sent as a series of packets each time the webserver application callback is run.\r
+ */\r
+char PROGMEM HTTPPage[]   = \r
+               "<html>"\r
+               "       <head>"\r
+               "               <title>"\r
+               "                       LUFA Webserver Demo"\r
+               "               </title>"\r
+               "       </head>"\r
+               "       <body>"\r
+               "               <h1>Hello from your USB AVR!</h1>"\r
+               "               <p>"\r
+               "                       Hello! Welcome to the LUFA RNDIS Demo Webserver test page, running on your USB AVR via the LUFA library. This demonstrates the HTTP webserver, TCP/IP stack and RNDIS demo all running atop the LUFA USB stack."\r
+               "                       <br /><br />"\r
+               "                       <small>Project Information: <a href=\"http://www.fourwalledcubicle.com/LUFA.php\">http://www.fourwalledcubicle.com/LUFA.php</a>.</small>"\r
+               "                       <hr />"\r
+               "                       <i>LUFA Version: </i>" LUFA_VERSION_STRING\r
+               "               </p>"\r
+               "       </body>"\r
+               "</html>";\r
+\r
+\r
+/** Initializes the Webserver application, opening the appropriate HTTP port in the TCP handler and registering the application\r
+ *  callback routine for packets sent to the HTTP protocol port.\r
+ */\r
+void Webserver_Init(void)\r
+{\r
+       /* Open the HTTP port in the TCP protocol so that HTTP connections to the device can be established */\r
+       TCP_SetPortState(TCP_PORT_HTTP, TCP_Port_Open, Webserver_ApplicationCallback);\r
+}\r
+\r
+/** Indicates if a given request equals the given HTTP command.\r
+ *\r
+ *  \param RequestHeader  HTTP request made by the host\r
+ *  \param Command        HTTP command to compare the request to\r
+ *\r
+ *  \return Boolean true if the command matches the request, false otherwise\r
+ */\r
+static bool IsHTTPCommand(uint8_t* RequestHeader, char* Command)\r
+{\r
+       /* Returns true if the non null terminated string in RequestHeader matches the null terminated string Command */\r
+       return (strncmp((char*)RequestHeader, Command, strlen(Command)) == 0);\r
+}\r
+\r
+/** Application callback routine, executed each time the TCP processing task runs. This callback determines what request\r
+ *  has been made (if any), and serves up appropriate responses.\r
+ *\r
+ *  \param ConnectionState  Pointer to a TCP Connection State structure giving connection information\r
+ *  \param Buffer           Pointer to the application's send/receive packet buffer\r
+ */\r
+void Webserver_ApplicationCallback(TCP_ConnectionState_t* ConnectionState, TCP_ConnectionBuffer_t* Buffer)\r
+{\r
+       char*          BufferDataStr = (char*)Buffer->Data;\r
+       static uint8_t PageBlock     = 0;\r
+       \r
+       /* Check to see if a packet has been received on the HTTP port from a remote host */\r
+       if (TCP_APP_HAS_RECEIVED_PACKET(Buffer))\r
+       {\r
+               if (IsHTTPCommand(Buffer->Data, "GET"))\r
+               {\r
+                       PageBlock = 0;\r
+\r
+                       /* Copy the HTTP response header into the packet buffer */\r
+                       strcpy_P(BufferDataStr, HTTPHeader);\r
+                       \r
+                       /* Send the buffer contents to the host */\r
+                       TCP_APP_SEND_BUFFER(Buffer, strlen(BufferDataStr));\r
+\r
+                       /* Lock the buffer to Device->Host transmissions only while we send the page contents */\r
+                       TCP_APP_CAPTURE_BUFFER(Buffer);\r
+               }\r
+               else if (IsHTTPCommand(Buffer->Data, "HEAD"))\r
+               {\r
+                       /* Copy the HTTP response header into the packet buffer */\r
+                       strcpy_P(BufferDataStr, HTTPHeader);\r
+\r
+                       /* Send the buffer contents to the host */\r
+                       TCP_APP_SEND_BUFFER(Buffer, strlen(BufferDataStr));\r
+               }\r
+               else if (IsHTTPCommand(Buffer->Data, "TRACE"))\r
+               {\r
+                       /* Echo the host's query back to the host */\r
+                       TCP_APP_SEND_BUFFER(Buffer, Buffer->Length);\r
+               }\r
+               else\r
+               {\r
+                       /* Unknown request, just clear the buffer (drop the packet) */\r
+                       TCP_APP_CLEAR_BUFFER(Buffer);\r
+               }\r
+       }\r
+       else if (TCP_APP_HAVE_CAPTURED_BUFFER(Buffer))\r
+       {\r
+               uint16_t RemLength = strlen_P(&HTTPPage[PageBlock * HTTP_REPLY_BLOCK_SIZE]);\r
+               uint16_t Length;\r
+       \r
+               /* Determine the length of the loaded block */\r
+               Length = ((RemLength > HTTP_REPLY_BLOCK_SIZE) ? HTTP_REPLY_BLOCK_SIZE : RemLength);\r
+\r
+               /* Copy the next buffer sized block of the page to the packet buffer */\r
+               strncpy_P(BufferDataStr, &HTTPPage[PageBlock * HTTP_REPLY_BLOCK_SIZE], Length);\r
+               \r
+               /* Send the buffer contents to the host */\r
+               TCP_APP_SEND_BUFFER(Buffer, Length);\r
+\r
+               /* Check to see if the entire page has been sent */\r
+               if (PageBlock++ == (sizeof(HTTPPage) / HTTP_REPLY_BLOCK_SIZE))\r
+               {\r
+                       /* Unlock the buffer so that the host can fill it with future packets */\r
+                       TCP_APP_RELEASE_BUFFER(Buffer);\r
+                       \r
+                       /* Close the connection to the host */\r
+                       TCP_APP_CLOSECONNECTION(ConnectionState);\r
+               }\r
+       }\r
+}\r
diff --git a/Demos/Device/ClassDriver/RNDISEthernet/Lib/Webserver.h b/Demos/Device/ClassDriver/RNDISEthernet/Lib/Webserver.h
new file mode 100644 (file)
index 0000000..b2193ad
--- /dev/null
@@ -0,0 +1,55 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  Header file for Webserver.c.\r
+ */\r
\r
+#ifndef _WEBSERVER_H_\r
+#define _WEBSERVER_H_\r
+\r
+       /* Includes: */\r
+               #include <avr/io.h>\r
+               #include <avr/pgmspace.h>\r
+               \r
+               #include <LUFA/Version.h>\r
+               \r
+               #include "TCP.h"\r
+       \r
+       /* Macros: */\r
+               /** Maximum size of a HTTP response per transmission */\r
+               #define  HTTP_REPLY_BLOCK_SIZE     128\r
+       \r
+       /* Function Prototypes: */\r
+               void Webserver_Init(void);\r
+               void Webserver_ApplicationCallback(TCP_ConnectionState_t* ConnectionState, TCP_ConnectionBuffer_t* Buffer);\r
+\r
+#endif\r
diff --git a/Demos/Device/ClassDriver/RNDISEthernet/RNDISEthernet.aps b/Demos/Device/ClassDriver/RNDISEthernet/RNDISEthernet.aps
new file mode 100644 (file)
index 0000000..b5d21c1
--- /dev/null
@@ -0,0 +1 @@
+<AVRStudio><MANAGEMENT><ProjectName>RNDISEthernet</ProjectName><Created>30-Sep-2008 14:17:05</Created><LastEdit>22-Jan-2009 17:52:35</LastEdit><ICON>241</ICON><ProjectType>0</ProjectType><Created>30-Sep-2008 14:17:05</Created><Version>4</Version><Build>4, 14, 0, 589</Build><ProjectTypeName>AVR GCC</ProjectTypeName></MANAGEMENT><CODE_CREATION><ObjectFile></ObjectFile><EntryFile></EntryFile><SaveFolder>C:\Users\Dean\Documents\Electronics\Projects\WORK\LUFAWORK\Demos\RNDISEthernet\</SaveFolder></CODE_CREATION><DEBUG_TARGET><CURRENT_TARGET>JTAGICE mkII</CURRENT_TARGET><CURRENT_PART>AT90USB1287.xml</CURRENT_PART><BREAKPOINTS></BREAKPOINTS><IO_EXPAND><HIDE>false</HIDE></IO_EXPAND><REGISTERNAMES><Register>R00</Register><Register>R01</Register><Register>R02</Register><Register>R03</Register><Register>R04</Register><Register>R05</Register><Register>R06</Register><Register>R07</Register><Register>R08</Register><Register>R09</Register><Register>R10</Register><Register>R11</Register><Register>R12</Register><Register>R13</Register><Register>R14</Register><Register>R15</Register><Register>R16</Register><Register>R17</Register><Register>R18</Register><Register>R19</Register><Register>R20</Register><Register>R21</Register><Register>R22</Register><Register>R23</Register><Register>R24</Register><Register>R25</Register><Register>R26</Register><Register>R27</Register><Register>R28</Register><Register>R29</Register><Register>R30</Register><Register>R31</Register></REGISTERNAMES><COM>Auto</COM><COMType>0</COMType><WATCHNUM>0</WATCHNUM><WATCHNAMES><Pane0></Pane0><Pane1></Pane1><Pane2></Pane2><Pane3></Pane3></WATCHNAMES><BreakOnTrcaeFull>0</BreakOnTrcaeFull></DEBUG_TARGET><Debugger><Triggers></Triggers></Debugger><AVRGCCPLUGIN><FILES><SOURCEFILE>ARP.c</SOURCEFILE><SOURCEFILE>Descriptors.c</SOURCEFILE><SOURCEFILE>Ethernet.c</SOURCEFILE><SOURCEFILE>ICMP.c</SOURCEFILE><SOURCEFILE>IP.c</SOURCEFILE><SOURCEFILE>ProtocolDecoders.c</SOURCEFILE><SOURCEFILE>RNDIS.c</SOURCEFILE><SOURCEFILE>RNDISEthernet.c</SOURCEFILE><SOURCEFILE>TCP.c</SOURCEFILE><SOURCEFILE>Webserver.c</SOURCEFILE><HEADERFILE>ARP.h</HEADERFILE><HEADERFILE>Descriptors.h</HEADERFILE><HEADERFILE>Ethernet.h</HEADERFILE><HEADERFILE>EthernetProtocols.h</HEADERFILE><HEADERFILE>ICMP.h</HEADERFILE><HEADERFILE>IP.h</HEADERFILE><HEADERFILE>ProtocolDecoders.h</HEADERFILE><HEADERFILE>RNDIS.h</HEADERFILE><HEADERFILE>RNDISEthernet.h</HEADERFILE><HEADERFILE>TCP.h</HEADERFILE><HEADERFILE>Webserver.h</HEADERFILE><OTHERFILE>makefile</OTHERFILE></FILES><CONFIGS><CONFIG><NAME>default</NAME><USESEXTERNALMAKEFILE>YES</USESEXTERNALMAKEFILE><EXTERNALMAKEFILE>makefile</EXTERNALMAKEFILE><PART>at90usb1287</PART><HEX>1</HEX><LIST>1</LIST><MAP>1</MAP><OUTPUTFILENAME>RNDISEthernet.elf</OUTPUTFILENAME><OUTPUTDIR>default\</OUTPUTDIR><ISDIRTY>1</ISDIRTY><OPTIONS/><INCDIRS/><LIBDIRS/><LIBS/><LINKOBJECTS/><OPTIONSFORALL>-Wall -gdwarf-2 -std=gnu99 -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums</OPTIONSFORALL><LINKEROPTIONS></LINKEROPTIONS><SEGMENTS/></CONFIG></CONFIGS><LASTCONFIG>default</LASTCONFIG><USES_WINAVR>1</USES_WINAVR><GCC_LOC>C:\WinAVR-20081205\bin\avr-gcc.exe</GCC_LOC><MAKE_LOC>C:\WinAVR-20081205\utils\bin\make.exe</MAKE_LOC></AVRGCCPLUGIN><ProjectFiles><Files><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\LUFAWORK\Demos\RNDISEthernet\ARP.h</Name><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\LUFAWORK\Demos\RNDISEthernet\Descriptors.h</Name><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\LUFAWORK\Demos\RNDISEthernet\Ethernet.h</Name><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\LUFAWORK\Demos\RNDISEthernet\EthernetProtocols.h</Name><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\LUFAWORK\Demos\RNDISEthernet\ICMP.h</Name><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\LUFAWORK\Demos\RNDISEthernet\IP.h</Name><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\LUFAWORK\Demos\RNDISEthernet\ProtocolDecoders.h</Name><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\LUFAWORK\Demos\RNDISEthernet\RNDIS.h</Name><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\LUFAWORK\Demos\RNDISEthernet\RNDISEthernet.h</Name><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\LUFAWORK\Demos\RNDISEthernet\TCP.h</Name><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\LUFAWORK\Demos\RNDISEthernet\Telnet.h</Name><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\LUFAWORK\Demos\RNDISEthernet\Webserver.h</Name><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\LUFAWORK\Demos\RNDISEthernet\ARP.c</Name><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\LUFAWORK\Demos\RNDISEthernet\Descriptors.c</Name><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\LUFAWORK\Demos\RNDISEthernet\Ethernet.c</Name><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\LUFAWORK\Demos\RNDISEthernet\ICMP.c</Name><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\LUFAWORK\Demos\RNDISEthernet\IP.c</Name><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\LUFAWORK\Demos\RNDISEthernet\ProtocolDecoders.c</Name><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\LUFAWORK\Demos\RNDISEthernet\RNDIS.c</Name><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\LUFAWORK\Demos\RNDISEthernet\RNDISEthernet.c</Name><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\LUFAWORK\Demos\RNDISEthernet\TCP.c</Name><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\LUFAWORK\Demos\RNDISEthernet\Telnet.c</Name><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\LUFAWORK\Demos\RNDISEthernet\Webserver.c</Name></Files></ProjectFiles><IOView><usergroups/><sort sorted="0" column="0" ordername="1" orderaddress="1" ordergroup="1"/></IOView><Files></Files><Events><Bookmarks></Bookmarks></Events><Trace><Filters></Filters></Trace></AVRStudio>\r
diff --git a/Demos/Device/ClassDriver/RNDISEthernet/RNDISEthernet.c b/Demos/Device/ClassDriver/RNDISEthernet/RNDISEthernet.c
new file mode 100644 (file)
index 0000000..7c85719
--- /dev/null
@@ -0,0 +1,131 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  Main source file for the RNDISEthernet demo. This file contains the main tasks of\r
+ *  the demo and is responsible for the initial application hardware configuration.\r
+ */\r
+\r
+#include "RNDISEthernet.h"\r
+\r
+/** LUFA RNDIS Class driver interface configuration and state information. This structure is\r
+ *  passed to all RNDIS Class driver functions, so that multiple instances of the same class\r
+ *  within a device can be differentiated from one another.\r
+ */\r
+USB_ClassInfo_RNDIS_t Ethernet_RNDIS_Interface =\r
+       {\r
+               .ControlInterfaceNumber     = 0,\r
+\r
+               .DataINEndpointNumber       = CDC_TX_EPNUM,\r
+               .DataINEndpointSize         = CDC_TXRX_EPSIZE,\r
+\r
+               .DataOUTEndpointNumber      = CDC_RX_EPNUM,\r
+               .DataOUTEndpointSize        = CDC_TXRX_EPSIZE,\r
+\r
+               .NotificationEndpointNumber = CDC_NOTIFICATION_EPNUM,\r
+               .NotificationEndpointSize   = CDC_NOTIFICATION_EPSIZE,\r
+               \r
+               .AdapterVendorDescription   = "LUFA RNDIS Demo Adapter",\r
+               .AdapterMACAddress          = {ADAPTER_MAC_ADDRESS},\r
+       };\r
+\r
+/** Main program entry point. This routine contains the overall program flow, including initial\r
+ *  setup of all components and the main program loop.\r
+ */\r
+int main(void)\r
+{\r
+       SetupHardware();\r
+\r
+       LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);\r
+       \r
+       TCP_Init();\r
+       Webserver_Init();\r
+\r
+       printf_P(PSTR("\r\n\r\n****** RNDIS Demo running. ******\r\n"));\r
+\r
+       for (;;)\r
+       {\r
+               if (Ethernet_RNDIS_Interface.FrameIN.FrameInBuffer)\r
+               {\r
+                       LEDs_SetAllLEDs(LEDMASK_USB_BUSY);\r
+                       Ethernet_ProcessPacket(&Ethernet_RNDIS_Interface.FrameIN, &Ethernet_RNDIS_Interface.FrameOUT);\r
+                       LEDs_SetAllLEDs(LEDMASK_USB_READY);\r
+               }\r
+\r
+               TCP_TCPTask(&Ethernet_RNDIS_Interface);\r
+\r
+               USB_RNDIS_USBTask(&Ethernet_RNDIS_Interface);\r
+               USB_USBTask();\r
+       }\r
+}\r
+\r
+/** Configures the board hardware and chip peripherals for the demo's functionality. */\r
+void SetupHardware(void)\r
+{\r
+       /* Disable watchdog if enabled by bootloader/fuses */\r
+       MCUSR &= ~(1 << WDRF);\r
+       wdt_disable();\r
+\r
+       /* Disable clock division */\r
+       clock_prescale_set(clock_div_1);\r
+\r
+       /* Hardware Initialization */\r
+       LEDs_Init();\r
+       SerialStream_Init(9600, false);\r
+       USB_Init();\r
+}\r
+\r
+/** Event handler for the library USB Connection event. */\r
+void EVENT_USB_Connect(void)\r
+{\r
+    LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING);\r
+}\r
+\r
+/** Event handler for the library USB Disconnection event. */\r
+void EVENT_USB_Disconnect(void)\r
+{\r
+    LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);\r
+}\r
+\r
+/** Event handler for the library USB Configuration Changed event. */\r
+void EVENT_USB_ConfigurationChanged(void)\r
+{\r
+       LEDs_SetAllLEDs(LEDMASK_USB_READY);\r
+\r
+       if (!(USB_RNDIS_ConfigureEndpoints(&Ethernet_RNDIS_Interface)))\r
+         LEDs_SetAllLEDs(LEDMASK_USB_ERROR);\r
+}\r
+\r
+/** Event handler for the library USB Unhandled Control Packet event. */\r
+void EVENT_USB_UnhandledControlPacket(void)\r
+{\r
+       USB_RNDIS_ProcessControlPacket(&Ethernet_RNDIS_Interface);\r
+}\r
diff --git a/Demos/Device/ClassDriver/RNDISEthernet/RNDISEthernet.h b/Demos/Device/ClassDriver/RNDISEthernet/RNDISEthernet.h
new file mode 100644 (file)
index 0000000..f0ba75a
--- /dev/null
@@ -0,0 +1,86 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  Header file for RNDISEthernet.c.\r
+ */\r
\r
+#ifndef _RNDISETHERNET_H_\r
+#define _RNDISETHERNET_H_\r
+\r
+       /* Includes: */\r
+               #include <avr/io.h>\r
+               #include <avr/wdt.h>\r
+               #include <avr/pgmspace.h>\r
+               #include <avr/power.h>\r
+               #include <string.h>\r
+               #include <stdio.h>\r
+\r
+               #include "Descriptors.h"\r
+
+               #include "Lib/Ethernet.h"\r
+               #include "Lib/TCP.h"\r
+               #include "Lib/ARP.h"\r
+               #include "Lib/Webserver.h"\r
+\r
+               #include <LUFA/Version.h>\r
+               #include <LUFA/Drivers/Board/LEDs.h>\r
+               #include <LUFA/Drivers/Board/Joystick.h>\r
+               #include <LUFA/Drivers/USB/USB.h>\r
+               #include <LUFA/Drivers/USB/Class/Device/RNDIS.h>\r
+\r
+       /* Macros: */\r
+               /** LED mask for the library LED driver, to indicate that the USB interface is not ready. */\r
+               #define LEDMASK_USB_NOTREADY      LEDS_LED1\r
+\r
+               /** LED mask for the library LED driver, to indicate that the USB interface is enumerating. */\r
+               #define LEDMASK_USB_ENUMERATING  (LEDS_LED2 | LEDS_LED3)\r
+\r
+               /** LED mask for the library LED driver, to indicate that the USB interface is ready. */\r
+               #define LEDMASK_USB_READY        (LEDS_LED2 | LEDS_LED4)\r
+\r
+               /** LED mask for the library LED driver, to indicate that an error has occurred in the USB interface. */\r
+               #define LEDMASK_USB_ERROR        (LEDS_LED1 | LEDS_LED3)\r
+\r
+               /** LED mask for the library LED driver, to indicate that the USB interface is busy. */\r
+               #define LEDMASK_USB_BUSY         (LEDS_LED2)\r
+               \r
+       /* Function Prototypes: */\r
+               void SetupHardware(void);\r
+\r
+               void EVENT_USB_Connect(void);\r
+               void EVENT_USB_Disconnect(void);\r
+               void EVENT_USB_ConfigurationChanged(void);\r
+               void EVENT_USB_UnhandledControlPacket(void);\r
+               \r
+               void CALLBACK_USB_RNDIS_ProcessRNDISControlMessage(USB_ClassInfo_RNDIS_t* RNDISInterfaceInfo);\r
+       \r
+#endif\r
diff --git a/Demos/Device/ClassDriver/RNDISEthernet/RNDISEthernet.txt b/Demos/Device/ClassDriver/RNDISEthernet/RNDISEthernet.txt
new file mode 100644 (file)
index 0000000..306cf85
--- /dev/null
@@ -0,0 +1,115 @@
+/** \file\r
+ *\r
+ *  This file contains special DoxyGen information for the generation of the main page and other special\r
+ *  documentation pages. It is not a project source file.\r
+ */\r
\r
+/** \mainpage RNDIS Class Ethernet Demo (with Webserver/Telnet)\r
+ *\r
+ *  \section SSec_Info USB Information:\r
+ *\r
+ *  The following table gives a rundown of the USB utilization of this demo.\r
+ *\r
+ *  Remote Network Driver Interface demonstration application.\r
+ *  This gives a simple reference application for implementing\r
+ *  a CDC RNDIS device acting as a simple network interface for\r
+ *  ethernet packet exchange. RNDIS is a proprietary Microsoft\r
+ *  standard; this demo will only work on Windows 2000 (manually\r
+ *  patched with the Microsoft RNDIS hotfix) and above (with no\r
+ *  manual patches), or on the latest Linux kernels.\r
+ *  \r
+ *  Before running, you will need to install the INF file that\r
+ *  is located in the RNDISEthernet project directory. This will\r
+ *  enable Windows to use its inbuilt RNDIS drivers, negating the\r
+ *  need for special Windows drivers for the device. To install,\r
+ *  right-click the .INF file and choose the Install option. If\r
+ *  Windows 2000 is used, the Microsoft INF file in the hotfix\r
+ *  will need to be altered to use the VID/PID of the demo and\r
+ *  then chosen instead of the LUFA RNDIS INF file when prompted.\r
+ *  \r
+ *  When enumerated, this demo will install as a new network\r
+ *  adapter which ethernet packets can be sent to and received\r
+ *  from. Running on top of the adapter is a very simple TCP/IP\r
+ *  stack with a HTTP webserver and TELNET host which can be\r
+ *  accessed through a web browser at IP address 10.0.0.2:80 or\r
+ *  through a TELNET client at 10.0.0.2:25. This device also supports\r
+ *  ping echos via the ICMP protocol.\r
+ *  \r
+ *  \note The TCP/IP stack in this demo has a number of limitations\r
+ *  and should serve as an example only - it is not fully featured nor\r
+ *  compliant to the TCP/IP specification. For complete projects, it is \r
+ *  recommended that it be replaced with an external open source TCP/IP\r
+ *  stack that is feature complete, such as the uIP stack.\r
+ *\r
+ *  \section SSec_Description Project Description: \r
+ *\r
+ *  <table>\r
+ *   <tr>\r
+ *    <td><b>USB Mode:</b></td>\r
+ *    <td>Device</td>\r
+ *   </tr>\r
+ *   <tr>\r
+ *    <td><b>USB Class:</b></td>\r
+ *    <td>Communications Device Class (CDC)</td>\r
+ *   </tr>\r
+ *   <tr> \r
+ *    <td><b>USB Subclass:</b></td>\r
+ *    <td>Remote NDIS (Microsoft Proprietary CDC Class Networking Standard)</td>\r
+ *   </tr>\r
+ *   <tr>\r
+ *    <td><b>Relevant Standards:</b></td>\r
+ *    <td>Microsoft RNDIS Specification</td>\r
+ *   </tr>\r
+ *   <tr>\r
+ *    <td><b>Usable Speeds:</b></td>\r
+ *    <td>Full Speed Mode</td>\r
+ *   </tr>\r
+ *  </table>\r
+ *\r
+ *  \section SSec_Options Project Options\r
+ *\r
+ *  The following defines can be found in this demo, which can control the demo behaviour when defined, or changed in value.\r
+ *\r
+ *  <table>\r
+ *   <tr>\r
+ *    <td><b>Define Name:</b></td>\r
+ *    <td><b>Location:</b></td>\r
+ *    <td><b>Description:</b></td>\r
+ *   </tr>\r
+ *   <tr>\r
+ *    <td>NO_DECODE_ETHERNET</td>\r
+ *    <td>Makefile CDEFS</td>\r
+ *    <td>When defined, received Ethernet headers will not be decoded and printed to the device serial port.</td>\r
+ *   </tr>\r
+ *   <tr>\r
+ *    <td>NO_DECODE_ARP</td>\r
+ *    <td>Makefile CDEFS</td>\r
+ *    <td>When defined, received ARP headers will not be decoded and printed to the device serial port.</td>\r
+ *   </tr>\r
+ *   <tr>\r
+ *    <td>NO_DECODE_IP</td>\r
+ *    <td>Makefile CDEFS</td>\r
+ *    <td>When defined, received IP headers will not be decoded and printed to the device serial port.</td>\r
+ *   </tr>\r
+ *   <tr>\r
+ *    <td>NO_DECODE_ICMP</td>\r
+ *    <td>Makefile CDEFS</td>\r
+ *    <td>When defined, received ICMP headers will not be decoded and printed to the device serial port.</td>\r
+ *   </tr>\r
+ *   <tr>\r
+ *    <td>NO_DECODE_TCP</td>\r
+ *    <td>Makefile CDEFS</td>\r
+ *    <td>When defined, received TCP headers will not be decoded and printed to the device serial port.</td>\r
+ *   </tr>\r
+ *   <tr>\r
+ *    <td>NO_DECODE_UDP</td>\r
+ *    <td>Makefile CDEFS</td>\r
+ *    <td>When defined, received UDP headers will not be decoded and printed to the device serial port.</td>\r
+ *   </tr>\r
+ *   <tr>\r
+ *    <td>NO_DECODE_DHCP</td>\r
+ *    <td>Makefile CDEFS</td>\r
+ *    <td>When defined, received DHCP headers will not be decoded and printed to the device serial port.</td>\r
+ *   </tr>\r
+ *  </table>\r
+ */
\ No newline at end of file
diff --git a/Demos/Device/ClassDriver/RNDISEthernet/makefile b/Demos/Device/ClassDriver/RNDISEthernet/makefile
new file mode 100644 (file)
index 0000000..3bcc37c
--- /dev/null
@@ -0,0 +1,745 @@
+# Hey Emacs, this is a -*- makefile -*-\r
+#----------------------------------------------------------------------------\r
+# WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al.\r
+#  >> Modified for use with the LUFA project. <<\r
+#\r
+# Released to the Public Domain\r
+#\r
+# Additional material for this makefile was written by:\r
+# Peter Fleury\r
+# Tim Henigan\r
+# Colin O'Flynn\r
+# Reiner Patommel\r
+# Markus Pfaff\r
+# Sander Pool\r
+# Frederik Rouleau\r
+# Carlos Lamas\r
+# Dean Camera\r
+# Opendous Inc.\r
+# Denver Gingerich\r
+#\r
+#----------------------------------------------------------------------------\r
+# On command line:\r
+#\r
+# make all = Make software.\r
+#\r
+# make clean = Clean out built project files.\r
+#\r
+# make coff = Convert ELF to AVR COFF.\r
+#\r
+# make extcoff = Convert ELF to AVR Extended COFF.\r
+#\r
+# make program = Download the hex file to the device, using avrdude.\r
+#                Please customize the avrdude settings below first!\r
+#\r
+# make dfu = Download the hex file to the device, using dfu-programmer (must\r
+#            have dfu-programmer installed).\r
+#\r
+# make flip = Download the hex file to the device, using Atmel FLIP (must\r
+#             have Atmel FLIP installed).\r
+#\r
+# make dfu-ee = Download the eeprom file to the device, using dfu-programmer\r
+#               (must have dfu-programmer installed).\r
+#\r
+# make flip-ee = Download the eeprom file to the device, using Atmel FLIP\r
+#                (must have Atmel FLIP installed).\r
+#\r
+# make doxygen = Generate DoxyGen documentation for the project (must have\r
+#                DoxyGen installed)\r
+#\r
+# make debug = Start either simulavr or avarice as specified for debugging, \r
+#              with avr-gdb or avr-insight as the front end for debugging.\r
+#\r
+# make filename.s = Just compile filename.c into the assembler code only.\r
+#\r
+# make filename.i = Create a preprocessed source file for use in submitting\r
+#                   bug reports to the GCC project.\r
+#\r
+# To rebuild project do "make clean" then "make all".\r
+#----------------------------------------------------------------------------\r
+\r
+\r
+# MCU name\r
+MCU = at90usb1287\r
+\r
+\r
+# Target board (see library "Board Types" documentation, USER or blank for projects not requiring\r
+# LUFA board drivers). If USER is selected, put custom board drivers in a directory called \r
+# "Board" inside the application directory.\r
+BOARD  = USBKEY\r
+\r
+\r
+# Processor frequency.\r
+#     This will define a symbol, F_CPU, in all source code files equal to the \r
+#     processor frequency. You can then use this symbol in your source code to \r
+#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done\r
+#     automatically to create a 32-bit value in your source code.\r
+#     Typical values are:\r
+#         F_CPU =  1000000\r
+#         F_CPU =  1843200\r
+#         F_CPU =  2000000\r
+#         F_CPU =  3686400\r
+#         F_CPU =  4000000\r
+#         F_CPU =  7372800\r
+#         F_CPU =  8000000\r
+#         F_CPU = 11059200\r
+#         F_CPU = 14745600\r
+#         F_CPU = 16000000\r
+#         F_CPU = 18432000\r
+#         F_CPU = 20000000\r
+F_CPU = 8000000\r
+\r
+\r
+# Input clock frequency.\r
+#     This will define a symbol, F_CLOCK, in all source code files equal to the \r
+#     input clock frequency (before any prescaling is performed). This value may\r
+#     differ from F_CPU if prescaling is used on the latter, and is required as the\r
+#     raw input clock is fed directly to the PLL sections of the AVR for high speed\r
+#     clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'\r
+#     at the end, this will be done automatically to create a 32-bit value in your\r
+#     source code.\r
+#\r
+#     If no clock division is performed on the input clock inside the AVR (via the\r
+#     CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.\r
+F_CLOCK = 8000000\r
+\r
+\r
+# Output format. (can be srec, ihex, binary)\r
+FORMAT = ihex\r
+\r
+\r
+# Target file name (without extension).\r
+TARGET = RNDISEthernet\r
+\r
+\r
+# Object files directory\r
+#     To put object files in current directory, use a dot (.), do NOT make\r
+#     this an empty or blank macro!\r
+OBJDIR = .\r
+\r
+\r
+# Path to the LUFA library\r
+LUFA_PATH = ../../..\r
+\r
+\r
+# List C source files here. (C dependencies are automatically generated.)\r
+SRC = $(TARGET).c                                                 \\r
+      Descriptors.c                                               \\r
+         Lib/Ethernet.c                                              \\r
+         Lib/ProtocolDecoders.c                                      \\r
+         Lib/ICMP.c                                                  \\r
+         Lib/TCP.c                                                   \\r
+         Lib/UDP.c                                                   \\r
+         Lib/DHCP.c                                                  \\r
+         Lib/ARP.c                                                   \\r
+         Lib/IP.c                                                    \\r
+         Lib/Webserver.c                                             \\r
+         $(LUFA_PATH)/LUFA/Drivers/Peripheral/SerialStream.c         \\r
+         $(LUFA_PATH)/LUFA/Drivers/Peripheral/Serial.c               \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/DevChapter9.c        \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Endpoint.c           \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Host.c               \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/HostChapter9.c       \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/LowLevel.c           \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Pipe.c               \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/Events.c            \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBInterrupt.c      \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBTask.c           \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/ConfigDescriptor.c  \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/Class/Device/RNDIS.c          \\r
+\r
+\r
+# List C++ source files here. (C dependencies are automatically generated.)\r
+CPPSRC = \r
+\r
+\r
+# List Assembler source files here.\r
+#     Make them always end in a capital .S.  Files ending in a lowercase .s\r
+#     will not be considered source files but generated files (assembler\r
+#     output from the compiler), and will be deleted upon "make clean"!\r
+#     Even though the DOS/Win* filesystem matches both .s and .S the same,\r
+#     it will preserve the spelling of the filenames, and gcc itself does\r
+#     care about how the name is spelled on its command-line.\r
+ASRC =\r
+\r
+\r
+# Optimization level, can be [0, 1, 2, 3, s]. \r
+#     0 = turn off optimization. s = optimize for size.\r
+#     (Note: 3 is not always the best optimization level. See avr-libc FAQ.)\r
+OPT = s\r
+\r
+\r
+# Debugging format.\r
+#     Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs.\r
+#     AVR Studio 4.10 requires dwarf-2.\r
+#     AVR [Extended] COFF format requires stabs, plus an avr-objcopy run.\r
+DEBUG = dwarf-2\r
+\r
+\r
+# List any extra directories to look for include files here.\r
+#     Each directory must be seperated by a space.\r
+#     Use forward slashes for directory separators.\r
+#     For a directory that has spaces, enclose it in quotes.\r
+EXTRAINCDIRS = $(LUFA_PATH)/\r
+\r
+\r
+# Compiler flag to set the C Standard level.\r
+#     c89   = "ANSI" C\r
+#     gnu89 = c89 plus GCC extensions\r
+#     c99   = ISO C99 standard (not yet fully implemented)\r
+#     gnu99 = c99 plus GCC extensions\r
+CSTANDARD = -std=gnu99\r
+\r
+\r
+# Place -D or -U options here for C sources\r
+CDEFS  = -DF_CPU=$(F_CPU)UL -DF_CLOCK=$(F_CLOCK)UL -DBOARD=BOARD_$(BOARD)\r
+CDEFS += -DUSE_NONSTANDARD_DESCRIPTOR_NAMES -DUSB_DEVICE_ONLY\r
+CDEFS += -DFIXED_CONTROL_ENDPOINT_SIZE=8 -DUSE_SINGLE_DEVICE_CONFIGURATION\r
+CDEFS += -DUSE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)"\r
+CDEFS += -DNO_DECODE_ETHERNET -DNO_DECODE_ARP -DNO_DECODE_ICMP -DNO_DECODE_IP -DNO_DECODE_TCP -DNO_DECODE_UDP -DNO_DECODE_DHCP\r
+\r
+\r
+# Place -D or -U options here for ASM sources\r
+ADEFS = -DF_CPU=$(F_CPU)\r
+\r
+\r
+# Place -D or -U options here for C++ sources\r
+CPPDEFS = -DF_CPU=$(F_CPU)UL\r
+#CPPDEFS += -D__STDC_LIMIT_MACROS\r
+#CPPDEFS += -D__STDC_CONSTANT_MACROS\r
+\r
+\r
+\r
+#---------------- Compiler Options C ----------------\r
+#  -g*:          generate debugging information\r
+#  -O*:          optimization level\r
+#  -f...:        tuning, see GCC manual and avr-libc documentation\r
+#  -Wall...:     warning level\r
+#  -Wa,...:      tell GCC to pass this to the assembler.\r
+#    -adhlns...: create assembler listing\r
+CFLAGS = -g$(DEBUG)\r
+CFLAGS += $(CDEFS)\r
+CFLAGS += -O$(OPT)\r
+CFLAGS += -funsigned-char\r
+CFLAGS += -funsigned-bitfields\r
+CFLAGS += -ffunction-sections\r
+CFLAGS += -fpack-struct\r
+CFLAGS += -fshort-enums\r
+CFLAGS += -finline-limit=20\r
+CFLAGS += -Wall\r
+CFLAGS += -Wstrict-prototypes\r
+CFLAGS += -Wundef\r
+#CFLAGS += -fno-unit-at-a-time\r
+#CFLAGS += -Wunreachable-code\r
+#CFLAGS += -Wsign-compare\r
+CFLAGS += -Wa,-adhlns=$(<:%.c=$(OBJDIR)/%.lst)\r
+CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))\r
+CFLAGS += $(CSTANDARD)\r
+\r
+\r
+#---------------- Compiler Options C++ ----------------\r
+#  -g*:          generate debugging information\r
+#  -O*:          optimization level\r
+#  -f...:        tuning, see GCC manual and avr-libc documentation\r
+#  -Wall...:     warning level\r
+#  -Wa,...:      tell GCC to pass this to the assembler.\r
+#    -adhlns...: create assembler listing\r
+CPPFLAGS = -g$(DEBUG)\r
+CPPFLAGS += $(CPPDEFS)\r
+CPPFLAGS += -O$(OPT)\r
+CPPFLAGS += -funsigned-char\r
+CPPFLAGS += -funsigned-bitfields\r
+CPPFLAGS += -fpack-struct\r
+CPPFLAGS += -fshort-enums\r
+CPPFLAGS += -fno-exceptions\r
+CPPFLAGS += -Wall\r
+CFLAGS += -Wundef\r
+#CPPFLAGS += -mshort-calls\r
+#CPPFLAGS += -fno-unit-at-a-time\r
+#CPPFLAGS += -Wstrict-prototypes\r
+#CPPFLAGS += -Wunreachable-code\r
+#CPPFLAGS += -Wsign-compare\r
+CPPFLAGS += -Wa,-adhlns=$(<:%.cpp=$(OBJDIR)/%.lst)\r
+CPPFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))\r
+#CPPFLAGS += $(CSTANDARD)\r
+\r
+\r
+#---------------- Assembler Options ----------------\r
+#  -Wa,...:   tell GCC to pass this to the assembler.\r
+#  -adhlns:   create listing\r
+#  -gstabs:   have the assembler create line number information; note that\r
+#             for use in COFF files, additional information about filenames\r
+#             and function names needs to be present in the assembler source\r
+#             files -- see avr-libc docs [FIXME: not yet described there]\r
+#  -listing-cont-lines: Sets the maximum number of continuation lines of hex \r
+#       dump that will be displayed for a given single line of source input.\r
+ASFLAGS = $(ADEFS) -Wa,-adhlns=$(<:%.S=$(OBJDIR)/%.lst),-gstabs,--listing-cont-lines=100\r
+\r
+\r
+#---------------- Library Options ----------------\r
+# Minimalistic printf version\r
+PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min\r
+\r
+# Floating point printf version (requires MATH_LIB = -lm below)\r
+PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt\r
+\r
+# If this is left blank, then it will use the Standard printf version.\r
+PRINTF_LIB = \r
+#PRINTF_LIB = $(PRINTF_LIB_MIN)\r
+#PRINTF_LIB = $(PRINTF_LIB_FLOAT)\r
+\r
+\r
+# Minimalistic scanf version\r
+SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min\r
+\r
+# Floating point + %[ scanf version (requires MATH_LIB = -lm below)\r
+SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt\r
+\r
+# If this is left blank, then it will use the Standard scanf version.\r
+SCANF_LIB = \r
+#SCANF_LIB = $(SCANF_LIB_MIN)\r
+#SCANF_LIB = $(SCANF_LIB_FLOAT)\r
+\r
+\r
+MATH_LIB = -lm\r
+\r
+\r
+# List any extra directories to look for libraries here.\r
+#     Each directory must be seperated by a space.\r
+#     Use forward slashes for directory separators.\r
+#     For a directory that has spaces, enclose it in quotes.\r
+EXTRALIBDIRS = \r
+\r
+\r
+\r
+#---------------- External Memory Options ----------------\r
+\r
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),\r
+# used for variables (.data/.bss) and heap (malloc()).\r
+#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff\r
+\r
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),\r
+# only used for heap (malloc()).\r
+#EXTMEMOPTS = -Wl,--section-start,.data=0x801100,--defsym=__heap_end=0x80ffff\r
+\r
+EXTMEMOPTS =\r
+\r
+\r
+\r
+#---------------- Linker Options ----------------\r
+#  -Wl,...:     tell GCC to pass this to linker.\r
+#    -Map:      create map file\r
+#    --cref:    add cross reference to  map file\r
+LDFLAGS = -Wl,-Map=$(TARGET).map,--cref\r
+LDFLAGS += -Wl,--relax \r
+LDFLAGS += -Wl,--gc-sections\r
+LDFLAGS += $(EXTMEMOPTS)\r
+LDFLAGS += $(patsubst %,-L%,$(EXTRALIBDIRS))\r
+LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)\r
+#LDFLAGS += -T linker_script.x\r
+\r
+\r
+\r
+#---------------- Programming Options (avrdude) ----------------\r
+\r
+# Programming hardware: alf avr910 avrisp bascom bsd \r
+# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500\r
+#\r
+# Type: avrdude -c ?\r
+# to get a full listing.\r
+#\r
+AVRDUDE_PROGRAMMER = jtagmkII\r
+\r
+# com1 = serial port. Use lpt1 to connect to parallel port.\r
+AVRDUDE_PORT = usb\r
+\r
+AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex\r
+#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep\r
+\r
+\r
+# Uncomment the following if you want avrdude's erase cycle counter.\r
+# Note that this counter needs to be initialized first using -Yn,\r
+# see avrdude manual.\r
+#AVRDUDE_ERASE_COUNTER = -y\r
+\r
+# Uncomment the following if you do /not/ wish a verification to be\r
+# performed after programming the device.\r
+#AVRDUDE_NO_VERIFY = -V\r
+\r
+# Increase verbosity level.  Please use this when submitting bug\r
+# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude> \r
+# to submit bug reports.\r
+#AVRDUDE_VERBOSE = -v -v\r
+\r
+AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)\r
+AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY)\r
+AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE)\r
+AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER)\r
+\r
+\r
+\r
+#---------------- Debugging Options ----------------\r
+\r
+# For simulavr only - target MCU frequency.\r
+DEBUG_MFREQ = $(F_CPU)\r
+\r
+# Set the DEBUG_UI to either gdb or insight.\r
+# DEBUG_UI = gdb\r
+DEBUG_UI = insight\r
+\r
+# Set the debugging back-end to either avarice, simulavr.\r
+DEBUG_BACKEND = avarice\r
+#DEBUG_BACKEND = simulavr\r
+\r
+# GDB Init Filename.\r
+GDBINIT_FILE = __avr_gdbinit\r
+\r
+# When using avarice settings for the JTAG\r
+JTAG_DEV = /dev/com1\r
+\r
+# Debugging port used to communicate between GDB / avarice / simulavr.\r
+DEBUG_PORT = 4242\r
+\r
+# Debugging host used to communicate between GDB / avarice / simulavr, normally\r
+#     just set to localhost unless doing some sort of crazy debugging when \r
+#     avarice is running on a different computer.\r
+DEBUG_HOST = localhost\r
+\r
+\r
+\r
+#============================================================================\r
+\r
+\r
+# Define programs and commands.\r
+SHELL = sh\r
+CC = avr-gcc\r
+OBJCOPY = avr-objcopy\r
+OBJDUMP = avr-objdump\r
+SIZE = avr-size\r
+AR = avr-ar rcs\r
+NM = avr-nm\r
+AVRDUDE = avrdude\r
+REMOVE = rm -f\r
+REMOVEDIR = rm -rf\r
+COPY = cp\r
+WINSHELL = cmd\r
+\r
+# Define Messages\r
+# English\r
+MSG_ERRORS_NONE = Errors: none\r
+MSG_BEGIN = -------- begin --------\r
+MSG_END = --------  end  --------\r
+MSG_SIZE_BEFORE = Size before: \r
+MSG_SIZE_AFTER = Size after:\r
+MSG_COFF = Converting to AVR COFF:\r
+MSG_EXTENDED_COFF = Converting to AVR Extended COFF:\r
+MSG_FLASH = Creating load file for Flash:\r
+MSG_EEPROM = Creating load file for EEPROM:\r
+MSG_EXTENDED_LISTING = Creating Extended Listing:\r
+MSG_SYMBOL_TABLE = Creating Symbol Table:\r
+MSG_LINKING = Linking:\r
+MSG_COMPILING = Compiling C:\r
+MSG_COMPILING_CPP = Compiling C++:\r
+MSG_ASSEMBLING = Assembling:\r
+MSG_CLEANING = Cleaning project:\r
+MSG_CREATING_LIBRARY = Creating library:\r
+\r
+\r
+\r
+\r
+# Define all object files.\r
+OBJ = $(SRC:%.c=$(OBJDIR)/%.o) $(CPPSRC:%.cpp=$(OBJDIR)/%.o) $(ASRC:%.S=$(OBJDIR)/%.o) \r
+\r
+# Define all listing files.\r
+LST = $(SRC:%.c=$(OBJDIR)/%.lst) $(CPPSRC:%.cpp=$(OBJDIR)/%.lst) $(ASRC:%.S=$(OBJDIR)/%.lst) \r
+\r
+\r
+# Compiler flags to generate dependency files.\r
+GENDEPFLAGS = -MMD -MP -MF .dep/$(@F).d\r
+\r
+\r
+# Combine all necessary flags and optional flags.\r
+# Add target processor to flags.\r
+ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS)\r
+ALL_CPPFLAGS = -mmcu=$(MCU) -I. -x c++ $(CPPFLAGS) $(GENDEPFLAGS)\r
+ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)\r
+\r
+\r
+\r
+\r
+\r
+# Default target.\r
+all: begin gccversion sizebefore build checkhooks checklibmode checkboard sizeafter end\r
+\r
+# Change the build target to build a HEX file or a library.\r
+build: elf hex eep lss sym\r
+#build: lib\r
+\r
+\r
+elf: $(TARGET).elf\r
+hex: $(TARGET).hex\r
+eep: $(TARGET).eep\r
+lss: $(TARGET).lss\r
+sym: $(TARGET).sym\r
+LIBNAME=lib$(TARGET).a\r
+lib: $(LIBNAME)\r
+\r
+\r
+\r
+# Eye candy.\r
+# AVR Studio 3.x does not check make's exit code but relies on\r
+# the following magic strings to be generated by the compile job.\r
+begin:\r
+       @echo\r
+       @echo $(MSG_BEGIN)\r
+\r
+end:\r
+       @echo $(MSG_END)\r
+       @echo\r
+\r
+\r
+# Display size of file.\r
+HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex\r
+ELFSIZE = $(SIZE) $(MCU_FLAG) $(FORMAT_FLAG) $(TARGET).elf\r
+MCU_FLAG = $(shell $(SIZE) --help | grep -- --mcu > /dev/null && echo --mcu=$(MCU) )\r
+FORMAT_FLAG = $(shell $(SIZE) --help | grep -- --format=.*avr > /dev/null && echo --format=avr )\r
+\r
+sizebefore:\r
+       @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \\r
+       2>/dev/null; echo; fi\r
+\r
+sizeafter:\r
+       @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \\r
+       2>/dev/null; echo; fi\r
+\r
+checkhooks: build\r
+       @echo\r
+       @echo ------- Unhooked LUFA Events -------\r
+       @$(shell) (grep -s '^EVENT_.*LUFA/.*\\.o' $(TARGET).map | \\r
+                  cut -d' ' -f1 | cut -d'_' -f2- | grep ".*") || \\r
+                          echo "(None)"\r
+       @echo ------------------------------------\r
+\r
+checklibmode:\r
+       @echo\r
+       @echo ----------- Library Mode -----------\r
+       @$(shell) ($(CC) $(ALL_CFLAGS) -E -dM - < /dev/null \\r
+                 | grep 'USB_\(DEVICE\|HOST\)_ONLY' | cut -d' ' -f2 | grep ".*") \\r
+                 || echo "No specific mode (both device and host mode allowable)."\r
+       @echo ------------------------------------\r
+\r
+checkboard:\r
+       @echo\r
+       @echo ---------- Selected Board ----------\r
+       @echo Selected board model is $(BOARD).\r
+       @echo ------------------------------------\r
+       \r
+# Display compiler version information.\r
+gccversion : \r
+       @$(CC) --version\r
+\r
+\r
+\r
+# Program the device.  \r
+program: $(TARGET).hex $(TARGET).eep\r
+       $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)\r
+\r
+flip: $(TARGET).hex\r
+       batchisp -hardware usb -device $(MCU) -operation erase f\r
+       batchisp -hardware usb -device $(MCU) -operation loadbuffer $(TARGET).hex program\r
+       batchisp -hardware usb -device $(MCU) -operation start reset 0\r
+\r
+dfu: $(TARGET).hex\r
+       dfu-programmer $(MCU) erase\r
+       dfu-programmer $(MCU) flash --debug 1 $(TARGET).hex\r
+       dfu-programmer $(MCU) reset\r
+\r
+flip-ee: $(TARGET).hex $(TARGET).eep\r
+       copy $(TARGET).eep $(TARGET)eep.hex\r
+       batchisp -hardware usb -device $(MCU) -operation memory EEPROM erase\r
+       batchisp -hardware usb -device $(MCU) -operation memory EEPROM loadbuffer $(TARGET)eep.hex program\r
+       batchisp -hardware usb -device $(MCU) -operation start reset 0\r
+\r
+dfu-ee: $(TARGET).hex $(TARGET).eep\r
+       dfu-programmer $(MCU) flash-eeprom --debug 1 --suppress-bootloader-mem $(TARGET).eep\r
+       dfu-programmer $(MCU) reset\r
+\r
+\r
+# Generate avr-gdb config/init file which does the following:\r
+#     define the reset signal, load the target file, connect to target, and set \r
+#     a breakpoint at main().\r
+gdb-config: \r
+       @$(REMOVE) $(GDBINIT_FILE)\r
+       @echo define reset >> $(GDBINIT_FILE)\r
+       @echo SIGNAL SIGHUP >> $(GDBINIT_FILE)\r
+       @echo end >> $(GDBINIT_FILE)\r
+       @echo file $(TARGET).elf >> $(GDBINIT_FILE)\r
+       @echo target remote $(DEBUG_HOST):$(DEBUG_PORT)  >> $(GDBINIT_FILE)\r
+ifeq ($(DEBUG_BACKEND),simulavr)\r
+       @echo load  >> $(GDBINIT_FILE)\r
+endif\r
+       @echo break main >> $(GDBINIT_FILE)\r
+\r
+debug: gdb-config $(TARGET).elf\r
+ifeq ($(DEBUG_BACKEND), avarice)\r
+       @echo Starting AVaRICE - Press enter when "waiting to connect" message displays.\r
+       @$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \\r
+       $(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT)\r
+       @$(WINSHELL) /c pause\r
+\r
+else\r
+       @$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \\r
+       $(DEBUG_MFREQ) --port $(DEBUG_PORT)\r
+endif\r
+       @$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE)\r
+\r
+\r
+\r
+\r
+# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.\r
+COFFCONVERT = $(OBJCOPY) --debugging\r
+COFFCONVERT += --change-section-address .data-0x800000\r
+COFFCONVERT += --change-section-address .bss-0x800000\r
+COFFCONVERT += --change-section-address .noinit-0x800000\r
+COFFCONVERT += --change-section-address .eeprom-0x810000\r
+\r
+\r
+\r
+coff: $(TARGET).elf\r
+       @echo\r
+       @echo $(MSG_COFF) $(TARGET).cof\r
+       $(COFFCONVERT) -O coff-avr $< $(TARGET).cof\r
+\r
+\r
+extcoff: $(TARGET).elf\r
+       @echo\r
+       @echo $(MSG_EXTENDED_COFF) $(TARGET).cof\r
+       $(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof\r
+\r
+\r
+\r
+# Create final output files (.hex, .eep) from ELF output file.\r
+%.hex: %.elf\r
+       @echo\r
+       @echo $(MSG_FLASH) $@\r
+       $(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@\r
+\r
+%.eep: %.elf\r
+       @echo\r
+       @echo $(MSG_EEPROM) $@\r
+       -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \\r
+       --change-section-lma .eeprom=0 --no-change-warnings -O $(FORMAT) $< $@ || exit 0\r
+\r
+# Create extended listing file from ELF output file.\r
+%.lss: %.elf\r
+       @echo\r
+       @echo $(MSG_EXTENDED_LISTING) $@\r
+       $(OBJDUMP) -h -z -S $< > $@\r
+\r
+# Create a symbol table from ELF output file.\r
+%.sym: %.elf\r
+       @echo\r
+       @echo $(MSG_SYMBOL_TABLE) $@\r
+       $(NM) -n $< > $@\r
+\r
+\r
+\r
+# Create library from object files.\r
+.SECONDARY : $(TARGET).a\r
+.PRECIOUS : $(OBJ)\r
+%.a: $(OBJ)\r
+       @echo\r
+       @echo $(MSG_CREATING_LIBRARY) $@\r
+       $(AR) $@ $(OBJ)\r
+\r
+\r
+# Link: create ELF output file from object files.\r
+.SECONDARY : $(TARGET).elf\r
+.PRECIOUS : $(OBJ)\r
+%.elf: $(OBJ)\r
+       @echo\r
+       @echo $(MSG_LINKING) $@\r
+       $(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)\r
+\r
+\r
+# Compile: create object files from C source files.\r
+$(OBJDIR)/%.o : %.c\r
+       @echo\r
+       @echo $(MSG_COMPILING) $<\r
+       $(CC) -c $(ALL_CFLAGS) $< -o $@ \r
+\r
+\r
+# Compile: create object files from C++ source files.\r
+$(OBJDIR)/%.o : %.cpp\r
+       @echo\r
+       @echo $(MSG_COMPILING_CPP) $<\r
+       $(CC) -c $(ALL_CPPFLAGS) $< -o $@ \r
+\r
+\r
+# Compile: create assembler files from C source files.\r
+%.s : %.c\r
+       $(CC) -S $(ALL_CFLAGS) $< -o $@\r
+\r
+\r
+# Compile: create assembler files from C++ source files.\r
+%.s : %.cpp\r
+       $(CC) -S $(ALL_CPPFLAGS) $< -o $@\r
+\r
+\r
+# Assemble: create object files from assembler source files.\r
+$(OBJDIR)/%.o : %.S\r
+       @echo\r
+       @echo $(MSG_ASSEMBLING) $<\r
+       $(CC) -c $(ALL_ASFLAGS) $< -o $@\r
+\r
+\r
+# Create preprocessed source for use in sending a bug report.\r
+%.i : %.c\r
+       $(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ \r
+       \r
+\r
+# Target: clean project.\r
+clean: begin clean_list clean_binary end\r
+\r
+clean_binary:\r
+       $(REMOVE) $(TARGET).hex\r
+       \r
+clean_list:\r
+       @echo $(MSG_CLEANING)\r
+       $(REMOVE) $(TARGET).eep\r
+       $(REMOVE) $(TARGET)eep.hex\r
+       $(REMOVE) $(TARGET).cof\r
+       $(REMOVE) $(TARGET).elf\r
+       $(REMOVE) $(TARGET).map\r
+       $(REMOVE) $(TARGET).sym\r
+       $(REMOVE) $(TARGET).lss\r
+       $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.o)\r
+       $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.lst)\r
+       $(REMOVE) $(SRC:.c=.s)\r
+       $(REMOVE) $(SRC:.c=.d)\r
+       $(REMOVE) $(SRC:.c=.i)\r
+       $(REMOVEDIR) .dep\r
+\r
+\r
+doxygen:\r
+       @echo Generating Project Documentation...\r
+       @doxygen Doxygen.conf\r
+       @echo Documentation Generation Complete.\r
+\r
+clean_doxygen:\r
+       rm -rf Documentation\r
+\r
+# Create object files directory\r
+$(shell mkdir $(OBJDIR) 2>/dev/null)\r
+\r
+\r
+# Include the dependency files.\r
+-include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)\r
+\r
+\r
+# Listing of phony targets.\r
+.PHONY : all checkhooks checklibmode checkboard   \\r
+begin finish end sizebefore sizeafter gccversion  \\r
+build elf hex eep lss sym coff extcoff clean      \\r
+clean_list clean_binary program debug gdb-config  \\r
+doxygen dfu flip flip-ee dfu-ee
\ No newline at end of file
diff --git a/Demos/Device/ClassDriver/USBtoSerial/Descriptors.c b/Demos/Device/ClassDriver/USBtoSerial/Descriptors.c
new file mode 100644 (file)
index 0000000..c369d16
--- /dev/null
@@ -0,0 +1,263 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  USB Device Descriptors, for library use when in USB device mode. Descriptors are special \r
+ *  computer-readable structures which the host requests upon device enumeration, to determine\r
+ *  the device's capabilities and functions.  \r
+ */\r
+\r
+#include "Descriptors.h"\r
+\r
+/** Device descriptor structure. This descriptor, located in FLASH memory, describes the overall\r
+ *  device characteristics, including the supported USB version, control endpoint size and the\r
+ *  number of device configurations. The descriptor is read out by the USB host when the enumeration\r
+ *  process begins.\r
+ */\r
+USB_Descriptor_Device_t PROGMEM DeviceDescriptor =\r
+{\r
+       .Header                 = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device},\r
+               \r
+       .USBSpecification       = VERSION_BCD(01.10),\r
+       .Class                  = 0x02,\r
+       .SubClass               = 0x00,\r
+       .Protocol               = 0x00,\r
+                               \r
+       .Endpoint0Size          = FIXED_CONTROL_ENDPOINT_SIZE,\r
+               \r
+       .VendorID               = 0x03EB,\r
+       .ProductID              = 0x204B,\r
+       .ReleaseNumber          = 0x0000,\r
+               \r
+       .ManufacturerStrIndex   = 0x01,\r
+       .ProductStrIndex        = 0x02,\r
+       .SerialNumStrIndex      = NO_DESCRIPTOR,\r
+               \r
+       .NumberOfConfigurations = 1\r
+};\r
+\r
+/** Configuration descriptor structure. This descriptor, located in FLASH memory, describes the usage\r
+ *  of the device in one of its supported configurations, including information about any device interfaces\r
+ *  and endpoints. The descriptor is read out by the USB host during the enumeration process when selecting\r
+ *  a configuration so that the host may correctly communicate with the USB device.\r
+ */\r
+USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =\r
+{\r
+       .Config = \r
+               {\r
+                       .Header                 = {.Size = sizeof(USB_Descriptor_Configuration_Header_t), .Type = DTYPE_Configuration},\r
+\r
+                       .TotalConfigurationSize = sizeof(USB_Descriptor_Configuration_t),\r
+                       .TotalInterfaces        = 2,\r
+                               \r
+                       .ConfigurationNumber    = 1,\r
+                       .ConfigurationStrIndex  = NO_DESCRIPTOR,\r
+                               \r
+                       .ConfigAttributes       = (USB_CONFIG_ATTR_BUSPOWERED | USB_CONFIG_ATTR_SELFPOWERED),\r
+                       \r
+                       .MaxPowerConsumption    = USB_CONFIG_POWER_MA(100)\r
+               },\r
+               \r
+       .CCI_Interface = \r
+               {\r
+                       .Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},\r
+\r
+                       .InterfaceNumber        = 0,\r
+                       .AlternateSetting       = 0,\r
+                       \r
+                       .TotalEndpoints         = 1,\r
+                               \r
+                       .Class                  = 0x02,\r
+                       .SubClass               = 0x02,\r
+                       .Protocol               = 0x01,\r
+                               \r
+                       .InterfaceStrIndex      = NO_DESCRIPTOR\r
+               },\r
+\r
+       .CDC_Functional_IntHeader = \r
+               {\r
+                       .Header                 = {.Size = sizeof(CDC_FUNCTIONAL_DESCRIPTOR(2)), .Type = 0x24},\r
+                       .SubType                = 0x00,\r
+                       \r
+                       .Data                   = {0x01, 0x10}\r
+               },\r
+\r
+       .CDC_Functional_CallManagement = \r
+               {\r
+                       .Header                 = {.Size = sizeof(CDC_FUNCTIONAL_DESCRIPTOR(2)), .Type = 0x24},\r
+                       .SubType                = 0x01,\r
+                       \r
+                       .Data                   = {0x03, 0x01}\r
+               },\r
+\r
+       .CDC_Functional_AbstractControlManagement = \r
+               {\r
+                       .Header                 = {.Size = sizeof(CDC_FUNCTIONAL_DESCRIPTOR(1)), .Type = 0x24},\r
+                       .SubType                = 0x02,\r
+                       \r
+                       .Data                   = {0x06}\r
+               },\r
+               \r
+       .CDC_Functional_Union= \r
+               {\r
+                       .Header                 = {.Size = sizeof(CDC_FUNCTIONAL_DESCRIPTOR(2)), .Type = 0x24},\r
+                       .SubType                = 0x06,\r
+                       \r
+                       .Data                   = {0x00, 0x01}\r
+               },\r
+\r
+       .ManagementEndpoint = \r
+               {\r
+                       .Header                 = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},\r
+                                                                                \r
+                       .EndpointAddress        = (ENDPOINT_DESCRIPTOR_DIR_IN | CDC_NOTIFICATION_EPNUM),\r
+                       .Attributes             = EP_TYPE_INTERRUPT,\r
+                       .EndpointSize           = CDC_NOTIFICATION_EPSIZE,\r
+                       .PollingIntervalMS      = 0xFF\r
+               },\r
+\r
+       .DCI_Interface = \r
+               {\r
+                       .Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},\r
+\r
+                       .InterfaceNumber        = 1,\r
+                       .AlternateSetting       = 0,\r
+                       \r
+                       .TotalEndpoints         = 2,\r
+                               \r
+                       .Class                  = 0x0A,\r
+                       .SubClass               = 0x00,\r
+                       .Protocol               = 0x00,\r
+                               \r
+                       .InterfaceStrIndex      = NO_DESCRIPTOR\r
+               },\r
+\r
+       .DataOutEndpoint = \r
+               {\r
+                       .Header                 = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},\r
+                                                                                \r
+                       .EndpointAddress        = (ENDPOINT_DESCRIPTOR_DIR_OUT | CDC_RX_EPNUM),\r
+                       .Attributes             = EP_TYPE_BULK,\r
+                       .EndpointSize           = CDC_TXRX_EPSIZE,\r
+                       .PollingIntervalMS      = 0x00\r
+               },\r
+               \r
+       .DataInEndpoint = \r
+               {\r
+                       .Header                 = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},\r
+                                                                                \r
+                       .EndpointAddress        = (ENDPOINT_DESCRIPTOR_DIR_IN | CDC_TX_EPNUM),\r
+                       .Attributes       =             EP_TYPE_BULK,\r
+                       .EndpointSize           = CDC_TXRX_EPSIZE,\r
+                       .PollingIntervalMS=             0x00\r
+               }\r
+};\r
+\r
+/** Language descriptor structure. This descriptor, located in FLASH memory, is returned when the host requests\r
+ *  the string descriptor with index 0 (the first index). It is actually an array of 16-bit integers, which indicate\r
+ *  via the language ID table available at USB.org what languages the device supports for its string descriptors.\r
+ */\r
+USB_Descriptor_String_t PROGMEM LanguageString =\r
+{\r
+       .Header                 = {.Size = USB_STRING_LEN(1), .Type = DTYPE_String},\r
+               \r
+       .UnicodeString          = {LANGUAGE_ID_ENG}\r
+};\r
+\r
+/** Manufacturer descriptor string. This is a Unicode string containing the manufacturer's details in human readable\r
+ *  form, and is read out upon request by the host when the appropriate string ID is requested, listed in the Device\r
+ *  Descriptor.\r
+ */\r
+USB_Descriptor_String_t PROGMEM ManufacturerString =\r
+{\r
+       .Header                 = {.Size = USB_STRING_LEN(11), .Type = DTYPE_String},\r
+               \r
+       .UnicodeString          = L"Dean Camera"\r
+};\r
+\r
+/** Product descriptor string. This is a Unicode string containing the product's details in human readable form,\r
+ *  and is read out upon request by the host when the appropriate string ID is requested, listed in the Device\r
+ *  Descriptor.\r
+ */\r
+USB_Descriptor_String_t PROGMEM ProductString =\r
+{\r
+       .Header                 = {.Size = USB_STRING_LEN(19), .Type = DTYPE_String},\r
+               \r
+       .UnicodeString          = L"LUFA USB-RS232 Demo"\r
+};\r
+\r
+/** This function is called by the library when in device mode, and must be overridden (see library "USB Descriptors"\r
+ *  documentation) by the application code so that the address and size of a requested descriptor can be given\r
+ *  to the USB library. When the device receives a Get Descriptor request on the control endpoint, this function\r
+ *  is called so that the descriptor details can be passed back and the appropriate descriptor sent back to the\r
+ *  USB host.\r
+ */\r
+uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
+{\r
+       const uint8_t  DescriptorType   = (wValue >> 8);\r
+       const uint8_t  DescriptorNumber = (wValue & 0xFF);\r
+\r
+       void*    Address = NULL;\r
+       uint16_t Size    = NO_DESCRIPTOR;\r
+\r
+       switch (DescriptorType)\r
+       {\r
+               case DTYPE_Device: \r
+                       Address = (void*)&DeviceDescriptor;\r
+                       Size    = sizeof(USB_Descriptor_Device_t);\r
+                       break;\r
+               case DTYPE_Configuration: \r
+                       Address = (void*)&ConfigurationDescriptor;\r
+                       Size    = sizeof(USB_Descriptor_Configuration_t);\r
+                       break;\r
+               case DTYPE_String: \r
+                       switch (DescriptorNumber)\r
+                       {\r
+                               case 0x00: \r
+                                       Address = (void*)&LanguageString;\r
+                                       Size    = pgm_read_byte(&LanguageString.Header.Size);\r
+                                       break;\r
+                               case 0x01: \r
+                                       Address = (void*)&ManufacturerString;\r
+                                       Size    = pgm_read_byte(&ManufacturerString.Header.Size);\r
+                                       break;\r
+                               case 0x02: \r
+                                       Address = (void*)&ProductString;\r
+                                       Size    = pgm_read_byte(&ProductString.Header.Size);\r
+                                       break;\r
+                       }\r
+                       \r
+                       break;\r
+       }\r
+       \r
+       *DescriptorAddress = Address;\r
+       return Size;\r
+}\r
diff --git a/Demos/Device/ClassDriver/USBtoSerial/Descriptors.h b/Demos/Device/ClassDriver/USBtoSerial/Descriptors.h
new file mode 100644 (file)
index 0000000..9e372e3
--- /dev/null
@@ -0,0 +1,84 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  Header file for Descriptors.c.\r
+ */\r
\r
+#ifndef _DESCRIPTORS_H_\r
+#define _DESCRIPTORS_H_\r
+\r
+       /* Includes: */\r
+               #include <avr/pgmspace.h>\r
+\r
+               #include <LUFA/Drivers/USB/USB.h>\r
+               #include <LUFA/Drivers/USB/Class/Device/CDC.h>\r
+\r
+       /* Macros: */\r
+               /** Endpoint number of the CDC device-to-host notification IN endpoint. */\r
+               #define CDC_NOTIFICATION_EPNUM         2\r
+\r
+               /** Endpoint number of the CDC device-to-host data IN endpoint. */\r
+               #define CDC_TX_EPNUM                   3        \r
+\r
+               /** Endpoint number of the CDC host-to-device data OUT endpoint. */\r
+               #define CDC_RX_EPNUM                   4        \r
+\r
+               /** Size in bytes of the CDC device-to-host notification IN endpoint. */\r
+               #define CDC_NOTIFICATION_EPSIZE        8\r
+\r
+               /** Size in bytes of the CDC data IN and OUT endpoints. */\r
+               #define CDC_TXRX_EPSIZE                16       \r
+\r
+       /* Type Defines: */\r
+               /** Type define for the device configuration descriptor structure. This must be defined in the\r
+                *  application code, as the configuration descriptor contains several sub-descriptors which\r
+                *  vary between devices, and which describe the device's usage to the host.\r
+                */\r
+               typedef struct\r
+               {\r
+                       USB_Descriptor_Configuration_Header_t    Config;\r
+                       USB_Descriptor_Interface_t               CCI_Interface;\r
+                       CDC_FUNCTIONAL_DESCRIPTOR(2)             CDC_Functional_IntHeader;\r
+                       CDC_FUNCTIONAL_DESCRIPTOR(2)             CDC_Functional_CallManagement;\r
+                       CDC_FUNCTIONAL_DESCRIPTOR(1)             CDC_Functional_AbstractControlManagement;\r
+                       CDC_FUNCTIONAL_DESCRIPTOR(2)             CDC_Functional_Union;\r
+                       USB_Descriptor_Endpoint_t                ManagementEndpoint;\r
+                       USB_Descriptor_Interface_t               DCI_Interface;\r
+                       USB_Descriptor_Endpoint_t                DataOutEndpoint;\r
+                       USB_Descriptor_Endpoint_t                DataInEndpoint;\r
+               } USB_Descriptor_Configuration_t;\r
+\r
+       /* Function Prototypes: */\r
+               uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
+                                                                                       ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);\r
+\r
+#endif\r
diff --git a/Demos/Device/ClassDriver/USBtoSerial/Doxygen.conf b/Demos/Device/ClassDriver/USBtoSerial/Doxygen.conf
new file mode 100644 (file)
index 0000000..1eb8c54
--- /dev/null
@@ -0,0 +1,1485 @@
+# Doxyfile 1.5.7.1\r
+\r
+# This file describes the settings to be used by the documentation system\r
+# doxygen (www.doxygen.org) for a project\r
+#\r
+# All text after a hash (#) is considered a comment and will be ignored\r
+# The format is:\r
+#       TAG = value [value, ...]\r
+# For lists items can also be appended using:\r
+#       TAG += value [value, ...]\r
+# Values that contain spaces should be placed between quotes (" ")\r
+\r
+#---------------------------------------------------------------------------\r
+# Project related configuration options\r
+#---------------------------------------------------------------------------\r
+\r
+# This tag specifies the encoding used for all characters in the config file \r
+# that follow. The default is UTF-8 which is also the encoding used for all \r
+# text before the first occurrence of this tag. Doxygen uses libiconv (or the \r
+# iconv built into libc) for the transcoding. See \r
+# http://www.gnu.org/software/libiconv for the list of possible encodings.\r
+\r
+DOXYFILE_ENCODING      = UTF-8\r
+\r
+# The PROJECT_NAME tag is a single word (or a sequence of words surrounded \r
+# by quotes) that should identify the project.\r
+\r
+PROJECT_NAME           = "LUFA Library - USB to Serial Device Demo"\r
+\r
+# The PROJECT_NUMBER tag can be used to enter a project or revision number. \r
+# This could be handy for archiving the generated documentation or \r
+# if some version control system is used.\r
+\r
+PROJECT_NUMBER         = 0.0.0\r
+\r
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) \r
+# base path where the generated documentation will be put. \r
+# If a relative path is entered, it will be relative to the location \r
+# where doxygen was started. If left blank the current directory will be used.\r
+\r
+OUTPUT_DIRECTORY       = ./Documentation/\r
+\r
+# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create \r
+# 4096 sub-directories (in 2 levels) under the output directory of each output \r
+# format and will distribute the generated files over these directories. \r
+# Enabling this option can be useful when feeding doxygen a huge amount of \r
+# source files, where putting all generated files in the same directory would \r
+# otherwise cause performance problems for the file system.\r
+\r
+CREATE_SUBDIRS         = YES\r
+\r
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all \r
+# documentation generated by doxygen is written. Doxygen will use this \r
+# information to generate all constant output in the proper language. \r
+# The default language is English, other supported languages are: \r
+# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, \r
+# Croatian, Czech, Danish, Dutch, Farsi, Finnish, French, German, Greek, \r
+# Hungarian, Italian, Japanese, Japanese-en (Japanese with English messages), \r
+# Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, Polish, \r
+# Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, Slovene, \r
+# Spanish, Swedish, and Ukrainian.\r
+\r
+OUTPUT_LANGUAGE        = English\r
+\r
+# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will \r
+# include brief member descriptions after the members that are listed in \r
+# the file and class documentation (similar to JavaDoc). \r
+# Set to NO to disable this.\r
+\r
+BRIEF_MEMBER_DESC      = YES\r
+\r
+# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend \r
+# the brief description of a member or function before the detailed description. \r
+# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the \r
+# brief descriptions will be completely suppressed.\r
+\r
+REPEAT_BRIEF           = YES\r
+\r
+# This tag implements a quasi-intelligent brief description abbreviator \r
+# that is used to form the text in various listings. Each string \r
+# in this list, if found as the leading text of the brief description, will be \r
+# stripped from the text and the result after processing the whole list, is \r
+# used as the annotated text. Otherwise, the brief description is used as-is. \r
+# If left blank, the following values are used ("$name" is automatically \r
+# replaced with the name of the entity): "The $name class" "The $name widget" \r
+# "The $name file" "is" "provides" "specifies" "contains" \r
+# "represents" "a" "an" "the"\r
+\r
+ABBREVIATE_BRIEF       = "The $name class" \\r
+                         "The $name widget" \\r
+                         "The $name file" \\r
+                         is \\r
+                         provides \\r
+                         specifies \\r
+                         contains \\r
+                         represents \\r
+                         a \\r
+                         an \\r
+                         the\r
+\r
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then \r
+# Doxygen will generate a detailed section even if there is only a brief \r
+# description.\r
+\r
+ALWAYS_DETAILED_SEC    = NO\r
+\r
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all \r
+# inherited members of a class in the documentation of that class as if those \r
+# members were ordinary class members. Constructors, destructors and assignment \r
+# operators of the base classes will not be shown.\r
+\r
+INLINE_INHERITED_MEMB  = NO\r
+\r
+# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full \r
+# path before files name in the file list and in the header files. If set \r
+# to NO the shortest path that makes the file name unique will be used.\r
+\r
+FULL_PATH_NAMES        = YES\r
+\r
+# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag \r
+# can be used to strip a user-defined part of the path. Stripping is \r
+# only done if one of the specified strings matches the left-hand part of \r
+# the path. The tag can be used to show relative paths in the file list. \r
+# If left blank the directory from which doxygen is run is used as the \r
+# path to strip.\r
+\r
+STRIP_FROM_PATH        = \r
+\r
+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of \r
+# the path mentioned in the documentation of a class, which tells \r
+# the reader which header file to include in order to use a class. \r
+# If left blank only the name of the header file containing the class \r
+# definition is used. Otherwise one should specify the include paths that \r
+# are normally passed to the compiler using the -I flag.\r
+\r
+STRIP_FROM_INC_PATH    = \r
+\r
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter \r
+# (but less readable) file names. This can be useful is your file systems \r
+# doesn't support long names like on DOS, Mac, or CD-ROM.\r
+\r
+SHORT_NAMES            = YES\r
+\r
+# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen \r
+# will interpret the first line (until the first dot) of a JavaDoc-style \r
+# comment as the brief description. If set to NO, the JavaDoc \r
+# comments will behave just like regular Qt-style comments \r
+# (thus requiring an explicit @brief command for a brief description.)\r
+\r
+JAVADOC_AUTOBRIEF      = NO\r
+\r
+# If the QT_AUTOBRIEF tag is set to YES then Doxygen will \r
+# interpret the first line (until the first dot) of a Qt-style \r
+# comment as the brief description. If set to NO, the comments \r
+# will behave just like regular Qt-style comments (thus requiring \r
+# an explicit \brief command for a brief description.)\r
+\r
+QT_AUTOBRIEF           = NO\r
+\r
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen \r
+# treat a multi-line C++ special comment block (i.e. a block of //! or /// \r
+# comments) as a brief description. This used to be the default behaviour. \r
+# The new default is to treat a multi-line C++ comment block as a detailed \r
+# description. Set this tag to YES if you prefer the old behaviour instead.\r
+\r
+MULTILINE_CPP_IS_BRIEF = NO\r
+\r
+# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented \r
+# member inherits the documentation from any documented member that it \r
+# re-implements.\r
+\r
+INHERIT_DOCS           = YES\r
+\r
+# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce \r
+# a new page for each member. If set to NO, the documentation of a member will \r
+# be part of the file/class/namespace that contains it.\r
+\r
+SEPARATE_MEMBER_PAGES  = NO\r
+\r
+# The TAB_SIZE tag can be used to set the number of spaces in a tab. \r
+# Doxygen uses this value to replace tabs by spaces in code fragments.\r
+\r
+TAB_SIZE               = 4\r
+\r
+# This tag can be used to specify a number of aliases that acts \r
+# as commands in the documentation. An alias has the form "name=value". \r
+# For example adding "sideeffect=\par Side Effects:\n" will allow you to \r
+# put the command \sideeffect (or @sideeffect) in the documentation, which \r
+# will result in a user-defined paragraph with heading "Side Effects:". \r
+# You can put \n's in the value part of an alias to insert newlines.\r
+\r
+ALIASES                = \r
+\r
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C \r
+# sources only. Doxygen will then generate output that is more tailored for C. \r
+# For instance, some of the names that are used will be different. The list \r
+# of all members will be omitted, etc.\r
+\r
+OPTIMIZE_OUTPUT_FOR_C  = YES\r
+\r
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java \r
+# sources only. Doxygen will then generate output that is more tailored for \r
+# Java. For instance, namespaces will be presented as packages, qualified \r
+# scopes will look different, etc.\r
+\r
+OPTIMIZE_OUTPUT_JAVA   = NO\r
+\r
+# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran \r
+# sources only. Doxygen will then generate output that is more tailored for \r
+# Fortran.\r
+\r
+OPTIMIZE_FOR_FORTRAN   = NO\r
+\r
+# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL \r
+# sources. Doxygen will then generate output that is tailored for \r
+# VHDL.\r
+\r
+OPTIMIZE_OUTPUT_VHDL   = NO\r
+\r
+# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want \r
+# to include (a tag file for) the STL sources as input, then you should \r
+# set this tag to YES in order to let doxygen match functions declarations and \r
+# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. \r
+# func(std::string) {}). This also make the inheritance and collaboration \r
+# diagrams that involve STL classes more complete and accurate.\r
+\r
+BUILTIN_STL_SUPPORT    = NO\r
+\r
+# If you use Microsoft's C++/CLI language, you should set this option to YES to\r
+# enable parsing support.\r
+\r
+CPP_CLI_SUPPORT        = NO\r
+\r
+# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. \r
+# Doxygen will parse them like normal C++ but will assume all classes use public \r
+# instead of private inheritance when no explicit protection keyword is present.\r
+\r
+SIP_SUPPORT            = NO\r
+\r
+# For Microsoft's IDL there are propget and propput attributes to indicate getter \r
+# and setter methods for a property. Setting this option to YES (the default) \r
+# will make doxygen to replace the get and set methods by a property in the \r
+# documentation. This will only work if the methods are indeed getting or \r
+# setting a simple type. If this is not the case, or you want to show the \r
+# methods anyway, you should set this option to NO.\r
+\r
+IDL_PROPERTY_SUPPORT   = YES\r
+\r
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC \r
+# tag is set to YES, then doxygen will reuse the documentation of the first \r
+# member in the group (if any) for the other members of the group. By default \r
+# all members of a group must be documented explicitly.\r
+\r
+DISTRIBUTE_GROUP_DOC   = NO\r
+\r
+# Set the SUBGROUPING tag to YES (the default) to allow class member groups of \r
+# the same type (for instance a group of public functions) to be put as a \r
+# subgroup of that type (e.g. under the Public Functions section). Set it to \r
+# NO to prevent subgrouping. Alternatively, this can be done per class using \r
+# the \nosubgrouping command.\r
+\r
+SUBGROUPING            = YES\r
+\r
+# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum \r
+# is documented as struct, union, or enum with the name of the typedef. So \r
+# typedef struct TypeS {} TypeT, will appear in the documentation as a struct \r
+# with name TypeT. When disabled the typedef will appear as a member of a file, \r
+# namespace, or class. And the struct will be named TypeS. This can typically \r
+# be useful for C code in case the coding convention dictates that all compound \r
+# types are typedef'ed and only the typedef is referenced, never the tag name.\r
+\r
+TYPEDEF_HIDES_STRUCT   = NO\r
+\r
+# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to \r
+# determine which symbols to keep in memory and which to flush to disk.\r
+# When the cache is full, less often used symbols will be written to disk.\r
+# For small to medium size projects (<1000 input files) the default value is \r
+# probably good enough. For larger projects a too small cache size can cause \r
+# doxygen to be busy swapping symbols to and from disk most of the time \r
+# causing a significant performance penality. \r
+# If the system has enough physical memory increasing the cache will improve the \r
+# performance by keeping more symbols in memory. Note that the value works on \r
+# a logarithmic scale so increasing the size by one will rougly double the \r
+# memory usage. The cache size is given by this formula: \r
+# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, \r
+# corresponding to a cache size of 2^16 = 65536 symbols\r
+\r
+SYMBOL_CACHE_SIZE      = 0\r
+\r
+#---------------------------------------------------------------------------\r
+# Build related configuration options\r
+#---------------------------------------------------------------------------\r
+\r
+# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in \r
+# documentation are documented, even if no documentation was available. \r
+# Private class members and static file members will be hidden unless \r
+# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES\r
+\r
+EXTRACT_ALL            = YES\r
+\r
+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class \r
+# will be included in the documentation.\r
+\r
+EXTRACT_PRIVATE        = YES\r
+\r
+# If the EXTRACT_STATIC tag is set to YES all static members of a file \r
+# will be included in the documentation.\r
+\r
+EXTRACT_STATIC         = YES\r
+\r
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) \r
+# defined locally in source files will be included in the documentation. \r
+# If set to NO only classes defined in header files are included.\r
+\r
+EXTRACT_LOCAL_CLASSES  = YES\r
+\r
+# This flag is only useful for Objective-C code. When set to YES local \r
+# methods, which are defined in the implementation section but not in \r
+# the interface are included in the documentation. \r
+# If set to NO (the default) only methods in the interface are included.\r
+\r
+EXTRACT_LOCAL_METHODS  = NO\r
+\r
+# If this flag is set to YES, the members of anonymous namespaces will be \r
+# extracted and appear in the documentation as a namespace called \r
+# 'anonymous_namespace{file}', where file will be replaced with the base \r
+# name of the file that contains the anonymous namespace. By default \r
+# anonymous namespace are hidden.\r
+\r
+EXTRACT_ANON_NSPACES   = NO\r
+\r
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all \r
+# undocumented members of documented classes, files or namespaces. \r
+# If set to NO (the default) these members will be included in the \r
+# various overviews, but no documentation section is generated. \r
+# This option has no effect if EXTRACT_ALL is enabled.\r
+\r
+HIDE_UNDOC_MEMBERS     = NO\r
+\r
+# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all \r
+# undocumented classes that are normally visible in the class hierarchy. \r
+# If set to NO (the default) these classes will be included in the various \r
+# overviews. This option has no effect if EXTRACT_ALL is enabled.\r
+\r
+HIDE_UNDOC_CLASSES     = NO\r
+\r
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all \r
+# friend (class|struct|union) declarations. \r
+# If set to NO (the default) these declarations will be included in the \r
+# documentation.\r
+\r
+HIDE_FRIEND_COMPOUNDS  = NO\r
+\r
+# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any \r
+# documentation blocks found inside the body of a function. \r
+# If set to NO (the default) these blocks will be appended to the \r
+# function's detailed documentation block.\r
+\r
+HIDE_IN_BODY_DOCS      = NO\r
+\r
+# The INTERNAL_DOCS tag determines if documentation \r
+# that is typed after a \internal command is included. If the tag is set \r
+# to NO (the default) then the documentation will be excluded. \r
+# Set it to YES to include the internal documentation.\r
+\r
+INTERNAL_DOCS          = NO\r
+\r
+# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate \r
+# file names in lower-case letters. If set to YES upper-case letters are also \r
+# allowed. This is useful if you have classes or files whose names only differ \r
+# in case and if your file system supports case sensitive file names. Windows \r
+# and Mac users are advised to set this option to NO.\r
+\r
+CASE_SENSE_NAMES       = NO\r
+\r
+# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen \r
+# will show members with their full class and namespace scopes in the \r
+# documentation. If set to YES the scope will be hidden.\r
+\r
+HIDE_SCOPE_NAMES       = NO\r
+\r
+# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen \r
+# will put a list of the files that are included by a file in the documentation \r
+# of that file.\r
+\r
+SHOW_INCLUDE_FILES     = YES\r
+\r
+# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] \r
+# is inserted in the documentation for inline members.\r
+\r
+INLINE_INFO            = YES\r
+\r
+# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen \r
+# will sort the (detailed) documentation of file and class members \r
+# alphabetically by member name. If set to NO the members will appear in \r
+# declaration order.\r
+\r
+SORT_MEMBER_DOCS       = YES\r
+\r
+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the \r
+# brief documentation of file, namespace and class members alphabetically \r
+# by member name. If set to NO (the default) the members will appear in \r
+# declaration order.\r
+\r
+SORT_BRIEF_DOCS        = NO\r
+\r
+# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the \r
+# hierarchy of group names into alphabetical order. If set to NO (the default) \r
+# the group names will appear in their defined order.\r
+\r
+SORT_GROUP_NAMES       = NO\r
+\r
+# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be \r
+# sorted by fully-qualified names, including namespaces. If set to \r
+# NO (the default), the class list will be sorted only by class name, \r
+# not including the namespace part. \r
+# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.\r
+# Note: This option applies only to the class list, not to the \r
+# alphabetical list.\r
+\r
+SORT_BY_SCOPE_NAME     = NO\r
+\r
+# The GENERATE_TODOLIST tag can be used to enable (YES) or \r
+# disable (NO) the todo list. This list is created by putting \todo \r
+# commands in the documentation.\r
+\r
+GENERATE_TODOLIST      = NO\r
+\r
+# The GENERATE_TESTLIST tag can be used to enable (YES) or \r
+# disable (NO) the test list. This list is created by putting \test \r
+# commands in the documentation.\r
+\r
+GENERATE_TESTLIST      = NO\r
+\r
+# The GENERATE_BUGLIST tag can be used to enable (YES) or \r
+# disable (NO) the bug list. This list is created by putting \bug \r
+# commands in the documentation.\r
+\r
+GENERATE_BUGLIST       = NO\r
+\r
+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or \r
+# disable (NO) the deprecated list. This list is created by putting \r
+# \deprecated commands in the documentation.\r
+\r
+GENERATE_DEPRECATEDLIST= YES\r
+\r
+# The ENABLED_SECTIONS tag can be used to enable conditional \r
+# documentation sections, marked by \if sectionname ... \endif.\r
+\r
+ENABLED_SECTIONS       = \r
+\r
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines \r
+# the initial value of a variable or define consists of for it to appear in \r
+# the documentation. If the initializer consists of more lines than specified \r
+# here it will be hidden. Use a value of 0 to hide initializers completely. \r
+# The appearance of the initializer of individual variables and defines in the \r
+# documentation can be controlled using \showinitializer or \hideinitializer \r
+# command in the documentation regardless of this setting.\r
+\r
+MAX_INITIALIZER_LINES  = 30\r
+\r
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated \r
+# at the bottom of the documentation of classes and structs. If set to YES the \r
+# list will mention the files that were used to generate the documentation.\r
+\r
+SHOW_USED_FILES        = YES\r
+\r
+# If the sources in your project are distributed over multiple directories \r
+# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy \r
+# in the documentation. The default is NO.\r
+\r
+SHOW_DIRECTORIES       = YES\r
+\r
+# Set the SHOW_FILES tag to NO to disable the generation of the Files page.\r
+# This will remove the Files entry from the Quick Index and from the \r
+# Folder Tree View (if specified). The default is YES.\r
+\r
+SHOW_FILES             = YES\r
+\r
+# Set the SHOW_NAMESPACES tag to NO to disable the generation of the \r
+# Namespaces page.  This will remove the Namespaces entry from the Quick Index\r
+# and from the Folder Tree View (if specified). The default is YES.\r
+\r
+SHOW_NAMESPACES        = YES\r
+\r
+# The FILE_VERSION_FILTER tag can be used to specify a program or script that \r
+# doxygen should invoke to get the current version for each file (typically from \r
+# the version control system). Doxygen will invoke the program by executing (via \r
+# popen()) the command <command> <input-file>, where <command> is the value of \r
+# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file \r
+# provided by doxygen. Whatever the program writes to standard output \r
+# is used as the file version. See the manual for examples.\r
+\r
+FILE_VERSION_FILTER    = \r
+\r
+# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by \r
+# doxygen. The layout file controls the global structure of the generated output files \r
+# in an output format independent way. The create the layout file that represents \r
+# doxygen's defaults, run doxygen with the -l option. You can optionally specify a \r
+# file name after the option, if omitted DoxygenLayout.xml will be used as the name \r
+# of the layout file.\r
+\r
+LAYOUT_FILE            = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to warning and progress messages\r
+#---------------------------------------------------------------------------\r
+\r
+# The QUIET tag can be used to turn on/off the messages that are generated \r
+# by doxygen. Possible values are YES and NO. If left blank NO is used.\r
+\r
+QUIET                  = YES\r
+\r
+# The WARNINGS tag can be used to turn on/off the warning messages that are \r
+# generated by doxygen. Possible values are YES and NO. If left blank \r
+# NO is used.\r
+\r
+WARNINGS               = YES\r
+\r
+# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings \r
+# for undocumented members. If EXTRACT_ALL is set to YES then this flag will \r
+# automatically be disabled.\r
+\r
+WARN_IF_UNDOCUMENTED   = YES\r
+\r
+# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for \r
+# potential errors in the documentation, such as not documenting some \r
+# parameters in a documented function, or documenting parameters that \r
+# don't exist or using markup commands wrongly.\r
+\r
+WARN_IF_DOC_ERROR      = YES\r
+\r
+# This WARN_NO_PARAMDOC option can be abled to get warnings for \r
+# functions that are documented, but have no documentation for their parameters \r
+# or return value. If set to NO (the default) doxygen will only warn about \r
+# wrong or incomplete parameter documentation, but not about the absence of \r
+# documentation.\r
+\r
+WARN_NO_PARAMDOC       = YES\r
+\r
+# The WARN_FORMAT tag determines the format of the warning messages that \r
+# doxygen can produce. The string should contain the $file, $line, and $text \r
+# tags, which will be replaced by the file and line number from which the \r
+# warning originated and the warning text. Optionally the format may contain \r
+# $version, which will be replaced by the version of the file (if it could \r
+# be obtained via FILE_VERSION_FILTER)\r
+\r
+WARN_FORMAT            = "$file:$line: $text"\r
+\r
+# The WARN_LOGFILE tag can be used to specify a file to which warning \r
+# and error messages should be written. If left blank the output is written \r
+# to stderr.\r
+\r
+WARN_LOGFILE           = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the input files\r
+#---------------------------------------------------------------------------\r
+\r
+# The INPUT tag can be used to specify the files and/or directories that contain \r
+# documented source files. You may enter file names like "myfile.cpp" or \r
+# directories like "/usr/src/myproject". Separate the files or directories \r
+# with spaces.\r
+\r
+INPUT                  = ./\r
+\r
+# This tag can be used to specify the character encoding of the source files \r
+# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is \r
+# also the default input encoding. Doxygen uses libiconv (or the iconv built \r
+# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for \r
+# the list of possible encodings.\r
+\r
+INPUT_ENCODING         = UTF-8\r
+\r
+# If the value of the INPUT tag contains directories, you can use the \r
+# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \r
+# and *.h) to filter out the source-files in the directories. If left \r
+# blank the following patterns are tested: \r
+# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx \r
+# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90\r
+\r
+FILE_PATTERNS          = *.h \\r
+                         *.c \\r
+                                                *.txt\r
+\r
+# The RECURSIVE tag can be used to turn specify whether or not subdirectories \r
+# should be searched for input files as well. Possible values are YES and NO. \r
+# If left blank NO is used.\r
+\r
+RECURSIVE              = YES\r
+\r
+# The EXCLUDE tag can be used to specify files and/or directories that should \r
+# excluded from the INPUT source files. This way you can easily exclude a \r
+# subdirectory from a directory tree whose root is specified with the INPUT tag.\r
+\r
+EXCLUDE                = \r
+\r
+# The EXCLUDE_SYMLINKS tag can be used select whether or not files or \r
+# directories that are symbolic links (a Unix filesystem feature) are excluded \r
+# from the input.\r
+\r
+EXCLUDE_SYMLINKS       = NO\r
+\r
+# If the value of the INPUT tag contains directories, you can use the \r
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude \r
+# certain files from those directories. Note that the wildcards are matched \r
+# against the file with absolute path, so to exclude all test directories \r
+# for example use the pattern */test/*\r
+\r
+EXCLUDE_PATTERNS       = */LowLevel/USBMode.h\r
+\r
+# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names \r
+# (namespaces, classes, functions, etc.) that should be excluded from the \r
+# output. The symbol name can be a fully qualified name, a word, or if the \r
+# wildcard * is used, a substring. Examples: ANamespace, AClass, \r
+# AClass::ANamespace, ANamespace::*Test\r
+\r
+EXCLUDE_SYMBOLS        = __*\r
+\r
+# The EXAMPLE_PATH tag can be used to specify one or more files or \r
+# directories that contain example code fragments that are included (see \r
+# the \include command).\r
+\r
+EXAMPLE_PATH           = \r
+\r
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the \r
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \r
+# and *.h) to filter out the source-files in the directories. If left \r
+# blank all files are included.\r
+\r
+EXAMPLE_PATTERNS       = *\r
+\r
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be \r
+# searched for input files to be used with the \include or \dontinclude \r
+# commands irrespective of the value of the RECURSIVE tag. \r
+# Possible values are YES and NO. If left blank NO is used.\r
+\r
+EXAMPLE_RECURSIVE      = NO\r
+\r
+# The IMAGE_PATH tag can be used to specify one or more files or \r
+# directories that contain image that are included in the documentation (see \r
+# the \image command).\r
+\r
+IMAGE_PATH             = \r
+\r
+# The INPUT_FILTER tag can be used to specify a program that doxygen should \r
+# invoke to filter for each input file. Doxygen will invoke the filter program \r
+# by executing (via popen()) the command <filter> <input-file>, where <filter> \r
+# is the value of the INPUT_FILTER tag, and <input-file> is the name of an \r
+# input file. Doxygen will then use the output that the filter program writes \r
+# to standard output.  If FILTER_PATTERNS is specified, this tag will be \r
+# ignored.\r
+\r
+INPUT_FILTER           = \r
+\r
+# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern \r
+# basis.  Doxygen will compare the file name with each pattern and apply the \r
+# filter if there is a match.  The filters are a list of the form: \r
+# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further \r
+# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER \r
+# is applied to all files.\r
+\r
+FILTER_PATTERNS        = \r
+\r
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using \r
+# INPUT_FILTER) will be used to filter the input files when producing source \r
+# files to browse (i.e. when SOURCE_BROWSER is set to YES).\r
+\r
+FILTER_SOURCE_FILES    = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to source browsing\r
+#---------------------------------------------------------------------------\r
+\r
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will \r
+# be generated. Documented entities will be cross-referenced with these sources. \r
+# Note: To get rid of all source code in the generated output, make sure also \r
+# VERBATIM_HEADERS is set to NO.\r
+\r
+SOURCE_BROWSER         = NO\r
+\r
+# Setting the INLINE_SOURCES tag to YES will include the body \r
+# of functions and classes directly in the documentation.\r
+\r
+INLINE_SOURCES         = NO\r
+\r
+# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct \r
+# doxygen to hide any special comment blocks from generated source code \r
+# fragments. Normal C and C++ comments will always remain visible.\r
+\r
+STRIP_CODE_COMMENTS    = YES\r
+\r
+# If the REFERENCED_BY_RELATION tag is set to YES \r
+# then for each documented function all documented \r
+# functions referencing it will be listed.\r
+\r
+REFERENCED_BY_RELATION = NO\r
+\r
+# If the REFERENCES_RELATION tag is set to YES \r
+# then for each documented function all documented entities \r
+# called/used by that function will be listed.\r
+\r
+REFERENCES_RELATION    = NO\r
+\r
+# If the REFERENCES_LINK_SOURCE tag is set to YES (the default)\r
+# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from\r
+# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will\r
+# link to the source code.  Otherwise they will link to the documentstion.\r
+\r
+REFERENCES_LINK_SOURCE = NO\r
+\r
+# If the USE_HTAGS tag is set to YES then the references to source code \r
+# will point to the HTML generated by the htags(1) tool instead of doxygen \r
+# built-in source browser. The htags tool is part of GNU's global source \r
+# tagging system (see http://www.gnu.org/software/global/global.html). You \r
+# will need version 4.8.6 or higher.\r
+\r
+USE_HTAGS              = NO\r
+\r
+# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen \r
+# will generate a verbatim copy of the header file for each class for \r
+# which an include is specified. Set to NO to disable this.\r
+\r
+VERBATIM_HEADERS       = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the alphabetical class index\r
+#---------------------------------------------------------------------------\r
+\r
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index \r
+# of all compounds will be generated. Enable this if the project \r
+# contains a lot of classes, structs, unions or interfaces.\r
+\r
+ALPHABETICAL_INDEX     = YES\r
+\r
+# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then \r
+# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns \r
+# in which this list will be split (can be a number in the range [1..20])\r
+\r
+COLS_IN_ALPHA_INDEX    = 5\r
+\r
+# In case all classes in a project start with a common prefix, all \r
+# classes will be put under the same header in the alphabetical index. \r
+# The IGNORE_PREFIX tag can be used to specify one or more prefixes that \r
+# should be ignored while generating the index headers.\r
+\r
+IGNORE_PREFIX          = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the HTML output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_HTML tag is set to YES (the default) Doxygen will \r
+# generate HTML output.\r
+\r
+GENERATE_HTML          = YES\r
+\r
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `html' will be used as the default path.\r
+\r
+HTML_OUTPUT            = html\r
+\r
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for \r
+# each generated HTML page (for example: .htm,.php,.asp). If it is left blank \r
+# doxygen will generate files with .html extension.\r
+\r
+HTML_FILE_EXTENSION    = .html\r
+\r
+# The HTML_HEADER tag can be used to specify a personal HTML header for \r
+# each generated HTML page. If it is left blank doxygen will generate a \r
+# standard header.\r
+\r
+HTML_HEADER            = \r
+\r
+# The HTML_FOOTER tag can be used to specify a personal HTML footer for \r
+# each generated HTML page. If it is left blank doxygen will generate a \r
+# standard footer.\r
+\r
+HTML_FOOTER            = \r
+\r
+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading \r
+# style sheet that is used by each HTML page. It can be used to \r
+# fine-tune the look of the HTML output. If the tag is left blank doxygen \r
+# will generate a default style sheet. Note that doxygen will try to copy \r
+# the style sheet file to the HTML output directory, so don't put your own \r
+# stylesheet in the HTML output directory as well, or it will be erased!\r
+\r
+HTML_STYLESHEET        = \r
+\r
+# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, \r
+# files or namespaces will be aligned in HTML using tables. If set to \r
+# NO a bullet list will be used.\r
+\r
+HTML_ALIGN_MEMBERS     = YES\r
+\r
+# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML \r
+# documentation will contain sections that can be hidden and shown after the \r
+# page has loaded. For this to work a browser that supports \r
+# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox \r
+# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari).\r
+\r
+HTML_DYNAMIC_SECTIONS  = YES\r
+\r
+# If the GENERATE_DOCSET tag is set to YES, additional index files \r
+# will be generated that can be used as input for Apple's Xcode 3 \r
+# integrated development environment, introduced with OSX 10.5 (Leopard). \r
+# To create a documentation set, doxygen will generate a Makefile in the \r
+# HTML output directory. Running make will produce the docset in that \r
+# directory and running "make install" will install the docset in \r
+# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find \r
+# it at startup. \r
+# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information.\r
+\r
+GENERATE_DOCSET        = NO\r
+\r
+# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the \r
+# feed. A documentation feed provides an umbrella under which multiple \r
+# documentation sets from a single provider (such as a company or product suite) \r
+# can be grouped.\r
+\r
+DOCSET_FEEDNAME        = "Doxygen generated docs"\r
+\r
+# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that \r
+# should uniquely identify the documentation set bundle. This should be a \r
+# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen \r
+# will append .docset to the name.\r
+\r
+DOCSET_BUNDLE_ID       = org.doxygen.Project\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, additional index files \r
+# will be generated that can be used as input for tools like the \r
+# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) \r
+# of the generated HTML documentation.\r
+\r
+GENERATE_HTMLHELP      = NO\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can \r
+# be used to specify the file name of the resulting .chm file. You \r
+# can add a path in front of the file if the result should not be \r
+# written to the html output directory.\r
+\r
+CHM_FILE               = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can \r
+# be used to specify the location (absolute path including file name) of \r
+# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run \r
+# the HTML help compiler on the generated index.hhp.\r
+\r
+HHC_LOCATION           = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag \r
+# controls if a separate .chi index file is generated (YES) or that \r
+# it should be included in the master .chm file (NO).\r
+\r
+GENERATE_CHI           = NO\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING\r
+# is used to encode HtmlHelp index (hhk), content (hhc) and project file\r
+# content.\r
+\r
+CHM_INDEX_ENCODING     = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag \r
+# controls whether a binary table of contents is generated (YES) or a \r
+# normal table of contents (NO) in the .chm file.\r
+\r
+BINARY_TOC             = NO\r
+\r
+# The TOC_EXPAND flag can be set to YES to add extra items for group members \r
+# to the contents of the HTML help documentation and to the tree view.\r
+\r
+TOC_EXPAND             = YES\r
+\r
+# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER \r
+# are set, an additional index file will be generated that can be used as input for \r
+# Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated \r
+# HTML documentation.\r
+\r
+GENERATE_QHP           = NO\r
+\r
+# If the QHG_LOCATION tag is specified, the QCH_FILE tag can \r
+# be used to specify the file name of the resulting .qch file. \r
+# The path specified is relative to the HTML output folder.\r
+\r
+QCH_FILE               = \r
+\r
+# The QHP_NAMESPACE tag specifies the namespace to use when generating \r
+# Qt Help Project output. For more information please see \r
+# <a href="http://doc.trolltech.com/qthelpproject.html#namespace">Qt Help Project / Namespace</a>.\r
+\r
+QHP_NAMESPACE          = org.doxygen.Project\r
+\r
+# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating \r
+# Qt Help Project output. For more information please see \r
+# <a href="http://doc.trolltech.com/qthelpproject.html#virtual-folders">Qt Help Project / Virtual Folders</a>.\r
+\r
+QHP_VIRTUAL_FOLDER     = doc\r
+\r
+# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can \r
+# be used to specify the location of Qt's qhelpgenerator. \r
+# If non-empty doxygen will try to run qhelpgenerator on the generated \r
+# .qhp file .\r
+\r
+QHG_LOCATION           = \r
+\r
+# The DISABLE_INDEX tag can be used to turn on/off the condensed index at \r
+# top of each HTML page. The value NO (the default) enables the index and \r
+# the value YES disables it.\r
+\r
+DISABLE_INDEX          = NO\r
+\r
+# This tag can be used to set the number of enum values (range [1..20]) \r
+# that doxygen will group on one line in the generated HTML documentation.\r
+\r
+ENUM_VALUES_PER_LINE   = 1\r
+\r
+# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index\r
+# structure should be generated to display hierarchical information.\r
+# If the tag value is set to FRAME, a side panel will be generated\r
+# containing a tree-like index structure (just like the one that \r
+# is generated for HTML Help). For this to work a browser that supports \r
+# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, \r
+# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are \r
+# probably better off using the HTML help feature. Other possible values \r
+# for this tag are: HIERARCHIES, which will generate the Groups, Directories,\r
+# and Class Hierarchy pages using a tree view instead of an ordered list;\r
+# ALL, which combines the behavior of FRAME and HIERARCHIES; and NONE, which\r
+# disables this behavior completely. For backwards compatibility with previous\r
+# releases of Doxygen, the values YES and NO are equivalent to FRAME and NONE\r
+# respectively.\r
+\r
+GENERATE_TREEVIEW      = YES\r
+\r
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be \r
+# used to set the initial width (in pixels) of the frame in which the tree \r
+# is shown.\r
+\r
+TREEVIEW_WIDTH         = 250\r
+\r
+# Use this tag to change the font size of Latex formulas included \r
+# as images in the HTML documentation. The default is 10. Note that \r
+# when you change the font size after a successful doxygen run you need \r
+# to manually remove any form_*.png images from the HTML output directory \r
+# to force them to be regenerated.\r
+\r
+FORMULA_FONTSIZE       = 10\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the LaTeX output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will \r
+# generate Latex output.\r
+\r
+GENERATE_LATEX         = NO\r
+\r
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `latex' will be used as the default path.\r
+\r
+LATEX_OUTPUT           = latex\r
+\r
+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be \r
+# invoked. If left blank `latex' will be used as the default command name.\r
+\r
+LATEX_CMD_NAME         = latex\r
+\r
+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to \r
+# generate index for LaTeX. If left blank `makeindex' will be used as the \r
+# default command name.\r
+\r
+MAKEINDEX_CMD_NAME     = makeindex\r
+\r
+# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact \r
+# LaTeX documents. This may be useful for small projects and may help to \r
+# save some trees in general.\r
+\r
+COMPACT_LATEX          = NO\r
+\r
+# The PAPER_TYPE tag can be used to set the paper type that is used \r
+# by the printer. Possible values are: a4, a4wide, letter, legal and \r
+# executive. If left blank a4wide will be used.\r
+\r
+PAPER_TYPE             = a4wide\r
+\r
+# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX \r
+# packages that should be included in the LaTeX output.\r
+\r
+EXTRA_PACKAGES         = \r
+\r
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for \r
+# the generated latex document. The header should contain everything until \r
+# the first chapter. If it is left blank doxygen will generate a \r
+# standard header. Notice: only use this tag if you know what you are doing!\r
+\r
+LATEX_HEADER           = \r
+\r
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated \r
+# is prepared for conversion to pdf (using ps2pdf). The pdf file will \r
+# contain links (just like the HTML output) instead of page references \r
+# This makes the output suitable for online browsing using a pdf viewer.\r
+\r
+PDF_HYPERLINKS         = YES\r
+\r
+# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of \r
+# plain latex in the generated Makefile. Set this option to YES to get a \r
+# higher quality PDF documentation.\r
+\r
+USE_PDFLATEX           = YES\r
+\r
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. \r
+# command to the generated LaTeX files. This will instruct LaTeX to keep \r
+# running if errors occur, instead of asking the user for help. \r
+# This option is also used when generating formulas in HTML.\r
+\r
+LATEX_BATCHMODE        = NO\r
+\r
+# If LATEX_HIDE_INDICES is set to YES then doxygen will not \r
+# include the index chapters (such as File Index, Compound Index, etc.) \r
+# in the output.\r
+\r
+LATEX_HIDE_INDICES     = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the RTF output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output \r
+# The RTF output is optimized for Word 97 and may not look very pretty with \r
+# other RTF readers or editors.\r
+\r
+GENERATE_RTF           = NO\r
+\r
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `rtf' will be used as the default path.\r
+\r
+RTF_OUTPUT             = rtf\r
+\r
+# If the COMPACT_RTF tag is set to YES Doxygen generates more compact \r
+# RTF documents. This may be useful for small projects and may help to \r
+# save some trees in general.\r
+\r
+COMPACT_RTF            = NO\r
+\r
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated \r
+# will contain hyperlink fields. The RTF file will \r
+# contain links (just like the HTML output) instead of page references. \r
+# This makes the output suitable for online browsing using WORD or other \r
+# programs which support those fields. \r
+# Note: wordpad (write) and others do not support links.\r
+\r
+RTF_HYPERLINKS         = NO\r
+\r
+# Load stylesheet definitions from file. Syntax is similar to doxygen's \r
+# config file, i.e. a series of assignments. You only have to provide \r
+# replacements, missing definitions are set to their default value.\r
+\r
+RTF_STYLESHEET_FILE    = \r
+\r
+# Set optional variables used in the generation of an rtf document. \r
+# Syntax is similar to doxygen's config file.\r
+\r
+RTF_EXTENSIONS_FILE    = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the man page output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_MAN tag is set to YES (the default) Doxygen will \r
+# generate man pages\r
+\r
+GENERATE_MAN           = NO\r
+\r
+# The MAN_OUTPUT tag is used to specify where the man pages will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `man' will be used as the default path.\r
+\r
+MAN_OUTPUT             = man\r
+\r
+# The MAN_EXTENSION tag determines the extension that is added to \r
+# the generated man pages (default is the subroutine's section .3)\r
+\r
+MAN_EXTENSION          = .3\r
+\r
+# If the MAN_LINKS tag is set to YES and Doxygen generates man output, \r
+# then it will generate one additional man file for each entity \r
+# documented in the real man page(s). These additional files \r
+# only source the real man page, but without them the man command \r
+# would be unable to find the correct page. The default is NO.\r
+\r
+MAN_LINKS              = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the XML output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_XML tag is set to YES Doxygen will \r
+# generate an XML file that captures the structure of \r
+# the code including all documentation.\r
+\r
+GENERATE_XML           = NO\r
+\r
+# The XML_OUTPUT tag is used to specify where the XML pages will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `xml' will be used as the default path.\r
+\r
+XML_OUTPUT             = xml\r
+\r
+# The XML_SCHEMA tag can be used to specify an XML schema, \r
+# which can be used by a validating XML parser to check the \r
+# syntax of the XML files.\r
+\r
+XML_SCHEMA             = \r
+\r
+# The XML_DTD tag can be used to specify an XML DTD, \r
+# which can be used by a validating XML parser to check the \r
+# syntax of the XML files.\r
+\r
+XML_DTD                = \r
+\r
+# If the XML_PROGRAMLISTING tag is set to YES Doxygen will \r
+# dump the program listings (including syntax highlighting \r
+# and cross-referencing information) to the XML output. Note that \r
+# enabling this will significantly increase the size of the XML output.\r
+\r
+XML_PROGRAMLISTING     = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options for the AutoGen Definitions output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will \r
+# generate an AutoGen Definitions (see autogen.sf.net) file \r
+# that captures the structure of the code including all \r
+# documentation. Note that this feature is still experimental \r
+# and incomplete at the moment.\r
+\r
+GENERATE_AUTOGEN_DEF   = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the Perl module output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_PERLMOD tag is set to YES Doxygen will \r
+# generate a Perl module file that captures the structure of \r
+# the code including all documentation. Note that this \r
+# feature is still experimental and incomplete at the \r
+# moment.\r
+\r
+GENERATE_PERLMOD       = NO\r
+\r
+# If the PERLMOD_LATEX tag is set to YES Doxygen will generate \r
+# the necessary Makefile rules, Perl scripts and LaTeX code to be able \r
+# to generate PDF and DVI output from the Perl module output.\r
+\r
+PERLMOD_LATEX          = NO\r
+\r
+# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be \r
+# nicely formatted so it can be parsed by a human reader.  This is useful \r
+# if you want to understand what is going on.  On the other hand, if this \r
+# tag is set to NO the size of the Perl module output will be much smaller \r
+# and Perl will parse it just the same.\r
+\r
+PERLMOD_PRETTY         = YES\r
+\r
+# The names of the make variables in the generated doxyrules.make file \r
+# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. \r
+# This is useful so different doxyrules.make files included by the same \r
+# Makefile don't overwrite each other's variables.\r
+\r
+PERLMOD_MAKEVAR_PREFIX = \r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration options related to the preprocessor   \r
+#---------------------------------------------------------------------------\r
+\r
+# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will \r
+# evaluate all C-preprocessor directives found in the sources and include \r
+# files.\r
+\r
+ENABLE_PREPROCESSING   = YES\r
+\r
+# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro \r
+# names in the source code. If set to NO (the default) only conditional \r
+# compilation will be performed. Macro expansion can be done in a controlled \r
+# way by setting EXPAND_ONLY_PREDEF to YES.\r
+\r
+MACRO_EXPANSION        = YES\r
+\r
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES \r
+# then the macro expansion is limited to the macros specified with the \r
+# PREDEFINED and EXPAND_AS_DEFINED tags.\r
+\r
+EXPAND_ONLY_PREDEF     = YES\r
+\r
+# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files \r
+# in the INCLUDE_PATH (see below) will be search if a #include is found.\r
+\r
+SEARCH_INCLUDES        = YES\r
+\r
+# The INCLUDE_PATH tag can be used to specify one or more directories that \r
+# contain include files that are not input files but should be processed by \r
+# the preprocessor.\r
+\r
+INCLUDE_PATH           = \r
+\r
+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard \r
+# patterns (like *.h and *.hpp) to filter out the header-files in the \r
+# directories. If left blank, the patterns specified with FILE_PATTERNS will \r
+# be used.\r
+\r
+INCLUDE_FILE_PATTERNS  = \r
+\r
+# The PREDEFINED tag can be used to specify one or more macro names that \r
+# are defined before the preprocessor is started (similar to the -D option of \r
+# gcc). The argument of the tag is a list of macros of the form: name \r
+# or name=definition (no spaces). If the definition and the = are \r
+# omitted =1 is assumed. To prevent a macro definition from being \r
+# undefined via #undef or recursively expanded use the := operator \r
+# instead of the = operator.\r
+\r
+PREDEFINED             = __DOXYGEN__\r
+\r
+# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then \r
+# this tag can be used to specify a list of macro names that should be expanded. \r
+# The macro definition that is found in the sources will be used. \r
+# Use the PREDEFINED tag if you want to use a different macro definition.\r
+\r
+EXPAND_AS_DEFINED      = BUTTLOADTAG\r
+\r
+# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then \r
+# doxygen's preprocessor will remove all function-like macros that are alone \r
+# on a line, have an all uppercase name, and do not end with a semicolon. Such \r
+# function macros are typically used for boiler-plate code, and will confuse \r
+# the parser if not removed.\r
+\r
+SKIP_FUNCTION_MACROS   = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration::additions related to external references   \r
+#---------------------------------------------------------------------------\r
+\r
+# The TAGFILES option can be used to specify one or more tagfiles. \r
+# Optionally an initial location of the external documentation \r
+# can be added for each tagfile. The format of a tag file without \r
+# this location is as follows: \r
+#   TAGFILES = file1 file2 ... \r
+# Adding location for the tag files is done as follows: \r
+#   TAGFILES = file1=loc1 "file2 = loc2" ... \r
+# where "loc1" and "loc2" can be relative or absolute paths or \r
+# URLs. If a location is present for each tag, the installdox tool \r
+# does not have to be run to correct the links.\r
+# Note that each tag file must have a unique name\r
+# (where the name does NOT include the path)\r
+# If a tag file is not located in the directory in which doxygen \r
+# is run, you must also specify the path to the tagfile here.\r
+\r
+TAGFILES               = \r
+\r
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create \r
+# a tag file that is based on the input files it reads.\r
+\r
+GENERATE_TAGFILE       = \r
+\r
+# If the ALLEXTERNALS tag is set to YES all external classes will be listed \r
+# in the class index. If set to NO only the inherited external classes \r
+# will be listed.\r
+\r
+ALLEXTERNALS           = NO\r
+\r
+# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed \r
+# in the modules index. If set to NO, only the current project's groups will \r
+# be listed.\r
+\r
+EXTERNAL_GROUPS        = YES\r
+\r
+# The PERL_PATH should be the absolute path and name of the perl script \r
+# interpreter (i.e. the result of `which perl').\r
+\r
+PERL_PATH              = /usr/bin/perl\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration options related to the dot tool   \r
+#---------------------------------------------------------------------------\r
+\r
+# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will \r
+# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base \r
+# or super classes. Setting the tag to NO turns the diagrams off. Note that \r
+# this option is superseded by the HAVE_DOT option below. This is only a \r
+# fallback. It is recommended to install and use dot, since it yields more \r
+# powerful graphs.\r
+\r
+CLASS_DIAGRAMS         = NO\r
+\r
+# You can define message sequence charts within doxygen comments using the \msc \r
+# command. Doxygen will then run the mscgen tool (see \r
+# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the \r
+# documentation. The MSCGEN_PATH tag allows you to specify the directory where \r
+# the mscgen tool resides. If left empty the tool is assumed to be found in the \r
+# default search path.\r
+\r
+MSCGEN_PATH            = \r
+\r
+# If set to YES, the inheritance and collaboration graphs will hide \r
+# inheritance and usage relations if the target is undocumented \r
+# or is not a class.\r
+\r
+HIDE_UNDOC_RELATIONS   = YES\r
+\r
+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is \r
+# available from the path. This tool is part of Graphviz, a graph visualization \r
+# toolkit from AT&T and Lucent Bell Labs. The other options in this section \r
+# have no effect if this option is set to NO (the default)\r
+\r
+HAVE_DOT               = NO\r
+\r
+# By default doxygen will write a font called FreeSans.ttf to the output \r
+# directory and reference it in all dot files that doxygen generates. This \r
+# font does not include all possible unicode characters however, so when you need \r
+# these (or just want a differently looking font) you can specify the font name \r
+# using DOT_FONTNAME. You need need to make sure dot is able to find the font, \r
+# which can be done by putting it in a standard location or by setting the \r
+# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory \r
+# containing the font.\r
+\r
+DOT_FONTNAME           = FreeSans\r
+\r
+# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. \r
+# The default size is 10pt.\r
+\r
+DOT_FONTSIZE           = 10\r
+\r
+# By default doxygen will tell dot to use the output directory to look for the \r
+# FreeSans.ttf font (which doxygen will put there itself). If you specify a \r
+# different font using DOT_FONTNAME you can set the path where dot \r
+# can find it using this tag.\r
+\r
+DOT_FONTPATH           = \r
+\r
+# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for each documented class showing the direct and \r
+# indirect inheritance relations. Setting this tag to YES will force the \r
+# the CLASS_DIAGRAMS tag to NO.\r
+\r
+CLASS_GRAPH            = NO\r
+\r
+# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for each documented class showing the direct and \r
+# indirect implementation dependencies (inheritance, containment, and \r
+# class references variables) of the class with other documented classes.\r
+\r
+COLLABORATION_GRAPH    = NO\r
+\r
+# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for groups, showing the direct groups dependencies\r
+\r
+GROUP_GRAPHS           = NO\r
+\r
+# If the UML_LOOK tag is set to YES doxygen will generate inheritance and \r
+# collaboration diagrams in a style similar to the OMG's Unified Modeling \r
+# Language.\r
+\r
+UML_LOOK               = NO\r
+\r
+# If set to YES, the inheritance and collaboration graphs will show the \r
+# relations between templates and their instances.\r
+\r
+TEMPLATE_RELATIONS     = NO\r
+\r
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT \r
+# tags are set to YES then doxygen will generate a graph for each documented \r
+# file showing the direct and indirect include dependencies of the file with \r
+# other documented files.\r
+\r
+INCLUDE_GRAPH          = NO\r
+\r
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and \r
+# HAVE_DOT tags are set to YES then doxygen will generate a graph for each \r
+# documented header file showing the documented files that directly or \r
+# indirectly include this file.\r
+\r
+INCLUDED_BY_GRAPH      = NO\r
+\r
+# If the CALL_GRAPH and HAVE_DOT options are set to YES then \r
+# doxygen will generate a call dependency graph for every global function \r
+# or class method. Note that enabling this option will significantly increase \r
+# the time of a run. So in most cases it will be better to enable call graphs \r
+# for selected functions only using the \callgraph command.\r
+\r
+CALL_GRAPH             = NO\r
+\r
+# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then \r
+# doxygen will generate a caller dependency graph for every global function \r
+# or class method. Note that enabling this option will significantly increase \r
+# the time of a run. So in most cases it will be better to enable caller \r
+# graphs for selected functions only using the \callergraph command.\r
+\r
+CALLER_GRAPH           = NO\r
+\r
+# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen \r
+# will graphical hierarchy of all classes instead of a textual one.\r
+\r
+GRAPHICAL_HIERARCHY    = NO\r
+\r
+# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES \r
+# then doxygen will show the dependencies a directory has on other directories \r
+# in a graphical way. The dependency relations are determined by the #include\r
+# relations between the files in the directories.\r
+\r
+DIRECTORY_GRAPH        = NO\r
+\r
+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images \r
+# generated by dot. Possible values are png, jpg, or gif\r
+# If left blank png will be used.\r
+\r
+DOT_IMAGE_FORMAT       = png\r
+\r
+# The tag DOT_PATH can be used to specify the path where the dot tool can be \r
+# found. If left blank, it is assumed the dot tool can be found in the path.\r
+\r
+DOT_PATH               = "C:/Program Files/Graphviz2.18/bin"\r
+\r
+# The DOTFILE_DIRS tag can be used to specify one or more directories that \r
+# contain dot files that are included in the documentation (see the \r
+# \dotfile command).\r
+\r
+DOTFILE_DIRS           = \r
+\r
+# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of \r
+# nodes that will be shown in the graph. If the number of nodes in a graph \r
+# becomes larger than this value, doxygen will truncate the graph, which is \r
+# visualized by representing a node as a red box. Note that doxygen if the \r
+# number of direct children of the root node in a graph is already larger than \r
+# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note \r
+# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.\r
+\r
+DOT_GRAPH_MAX_NODES    = 15\r
+\r
+# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the \r
+# graphs generated by dot. A depth value of 3 means that only nodes reachable \r
+# from the root by following a path via at most 3 edges will be shown. Nodes \r
+# that lay further from the root node will be omitted. Note that setting this \r
+# option to 1 or 2 may greatly reduce the computation time needed for large \r
+# code bases. Also note that the size of a graph can be further restricted by \r
+# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.\r
+\r
+MAX_DOT_GRAPH_DEPTH    = 2\r
+\r
+# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent \r
+# background. This is disabled by default, because dot on Windows does not \r
+# seem to support this out of the box. Warning: Depending on the platform used, \r
+# enabling this option may lead to badly anti-aliased labels on the edges of \r
+# a graph (i.e. they become hard to read).\r
+\r
+DOT_TRANSPARENT        = YES\r
+\r
+# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output \r
+# files in one run (i.e. multiple -o and -T options on the command line). This \r
+# makes dot run faster, but since only newer versions of dot (>1.8.10) \r
+# support this, this feature is disabled by default.\r
+\r
+DOT_MULTI_TARGETS      = NO\r
+\r
+# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will \r
+# generate a legend page explaining the meaning of the various boxes and \r
+# arrows in the dot generated graphs.\r
+\r
+GENERATE_LEGEND        = YES\r
+\r
+# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will \r
+# remove the intermediate dot files that are used to generate \r
+# the various graphs.\r
+\r
+DOT_CLEANUP            = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration::additions related to the search engine   \r
+#---------------------------------------------------------------------------\r
+\r
+# The SEARCHENGINE tag specifies whether or not a search engine should be \r
+# used. If set to NO the values of all tags below this one will be ignored.\r
+\r
+SEARCHENGINE           = NO\r
diff --git a/Demos/Device/ClassDriver/USBtoSerial/LUFA USBtoSerial.inf b/Demos/Device/ClassDriver/USBtoSerial/LUFA USBtoSerial.inf
new file mode 100644 (file)
index 0000000..bd9c8bf
--- /dev/null
@@ -0,0 +1,55 @@
+;  Windows LUFA USB to Serial Setup File\r
+; Copyright (c) 2000 Microsoft Corporation\r
+\r
+[Version] \r
+Signature="$Windows NT$" \r
+Class=Ports\r
+ClassGuid={4D36E978-E325-11CE-BFC1-08002BE10318} \r
+Provider=%COMPANY% \r
+LayoutFile=layout.inf\r
+DriverVer=06/06/2006,1.0.0.0\r
+\r
+[Manufacturer] \r
+%MFGNAME% = ManufName\r
+\r
+[DestinationDirs] \r
+DefaultDestDir=12 \r
+\r
+[ManufName] \r
+%Modem3% = Modem3, USB\VID_03EB&PID_204B\r
+\r
+;------------------------------------------------------------------------------\r
+;  Windows 2000/XP Sections\r
+;------------------------------------------------------------------------------\r
+\r
+[Modem3.nt]\r
+CopyFiles=USBModemCopyFileSection\r
+AddReg=Modem3.nt.AddReg \r
+\r
+[USBModemCopyFileSection]\r
+usbser.sys,,,0x20\r
+\r
+[Modem3.nt.AddReg] \r
+HKR,,DevLoader,,*ntkern \r
+HKR,,NTMPDriver,,usbser.sys \r
+HKR,,EnumPropPages32,,"MsPorts.dll,SerialPortPropPageProvider" \r
+\r
+[Modem3.nt.Services] \r
+AddService=usbser, 0x00000002, DriverService\r
+\r
+[DriverService] \r
+DisplayName=%SERVICE%\r
+ServiceType=1\r
+StartType=3\r
+ErrorControl=1\r
+ServiceBinary=%12%\usbser.sys \r
+\r
+;------------------------------------------------------------------------------\r
+;  String Definitions\r
+;------------------------------------------------------------------------------\r
+\r
+[Strings] \r
+COMPANY="LUFA Library"\r
+MFGNAME="Dean Camera"\r
+Modem3="USB Virtual Serial Port" \r
+SERVICE="USB Virtual Serial Port CDC Driver"
\ No newline at end of file
diff --git a/Demos/Device/ClassDriver/USBtoSerial/Lib/RingBuff.c b/Demos/Device/ClassDriver/USBtoSerial/Lib/RingBuff.c
new file mode 100644 (file)
index 0000000..1f477f1
--- /dev/null
@@ -0,0 +1,120 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+#include "RingBuff.h"\r
+\r
+void Buffer_Initialize(RingBuff_t* Buffer)\r
+{\r
+       BUFF_ATOMIC_BLOCK\r
+       {\r
+               Buffer->InPtr    = (RingBuff_Data_t*)&Buffer->Buffer;\r
+               Buffer->OutPtr   = (RingBuff_Data_t*)&Buffer->Buffer;\r
+               Buffer->Elements = 0;\r
+       }\r
+}\r
+\r
+void Buffer_StoreElement(RingBuff_t* Buffer, RingBuff_Data_t Data)\r
+{\r
+       BUFF_ATOMIC_BLOCK\r
+       {\r
+       #if defined(BUFF_DROPOLD)\r
+               if (Buffer->Elements == BUFF_LENGTH)\r
+               {\r
+                       Buffer->OutPtr++;\r
+       \r
+                       if (Buffer->OutPtr == &Buffer->Buffer[BUFF_LENGTH])\r
+                         Buffer->OutPtr = (RingBuff_Data_t*)&Buffer->Buffer;\r
+               }\r
+               else\r
+               {\r
+                       Buffer->Elements++;\r
+               }\r
+       #elif defined(BUFF_DROPNEW)\r
+               if (Buffer->Elements == BUFF_LENGTH)\r
+                 return;\r
+       \r
+                 Buffer->Elements++;\r
+       #elif defined(BUFF_NODROPCHECK)\r
+                 Buffer->Elements++;\r
+       #endif\r
+       \r
+               *(Buffer->InPtr) = Data;\r
+               Buffer->InPtr++;\r
+       \r
+               if (Buffer->InPtr == &Buffer->Buffer[BUFF_LENGTH])\r
+                 Buffer->InPtr = (RingBuff_Data_t*)&Buffer->Buffer;\r
+       }\r
+}\r
+\r
+RingBuff_Data_t Buffer_GetElement(RingBuff_t* Buffer)\r
+{\r
+       RingBuff_Data_t BuffData;\r
+       \r
+       BUFF_ATOMIC_BLOCK\r
+       {\r
+#if defined(BUFF_EMPTYRETURNSZERO)\r
+               if (!(Buffer->Elements))\r
+                 return 0;\r
+#elif !defined(BUFF_NOEMPTYCHECK)\r
+       #error No empty buffer check behaviour specified.\r
+#endif\r
+\r
+               BuffData = *(Buffer->OutPtr);\r
+       \r
+               Buffer->OutPtr++;\r
+               Buffer->Elements--;\r
+       \r
+               if (Buffer->OutPtr == &Buffer->Buffer[BUFF_LENGTH])\r
+                 Buffer->OutPtr = (RingBuff_Data_t*)&Buffer->Buffer;\r
+       }\r
+       \r
+       return BuffData;\r
+}\r
+\r
+#if defined(BUFF_USEPEEK)\r
+RingBuff_Data_t Buffer_PeekElement(const RingBuff_t* Buffer)\r
+{\r
+       RingBuff_Data_t BuffData;\r
+\r
+       BUFF_ATOMIC_BLOCK\r
+       {\r
+#if defined(BUFF_EMPTYRETURNSZERO)\r
+               if (!(Buffer->Elements))\r
+                 return 0;\r
+#elif !defined(BUFF_NOEMPTYCHECK)\r
+       #error No empty buffer check behaviour specified.\r
+#endif\r
+\r
+               BuffData = *(Buffer->OutPtr);\r
+       }\r
+\r
+       return BuffData;\r
+}\r
+#endif\r
diff --git a/Demos/Device/ClassDriver/USBtoSerial/Lib/RingBuff.h b/Demos/Device/ClassDriver/USBtoSerial/Lib/RingBuff.h
new file mode 100644 (file)
index 0000000..23288d8
--- /dev/null
@@ -0,0 +1,116 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/* Buffer Configuration: */\r
+   /* Buffer length - select static size of created ring buffers: */\r
+        #define BUFF_STATICSIZE 128      // Set to the static ring buffer size for all ring buffers (place size after define)\r
+\r
+   /* Volatile mode - uncomment to make buffers volatile, for use in ISRs, etc: */\r
+        #define BUFF_VOLATILE            // Uncomment to cause all ring buffers to become volatile (and atomic if multi-byte) in access\r
+\r
+   /* Drop mode - select behaviour when Buffer_StoreElement called on a full buffer: */\r
+     #define BUFF_DROPOLD             // Uncomment to cause full ring buffers to drop the oldest character to make space when full\r
+     // #define BUFF_DROPNEW          // Uncomment to cause full ring buffers to drop the new character when full\r
+     // #define BUFF_NODROPCHECK      // Uncomment to ignore full ring buffer checks - checking left to user!\r
+\r
+   /* Underflow behaviour - select behaviour when Buffer_GetElement is called with an empty ring buffer: */\r
+     //#define BUFF_EMPTYRETURNSZERO  // Uncomment to return 0 when an empty ring buffer is read\r
+     #define BUFF_NOEMPTYCHECK        // Uncomment to disable checking of empty ring buffers - checking left to user!\r
+       \r
+   /* Buffer storage type - set the datatype for the stored data */\r
+     #define BUFF_DATATYPE uint8_t    // Change to the data type that is going to be stored into the buffer\r
+       \r
+   /* Peek routine - uncomment to include the peek routine (fetches next byte without removing it from the buffer */\r
+     //#define BUFF_USEPEEK\r
+               \r
+#ifndef _RINGBUFF_H_\r
+#define _RINGBUFF_H_\r
+\r
+       /* Includes: */\r
+       #include <avr/io.h>\r
+       #include <avr/interrupt.h>\r
+       #include <util/atomic.h>\r
+       #include <limits.h>\r
+\r
+       #include <LUFA/Common/Common.h>\r
+\r
+       /* Defines and checks: */\r
+       #if defined(BUFF_STATICSIZE)\r
+               #define BUFF_LENGTH BUFF_STATICSIZE\r
+       #else\r
+               #error No buffer length specified!\r
+       #endif\r
+\r
+       #if !(defined(BUFF_DROPOLD) || defined(BUFF_DROPNEW) || defined(BUFF_NODROPCHECK))\r
+               #error No buffer drop mode specified.\r
+       #endif\r
+\r
+       #if !defined(BUFF_DATATYPE)\r
+               #error Ringbuffer storage data type not specified.\r
+       #endif\r
+\r
+       #if defined(BUFF_VOLATILE)\r
+               #define BUFF_MODE            volatile\r
+               #define BUFF_ATOMIC_BLOCK    ATOMIC_BLOCK(ATOMIC_RESTORESTATE)\r
+       #else\r
+               #define BUFF_MODE\r
+               #define BUFF_ATOMIC_BLOCK\r
+       #endif\r
+\r
+       #if (BUFF_STATICSIZE   > LONG_MAX)\r
+               #define RingBuff_Elements_t uint64_t\r
+       #elif (BUFF_STATICSIZE > INT_MAX)\r
+               #define RingBuff_Elements_t uint32_t\r
+       #elif (BUFF_STATICSIZE > CHAR_MAX)\r
+               #define RingBuff_Elements_t uint16_t\r
+       #else\r
+               #define RingBuff_Elements_t uint8_t\r
+       #endif\r
+       \r
+       /* Type Defines: */\r
+       typedef BUFF_DATATYPE RingBuff_Data_t;\r
+\r
+       typedef BUFF_MODE struct\r
+       {\r
+               RingBuff_Data_t      Buffer[BUFF_LENGTH];\r
+               RingBuff_Data_t*     InPtr;\r
+               RingBuff_Data_t*     OutPtr;\r
+               RingBuff_Elements_t  Elements;\r
+       } RingBuff_t;\r
+               \r
+       /* Function Prototypes: */\r
+       void            Buffer_Initialize(RingBuff_t* Buff);\r
+       void            Buffer_StoreElement(RingBuff_t* Buffer, RingBuff_Data_t Data);\r
+       RingBuff_Data_t Buffer_GetElement(RingBuff_t* Buffer);\r
+       #if defined(BUFF_USEPEEK)\r
+               RingBuff_Data_t Buffer_PeekElement(const RingBuff_t* Buffer);\r
+       #endif\r
+       \r
+#endif\r
diff --git a/Demos/Device/ClassDriver/USBtoSerial/USBtoSerial.aps b/Demos/Device/ClassDriver/USBtoSerial/USBtoSerial.aps
new file mode 100644 (file)
index 0000000..2db4f97
--- /dev/null
@@ -0,0 +1 @@
+<AVRStudio><MANAGEMENT><ProjectName>USBtoSerial</ProjectName><Created>30-Sep-2008 14:18:39</Created><LastEdit>30-Sep-2008 14:18:52</LastEdit><ICON>241</ICON><ProjectType>0</ProjectType><Created>30-Sep-2008 14:18:39</Created><Version>4</Version><Build>4, 14, 0, 589</Build><ProjectTypeName>AVR GCC</ProjectTypeName></MANAGEMENT><CODE_CREATION><ObjectFile></ObjectFile><EntryFile></EntryFile><SaveFolder>C:\Users\Dean\Documents\Electronics\Projects\WORK\MyUSBWORK\Demos\USBtoSerial\</SaveFolder></CODE_CREATION><DEBUG_TARGET><CURRENT_TARGET></CURRENT_TARGET><CURRENT_PART></CURRENT_PART><BREAKPOINTS></BREAKPOINTS><IO_EXPAND><HIDE>false</HIDE></IO_EXPAND><REGISTERNAMES><Register>R00</Register><Register>R01</Register><Register>R02</Register><Register>R03</Register><Register>R04</Register><Register>R05</Register><Register>R06</Register><Register>R07</Register><Register>R08</Register><Register>R09</Register><Register>R10</Register><Register>R11</Register><Register>R12</Register><Register>R13</Register><Register>R14</Register><Register>R15</Register><Register>R16</Register><Register>R17</Register><Register>R18</Register><Register>R19</Register><Register>R20</Register><Register>R21</Register><Register>R22</Register><Register>R23</Register><Register>R24</Register><Register>R25</Register><Register>R26</Register><Register>R27</Register><Register>R28</Register><Register>R29</Register><Register>R30</Register><Register>R31</Register></REGISTERNAMES><COM>Auto</COM><COMType>0</COMType><WATCHNUM>0</WATCHNUM><WATCHNAMES><Pane0></Pane0><Pane1></Pane1><Pane2></Pane2><Pane3></Pane3></WATCHNAMES><BreakOnTrcaeFull>0</BreakOnTrcaeFull></DEBUG_TARGET><Debugger><Triggers></Triggers></Debugger><AVRGCCPLUGIN><FILES><SOURCEFILE>Descriptors.c</SOURCEFILE><SOURCEFILE>RingBuff.c</SOURCEFILE><SOURCEFILE>USBtoSerial.c</SOURCEFILE><HEADERFILE>Descriptors.h</HEADERFILE><HEADERFILE>RingBuff.h</HEADERFILE><HEADERFILE>USBtoSerial.h</HEADERFILE><OTHERFILE>makefile</OTHERFILE></FILES><CONFIGS><CONFIG><NAME>default</NAME><USESEXTERNALMAKEFILE>YES</USESEXTERNALMAKEFILE><EXTERNALMAKEFILE>makefile</EXTERNALMAKEFILE><PART>atmega128</PART><HEX>1</HEX><LIST>1</LIST><MAP>1</MAP><OUTPUTFILENAME>USBtoSerial.elf</OUTPUTFILENAME><OUTPUTDIR>default\</OUTPUTDIR><ISDIRTY>1</ISDIRTY><OPTIONS/><INCDIRS/><LIBDIRS/><LIBS/><LINKOBJECTS/><OPTIONSFORALL>-Wall -gdwarf-2 -std=gnu99 -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums</OPTIONSFORALL><LINKEROPTIONS></LINKEROPTIONS><SEGMENTS/></CONFIG></CONFIGS><LASTCONFIG>default</LASTCONFIG><USES_WINAVR>1</USES_WINAVR><GCC_LOC>C:\WinAVR-20080512\bin\avr-gcc.exe</GCC_LOC><MAKE_LOC>C:\WinAVR-20080512\utils\bin\make.exe</MAKE_LOC></AVRGCCPLUGIN><IOView><usergroups/><sort sorted="0" column="0" ordername="0" orderaddress="0" ordergroup="0"/></IOView><Files></Files><Events><Bookmarks></Bookmarks></Events><Trace><Filters></Filters></Trace></AVRStudio>\r
diff --git a/Demos/Device/ClassDriver/USBtoSerial/USBtoSerial.c b/Demos/Device/ClassDriver/USBtoSerial/USBtoSerial.c
new file mode 100644 (file)
index 0000000..85826c2
--- /dev/null
@@ -0,0 +1,175 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  Main source file for the USBtoSerial demo. This file contains the main tasks of\r
+ *  the demo and is responsible for the initial application hardware configuration.\r
+ */\r
+\r
+#include "USBtoSerial.h"\r
+\r
+/** Circular buffer to hold data from the host before it is sent to the device via the serial port. */\r
+RingBuff_t Rx_Buffer;\r
+\r
+/** Circular buffer to hold data from the serial port before it is sent to the host. */\r
+RingBuff_t Tx_Buffer;\r
+\r
+/** LUFA CDC Class driver interface configuration and state information. This structure is\r
+ *  passed to all CDC Class driver functions, so that multiple instances of the same class\r
+ *  within a device can be differentiated from one another.\r
+ */\r
+USB_ClassInfo_CDC_t VirtualSerial_CDC_Interface =\r
+       {\r
+               .ControlInterfaceNumber     = 0,\r
+\r
+               .DataINEndpointNumber       = CDC_TX_EPNUM,\r
+               .DataINEndpointSize         = CDC_TXRX_EPSIZE,\r
+\r
+               .DataOUTEndpointNumber      = CDC_RX_EPNUM,\r
+               .DataOUTEndpointSize        = CDC_TXRX_EPSIZE,\r
+\r
+               .NotificationEndpointNumber = CDC_NOTIFICATION_EPNUM,\r
+               .NotificationEndpointSize   = CDC_NOTIFICATION_EPSIZE,\r
+       };\r
+\r
+/** Main program entry point. This routine contains the overall program flow, including initial\r
+ *  setup of all components and the main program loop.\r
+ */\r
+int main(void)\r
+{\r
+       SetupHardware();\r
+       \r
+       Buffer_Initialize(&Rx_Buffer);\r
+       Buffer_Initialize(&Tx_Buffer);\r
+\r
+       LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);\r
+\r
+       for (;;)\r
+       {\r
+               for (uint8_t DataBytesRem = USB_CDC_BytesReceived(&VirtualSerial_CDC_Interface); DataBytesRem != 0; DataBytesRem--)\r
+               {\r
+                       if (!(BUFF_STATICSIZE - Rx_Buffer.Elements))\r
+                         break;\r
+                         \r
+                       Buffer_StoreElement(&Rx_Buffer, USB_CDC_ReceiveByte(&VirtualSerial_CDC_Interface));\r
+               }\r
+               \r
+               if (Tx_Buffer.Elements)\r
+                 USB_CDC_SendByte(&VirtualSerial_CDC_Interface, Buffer_GetElement(&Rx_Buffer));\r
+                 \r
+               if (Rx_Buffer.Elements)\r
+                 Serial_TxByte(Buffer_GetElement(&Rx_Buffer));\r
+               \r
+               USB_CDC_USBTask(&VirtualSerial_CDC_Interface);\r
+               USB_USBTask();\r
+       }\r
+}\r
+\r
+/** Configures the board hardware and chip peripherals for the demo's functionality. */\r
+void SetupHardware(void)\r
+{\r
+       /* Disable watchdog if enabled by bootloader/fuses */\r
+       MCUSR &= ~(1 << WDRF);\r
+       wdt_disable();\r
+\r
+       /* Disable clock division */\r
+       clock_prescale_set(clock_div_1);\r
+\r
+       /* Hardware Initialization */\r
+       Joystick_Init();\r
+       LEDs_Init();\r
+       USB_Init();\r
+}\r
+\r
+/** Event handler for the library USB Connection event. */\r
+void EVENT_USB_Connect(void)\r
+{\r
+       LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING);\r
+}\r
+\r
+/** Event handler for the library USB Disconnection event. */\r
+void EVENT_USB_Disconnect(void)\r
+{\r
+       LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);\r
+}\r
+\r
+/** Event handler for the library USB Configuration Changed event. */\r
+void EVENT_USB_ConfigurationChanged(void)\r
+{\r
+       LEDs_SetAllLEDs(LEDMASK_USB_READY);\r
+\r
+       if (!(USB_CDC_ConfigureEndpoints(&VirtualSerial_CDC_Interface)))\r
+         LEDs_SetAllLEDs(LEDMASK_USB_ERROR);\r
+}\r
+\r
+/** Event handler for the library USB Unhandled Control Packet event. */\r
+void EVENT_USB_UnhandledControlPacket(void)\r
+{\r
+       USB_CDC_ProcessControlPacket(&VirtualSerial_CDC_Interface);\r
+}\r
+\r
+/** ISR to manage the reception of data from the serial port, placing received bytes into a circular buffer\r
+ *  for later transmission to the host.\r
+ */\r
+ISR(USART1_RX_vect, ISR_BLOCK)\r
+{\r
+       if (USB_IsConnected)\r
+         Buffer_StoreElement(&Tx_Buffer, UDR1);\r
+}\r
+\r
+/** Event handler for the CDC Class driver Line Encoding Changed event.\r
+ *\r
+ *  \param CDCInterfaceInfo  Pointer to the CDC class interface configuration structure being referenced\r
+ */\r
+void EVENT_USB_CDC_LineEncodingChanged(USB_ClassInfo_CDC_t* CDCInterfaceInfo)\r
+{\r
+       uint8_t ConfigMask = 0;\r
+\r
+       if (CDCInterfaceInfo->LineEncoding.ParityType == CDC_PARITY_Odd)\r
+         ConfigMask = ((1 << UPM11) | (1 << UPM10));\r
+       else if (CDCInterfaceInfo->LineEncoding.ParityType == CDC_PARITY_Even)\r
+         ConfigMask = (1 << UPM11);\r
+\r
+       if (CDCInterfaceInfo->LineEncoding.CharFormat == CDC_LINEENCODING_TwoStopBits)\r
+         ConfigMask |= (1 << USBS1);\r
+\r
+       if (CDCInterfaceInfo->LineEncoding.DataBits == 6)\r
+         ConfigMask |= (1 << UCSZ10);\r
+       else if (CDCInterfaceInfo->LineEncoding.DataBits == 7)\r
+         ConfigMask |= (1 << UCSZ11);\r
+       else if (CDCInterfaceInfo->LineEncoding.DataBits == 8)\r
+         ConfigMask |= ((1 << UCSZ11) | (1 << UCSZ10));\r
+       \r
+       UCSR1A = (1 << U2X1);   \r
+       UCSR1B = ((1 << RXCIE1) | (1 << TXEN1) | (1 << RXEN1));\r
+       UCSR1C = ConfigMask;    \r
+       UBRR1  = SERIAL_2X_UBBRVAL((uint16_t)CDCInterfaceInfo->LineEncoding.BaudRateBPS);\r
+}\r
diff --git a/Demos/Device/ClassDriver/USBtoSerial/USBtoSerial.h b/Demos/Device/ClassDriver/USBtoSerial/USBtoSerial.h
new file mode 100644 (file)
index 0000000..9660381
--- /dev/null
@@ -0,0 +1,79 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  Header file for USBtoSerial.c.\r
+ */\r
+\r
+#ifndef _USB_SERIAL_H_\r
+#define _USB_SERIAL_H_\r
+\r
+       /* Includes: */\r
+               #include <avr/io.h>\r
+               #include <avr/wdt.h>\r
+               #include <avr/interrupt.h>\r
+               #include <avr/power.h>\r
+\r
+               #include "Descriptors.h"\r
+\r
+               #include "Lib/RingBuff.h"\r
+\r
+               #include <LUFA/Version.h>\r
+               #include <LUFA/Drivers/Board/LEDs.h>\r
+               #include <LUFA/Drivers/Board/Joystick.h>\r
+               #include <LUFA/Drivers/Peripheral/Serial.h>\r
+               #include <LUFA/Drivers/USB/USB.h>\r
+               #include <LUFA/Drivers/USB/Class/Device/CDC.h>\r
+\r
+       /* Macros: */\r
+               /** LED mask for the library LED driver, to indicate that the USB interface is not ready. */\r
+               #define LEDMASK_USB_NOTREADY      LEDS_LED1\r
+\r
+               /** LED mask for the library LED driver, to indicate that the USB interface is enumerating. */\r
+               #define LEDMASK_USB_ENUMERATING  (LEDS_LED2 | LEDS_LED3)\r
+\r
+               /** LED mask for the library LED driver, to indicate that the USB interface is ready. */\r
+               #define LEDMASK_USB_READY        (LEDS_LED2 | LEDS_LED4)\r
+\r
+               /** LED mask for the library LED driver, to indicate that an error has occurred in the USB interface. */\r
+               #define LEDMASK_USB_ERROR        (LEDS_LED1 | LEDS_LED3)\r
+               \r
+       /* Function Prototypes: */\r
+               void SetupHardware(void);\r
+\r
+               void EVENT_USB_Connect(void);\r
+               void EVENT_USB_Disconnect(void);\r
+               void EVENT_USB_ConfigurationChanged(void);\r
+               void EVENT_USB_UnhandledControlPacket(void);\r
+               \r
+               void EVENT_USB_CDC_LineEncodingChanged(USB_ClassInfo_CDC_t* CDCInterfaceInfo);\r
+\r
+#endif\r
diff --git a/Demos/Device/ClassDriver/USBtoSerial/USBtoSerial.txt b/Demos/Device/ClassDriver/USBtoSerial/USBtoSerial.txt
new file mode 100644 (file)
index 0000000..e334672
--- /dev/null
@@ -0,0 +1,68 @@
+/** \file\r
+ *\r
+ *  This file contains special DoxyGen information for the generation of the main page and other special\r
+ *  documentation pages. It is not a project source file.\r
+ */\r
\r
+/** \mainpage USB to Serial Converter Demo (via CDC-ACM class)\r
+ *\r
+ *  \section SSec_Info USB Information:\r
+ *\r
+ *  The following table gives a rundown of the USB utilization of this demo.\r
+ *\r
+ *  <table>\r
+ *   <tr>\r
+ *    <td><b>USB Mode:</b></td>\r
+ *    <td>Device</td>\r
+ *   </tr>\r
+ *   <tr>\r
+ *    <td><b>USB Class:</b></td>\r
+ *    <td>Communications Device Class (CDC)</td>\r
+ *   </tr>\r
+ *   <tr> \r
+ *    <td><b>USB Subclass:</b></td>\r
+ *    <td>Abstract Control Model (ACM)</td>\r
+ *   </tr>\r
+ *   <tr>\r
+ *    <td><b>Relevant Standards:</b></td>\r
+ *    <td>USBIF CDC Class Standard</td>\r
+ *   </tr>\r
+ *   <tr>\r
+ *    <td><b>Usable Speeds:</b></td>\r
+ *    <td>Full Speed Mode</td>\r
+ *   </tr>\r
+ *  </table>\r
+ *\r
+ *  \section SSec_Description Project Description: \r
+ *\r
+ *  Communications Device Class demonstration application.\r
+ *  This gives a simple reference application for implementing\r
+ *  a USB to Serial converter using the CDC class. Sent and\r
+ *  received data on the serial port is communicated to the USB\r
+ *  host.\r
+ *  \r
+ *  After running this demo for the first time on a new computer,\r
+ *  you will need to supply the .INF file located in this demo\r
+ *  project's directory as the device's driver when running under\r
+ *  Windows. This will enable Windows to use its inbuilt CDC drivers,\r
+ *  negating the need for custom drivers for the device. Other\r
+ *  Operating Systems should automatically use their own inbuilt\r
+ *  CDC-ACM drivers.\r
+ *\r
+ *  \section SSec_Options Project Options\r
+ *\r
+ *  The following defines can be found in this demo, which can control the demo behaviour when defined, or changed in value.\r
+ *\r
+ *  <table>\r
+ *   <tr>\r
+ *    <td><b>Define Name:</b></td>\r
+ *    <td><b>Location:</b></td>\r
+ *    <td><b>Description:</b></td>\r
+ *   </tr>\r
+ *   <tr>\r
+ *    <td>BUFF_STATICSIZE</td>\r
+ *    <td>RingBuff.h</td>\r
+ *    <td>Defines the maximum number of bytes which can be buffered in each Ring Buffer.</td>\r
+ *   </tr>\r
+ *  </table>\r
+ */
\ No newline at end of file
diff --git a/Demos/Device/ClassDriver/USBtoSerial/makefile b/Demos/Device/ClassDriver/USBtoSerial/makefile
new file mode 100644 (file)
index 0000000..5cf9c61
--- /dev/null
@@ -0,0 +1,734 @@
+# Hey Emacs, this is a -*- makefile -*-\r
+#----------------------------------------------------------------------------\r
+# WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al.\r
+#  >> Modified for use with the LUFA project. <<\r
+#\r
+# Released to the Public Domain\r
+#\r
+# Additional material for this makefile was written by:\r
+# Peter Fleury\r
+# Tim Henigan\r
+# Colin O'Flynn\r
+# Reiner Patommel\r
+# Markus Pfaff\r
+# Sander Pool\r
+# Frederik Rouleau\r
+# Carlos Lamas\r
+# Dean Camera\r
+# Opendous Inc.\r
+# Denver Gingerich\r
+#\r
+#----------------------------------------------------------------------------\r
+# On command line:\r
+#\r
+# make all = Make software.\r
+#\r
+# make clean = Clean out built project files.\r
+#\r
+# make coff = Convert ELF to AVR COFF.\r
+#\r
+# make extcoff = Convert ELF to AVR Extended COFF.\r
+#\r
+# make program = Download the hex file to the device, using avrdude.\r
+#                Please customize the avrdude settings below first!\r
+#\r
+# make dfu = Download the hex file to the device, using dfu-programmer (must\r
+#            have dfu-programmer installed).\r
+#\r
+# make flip = Download the hex file to the device, using Atmel FLIP (must\r
+#             have Atmel FLIP installed).\r
+#\r
+# make dfu-ee = Download the eeprom file to the device, using dfu-programmer\r
+#               (must have dfu-programmer installed).\r
+#\r
+# make flip-ee = Download the eeprom file to the device, using Atmel FLIP\r
+#                (must have Atmel FLIP installed).\r
+#\r
+# make doxygen = Generate DoxyGen documentation for the project (must have\r
+#                DoxyGen installed)\r
+#\r
+# make debug = Start either simulavr or avarice as specified for debugging, \r
+#              with avr-gdb or avr-insight as the front end for debugging.\r
+#\r
+# make filename.s = Just compile filename.c into the assembler code only.\r
+#\r
+# make filename.i = Create a preprocessed source file for use in submitting\r
+#                   bug reports to the GCC project.\r
+#\r
+# To rebuild project do "make clean" then "make all".\r
+#----------------------------------------------------------------------------\r
+\r
+\r
+# MCU name\r
+MCU = at90usb1287\r
+\r
+\r
+# Target board (see library "Board Types" documentation, USER or blank for projects not requiring\r
+# LUFA board drivers). If USER is selected, put custom board drivers in a directory called \r
+# "Board" inside the application directory.\r
+BOARD  = USBKEY\r
+\r
+\r
+# Processor frequency.\r
+#     This will define a symbol, F_CPU, in all source code files equal to the \r
+#     processor frequency. You can then use this symbol in your source code to \r
+#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done\r
+#     automatically to create a 32-bit value in your source code.\r
+#     Typical values are:\r
+#         F_CPU =  1000000\r
+#         F_CPU =  1843200\r
+#         F_CPU =  2000000\r
+#         F_CPU =  3686400\r
+#         F_CPU =  4000000\r
+#         F_CPU =  7372800\r
+#         F_CPU =  8000000\r
+#         F_CPU = 11059200\r
+#         F_CPU = 14745600\r
+#         F_CPU = 16000000\r
+#         F_CPU = 18432000\r
+#         F_CPU = 20000000\r
+F_CPU = 8000000\r
+\r
+\r
+# Input clock frequency.\r
+#     This will define a symbol, F_CLOCK, in all source code files equal to the \r
+#     input clock frequency (before any prescaling is performed). This value may\r
+#     differ from F_CPU if prescaling is used on the latter, and is required as the\r
+#     raw input clock is fed directly to the PLL sections of the AVR for high speed\r
+#     clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'\r
+#     at the end, this will be done automatically to create a 32-bit value in your\r
+#     source code.\r
+#\r
+#     If no clock division is performed on the input clock inside the AVR (via the\r
+#     CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.\r
+F_CLOCK = 8000000\r
+\r
+\r
+# Output format. (can be srec, ihex, binary)\r
+FORMAT = ihex\r
+\r
+\r
+# Target file name (without extension).\r
+TARGET = USBtoSerial\r
+\r
+\r
+# Object files directory\r
+#     To put object files in current directory, use a dot (.), do NOT make\r
+#     this an empty or blank macro!\r
+OBJDIR = .\r
+\r
+\r
+# Path to the LUFA library\r
+LUFA_PATH = ../../..\r
+\r
+\r
+# List C source files here. (C dependencies are automatically generated.)\r
+SRC = $(TARGET).c                                                 \\r
+         Descriptors.c                                               \\r
+         Lib/RingBuff.c                                              \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/DevChapter9.c        \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Endpoint.c           \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Host.c               \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/HostChapter9.c       \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/LowLevel.c           \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Pipe.c               \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/Events.c            \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBInterrupt.c      \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBTask.c           \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/ConfigDescriptor.c  \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/Class/Device/CDC.c            \\r
+\r
+\r
+# List C++ source files here. (C dependencies are automatically generated.)\r
+CPPSRC = \r
+\r
+\r
+# List Assembler source files here.\r
+#     Make them always end in a capital .S.  Files ending in a lowercase .s\r
+#     will not be considered source files but generated files (assembler\r
+#     output from the compiler), and will be deleted upon "make clean"!\r
+#     Even though the DOS/Win* filesystem matches both .s and .S the same,\r
+#     it will preserve the spelling of the filenames, and gcc itself does\r
+#     care about how the name is spelled on its command-line.\r
+ASRC =\r
+\r
+\r
+# Optimization level, can be [0, 1, 2, 3, s]. \r
+#     0 = turn off optimization. s = optimize for size.\r
+#     (Note: 3 is not always the best optimization level. See avr-libc FAQ.)\r
+OPT = s\r
+\r
+\r
+# Debugging format.\r
+#     Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs.\r
+#     AVR Studio 4.10 requires dwarf-2.\r
+#     AVR [Extended] COFF format requires stabs, plus an avr-objcopy run.\r
+DEBUG = dwarf-2\r
+\r
+\r
+# List any extra directories to look for include files here.\r
+#     Each directory must be seperated by a space.\r
+#     Use forward slashes for directory separators.\r
+#     For a directory that has spaces, enclose it in quotes.\r
+EXTRAINCDIRS = $(LUFA_PATH)/\r
+\r
+\r
+# Compiler flag to set the C Standard level.\r
+#     c89   = "ANSI" C\r
+#     gnu89 = c89 plus GCC extensions\r
+#     c99   = ISO C99 standard (not yet fully implemented)\r
+#     gnu99 = c99 plus GCC extensions\r
+CSTANDARD = -std=gnu99\r
+\r
+\r
+# Place -D or -U options here for C sources\r
+CDEFS  = -DF_CPU=$(F_CPU)UL -DF_CLOCK=$(F_CLOCK)UL -DBOARD=BOARD_$(BOARD)\r
+CDEFS += -DUSE_NONSTANDARD_DESCRIPTOR_NAMES -DUSB_DEVICE_ONLY\r
+CDEFS += -DFIXED_CONTROL_ENDPOINT_SIZE=8 -DUSE_SINGLE_DEVICE_CONFIGURATION\r
+CDEFS += -DUSE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)"\r
+\r
+\r
+# Place -D or -U options here for ASM sources\r
+ADEFS = -DF_CPU=$(F_CPU)\r
+\r
+\r
+# Place -D or -U options here for C++ sources\r
+CPPDEFS = -DF_CPU=$(F_CPU)UL\r
+#CPPDEFS += -D__STDC_LIMIT_MACROS\r
+#CPPDEFS += -D__STDC_CONSTANT_MACROS\r
+\r
+\r
+\r
+#---------------- Compiler Options C ----------------\r
+#  -g*:          generate debugging information\r
+#  -O*:          optimization level\r
+#  -f...:        tuning, see GCC manual and avr-libc documentation\r
+#  -Wall...:     warning level\r
+#  -Wa,...:      tell GCC to pass this to the assembler.\r
+#    -adhlns...: create assembler listing\r
+CFLAGS = -g$(DEBUG)\r
+CFLAGS += $(CDEFS)\r
+CFLAGS += -O$(OPT)\r
+CFLAGS += -funsigned-char\r
+CFLAGS += -funsigned-bitfields\r
+CFLAGS += -ffunction-sections\r
+CFLAGS += -fpack-struct\r
+CFLAGS += -fshort-enums\r
+CFLAGS += -finline-limit=20\r
+CFLAGS += -Wall\r
+CFLAGS += -Wstrict-prototypes\r
+CFLAGS += -Wundef\r
+#CFLAGS += -fno-unit-at-a-time\r
+#CFLAGS += -Wunreachable-code\r
+#CFLAGS += -Wsign-compare\r
+CFLAGS += -Wa,-adhlns=$(<:%.c=$(OBJDIR)/%.lst)\r
+CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))\r
+CFLAGS += $(CSTANDARD)\r
+\r
+\r
+#---------------- Compiler Options C++ ----------------\r
+#  -g*:          generate debugging information\r
+#  -O*:          optimization level\r
+#  -f...:        tuning, see GCC manual and avr-libc documentation\r
+#  -Wall...:     warning level\r
+#  -Wa,...:      tell GCC to pass this to the assembler.\r
+#    -adhlns...: create assembler listing\r
+CPPFLAGS = -g$(DEBUG)\r
+CPPFLAGS += $(CPPDEFS)\r
+CPPFLAGS += -O$(OPT)\r
+CPPFLAGS += -funsigned-char\r
+CPPFLAGS += -funsigned-bitfields\r
+CPPFLAGS += -fpack-struct\r
+CPPFLAGS += -fshort-enums\r
+CPPFLAGS += -fno-exceptions\r
+CPPFLAGS += -Wall\r
+CFLAGS += -Wundef\r
+#CPPFLAGS += -mshort-calls\r
+#CPPFLAGS += -fno-unit-at-a-time\r
+#CPPFLAGS += -Wstrict-prototypes\r
+#CPPFLAGS += -Wunreachable-code\r
+#CPPFLAGS += -Wsign-compare\r
+CPPFLAGS += -Wa,-adhlns=$(<:%.cpp=$(OBJDIR)/%.lst)\r
+CPPFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))\r
+#CPPFLAGS += $(CSTANDARD)\r
+\r
+\r
+#---------------- Assembler Options ----------------\r
+#  -Wa,...:   tell GCC to pass this to the assembler.\r
+#  -adhlns:   create listing\r
+#  -gstabs:   have the assembler create line number information; note that\r
+#             for use in COFF files, additional information about filenames\r
+#             and function names needs to be present in the assembler source\r
+#             files -- see avr-libc docs [FIXME: not yet described there]\r
+#  -listing-cont-lines: Sets the maximum number of continuation lines of hex \r
+#       dump that will be displayed for a given single line of source input.\r
+ASFLAGS = $(ADEFS) -Wa,-adhlns=$(<:%.S=$(OBJDIR)/%.lst),-gstabs,--listing-cont-lines=100\r
+\r
+\r
+#---------------- Library Options ----------------\r
+# Minimalistic printf version\r
+PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min\r
+\r
+# Floating point printf version (requires MATH_LIB = -lm below)\r
+PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt\r
+\r
+# If this is left blank, then it will use the Standard printf version.\r
+PRINTF_LIB = \r
+#PRINTF_LIB = $(PRINTF_LIB_MIN)\r
+#PRINTF_LIB = $(PRINTF_LIB_FLOAT)\r
+\r
+\r
+# Minimalistic scanf version\r
+SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min\r
+\r
+# Floating point + %[ scanf version (requires MATH_LIB = -lm below)\r
+SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt\r
+\r
+# If this is left blank, then it will use the Standard scanf version.\r
+SCANF_LIB = \r
+#SCANF_LIB = $(SCANF_LIB_MIN)\r
+#SCANF_LIB = $(SCANF_LIB_FLOAT)\r
+\r
+\r
+MATH_LIB = -lm\r
+\r
+\r
+# List any extra directories to look for libraries here.\r
+#     Each directory must be seperated by a space.\r
+#     Use forward slashes for directory separators.\r
+#     For a directory that has spaces, enclose it in quotes.\r
+EXTRALIBDIRS = \r
+\r
+\r
+\r
+#---------------- External Memory Options ----------------\r
+\r
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),\r
+# used for variables (.data/.bss) and heap (malloc()).\r
+#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff\r
+\r
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),\r
+# only used for heap (malloc()).\r
+#EXTMEMOPTS = -Wl,--section-start,.data=0x801100,--defsym=__heap_end=0x80ffff\r
+\r
+EXTMEMOPTS =\r
+\r
+\r
+\r
+#---------------- Linker Options ----------------\r
+#  -Wl,...:     tell GCC to pass this to linker.\r
+#    -Map:      create map file\r
+#    --cref:    add cross reference to  map file\r
+LDFLAGS = -Wl,-Map=$(TARGET).map,--cref\r
+LDFLAGS += -Wl,--relax \r
+LDFLAGS += -Wl,--gc-sections\r
+LDFLAGS += $(EXTMEMOPTS)\r
+LDFLAGS += $(patsubst %,-L%,$(EXTRALIBDIRS))\r
+LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)\r
+#LDFLAGS += -T linker_script.x\r
+\r
+\r
+\r
+#---------------- Programming Options (avrdude) ----------------\r
+\r
+# Programming hardware: alf avr910 avrisp bascom bsd \r
+# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500\r
+#\r
+# Type: avrdude -c ?\r
+# to get a full listing.\r
+#\r
+AVRDUDE_PROGRAMMER = jtagmkII\r
+\r
+# com1 = serial port. Use lpt1 to connect to parallel port.\r
+AVRDUDE_PORT = usb\r
+\r
+AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex\r
+#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep\r
+\r
+\r
+# Uncomment the following if you want avrdude's erase cycle counter.\r
+# Note that this counter needs to be initialized first using -Yn,\r
+# see avrdude manual.\r
+#AVRDUDE_ERASE_COUNTER = -y\r
+\r
+# Uncomment the following if you do /not/ wish a verification to be\r
+# performed after programming the device.\r
+#AVRDUDE_NO_VERIFY = -V\r
+\r
+# Increase verbosity level.  Please use this when submitting bug\r
+# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude> \r
+# to submit bug reports.\r
+#AVRDUDE_VERBOSE = -v -v\r
+\r
+AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)\r
+AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY)\r
+AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE)\r
+AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER)\r
+\r
+\r
+\r
+#---------------- Debugging Options ----------------\r
+\r
+# For simulavr only - target MCU frequency.\r
+DEBUG_MFREQ = $(F_CPU)\r
+\r
+# Set the DEBUG_UI to either gdb or insight.\r
+# DEBUG_UI = gdb\r
+DEBUG_UI = insight\r
+\r
+# Set the debugging back-end to either avarice, simulavr.\r
+DEBUG_BACKEND = avarice\r
+#DEBUG_BACKEND = simulavr\r
+\r
+# GDB Init Filename.\r
+GDBINIT_FILE = __avr_gdbinit\r
+\r
+# When using avarice settings for the JTAG\r
+JTAG_DEV = /dev/com1\r
+\r
+# Debugging port used to communicate between GDB / avarice / simulavr.\r
+DEBUG_PORT = 4242\r
+\r
+# Debugging host used to communicate between GDB / avarice / simulavr, normally\r
+#     just set to localhost unless doing some sort of crazy debugging when \r
+#     avarice is running on a different computer.\r
+DEBUG_HOST = localhost\r
+\r
+\r
+\r
+#============================================================================\r
+\r
+\r
+# Define programs and commands.\r
+SHELL = sh\r
+CC = avr-gcc\r
+OBJCOPY = avr-objcopy\r
+OBJDUMP = avr-objdump\r
+SIZE = avr-size\r
+AR = avr-ar rcs\r
+NM = avr-nm\r
+AVRDUDE = avrdude\r
+REMOVE = rm -f\r
+REMOVEDIR = rm -rf\r
+COPY = cp\r
+WINSHELL = cmd\r
+\r
+# Define Messages\r
+# English\r
+MSG_ERRORS_NONE = Errors: none\r
+MSG_BEGIN = -------- begin --------\r
+MSG_END = --------  end  --------\r
+MSG_SIZE_BEFORE = Size before: \r
+MSG_SIZE_AFTER = Size after:\r
+MSG_COFF = Converting to AVR COFF:\r
+MSG_EXTENDED_COFF = Converting to AVR Extended COFF:\r
+MSG_FLASH = Creating load file for Flash:\r
+MSG_EEPROM = Creating load file for EEPROM:\r
+MSG_EXTENDED_LISTING = Creating Extended Listing:\r
+MSG_SYMBOL_TABLE = Creating Symbol Table:\r
+MSG_LINKING = Linking:\r
+MSG_COMPILING = Compiling C:\r
+MSG_COMPILING_CPP = Compiling C++:\r
+MSG_ASSEMBLING = Assembling:\r
+MSG_CLEANING = Cleaning project:\r
+MSG_CREATING_LIBRARY = Creating library:\r
+\r
+\r
+\r
+\r
+# Define all object files.\r
+OBJ = $(SRC:%.c=$(OBJDIR)/%.o) $(CPPSRC:%.cpp=$(OBJDIR)/%.o) $(ASRC:%.S=$(OBJDIR)/%.o) \r
+\r
+# Define all listing files.\r
+LST = $(SRC:%.c=$(OBJDIR)/%.lst) $(CPPSRC:%.cpp=$(OBJDIR)/%.lst) $(ASRC:%.S=$(OBJDIR)/%.lst) \r
+\r
+\r
+# Compiler flags to generate dependency files.\r
+GENDEPFLAGS = -MMD -MP -MF .dep/$(@F).d\r
+\r
+\r
+# Combine all necessary flags and optional flags.\r
+# Add target processor to flags.\r
+ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS)\r
+ALL_CPPFLAGS = -mmcu=$(MCU) -I. -x c++ $(CPPFLAGS) $(GENDEPFLAGS)\r
+ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)\r
+\r
+\r
+\r
+\r
+\r
+# Default target.\r
+all: begin gccversion sizebefore build checkhooks checklibmode checkboard sizeafter end\r
+\r
+# Change the build target to build a HEX file or a library.\r
+build: elf hex eep lss sym\r
+#build: lib\r
+\r
+\r
+elf: $(TARGET).elf\r
+hex: $(TARGET).hex\r
+eep: $(TARGET).eep\r
+lss: $(TARGET).lss\r
+sym: $(TARGET).sym\r
+LIBNAME=lib$(TARGET).a\r
+lib: $(LIBNAME)\r
+\r
+\r
+\r
+# Eye candy.\r
+# AVR Studio 3.x does not check make's exit code but relies on\r
+# the following magic strings to be generated by the compile job.\r
+begin:\r
+       @echo\r
+       @echo $(MSG_BEGIN)\r
+\r
+end:\r
+       @echo $(MSG_END)\r
+       @echo\r
+\r
+\r
+# Display size of file.\r
+HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex\r
+ELFSIZE = $(SIZE) $(MCU_FLAG) $(FORMAT_FLAG) $(TARGET).elf\r
+MCU_FLAG = $(shell $(SIZE) --help | grep -- --mcu > /dev/null && echo --mcu=$(MCU) )\r
+FORMAT_FLAG = $(shell $(SIZE) --help | grep -- --format=.*avr > /dev/null && echo --format=avr )\r
+\r
+sizebefore:\r
+       @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \\r
+       2>/dev/null; echo; fi\r
+\r
+sizeafter:\r
+       @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \\r
+       2>/dev/null; echo; fi\r
+\r
+checkhooks: build\r
+       @echo\r
+       @echo ------- Unhooked LUFA Events -------\r
+       @$(shell) (grep -s '^EVENT_.*LUFA/.*\\.o' $(TARGET).map | \\r
+                  cut -d' ' -f1 | cut -d'_' -f2- | grep ".*") || \\r
+                          echo "(None)"\r
+       @echo ------------------------------------\r
+\r
+checklibmode:\r
+       @echo\r
+       @echo ----------- Library Mode -----------\r
+       @$(shell) ($(CC) $(ALL_CFLAGS) -E -dM - < /dev/null \\r
+                 | grep 'USB_\(DEVICE\|HOST\)_ONLY' | cut -d' ' -f2 | grep ".*") \\r
+                 || echo "No specific mode (both device and host mode allowable)."\r
+       @echo ------------------------------------\r
+\r
+checkboard:\r
+       @echo\r
+       @echo ---------- Selected Board ----------\r
+       @echo Selected board model is $(BOARD).\r
+       @echo ------------------------------------\r
+       \r
+# Display compiler version information.\r
+gccversion : \r
+       @$(CC) --version\r
+\r
+\r
+\r
+# Program the device.  \r
+program: $(TARGET).hex $(TARGET).eep\r
+       $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)\r
+\r
+flip: $(TARGET).hex\r
+       batchisp -hardware usb -device $(MCU) -operation erase f\r
+       batchisp -hardware usb -device $(MCU) -operation loadbuffer $(TARGET).hex program\r
+       batchisp -hardware usb -device $(MCU) -operation start reset 0\r
+\r
+dfu: $(TARGET).hex\r
+       dfu-programmer $(MCU) erase\r
+       dfu-programmer $(MCU) flash --debug 1 $(TARGET).hex\r
+       dfu-programmer $(MCU) reset\r
+\r
+flip-ee: $(TARGET).hex $(TARGET).eep\r
+       copy $(TARGET).eep $(TARGET)eep.hex\r
+       batchisp -hardware usb -device $(MCU) -operation memory EEPROM erase\r
+       batchisp -hardware usb -device $(MCU) -operation memory EEPROM loadbuffer $(TARGET)eep.hex program\r
+       batchisp -hardware usb -device $(MCU) -operation start reset 0\r
+\r
+dfu-ee: $(TARGET).hex $(TARGET).eep\r
+       dfu-programmer $(MCU) flash-eeprom --debug 1 --suppress-bootloader-mem $(TARGET).eep\r
+       dfu-programmer $(MCU) reset\r
+\r
+\r
+# Generate avr-gdb config/init file which does the following:\r
+#     define the reset signal, load the target file, connect to target, and set \r
+#     a breakpoint at main().\r
+gdb-config: \r
+       @$(REMOVE) $(GDBINIT_FILE)\r
+       @echo define reset >> $(GDBINIT_FILE)\r
+       @echo SIGNAL SIGHUP >> $(GDBINIT_FILE)\r
+       @echo end >> $(GDBINIT_FILE)\r
+       @echo file $(TARGET).elf >> $(GDBINIT_FILE)\r
+       @echo target remote $(DEBUG_HOST):$(DEBUG_PORT)  >> $(GDBINIT_FILE)\r
+ifeq ($(DEBUG_BACKEND),simulavr)\r
+       @echo load  >> $(GDBINIT_FILE)\r
+endif\r
+       @echo break main >> $(GDBINIT_FILE)\r
+\r
+debug: gdb-config $(TARGET).elf\r
+ifeq ($(DEBUG_BACKEND), avarice)\r
+       @echo Starting AVaRICE - Press enter when "waiting to connect" message displays.\r
+       @$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \\r
+       $(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT)\r
+       @$(WINSHELL) /c pause\r
+\r
+else\r
+       @$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \\r
+       $(DEBUG_MFREQ) --port $(DEBUG_PORT)\r
+endif\r
+       @$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE)\r
+\r
+\r
+\r
+\r
+# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.\r
+COFFCONVERT = $(OBJCOPY) --debugging\r
+COFFCONVERT += --change-section-address .data-0x800000\r
+COFFCONVERT += --change-section-address .bss-0x800000\r
+COFFCONVERT += --change-section-address .noinit-0x800000\r
+COFFCONVERT += --change-section-address .eeprom-0x810000\r
+\r
+\r
+\r
+coff: $(TARGET).elf\r
+       @echo\r
+       @echo $(MSG_COFF) $(TARGET).cof\r
+       $(COFFCONVERT) -O coff-avr $< $(TARGET).cof\r
+\r
+\r
+extcoff: $(TARGET).elf\r
+       @echo\r
+       @echo $(MSG_EXTENDED_COFF) $(TARGET).cof\r
+       $(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof\r
+\r
+\r
+\r
+# Create final output files (.hex, .eep) from ELF output file.\r
+%.hex: %.elf\r
+       @echo\r
+       @echo $(MSG_FLASH) $@\r
+       $(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@\r
+\r
+%.eep: %.elf\r
+       @echo\r
+       @echo $(MSG_EEPROM) $@\r
+       -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \\r
+       --change-section-lma .eeprom=0 --no-change-warnings -O $(FORMAT) $< $@ || exit 0\r
+\r
+# Create extended listing file from ELF output file.\r
+%.lss: %.elf\r
+       @echo\r
+       @echo $(MSG_EXTENDED_LISTING) $@\r
+       $(OBJDUMP) -h -z -S $< > $@\r
+\r
+# Create a symbol table from ELF output file.\r
+%.sym: %.elf\r
+       @echo\r
+       @echo $(MSG_SYMBOL_TABLE) $@\r
+       $(NM) -n $< > $@\r
+\r
+\r
+\r
+# Create library from object files.\r
+.SECONDARY : $(TARGET).a\r
+.PRECIOUS : $(OBJ)\r
+%.a: $(OBJ)\r
+       @echo\r
+       @echo $(MSG_CREATING_LIBRARY) $@\r
+       $(AR) $@ $(OBJ)\r
+\r
+\r
+# Link: create ELF output file from object files.\r
+.SECONDARY : $(TARGET).elf\r
+.PRECIOUS : $(OBJ)\r
+%.elf: $(OBJ)\r
+       @echo\r
+       @echo $(MSG_LINKING) $@\r
+       $(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)\r
+\r
+\r
+# Compile: create object files from C source files.\r
+$(OBJDIR)/%.o : %.c\r
+       @echo\r
+       @echo $(MSG_COMPILING) $<\r
+       $(CC) -c $(ALL_CFLAGS) $< -o $@ \r
+\r
+\r
+# Compile: create object files from C++ source files.\r
+$(OBJDIR)/%.o : %.cpp\r
+       @echo\r
+       @echo $(MSG_COMPILING_CPP) $<\r
+       $(CC) -c $(ALL_CPPFLAGS) $< -o $@ \r
+\r
+\r
+# Compile: create assembler files from C source files.\r
+%.s : %.c\r
+       $(CC) -S $(ALL_CFLAGS) $< -o $@\r
+\r
+\r
+# Compile: create assembler files from C++ source files.\r
+%.s : %.cpp\r
+       $(CC) -S $(ALL_CPPFLAGS) $< -o $@\r
+\r
+\r
+# Assemble: create object files from assembler source files.\r
+$(OBJDIR)/%.o : %.S\r
+       @echo\r
+       @echo $(MSG_ASSEMBLING) $<\r
+       $(CC) -c $(ALL_ASFLAGS) $< -o $@\r
+\r
+\r
+# Create preprocessed source for use in sending a bug report.\r
+%.i : %.c\r
+       $(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ \r
+       \r
+\r
+# Target: clean project.\r
+clean: begin clean_list clean_binary end\r
+\r
+clean_binary:\r
+       $(REMOVE) $(TARGET).hex\r
+       \r
+clean_list:\r
+       @echo $(MSG_CLEANING)\r
+       $(REMOVE) $(TARGET).eep\r
+       $(REMOVE) $(TARGET)eep.hex\r
+       $(REMOVE) $(TARGET).cof\r
+       $(REMOVE) $(TARGET).elf\r
+       $(REMOVE) $(TARGET).map\r
+       $(REMOVE) $(TARGET).sym\r
+       $(REMOVE) $(TARGET).lss\r
+       $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.o)\r
+       $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.lst)\r
+       $(REMOVE) $(SRC:.c=.s)\r
+       $(REMOVE) $(SRC:.c=.d)\r
+       $(REMOVE) $(SRC:.c=.i)\r
+       $(REMOVEDIR) .dep\r
+\r
+\r
+doxygen:\r
+       @echo Generating Project Documentation...\r
+       @doxygen Doxygen.conf\r
+       @echo Documentation Generation Complete.\r
+\r
+clean_doxygen:\r
+       rm -rf Documentation\r
+\r
+# Create object files directory\r
+$(shell mkdir $(OBJDIR) 2>/dev/null)\r
+\r
+\r
+# Include the dependency files.\r
+-include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)\r
+\r
+\r
+# Listing of phony targets.\r
+.PHONY : all checkhooks checklibmode checkboard   \\r
+begin finish end sizebefore sizeafter gccversion  \\r
+build elf hex eep lss sym coff extcoff clean      \\r
+clean_list clean_binary program debug gdb-config  \\r
+doxygen dfu flip flip-ee dfu-ee
\ No newline at end of file
diff --git a/Demos/Device/ClassDriver/makefile b/Demos/Device/ClassDriver/makefile
new file mode 100644 (file)
index 0000000..6c21911
--- /dev/null
@@ -0,0 +1,69 @@
+#
+#             LUFA Library
+#     Copyright (C) Dean Camera, 2009.
+#              
+#  dean [at] fourwalledcubicle [dot] com
+#      www.fourwalledcubicle.com
+#
+
+# Makefile to build all the LUFA Device Demos. Call with "make all" to
+# rebuild all Device demos.
+
+# Projects are pre-cleaned before each one is built, to ensure any
+# custom LUFA library build options are reflected in the compiled
+# code.
+
+all:
+       make -C AudioInput clean
+       make -C AudioInput all
+
+       make -C AudioOutput clean
+       make -C AudioOutput all
+
+       make -C CDC clean
+       make -C CDC all
+
+       make -C DualCDC clean
+       make -C DualCDC all
+
+       make -C GenericHID clean
+       make -C GenericHID all
+
+       make -C Joystick clean
+       make -C Joystick all
+
+       make -C Keyboard clean
+       make -C Keyboard all
+
+       make -C KeyboardMouse clean
+       make -C KeyboardMouse all
+
+       make -C MassStorage clean
+       make -C MassStorage all
+
+       make -C MIDI clean
+       make -C MIDI all
+
+       make -C Mouse clean
+       make -C Mouse all
+
+       make -C RNDISEthernet clean
+       make -C RNDISEthernet all
+
+       make -C USBtoSerial clean
+       make -C USBtoSerial all
+
+%:
+       make -C AudioInput $@
+       make -C AudioOutput $@
+       make -C CDC $@
+       make -C DualCDC $@
+       make -C GenericHID $@
+       make -C Joystick $@
+       make -C Keyboard $@
+       make -C KeyboardMouse $@
+       make -C MassStorage $@
+       make -C MIDI $@
+       make -C Mouse $@
+       make -C RNDISEthernet $@
+       make -C USBtoSerial $@
diff --git a/Demos/Device/DualCDC/Descriptors.c b/Demos/Device/DualCDC/Descriptors.c
deleted file mode 100644 (file)
index 64aed7d..0000000
+++ /dev/null
@@ -1,385 +0,0 @@
-/*\r
-             LUFA Library\r
-     Copyright (C) Dean Camera, 2009.\r
-              \r
-  dean [at] fourwalledcubicle [dot] com\r
-      www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
-  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
-  Permission to use, copy, modify, and distribute this software\r
-  and its documentation for any purpose and without fee is hereby\r
-  granted, provided that the above copyright notice appear in all\r
-  copies and that both that the copyright notice and this\r
-  permission notice and warranty disclaimer appear in supporting\r
-  documentation, and that the name of the author not be used in\r
-  advertising or publicity pertaining to distribution of the\r
-  software without specific, written prior permission.\r
-\r
-  The author disclaim all warranties with regard to this\r
-  software, including all implied warranties of merchantability\r
-  and fitness.  In no event shall the author be liable for any\r
-  special, indirect or consequential damages or any damages\r
-  whatsoever resulting from loss of use, data or profits, whether\r
-  in an action of contract, negligence or other tortious action,\r
-  arising out of or in connection with the use or performance of\r
-  this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- *  USB Device Descriptors, for library use when in USB device mode. Descriptors are special \r
- *  computer-readable structures which the host requests upon device enumeration, to determine\r
- *  the device's capabilities and functions.  \r
- */\r
-\r
-#include "Descriptors.h"\r
-\r
-/** Device descriptor structure. This descriptor, located in FLASH memory, describes the overall\r
- *  device characteristics, including the supported USB version, control endpoint size and the\r
- *  number of device configurations. The descriptor is read out by the USB host when the enumeration\r
- *  process begins.\r
- */\r
-USB_Descriptor_Device_t PROGMEM DeviceDescriptor =\r
-{\r
-       .Header                 = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device},\r
-               \r
-       .USBSpecification       = VERSION_BCD(01.10),\r
-       .Class                  = 0xEF,\r
-       .SubClass               = 0x02,\r
-       .Protocol               = 0x01,\r
-                               \r
-       .Endpoint0Size          = FIXED_CONTROL_ENDPOINT_SIZE,\r
-               \r
-       .VendorID               = 0x03EB,\r
-       .ProductID              = 0x204E,\r
-       .ReleaseNumber          = 0x0000,\r
-               \r
-       .ManufacturerStrIndex   = 0x01,\r
-       .ProductStrIndex        = 0x02,\r
-       .SerialNumStrIndex      = NO_DESCRIPTOR,\r
-               \r
-       .NumberOfConfigurations = 1\r
-};\r
-\r
-/** Configuration descriptor structure. This descriptor, located in FLASH memory, describes the usage\r
- *  of the device in one of its supported configurations, including information about any device interfaces\r
- *  and endpoints. The descriptor is read out by the USB host during the enumeration process when selecting\r
- *  a configuration so that the host may correctly communicate with the USB device.\r
- */\r
-USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =\r
-{\r
-       .Config = \r
-               {\r
-                       .Header                 = {.Size = sizeof(USB_Descriptor_Configuration_Header_t), .Type = DTYPE_Configuration},\r
-\r
-                       .TotalConfigurationSize = sizeof(USB_Descriptor_Configuration_t),\r
-                       .TotalInterfaces        = 4,\r
-                               \r
-                       .ConfigurationNumber    = 1,\r
-                       .ConfigurationStrIndex  = NO_DESCRIPTOR,\r
-                               \r
-                       .ConfigAttributes       = (USB_CONFIG_ATTR_BUSPOWERED | USB_CONFIG_ATTR_SELFPOWERED),\r
-                       \r
-                       .MaxPowerConsumption    = USB_CONFIG_POWER_MA(100)\r
-               },\r
-               \r
-       .IAD1 = \r
-               {\r
-                       .Header                 = {.Size = sizeof(USB_Descriptor_Interface_Association_t), .Type = DTYPE_InterfaceAssociation},\r
-\r
-                       .FirstInterfaceIndex    = 0,\r
-                       .TotalInterfaces        = 2,\r
-\r
-                       .Class                  = 0x02,\r
-                       .SubClass               = 0x02,\r
-                       .Protocol               = 0x01,\r
-\r
-                       .IADStrIndex            = NO_DESCRIPTOR\r
-               },\r
-\r
-       .CDC1_CCI_Interface = \r
-               {\r
-                       .Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},\r
-\r
-                       .InterfaceNumber        = 0,\r
-                       .AlternateSetting       = 0,\r
-                       \r
-                       .TotalEndpoints         = 1,\r
-                               \r
-                       .Class                  = 0x02,\r
-                       .SubClass               = 0x02,\r
-                       .Protocol               = 0x01,\r
-                               \r
-                       .InterfaceStrIndex      = NO_DESCRIPTOR\r
-               },\r
-\r
-       .CDC1_Functional_IntHeader = \r
-               {\r
-                       .Header                 = {.Size = sizeof(CDC_FUNCTIONAL_DESCRIPTOR(2)), .Type = 0x24},\r
-                       .SubType                = 0x00,\r
-                       \r
-                       .Data                   = {0x01, 0x10}\r
-               },\r
-\r
-       .CDC1_Functional_CallManagement = \r
-               {\r
-                       .Header                 = {.Size = sizeof(CDC_FUNCTIONAL_DESCRIPTOR(2)), .Type = 0x24},\r
-                       .SubType                = 0x01,\r
-                       \r
-                       .Data                   = {0x03, 0x01}\r
-               },\r
-\r
-       .CDC1_Functional_AbstractControlManagement = \r
-               {\r
-                       .Header                 = {.Size = sizeof(CDC_FUNCTIONAL_DESCRIPTOR(1)), .Type = 0x24},\r
-                       .SubType                = 0x02,\r
-                       \r
-                       .Data                   = {0x06}\r
-               },\r
-               \r
-       .CDC1_Functional_Union = \r
-               {\r
-                       .Header                 = {.Size = sizeof(CDC_FUNCTIONAL_DESCRIPTOR(2)), .Type = 0x24},\r
-                       .SubType                = 0x06,\r
-                       \r
-                       .Data                   = {0x00, 0x01}\r
-               },\r
-\r
-       .CDC1_ManagementEndpoint = \r
-               {\r
-                       .Header                 = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},\r
-                                                                                \r
-                       .EndpointAddress        = (ENDPOINT_DESCRIPTOR_DIR_IN | CDC1_NOTIFICATION_EPNUM),\r
-                       .Attributes             = EP_TYPE_INTERRUPT,\r
-                       .EndpointSize           = CDC_NOTIFICATION_EPSIZE,\r
-                       .PollingIntervalMS      = 0xFF\r
-               },\r
-\r
-       .CDC1_DCI_Interface = \r
-               {\r
-                       .Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},\r
-\r
-                       .InterfaceNumber        = 1,\r
-                       .AlternateSetting       = 0,\r
-                       \r
-                       .TotalEndpoints         = 2,\r
-                               \r
-                       .Class                  = 0x0A,\r
-                       .SubClass               = 0x00,\r
-                       .Protocol               = 0x00,\r
-                               \r
-                       .InterfaceStrIndex      = NO_DESCRIPTOR\r
-               },\r
-\r
-       .CDC1_DataOutEndpoint = \r
-               {\r
-                       .Header                 = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},\r
-                                                                                \r
-                       .EndpointAddress        = (ENDPOINT_DESCRIPTOR_DIR_OUT | CDC1_RX_EPNUM),\r
-                       .Attributes             = EP_TYPE_BULK,\r
-                       .EndpointSize           = CDC_TXRX_EPSIZE,\r
-                       .PollingIntervalMS      = 0x00\r
-               },\r
-               \r
-       .CDC1_DataInEndpoint = \r
-               {\r
-                       .Header                 = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},\r
-                                                                                \r
-                       .EndpointAddress        = (ENDPOINT_DESCRIPTOR_DIR_IN | CDC1_TX_EPNUM),\r
-                       .Attributes             = EP_TYPE_BULK,\r
-                       .EndpointSize           = CDC_TXRX_EPSIZE,\r
-                       .PollingIntervalMS      = 0x00\r
-               },\r
-\r
-       .IAD2 = \r
-               {\r
-                       .Header                 = {.Size = sizeof(USB_Descriptor_Interface_Association_t), .Type = DTYPE_InterfaceAssociation},\r
-\r
-                       .FirstInterfaceIndex    = 2,\r
-                       .TotalInterfaces        = 2,\r
-\r
-                       .Class                  = 0x02,\r
-                       .SubClass               = 0x02,\r
-                       .Protocol               = 0x01,\r
-\r
-                       .IADStrIndex            = NO_DESCRIPTOR\r
-               },\r
-\r
-       .CDC2_CCI_Interface = \r
-               {\r
-                       .Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},\r
-\r
-                       .InterfaceNumber        = 2,\r
-                       .AlternateSetting       = 0,\r
-                       \r
-                       .TotalEndpoints         = 1,\r
-                               \r
-                       .Class                  = 0x02,\r
-                       .SubClass               = 0x02,\r
-                       .Protocol               = 0x01,\r
-                               \r
-                       .InterfaceStrIndex      = NO_DESCRIPTOR\r
-               },\r
-\r
-       .CDC2_Functional_IntHeader = \r
-               {\r
-                       .Header                 = {.Size = sizeof(CDC_FUNCTIONAL_DESCRIPTOR(2)), .Type = 0x24},\r
-                       .SubType                = 0x00,\r
-                       \r
-                       .Data                   = {0x01, 0x10}\r
-               },\r
-\r
-       .CDC2_Functional_CallManagement = \r
-               {\r
-                       .Header                 = {.Size = sizeof(CDC_FUNCTIONAL_DESCRIPTOR(2)), .Type = 0x24},\r
-                       .SubType                = 0x01,\r
-                       \r
-                       .Data                   = {0x03, 0x03}\r
-               },\r
-\r
-       .CDC2_Functional_AbstractControlManagement = \r
-               {\r
-                       .Header                 = {.Size = sizeof(CDC_FUNCTIONAL_DESCRIPTOR(1)), .Type = 0x24},\r
-                       .SubType                = 0x02,\r
-                       \r
-                       .Data                   = {0x06}\r
-               },\r
-               \r
-       .CDC2_Functional_Union = \r
-               {\r
-                       .Header                 = {.Size = sizeof(CDC_FUNCTIONAL_DESCRIPTOR(2)), .Type = 0x24},\r
-                       .SubType                = 0x06,\r
-                       \r
-                       .Data                   = {0x02, 0x03}\r
-               },\r
-\r
-       .CDC2_ManagementEndpoint = \r
-               {\r
-                       .Header                 = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},\r
-                                                                                \r
-                       .EndpointAddress        = (ENDPOINT_DESCRIPTOR_DIR_IN | CDC2_NOTIFICATION_EPNUM),\r
-                       .Attributes             = EP_TYPE_INTERRUPT,\r
-                       .EndpointSize           = CDC_NOTIFICATION_EPSIZE,\r
-                       .PollingIntervalMS      = 0xFF\r
-               },\r
-\r
-       .CDC2_DCI_Interface = \r
-               {\r
-                       .Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},\r
-\r
-                       .InterfaceNumber        = 3,\r
-                       .AlternateSetting       = 0,\r
-                       \r
-                       .TotalEndpoints         = 2,\r
-                               \r
-                       .Class                  = 0x0A,\r
-                       .SubClass               = 0x00,\r
-                       .Protocol               = 0x00,\r
-                               \r
-                       .InterfaceStrIndex      = NO_DESCRIPTOR\r
-               },\r
-\r
-       .CDC2_DataOutEndpoint = \r
-               {\r
-                       .Header                 = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},\r
-                                                                                \r
-                       .EndpointAddress        = (ENDPOINT_DESCRIPTOR_DIR_OUT | CDC2_RX_EPNUM),\r
-                       .Attributes             = EP_TYPE_BULK,\r
-                       .EndpointSize           = CDC_TXRX_EPSIZE,\r
-                       .PollingIntervalMS      = 0x00\r
-               },\r
-               \r
-       .CDC2_DataInEndpoint = \r
-               {\r
-                       .Header                 = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},\r
-                                                                                \r
-                       .EndpointAddress        = (ENDPOINT_DESCRIPTOR_DIR_IN | CDC2_TX_EPNUM),\r
-                       .Attributes             = EP_TYPE_BULK,\r
-                       .EndpointSize           = CDC_TXRX_EPSIZE,\r
-                       .PollingIntervalMS      = 0x00\r
-               }\r
-};\r
-\r
-/** Language descriptor structure. This descriptor, located in FLASH memory, is returned when the host requests\r
- *  the string descriptor with index 0 (the first index). It is actually an array of 16-bit integers, which indicate\r
- *  via the language ID table available at USB.org what languages the device supports for its string descriptors.\r
- */\r
-USB_Descriptor_String_t PROGMEM LanguageString =\r
-{\r
-       .Header                 = {.Size = USB_STRING_LEN(1), .Type = DTYPE_String},\r
-               \r
-       .UnicodeString          = {LANGUAGE_ID_ENG}\r
-};\r
-\r
-/** Manufacturer descriptor string. This is a Unicode string containing the manufacturer's details in human readable\r
- *  form, and is read out upon request by the host when the appropriate string ID is requested, listed in the Device\r
- *  Descriptor.\r
- */\r
-USB_Descriptor_String_t PROGMEM ManufacturerString =\r
-{\r
-       .Header                 = {.Size = USB_STRING_LEN(11), .Type = DTYPE_String},\r
-               \r
-       .UnicodeString          = L"Dean Camera"\r
-};\r
-\r
-/** Product descriptor string. This is a Unicode string containing the product's details in human readable form,\r
- *  and is read out upon request by the host when the appropriate string ID is requested, listed in the Device\r
- *  Descriptor.\r
- */\r
-USB_Descriptor_String_t PROGMEM ProductString =\r
-{\r
-       .Header                 = {.Size = USB_STRING_LEN(13), .Type = DTYPE_String},\r
-               \r
-       .UnicodeString          = L"LUFA Dual CDC Demo"\r
-};\r
-\r
-/** This function is called by the library when in device mode, and must be overridden (see library "USB Descriptors"\r
- *  documentation) by the application code so that the address and size of a requested descriptor can be given\r
- *  to the USB library. When the device receives a Get Descriptor request on the control endpoint, this function\r
- *  is called so that the descriptor details can be passed back and the appropriate descriptor sent back to the\r
- *  USB host.\r
- */\r
-uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
-{\r
-       const uint8_t  DescriptorType   = (wValue >> 8);\r
-       const uint8_t  DescriptorNumber = (wValue & 0xFF);\r
-\r
-       void*    Address = NULL;\r
-       uint16_t Size    = NO_DESCRIPTOR;\r
-\r
-       switch (DescriptorType)\r
-       {\r
-               case DTYPE_Device:\r
-                       Address = (void*)&DeviceDescriptor;\r
-                       Size    = sizeof(USB_Descriptor_Device_t);\r
-                       break;\r
-               case DTYPE_Configuration: \r
-                       Address = (void*)&ConfigurationDescriptor;\r
-                       Size    = sizeof(USB_Descriptor_Configuration_t);\r
-                       break;\r
-               case DTYPE_String: \r
-                       switch (DescriptorNumber)\r
-                       {\r
-                               case 0x00: \r
-                                       Address = (void*)&LanguageString;\r
-                                       Size    = pgm_read_byte(&LanguageString.Header.Size);\r
-                                       break;\r
-                               case 0x01: \r
-                                       Address = (void*)&ManufacturerString;\r
-                                       Size    = pgm_read_byte(&ManufacturerString.Header.Size);\r
-                                       break;\r
-                               case 0x02: \r
-                                       Address = (void*)&ProductString;\r
-                                       Size    = pgm_read_byte(&ProductString.Header.Size);\r
-                                       break;\r
-                       }\r
-                       \r
-                       break;\r
-       }\r
-       \r
-       *DescriptorAddress = Address;   \r
-       return Size;\r
-}\r
diff --git a/Demos/Device/DualCDC/Descriptors.h b/Demos/Device/DualCDC/Descriptors.h
deleted file mode 100644 (file)
index 97165e5..0000000
+++ /dev/null
@@ -1,104 +0,0 @@
-/*\r
-             LUFA Library\r
-     Copyright (C) Dean Camera, 2009.\r
-              \r
-  dean [at] fourwalledcubicle [dot] com\r
-      www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
-  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
-  Permission to use, copy, modify, and distribute this software\r
-  and its documentation for any purpose and without fee is hereby\r
-  granted, provided that the above copyright notice appear in all\r
-  copies and that both that the copyright notice and this\r
-  permission notice and warranty disclaimer appear in supporting\r
-  documentation, and that the name of the author not be used in\r
-  advertising or publicity pertaining to distribution of the\r
-  software without specific, written prior permission.\r
-\r
-  The author disclaim all warranties with regard to this\r
-  software, including all implied warranties of merchantability\r
-  and fitness.  In no event shall the author be liable for any\r
-  special, indirect or consequential damages or any damages\r
-  whatsoever resulting from loss of use, data or profits, whether\r
-  in an action of contract, negligence or other tortious action,\r
-  arising out of or in connection with the use or performance of\r
-  this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- *  Header file for Descriptors.c.\r
- */\r
\r
-#ifndef _DESCRIPTORS_H_\r
-#define _DESCRIPTORS_H_\r
-\r
-       /* Includes: */\r
-               #include <avr/pgmspace.h>\r
-\r
-               #include <LUFA/Drivers/USB/USB.h>\r
-               #include <LUFA/Drivers/USB/Class/Device/CDC.h>\r
-\r
-       /* Macros: */\r
-               /** Endpoint number of the first CDC interface's device-to-host notification IN endpoint. */\r
-               #define CDC1_NOTIFICATION_EPNUM        3\r
-\r
-               /** Endpoint number of the first CDC interface's device-to-host data IN endpoint. */\r
-               #define CDC1_TX_EPNUM                  1        \r
-\r
-               /** Endpoint number of the first CDC interface's host-to-device data OUT endpoint. */\r
-               #define CDC1_RX_EPNUM                  2        \r
-\r
-               /** Endpoint number of the second CDC interface's device-to-host notification IN endpoint. */\r
-               #define CDC2_NOTIFICATION_EPNUM        4\r
-\r
-               /** Endpoint number of the second CDC interface's device-to-host data IN endpoint. */\r
-               #define CDC2_TX_EPNUM                  5        \r
-\r
-               /** Endpoint number of the second CDC interface's host-to-device data OUT endpoint. */\r
-               #define CDC2_RX_EPNUM                  6        \r
-\r
-               /** Size in bytes of the CDC device-to-host notification IN endpoints. */\r
-               #define CDC_NOTIFICATION_EPSIZE        8\r
-\r
-               /** Size in bytes of the CDC data IN and OUT endpoints. */\r
-               #define CDC_TXRX_EPSIZE                16       \r
-\r
-       /* Type Defines: */\r
-               /** Type define for the device configuration descriptor structure. This must be defined in the\r
-                *  application code, as the configuration descriptor contains several sub-descriptors which\r
-                *  vary between devices, and which describe the device's usage to the host.\r
-                */\r
-               typedef struct\r
-               {\r
-                       USB_Descriptor_Configuration_Header_t    Config;\r
-                       USB_Descriptor_Interface_Association_t   IAD1;\r
-                       USB_Descriptor_Interface_t               CDC1_CCI_Interface;\r
-                       CDC_FUNCTIONAL_DESCRIPTOR(2)             CDC1_Functional_IntHeader;\r
-                       CDC_FUNCTIONAL_DESCRIPTOR(2)             CDC1_Functional_CallManagement;\r
-                       CDC_FUNCTIONAL_DESCRIPTOR(1)             CDC1_Functional_AbstractControlManagement;\r
-                       CDC_FUNCTIONAL_DESCRIPTOR(2)             CDC1_Functional_Union;\r
-                       USB_Descriptor_Endpoint_t                CDC1_ManagementEndpoint;\r
-                       USB_Descriptor_Interface_t               CDC1_DCI_Interface;\r
-                       USB_Descriptor_Endpoint_t                CDC1_DataOutEndpoint;\r
-                       USB_Descriptor_Endpoint_t                CDC1_DataInEndpoint;\r
-                       USB_Descriptor_Interface_Association_t   IAD2;\r
-                       USB_Descriptor_Interface_t               CDC2_CCI_Interface;\r
-                       CDC_FUNCTIONAL_DESCRIPTOR(2)             CDC2_Functional_IntHeader;\r
-                       CDC_FUNCTIONAL_DESCRIPTOR(2)             CDC2_Functional_CallManagement;\r
-                       CDC_FUNCTIONAL_DESCRIPTOR(1)             CDC2_Functional_AbstractControlManagement;\r
-                       CDC_FUNCTIONAL_DESCRIPTOR(2)             CDC2_Functional_Union;\r
-                       USB_Descriptor_Endpoint_t                CDC2_ManagementEndpoint;\r
-                       USB_Descriptor_Interface_t               CDC2_DCI_Interface;\r
-                       USB_Descriptor_Endpoint_t                CDC2_DataOutEndpoint;\r
-                       USB_Descriptor_Endpoint_t                CDC2_DataInEndpoint;\r
-               } USB_Descriptor_Configuration_t;\r
-\r
-       /* Function Prototypes: */\r
-               uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
-                                                                                       ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);\r
-\r
-#endif\r
diff --git a/Demos/Device/DualCDC/Doxygen.conf b/Demos/Device/DualCDC/Doxygen.conf
deleted file mode 100644 (file)
index 7b3b741..0000000
+++ /dev/null
@@ -1,1485 +0,0 @@
-# Doxyfile 1.5.7.1\r
-\r
-# This file describes the settings to be used by the documentation system\r
-# doxygen (www.doxygen.org) for a project\r
-#\r
-# All text after a hash (#) is considered a comment and will be ignored\r
-# The format is:\r
-#       TAG = value [value, ...]\r
-# For lists items can also be appended using:\r
-#       TAG += value [value, ...]\r
-# Values that contain spaces should be placed between quotes (" ")\r
-\r
-#---------------------------------------------------------------------------\r
-# Project related configuration options\r
-#---------------------------------------------------------------------------\r
-\r
-# This tag specifies the encoding used for all characters in the config file \r
-# that follow. The default is UTF-8 which is also the encoding used for all \r
-# text before the first occurrence of this tag. Doxygen uses libiconv (or the \r
-# iconv built into libc) for the transcoding. See \r
-# http://www.gnu.org/software/libiconv for the list of possible encodings.\r
-\r
-DOXYFILE_ENCODING      = UTF-8\r
-\r
-# The PROJECT_NAME tag is a single word (or a sequence of words surrounded \r
-# by quotes) that should identify the project.\r
-\r
-PROJECT_NAME           = "LUFA Library - Dual CDC Device Demo"\r
-\r
-# The PROJECT_NUMBER tag can be used to enter a project or revision number. \r
-# This could be handy for archiving the generated documentation or \r
-# if some version control system is used.\r
-\r
-PROJECT_NUMBER         = 0.0.0\r
-\r
-# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) \r
-# base path where the generated documentation will be put. \r
-# If a relative path is entered, it will be relative to the location \r
-# where doxygen was started. If left blank the current directory will be used.\r
-\r
-OUTPUT_DIRECTORY       = ./Documentation/\r
-\r
-# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create \r
-# 4096 sub-directories (in 2 levels) under the output directory of each output \r
-# format and will distribute the generated files over these directories. \r
-# Enabling this option can be useful when feeding doxygen a huge amount of \r
-# source files, where putting all generated files in the same directory would \r
-# otherwise cause performance problems for the file system.\r
-\r
-CREATE_SUBDIRS         = YES\r
-\r
-# The OUTPUT_LANGUAGE tag is used to specify the language in which all \r
-# documentation generated by doxygen is written. Doxygen will use this \r
-# information to generate all constant output in the proper language. \r
-# The default language is English, other supported languages are: \r
-# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, \r
-# Croatian, Czech, Danish, Dutch, Farsi, Finnish, French, German, Greek, \r
-# Hungarian, Italian, Japanese, Japanese-en (Japanese with English messages), \r
-# Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, Polish, \r
-# Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, Slovene, \r
-# Spanish, Swedish, and Ukrainian.\r
-\r
-OUTPUT_LANGUAGE        = English\r
-\r
-# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will \r
-# include brief member descriptions after the members that are listed in \r
-# the file and class documentation (similar to JavaDoc). \r
-# Set to NO to disable this.\r
-\r
-BRIEF_MEMBER_DESC      = YES\r
-\r
-# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend \r
-# the brief description of a member or function before the detailed description. \r
-# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the \r
-# brief descriptions will be completely suppressed.\r
-\r
-REPEAT_BRIEF           = YES\r
-\r
-# This tag implements a quasi-intelligent brief description abbreviator \r
-# that is used to form the text in various listings. Each string \r
-# in this list, if found as the leading text of the brief description, will be \r
-# stripped from the text and the result after processing the whole list, is \r
-# used as the annotated text. Otherwise, the brief description is used as-is. \r
-# If left blank, the following values are used ("$name" is automatically \r
-# replaced with the name of the entity): "The $name class" "The $name widget" \r
-# "The $name file" "is" "provides" "specifies" "contains" \r
-# "represents" "a" "an" "the"\r
-\r
-ABBREVIATE_BRIEF       = "The $name class" \\r
-                         "The $name widget" \\r
-                         "The $name file" \\r
-                         is \\r
-                         provides \\r
-                         specifies \\r
-                         contains \\r
-                         represents \\r
-                         a \\r
-                         an \\r
-                         the\r
-\r
-# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then \r
-# Doxygen will generate a detailed section even if there is only a brief \r
-# description.\r
-\r
-ALWAYS_DETAILED_SEC    = NO\r
-\r
-# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all \r
-# inherited members of a class in the documentation of that class as if those \r
-# members were ordinary class members. Constructors, destructors and assignment \r
-# operators of the base classes will not be shown.\r
-\r
-INLINE_INHERITED_MEMB  = NO\r
-\r
-# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full \r
-# path before files name in the file list and in the header files. If set \r
-# to NO the shortest path that makes the file name unique will be used.\r
-\r
-FULL_PATH_NAMES        = YES\r
-\r
-# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag \r
-# can be used to strip a user-defined part of the path. Stripping is \r
-# only done if one of the specified strings matches the left-hand part of \r
-# the path. The tag can be used to show relative paths in the file list. \r
-# If left blank the directory from which doxygen is run is used as the \r
-# path to strip.\r
-\r
-STRIP_FROM_PATH        = \r
-\r
-# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of \r
-# the path mentioned in the documentation of a class, which tells \r
-# the reader which header file to include in order to use a class. \r
-# If left blank only the name of the header file containing the class \r
-# definition is used. Otherwise one should specify the include paths that \r
-# are normally passed to the compiler using the -I flag.\r
-\r
-STRIP_FROM_INC_PATH    = \r
-\r
-# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter \r
-# (but less readable) file names. This can be useful is your file systems \r
-# doesn't support long names like on DOS, Mac, or CD-ROM.\r
-\r
-SHORT_NAMES            = YES\r
-\r
-# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen \r
-# will interpret the first line (until the first dot) of a JavaDoc-style \r
-# comment as the brief description. If set to NO, the JavaDoc \r
-# comments will behave just like regular Qt-style comments \r
-# (thus requiring an explicit @brief command for a brief description.)\r
-\r
-JAVADOC_AUTOBRIEF      = NO\r
-\r
-# If the QT_AUTOBRIEF tag is set to YES then Doxygen will \r
-# interpret the first line (until the first dot) of a Qt-style \r
-# comment as the brief description. If set to NO, the comments \r
-# will behave just like regular Qt-style comments (thus requiring \r
-# an explicit \brief command for a brief description.)\r
-\r
-QT_AUTOBRIEF           = NO\r
-\r
-# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen \r
-# treat a multi-line C++ special comment block (i.e. a block of //! or /// \r
-# comments) as a brief description. This used to be the default behaviour. \r
-# The new default is to treat a multi-line C++ comment block as a detailed \r
-# description. Set this tag to YES if you prefer the old behaviour instead.\r
-\r
-MULTILINE_CPP_IS_BRIEF = NO\r
-\r
-# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented \r
-# member inherits the documentation from any documented member that it \r
-# re-implements.\r
-\r
-INHERIT_DOCS           = YES\r
-\r
-# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce \r
-# a new page for each member. If set to NO, the documentation of a member will \r
-# be part of the file/class/namespace that contains it.\r
-\r
-SEPARATE_MEMBER_PAGES  = NO\r
-\r
-# The TAB_SIZE tag can be used to set the number of spaces in a tab. \r
-# Doxygen uses this value to replace tabs by spaces in code fragments.\r
-\r
-TAB_SIZE               = 4\r
-\r
-# This tag can be used to specify a number of aliases that acts \r
-# as commands in the documentation. An alias has the form "name=value". \r
-# For example adding "sideeffect=\par Side Effects:\n" will allow you to \r
-# put the command \sideeffect (or @sideeffect) in the documentation, which \r
-# will result in a user-defined paragraph with heading "Side Effects:". \r
-# You can put \n's in the value part of an alias to insert newlines.\r
-\r
-ALIASES                = \r
-\r
-# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C \r
-# sources only. Doxygen will then generate output that is more tailored for C. \r
-# For instance, some of the names that are used will be different. The list \r
-# of all members will be omitted, etc.\r
-\r
-OPTIMIZE_OUTPUT_FOR_C  = YES\r
-\r
-# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java \r
-# sources only. Doxygen will then generate output that is more tailored for \r
-# Java. For instance, namespaces will be presented as packages, qualified \r
-# scopes will look different, etc.\r
-\r
-OPTIMIZE_OUTPUT_JAVA   = NO\r
-\r
-# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran \r
-# sources only. Doxygen will then generate output that is more tailored for \r
-# Fortran.\r
-\r
-OPTIMIZE_FOR_FORTRAN   = NO\r
-\r
-# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL \r
-# sources. Doxygen will then generate output that is tailored for \r
-# VHDL.\r
-\r
-OPTIMIZE_OUTPUT_VHDL   = NO\r
-\r
-# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want \r
-# to include (a tag file for) the STL sources as input, then you should \r
-# set this tag to YES in order to let doxygen match functions declarations and \r
-# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. \r
-# func(std::string) {}). This also make the inheritance and collaboration \r
-# diagrams that involve STL classes more complete and accurate.\r
-\r
-BUILTIN_STL_SUPPORT    = NO\r
-\r
-# If you use Microsoft's C++/CLI language, you should set this option to YES to\r
-# enable parsing support.\r
-\r
-CPP_CLI_SUPPORT        = NO\r
-\r
-# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. \r
-# Doxygen will parse them like normal C++ but will assume all classes use public \r
-# instead of private inheritance when no explicit protection keyword is present.\r
-\r
-SIP_SUPPORT            = NO\r
-\r
-# For Microsoft's IDL there are propget and propput attributes to indicate getter \r
-# and setter methods for a property. Setting this option to YES (the default) \r
-# will make doxygen to replace the get and set methods by a property in the \r
-# documentation. This will only work if the methods are indeed getting or \r
-# setting a simple type. If this is not the case, or you want to show the \r
-# methods anyway, you should set this option to NO.\r
-\r
-IDL_PROPERTY_SUPPORT   = YES\r
-\r
-# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC \r
-# tag is set to YES, then doxygen will reuse the documentation of the first \r
-# member in the group (if any) for the other members of the group. By default \r
-# all members of a group must be documented explicitly.\r
-\r
-DISTRIBUTE_GROUP_DOC   = NO\r
-\r
-# Set the SUBGROUPING tag to YES (the default) to allow class member groups of \r
-# the same type (for instance a group of public functions) to be put as a \r
-# subgroup of that type (e.g. under the Public Functions section). Set it to \r
-# NO to prevent subgrouping. Alternatively, this can be done per class using \r
-# the \nosubgrouping command.\r
-\r
-SUBGROUPING            = YES\r
-\r
-# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum \r
-# is documented as struct, union, or enum with the name of the typedef. So \r
-# typedef struct TypeS {} TypeT, will appear in the documentation as a struct \r
-# with name TypeT. When disabled the typedef will appear as a member of a file, \r
-# namespace, or class. And the struct will be named TypeS. This can typically \r
-# be useful for C code in case the coding convention dictates that all compound \r
-# types are typedef'ed and only the typedef is referenced, never the tag name.\r
-\r
-TYPEDEF_HIDES_STRUCT   = NO\r
-\r
-# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to \r
-# determine which symbols to keep in memory and which to flush to disk.\r
-# When the cache is full, less often used symbols will be written to disk.\r
-# For small to medium size projects (<1000 input files) the default value is \r
-# probably good enough. For larger projects a too small cache size can cause \r
-# doxygen to be busy swapping symbols to and from disk most of the time \r
-# causing a significant performance penality. \r
-# If the system has enough physical memory increasing the cache will improve the \r
-# performance by keeping more symbols in memory. Note that the value works on \r
-# a logarithmic scale so increasing the size by one will rougly double the \r
-# memory usage. The cache size is given by this formula: \r
-# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, \r
-# corresponding to a cache size of 2^16 = 65536 symbols\r
-\r
-SYMBOL_CACHE_SIZE      = 0\r
-\r
-#---------------------------------------------------------------------------\r
-# Build related configuration options\r
-#---------------------------------------------------------------------------\r
-\r
-# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in \r
-# documentation are documented, even if no documentation was available. \r
-# Private class members and static file members will be hidden unless \r
-# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES\r
-\r
-EXTRACT_ALL            = YES\r
-\r
-# If the EXTRACT_PRIVATE tag is set to YES all private members of a class \r
-# will be included in the documentation.\r
-\r
-EXTRACT_PRIVATE        = YES\r
-\r
-# If the EXTRACT_STATIC tag is set to YES all static members of a file \r
-# will be included in the documentation.\r
-\r
-EXTRACT_STATIC         = YES\r
-\r
-# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) \r
-# defined locally in source files will be included in the documentation. \r
-# If set to NO only classes defined in header files are included.\r
-\r
-EXTRACT_LOCAL_CLASSES  = YES\r
-\r
-# This flag is only useful for Objective-C code. When set to YES local \r
-# methods, which are defined in the implementation section but not in \r
-# the interface are included in the documentation. \r
-# If set to NO (the default) only methods in the interface are included.\r
-\r
-EXTRACT_LOCAL_METHODS  = NO\r
-\r
-# If this flag is set to YES, the members of anonymous namespaces will be \r
-# extracted and appear in the documentation as a namespace called \r
-# 'anonymous_namespace{file}', where file will be replaced with the base \r
-# name of the file that contains the anonymous namespace. By default \r
-# anonymous namespace are hidden.\r
-\r
-EXTRACT_ANON_NSPACES   = NO\r
-\r
-# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all \r
-# undocumented members of documented classes, files or namespaces. \r
-# If set to NO (the default) these members will be included in the \r
-# various overviews, but no documentation section is generated. \r
-# This option has no effect if EXTRACT_ALL is enabled.\r
-\r
-HIDE_UNDOC_MEMBERS     = NO\r
-\r
-# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all \r
-# undocumented classes that are normally visible in the class hierarchy. \r
-# If set to NO (the default) these classes will be included in the various \r
-# overviews. This option has no effect if EXTRACT_ALL is enabled.\r
-\r
-HIDE_UNDOC_CLASSES     = NO\r
-\r
-# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all \r
-# friend (class|struct|union) declarations. \r
-# If set to NO (the default) these declarations will be included in the \r
-# documentation.\r
-\r
-HIDE_FRIEND_COMPOUNDS  = NO\r
-\r
-# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any \r
-# documentation blocks found inside the body of a function. \r
-# If set to NO (the default) these blocks will be appended to the \r
-# function's detailed documentation block.\r
-\r
-HIDE_IN_BODY_DOCS      = NO\r
-\r
-# The INTERNAL_DOCS tag determines if documentation \r
-# that is typed after a \internal command is included. If the tag is set \r
-# to NO (the default) then the documentation will be excluded. \r
-# Set it to YES to include the internal documentation.\r
-\r
-INTERNAL_DOCS          = NO\r
-\r
-# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate \r
-# file names in lower-case letters. If set to YES upper-case letters are also \r
-# allowed. This is useful if you have classes or files whose names only differ \r
-# in case and if your file system supports case sensitive file names. Windows \r
-# and Mac users are advised to set this option to NO.\r
-\r
-CASE_SENSE_NAMES       = NO\r
-\r
-# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen \r
-# will show members with their full class and namespace scopes in the \r
-# documentation. If set to YES the scope will be hidden.\r
-\r
-HIDE_SCOPE_NAMES       = NO\r
-\r
-# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen \r
-# will put a list of the files that are included by a file in the documentation \r
-# of that file.\r
-\r
-SHOW_INCLUDE_FILES     = YES\r
-\r
-# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] \r
-# is inserted in the documentation for inline members.\r
-\r
-INLINE_INFO            = YES\r
-\r
-# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen \r
-# will sort the (detailed) documentation of file and class members \r
-# alphabetically by member name. If set to NO the members will appear in \r
-# declaration order.\r
-\r
-SORT_MEMBER_DOCS       = YES\r
-\r
-# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the \r
-# brief documentation of file, namespace and class members alphabetically \r
-# by member name. If set to NO (the default) the members will appear in \r
-# declaration order.\r
-\r
-SORT_BRIEF_DOCS        = NO\r
-\r
-# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the \r
-# hierarchy of group names into alphabetical order. If set to NO (the default) \r
-# the group names will appear in their defined order.\r
-\r
-SORT_GROUP_NAMES       = NO\r
-\r
-# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be \r
-# sorted by fully-qualified names, including namespaces. If set to \r
-# NO (the default), the class list will be sorted only by class name, \r
-# not including the namespace part. \r
-# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.\r
-# Note: This option applies only to the class list, not to the \r
-# alphabetical list.\r
-\r
-SORT_BY_SCOPE_NAME     = NO\r
-\r
-# The GENERATE_TODOLIST tag can be used to enable (YES) or \r
-# disable (NO) the todo list. This list is created by putting \todo \r
-# commands in the documentation.\r
-\r
-GENERATE_TODOLIST      = NO\r
-\r
-# The GENERATE_TESTLIST tag can be used to enable (YES) or \r
-# disable (NO) the test list. This list is created by putting \test \r
-# commands in the documentation.\r
-\r
-GENERATE_TESTLIST      = NO\r
-\r
-# The GENERATE_BUGLIST tag can be used to enable (YES) or \r
-# disable (NO) the bug list. This list is created by putting \bug \r
-# commands in the documentation.\r
-\r
-GENERATE_BUGLIST       = NO\r
-\r
-# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or \r
-# disable (NO) the deprecated list. This list is created by putting \r
-# \deprecated commands in the documentation.\r
-\r
-GENERATE_DEPRECATEDLIST= YES\r
-\r
-# The ENABLED_SECTIONS tag can be used to enable conditional \r
-# documentation sections, marked by \if sectionname ... \endif.\r
-\r
-ENABLED_SECTIONS       = \r
-\r
-# The MAX_INITIALIZER_LINES tag determines the maximum number of lines \r
-# the initial value of a variable or define consists of for it to appear in \r
-# the documentation. If the initializer consists of more lines than specified \r
-# here it will be hidden. Use a value of 0 to hide initializers completely. \r
-# The appearance of the initializer of individual variables and defines in the \r
-# documentation can be controlled using \showinitializer or \hideinitializer \r
-# command in the documentation regardless of this setting.\r
-\r
-MAX_INITIALIZER_LINES  = 30\r
-\r
-# Set the SHOW_USED_FILES tag to NO to disable the list of files generated \r
-# at the bottom of the documentation of classes and structs. If set to YES the \r
-# list will mention the files that were used to generate the documentation.\r
-\r
-SHOW_USED_FILES        = YES\r
-\r
-# If the sources in your project are distributed over multiple directories \r
-# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy \r
-# in the documentation. The default is NO.\r
-\r
-SHOW_DIRECTORIES       = YES\r
-\r
-# Set the SHOW_FILES tag to NO to disable the generation of the Files page.\r
-# This will remove the Files entry from the Quick Index and from the \r
-# Folder Tree View (if specified). The default is YES.\r
-\r
-SHOW_FILES             = YES\r
-\r
-# Set the SHOW_NAMESPACES tag to NO to disable the generation of the \r
-# Namespaces page.  This will remove the Namespaces entry from the Quick Index\r
-# and from the Folder Tree View (if specified). The default is YES.\r
-\r
-SHOW_NAMESPACES        = YES\r
-\r
-# The FILE_VERSION_FILTER tag can be used to specify a program or script that \r
-# doxygen should invoke to get the current version for each file (typically from \r
-# the version control system). Doxygen will invoke the program by executing (via \r
-# popen()) the command <command> <input-file>, where <command> is the value of \r
-# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file \r
-# provided by doxygen. Whatever the program writes to standard output \r
-# is used as the file version. See the manual for examples.\r
-\r
-FILE_VERSION_FILTER    = \r
-\r
-# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by \r
-# doxygen. The layout file controls the global structure of the generated output files \r
-# in an output format independent way. The create the layout file that represents \r
-# doxygen's defaults, run doxygen with the -l option. You can optionally specify a \r
-# file name after the option, if omitted DoxygenLayout.xml will be used as the name \r
-# of the layout file.\r
-\r
-LAYOUT_FILE            = \r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to warning and progress messages\r
-#---------------------------------------------------------------------------\r
-\r
-# The QUIET tag can be used to turn on/off the messages that are generated \r
-# by doxygen. Possible values are YES and NO. If left blank NO is used.\r
-\r
-QUIET                  = YES\r
-\r
-# The WARNINGS tag can be used to turn on/off the warning messages that are \r
-# generated by doxygen. Possible values are YES and NO. If left blank \r
-# NO is used.\r
-\r
-WARNINGS               = YES\r
-\r
-# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings \r
-# for undocumented members. If EXTRACT_ALL is set to YES then this flag will \r
-# automatically be disabled.\r
-\r
-WARN_IF_UNDOCUMENTED   = YES\r
-\r
-# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for \r
-# potential errors in the documentation, such as not documenting some \r
-# parameters in a documented function, or documenting parameters that \r
-# don't exist or using markup commands wrongly.\r
-\r
-WARN_IF_DOC_ERROR      = YES\r
-\r
-# This WARN_NO_PARAMDOC option can be abled to get warnings for \r
-# functions that are documented, but have no documentation for their parameters \r
-# or return value. If set to NO (the default) doxygen will only warn about \r
-# wrong or incomplete parameter documentation, but not about the absence of \r
-# documentation.\r
-\r
-WARN_NO_PARAMDOC       = YES\r
-\r
-# The WARN_FORMAT tag determines the format of the warning messages that \r
-# doxygen can produce. The string should contain the $file, $line, and $text \r
-# tags, which will be replaced by the file and line number from which the \r
-# warning originated and the warning text. Optionally the format may contain \r
-# $version, which will be replaced by the version of the file (if it could \r
-# be obtained via FILE_VERSION_FILTER)\r
-\r
-WARN_FORMAT            = "$file:$line: $text"\r
-\r
-# The WARN_LOGFILE tag can be used to specify a file to which warning \r
-# and error messages should be written. If left blank the output is written \r
-# to stderr.\r
-\r
-WARN_LOGFILE           = \r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the input files\r
-#---------------------------------------------------------------------------\r
-\r
-# The INPUT tag can be used to specify the files and/or directories that contain \r
-# documented source files. You may enter file names like "myfile.cpp" or \r
-# directories like "/usr/src/myproject". Separate the files or directories \r
-# with spaces.\r
-\r
-INPUT                  = ./\r
-\r
-# This tag can be used to specify the character encoding of the source files \r
-# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is \r
-# also the default input encoding. Doxygen uses libiconv (or the iconv built \r
-# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for \r
-# the list of possible encodings.\r
-\r
-INPUT_ENCODING         = UTF-8\r
-\r
-# If the value of the INPUT tag contains directories, you can use the \r
-# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \r
-# and *.h) to filter out the source-files in the directories. If left \r
-# blank the following patterns are tested: \r
-# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx \r
-# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90\r
-\r
-FILE_PATTERNS          = *.h \\r
-                         *.c \\r
-                                                *.txt\r
-\r
-# The RECURSIVE tag can be used to turn specify whether or not subdirectories \r
-# should be searched for input files as well. Possible values are YES and NO. \r
-# If left blank NO is used.\r
-\r
-RECURSIVE              = YES\r
-\r
-# The EXCLUDE tag can be used to specify files and/or directories that should \r
-# excluded from the INPUT source files. This way you can easily exclude a \r
-# subdirectory from a directory tree whose root is specified with the INPUT tag.\r
-\r
-EXCLUDE                = \r
-\r
-# The EXCLUDE_SYMLINKS tag can be used select whether or not files or \r
-# directories that are symbolic links (a Unix filesystem feature) are excluded \r
-# from the input.\r
-\r
-EXCLUDE_SYMLINKS       = NO\r
-\r
-# If the value of the INPUT tag contains directories, you can use the \r
-# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude \r
-# certain files from those directories. Note that the wildcards are matched \r
-# against the file with absolute path, so to exclude all test directories \r
-# for example use the pattern */test/*\r
-\r
-EXCLUDE_PATTERNS       = */LowLevel/USBMode.h\r
-\r
-# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names \r
-# (namespaces, classes, functions, etc.) that should be excluded from the \r
-# output. The symbol name can be a fully qualified name, a word, or if the \r
-# wildcard * is used, a substring. Examples: ANamespace, AClass, \r
-# AClass::ANamespace, ANamespace::*Test\r
-\r
-EXCLUDE_SYMBOLS        = __*\r
-\r
-# The EXAMPLE_PATH tag can be used to specify one or more files or \r
-# directories that contain example code fragments that are included (see \r
-# the \include command).\r
-\r
-EXAMPLE_PATH           = \r
-\r
-# If the value of the EXAMPLE_PATH tag contains directories, you can use the \r
-# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \r
-# and *.h) to filter out the source-files in the directories. If left \r
-# blank all files are included.\r
-\r
-EXAMPLE_PATTERNS       = *\r
-\r
-# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be \r
-# searched for input files to be used with the \include or \dontinclude \r
-# commands irrespective of the value of the RECURSIVE tag. \r
-# Possible values are YES and NO. If left blank NO is used.\r
-\r
-EXAMPLE_RECURSIVE      = NO\r
-\r
-# The IMAGE_PATH tag can be used to specify one or more files or \r
-# directories that contain image that are included in the documentation (see \r
-# the \image command).\r
-\r
-IMAGE_PATH             = \r
-\r
-# The INPUT_FILTER tag can be used to specify a program that doxygen should \r
-# invoke to filter for each input file. Doxygen will invoke the filter program \r
-# by executing (via popen()) the command <filter> <input-file>, where <filter> \r
-# is the value of the INPUT_FILTER tag, and <input-file> is the name of an \r
-# input file. Doxygen will then use the output that the filter program writes \r
-# to standard output.  If FILTER_PATTERNS is specified, this tag will be \r
-# ignored.\r
-\r
-INPUT_FILTER           = \r
-\r
-# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern \r
-# basis.  Doxygen will compare the file name with each pattern and apply the \r
-# filter if there is a match.  The filters are a list of the form: \r
-# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further \r
-# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER \r
-# is applied to all files.\r
-\r
-FILTER_PATTERNS        = \r
-\r
-# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using \r
-# INPUT_FILTER) will be used to filter the input files when producing source \r
-# files to browse (i.e. when SOURCE_BROWSER is set to YES).\r
-\r
-FILTER_SOURCE_FILES    = NO\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to source browsing\r
-#---------------------------------------------------------------------------\r
-\r
-# If the SOURCE_BROWSER tag is set to YES then a list of source files will \r
-# be generated. Documented entities will be cross-referenced with these sources. \r
-# Note: To get rid of all source code in the generated output, make sure also \r
-# VERBATIM_HEADERS is set to NO.\r
-\r
-SOURCE_BROWSER         = NO\r
-\r
-# Setting the INLINE_SOURCES tag to YES will include the body \r
-# of functions and classes directly in the documentation.\r
-\r
-INLINE_SOURCES         = NO\r
-\r
-# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct \r
-# doxygen to hide any special comment blocks from generated source code \r
-# fragments. Normal C and C++ comments will always remain visible.\r
-\r
-STRIP_CODE_COMMENTS    = YES\r
-\r
-# If the REFERENCED_BY_RELATION tag is set to YES \r
-# then for each documented function all documented \r
-# functions referencing it will be listed.\r
-\r
-REFERENCED_BY_RELATION = NO\r
-\r
-# If the REFERENCES_RELATION tag is set to YES \r
-# then for each documented function all documented entities \r
-# called/used by that function will be listed.\r
-\r
-REFERENCES_RELATION    = NO\r
-\r
-# If the REFERENCES_LINK_SOURCE tag is set to YES (the default)\r
-# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from\r
-# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will\r
-# link to the source code.  Otherwise they will link to the documentstion.\r
-\r
-REFERENCES_LINK_SOURCE = NO\r
-\r
-# If the USE_HTAGS tag is set to YES then the references to source code \r
-# will point to the HTML generated by the htags(1) tool instead of doxygen \r
-# built-in source browser. The htags tool is part of GNU's global source \r
-# tagging system (see http://www.gnu.org/software/global/global.html). You \r
-# will need version 4.8.6 or higher.\r
-\r
-USE_HTAGS              = NO\r
-\r
-# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen \r
-# will generate a verbatim copy of the header file for each class for \r
-# which an include is specified. Set to NO to disable this.\r
-\r
-VERBATIM_HEADERS       = NO\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the alphabetical class index\r
-#---------------------------------------------------------------------------\r
-\r
-# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index \r
-# of all compounds will be generated. Enable this if the project \r
-# contains a lot of classes, structs, unions or interfaces.\r
-\r
-ALPHABETICAL_INDEX     = YES\r
-\r
-# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then \r
-# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns \r
-# in which this list will be split (can be a number in the range [1..20])\r
-\r
-COLS_IN_ALPHA_INDEX    = 5\r
-\r
-# In case all classes in a project start with a common prefix, all \r
-# classes will be put under the same header in the alphabetical index. \r
-# The IGNORE_PREFIX tag can be used to specify one or more prefixes that \r
-# should be ignored while generating the index headers.\r
-\r
-IGNORE_PREFIX          = \r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the HTML output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_HTML tag is set to YES (the default) Doxygen will \r
-# generate HTML output.\r
-\r
-GENERATE_HTML          = YES\r
-\r
-# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. \r
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
-# put in front of it. If left blank `html' will be used as the default path.\r
-\r
-HTML_OUTPUT            = html\r
-\r
-# The HTML_FILE_EXTENSION tag can be used to specify the file extension for \r
-# each generated HTML page (for example: .htm,.php,.asp). If it is left blank \r
-# doxygen will generate files with .html extension.\r
-\r
-HTML_FILE_EXTENSION    = .html\r
-\r
-# The HTML_HEADER tag can be used to specify a personal HTML header for \r
-# each generated HTML page. If it is left blank doxygen will generate a \r
-# standard header.\r
-\r
-HTML_HEADER            = \r
-\r
-# The HTML_FOOTER tag can be used to specify a personal HTML footer for \r
-# each generated HTML page. If it is left blank doxygen will generate a \r
-# standard footer.\r
-\r
-HTML_FOOTER            = \r
-\r
-# The HTML_STYLESHEET tag can be used to specify a user-defined cascading \r
-# style sheet that is used by each HTML page. It can be used to \r
-# fine-tune the look of the HTML output. If the tag is left blank doxygen \r
-# will generate a default style sheet. Note that doxygen will try to copy \r
-# the style sheet file to the HTML output directory, so don't put your own \r
-# stylesheet in the HTML output directory as well, or it will be erased!\r
-\r
-HTML_STYLESHEET        = \r
-\r
-# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, \r
-# files or namespaces will be aligned in HTML using tables. If set to \r
-# NO a bullet list will be used.\r
-\r
-HTML_ALIGN_MEMBERS     = YES\r
-\r
-# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML \r
-# documentation will contain sections that can be hidden and shown after the \r
-# page has loaded. For this to work a browser that supports \r
-# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox \r
-# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari).\r
-\r
-HTML_DYNAMIC_SECTIONS  = YES\r
-\r
-# If the GENERATE_DOCSET tag is set to YES, additional index files \r
-# will be generated that can be used as input for Apple's Xcode 3 \r
-# integrated development environment, introduced with OSX 10.5 (Leopard). \r
-# To create a documentation set, doxygen will generate a Makefile in the \r
-# HTML output directory. Running make will produce the docset in that \r
-# directory and running "make install" will install the docset in \r
-# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find \r
-# it at startup. \r
-# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information.\r
-\r
-GENERATE_DOCSET        = NO\r
-\r
-# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the \r
-# feed. A documentation feed provides an umbrella under which multiple \r
-# documentation sets from a single provider (such as a company or product suite) \r
-# can be grouped.\r
-\r
-DOCSET_FEEDNAME        = "Doxygen generated docs"\r
-\r
-# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that \r
-# should uniquely identify the documentation set bundle. This should be a \r
-# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen \r
-# will append .docset to the name.\r
-\r
-DOCSET_BUNDLE_ID       = org.doxygen.Project\r
-\r
-# If the GENERATE_HTMLHELP tag is set to YES, additional index files \r
-# will be generated that can be used as input for tools like the \r
-# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) \r
-# of the generated HTML documentation.\r
-\r
-GENERATE_HTMLHELP      = NO\r
-\r
-# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can \r
-# be used to specify the file name of the resulting .chm file. You \r
-# can add a path in front of the file if the result should not be \r
-# written to the html output directory.\r
-\r
-CHM_FILE               = \r
-\r
-# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can \r
-# be used to specify the location (absolute path including file name) of \r
-# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run \r
-# the HTML help compiler on the generated index.hhp.\r
-\r
-HHC_LOCATION           = \r
-\r
-# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag \r
-# controls if a separate .chi index file is generated (YES) or that \r
-# it should be included in the master .chm file (NO).\r
-\r
-GENERATE_CHI           = NO\r
-\r
-# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING\r
-# is used to encode HtmlHelp index (hhk), content (hhc) and project file\r
-# content.\r
-\r
-CHM_INDEX_ENCODING     = \r
-\r
-# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag \r
-# controls whether a binary table of contents is generated (YES) or a \r
-# normal table of contents (NO) in the .chm file.\r
-\r
-BINARY_TOC             = NO\r
-\r
-# The TOC_EXPAND flag can be set to YES to add extra items for group members \r
-# to the contents of the HTML help documentation and to the tree view.\r
-\r
-TOC_EXPAND             = YES\r
-\r
-# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER \r
-# are set, an additional index file will be generated that can be used as input for \r
-# Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated \r
-# HTML documentation.\r
-\r
-GENERATE_QHP           = NO\r
-\r
-# If the QHG_LOCATION tag is specified, the QCH_FILE tag can \r
-# be used to specify the file name of the resulting .qch file. \r
-# The path specified is relative to the HTML output folder.\r
-\r
-QCH_FILE               = \r
-\r
-# The QHP_NAMESPACE tag specifies the namespace to use when generating \r
-# Qt Help Project output. For more information please see \r
-# <a href="http://doc.trolltech.com/qthelpproject.html#namespace">Qt Help Project / Namespace</a>.\r
-\r
-QHP_NAMESPACE          = org.doxygen.Project\r
-\r
-# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating \r
-# Qt Help Project output. For more information please see \r
-# <a href="http://doc.trolltech.com/qthelpproject.html#virtual-folders">Qt Help Project / Virtual Folders</a>.\r
-\r
-QHP_VIRTUAL_FOLDER     = doc\r
-\r
-# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can \r
-# be used to specify the location of Qt's qhelpgenerator. \r
-# If non-empty doxygen will try to run qhelpgenerator on the generated \r
-# .qhp file .\r
-\r
-QHG_LOCATION           = \r
-\r
-# The DISABLE_INDEX tag can be used to turn on/off the condensed index at \r
-# top of each HTML page. The value NO (the default) enables the index and \r
-# the value YES disables it.\r
-\r
-DISABLE_INDEX          = NO\r
-\r
-# This tag can be used to set the number of enum values (range [1..20]) \r
-# that doxygen will group on one line in the generated HTML documentation.\r
-\r
-ENUM_VALUES_PER_LINE   = 1\r
-\r
-# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index\r
-# structure should be generated to display hierarchical information.\r
-# If the tag value is set to FRAME, a side panel will be generated\r
-# containing a tree-like index structure (just like the one that \r
-# is generated for HTML Help). For this to work a browser that supports \r
-# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, \r
-# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are \r
-# probably better off using the HTML help feature. Other possible values \r
-# for this tag are: HIERARCHIES, which will generate the Groups, Directories,\r
-# and Class Hierarchy pages using a tree view instead of an ordered list;\r
-# ALL, which combines the behavior of FRAME and HIERARCHIES; and NONE, which\r
-# disables this behavior completely. For backwards compatibility with previous\r
-# releases of Doxygen, the values YES and NO are equivalent to FRAME and NONE\r
-# respectively.\r
-\r
-GENERATE_TREEVIEW      = YES\r
-\r
-# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be \r
-# used to set the initial width (in pixels) of the frame in which the tree \r
-# is shown.\r
-\r
-TREEVIEW_WIDTH         = 250\r
-\r
-# Use this tag to change the font size of Latex formulas included \r
-# as images in the HTML documentation. The default is 10. Note that \r
-# when you change the font size after a successful doxygen run you need \r
-# to manually remove any form_*.png images from the HTML output directory \r
-# to force them to be regenerated.\r
-\r
-FORMULA_FONTSIZE       = 10\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the LaTeX output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will \r
-# generate Latex output.\r
-\r
-GENERATE_LATEX         = NO\r
-\r
-# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. \r
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
-# put in front of it. If left blank `latex' will be used as the default path.\r
-\r
-LATEX_OUTPUT           = latex\r
-\r
-# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be \r
-# invoked. If left blank `latex' will be used as the default command name.\r
-\r
-LATEX_CMD_NAME         = latex\r
-\r
-# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to \r
-# generate index for LaTeX. If left blank `makeindex' will be used as the \r
-# default command name.\r
-\r
-MAKEINDEX_CMD_NAME     = makeindex\r
-\r
-# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact \r
-# LaTeX documents. This may be useful for small projects and may help to \r
-# save some trees in general.\r
-\r
-COMPACT_LATEX          = NO\r
-\r
-# The PAPER_TYPE tag can be used to set the paper type that is used \r
-# by the printer. Possible values are: a4, a4wide, letter, legal and \r
-# executive. If left blank a4wide will be used.\r
-\r
-PAPER_TYPE             = a4wide\r
-\r
-# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX \r
-# packages that should be included in the LaTeX output.\r
-\r
-EXTRA_PACKAGES         = \r
-\r
-# The LATEX_HEADER tag can be used to specify a personal LaTeX header for \r
-# the generated latex document. The header should contain everything until \r
-# the first chapter. If it is left blank doxygen will generate a \r
-# standard header. Notice: only use this tag if you know what you are doing!\r
-\r
-LATEX_HEADER           = \r
-\r
-# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated \r
-# is prepared for conversion to pdf (using ps2pdf). The pdf file will \r
-# contain links (just like the HTML output) instead of page references \r
-# This makes the output suitable for online browsing using a pdf viewer.\r
-\r
-PDF_HYPERLINKS         = YES\r
-\r
-# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of \r
-# plain latex in the generated Makefile. Set this option to YES to get a \r
-# higher quality PDF documentation.\r
-\r
-USE_PDFLATEX           = YES\r
-\r
-# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. \r
-# command to the generated LaTeX files. This will instruct LaTeX to keep \r
-# running if errors occur, instead of asking the user for help. \r
-# This option is also used when generating formulas in HTML.\r
-\r
-LATEX_BATCHMODE        = NO\r
-\r
-# If LATEX_HIDE_INDICES is set to YES then doxygen will not \r
-# include the index chapters (such as File Index, Compound Index, etc.) \r
-# in the output.\r
-\r
-LATEX_HIDE_INDICES     = NO\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the RTF output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output \r
-# The RTF output is optimized for Word 97 and may not look very pretty with \r
-# other RTF readers or editors.\r
-\r
-GENERATE_RTF           = NO\r
-\r
-# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. \r
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
-# put in front of it. If left blank `rtf' will be used as the default path.\r
-\r
-RTF_OUTPUT             = rtf\r
-\r
-# If the COMPACT_RTF tag is set to YES Doxygen generates more compact \r
-# RTF documents. This may be useful for small projects and may help to \r
-# save some trees in general.\r
-\r
-COMPACT_RTF            = NO\r
-\r
-# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated \r
-# will contain hyperlink fields. The RTF file will \r
-# contain links (just like the HTML output) instead of page references. \r
-# This makes the output suitable for online browsing using WORD or other \r
-# programs which support those fields. \r
-# Note: wordpad (write) and others do not support links.\r
-\r
-RTF_HYPERLINKS         = NO\r
-\r
-# Load stylesheet definitions from file. Syntax is similar to doxygen's \r
-# config file, i.e. a series of assignments. You only have to provide \r
-# replacements, missing definitions are set to their default value.\r
-\r
-RTF_STYLESHEET_FILE    = \r
-\r
-# Set optional variables used in the generation of an rtf document. \r
-# Syntax is similar to doxygen's config file.\r
-\r
-RTF_EXTENSIONS_FILE    = \r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the man page output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_MAN tag is set to YES (the default) Doxygen will \r
-# generate man pages\r
-\r
-GENERATE_MAN           = NO\r
-\r
-# The MAN_OUTPUT tag is used to specify where the man pages will be put. \r
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
-# put in front of it. If left blank `man' will be used as the default path.\r
-\r
-MAN_OUTPUT             = man\r
-\r
-# The MAN_EXTENSION tag determines the extension that is added to \r
-# the generated man pages (default is the subroutine's section .3)\r
-\r
-MAN_EXTENSION          = .3\r
-\r
-# If the MAN_LINKS tag is set to YES and Doxygen generates man output, \r
-# then it will generate one additional man file for each entity \r
-# documented in the real man page(s). These additional files \r
-# only source the real man page, but without them the man command \r
-# would be unable to find the correct page. The default is NO.\r
-\r
-MAN_LINKS              = NO\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the XML output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_XML tag is set to YES Doxygen will \r
-# generate an XML file that captures the structure of \r
-# the code including all documentation.\r
-\r
-GENERATE_XML           = NO\r
-\r
-# The XML_OUTPUT tag is used to specify where the XML pages will be put. \r
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
-# put in front of it. If left blank `xml' will be used as the default path.\r
-\r
-XML_OUTPUT             = xml\r
-\r
-# The XML_SCHEMA tag can be used to specify an XML schema, \r
-# which can be used by a validating XML parser to check the \r
-# syntax of the XML files.\r
-\r
-XML_SCHEMA             = \r
-\r
-# The XML_DTD tag can be used to specify an XML DTD, \r
-# which can be used by a validating XML parser to check the \r
-# syntax of the XML files.\r
-\r
-XML_DTD                = \r
-\r
-# If the XML_PROGRAMLISTING tag is set to YES Doxygen will \r
-# dump the program listings (including syntax highlighting \r
-# and cross-referencing information) to the XML output. Note that \r
-# enabling this will significantly increase the size of the XML output.\r
-\r
-XML_PROGRAMLISTING     = YES\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options for the AutoGen Definitions output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will \r
-# generate an AutoGen Definitions (see autogen.sf.net) file \r
-# that captures the structure of the code including all \r
-# documentation. Note that this feature is still experimental \r
-# and incomplete at the moment.\r
-\r
-GENERATE_AUTOGEN_DEF   = NO\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the Perl module output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_PERLMOD tag is set to YES Doxygen will \r
-# generate a Perl module file that captures the structure of \r
-# the code including all documentation. Note that this \r
-# feature is still experimental and incomplete at the \r
-# moment.\r
-\r
-GENERATE_PERLMOD       = NO\r
-\r
-# If the PERLMOD_LATEX tag is set to YES Doxygen will generate \r
-# the necessary Makefile rules, Perl scripts and LaTeX code to be able \r
-# to generate PDF and DVI output from the Perl module output.\r
-\r
-PERLMOD_LATEX          = NO\r
-\r
-# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be \r
-# nicely formatted so it can be parsed by a human reader.  This is useful \r
-# if you want to understand what is going on.  On the other hand, if this \r
-# tag is set to NO the size of the Perl module output will be much smaller \r
-# and Perl will parse it just the same.\r
-\r
-PERLMOD_PRETTY         = YES\r
-\r
-# The names of the make variables in the generated doxyrules.make file \r
-# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. \r
-# This is useful so different doxyrules.make files included by the same \r
-# Makefile don't overwrite each other's variables.\r
-\r
-PERLMOD_MAKEVAR_PREFIX = \r
-\r
-#---------------------------------------------------------------------------\r
-# Configuration options related to the preprocessor   \r
-#---------------------------------------------------------------------------\r
-\r
-# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will \r
-# evaluate all C-preprocessor directives found in the sources and include \r
-# files.\r
-\r
-ENABLE_PREPROCESSING   = YES\r
-\r
-# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro \r
-# names in the source code. If set to NO (the default) only conditional \r
-# compilation will be performed. Macro expansion can be done in a controlled \r
-# way by setting EXPAND_ONLY_PREDEF to YES.\r
-\r
-MACRO_EXPANSION        = YES\r
-\r
-# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES \r
-# then the macro expansion is limited to the macros specified with the \r
-# PREDEFINED and EXPAND_AS_DEFINED tags.\r
-\r
-EXPAND_ONLY_PREDEF     = YES\r
-\r
-# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files \r
-# in the INCLUDE_PATH (see below) will be search if a #include is found.\r
-\r
-SEARCH_INCLUDES        = YES\r
-\r
-# The INCLUDE_PATH tag can be used to specify one or more directories that \r
-# contain include files that are not input files but should be processed by \r
-# the preprocessor.\r
-\r
-INCLUDE_PATH           = \r
-\r
-# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard \r
-# patterns (like *.h and *.hpp) to filter out the header-files in the \r
-# directories. If left blank, the patterns specified with FILE_PATTERNS will \r
-# be used.\r
-\r
-INCLUDE_FILE_PATTERNS  = \r
-\r
-# The PREDEFINED tag can be used to specify one or more macro names that \r
-# are defined before the preprocessor is started (similar to the -D option of \r
-# gcc). The argument of the tag is a list of macros of the form: name \r
-# or name=definition (no spaces). If the definition and the = are \r
-# omitted =1 is assumed. To prevent a macro definition from being \r
-# undefined via #undef or recursively expanded use the := operator \r
-# instead of the = operator.\r
-\r
-PREDEFINED             = __DOXYGEN__\r
-\r
-# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then \r
-# this tag can be used to specify a list of macro names that should be expanded. \r
-# The macro definition that is found in the sources will be used. \r
-# Use the PREDEFINED tag if you want to use a different macro definition.\r
-\r
-EXPAND_AS_DEFINED      = BUTTLOADTAG\r
-\r
-# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then \r
-# doxygen's preprocessor will remove all function-like macros that are alone \r
-# on a line, have an all uppercase name, and do not end with a semicolon. Such \r
-# function macros are typically used for boiler-plate code, and will confuse \r
-# the parser if not removed.\r
-\r
-SKIP_FUNCTION_MACROS   = YES\r
-\r
-#---------------------------------------------------------------------------\r
-# Configuration::additions related to external references   \r
-#---------------------------------------------------------------------------\r
-\r
-# The TAGFILES option can be used to specify one or more tagfiles. \r
-# Optionally an initial location of the external documentation \r
-# can be added for each tagfile. The format of a tag file without \r
-# this location is as follows: \r
-#   TAGFILES = file1 file2 ... \r
-# Adding location for the tag files is done as follows: \r
-#   TAGFILES = file1=loc1 "file2 = loc2" ... \r
-# where "loc1" and "loc2" can be relative or absolute paths or \r
-# URLs. If a location is present for each tag, the installdox tool \r
-# does not have to be run to correct the links.\r
-# Note that each tag file must have a unique name\r
-# (where the name does NOT include the path)\r
-# If a tag file is not located in the directory in which doxygen \r
-# is run, you must also specify the path to the tagfile here.\r
-\r
-TAGFILES               = \r
-\r
-# When a file name is specified after GENERATE_TAGFILE, doxygen will create \r
-# a tag file that is based on the input files it reads.\r
-\r
-GENERATE_TAGFILE       = \r
-\r
-# If the ALLEXTERNALS tag is set to YES all external classes will be listed \r
-# in the class index. If set to NO only the inherited external classes \r
-# will be listed.\r
-\r
-ALLEXTERNALS           = NO\r
-\r
-# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed \r
-# in the modules index. If set to NO, only the current project's groups will \r
-# be listed.\r
-\r
-EXTERNAL_GROUPS        = YES\r
-\r
-# The PERL_PATH should be the absolute path and name of the perl script \r
-# interpreter (i.e. the result of `which perl').\r
-\r
-PERL_PATH              = /usr/bin/perl\r
-\r
-#---------------------------------------------------------------------------\r
-# Configuration options related to the dot tool   \r
-#---------------------------------------------------------------------------\r
-\r
-# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will \r
-# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base \r
-# or super classes. Setting the tag to NO turns the diagrams off. Note that \r
-# this option is superseded by the HAVE_DOT option below. This is only a \r
-# fallback. It is recommended to install and use dot, since it yields more \r
-# powerful graphs.\r
-\r
-CLASS_DIAGRAMS         = NO\r
-\r
-# You can define message sequence charts within doxygen comments using the \msc \r
-# command. Doxygen will then run the mscgen tool (see \r
-# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the \r
-# documentation. The MSCGEN_PATH tag allows you to specify the directory where \r
-# the mscgen tool resides. If left empty the tool is assumed to be found in the \r
-# default search path.\r
-\r
-MSCGEN_PATH            = \r
-\r
-# If set to YES, the inheritance and collaboration graphs will hide \r
-# inheritance and usage relations if the target is undocumented \r
-# or is not a class.\r
-\r
-HIDE_UNDOC_RELATIONS   = YES\r
-\r
-# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is \r
-# available from the path. This tool is part of Graphviz, a graph visualization \r
-# toolkit from AT&T and Lucent Bell Labs. The other options in this section \r
-# have no effect if this option is set to NO (the default)\r
-\r
-HAVE_DOT               = NO\r
-\r
-# By default doxygen will write a font called FreeSans.ttf to the output \r
-# directory and reference it in all dot files that doxygen generates. This \r
-# font does not include all possible unicode characters however, so when you need \r
-# these (or just want a differently looking font) you can specify the font name \r
-# using DOT_FONTNAME. You need need to make sure dot is able to find the font, \r
-# which can be done by putting it in a standard location or by setting the \r
-# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory \r
-# containing the font.\r
-\r
-DOT_FONTNAME           = FreeSans\r
-\r
-# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. \r
-# The default size is 10pt.\r
-\r
-DOT_FONTSIZE           = 10\r
-\r
-# By default doxygen will tell dot to use the output directory to look for the \r
-# FreeSans.ttf font (which doxygen will put there itself). If you specify a \r
-# different font using DOT_FONTNAME you can set the path where dot \r
-# can find it using this tag.\r
-\r
-DOT_FONTPATH           = \r
-\r
-# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen \r
-# will generate a graph for each documented class showing the direct and \r
-# indirect inheritance relations. Setting this tag to YES will force the \r
-# the CLASS_DIAGRAMS tag to NO.\r
-\r
-CLASS_GRAPH            = NO\r
-\r
-# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen \r
-# will generate a graph for each documented class showing the direct and \r
-# indirect implementation dependencies (inheritance, containment, and \r
-# class references variables) of the class with other documented classes.\r
-\r
-COLLABORATION_GRAPH    = NO\r
-\r
-# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen \r
-# will generate a graph for groups, showing the direct groups dependencies\r
-\r
-GROUP_GRAPHS           = NO\r
-\r
-# If the UML_LOOK tag is set to YES doxygen will generate inheritance and \r
-# collaboration diagrams in a style similar to the OMG's Unified Modeling \r
-# Language.\r
-\r
-UML_LOOK               = NO\r
-\r
-# If set to YES, the inheritance and collaboration graphs will show the \r
-# relations between templates and their instances.\r
-\r
-TEMPLATE_RELATIONS     = NO\r
-\r
-# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT \r
-# tags are set to YES then doxygen will generate a graph for each documented \r
-# file showing the direct and indirect include dependencies of the file with \r
-# other documented files.\r
-\r
-INCLUDE_GRAPH          = NO\r
-\r
-# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and \r
-# HAVE_DOT tags are set to YES then doxygen will generate a graph for each \r
-# documented header file showing the documented files that directly or \r
-# indirectly include this file.\r
-\r
-INCLUDED_BY_GRAPH      = NO\r
-\r
-# If the CALL_GRAPH and HAVE_DOT options are set to YES then \r
-# doxygen will generate a call dependency graph for every global function \r
-# or class method. Note that enabling this option will significantly increase \r
-# the time of a run. So in most cases it will be better to enable call graphs \r
-# for selected functions only using the \callgraph command.\r
-\r
-CALL_GRAPH             = NO\r
-\r
-# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then \r
-# doxygen will generate a caller dependency graph for every global function \r
-# or class method. Note that enabling this option will significantly increase \r
-# the time of a run. So in most cases it will be better to enable caller \r
-# graphs for selected functions only using the \callergraph command.\r
-\r
-CALLER_GRAPH           = NO\r
-\r
-# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen \r
-# will graphical hierarchy of all classes instead of a textual one.\r
-\r
-GRAPHICAL_HIERARCHY    = NO\r
-\r
-# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES \r
-# then doxygen will show the dependencies a directory has on other directories \r
-# in a graphical way. The dependency relations are determined by the #include\r
-# relations between the files in the directories.\r
-\r
-DIRECTORY_GRAPH        = NO\r
-\r
-# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images \r
-# generated by dot. Possible values are png, jpg, or gif\r
-# If left blank png will be used.\r
-\r
-DOT_IMAGE_FORMAT       = png\r
-\r
-# The tag DOT_PATH can be used to specify the path where the dot tool can be \r
-# found. If left blank, it is assumed the dot tool can be found in the path.\r
-\r
-DOT_PATH               = "C:/Program Files/Graphviz2.18/bin"\r
-\r
-# The DOTFILE_DIRS tag can be used to specify one or more directories that \r
-# contain dot files that are included in the documentation (see the \r
-# \dotfile command).\r
-\r
-DOTFILE_DIRS           = \r
-\r
-# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of \r
-# nodes that will be shown in the graph. If the number of nodes in a graph \r
-# becomes larger than this value, doxygen will truncate the graph, which is \r
-# visualized by representing a node as a red box. Note that doxygen if the \r
-# number of direct children of the root node in a graph is already larger than \r
-# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note \r
-# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.\r
-\r
-DOT_GRAPH_MAX_NODES    = 15\r
-\r
-# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the \r
-# graphs generated by dot. A depth value of 3 means that only nodes reachable \r
-# from the root by following a path via at most 3 edges will be shown. Nodes \r
-# that lay further from the root node will be omitted. Note that setting this \r
-# option to 1 or 2 may greatly reduce the computation time needed for large \r
-# code bases. Also note that the size of a graph can be further restricted by \r
-# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.\r
-\r
-MAX_DOT_GRAPH_DEPTH    = 2\r
-\r
-# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent \r
-# background. This is disabled by default, because dot on Windows does not \r
-# seem to support this out of the box. Warning: Depending on the platform used, \r
-# enabling this option may lead to badly anti-aliased labels on the edges of \r
-# a graph (i.e. they become hard to read).\r
-\r
-DOT_TRANSPARENT        = YES\r
-\r
-# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output \r
-# files in one run (i.e. multiple -o and -T options on the command line). This \r
-# makes dot run faster, but since only newer versions of dot (>1.8.10) \r
-# support this, this feature is disabled by default.\r
-\r
-DOT_MULTI_TARGETS      = NO\r
-\r
-# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will \r
-# generate a legend page explaining the meaning of the various boxes and \r
-# arrows in the dot generated graphs.\r
-\r
-GENERATE_LEGEND        = YES\r
-\r
-# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will \r
-# remove the intermediate dot files that are used to generate \r
-# the various graphs.\r
-\r
-DOT_CLEANUP            = YES\r
-\r
-#---------------------------------------------------------------------------\r
-# Configuration::additions related to the search engine   \r
-#---------------------------------------------------------------------------\r
-\r
-# The SEARCHENGINE tag specifies whether or not a search engine should be \r
-# used. If set to NO the values of all tags below this one will be ignored.\r
-\r
-SEARCHENGINE           = NO\r
diff --git a/Demos/Device/DualCDC/DualCDC.aps b/Demos/Device/DualCDC/DualCDC.aps
deleted file mode 100644 (file)
index 276e743..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<AVRStudio><MANAGEMENT><ProjectName>DualCDC</ProjectName><Created>30-Sep-2008 14:06:03</Created><LastEdit>30-Sep-2008 14:06:18</LastEdit><ICON>241</ICON><ProjectType>0</ProjectType><Created>30-Sep-2008 14:06:03</Created><Version>4</Version><Build>4, 14, 0, 589</Build><ProjectTypeName>AVR GCC</ProjectTypeName></MANAGEMENT><CODE_CREATION><ObjectFile></ObjectFile><EntryFile></EntryFile><SaveFolder>C:\Users\Dean\Documents\Electronics\Projects\WORK\MyUSBWORK\Demos\DualCDC\</SaveFolder></CODE_CREATION><DEBUG_TARGET><CURRENT_TARGET></CURRENT_TARGET><CURRENT_PART></CURRENT_PART><BREAKPOINTS></BREAKPOINTS><IO_EXPAND><HIDE>false</HIDE></IO_EXPAND><REGISTERNAMES><Register>R00</Register><Register>R01</Register><Register>R02</Register><Register>R03</Register><Register>R04</Register><Register>R05</Register><Register>R06</Register><Register>R07</Register><Register>R08</Register><Register>R09</Register><Register>R10</Register><Register>R11</Register><Register>R12</Register><Register>R13</Register><Register>R14</Register><Register>R15</Register><Register>R16</Register><Register>R17</Register><Register>R18</Register><Register>R19</Register><Register>R20</Register><Register>R21</Register><Register>R22</Register><Register>R23</Register><Register>R24</Register><Register>R25</Register><Register>R26</Register><Register>R27</Register><Register>R28</Register><Register>R29</Register><Register>R30</Register><Register>R31</Register></REGISTERNAMES><COM>Auto</COM><COMType>0</COMType><WATCHNUM>0</WATCHNUM><WATCHNAMES><Pane0></Pane0><Pane1></Pane1><Pane2></Pane2><Pane3></Pane3></WATCHNAMES><BreakOnTrcaeFull>0</BreakOnTrcaeFull></DEBUG_TARGET><Debugger><Triggers></Triggers></Debugger><AVRGCCPLUGIN><FILES><SOURCEFILE>Descriptors.c</SOURCEFILE><SOURCEFILE>DualCDC.c</SOURCEFILE><HEADERFILE>Descriptors.h</HEADERFILE><HEADERFILE>DualCDC.h</HEADERFILE><OTHERFILE>makefile</OTHERFILE></FILES><CONFIGS><CONFIG><NAME>default</NAME><USESEXTERNALMAKEFILE>YES</USESEXTERNALMAKEFILE><EXTERNALMAKEFILE>makefile</EXTERNALMAKEFILE><PART>atmega128</PART><HEX>1</HEX><LIST>1</LIST><MAP>1</MAP><OUTPUTFILENAME>DualCDC.elf</OUTPUTFILENAME><OUTPUTDIR>default\</OUTPUTDIR><ISDIRTY>1</ISDIRTY><OPTIONS/><INCDIRS/><LIBDIRS/><LIBS/><LINKOBJECTS/><OPTIONSFORALL>-Wall -gdwarf-2 -std=gnu99 -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums</OPTIONSFORALL><LINKEROPTIONS></LINKEROPTIONS><SEGMENTS/></CONFIG></CONFIGS><LASTCONFIG>default</LASTCONFIG><USES_WINAVR>1</USES_WINAVR><GCC_LOC>C:\WinAVR-20080512\bin\avr-gcc.exe</GCC_LOC><MAKE_LOC>C:\WinAVR-20080512\utils\bin\make.exe</MAKE_LOC></AVRGCCPLUGIN><IOView><usergroups/><sort sorted="0" column="0" ordername="0" orderaddress="0" ordergroup="0"/></IOView><Files></Files><Events><Bookmarks></Bookmarks></Events><Trace><Filters></Filters></Trace></AVRStudio>\r
diff --git a/Demos/Device/DualCDC/DualCDC.c b/Demos/Device/DualCDC/DualCDC.c
deleted file mode 100644 (file)
index 216902c..0000000
+++ /dev/null
@@ -1,190 +0,0 @@
-/*\r
-             LUFA Library\r
-     Copyright (C) Dean Camera, 2009.\r
-              \r
-  dean [at] fourwalledcubicle [dot] com\r
-      www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
-  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
-  Permission to use, copy, modify, and distribute this software\r
-  and its documentation for any purpose and without fee is hereby\r
-  granted, provided that the above copyright notice appear in all\r
-  copies and that both that the copyright notice and this\r
-  permission notice and warranty disclaimer appear in supporting\r
-  documentation, and that the name of the author not be used in\r
-  advertising or publicity pertaining to distribution of the\r
-  software without specific, written prior permission.\r
-\r
-  The author disclaim all warranties with regard to this\r
-  software, including all implied warranties of merchantability\r
-  and fitness.  In no event shall the author be liable for any\r
-  special, indirect or consequential damages or any damages\r
-  whatsoever resulting from loss of use, data or profits, whether\r
-  in an action of contract, negligence or other tortious action,\r
-  arising out of or in connection with the use or performance of\r
-  this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- *  Main source file for the DualCDC demo. This file contains the main tasks of\r
- *  the demo and is responsible for the initial application hardware configuration.\r
- */\r
-\r
-#include "DualCDC.h"\r
-\r
-/** LUFA CDC Class driver interface configuration and state information. This structure is\r
- *  passed to all CDC Class driver functions, so that multiple instances of the same class\r
- *  within a device can be differentiated from one another. This is for the first CDC interface,\r
- *  which sends strings to the host for each joystick movement.\r
- */\r
-USB_ClassInfo_CDC_t VirtualSerial1_CDC_Interface =\r
-       {\r
-               .ControlInterfaceNumber     = 0,\r
-\r
-               .DataINEndpointNumber       = CDC1_TX_EPNUM,\r
-               .DataINEndpointSize         = CDC_TXRX_EPSIZE,\r
-\r
-               .DataOUTEndpointNumber      = CDC1_RX_EPNUM,\r
-               .DataOUTEndpointSize        = CDC_TXRX_EPSIZE,\r
-\r
-               .NotificationEndpointNumber = CDC1_NOTIFICATION_EPNUM,\r
-               .NotificationEndpointSize   = CDC_NOTIFICATION_EPSIZE,\r
-       };\r
-\r
-/** LUFA CDC Class driver interface configuration and state information. This structure is\r
- *  passed to all CDC Class driver functions, so that multiple instances of the same class\r
- *  within a device can be differentiated from one another. This is for the second CDC interface,\r
- *  which echos back all received data from the host.\r
- */\r
-USB_ClassInfo_CDC_t VirtualSerial2_CDC_Interface =\r
-       {\r
-               .ControlInterfaceNumber     = 2,\r
-\r
-               .DataINEndpointNumber       = CDC2_TX_EPNUM,\r
-               .DataINEndpointSize         = CDC_TXRX_EPSIZE,\r
-\r
-               .DataOUTEndpointNumber      = CDC2_RX_EPNUM,\r
-               .DataOUTEndpointSize        = CDC_TXRX_EPSIZE,\r
-\r
-               .NotificationEndpointNumber = CDC2_NOTIFICATION_EPNUM,\r
-               .NotificationEndpointSize   = CDC_NOTIFICATION_EPSIZE,\r
-       };\r
-\r
-/** Main program entry point. This routine contains the overall program flow, including initial\r
- *  setup of all components and the main program loop.\r
- */\r
-int main(void)\r
-{\r
-       SetupHardware();\r
-       \r
-       LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);\r
-\r
-       for (;;)\r
-       {\r
-               CheckJoystickMovement();\r
-\r
-               /* Discard all received data on the first CDC interface */\r
-               uint16_t BytesToDiscard = USB_CDC_BytesReceived(&VirtualSerial1_CDC_Interface);\r
-               while (BytesToDiscard--)\r
-                 USB_CDC_ReceiveByte(&VirtualSerial1_CDC_Interface);\r
-\r
-               /* Echo all received data on the second CDC interface */\r
-               uint16_t BytesToEcho = USB_CDC_BytesReceived(&VirtualSerial2_CDC_Interface);\r
-               while (BytesToEcho--)\r
-                 USB_CDC_SendByte(&VirtualSerial2_CDC_Interface, USB_CDC_ReceiveByte(&VirtualSerial2_CDC_Interface));\r
-                 \r
-               USB_CDC_USBTask(&VirtualSerial1_CDC_Interface);\r
-               USB_CDC_USBTask(&VirtualSerial2_CDC_Interface);\r
-               USB_USBTask();\r
-       }\r
-}\r
-\r
-/** Configures the board hardware and chip peripherals for the demo's functionality. */\r
-void SetupHardware(void)\r
-{\r
-       /* Disable watchdog if enabled by bootloader/fuses */\r
-       MCUSR &= ~(1 << WDRF);\r
-       wdt_disable();\r
-\r
-       /* Disable clock division */\r
-       clock_prescale_set(clock_div_1);\r
-\r
-       /* Hardware Initialization */\r
-       Joystick_Init();\r
-       LEDs_Init();\r
-       USB_Init();\r
-}\r
-\r
-/** Checks for changes in the position of the board joystick, sending strings to the host upon each change\r
- *  through the first of the CDC interfaces.\r
- */\r
-void CheckJoystickMovement(void)\r
-{\r
-       uint8_t     JoyStatus_LCL = Joystick_GetStatus();\r
-       char*       ReportString  = NULL;\r
-       static bool ActionSent = false;\r
-\r
-       char* JoystickStrings[] =\r
-               {\r
-                       "Joystick Up\r\n",\r
-                       "Joystick Down\r\n",\r
-                       "Joystick Left\r\n",\r
-                       "Joystick Right\r\n",\r
-                       "Joystick Pressed\r\n",\r
-               };\r
-\r
-       if (JoyStatus_LCL & JOY_UP)\r
-         ReportString = JoystickStrings[0];\r
-       else if (JoyStatus_LCL & JOY_DOWN)\r
-         ReportString = JoystickStrings[1];\r
-       else if (JoyStatus_LCL & JOY_LEFT)\r
-         ReportString = JoystickStrings[2];\r
-       else if (JoyStatus_LCL & JOY_RIGHT)\r
-         ReportString = JoystickStrings[3];\r
-       else if (JoyStatus_LCL & JOY_PRESS)\r
-         ReportString = JoystickStrings[4];\r
-       else\r
-         ActionSent = false;\r
-         \r
-       if ((ReportString != NULL) && (ActionSent == false))\r
-       {\r
-               ActionSent = true;\r
-               \r
-               USB_CDC_SendString(&VirtualSerial1_CDC_Interface, ReportString, strlen(ReportString));          \r
-       }\r
-}\r
-\r
-/** Event handler for the library USB Connection event. */\r
-void EVENT_USB_Connect(void)\r
-{\r
-       LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING);\r
-}\r
-\r
-/** Event handler for the library USB Disconnection event. */\r
-void EVENT_USB_Disconnect(void)\r
-{\r
-       LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);\r
-}\r
-\r
-/** Event handler for the library USB Configuration Changed event. */\r
-void EVENT_USB_ConfigurationChanged(void)\r
-{\r
-       LEDs_SetAllLEDs(LEDMASK_USB_READY);\r
-\r
-       if (!(USB_CDC_ConfigureEndpoints(&VirtualSerial1_CDC_Interface)))\r
-         LEDs_SetAllLEDs(LEDMASK_USB_ERROR);\r
-\r
-       if (!(USB_CDC_ConfigureEndpoints(&VirtualSerial2_CDC_Interface)))\r
-         LEDs_SetAllLEDs(LEDMASK_USB_ERROR);\r
-}\r
-\r
-/** Event handler for the library USB Unhandled Control Packet event. */\r
-void EVENT_USB_UnhandledControlPacket(void)\r
-{\r
-       USB_CDC_ProcessControlPacket(&VirtualSerial1_CDC_Interface);\r
-       USB_CDC_ProcessControlPacket(&VirtualSerial2_CDC_Interface);\r
-}\r
diff --git a/Demos/Device/DualCDC/DualCDC.h b/Demos/Device/DualCDC/DualCDC.h
deleted file mode 100644 (file)
index 93b785d..0000000
+++ /dev/null
@@ -1,75 +0,0 @@
-/*\r
-             LUFA Library\r
-     Copyright (C) Dean Camera, 2009.\r
-              \r
-  dean [at] fourwalledcubicle [dot] com\r
-      www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
-  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
-  Permission to use, copy, modify, and distribute this software\r
-  and its documentation for any purpose and without fee is hereby\r
-  granted, provided that the above copyright notice appear in all\r
-  copies and that both that the copyright notice and this\r
-  permission notice and warranty disclaimer appear in supporting\r
-  documentation, and that the name of the author not be used in\r
-  advertising or publicity pertaining to distribution of the\r
-  software without specific, written prior permission.\r
-\r
-  The author disclaim all warranties with regard to this\r
-  software, including all implied warranties of merchantability\r
-  and fitness.  In no event shall the author be liable for any\r
-  special, indirect or consequential damages or any damages\r
-  whatsoever resulting from loss of use, data or profits, whether\r
-  in an action of contract, negligence or other tortious action,\r
-  arising out of or in connection with the use or performance of\r
-  this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- *  Header file for DualCDC.c.\r
- */\r
-\r
-#ifndef _DUAL_CDC_H_\r
-#define _DUAL_CDC_H_\r
-\r
-       /* Includes: */\r
-               #include <avr/io.h>\r
-               #include <avr/wdt.h>\r
-               #include <avr/power.h>\r
-               #include <string.h>\r
-\r
-               #include "Descriptors.h"\r
-\r
-               #include <LUFA/Version.h>\r
-               #include <LUFA/Drivers/Board/LEDs.h>\r
-               #include <LUFA/Drivers/Board/Joystick.h>\r
-               #include <LUFA/Drivers/USB/USB.h>\r
-               #include <LUFA/Drivers/USB/Class/Device/CDC.h>\r
-\r
-       /* Macros: */\r
-               /** LED mask for the library LED driver, to indicate that the USB interface is not ready. */\r
-               #define LEDMASK_USB_NOTREADY      LEDS_LED1\r
-\r
-               /** LED mask for the library LED driver, to indicate that the USB interface is enumerating. */\r
-               #define LEDMASK_USB_ENUMERATING  (LEDS_LED2 | LEDS_LED3)\r
-\r
-               /** LED mask for the library LED driver, to indicate that the USB interface is ready. */\r
-               #define LEDMASK_USB_READY        (LEDS_LED2 | LEDS_LED4)\r
-\r
-               /** LED mask for the library LED driver, to indicate that an error has occurred in the USB interface. */\r
-               #define LEDMASK_USB_ERROR        (LEDS_LED1 | LEDS_LED3)\r
-               \r
-       /* Function Prototypes: */\r
-               void SetupHardware(void);\r
-               void CheckJoystickMovement(void);\r
-\r
-               void EVENT_USB_Connect(void);\r
-               void EVENT_USB_Disconnect(void);\r
-               void EVENT_USB_ConfigurationChanged(void);\r
-               void EVENT_USB_UnhandledControlPacket(void);\r
-\r
-#endif\r
diff --git a/Demos/Device/DualCDC/DualCDC.txt b/Demos/Device/DualCDC/DualCDC.txt
deleted file mode 100644 (file)
index 6e08602..0000000
+++ /dev/null
@@ -1,75 +0,0 @@
-/** \file\r
- *\r
- *  This file contains special DoxyGen information for the generation of the main page and other special\r
- *  documentation pages. It is not a project source file.\r
- */\r
\r
-/** \mainpage Dual Communications Device Class Device (Dual Virtual Serial Port)\r
- *\r
- *  \section SSec_Info USB Information:\r
- *\r
- *  The following table gives a rundown of the USB utilization of this demo.\r
- *\r
- *  <table>\r
- *   <tr>\r
- *    <td><b>USB Mode:</b></td>\r
- *    <td>Device</td>\r
- *   </tr>\r
- *   <tr>\r
- *    <td><b>USB Class:</b></td>\r
- *    <td>Miscellaneous Device Class</td>\r
- *    <td>( Sub-Interface: Communications Device Class (CDC) )</td>\r
- *   </tr>\r
- *   <tr> \r
- *    <td><b>USB Subclass:</b></td>\r
- *    <td>Common Class</td> \r
- *    <td>( Sub-Interface: Abstract Control Model (ACM) )</td>\r
- *   </tr>\r
- *   <tr>\r
- *    <td><b>Relevant Standards:</b></td>\r
- *    <td>USBIF Interface Association Descriptor ECN</td>\r
- *    <td>USBIF CDC Class Standard</td>\r
- *   </tr>\r
- *   <tr>\r
- *    <td><b>Usable Speeds:</b></td>\r
- *    <td>Full Speed Mode</td>\r
- *   </tr>\r
- *  </table>\r
- *\r
- *  \section SSec_Description Project Description: \r
- *\r
- *  Dual Communications Device Class demonstration application.\r
- *  This gives a simple reference application for implementing\r
- *  a compound device with dual CDC functions acting as a pair\r
- *  of virtual serial ports. This demo uses Interface Association\r
- *  Descriptors to link together the pair of related CDC\r
- *  descriptors for each virtual serial port, which may not be\r
- *  supported in all OSes - Windows Vista is supported, as is\r
- *  XP (although the latter may need a hotfix to function).\r
- *  \r
- *  Joystick actions are transmitted to the host as strings\r
- *  through the first serial port. The device does not respond to\r
- *  serial data sent from the host in the first serial port.\r
- *  \r
- *  The second serial port echoes back data sent from the host.\r
- *  \r
- *  After running this demo for the first time on a new computer,\r
- *  you will need to supply the .INF file located in this demo\r
- *  project's directory as the device's driver when running under\r
- *  Windows. This will enable Windows to use its inbuilt CDC drivers,\r
- *  negating the need for custom drivers for the device. Other\r
- *  Operating Systems should automatically use their own inbuilt\r
- *  CDC-ACM drivers.\r
- *\r
- *  \section SSec_Options Project Options\r
- *\r
- *  The following defines can be found in this demo, which can control the demo behaviour when defined, or changed in value.\r
- *\r
- *  <table>\r
- *   <tr>\r
- *    <td>\r
- *     None\r
- *    </td>\r
- *   </tr>\r
- *  </table>\r
- */
\ No newline at end of file
diff --git a/Demos/Device/DualCDC/LUFA DualCDC.inf b/Demos/Device/DualCDC/LUFA DualCDC.inf
deleted file mode 100644 (file)
index 10ba560..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-;       Windows LUFA Dual CDC Setup File\r
-; Copyright (c) 2000 Microsoft Corporation\r
-\r
-[Version] \r
-Signature="$Windows NT$" \r
-Class=Ports\r
-ClassGuid={4D36E978-E325-11CE-BFC1-08002BE10318} \r
-Provider=%COMPANY% \r
-LayoutFile=layout.inf\r
-DriverVer=06/06/2006,1.0.0.0\r
-\r
-[Manufacturer] \r
-%MFGNAME% = ManufName\r
-\r
-[DestinationDirs] \r
-DefaultDestDir=12 \r
-\r
-[ManufName] \r
-%Modem3% = Modem3, USB\VID_03EB&PID_204E&MI_00\r
-%Modem3% = Modem3, USB\VID_03EB&PID_204E&MI_02\r
-\r
-;------------------------------------------------------------------------------\r
-;  Windows 2000/XP Sections\r
-;------------------------------------------------------------------------------\r
-\r
-[Modem3.nt]\r
-CopyFiles=USBModemCopyFileSection\r
-AddReg=Modem3.nt.AddReg \r
-\r
-[USBModemCopyFileSection]\r
-usbser.sys,,,0x20\r
-\r
-[Modem3.nt.AddReg] \r
-HKR,,DevLoader,,*ntkern \r
-HKR,,NTMPDriver,,usbser.sys \r
-HKR,,EnumPropPages32,,"MsPorts.dll,SerialPortPropPageProvider" \r
-\r
-[Modem3.nt.Services] \r
-AddService=usbser, 0x00000002, DriverService\r
-\r
-[DriverService] \r
-DisplayName=%SERVICE%\r
-ServiceType=1\r
-StartType=3\r
-ErrorControl=1\r
-ServiceBinary=%12%\usbser.sys \r
-\r
-;------------------------------------------------------------------------------\r
-;  String Definitions\r
-;------------------------------------------------------------------------------\r
-\r
-[Strings] \r
-COMPANY="LUFA Library"\r
-MFGNAME="Dean Camera"\r
-Modem3="USB Virtual Serial Port" \r
-SERVICE="USB Virtual Serial Port CDC Driver"
\ No newline at end of file
diff --git a/Demos/Device/DualCDC/makefile b/Demos/Device/DualCDC/makefile
deleted file mode 100644 (file)
index 5fbda61..0000000
+++ /dev/null
@@ -1,733 +0,0 @@
-# Hey Emacs, this is a -*- makefile -*-\r
-#----------------------------------------------------------------------------\r
-# WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al.\r
-#  >> Modified for use with the LUFA project. <<\r
-#\r
-# Released to the Public Domain\r
-#\r
-# Additional material for this makefile was written by:\r
-# Peter Fleury\r
-# Tim Henigan\r
-# Colin O'Flynn\r
-# Reiner Patommel\r
-# Markus Pfaff\r
-# Sander Pool\r
-# Frederik Rouleau\r
-# Carlos Lamas\r
-# Dean Camera\r
-# Opendous Inc.\r
-# Denver Gingerich\r
-#\r
-#----------------------------------------------------------------------------\r
-# On command line:\r
-#\r
-# make all = Make software.\r
-#\r
-# make clean = Clean out built project files.\r
-#\r
-# make coff = Convert ELF to AVR COFF.\r
-#\r
-# make extcoff = Convert ELF to AVR Extended COFF.\r
-#\r
-# make program = Download the hex file to the device, using avrdude.\r
-#                Please customize the avrdude settings below first!\r
-#\r
-# make dfu = Download the hex file to the device, using dfu-programmer (must\r
-#            have dfu-programmer installed).\r
-#\r
-# make flip = Download the hex file to the device, using Atmel FLIP (must\r
-#             have Atmel FLIP installed).\r
-#\r
-# make dfu-ee = Download the eeprom file to the device, using dfu-programmer\r
-#               (must have dfu-programmer installed).\r
-#\r
-# make flip-ee = Download the eeprom file to the device, using Atmel FLIP\r
-#                (must have Atmel FLIP installed).\r
-#\r
-# make doxygen = Generate DoxyGen documentation for the project (must have\r
-#                DoxyGen installed)\r
-#\r
-# make debug = Start either simulavr or avarice as specified for debugging, \r
-#              with avr-gdb or avr-insight as the front end for debugging.\r
-#\r
-# make filename.s = Just compile filename.c into the assembler code only.\r
-#\r
-# make filename.i = Create a preprocessed source file for use in submitting\r
-#                   bug reports to the GCC project.\r
-#\r
-# To rebuild project do "make clean" then "make all".\r
-#----------------------------------------------------------------------------\r
-\r
-\r
-# MCU name\r
-MCU = at90usb1287\r
-\r
-\r
-# Target board (see library "Board Types" documentation, USER or blank for projects not requiring\r
-# LUFA board drivers). If USER is selected, put custom board drivers in a directory called \r
-# "Board" inside the application directory.\r
-BOARD  = USBKEY\r
-\r
-\r
-# Processor frequency.\r
-#     This will define a symbol, F_CPU, in all source code files equal to the \r
-#     processor frequency. You can then use this symbol in your source code to \r
-#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done\r
-#     automatically to create a 32-bit value in your source code.\r
-#     Typical values are:\r
-#         F_CPU =  1000000\r
-#         F_CPU =  1843200\r
-#         F_CPU =  2000000\r
-#         F_CPU =  3686400\r
-#         F_CPU =  4000000\r
-#         F_CPU =  7372800\r
-#         F_CPU =  8000000\r
-#         F_CPU = 11059200\r
-#         F_CPU = 14745600\r
-#         F_CPU = 16000000\r
-#         F_CPU = 18432000\r
-#         F_CPU = 20000000\r
-F_CPU = 8000000\r
-\r
-\r
-# Input clock frequency.\r
-#     This will define a symbol, F_CLOCK, in all source code files equal to the \r
-#     input clock frequency (before any prescaling is performed). This value may\r
-#     differ from F_CPU if prescaling is used on the latter, and is required as the\r
-#     raw input clock is fed directly to the PLL sections of the AVR for high speed\r
-#     clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'\r
-#     at the end, this will be done automatically to create a 32-bit value in your\r
-#     source code.\r
-#\r
-#     If no clock division is performed on the input clock inside the AVR (via the\r
-#     CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.\r
-F_CLOCK = 8000000\r
-\r
-\r
-# Output format. (can be srec, ihex, binary)\r
-FORMAT = ihex\r
-\r
-\r
-# Target file name (without extension).\r
-TARGET = DualCDC\r
-\r
-\r
-# Object files directory\r
-#     To put object files in current directory, use a dot (.), do NOT make\r
-#     this an empty or blank macro!\r
-OBJDIR = .\r
-\r
-\r
-# Path to the LUFA library\r
-LUFA_PATH = ../../..\r
-\r
-\r
-# List C source files here. (C dependencies are automatically generated.)\r
-SRC = $(TARGET).c                                                 \\r
-         Descriptors.c                                               \\r
-         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/DevChapter9.c        \\r
-         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Endpoint.c           \\r
-         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Host.c               \\r
-         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/HostChapter9.c       \\r
-         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/LowLevel.c           \\r
-         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Pipe.c               \\r
-         $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/Events.c            \\r
-         $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBInterrupt.c      \\r
-         $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBTask.c           \\r
-         $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/ConfigDescriptor.c  \\r
-         $(LUFA_PATH)/LUFA/Drivers/USB/Class/Device/CDC.c            \\r
-\r
-\r
-# List C++ source files here. (C dependencies are automatically generated.)\r
-CPPSRC = \r
-\r
-\r
-# List Assembler source files here.\r
-#     Make them always end in a capital .S.  Files ending in a lowercase .s\r
-#     will not be considered source files but generated files (assembler\r
-#     output from the compiler), and will be deleted upon "make clean"!\r
-#     Even though the DOS/Win* filesystem matches both .s and .S the same,\r
-#     it will preserve the spelling of the filenames, and gcc itself does\r
-#     care about how the name is spelled on its command-line.\r
-ASRC =\r
-\r
-\r
-# Optimization level, can be [0, 1, 2, 3, s]. \r
-#     0 = turn off optimization. s = optimize for size.\r
-#     (Note: 3 is not always the best optimization level. See avr-libc FAQ.)\r
-OPT = s\r
-\r
-\r
-# Debugging format.\r
-#     Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs.\r
-#     AVR Studio 4.10 requires dwarf-2.\r
-#     AVR [Extended] COFF format requires stabs, plus an avr-objcopy run.\r
-DEBUG = dwarf-2\r
-\r
-\r
-# List any extra directories to look for include files here.\r
-#     Each directory must be seperated by a space.\r
-#     Use forward slashes for directory separators.\r
-#     For a directory that has spaces, enclose it in quotes.\r
-EXTRAINCDIRS = $(LUFA_PATH)/\r
-\r
-\r
-# Compiler flag to set the C Standard level.\r
-#     c89   = "ANSI" C\r
-#     gnu89 = c89 plus GCC extensions\r
-#     c99   = ISO C99 standard (not yet fully implemented)\r
-#     gnu99 = c99 plus GCC extensions\r
-CSTANDARD = -std=gnu99\r
-\r
-\r
-# Place -D or -U options here for C sources\r
-CDEFS  = -DF_CPU=$(F_CPU)UL -DF_CLOCK=$(F_CLOCK)UL -DBOARD=BOARD_$(BOARD)\r
-CDEFS += -DUSE_NONSTANDARD_DESCRIPTOR_NAMES -DUSB_DEVICE_ONLY\r
-CDEFS += -DFIXED_CONTROL_ENDPOINT_SIZE=8 -DUSE_SINGLE_DEVICE_CONFIGURATION\r
-CDEFS += -DUSE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)"\r
-\r
-\r
-# Place -D or -U options here for ASM sources\r
-ADEFS = -DF_CPU=$(F_CPU)\r
-\r
-\r
-# Place -D or -U options here for C++ sources\r
-CPPDEFS = -DF_CPU=$(F_CPU)UL\r
-#CPPDEFS += -D__STDC_LIMIT_MACROS\r
-#CPPDEFS += -D__STDC_CONSTANT_MACROS\r
-\r
-\r
-\r
-#---------------- Compiler Options C ----------------\r
-#  -g*:          generate debugging information\r
-#  -O*:          optimization level\r
-#  -f...:        tuning, see GCC manual and avr-libc documentation\r
-#  -Wall...:     warning level\r
-#  -Wa,...:      tell GCC to pass this to the assembler.\r
-#    -adhlns...: create assembler listing\r
-CFLAGS = -g$(DEBUG)\r
-CFLAGS += $(CDEFS)\r
-CFLAGS += -O$(OPT)\r
-CFLAGS += -funsigned-char\r
-CFLAGS += -funsigned-bitfields\r
-CFLAGS += -ffunction-sections\r
-CFLAGS += -fpack-struct\r
-CFLAGS += -fshort-enums\r
-CFLAGS += -finline-limit=20\r
-CFLAGS += -Wall\r
-CFLAGS += -Wstrict-prototypes\r
-CFLAGS += -Wundef\r
-#CFLAGS += -fno-unit-at-a-time\r
-#CFLAGS += -Wunreachable-code\r
-#CFLAGS += -Wsign-compare\r
-CFLAGS += -Wa,-adhlns=$(<:%.c=$(OBJDIR)/%.lst)\r
-CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))\r
-CFLAGS += $(CSTANDARD)\r
-\r
-\r
-#---------------- Compiler Options C++ ----------------\r
-#  -g*:          generate debugging information\r
-#  -O*:          optimization level\r
-#  -f...:        tuning, see GCC manual and avr-libc documentation\r
-#  -Wall...:     warning level\r
-#  -Wa,...:      tell GCC to pass this to the assembler.\r
-#    -adhlns...: create assembler listing\r
-CPPFLAGS = -g$(DEBUG)\r
-CPPFLAGS += $(CPPDEFS)\r
-CPPFLAGS += -O$(OPT)\r
-CPPFLAGS += -funsigned-char\r
-CPPFLAGS += -funsigned-bitfields\r
-CPPFLAGS += -fpack-struct\r
-CPPFLAGS += -fshort-enums\r
-CPPFLAGS += -fno-exceptions\r
-CPPFLAGS += -Wall\r
-CFLAGS += -Wundef\r
-#CPPFLAGS += -mshort-calls\r
-#CPPFLAGS += -fno-unit-at-a-time\r
-#CPPFLAGS += -Wstrict-prototypes\r
-#CPPFLAGS += -Wunreachable-code\r
-#CPPFLAGS += -Wsign-compare\r
-CPPFLAGS += -Wa,-adhlns=$(<:%.cpp=$(OBJDIR)/%.lst)\r
-CPPFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))\r
-#CPPFLAGS += $(CSTANDARD)\r
-\r
-\r
-#---------------- Assembler Options ----------------\r
-#  -Wa,...:   tell GCC to pass this to the assembler.\r
-#  -adhlns:   create listing\r
-#  -gstabs:   have the assembler create line number information; note that\r
-#             for use in COFF files, additional information about filenames\r
-#             and function names needs to be present in the assembler source\r
-#             files -- see avr-libc docs [FIXME: not yet described there]\r
-#  -listing-cont-lines: Sets the maximum number of continuation lines of hex \r
-#       dump that will be displayed for a given single line of source input.\r
-ASFLAGS = $(ADEFS) -Wa,-adhlns=$(<:%.S=$(OBJDIR)/%.lst),-gstabs,--listing-cont-lines=100\r
-\r
-\r
-#---------------- Library Options ----------------\r
-# Minimalistic printf version\r
-PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min\r
-\r
-# Floating point printf version (requires MATH_LIB = -lm below)\r
-PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt\r
-\r
-# If this is left blank, then it will use the Standard printf version.\r
-PRINTF_LIB = \r
-#PRINTF_LIB = $(PRINTF_LIB_MIN)\r
-#PRINTF_LIB = $(PRINTF_LIB_FLOAT)\r
-\r
-\r
-# Minimalistic scanf version\r
-SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min\r
-\r
-# Floating point + %[ scanf version (requires MATH_LIB = -lm below)\r
-SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt\r
-\r
-# If this is left blank, then it will use the Standard scanf version.\r
-SCANF_LIB = \r
-#SCANF_LIB = $(SCANF_LIB_MIN)\r
-#SCANF_LIB = $(SCANF_LIB_FLOAT)\r
-\r
-\r
-MATH_LIB = -lm\r
-\r
-\r
-# List any extra directories to look for libraries here.\r
-#     Each directory must be seperated by a space.\r
-#     Use forward slashes for directory separators.\r
-#     For a directory that has spaces, enclose it in quotes.\r
-EXTRALIBDIRS = \r
-\r
-\r
-\r
-#---------------- External Memory Options ----------------\r
-\r
-# 64 KB of external RAM, starting after internal RAM (ATmega128!),\r
-# used for variables (.data/.bss) and heap (malloc()).\r
-#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff\r
-\r
-# 64 KB of external RAM, starting after internal RAM (ATmega128!),\r
-# only used for heap (malloc()).\r
-#EXTMEMOPTS = -Wl,--section-start,.data=0x801100,--defsym=__heap_end=0x80ffff\r
-\r
-EXTMEMOPTS =\r
-\r
-\r
-\r
-#---------------- Linker Options ----------------\r
-#  -Wl,...:     tell GCC to pass this to linker.\r
-#    -Map:      create map file\r
-#    --cref:    add cross reference to  map file\r
-LDFLAGS = -Wl,-Map=$(TARGET).map,--cref\r
-LDFLAGS += -Wl,--relax \r
-LDFLAGS += -Wl,--gc-sections\r
-LDFLAGS += $(EXTMEMOPTS)\r
-LDFLAGS += $(patsubst %,-L%,$(EXTRALIBDIRS))\r
-LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)\r
-#LDFLAGS += -T linker_script.x\r
-\r
-\r
-\r
-#---------------- Programming Options (avrdude) ----------------\r
-\r
-# Programming hardware: alf avr910 avrisp bascom bsd \r
-# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500\r
-#\r
-# Type: avrdude -c ?\r
-# to get a full listing.\r
-#\r
-AVRDUDE_PROGRAMMER = jtagmkII\r
-\r
-# com1 = serial port. Use lpt1 to connect to parallel port.\r
-AVRDUDE_PORT = usb\r
-\r
-AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex\r
-#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep\r
-\r
-\r
-# Uncomment the following if you want avrdude's erase cycle counter.\r
-# Note that this counter needs to be initialized first using -Yn,\r
-# see avrdude manual.\r
-#AVRDUDE_ERASE_COUNTER = -y\r
-\r
-# Uncomment the following if you do /not/ wish a verification to be\r
-# performed after programming the device.\r
-#AVRDUDE_NO_VERIFY = -V\r
-\r
-# Increase verbosity level.  Please use this when submitting bug\r
-# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude> \r
-# to submit bug reports.\r
-#AVRDUDE_VERBOSE = -v -v\r
-\r
-AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)\r
-AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY)\r
-AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE)\r
-AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER)\r
-\r
-\r
-\r
-#---------------- Debugging Options ----------------\r
-\r
-# For simulavr only - target MCU frequency.\r
-DEBUG_MFREQ = $(F_CPU)\r
-\r
-# Set the DEBUG_UI to either gdb or insight.\r
-# DEBUG_UI = gdb\r
-DEBUG_UI = insight\r
-\r
-# Set the debugging back-end to either avarice, simulavr.\r
-DEBUG_BACKEND = avarice\r
-#DEBUG_BACKEND = simulavr\r
-\r
-# GDB Init Filename.\r
-GDBINIT_FILE = __avr_gdbinit\r
-\r
-# When using avarice settings for the JTAG\r
-JTAG_DEV = /dev/com1\r
-\r
-# Debugging port used to communicate between GDB / avarice / simulavr.\r
-DEBUG_PORT = 4242\r
-\r
-# Debugging host used to communicate between GDB / avarice / simulavr, normally\r
-#     just set to localhost unless doing some sort of crazy debugging when \r
-#     avarice is running on a different computer.\r
-DEBUG_HOST = localhost\r
-\r
-\r
-\r
-#============================================================================\r
-\r
-\r
-# Define programs and commands.\r
-SHELL = sh\r
-CC = avr-gcc\r
-OBJCOPY = avr-objcopy\r
-OBJDUMP = avr-objdump\r
-SIZE = avr-size\r
-AR = avr-ar rcs\r
-NM = avr-nm\r
-AVRDUDE = avrdude\r
-REMOVE = rm -f\r
-REMOVEDIR = rm -rf\r
-COPY = cp\r
-WINSHELL = cmd\r
-\r
-# Define Messages\r
-# English\r
-MSG_ERRORS_NONE = Errors: none\r
-MSG_BEGIN = -------- begin --------\r
-MSG_END = --------  end  --------\r
-MSG_SIZE_BEFORE = Size before: \r
-MSG_SIZE_AFTER = Size after:\r
-MSG_COFF = Converting to AVR COFF:\r
-MSG_EXTENDED_COFF = Converting to AVR Extended COFF:\r
-MSG_FLASH = Creating load file for Flash:\r
-MSG_EEPROM = Creating load file for EEPROM:\r
-MSG_EXTENDED_LISTING = Creating Extended Listing:\r
-MSG_SYMBOL_TABLE = Creating Symbol Table:\r
-MSG_LINKING = Linking:\r
-MSG_COMPILING = Compiling C:\r
-MSG_COMPILING_CPP = Compiling C++:\r
-MSG_ASSEMBLING = Assembling:\r
-MSG_CLEANING = Cleaning project:\r
-MSG_CREATING_LIBRARY = Creating library:\r
-\r
-\r
-\r
-\r
-# Define all object files.\r
-OBJ = $(SRC:%.c=$(OBJDIR)/%.o) $(CPPSRC:%.cpp=$(OBJDIR)/%.o) $(ASRC:%.S=$(OBJDIR)/%.o) \r
-\r
-# Define all listing files.\r
-LST = $(SRC:%.c=$(OBJDIR)/%.lst) $(CPPSRC:%.cpp=$(OBJDIR)/%.lst) $(ASRC:%.S=$(OBJDIR)/%.lst) \r
-\r
-\r
-# Compiler flags to generate dependency files.\r
-GENDEPFLAGS = -MMD -MP -MF .dep/$(@F).d\r
-\r
-\r
-# Combine all necessary flags and optional flags.\r
-# Add target processor to flags.\r
-ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS)\r
-ALL_CPPFLAGS = -mmcu=$(MCU) -I. -x c++ $(CPPFLAGS) $(GENDEPFLAGS)\r
-ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)\r
-\r
-\r
-\r
-\r
-\r
-# Default target.\r
-all: begin gccversion sizebefore build checkhooks checklibmode checkboard sizeafter end\r
-\r
-# Change the build target to build a HEX file or a library.\r
-build: elf hex eep lss sym\r
-#build: lib\r
-\r
-\r
-elf: $(TARGET).elf\r
-hex: $(TARGET).hex\r
-eep: $(TARGET).eep\r
-lss: $(TARGET).lss\r
-sym: $(TARGET).sym\r
-LIBNAME=lib$(TARGET).a\r
-lib: $(LIBNAME)\r
-\r
-\r
-\r
-# Eye candy.\r
-# AVR Studio 3.x does not check make's exit code but relies on\r
-# the following magic strings to be generated by the compile job.\r
-begin:\r
-       @echo\r
-       @echo $(MSG_BEGIN)\r
-\r
-end:\r
-       @echo $(MSG_END)\r
-       @echo\r
-\r
-\r
-# Display size of file.\r
-HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex\r
-ELFSIZE = $(SIZE) $(MCU_FLAG) $(FORMAT_FLAG) $(TARGET).elf\r
-MCU_FLAG = $(shell $(SIZE) --help | grep -- --mcu > /dev/null && echo --mcu=$(MCU) )\r
-FORMAT_FLAG = $(shell $(SIZE) --help | grep -- --format=.*avr > /dev/null && echo --format=avr )\r
-\r
-sizebefore:\r
-       @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \\r
-       2>/dev/null; echo; fi\r
-\r
-sizeafter:\r
-       @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \\r
-       2>/dev/null; echo; fi\r
-\r
-checkhooks: build\r
-       @echo\r
-       @echo ------- Unhooked LUFA Events -------\r
-       @$(shell) (grep -s '^EVENT_.*LUFA/.*\\.o' $(TARGET).map | \\r
-                  cut -d' ' -f1 | cut -d'_' -f2- | grep ".*") || \\r
-                          echo "(None)"\r
-       @echo ------------------------------------\r
-\r
-checklibmode:\r
-       @echo\r
-       @echo ----------- Library Mode -----------\r
-       @$(shell) ($(CC) $(ALL_CFLAGS) -E -dM - < /dev/null \\r
-                 | grep 'USB_\(DEVICE\|HOST\)_ONLY' | cut -d' ' -f2 | grep ".*") \\r
-                 || echo "No specific mode (both device and host mode allowable)."\r
-       @echo ------------------------------------\r
-\r
-checkboard:\r
-       @echo\r
-       @echo ---------- Selected Board ----------\r
-       @echo Selected board model is $(BOARD).\r
-       @echo ------------------------------------\r
-       \r
-# Display compiler version information.\r
-gccversion : \r
-       @$(CC) --version\r
-\r
-\r
-\r
-# Program the device.  \r
-program: $(TARGET).hex $(TARGET).eep\r
-       $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)\r
-\r
-flip: $(TARGET).hex\r
-       batchisp -hardware usb -device $(MCU) -operation erase f\r
-       batchisp -hardware usb -device $(MCU) -operation loadbuffer $(TARGET).hex program\r
-       batchisp -hardware usb -device $(MCU) -operation start reset 0\r
-\r
-dfu: $(TARGET).hex\r
-       dfu-programmer $(MCU) erase\r
-       dfu-programmer $(MCU) flash --debug 1 $(TARGET).hex\r
-       dfu-programmer $(MCU) reset\r
-\r
-flip-ee: $(TARGET).hex $(TARGET).eep\r
-       copy $(TARGET).eep $(TARGET)eep.hex\r
-       batchisp -hardware usb -device $(MCU) -operation memory EEPROM erase\r
-       batchisp -hardware usb -device $(MCU) -operation memory EEPROM loadbuffer $(TARGET)eep.hex program\r
-       batchisp -hardware usb -device $(MCU) -operation start reset 0\r
-\r
-dfu-ee: $(TARGET).hex $(TARGET).eep\r
-       dfu-programmer $(MCU) flash-eeprom --debug 1 --suppress-bootloader-mem $(TARGET).eep\r
-       dfu-programmer $(MCU) reset\r
-\r
-\r
-# Generate avr-gdb config/init file which does the following:\r
-#     define the reset signal, load the target file, connect to target, and set \r
-#     a breakpoint at main().\r
-gdb-config: \r
-       @$(REMOVE) $(GDBINIT_FILE)\r
-       @echo define reset >> $(GDBINIT_FILE)\r
-       @echo SIGNAL SIGHUP >> $(GDBINIT_FILE)\r
-       @echo end >> $(GDBINIT_FILE)\r
-       @echo file $(TARGET).elf >> $(GDBINIT_FILE)\r
-       @echo target remote $(DEBUG_HOST):$(DEBUG_PORT)  >> $(GDBINIT_FILE)\r
-ifeq ($(DEBUG_BACKEND),simulavr)\r
-       @echo load  >> $(GDBINIT_FILE)\r
-endif\r
-       @echo break main >> $(GDBINIT_FILE)\r
-\r
-debug: gdb-config $(TARGET).elf\r
-ifeq ($(DEBUG_BACKEND), avarice)\r
-       @echo Starting AVaRICE - Press enter when "waiting to connect" message displays.\r
-       @$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \\r
-       $(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT)\r
-       @$(WINSHELL) /c pause\r
-\r
-else\r
-       @$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \\r
-       $(DEBUG_MFREQ) --port $(DEBUG_PORT)\r
-endif\r
-       @$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE)\r
-\r
-\r
-\r
-\r
-# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.\r
-COFFCONVERT = $(OBJCOPY) --debugging\r
-COFFCONVERT += --change-section-address .data-0x800000\r
-COFFCONVERT += --change-section-address .bss-0x800000\r
-COFFCONVERT += --change-section-address .noinit-0x800000\r
-COFFCONVERT += --change-section-address .eeprom-0x810000\r
-\r
-\r
-\r
-coff: $(TARGET).elf\r
-       @echo\r
-       @echo $(MSG_COFF) $(TARGET).cof\r
-       $(COFFCONVERT) -O coff-avr $< $(TARGET).cof\r
-\r
-\r
-extcoff: $(TARGET).elf\r
-       @echo\r
-       @echo $(MSG_EXTENDED_COFF) $(TARGET).cof\r
-       $(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof\r
-\r
-\r
-\r
-# Create final output files (.hex, .eep) from ELF output file.\r
-%.hex: %.elf\r
-       @echo\r
-       @echo $(MSG_FLASH) $@\r
-       $(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@\r
-\r
-%.eep: %.elf\r
-       @echo\r
-       @echo $(MSG_EEPROM) $@\r
-       -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \\r
-       --change-section-lma .eeprom=0 --no-change-warnings -O $(FORMAT) $< $@ || exit 0\r
-\r
-# Create extended listing file from ELF output file.\r
-%.lss: %.elf\r
-       @echo\r
-       @echo $(MSG_EXTENDED_LISTING) $@\r
-       $(OBJDUMP) -h -z -S $< > $@\r
-\r
-# Create a symbol table from ELF output file.\r
-%.sym: %.elf\r
-       @echo\r
-       @echo $(MSG_SYMBOL_TABLE) $@\r
-       $(NM) -n $< > $@\r
-\r
-\r
-\r
-# Create library from object files.\r
-.SECONDARY : $(TARGET).a\r
-.PRECIOUS : $(OBJ)\r
-%.a: $(OBJ)\r
-       @echo\r
-       @echo $(MSG_CREATING_LIBRARY) $@\r
-       $(AR) $@ $(OBJ)\r
-\r
-\r
-# Link: create ELF output file from object files.\r
-.SECONDARY : $(TARGET).elf\r
-.PRECIOUS : $(OBJ)\r
-%.elf: $(OBJ)\r
-       @echo\r
-       @echo $(MSG_LINKING) $@\r
-       $(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)\r
-\r
-\r
-# Compile: create object files from C source files.\r
-$(OBJDIR)/%.o : %.c\r
-       @echo\r
-       @echo $(MSG_COMPILING) $<\r
-       $(CC) -c $(ALL_CFLAGS) $< -o $@ \r
-\r
-\r
-# Compile: create object files from C++ source files.\r
-$(OBJDIR)/%.o : %.cpp\r
-       @echo\r
-       @echo $(MSG_COMPILING_CPP) $<\r
-       $(CC) -c $(ALL_CPPFLAGS) $< -o $@ \r
-\r
-\r
-# Compile: create assembler files from C source files.\r
-%.s : %.c\r
-       $(CC) -S $(ALL_CFLAGS) $< -o $@\r
-\r
-\r
-# Compile: create assembler files from C++ source files.\r
-%.s : %.cpp\r
-       $(CC) -S $(ALL_CPPFLAGS) $< -o $@\r
-\r
-\r
-# Assemble: create object files from assembler source files.\r
-$(OBJDIR)/%.o : %.S\r
-       @echo\r
-       @echo $(MSG_ASSEMBLING) $<\r
-       $(CC) -c $(ALL_ASFLAGS) $< -o $@\r
-\r
-\r
-# Create preprocessed source for use in sending a bug report.\r
-%.i : %.c\r
-       $(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ \r
-       \r
-\r
-# Target: clean project.\r
-clean: begin clean_list clean_binary end\r
-\r
-clean_binary:\r
-       $(REMOVE) $(TARGET).hex\r
-       \r
-clean_list:\r
-       @echo $(MSG_CLEANING)\r
-       $(REMOVE) $(TARGET).eep\r
-       $(REMOVE) $(TARGET)eep.hex\r
-       $(REMOVE) $(TARGET).cof\r
-       $(REMOVE) $(TARGET).elf\r
-       $(REMOVE) $(TARGET).map\r
-       $(REMOVE) $(TARGET).sym\r
-       $(REMOVE) $(TARGET).lss\r
-       $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.o)\r
-       $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.lst)\r
-       $(REMOVE) $(SRC:.c=.s)\r
-       $(REMOVE) $(SRC:.c=.d)\r
-       $(REMOVE) $(SRC:.c=.i)\r
-       $(REMOVEDIR) .dep\r
-\r
-\r
-doxygen:\r
-       @echo Generating Project Documentation...\r
-       @doxygen Doxygen.conf\r
-       @echo Documentation Generation Complete.\r
-\r
-clean_doxygen:\r
-       rm -rf Documentation\r
-\r
-# Create object files directory\r
-$(shell mkdir $(OBJDIR) 2>/dev/null)\r
-\r
-\r
-# Include the dependency files.\r
--include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)\r
-\r
-\r
-# Listing of phony targets.\r
-.PHONY : all checkhooks checklibmode checkboard   \\r
-begin finish end sizebefore sizeafter gccversion  \\r
-build elf hex eep lss sym coff extcoff clean      \\r
-clean_list clean_binary program debug gdb-config  \\r
-doxygen dfu flip flip-ee dfu-ee
\ No newline at end of file
diff --git a/Demos/Device/GenericHID/Descriptors.c b/Demos/Device/GenericHID/Descriptors.c
deleted file mode 100644 (file)
index 6988166..0000000
+++ /dev/null
@@ -1,240 +0,0 @@
-/*\r
-             LUFA Library\r
-     Copyright (C) Dean Camera, 2009.\r
-              \r
-  dean [at] fourwalledcubicle [dot] com\r
-      www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
-  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
-  Permission to use, copy, modify, and distribute this software\r
-  and its documentation for any purpose and without fee is hereby\r
-  granted, provided that the above copyright notice appear in all\r
-  copies and that both that the copyright notice and this\r
-  permission notice and warranty disclaimer appear in supporting\r
-  documentation, and that the name of the author not be used in\r
-  advertising or publicity pertaining to distribution of the\r
-  software without specific, written prior permission.\r
-\r
-  The author disclaim all warranties with regard to this\r
-  software, including all implied warranties of merchantability\r
-  and fitness.  In no event shall the author be liable for any\r
-  special, indirect or consequential damages or any damages\r
-  whatsoever resulting from loss of use, data or profits, whether\r
-  in an action of contract, negligence or other tortious action,\r
-  arising out of or in connection with the use or performance of\r
-  this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- *  USB Device Descriptors, for library use when in USB device mode. Descriptors are special \r
- *  computer-readable structures which the host requests upon device enumeration, to determine\r
- *  the device's capabilities and functions.  \r
- */\r
-\r
-#include "Descriptors.h"\r
-\r
-/** HID class report descriptor. This is a special descriptor constructed with values from the\r
- *  USBIF HID class specification to describe the reports and capabilities of the HID device. This\r
- *  descriptor is parsed by the host and its contents used to determine what data (and in what encoding)\r
- *  the device will send, and what it may be sent back from the host. Refer to the HID specification for\r
- *  more details on HID report descriptors.\r
- */\r
-USB_Descriptor_HIDReport_Datatype_t PROGMEM GenericReport[] =\r
-{\r
-       0x06, 0x9c, 0xff,     /* Usage Page (Vendor Defined)                     */\r
-       0x09, 0x01,           /* Usage (Vendor Defined)                          */\r
-       0xa1, 0x01,           /* Collection (Vendor Defined)                     */\r
-       0x09, 0x02,           /*   Usage (Vendor Defined)                        */\r
-       0x75, 0x08,           /*   Report Size (8)                               */\r
-       0x95, GENERIC_REPORT_SIZE, /*   Report Count (GENERIC_REPORT_SIZE)       */\r
-       0x15, 0x00,           /*   Logical Minimum (0)                           */\r
-       0x25, 0xff,           /*   Logical Maximum (255)                         */\r
-       0x81, 0x02,           /*   Input (Data, Variable, Absolute)              */\r
-       0x09, 0x03,           /*   Usage (Vendor Defined)                        */\r
-       0x75, 0x08,           /*   Report Size (8)                               */\r
-       0x95, GENERIC_REPORT_SIZE, /*   Report Count (GENERIC_REPORT_SIZE)       */\r
-       0x15, 0x00,           /*   Logical Minimum (0)                           */\r
-       0x25, 0xff,           /*   Logical Maximum (255)                         */\r
-       0x91, 0x02,           /*   Output (Data, Variable, Absolute)             */\r
-       0xc0                  /* End Collection                                  */\r
-};\r
-\r
-/** Device descriptor structure. This descriptor, located in FLASH memory, describes the overall\r
- *  device characteristics, including the supported USB version, control endpoint size and the\r
- *  number of device configurations. The descriptor is read out by the USB host when the enumeration\r
- *  process begins.\r
- */\r
-USB_Descriptor_Device_t PROGMEM DeviceDescriptor =\r
-{\r
-       .Header                 = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device},\r
-               \r
-       .USBSpecification       = VERSION_BCD(01.10),\r
-       .Class                  = 0x00,\r
-       .SubClass               = 0x00,\r
-       .Protocol               = 0x00,\r
-                               \r
-       .Endpoint0Size          = FIXED_CONTROL_ENDPOINT_SIZE,\r
-               \r
-       .VendorID               = 0x03EB,\r
-       .ProductID              = 0x204F,\r
-       .ReleaseNumber          = 0x0000,\r
-               \r
-       .ManufacturerStrIndex   = 0x01,\r
-       .ProductStrIndex        = 0x02,\r
-       .SerialNumStrIndex      = NO_DESCRIPTOR,\r
-               \r
-       .NumberOfConfigurations = 1\r
-};\r
-\r
-/** Configuration descriptor structure. This descriptor, located in FLASH memory, describes the usage\r
- *  of the device in one of its supported configurations, including information about any device interfaces\r
- *  and endpoints. The descriptor is read out by the USB host during the enumeration process when selecting\r
- *  a configuration so that the host may correctly communicate with the USB device.\r
- */\r
-USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =\r
-{\r
-       .Config = \r
-               {\r
-                       .Header                 = {.Size = sizeof(USB_Descriptor_Configuration_Header_t), .Type = DTYPE_Configuration},\r
-\r
-                       .TotalConfigurationSize = sizeof(USB_Descriptor_Configuration_t),\r
-                       .TotalInterfaces        = 1,\r
-                               \r
-                       .ConfigurationNumber    = 1,\r
-                       .ConfigurationStrIndex  = NO_DESCRIPTOR,\r
-                               \r
-                       .ConfigAttributes       = (USB_CONFIG_ATTR_BUSPOWERED | USB_CONFIG_ATTR_SELFPOWERED),\r
-                       \r
-                       .MaxPowerConsumption    = USB_CONFIG_POWER_MA(100)\r
-               },\r
-               \r
-       .Interface = \r
-               {\r
-                       .Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},\r
-\r
-                       .InterfaceNumber        = 0x00,\r
-                       .AlternateSetting       = 0x00,\r
-                       \r
-                       .TotalEndpoints         = 1,\r
-                               \r
-                       .Class                  = 0x03,\r
-                       .SubClass               = 0x00,\r
-                       .Protocol               = 0x00,\r
-                               \r
-                       .InterfaceStrIndex      = NO_DESCRIPTOR\r
-               },\r
-\r
-       .GenericHID = \r
-               {\r
-                       .Header                 = {.Size = sizeof(USB_Descriptor_HID_t), .Type = DTYPE_HID},\r
-                                                                        \r
-                       .HIDSpec                = VERSION_BCD(01.11),\r
-                       .CountryCode            = 0x00,\r
-                       .TotalReportDescriptors = 1,\r
-                       .HIDReportType          = DTYPE_Report,\r
-                       .HIDReportLength        = sizeof(GenericReport)\r
-               },\r
-\r
-       .GenericINEndpoint = \r
-               {\r
-                       .Header                 = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},\r
-                                                                                \r
-                       .EndpointAddress        = (ENDPOINT_DESCRIPTOR_DIR_IN | GENERIC_IN_EPNUM),\r
-                       .Attributes             = EP_TYPE_INTERRUPT,\r
-                       .EndpointSize           = GENERIC_EPSIZE,\r
-                       .PollingIntervalMS      = 0x02\r
-               },\r
-};\r
-\r
-/** Language descriptor structure. This descriptor, located in FLASH memory, is returned when the host requests\r
- *  the string descriptor with index 0 (the first index). It is actually an array of 16-bit integers, which indicate\r
- *  via the language ID table available at USB.org what languages the device supports for its string descriptors.\r
- */\r
-USB_Descriptor_String_t PROGMEM LanguageString =\r
-{\r
-       .Header                 = {.Size = USB_STRING_LEN(1), .Type = DTYPE_String},\r
-               \r
-       .UnicodeString          = {LANGUAGE_ID_ENG}\r
-};\r
-\r
-/** Manufacturer descriptor string. This is a Unicode string containing the manufacturer's details in human readable\r
- *  form, and is read out upon request by the host when the appropriate string ID is requested, listed in the Device\r
- *  Descriptor.\r
- */\r
-USB_Descriptor_String_t PROGMEM ManufacturerString =\r
-{\r
-       .Header                 = {.Size = USB_STRING_LEN(11), .Type = DTYPE_String},\r
-               \r
-       .UnicodeString          = L"Dean Camera"\r
-};\r
-\r
-/** Product descriptor string. This is a Unicode string containing the product's details in human readable form,\r
- *  and is read out upon request by the host when the appropriate string ID is requested, listed in the Device\r
- *  Descriptor.\r
- */\r
-USB_Descriptor_String_t PROGMEM ProductString =\r
-{\r
-       .Header                 = {.Size = USB_STRING_LEN(21), .Type = DTYPE_String},\r
-               \r
-       .UnicodeString          = L"LUFA Generic HID Demo"\r
-};\r
-\r
-/** This function is called by the library when in device mode, and must be overridden (see library "USB Descriptors"\r
- *  documentation) by the application code so that the address and size of a requested descriptor can be given\r
- *  to the USB library. When the device receives a Get Descriptor request on the control endpoint, this function\r
- *  is called so that the descriptor details can be passed back and the appropriate descriptor sent back to the\r
- *  USB host.\r
- */\r
-uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
-{\r
-       const uint8_t  DescriptorType   = (wValue >> 8);\r
-       const uint8_t  DescriptorNumber = (wValue & 0xFF);\r
-\r
-       void*    Address = NULL;\r
-       uint16_t Size    = NO_DESCRIPTOR;\r
-\r
-       switch (DescriptorType)\r
-       {\r
-               case DTYPE_Device:\r
-                       Address = (void*)&DeviceDescriptor;\r
-                       Size    = sizeof(USB_Descriptor_Device_t);\r
-                       break;\r
-               case DTYPE_Configuration: \r
-                       Address = (void*)&ConfigurationDescriptor;\r
-                       Size    = sizeof(USB_Descriptor_Configuration_t);\r
-                       break;\r
-               case DTYPE_String: \r
-                       switch (DescriptorNumber)\r
-                       {\r
-                               case 0x00: \r
-                                       Address = (void*)&LanguageString;\r
-                                       Size    = pgm_read_byte(&LanguageString.Header.Size);\r
-                                       break;\r
-                               case 0x01: \r
-                                       Address = (void*)&ManufacturerString;\r
-                                       Size    = pgm_read_byte(&ManufacturerString.Header.Size);\r
-                                       break;\r
-                               case 0x02: \r
-                                       Address = (void*)&ProductString;\r
-                                       Size    = pgm_read_byte(&ProductString.Header.Size);\r
-                                       break;\r
-                       }\r
-                       \r
-                       break;\r
-               case DTYPE_HID: \r
-                       Address = (void*)&ConfigurationDescriptor.GenericHID;\r
-                       Size    = sizeof(USB_Descriptor_HID_t);\r
-                       break;\r
-               case DTYPE_Report: \r
-                       Address = (void*)&GenericReport;\r
-                       Size    = sizeof(GenericReport);\r
-                       break;\r
-       }\r
-       \r
-       *DescriptorAddress = Address;\r
-       return Size;\r
-}\r
diff --git a/Demos/Device/GenericHID/Descriptors.h b/Demos/Device/GenericHID/Descriptors.h
deleted file mode 100644 (file)
index 01db53e..0000000
+++ /dev/null
@@ -1,72 +0,0 @@
-/*\r
-             LUFA Library\r
-     Copyright (C) Dean Camera, 2009.\r
-              \r
-  dean [at] fourwalledcubicle [dot] com\r
-      www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
-  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
-  Permission to use, copy, modify, and distribute this software\r
-  and its documentation for any purpose and without fee is hereby\r
-  granted, provided that the above copyright notice appear in all\r
-  copies and that both that the copyright notice and this\r
-  permission notice and warranty disclaimer appear in supporting\r
-  documentation, and that the name of the author not be used in\r
-  advertising or publicity pertaining to distribution of the\r
-  software without specific, written prior permission.\r
-\r
-  The author disclaim all warranties with regard to this\r
-  software, including all implied warranties of merchantability\r
-  and fitness.  In no event shall the author be liable for any\r
-  special, indirect or consequential damages or any damages\r
-  whatsoever resulting from loss of use, data or profits, whether\r
-  in an action of contract, negligence or other tortious action,\r
-  arising out of or in connection with the use or performance of\r
-  this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- *  Header file for Descriptors.c.\r
- */\r
\r
-#ifndef _DESCRIPTORS_H_\r
-#define _DESCRIPTORS_H_\r
-\r
-       /* Includes: */\r
-               #include <avr/pgmspace.h>\r
-\r
-               #include <LUFA/Drivers/USB/USB.h>\r
-               #include <LUFA/Drivers/USB/Class/Device/HID.h>\r
-\r
-       /** Type Defines: */\r
-               /** Type define for the device configuration descriptor structure. This must be defined in the\r
-                *  application code, as the configuration descriptor contains several sub-descriptors which\r
-                *  vary between devices, and which describe the device's usage to the host.\r
-                */\r
-               typedef struct\r
-               {\r
-                       USB_Descriptor_Configuration_Header_t Config;\r
-                       USB_Descriptor_Interface_t            Interface;\r
-                       USB_Descriptor_HID_t                  GenericHID;\r
-               USB_Descriptor_Endpoint_t             GenericINEndpoint;\r
-               } USB_Descriptor_Configuration_t;\r
-\r
-       /* Macros: */\r
-               /** Endpoint number of the Generic HID reporting IN endpoint. */\r
-               #define GENERIC_IN_EPNUM          1\r
-\r
-               /** Size in bytes of the Generic HID reporting endpoint. */\r
-               #define GENERIC_EPSIZE            8\r
-               \r
-               /** Size in bytes of the Generic HID reports (including report ID byte). */\r
-               #define GENERIC_REPORT_SIZE       8\r
-               \r
-       /* Function Prototypes: */\r
-               uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
-                                                                                       ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);\r
-\r
-#endif\r
diff --git a/Demos/Device/GenericHID/Doxygen.conf b/Demos/Device/GenericHID/Doxygen.conf
deleted file mode 100644 (file)
index dea5d4f..0000000
+++ /dev/null
@@ -1,1485 +0,0 @@
-# Doxyfile 1.5.7.1\r
-\r
-# This file describes the settings to be used by the documentation system\r
-# doxygen (www.doxygen.org) for a project\r
-#\r
-# All text after a hash (#) is considered a comment and will be ignored\r
-# The format is:\r
-#       TAG = value [value, ...]\r
-# For lists items can also be appended using:\r
-#       TAG += value [value, ...]\r
-# Values that contain spaces should be placed between quotes (" ")\r
-\r
-#---------------------------------------------------------------------------\r
-# Project related configuration options\r
-#---------------------------------------------------------------------------\r
-\r
-# This tag specifies the encoding used for all characters in the config file \r
-# that follow. The default is UTF-8 which is also the encoding used for all \r
-# text before the first occurrence of this tag. Doxygen uses libiconv (or the \r
-# iconv built into libc) for the transcoding. See \r
-# http://www.gnu.org/software/libiconv for the list of possible encodings.\r
-\r
-DOXYFILE_ENCODING      = UTF-8\r
-\r
-# The PROJECT_NAME tag is a single word (or a sequence of words surrounded \r
-# by quotes) that should identify the project.\r
-\r
-PROJECT_NAME           = "LUFA Library - Generic HID Device Demo"\r
-\r
-# The PROJECT_NUMBER tag can be used to enter a project or revision number. \r
-# This could be handy for archiving the generated documentation or \r
-# if some version control system is used.\r
-\r
-PROJECT_NUMBER         = 0.0.0\r
-\r
-# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) \r
-# base path where the generated documentation will be put. \r
-# If a relative path is entered, it will be relative to the location \r
-# where doxygen was started. If left blank the current directory will be used.\r
-\r
-OUTPUT_DIRECTORY       = ./Documentation/\r
-\r
-# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create \r
-# 4096 sub-directories (in 2 levels) under the output directory of each output \r
-# format and will distribute the generated files over these directories. \r
-# Enabling this option can be useful when feeding doxygen a huge amount of \r
-# source files, where putting all generated files in the same directory would \r
-# otherwise cause performance problems for the file system.\r
-\r
-CREATE_SUBDIRS         = YES\r
-\r
-# The OUTPUT_LANGUAGE tag is used to specify the language in which all \r
-# documentation generated by doxygen is written. Doxygen will use this \r
-# information to generate all constant output in the proper language. \r
-# The default language is English, other supported languages are: \r
-# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, \r
-# Croatian, Czech, Danish, Dutch, Farsi, Finnish, French, German, Greek, \r
-# Hungarian, Italian, Japanese, Japanese-en (Japanese with English messages), \r
-# Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, Polish, \r
-# Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, Slovene, \r
-# Spanish, Swedish, and Ukrainian.\r
-\r
-OUTPUT_LANGUAGE        = English\r
-\r
-# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will \r
-# include brief member descriptions after the members that are listed in \r
-# the file and class documentation (similar to JavaDoc). \r
-# Set to NO to disable this.\r
-\r
-BRIEF_MEMBER_DESC      = YES\r
-\r
-# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend \r
-# the brief description of a member or function before the detailed description. \r
-# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the \r
-# brief descriptions will be completely suppressed.\r
-\r
-REPEAT_BRIEF           = YES\r
-\r
-# This tag implements a quasi-intelligent brief description abbreviator \r
-# that is used to form the text in various listings. Each string \r
-# in this list, if found as the leading text of the brief description, will be \r
-# stripped from the text and the result after processing the whole list, is \r
-# used as the annotated text. Otherwise, the brief description is used as-is. \r
-# If left blank, the following values are used ("$name" is automatically \r
-# replaced with the name of the entity): "The $name class" "The $name widget" \r
-# "The $name file" "is" "provides" "specifies" "contains" \r
-# "represents" "a" "an" "the"\r
-\r
-ABBREVIATE_BRIEF       = "The $name class" \\r
-                         "The $name widget" \\r
-                         "The $name file" \\r
-                         is \\r
-                         provides \\r
-                         specifies \\r
-                         contains \\r
-                         represents \\r
-                         a \\r
-                         an \\r
-                         the\r
-\r
-# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then \r
-# Doxygen will generate a detailed section even if there is only a brief \r
-# description.\r
-\r
-ALWAYS_DETAILED_SEC    = NO\r
-\r
-# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all \r
-# inherited members of a class in the documentation of that class as if those \r
-# members were ordinary class members. Constructors, destructors and assignment \r
-# operators of the base classes will not be shown.\r
-\r
-INLINE_INHERITED_MEMB  = NO\r
-\r
-# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full \r
-# path before files name in the file list and in the header files. If set \r
-# to NO the shortest path that makes the file name unique will be used.\r
-\r
-FULL_PATH_NAMES        = YES\r
-\r
-# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag \r
-# can be used to strip a user-defined part of the path. Stripping is \r
-# only done if one of the specified strings matches the left-hand part of \r
-# the path. The tag can be used to show relative paths in the file list. \r
-# If left blank the directory from which doxygen is run is used as the \r
-# path to strip.\r
-\r
-STRIP_FROM_PATH        = \r
-\r
-# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of \r
-# the path mentioned in the documentation of a class, which tells \r
-# the reader which header file to include in order to use a class. \r
-# If left blank only the name of the header file containing the class \r
-# definition is used. Otherwise one should specify the include paths that \r
-# are normally passed to the compiler using the -I flag.\r
-\r
-STRIP_FROM_INC_PATH    = \r
-\r
-# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter \r
-# (but less readable) file names. This can be useful is your file systems \r
-# doesn't support long names like on DOS, Mac, or CD-ROM.\r
-\r
-SHORT_NAMES            = YES\r
-\r
-# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen \r
-# will interpret the first line (until the first dot) of a JavaDoc-style \r
-# comment as the brief description. If set to NO, the JavaDoc \r
-# comments will behave just like regular Qt-style comments \r
-# (thus requiring an explicit @brief command for a brief description.)\r
-\r
-JAVADOC_AUTOBRIEF      = NO\r
-\r
-# If the QT_AUTOBRIEF tag is set to YES then Doxygen will \r
-# interpret the first line (until the first dot) of a Qt-style \r
-# comment as the brief description. If set to NO, the comments \r
-# will behave just like regular Qt-style comments (thus requiring \r
-# an explicit \brief command for a brief description.)\r
-\r
-QT_AUTOBRIEF           = NO\r
-\r
-# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen \r
-# treat a multi-line C++ special comment block (i.e. a block of //! or /// \r
-# comments) as a brief description. This used to be the default behaviour. \r
-# The new default is to treat a multi-line C++ comment block as a detailed \r
-# description. Set this tag to YES if you prefer the old behaviour instead.\r
-\r
-MULTILINE_CPP_IS_BRIEF = NO\r
-\r
-# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented \r
-# member inherits the documentation from any documented member that it \r
-# re-implements.\r
-\r
-INHERIT_DOCS           = YES\r
-\r
-# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce \r
-# a new page for each member. If set to NO, the documentation of a member will \r
-# be part of the file/class/namespace that contains it.\r
-\r
-SEPARATE_MEMBER_PAGES  = NO\r
-\r
-# The TAB_SIZE tag can be used to set the number of spaces in a tab. \r
-# Doxygen uses this value to replace tabs by spaces in code fragments.\r
-\r
-TAB_SIZE               = 4\r
-\r
-# This tag can be used to specify a number of aliases that acts \r
-# as commands in the documentation. An alias has the form "name=value". \r
-# For example adding "sideeffect=\par Side Effects:\n" will allow you to \r
-# put the command \sideeffect (or @sideeffect) in the documentation, which \r
-# will result in a user-defined paragraph with heading "Side Effects:". \r
-# You can put \n's in the value part of an alias to insert newlines.\r
-\r
-ALIASES                = \r
-\r
-# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C \r
-# sources only. Doxygen will then generate output that is more tailored for C. \r
-# For instance, some of the names that are used will be different. The list \r
-# of all members will be omitted, etc.\r
-\r
-OPTIMIZE_OUTPUT_FOR_C  = YES\r
-\r
-# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java \r
-# sources only. Doxygen will then generate output that is more tailored for \r
-# Java. For instance, namespaces will be presented as packages, qualified \r
-# scopes will look different, etc.\r
-\r
-OPTIMIZE_OUTPUT_JAVA   = NO\r
-\r
-# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran \r
-# sources only. Doxygen will then generate output that is more tailored for \r
-# Fortran.\r
-\r
-OPTIMIZE_FOR_FORTRAN   = NO\r
-\r
-# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL \r
-# sources. Doxygen will then generate output that is tailored for \r
-# VHDL.\r
-\r
-OPTIMIZE_OUTPUT_VHDL   = NO\r
-\r
-# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want \r
-# to include (a tag file for) the STL sources as input, then you should \r
-# set this tag to YES in order to let doxygen match functions declarations and \r
-# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. \r
-# func(std::string) {}). This also make the inheritance and collaboration \r
-# diagrams that involve STL classes more complete and accurate.\r
-\r
-BUILTIN_STL_SUPPORT    = NO\r
-\r
-# If you use Microsoft's C++/CLI language, you should set this option to YES to\r
-# enable parsing support.\r
-\r
-CPP_CLI_SUPPORT        = NO\r
-\r
-# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. \r
-# Doxygen will parse them like normal C++ but will assume all classes use public \r
-# instead of private inheritance when no explicit protection keyword is present.\r
-\r
-SIP_SUPPORT            = NO\r
-\r
-# For Microsoft's IDL there are propget and propput attributes to indicate getter \r
-# and setter methods for a property. Setting this option to YES (the default) \r
-# will make doxygen to replace the get and set methods by a property in the \r
-# documentation. This will only work if the methods are indeed getting or \r
-# setting a simple type. If this is not the case, or you want to show the \r
-# methods anyway, you should set this option to NO.\r
-\r
-IDL_PROPERTY_SUPPORT   = YES\r
-\r
-# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC \r
-# tag is set to YES, then doxygen will reuse the documentation of the first \r
-# member in the group (if any) for the other members of the group. By default \r
-# all members of a group must be documented explicitly.\r
-\r
-DISTRIBUTE_GROUP_DOC   = NO\r
-\r
-# Set the SUBGROUPING tag to YES (the default) to allow class member groups of \r
-# the same type (for instance a group of public functions) to be put as a \r
-# subgroup of that type (e.g. under the Public Functions section). Set it to \r
-# NO to prevent subgrouping. Alternatively, this can be done per class using \r
-# the \nosubgrouping command.\r
-\r
-SUBGROUPING            = YES\r
-\r
-# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum \r
-# is documented as struct, union, or enum with the name of the typedef. So \r
-# typedef struct TypeS {} TypeT, will appear in the documentation as a struct \r
-# with name TypeT. When disabled the typedef will appear as a member of a file, \r
-# namespace, or class. And the struct will be named TypeS. This can typically \r
-# be useful for C code in case the coding convention dictates that all compound \r
-# types are typedef'ed and only the typedef is referenced, never the tag name.\r
-\r
-TYPEDEF_HIDES_STRUCT   = NO\r
-\r
-# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to \r
-# determine which symbols to keep in memory and which to flush to disk.\r
-# When the cache is full, less often used symbols will be written to disk.\r
-# For small to medium size projects (<1000 input files) the default value is \r
-# probably good enough. For larger projects a too small cache size can cause \r
-# doxygen to be busy swapping symbols to and from disk most of the time \r
-# causing a significant performance penality. \r
-# If the system has enough physical memory increasing the cache will improve the \r
-# performance by keeping more symbols in memory. Note that the value works on \r
-# a logarithmic scale so increasing the size by one will rougly double the \r
-# memory usage. The cache size is given by this formula: \r
-# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, \r
-# corresponding to a cache size of 2^16 = 65536 symbols\r
-\r
-SYMBOL_CACHE_SIZE      = 0\r
-\r
-#---------------------------------------------------------------------------\r
-# Build related configuration options\r
-#---------------------------------------------------------------------------\r
-\r
-# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in \r
-# documentation are documented, even if no documentation was available. \r
-# Private class members and static file members will be hidden unless \r
-# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES\r
-\r
-EXTRACT_ALL            = YES\r
-\r
-# If the EXTRACT_PRIVATE tag is set to YES all private members of a class \r
-# will be included in the documentation.\r
-\r
-EXTRACT_PRIVATE        = YES\r
-\r
-# If the EXTRACT_STATIC tag is set to YES all static members of a file \r
-# will be included in the documentation.\r
-\r
-EXTRACT_STATIC         = YES\r
-\r
-# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) \r
-# defined locally in source files will be included in the documentation. \r
-# If set to NO only classes defined in header files are included.\r
-\r
-EXTRACT_LOCAL_CLASSES  = YES\r
-\r
-# This flag is only useful for Objective-C code. When set to YES local \r
-# methods, which are defined in the implementation section but not in \r
-# the interface are included in the documentation. \r
-# If set to NO (the default) only methods in the interface are included.\r
-\r
-EXTRACT_LOCAL_METHODS  = NO\r
-\r
-# If this flag is set to YES, the members of anonymous namespaces will be \r
-# extracted and appear in the documentation as a namespace called \r
-# 'anonymous_namespace{file}', where file will be replaced with the base \r
-# name of the file that contains the anonymous namespace. By default \r
-# anonymous namespace are hidden.\r
-\r
-EXTRACT_ANON_NSPACES   = NO\r
-\r
-# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all \r
-# undocumented members of documented classes, files or namespaces. \r
-# If set to NO (the default) these members will be included in the \r
-# various overviews, but no documentation section is generated. \r
-# This option has no effect if EXTRACT_ALL is enabled.\r
-\r
-HIDE_UNDOC_MEMBERS     = NO\r
-\r
-# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all \r
-# undocumented classes that are normally visible in the class hierarchy. \r
-# If set to NO (the default) these classes will be included in the various \r
-# overviews. This option has no effect if EXTRACT_ALL is enabled.\r
-\r
-HIDE_UNDOC_CLASSES     = NO\r
-\r
-# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all \r
-# friend (class|struct|union) declarations. \r
-# If set to NO (the default) these declarations will be included in the \r
-# documentation.\r
-\r
-HIDE_FRIEND_COMPOUNDS  = NO\r
-\r
-# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any \r
-# documentation blocks found inside the body of a function. \r
-# If set to NO (the default) these blocks will be appended to the \r
-# function's detailed documentation block.\r
-\r
-HIDE_IN_BODY_DOCS      = NO\r
-\r
-# The INTERNAL_DOCS tag determines if documentation \r
-# that is typed after a \internal command is included. If the tag is set \r
-# to NO (the default) then the documentation will be excluded. \r
-# Set it to YES to include the internal documentation.\r
-\r
-INTERNAL_DOCS          = NO\r
-\r
-# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate \r
-# file names in lower-case letters. If set to YES upper-case letters are also \r
-# allowed. This is useful if you have classes or files whose names only differ \r
-# in case and if your file system supports case sensitive file names. Windows \r
-# and Mac users are advised to set this option to NO.\r
-\r
-CASE_SENSE_NAMES       = NO\r
-\r
-# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen \r
-# will show members with their full class and namespace scopes in the \r
-# documentation. If set to YES the scope will be hidden.\r
-\r
-HIDE_SCOPE_NAMES       = NO\r
-\r
-# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen \r
-# will put a list of the files that are included by a file in the documentation \r
-# of that file.\r
-\r
-SHOW_INCLUDE_FILES     = YES\r
-\r
-# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] \r
-# is inserted in the documentation for inline members.\r
-\r
-INLINE_INFO            = YES\r
-\r
-# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen \r
-# will sort the (detailed) documentation of file and class members \r
-# alphabetically by member name. If set to NO the members will appear in \r
-# declaration order.\r
-\r
-SORT_MEMBER_DOCS       = YES\r
-\r
-# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the \r
-# brief documentation of file, namespace and class members alphabetically \r
-# by member name. If set to NO (the default) the members will appear in \r
-# declaration order.\r
-\r
-SORT_BRIEF_DOCS        = NO\r
-\r
-# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the \r
-# hierarchy of group names into alphabetical order. If set to NO (the default) \r
-# the group names will appear in their defined order.\r
-\r
-SORT_GROUP_NAMES       = NO\r
-\r
-# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be \r
-# sorted by fully-qualified names, including namespaces. If set to \r
-# NO (the default), the class list will be sorted only by class name, \r
-# not including the namespace part. \r
-# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.\r
-# Note: This option applies only to the class list, not to the \r
-# alphabetical list.\r
-\r
-SORT_BY_SCOPE_NAME     = NO\r
-\r
-# The GENERATE_TODOLIST tag can be used to enable (YES) or \r
-# disable (NO) the todo list. This list is created by putting \todo \r
-# commands in the documentation.\r
-\r
-GENERATE_TODOLIST      = NO\r
-\r
-# The GENERATE_TESTLIST tag can be used to enable (YES) or \r
-# disable (NO) the test list. This list is created by putting \test \r
-# commands in the documentation.\r
-\r
-GENERATE_TESTLIST      = NO\r
-\r
-# The GENERATE_BUGLIST tag can be used to enable (YES) or \r
-# disable (NO) the bug list. This list is created by putting \bug \r
-# commands in the documentation.\r
-\r
-GENERATE_BUGLIST       = NO\r
-\r
-# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or \r
-# disable (NO) the deprecated list. This list is created by putting \r
-# \deprecated commands in the documentation.\r
-\r
-GENERATE_DEPRECATEDLIST= YES\r
-\r
-# The ENABLED_SECTIONS tag can be used to enable conditional \r
-# documentation sections, marked by \if sectionname ... \endif.\r
-\r
-ENABLED_SECTIONS       = \r
-\r
-# The MAX_INITIALIZER_LINES tag determines the maximum number of lines \r
-# the initial value of a variable or define consists of for it to appear in \r
-# the documentation. If the initializer consists of more lines than specified \r
-# here it will be hidden. Use a value of 0 to hide initializers completely. \r
-# The appearance of the initializer of individual variables and defines in the \r
-# documentation can be controlled using \showinitializer or \hideinitializer \r
-# command in the documentation regardless of this setting.\r
-\r
-MAX_INITIALIZER_LINES  = 30\r
-\r
-# Set the SHOW_USED_FILES tag to NO to disable the list of files generated \r
-# at the bottom of the documentation of classes and structs. If set to YES the \r
-# list will mention the files that were used to generate the documentation.\r
-\r
-SHOW_USED_FILES        = YES\r
-\r
-# If the sources in your project are distributed over multiple directories \r
-# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy \r
-# in the documentation. The default is NO.\r
-\r
-SHOW_DIRECTORIES       = YES\r
-\r
-# Set the SHOW_FILES tag to NO to disable the generation of the Files page.\r
-# This will remove the Files entry from the Quick Index and from the \r
-# Folder Tree View (if specified). The default is YES.\r
-\r
-SHOW_FILES             = YES\r
-\r
-# Set the SHOW_NAMESPACES tag to NO to disable the generation of the \r
-# Namespaces page.  This will remove the Namespaces entry from the Quick Index\r
-# and from the Folder Tree View (if specified). The default is YES.\r
-\r
-SHOW_NAMESPACES        = YES\r
-\r
-# The FILE_VERSION_FILTER tag can be used to specify a program or script that \r
-# doxygen should invoke to get the current version for each file (typically from \r
-# the version control system). Doxygen will invoke the program by executing (via \r
-# popen()) the command <command> <input-file>, where <command> is the value of \r
-# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file \r
-# provided by doxygen. Whatever the program writes to standard output \r
-# is used as the file version. See the manual for examples.\r
-\r
-FILE_VERSION_FILTER    = \r
-\r
-# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by \r
-# doxygen. The layout file controls the global structure of the generated output files \r
-# in an output format independent way. The create the layout file that represents \r
-# doxygen's defaults, run doxygen with the -l option. You can optionally specify a \r
-# file name after the option, if omitted DoxygenLayout.xml will be used as the name \r
-# of the layout file.\r
-\r
-LAYOUT_FILE            = \r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to warning and progress messages\r
-#---------------------------------------------------------------------------\r
-\r
-# The QUIET tag can be used to turn on/off the messages that are generated \r
-# by doxygen. Possible values are YES and NO. If left blank NO is used.\r
-\r
-QUIET                  = YES\r
-\r
-# The WARNINGS tag can be used to turn on/off the warning messages that are \r
-# generated by doxygen. Possible values are YES and NO. If left blank \r
-# NO is used.\r
-\r
-WARNINGS               = YES\r
-\r
-# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings \r
-# for undocumented members. If EXTRACT_ALL is set to YES then this flag will \r
-# automatically be disabled.\r
-\r
-WARN_IF_UNDOCUMENTED   = YES\r
-\r
-# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for \r
-# potential errors in the documentation, such as not documenting some \r
-# parameters in a documented function, or documenting parameters that \r
-# don't exist or using markup commands wrongly.\r
-\r
-WARN_IF_DOC_ERROR      = YES\r
-\r
-# This WARN_NO_PARAMDOC option can be abled to get warnings for \r
-# functions that are documented, but have no documentation for their parameters \r
-# or return value. If set to NO (the default) doxygen will only warn about \r
-# wrong or incomplete parameter documentation, but not about the absence of \r
-# documentation.\r
-\r
-WARN_NO_PARAMDOC       = YES\r
-\r
-# The WARN_FORMAT tag determines the format of the warning messages that \r
-# doxygen can produce. The string should contain the $file, $line, and $text \r
-# tags, which will be replaced by the file and line number from which the \r
-# warning originated and the warning text. Optionally the format may contain \r
-# $version, which will be replaced by the version of the file (if it could \r
-# be obtained via FILE_VERSION_FILTER)\r
-\r
-WARN_FORMAT            = "$file:$line: $text"\r
-\r
-# The WARN_LOGFILE tag can be used to specify a file to which warning \r
-# and error messages should be written. If left blank the output is written \r
-# to stderr.\r
-\r
-WARN_LOGFILE           = \r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the input files\r
-#---------------------------------------------------------------------------\r
-\r
-# The INPUT tag can be used to specify the files and/or directories that contain \r
-# documented source files. You may enter file names like "myfile.cpp" or \r
-# directories like "/usr/src/myproject". Separate the files or directories \r
-# with spaces.\r
-\r
-INPUT                  = ./\r
-\r
-# This tag can be used to specify the character encoding of the source files \r
-# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is \r
-# also the default input encoding. Doxygen uses libiconv (or the iconv built \r
-# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for \r
-# the list of possible encodings.\r
-\r
-INPUT_ENCODING         = UTF-8\r
-\r
-# If the value of the INPUT tag contains directories, you can use the \r
-# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \r
-# and *.h) to filter out the source-files in the directories. If left \r
-# blank the following patterns are tested: \r
-# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx \r
-# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90\r
-\r
-FILE_PATTERNS          = *.h \\r
-                         *.c \\r
-                                                *.txt\r
-\r
-# The RECURSIVE tag can be used to turn specify whether or not subdirectories \r
-# should be searched for input files as well. Possible values are YES and NO. \r
-# If left blank NO is used.\r
-\r
-RECURSIVE              = YES\r
-\r
-# The EXCLUDE tag can be used to specify files and/or directories that should \r
-# excluded from the INPUT source files. This way you can easily exclude a \r
-# subdirectory from a directory tree whose root is specified with the INPUT tag.\r
-\r
-EXCLUDE                = \r
-\r
-# The EXCLUDE_SYMLINKS tag can be used select whether or not files or \r
-# directories that are symbolic links (a Unix filesystem feature) are excluded \r
-# from the input.\r
-\r
-EXCLUDE_SYMLINKS       = NO\r
-\r
-# If the value of the INPUT tag contains directories, you can use the \r
-# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude \r
-# certain files from those directories. Note that the wildcards are matched \r
-# against the file with absolute path, so to exclude all test directories \r
-# for example use the pattern */test/*\r
-\r
-EXCLUDE_PATTERNS       = */LowLevel/USBMode.h\r
-\r
-# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names \r
-# (namespaces, classes, functions, etc.) that should be excluded from the \r
-# output. The symbol name can be a fully qualified name, a word, or if the \r
-# wildcard * is used, a substring. Examples: ANamespace, AClass, \r
-# AClass::ANamespace, ANamespace::*Test\r
-\r
-EXCLUDE_SYMBOLS        = __*\r
-\r
-# The EXAMPLE_PATH tag can be used to specify one or more files or \r
-# directories that contain example code fragments that are included (see \r
-# the \include command).\r
-\r
-EXAMPLE_PATH           = \r
-\r
-# If the value of the EXAMPLE_PATH tag contains directories, you can use the \r
-# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \r
-# and *.h) to filter out the source-files in the directories. If left \r
-# blank all files are included.\r
-\r
-EXAMPLE_PATTERNS       = *\r
-\r
-# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be \r
-# searched for input files to be used with the \include or \dontinclude \r
-# commands irrespective of the value of the RECURSIVE tag. \r
-# Possible values are YES and NO. If left blank NO is used.\r
-\r
-EXAMPLE_RECURSIVE      = NO\r
-\r
-# The IMAGE_PATH tag can be used to specify one or more files or \r
-# directories that contain image that are included in the documentation (see \r
-# the \image command).\r
-\r
-IMAGE_PATH             = \r
-\r
-# The INPUT_FILTER tag can be used to specify a program that doxygen should \r
-# invoke to filter for each input file. Doxygen will invoke the filter program \r
-# by executing (via popen()) the command <filter> <input-file>, where <filter> \r
-# is the value of the INPUT_FILTER tag, and <input-file> is the name of an \r
-# input file. Doxygen will then use the output that the filter program writes \r
-# to standard output.  If FILTER_PATTERNS is specified, this tag will be \r
-# ignored.\r
-\r
-INPUT_FILTER           = \r
-\r
-# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern \r
-# basis.  Doxygen will compare the file name with each pattern and apply the \r
-# filter if there is a match.  The filters are a list of the form: \r
-# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further \r
-# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER \r
-# is applied to all files.\r
-\r
-FILTER_PATTERNS        = \r
-\r
-# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using \r
-# INPUT_FILTER) will be used to filter the input files when producing source \r
-# files to browse (i.e. when SOURCE_BROWSER is set to YES).\r
-\r
-FILTER_SOURCE_FILES    = NO\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to source browsing\r
-#---------------------------------------------------------------------------\r
-\r
-# If the SOURCE_BROWSER tag is set to YES then a list of source files will \r
-# be generated. Documented entities will be cross-referenced with these sources. \r
-# Note: To get rid of all source code in the generated output, make sure also \r
-# VERBATIM_HEADERS is set to NO.\r
-\r
-SOURCE_BROWSER         = NO\r
-\r
-# Setting the INLINE_SOURCES tag to YES will include the body \r
-# of functions and classes directly in the documentation.\r
-\r
-INLINE_SOURCES         = NO\r
-\r
-# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct \r
-# doxygen to hide any special comment blocks from generated source code \r
-# fragments. Normal C and C++ comments will always remain visible.\r
-\r
-STRIP_CODE_COMMENTS    = YES\r
-\r
-# If the REFERENCED_BY_RELATION tag is set to YES \r
-# then for each documented function all documented \r
-# functions referencing it will be listed.\r
-\r
-REFERENCED_BY_RELATION = NO\r
-\r
-# If the REFERENCES_RELATION tag is set to YES \r
-# then for each documented function all documented entities \r
-# called/used by that function will be listed.\r
-\r
-REFERENCES_RELATION    = NO\r
-\r
-# If the REFERENCES_LINK_SOURCE tag is set to YES (the default)\r
-# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from\r
-# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will\r
-# link to the source code.  Otherwise they will link to the documentstion.\r
-\r
-REFERENCES_LINK_SOURCE = NO\r
-\r
-# If the USE_HTAGS tag is set to YES then the references to source code \r
-# will point to the HTML generated by the htags(1) tool instead of doxygen \r
-# built-in source browser. The htags tool is part of GNU's global source \r
-# tagging system (see http://www.gnu.org/software/global/global.html). You \r
-# will need version 4.8.6 or higher.\r
-\r
-USE_HTAGS              = NO\r
-\r
-# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen \r
-# will generate a verbatim copy of the header file for each class for \r
-# which an include is specified. Set to NO to disable this.\r
-\r
-VERBATIM_HEADERS       = NO\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the alphabetical class index\r
-#---------------------------------------------------------------------------\r
-\r
-# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index \r
-# of all compounds will be generated. Enable this if the project \r
-# contains a lot of classes, structs, unions or interfaces.\r
-\r
-ALPHABETICAL_INDEX     = YES\r
-\r
-# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then \r
-# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns \r
-# in which this list will be split (can be a number in the range [1..20])\r
-\r
-COLS_IN_ALPHA_INDEX    = 5\r
-\r
-# In case all classes in a project start with a common prefix, all \r
-# classes will be put under the same header in the alphabetical index. \r
-# The IGNORE_PREFIX tag can be used to specify one or more prefixes that \r
-# should be ignored while generating the index headers.\r
-\r
-IGNORE_PREFIX          = \r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the HTML output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_HTML tag is set to YES (the default) Doxygen will \r
-# generate HTML output.\r
-\r
-GENERATE_HTML          = YES\r
-\r
-# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. \r
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
-# put in front of it. If left blank `html' will be used as the default path.\r
-\r
-HTML_OUTPUT            = html\r
-\r
-# The HTML_FILE_EXTENSION tag can be used to specify the file extension for \r
-# each generated HTML page (for example: .htm,.php,.asp). If it is left blank \r
-# doxygen will generate files with .html extension.\r
-\r
-HTML_FILE_EXTENSION    = .html\r
-\r
-# The HTML_HEADER tag can be used to specify a personal HTML header for \r
-# each generated HTML page. If it is left blank doxygen will generate a \r
-# standard header.\r
-\r
-HTML_HEADER            = \r
-\r
-# The HTML_FOOTER tag can be used to specify a personal HTML footer for \r
-# each generated HTML page. If it is left blank doxygen will generate a \r
-# standard footer.\r
-\r
-HTML_FOOTER            = \r
-\r
-# The HTML_STYLESHEET tag can be used to specify a user-defined cascading \r
-# style sheet that is used by each HTML page. It can be used to \r
-# fine-tune the look of the HTML output. If the tag is left blank doxygen \r
-# will generate a default style sheet. Note that doxygen will try to copy \r
-# the style sheet file to the HTML output directory, so don't put your own \r
-# stylesheet in the HTML output directory as well, or it will be erased!\r
-\r
-HTML_STYLESHEET        = \r
-\r
-# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, \r
-# files or namespaces will be aligned in HTML using tables. If set to \r
-# NO a bullet list will be used.\r
-\r
-HTML_ALIGN_MEMBERS     = YES\r
-\r
-# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML \r
-# documentation will contain sections that can be hidden and shown after the \r
-# page has loaded. For this to work a browser that supports \r
-# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox \r
-# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari).\r
-\r
-HTML_DYNAMIC_SECTIONS  = YES\r
-\r
-# If the GENERATE_DOCSET tag is set to YES, additional index files \r
-# will be generated that can be used as input for Apple's Xcode 3 \r
-# integrated development environment, introduced with OSX 10.5 (Leopard). \r
-# To create a documentation set, doxygen will generate a Makefile in the \r
-# HTML output directory. Running make will produce the docset in that \r
-# directory and running "make install" will install the docset in \r
-# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find \r
-# it at startup. \r
-# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information.\r
-\r
-GENERATE_DOCSET        = NO\r
-\r
-# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the \r
-# feed. A documentation feed provides an umbrella under which multiple \r
-# documentation sets from a single provider (such as a company or product suite) \r
-# can be grouped.\r
-\r
-DOCSET_FEEDNAME        = "Doxygen generated docs"\r
-\r
-# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that \r
-# should uniquely identify the documentation set bundle. This should be a \r
-# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen \r
-# will append .docset to the name.\r
-\r
-DOCSET_BUNDLE_ID       = org.doxygen.Project\r
-\r
-# If the GENERATE_HTMLHELP tag is set to YES, additional index files \r
-# will be generated that can be used as input for tools like the \r
-# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) \r
-# of the generated HTML documentation.\r
-\r
-GENERATE_HTMLHELP      = NO\r
-\r
-# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can \r
-# be used to specify the file name of the resulting .chm file. You \r
-# can add a path in front of the file if the result should not be \r
-# written to the html output directory.\r
-\r
-CHM_FILE               = \r
-\r
-# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can \r
-# be used to specify the location (absolute path including file name) of \r
-# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run \r
-# the HTML help compiler on the generated index.hhp.\r
-\r
-HHC_LOCATION           = \r
-\r
-# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag \r
-# controls if a separate .chi index file is generated (YES) or that \r
-# it should be included in the master .chm file (NO).\r
-\r
-GENERATE_CHI           = NO\r
-\r
-# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING\r
-# is used to encode HtmlHelp index (hhk), content (hhc) and project file\r
-# content.\r
-\r
-CHM_INDEX_ENCODING     = \r
-\r
-# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag \r
-# controls whether a binary table of contents is generated (YES) or a \r
-# normal table of contents (NO) in the .chm file.\r
-\r
-BINARY_TOC             = NO\r
-\r
-# The TOC_EXPAND flag can be set to YES to add extra items for group members \r
-# to the contents of the HTML help documentation and to the tree view.\r
-\r
-TOC_EXPAND             = YES\r
-\r
-# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER \r
-# are set, an additional index file will be generated that can be used as input for \r
-# Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated \r
-# HTML documentation.\r
-\r
-GENERATE_QHP           = NO\r
-\r
-# If the QHG_LOCATION tag is specified, the QCH_FILE tag can \r
-# be used to specify the file name of the resulting .qch file. \r
-# The path specified is relative to the HTML output folder.\r
-\r
-QCH_FILE               = \r
-\r
-# The QHP_NAMESPACE tag specifies the namespace to use when generating \r
-# Qt Help Project output. For more information please see \r
-# <a href="http://doc.trolltech.com/qthelpproject.html#namespace">Qt Help Project / Namespace</a>.\r
-\r
-QHP_NAMESPACE          = org.doxygen.Project\r
-\r
-# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating \r
-# Qt Help Project output. For more information please see \r
-# <a href="http://doc.trolltech.com/qthelpproject.html#virtual-folders">Qt Help Project / Virtual Folders</a>.\r
-\r
-QHP_VIRTUAL_FOLDER     = doc\r
-\r
-# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can \r
-# be used to specify the location of Qt's qhelpgenerator. \r
-# If non-empty doxygen will try to run qhelpgenerator on the generated \r
-# .qhp file .\r
-\r
-QHG_LOCATION           = \r
-\r
-# The DISABLE_INDEX tag can be used to turn on/off the condensed index at \r
-# top of each HTML page. The value NO (the default) enables the index and \r
-# the value YES disables it.\r
-\r
-DISABLE_INDEX          = NO\r
-\r
-# This tag can be used to set the number of enum values (range [1..20]) \r
-# that doxygen will group on one line in the generated HTML documentation.\r
-\r
-ENUM_VALUES_PER_LINE   = 1\r
-\r
-# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index\r
-# structure should be generated to display hierarchical information.\r
-# If the tag value is set to FRAME, a side panel will be generated\r
-# containing a tree-like index structure (just like the one that \r
-# is generated for HTML Help). For this to work a browser that supports \r
-# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, \r
-# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are \r
-# probably better off using the HTML help feature. Other possible values \r
-# for this tag are: HIERARCHIES, which will generate the Groups, Directories,\r
-# and Class Hierarchy pages using a tree view instead of an ordered list;\r
-# ALL, which combines the behavior of FRAME and HIERARCHIES; and NONE, which\r
-# disables this behavior completely. For backwards compatibility with previous\r
-# releases of Doxygen, the values YES and NO are equivalent to FRAME and NONE\r
-# respectively.\r
-\r
-GENERATE_TREEVIEW      = YES\r
-\r
-# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be \r
-# used to set the initial width (in pixels) of the frame in which the tree \r
-# is shown.\r
-\r
-TREEVIEW_WIDTH         = 250\r
-\r
-# Use this tag to change the font size of Latex formulas included \r
-# as images in the HTML documentation. The default is 10. Note that \r
-# when you change the font size after a successful doxygen run you need \r
-# to manually remove any form_*.png images from the HTML output directory \r
-# to force them to be regenerated.\r
-\r
-FORMULA_FONTSIZE       = 10\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the LaTeX output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will \r
-# generate Latex output.\r
-\r
-GENERATE_LATEX         = NO\r
-\r
-# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. \r
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
-# put in front of it. If left blank `latex' will be used as the default path.\r
-\r
-LATEX_OUTPUT           = latex\r
-\r
-# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be \r
-# invoked. If left blank `latex' will be used as the default command name.\r
-\r
-LATEX_CMD_NAME         = latex\r
-\r
-# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to \r
-# generate index for LaTeX. If left blank `makeindex' will be used as the \r
-# default command name.\r
-\r
-MAKEINDEX_CMD_NAME     = makeindex\r
-\r
-# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact \r
-# LaTeX documents. This may be useful for small projects and may help to \r
-# save some trees in general.\r
-\r
-COMPACT_LATEX          = NO\r
-\r
-# The PAPER_TYPE tag can be used to set the paper type that is used \r
-# by the printer. Possible values are: a4, a4wide, letter, legal and \r
-# executive. If left blank a4wide will be used.\r
-\r
-PAPER_TYPE             = a4wide\r
-\r
-# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX \r
-# packages that should be included in the LaTeX output.\r
-\r
-EXTRA_PACKAGES         = \r
-\r
-# The LATEX_HEADER tag can be used to specify a personal LaTeX header for \r
-# the generated latex document. The header should contain everything until \r
-# the first chapter. If it is left blank doxygen will generate a \r
-# standard header. Notice: only use this tag if you know what you are doing!\r
-\r
-LATEX_HEADER           = \r
-\r
-# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated \r
-# is prepared for conversion to pdf (using ps2pdf). The pdf file will \r
-# contain links (just like the HTML output) instead of page references \r
-# This makes the output suitable for online browsing using a pdf viewer.\r
-\r
-PDF_HYPERLINKS         = YES\r
-\r
-# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of \r
-# plain latex in the generated Makefile. Set this option to YES to get a \r
-# higher quality PDF documentation.\r
-\r
-USE_PDFLATEX           = YES\r
-\r
-# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. \r
-# command to the generated LaTeX files. This will instruct LaTeX to keep \r
-# running if errors occur, instead of asking the user for help. \r
-# This option is also used when generating formulas in HTML.\r
-\r
-LATEX_BATCHMODE        = NO\r
-\r
-# If LATEX_HIDE_INDICES is set to YES then doxygen will not \r
-# include the index chapters (such as File Index, Compound Index, etc.) \r
-# in the output.\r
-\r
-LATEX_HIDE_INDICES     = NO\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the RTF output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output \r
-# The RTF output is optimized for Word 97 and may not look very pretty with \r
-# other RTF readers or editors.\r
-\r
-GENERATE_RTF           = NO\r
-\r
-# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. \r
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
-# put in front of it. If left blank `rtf' will be used as the default path.\r
-\r
-RTF_OUTPUT             = rtf\r
-\r
-# If the COMPACT_RTF tag is set to YES Doxygen generates more compact \r
-# RTF documents. This may be useful for small projects and may help to \r
-# save some trees in general.\r
-\r
-COMPACT_RTF            = NO\r
-\r
-# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated \r
-# will contain hyperlink fields. The RTF file will \r
-# contain links (just like the HTML output) instead of page references. \r
-# This makes the output suitable for online browsing using WORD or other \r
-# programs which support those fields. \r
-# Note: wordpad (write) and others do not support links.\r
-\r
-RTF_HYPERLINKS         = NO\r
-\r
-# Load stylesheet definitions from file. Syntax is similar to doxygen's \r
-# config file, i.e. a series of assignments. You only have to provide \r
-# replacements, missing definitions are set to their default value.\r
-\r
-RTF_STYLESHEET_FILE    = \r
-\r
-# Set optional variables used in the generation of an rtf document. \r
-# Syntax is similar to doxygen's config file.\r
-\r
-RTF_EXTENSIONS_FILE    = \r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the man page output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_MAN tag is set to YES (the default) Doxygen will \r
-# generate man pages\r
-\r
-GENERATE_MAN           = NO\r
-\r
-# The MAN_OUTPUT tag is used to specify where the man pages will be put. \r
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
-# put in front of it. If left blank `man' will be used as the default path.\r
-\r
-MAN_OUTPUT             = man\r
-\r
-# The MAN_EXTENSION tag determines the extension that is added to \r
-# the generated man pages (default is the subroutine's section .3)\r
-\r
-MAN_EXTENSION          = .3\r
-\r
-# If the MAN_LINKS tag is set to YES and Doxygen generates man output, \r
-# then it will generate one additional man file for each entity \r
-# documented in the real man page(s). These additional files \r
-# only source the real man page, but without them the man command \r
-# would be unable to find the correct page. The default is NO.\r
-\r
-MAN_LINKS              = NO\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the XML output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_XML tag is set to YES Doxygen will \r
-# generate an XML file that captures the structure of \r
-# the code including all documentation.\r
-\r
-GENERATE_XML           = NO\r
-\r
-# The XML_OUTPUT tag is used to specify where the XML pages will be put. \r
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
-# put in front of it. If left blank `xml' will be used as the default path.\r
-\r
-XML_OUTPUT             = xml\r
-\r
-# The XML_SCHEMA tag can be used to specify an XML schema, \r
-# which can be used by a validating XML parser to check the \r
-# syntax of the XML files.\r
-\r
-XML_SCHEMA             = \r
-\r
-# The XML_DTD tag can be used to specify an XML DTD, \r
-# which can be used by a validating XML parser to check the \r
-# syntax of the XML files.\r
-\r
-XML_DTD                = \r
-\r
-# If the XML_PROGRAMLISTING tag is set to YES Doxygen will \r
-# dump the program listings (including syntax highlighting \r
-# and cross-referencing information) to the XML output. Note that \r
-# enabling this will significantly increase the size of the XML output.\r
-\r
-XML_PROGRAMLISTING     = YES\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options for the AutoGen Definitions output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will \r
-# generate an AutoGen Definitions (see autogen.sf.net) file \r
-# that captures the structure of the code including all \r
-# documentation. Note that this feature is still experimental \r
-# and incomplete at the moment.\r
-\r
-GENERATE_AUTOGEN_DEF   = NO\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the Perl module output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_PERLMOD tag is set to YES Doxygen will \r
-# generate a Perl module file that captures the structure of \r
-# the code including all documentation. Note that this \r
-# feature is still experimental and incomplete at the \r
-# moment.\r
-\r
-GENERATE_PERLMOD       = NO\r
-\r
-# If the PERLMOD_LATEX tag is set to YES Doxygen will generate \r
-# the necessary Makefile rules, Perl scripts and LaTeX code to be able \r
-# to generate PDF and DVI output from the Perl module output.\r
-\r
-PERLMOD_LATEX          = NO\r
-\r
-# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be \r
-# nicely formatted so it can be parsed by a human reader.  This is useful \r
-# if you want to understand what is going on.  On the other hand, if this \r
-# tag is set to NO the size of the Perl module output will be much smaller \r
-# and Perl will parse it just the same.\r
-\r
-PERLMOD_PRETTY         = YES\r
-\r
-# The names of the make variables in the generated doxyrules.make file \r
-# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. \r
-# This is useful so different doxyrules.make files included by the same \r
-# Makefile don't overwrite each other's variables.\r
-\r
-PERLMOD_MAKEVAR_PREFIX = \r
-\r
-#---------------------------------------------------------------------------\r
-# Configuration options related to the preprocessor   \r
-#---------------------------------------------------------------------------\r
-\r
-# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will \r
-# evaluate all C-preprocessor directives found in the sources and include \r
-# files.\r
-\r
-ENABLE_PREPROCESSING   = YES\r
-\r
-# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro \r
-# names in the source code. If set to NO (the default) only conditional \r
-# compilation will be performed. Macro expansion can be done in a controlled \r
-# way by setting EXPAND_ONLY_PREDEF to YES.\r
-\r
-MACRO_EXPANSION        = YES\r
-\r
-# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES \r
-# then the macro expansion is limited to the macros specified with the \r
-# PREDEFINED and EXPAND_AS_DEFINED tags.\r
-\r
-EXPAND_ONLY_PREDEF     = YES\r
-\r
-# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files \r
-# in the INCLUDE_PATH (see below) will be search if a #include is found.\r
-\r
-SEARCH_INCLUDES        = YES\r
-\r
-# The INCLUDE_PATH tag can be used to specify one or more directories that \r
-# contain include files that are not input files but should be processed by \r
-# the preprocessor.\r
-\r
-INCLUDE_PATH           = \r
-\r
-# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard \r
-# patterns (like *.h and *.hpp) to filter out the header-files in the \r
-# directories. If left blank, the patterns specified with FILE_PATTERNS will \r
-# be used.\r
-\r
-INCLUDE_FILE_PATTERNS  = \r
-\r
-# The PREDEFINED tag can be used to specify one or more macro names that \r
-# are defined before the preprocessor is started (similar to the -D option of \r
-# gcc). The argument of the tag is a list of macros of the form: name \r
-# or name=definition (no spaces). If the definition and the = are \r
-# omitted =1 is assumed. To prevent a macro definition from being \r
-# undefined via #undef or recursively expanded use the := operator \r
-# instead of the = operator.\r
-\r
-PREDEFINED             = __DOXYGEN__\r
-\r
-# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then \r
-# this tag can be used to specify a list of macro names that should be expanded. \r
-# The macro definition that is found in the sources will be used. \r
-# Use the PREDEFINED tag if you want to use a different macro definition.\r
-\r
-EXPAND_AS_DEFINED      = BUTTLOADTAG\r
-\r
-# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then \r
-# doxygen's preprocessor will remove all function-like macros that are alone \r
-# on a line, have an all uppercase name, and do not end with a semicolon. Such \r
-# function macros are typically used for boiler-plate code, and will confuse \r
-# the parser if not removed.\r
-\r
-SKIP_FUNCTION_MACROS   = YES\r
-\r
-#---------------------------------------------------------------------------\r
-# Configuration::additions related to external references   \r
-#---------------------------------------------------------------------------\r
-\r
-# The TAGFILES option can be used to specify one or more tagfiles. \r
-# Optionally an initial location of the external documentation \r
-# can be added for each tagfile. The format of a tag file without \r
-# this location is as follows: \r
-#   TAGFILES = file1 file2 ... \r
-# Adding location for the tag files is done as follows: \r
-#   TAGFILES = file1=loc1 "file2 = loc2" ... \r
-# where "loc1" and "loc2" can be relative or absolute paths or \r
-# URLs. If a location is present for each tag, the installdox tool \r
-# does not have to be run to correct the links.\r
-# Note that each tag file must have a unique name\r
-# (where the name does NOT include the path)\r
-# If a tag file is not located in the directory in which doxygen \r
-# is run, you must also specify the path to the tagfile here.\r
-\r
-TAGFILES               = \r
-\r
-# When a file name is specified after GENERATE_TAGFILE, doxygen will create \r
-# a tag file that is based on the input files it reads.\r
-\r
-GENERATE_TAGFILE       = \r
-\r
-# If the ALLEXTERNALS tag is set to YES all external classes will be listed \r
-# in the class index. If set to NO only the inherited external classes \r
-# will be listed.\r
-\r
-ALLEXTERNALS           = NO\r
-\r
-# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed \r
-# in the modules index. If set to NO, only the current project's groups will \r
-# be listed.\r
-\r
-EXTERNAL_GROUPS        = YES\r
-\r
-# The PERL_PATH should be the absolute path and name of the perl script \r
-# interpreter (i.e. the result of `which perl').\r
-\r
-PERL_PATH              = /usr/bin/perl\r
-\r
-#---------------------------------------------------------------------------\r
-# Configuration options related to the dot tool   \r
-#---------------------------------------------------------------------------\r
-\r
-# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will \r
-# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base \r
-# or super classes. Setting the tag to NO turns the diagrams off. Note that \r
-# this option is superseded by the HAVE_DOT option below. This is only a \r
-# fallback. It is recommended to install and use dot, since it yields more \r
-# powerful graphs.\r
-\r
-CLASS_DIAGRAMS         = NO\r
-\r
-# You can define message sequence charts within doxygen comments using the \msc \r
-# command. Doxygen will then run the mscgen tool (see \r
-# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the \r
-# documentation. The MSCGEN_PATH tag allows you to specify the directory where \r
-# the mscgen tool resides. If left empty the tool is assumed to be found in the \r
-# default search path.\r
-\r
-MSCGEN_PATH            = \r
-\r
-# If set to YES, the inheritance and collaboration graphs will hide \r
-# inheritance and usage relations if the target is undocumented \r
-# or is not a class.\r
-\r
-HIDE_UNDOC_RELATIONS   = YES\r
-\r
-# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is \r
-# available from the path. This tool is part of Graphviz, a graph visualization \r
-# toolkit from AT&T and Lucent Bell Labs. The other options in this section \r
-# have no effect if this option is set to NO (the default)\r
-\r
-HAVE_DOT               = NO\r
-\r
-# By default doxygen will write a font called FreeSans.ttf to the output \r
-# directory and reference it in all dot files that doxygen generates. This \r
-# font does not include all possible unicode characters however, so when you need \r
-# these (or just want a differently looking font) you can specify the font name \r
-# using DOT_FONTNAME. You need need to make sure dot is able to find the font, \r
-# which can be done by putting it in a standard location or by setting the \r
-# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory \r
-# containing the font.\r
-\r
-DOT_FONTNAME           = FreeSans\r
-\r
-# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. \r
-# The default size is 10pt.\r
-\r
-DOT_FONTSIZE           = 10\r
-\r
-# By default doxygen will tell dot to use the output directory to look for the \r
-# FreeSans.ttf font (which doxygen will put there itself). If you specify a \r
-# different font using DOT_FONTNAME you can set the path where dot \r
-# can find it using this tag.\r
-\r
-DOT_FONTPATH           = \r
-\r
-# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen \r
-# will generate a graph for each documented class showing the direct and \r
-# indirect inheritance relations. Setting this tag to YES will force the \r
-# the CLASS_DIAGRAMS tag to NO.\r
-\r
-CLASS_GRAPH            = NO\r
-\r
-# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen \r
-# will generate a graph for each documented class showing the direct and \r
-# indirect implementation dependencies (inheritance, containment, and \r
-# class references variables) of the class with other documented classes.\r
-\r
-COLLABORATION_GRAPH    = NO\r
-\r
-# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen \r
-# will generate a graph for groups, showing the direct groups dependencies\r
-\r
-GROUP_GRAPHS           = NO\r
-\r
-# If the UML_LOOK tag is set to YES doxygen will generate inheritance and \r
-# collaboration diagrams in a style similar to the OMG's Unified Modeling \r
-# Language.\r
-\r
-UML_LOOK               = NO\r
-\r
-# If set to YES, the inheritance and collaboration graphs will show the \r
-# relations between templates and their instances.\r
-\r
-TEMPLATE_RELATIONS     = NO\r
-\r
-# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT \r
-# tags are set to YES then doxygen will generate a graph for each documented \r
-# file showing the direct and indirect include dependencies of the file with \r
-# other documented files.\r
-\r
-INCLUDE_GRAPH          = NO\r
-\r
-# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and \r
-# HAVE_DOT tags are set to YES then doxygen will generate a graph for each \r
-# documented header file showing the documented files that directly or \r
-# indirectly include this file.\r
-\r
-INCLUDED_BY_GRAPH      = NO\r
-\r
-# If the CALL_GRAPH and HAVE_DOT options are set to YES then \r
-# doxygen will generate a call dependency graph for every global function \r
-# or class method. Note that enabling this option will significantly increase \r
-# the time of a run. So in most cases it will be better to enable call graphs \r
-# for selected functions only using the \callgraph command.\r
-\r
-CALL_GRAPH             = NO\r
-\r
-# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then \r
-# doxygen will generate a caller dependency graph for every global function \r
-# or class method. Note that enabling this option will significantly increase \r
-# the time of a run. So in most cases it will be better to enable caller \r
-# graphs for selected functions only using the \callergraph command.\r
-\r
-CALLER_GRAPH           = NO\r
-\r
-# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen \r
-# will graphical hierarchy of all classes instead of a textual one.\r
-\r
-GRAPHICAL_HIERARCHY    = NO\r
-\r
-# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES \r
-# then doxygen will show the dependencies a directory has on other directories \r
-# in a graphical way. The dependency relations are determined by the #include\r
-# relations between the files in the directories.\r
-\r
-DIRECTORY_GRAPH        = NO\r
-\r
-# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images \r
-# generated by dot. Possible values are png, jpg, or gif\r
-# If left blank png will be used.\r
-\r
-DOT_IMAGE_FORMAT       = png\r
-\r
-# The tag DOT_PATH can be used to specify the path where the dot tool can be \r
-# found. If left blank, it is assumed the dot tool can be found in the path.\r
-\r
-DOT_PATH               = "C:/Program Files/Graphviz2.18/bin"\r
-\r
-# The DOTFILE_DIRS tag can be used to specify one or more directories that \r
-# contain dot files that are included in the documentation (see the \r
-# \dotfile command).\r
-\r
-DOTFILE_DIRS           = \r
-\r
-# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of \r
-# nodes that will be shown in the graph. If the number of nodes in a graph \r
-# becomes larger than this value, doxygen will truncate the graph, which is \r
-# visualized by representing a node as a red box. Note that doxygen if the \r
-# number of direct children of the root node in a graph is already larger than \r
-# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note \r
-# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.\r
-\r
-DOT_GRAPH_MAX_NODES    = 15\r
-\r
-# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the \r
-# graphs generated by dot. A depth value of 3 means that only nodes reachable \r
-# from the root by following a path via at most 3 edges will be shown. Nodes \r
-# that lay further from the root node will be omitted. Note that setting this \r
-# option to 1 or 2 may greatly reduce the computation time needed for large \r
-# code bases. Also note that the size of a graph can be further restricted by \r
-# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.\r
-\r
-MAX_DOT_GRAPH_DEPTH    = 2\r
-\r
-# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent \r
-# background. This is disabled by default, because dot on Windows does not \r
-# seem to support this out of the box. Warning: Depending on the platform used, \r
-# enabling this option may lead to badly anti-aliased labels on the edges of \r
-# a graph (i.e. they become hard to read).\r
-\r
-DOT_TRANSPARENT        = YES\r
-\r
-# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output \r
-# files in one run (i.e. multiple -o and -T options on the command line). This \r
-# makes dot run faster, but since only newer versions of dot (>1.8.10) \r
-# support this, this feature is disabled by default.\r
-\r
-DOT_MULTI_TARGETS      = NO\r
-\r
-# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will \r
-# generate a legend page explaining the meaning of the various boxes and \r
-# arrows in the dot generated graphs.\r
-\r
-GENERATE_LEGEND        = YES\r
-\r
-# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will \r
-# remove the intermediate dot files that are used to generate \r
-# the various graphs.\r
-\r
-DOT_CLEANUP            = YES\r
-\r
-#---------------------------------------------------------------------------\r
-# Configuration::additions related to the search engine   \r
-#---------------------------------------------------------------------------\r
-\r
-# The SEARCHENGINE tag specifies whether or not a search engine should be \r
-# used. If set to NO the values of all tags below this one will be ignored.\r
-\r
-SEARCHENGINE           = NO\r
diff --git a/Demos/Device/GenericHID/GenericHID.aps b/Demos/Device/GenericHID/GenericHID.aps
deleted file mode 100644 (file)
index ec824c7..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<AVRStudio><MANAGEMENT><ProjectName>GenericHID</ProjectName><Created>29-Mar-2009 23:19:24</Created><LastEdit>29-Mar-2009 23:19:40</LastEdit><ICON>241</ICON><ProjectType>0</ProjectType><Created>29-Mar-2009 23:19:24</Created><Version>4</Version><Build>4, 16, 0, 626</Build><ProjectTypeName>AVR GCC</ProjectTypeName></MANAGEMENT><CODE_CREATION><ObjectFile></ObjectFile><EntryFile></EntryFile><SaveFolder>C:\Users\Dean\Documents\Electronics\Projects\WORK\LUFAWORK\Demos\Device\GenericHID\</SaveFolder></CODE_CREATION><DEBUG_TARGET><CURRENT_TARGET>JTAGICE mkII</CURRENT_TARGET><CURRENT_PART>AT90USB1287.xml</CURRENT_PART><BREAKPOINTS></BREAKPOINTS><IO_EXPAND><HIDE>false</HIDE></IO_EXPAND><REGISTERNAMES><Register>R00</Register><Register>R01</Register><Register>R02</Register><Register>R03</Register><Register>R04</Register><Register>R05</Register><Register>R06</Register><Register>R07</Register><Register>R08</Register><Register>R09</Register><Register>R10</Register><Register>R11</Register><Register>R12</Register><Register>R13</Register><Register>R14</Register><Register>R15</Register><Register>R16</Register><Register>R17</Register><Register>R18</Register><Register>R19</Register><Register>R20</Register><Register>R21</Register><Register>R22</Register><Register>R23</Register><Register>R24</Register><Register>R25</Register><Register>R26</Register><Register>R27</Register><Register>R28</Register><Register>R29</Register><Register>R30</Register><Register>R31</Register></REGISTERNAMES><COM>Auto</COM><COMType>0</COMType><WATCHNUM>0</WATCHNUM><WATCHNAMES><Pane0></Pane0><Pane1></Pane1><Pane2></Pane2><Pane3></Pane3></WATCHNAMES><BreakOnTrcaeFull>0</BreakOnTrcaeFull></DEBUG_TARGET><Debugger><Triggers></Triggers></Debugger><AVRGCCPLUGIN><FILES><SOURCEFILE>Descriptors.c</SOURCEFILE><SOURCEFILE>GenericHID.c</SOURCEFILE><HEADERFILE>Descriptors.h</HEADERFILE><HEADERFILE>GenericHID.h</HEADERFILE><OTHERFILE>makefile</OTHERFILE></FILES><CONFIGS><CONFIG><NAME>default</NAME><USESEXTERNALMAKEFILE>YES</USESEXTERNALMAKEFILE><EXTERNALMAKEFILE>makefile</EXTERNALMAKEFILE><PART>at90usb1287</PART><HEX>1</HEX><LIST>1</LIST><MAP>1</MAP><OUTPUTFILENAME>GenericHID.elf</OUTPUTFILENAME><OUTPUTDIR>default\</OUTPUTDIR><ISDIRTY>1</ISDIRTY><OPTIONS/><INCDIRS/><LIBDIRS/><LIBS/><LINKOBJECTS/><OPTIONSFORALL>-Wall -gdwarf-2 -std=gnu99 -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums</OPTIONSFORALL><LINKEROPTIONS></LINKEROPTIONS><SEGMENTS/></CONFIG></CONFIGS><LASTCONFIG>default</LASTCONFIG><USES_WINAVR>1</USES_WINAVR><GCC_LOC>C:\WinAVR-20090313\bin\avr-gcc.exe</GCC_LOC><MAKE_LOC>C:\WinAVR-20090313\utils\bin\make.exe</MAKE_LOC></AVRGCCPLUGIN><IOView><usergroups/><sort sorted="0" column="0" ordername="0" orderaddress="0" ordergroup="0"/></IOView><Files></Files><Events><Bookmarks></Bookmarks></Events><Trace><Filters></Filters></Trace></AVRStudio>\r
diff --git a/Demos/Device/GenericHID/GenericHID.c b/Demos/Device/GenericHID/GenericHID.c
deleted file mode 100644 (file)
index 172df7f..0000000
+++ /dev/null
@@ -1,150 +0,0 @@
-/*\r
-             LUFA Library\r
-     Copyright (C) Dean Camera, 2009.\r
-              \r
-  dean [at] fourwalledcubicle [dot] com\r
-      www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
-  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
-  Permission to use, copy, modify, and distribute this software\r
-  and its documentation for any purpose and without fee is hereby\r
-  granted, provided that the above copyright notice appear in all\r
-  copies and that both that the copyright notice and this\r
-  permission notice and warranty disclaimer appear in supporting\r
-  documentation, and that the name of the author not be used in\r
-  advertising or publicity pertaining to distribution of the\r
-  software without specific, written prior permission.\r
-\r
-  The author disclaim all warranties with regard to this\r
-  software, including all implied warranties of merchantability\r
-  and fitness.  In no event shall the author be liable for any\r
-  special, indirect or consequential damages or any damages\r
-  whatsoever resulting from loss of use, data or profits, whether\r
-  in an action of contract, negligence or other tortious action,\r
-  arising out of or in connection with the use or performance of\r
-  this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- *  Main source file for the GenericHID demo. This file contains the main tasks of\r
- *  the demo and is responsible for the initial application hardware configuration.\r
- */\r
-\r
-#include "GenericHID.h"\r
-\r
-/** LUFA HID Class driver interface configuration and state information. This structure is\r
- *  passed to all HID Class driver functions, so that multiple instances of the same class\r
- *  within a device can be differentiated from one another.\r
- */\r
-USB_ClassInfo_HID_t Generic_HID_Interface =\r
-       {\r
-               .InterfaceNumber         = 0,\r
-\r
-               .ReportINEndpointNumber  = GENERIC_IN_EPNUM,\r
-               .ReportINEndpointSize    = GENERIC_EPSIZE,\r
-               \r
-               .ReportINBufferSize      = GENERIC_REPORT_SIZE,\r
-\r
-               .UsingReportProtocol     = true,\r
-       };\r
-\r
-/** Main program entry point. This routine contains the overall program flow, including initial\r
- *  setup of all components and the main program loop.\r
- */\r
-int main(void)\r
-{\r
-       SetupHardware();\r
-       \r
-       LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);\r
-       \r
-       for (;;)\r
-       {\r
-               USB_HID_USBTask(&Generic_HID_Interface);\r
-               USB_USBTask();\r
-       }\r
-}\r
-\r
-/** Configures the board hardware and chip peripherals for the demo's functionality. */\r
-void SetupHardware(void)\r
-{\r
-       /* Disable watchdog if enabled by bootloader/fuses */\r
-       MCUSR &= ~(1 << WDRF);\r
-       wdt_disable();\r
-\r
-       /* Disable clock division */\r
-       clock_prescale_set(clock_div_1);\r
-\r
-       /* Hardware Initialization */\r
-       LEDs_Init();\r
-       USB_Init();\r
-\r
-       /* Millisecond timer initialization, with output compare interrupt enabled for the idle timing */\r
-       OCR0A  = ((F_CPU / 64) / 1000);\r
-       TCCR0A = (1 << WGM01);\r
-       TCCR0B = ((1 << CS01) | (1 << CS00));\r
-       TIMSK0 = (1 << OCIE0A);\r
-}\r
-\r
-/** Event handler for the library USB Connection event. */\r
-void EVENT_USB_Connect(void)\r
-{\r
-       LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING);\r
-}\r
-\r
-/** Event handler for the library USB Disconnection event. */\r
-void EVENT_USB_Disconnect(void)\r
-{\r
-       LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);\r
-}\r
-\r
-/** Event handler for the library USB Configuration Changed event. */\r
-void EVENT_USB_ConfigurationChanged(void)\r
-{\r
-       LEDs_SetAllLEDs(LEDMASK_USB_READY);\r
-\r
-       if (!(USB_HID_ConfigureEndpoints(&Generic_HID_Interface)))\r
-         LEDs_SetAllLEDs(LEDMASK_USB_ERROR);\r
-}\r
-\r
-/** Event handler for the library USB Unhandled Control Packet event. */\r
-void EVENT_USB_UnhandledControlPacket(void)\r
-{\r
-       USB_HID_ProcessControlPacket(&Generic_HID_Interface);\r
-}\r
-\r
-/** ISR to keep track of each millisecond interrupt, for determining the HID class idle period remaining when set. */\r
-ISR(TIMER0_COMPA_vect, ISR_BLOCK)\r
-{\r
-       if (Generic_HID_Interface.IdleMSRemaining)\r
-         Generic_HID_Interface.IdleMSRemaining--;\r
-}\r
-\r
-/** HID class driver callback function for the creation of HID reports to the host.\r
- *\r
- *  \param HIDInterfaceInfo  Pointer to the HID class interface configuration structure being referenced\r
- *  \param ReportData  Pointer to a buffer where the created report should be stored\r
- *\r
- *  \return Number of bytes written in the report (or zero if no report is to be sent\r
- */\r
-uint16_t CALLBACK_USB_HID_CreateNextHIDReport(USB_ClassInfo_HID_t* HIDInterfaceInfo, uint8_t* ReportID, void* ReportData)\r
-{\r
-       // Create generic HID report here\r
-       \r
-       return 0;\r
-}\r
-\r
-/** HID class driver callback function for the processing of HID reports from the host.\r
- *\r
- *  \param HIDInterfaceInfo  Pointer to the HID class interface configuration structure being referenced\r
- *  \param ReportData  Pointer to a buffer where the created report has been stored\r
- *  \param ReportSize  Size in bytes of the received HID report\r
- */\r
-void CALLBACK_USB_HID_ProcessReceivedHIDReport(USB_ClassInfo_HID_t* HIDInterfaceInfo, uint8_t ReportID,\r
-                                               void* ReportData, uint16_t ReportSize)\r
-{\r
-       // Process received generic HID report here\r
-}\r
diff --git a/Demos/Device/GenericHID/GenericHID.h b/Demos/Device/GenericHID/GenericHID.h
deleted file mode 100644 (file)
index 5ea084c..0000000
+++ /dev/null
@@ -1,79 +0,0 @@
-/*\r
-             LUFA Library\r
-     Copyright (C) Dean Camera, 2009.\r
-              \r
-  dean [at] fourwalledcubicle [dot] com\r
-      www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
-  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
-  Permission to use, copy, modify, and distribute this software\r
-  and its documentation for any purpose and without fee is hereby\r
-  granted, provided that the above copyright notice appear in all\r
-  copies and that both that the copyright notice and this\r
-  permission notice and warranty disclaimer appear in supporting\r
-  documentation, and that the name of the author not be used in\r
-  advertising or publicity pertaining to distribution of the\r
-  software without specific, written prior permission.\r
-\r
-  The author disclaim all warranties with regard to this\r
-  software, including all implied warranties of merchantability\r
-  and fitness.  In no event shall the author be liable for any\r
-  special, indirect or consequential damages or any damages\r
-  whatsoever resulting from loss of use, data or profits, whether\r
-  in an action of contract, negligence or other tortious action,\r
-  arising out of or in connection with the use or performance of\r
-  this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- *  Header file for GenericHID.c.\r
- */\r
\r
-#ifndef _GENERICHID_H_\r
-#define _GENERICHID_H_\r
-\r
-       /* Includes: */\r
-               #include <avr/io.h>\r
-               #include <avr/wdt.h>\r
-               #include <avr/power.h>\r
-               #include <avr/interrupt.h>\r
-               #include <stdbool.h>\r
-               #include <string.h>\r
-               \r
-               #include "Descriptors.h"\r
-\r
-               #include <LUFA/Version.h>\r
-               #include <LUFA/Drivers/Board/LEDs.h>\r
-               #include <LUFA/Drivers/USB/USB.h>\r
-               #include <LUFA/Drivers/USB/Class/Device/HID.h>\r
-\r
-       /* Macros: */\r
-               /** LED mask for the library LED driver, to indicate that the USB interface is not ready. */\r
-               #define LEDMASK_USB_NOTREADY      LEDS_LED1\r
-\r
-               /** LED mask for the library LED driver, to indicate that the USB interface is enumerating. */\r
-               #define LEDMASK_USB_ENUMERATING  (LEDS_LED2 | LEDS_LED3)\r
-\r
-               /** LED mask for the library LED driver, to indicate that the USB interface is ready. */\r
-               #define LEDMASK_USB_READY        (LEDS_LED2 | LEDS_LED4)\r
-\r
-               /** LED mask for the library LED driver, to indicate that an error has occurred in the USB interface. */\r
-               #define LEDMASK_USB_ERROR        (LEDS_LED1 | LEDS_LED3)\r
-\r
-       /* Function Prototypes: */\r
-               void SetupHardware(void);\r
-\r
-               void EVENT_USB_Connect(void);\r
-               void EVENT_USB_Disconnect(void);\r
-               void EVENT_USB_ConfigurationChanged(void);\r
-               void EVENT_USB_UnhandledControlPacket(void);\r
-\r
-               uint16_t CALLBACK_USB_HID_CreateNextHIDReport(USB_ClassInfo_HID_t* HIDInterfaceInfo, uint8_t* ReportID, void* ReportData);\r
-               void     CALLBACK_USB_HID_ProcessReceivedHIDReport(USB_ClassInfo_HID_t* HIDInterfaceInfo, uint8_t ReportID, \r
-                                                                  void* ReportData, uint16_t ReportSize);\r
-               \r
-#endif\r
diff --git a/Demos/Device/GenericHID/GenericHID.txt b/Demos/Device/GenericHID/GenericHID.txt
deleted file mode 100644 (file)
index a40b78b..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
-/** \file\r
- *\r
- *  This file contains special DoxyGen information for the generation of the main page and other special\r
- *  documentation pages. It is not a project source file.\r
- */\r
\r
-/** \mainpage Generic HID Device\r
- *\r
- *  \section SSec_Info USB Information:\r
- *\r
- *  The following table gives a rundown of the USB utilization of this demo.\r
- *\r
- *  <table>\r
- *   <tr>\r
- *    <td><b>USB Mode:</b></td>\r
- *    <td>Device</td>\r
- *   </tr>\r
- *   <tr>\r
- *    <td><b>USB Class:</b></td>\r
- *    <td>Human Interface Device (HID)</td>\r
- *   </tr>\r
- *   <tr> \r
- *    <td><b>USB Subclass:</b></td>\r
- *    <td>N/A</td>\r
- *   </tr>\r
- *   <tr>\r
- *    <td><b>Relevant Standards:</b></td>\r
- *    <td>USBIF HID Specification, USBIF HID Usage Tables</td>\r
- *   </tr>\r
- *   <tr>\r
- *    <td><b>Usable Speeds:</b></td>\r
- *    <td>Low Speed Mode, Full Speed Mode</td>\r
- *   </tr>\r
- *  </table>\r
- *\r
- *  \section SSec_Description Project Description: \r
- *\r
- *  Generic HID device demonstration application. This gives a simple reference application\r
- *  for implementing a generic HID device, using the basic USB HID drivers in all modern\r
- *  OSes (i.e. no special drivers required). It accepts and sends up to 255 byte reports to\r
- *  and from a USB Host, and by default transmits the last sent report back to the host.\r
- *  \r
- *  On start-up the system will automatically enumerate and function as a vendor HID device.\r
- *  When controlled by a custom HID class application, reports can be sent and received by\r
- *  both the standard data endpoint and control request methods defined in the HID specification.\r
- *\r
- *  \section SSec_Options Project Options\r
- *  \r
- *  The following defines can be found in this demo, which can control the demo behaviour when defined, or changed in value.\r
- *\r
- *  <table>\r
- *   <tr>\r
- *    <td><b>Define Name:</b></td>\r
- *    <td><b>Location:</b></td>\r
- *    <td><b>Description:</b></td>\r
- *   </tr>\r
- *   <tr>\r
- *    <td>GENERIC_REPORT_SIZE</td>\r
- *    <td>Descriptors.h</td>\r
- *    <td>This token defines the size of the device reports, both sent and received. The value must be an\r
- *        integer ranging from 1 to 255.</td>\r
- *   </tr>\r
- *  </table>\r
- */\r
diff --git a/Demos/Device/GenericHID/makefile b/Demos/Device/GenericHID/makefile
deleted file mode 100644 (file)
index 5cc4b4a..0000000
+++ /dev/null
@@ -1,732 +0,0 @@
-# Hey Emacs, this is a -*- makefile -*-\r
-#----------------------------------------------------------------------------\r
-# WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al.\r
-#  >> Modified for use with the LUFA project. <<\r
-#\r
-# Released to the Public Domain\r
-#\r
-# Additional material for this makefile was written by:\r
-# Peter Fleury\r
-# Tim Henigan\r
-# Colin O'Flynn\r
-# Reiner Patommel\r
-# Markus Pfaff\r
-# Sander Pool\r
-# Frederik Rouleau\r
-# Carlos Lamas\r
-# Dean Camera\r
-# Opendous Inc.\r
-# Denver Gingerich\r
-#\r
-#----------------------------------------------------------------------------\r
-# On command line:\r
-#\r
-# make all = Make software.\r
-#\r
-# make clean = Clean out built project files.\r
-#\r
-# make coff = Convert ELF to AVR COFF.\r
-#\r
-# make extcoff = Convert ELF to AVR Extended COFF.\r
-#\r
-# make program = Download the hex file to the device, using avrdude.\r
-#                Please customize the avrdude settings below first!\r
-#\r
-# make dfu = Download the hex file to the device, using dfu-programmer (must\r
-#            have dfu-programmer installed).\r
-#\r
-# make flip = Download the hex file to the device, using Atmel FLIP (must\r
-#             have Atmel FLIP installed).\r
-#\r
-# make dfu-ee = Download the eeprom file to the device, using dfu-programmer\r
-#               (must have dfu-programmer installed).\r
-#\r
-# make flip-ee = Download the eeprom file to the device, using Atmel FLIP\r
-#                (must have Atmel FLIP installed).\r
-#\r
-# make doxygen = Generate DoxyGen documentation for the project (must have\r
-#                DoxyGen installed)\r
-#\r
-# make debug = Start either simulavr or avarice as specified for debugging, \r
-#              with avr-gdb or avr-insight as the front end for debugging.\r
-#\r
-# make filename.s = Just compile filename.c into the assembler code only.\r
-#\r
-# make filename.i = Create a preprocessed source file for use in submitting\r
-#                   bug reports to the GCC project.\r
-#\r
-# To rebuild project do "make clean" then "make all".\r
-#----------------------------------------------------------------------------\r
-\r
-\r
-# MCU name\r
-MCU = at90usb1287\r
-\r
-\r
-# Target board (see library "Board Types" documentation, USER or blank for projects not requiring\r
-# LUFA board drivers). If USER is selected, put custom board drivers in a directory called \r
-# "Board" inside the application directory.\r
-BOARD  = USBKEY\r
-\r
-\r
-# Processor frequency.\r
-#     This will define a symbol, F_CPU, in all source code files equal to the \r
-#     processor frequency. You can then use this symbol in your source code to \r
-#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done\r
-#     automatically to create a 32-bit value in your source code.\r
-#     Typical values are:\r
-#         F_CPU =  1000000\r
-#         F_CPU =  1843200\r
-#         F_CPU =  2000000\r
-#         F_CPU =  3686400\r
-#         F_CPU =  4000000\r
-#         F_CPU =  7372800\r
-#         F_CPU =  8000000\r
-#         F_CPU = 11059200\r
-#         F_CPU = 14745600\r
-#         F_CPU = 16000000\r
-#         F_CPU = 18432000\r
-#         F_CPU = 20000000\r
-F_CPU = 8000000\r
-\r
-\r
-# Input clock frequency.\r
-#     This will define a symbol, F_CLOCK, in all source code files equal to the \r
-#     input clock frequency (before any prescaling is performed). This value may\r
-#     differ from F_CPU if prescaling is used on the latter, and is required as the\r
-#     raw input clock is fed directly to the PLL sections of the AVR for high speed\r
-#     clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'\r
-#     at the end, this will be done automatically to create a 32-bit value in your\r
-#     source code.\r
-#\r
-#     If no clock division is performed on the input clock inside the AVR (via the\r
-#     CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.\r
-F_CLOCK = 8000000\r
-\r
-\r
-# Output format. (can be srec, ihex, binary)\r
-FORMAT = ihex\r
-\r
-\r
-# Target file name (without extension).\r
-TARGET = GenericHID\r
-\r
-\r
-# Object files directory\r
-#     To put object files in current directory, use a dot (.), do NOT make\r
-#     this an empty or blank macro!\r
-OBJDIR = .\r
-\r
-\r
-# Path to the LUFA library\r
-LUFA_PATH = ../../..\r
-\r
-\r
-# List C source files here. (C dependencies are automatically generated.)\r
-SRC = $(TARGET).c                                                 \\r
-         Descriptors.c                                               \\r
-         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/DevChapter9.c        \\r
-         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Endpoint.c           \\r
-         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Host.c               \\r
-         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/HostChapter9.c       \\r
-         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/LowLevel.c           \\r
-         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Pipe.c               \\r
-         $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/Events.c            \\r
-         $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBInterrupt.c      \\r
-         $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBTask.c           \\r
-         $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/ConfigDescriptor.c  \\r
-         $(LUFA_PATH)/LUFA/Drivers/USB/Class/Device/HID.c            \\r
-\r
-\r
-# List C++ source files here. (C dependencies are automatically generated.)\r
-CPPSRC = \r
-\r
-\r
-# List Assembler source files here.\r
-#     Make them always end in a capital .S.  Files ending in a lowercase .s\r
-#     will not be considered source files but generated files (assembler\r
-#     output from the compiler), and will be deleted upon "make clean"!\r
-#     Even though the DOS/Win* filesystem matches both .s and .S the same,\r
-#     it will preserve the spelling of the filenames, and gcc itself does\r
-#     care about how the name is spelled on its command-line.\r
-ASRC =\r
-\r
-\r
-# Optimization level, can be [0, 1, 2, 3, s]. \r
-#     0 = turn off optimization. s = optimize for size.\r
-#     (Note: 3 is not always the best optimization level. See avr-libc FAQ.)\r
-OPT = s\r
-\r
-\r
-# Debugging format.\r
-#     Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs.\r
-#     AVR Studio 4.10 requires dwarf-2.\r
-#     AVR [Extended] COFF format requires stabs, plus an avr-objcopy run.\r
-DEBUG = dwarf-2\r
-\r
-\r
-# List any extra directories to look for include files here.\r
-#     Each directory must be seperated by a space.\r
-#     Use forward slashes for directory separators.\r
-#     For a directory that has spaces, enclose it in quotes.\r
-EXTRAINCDIRS = $(LUFA_PATH)/\r
-\r
-\r
-# Compiler flag to set the C Standard level.\r
-#     c89   = "ANSI" C\r
-#     gnu89 = c89 plus GCC extensions\r
-#     c99   = ISO C99 standard (not yet fully implemented)\r
-#     gnu99 = c99 plus GCC extensions\r
-CSTANDARD = -std=gnu99\r
-\r
-\r
-# Place -D or -U options here for C sources\r
-CDEFS  = -DF_CPU=$(F_CPU)UL -DF_CLOCK=$(F_CLOCK)UL -DBOARD=BOARD_$(BOARD)\r
-CDEFS += -DUSE_NONSTANDARD_DESCRIPTOR_NAMES -DUSB_DEVICE_ONLY\r
-CDEFS += -DFIXED_CONTROL_ENDPOINT_SIZE=8 -DUSE_SINGLE_DEVICE_CONFIGURATION\r
-CDEFS += -DUSE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)"\r
-\r
-# Place -D or -U options here for ASM sources\r
-ADEFS = -DF_CPU=$(F_CPU)\r
-\r
-\r
-# Place -D or -U options here for C++ sources\r
-CPPDEFS = -DF_CPU=$(F_CPU)UL\r
-#CPPDEFS += -D__STDC_LIMIT_MACROS\r
-#CPPDEFS += -D__STDC_CONSTANT_MACROS\r
-\r
-\r
-\r
-#---------------- Compiler Options C ----------------\r
-#  -g*:          generate debugging information\r
-#  -O*:          optimization level\r
-#  -f...:        tuning, see GCC manual and avr-libc documentation\r
-#  -Wall...:     warning level\r
-#  -Wa,...:      tell GCC to pass this to the assembler.\r
-#    -adhlns...: create assembler listing\r
-CFLAGS = -g$(DEBUG)\r
-CFLAGS += $(CDEFS)\r
-CFLAGS += -O$(OPT)\r
-CFLAGS += -funsigned-char\r
-CFLAGS += -funsigned-bitfields\r
-CFLAGS += -ffunction-sections\r
-CFLAGS += -fpack-struct\r
-CFLAGS += -fshort-enums\r
-CFLAGS += -finline-limit=20\r
-CFLAGS += -Wall\r
-CFLAGS += -Wstrict-prototypes\r
-CFLAGS += -Wundef\r
-#CFLAGS += -fno-unit-at-a-time\r
-#CFLAGS += -Wunreachable-code\r
-#CFLAGS += -Wsign-compare\r
-CFLAGS += -Wa,-adhlns=$(<:%.c=$(OBJDIR)/%.lst)\r
-CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))\r
-CFLAGS += $(CSTANDARD)\r
-\r
-\r
-#---------------- Compiler Options C++ ----------------\r
-#  -g*:          generate debugging information\r
-#  -O*:          optimization level\r
-#  -f...:        tuning, see GCC manual and avr-libc documentation\r
-#  -Wall...:     warning level\r
-#  -Wa,...:      tell GCC to pass this to the assembler.\r
-#    -adhlns...: create assembler listing\r
-CPPFLAGS = -g$(DEBUG)\r
-CPPFLAGS += $(CPPDEFS)\r
-CPPFLAGS += -O$(OPT)\r
-CPPFLAGS += -funsigned-char\r
-CPPFLAGS += -funsigned-bitfields\r
-CPPFLAGS += -fpack-struct\r
-CPPFLAGS += -fshort-enums\r
-CPPFLAGS += -fno-exceptions\r
-CPPFLAGS += -Wall\r
-CFLAGS += -Wundef\r
-#CPPFLAGS += -mshort-calls\r
-#CPPFLAGS += -fno-unit-at-a-time\r
-#CPPFLAGS += -Wstrict-prototypes\r
-#CPPFLAGS += -Wunreachable-code\r
-#CPPFLAGS += -Wsign-compare\r
-CPPFLAGS += -Wa,-adhlns=$(<:%.cpp=$(OBJDIR)/%.lst)\r
-CPPFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))\r
-#CPPFLAGS += $(CSTANDARD)\r
-\r
-\r
-#---------------- Assembler Options ----------------\r
-#  -Wa,...:   tell GCC to pass this to the assembler.\r
-#  -adhlns:   create listing\r
-#  -gstabs:   have the assembler create line number information; note that\r
-#             for use in COFF files, additional information about filenames\r
-#             and function names needs to be present in the assembler source\r
-#             files -- see avr-libc docs [FIXME: not yet described there]\r
-#  -listing-cont-lines: Sets the maximum number of continuation lines of hex \r
-#       dump that will be displayed for a given single line of source input.\r
-ASFLAGS = $(ADEFS) -Wa,-adhlns=$(<:%.S=$(OBJDIR)/%.lst),-gstabs,--listing-cont-lines=100\r
-\r
-\r
-#---------------- Library Options ----------------\r
-# Minimalistic printf version\r
-PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min\r
-\r
-# Floating point printf version (requires MATH_LIB = -lm below)\r
-PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt\r
-\r
-# If this is left blank, then it will use the Standard printf version.\r
-PRINTF_LIB = \r
-#PRINTF_LIB = $(PRINTF_LIB_MIN)\r
-#PRINTF_LIB = $(PRINTF_LIB_FLOAT)\r
-\r
-\r
-# Minimalistic scanf version\r
-SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min\r
-\r
-# Floating point + %[ scanf version (requires MATH_LIB = -lm below)\r
-SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt\r
-\r
-# If this is left blank, then it will use the Standard scanf version.\r
-SCANF_LIB = \r
-#SCANF_LIB = $(SCANF_LIB_MIN)\r
-#SCANF_LIB = $(SCANF_LIB_FLOAT)\r
-\r
-\r
-MATH_LIB = -lm\r
-\r
-\r
-# List any extra directories to look for libraries here.\r
-#     Each directory must be seperated by a space.\r
-#     Use forward slashes for directory separators.\r
-#     For a directory that has spaces, enclose it in quotes.\r
-EXTRALIBDIRS = \r
-\r
-\r
-\r
-#---------------- External Memory Options ----------------\r
-\r
-# 64 KB of external RAM, starting after internal RAM (ATmega128!),\r
-# used for variables (.data/.bss) and heap (malloc()).\r
-#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff\r
-\r
-# 64 KB of external RAM, starting after internal RAM (ATmega128!),\r
-# only used for heap (malloc()).\r
-#EXTMEMOPTS = -Wl,--section-start,.data=0x801100,--defsym=__heap_end=0x80ffff\r
-\r
-EXTMEMOPTS =\r
-\r
-\r
-\r
-#---------------- Linker Options ----------------\r
-#  -Wl,...:     tell GCC to pass this to linker.\r
-#    -Map:      create map file\r
-#    --cref:    add cross reference to  map file\r
-LDFLAGS = -Wl,-Map=$(TARGET).map,--cref\r
-LDFLAGS += -Wl,--relax \r
-LDFLAGS += -Wl,--gc-sections\r
-LDFLAGS += $(EXTMEMOPTS)\r
-LDFLAGS += $(patsubst %,-L%,$(EXTRALIBDIRS))\r
-LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)\r
-#LDFLAGS += -T linker_script.x\r
-\r
-\r
-\r
-#---------------- Programming Options (avrdude) ----------------\r
-\r
-# Programming hardware: alf avr910 avrisp bascom bsd \r
-# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500\r
-#\r
-# Type: avrdude -c ?\r
-# to get a full listing.\r
-#\r
-AVRDUDE_PROGRAMMER = jtagmkII\r
-\r
-# com1 = serial port. Use lpt1 to connect to parallel port.\r
-AVRDUDE_PORT = usb\r
-\r
-AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex\r
-#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep\r
-\r
-\r
-# Uncomment the following if you want avrdude's erase cycle counter.\r
-# Note that this counter needs to be initialized first using -Yn,\r
-# see avrdude manual.\r
-#AVRDUDE_ERASE_COUNTER = -y\r
-\r
-# Uncomment the following if you do /not/ wish a verification to be\r
-# performed after programming the device.\r
-#AVRDUDE_NO_VERIFY = -V\r
-\r
-# Increase verbosity level.  Please use this when submitting bug\r
-# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude> \r
-# to submit bug reports.\r
-#AVRDUDE_VERBOSE = -v -v\r
-\r
-AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)\r
-AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY)\r
-AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE)\r
-AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER)\r
-\r
-\r
-\r
-#---------------- Debugging Options ----------------\r
-\r
-# For simulavr only - target MCU frequency.\r
-DEBUG_MFREQ = $(F_CPU)\r
-\r
-# Set the DEBUG_UI to either gdb or insight.\r
-# DEBUG_UI = gdb\r
-DEBUG_UI = insight\r
-\r
-# Set the debugging back-end to either avarice, simulavr.\r
-DEBUG_BACKEND = avarice\r
-#DEBUG_BACKEND = simulavr\r
-\r
-# GDB Init Filename.\r
-GDBINIT_FILE = __avr_gdbinit\r
-\r
-# When using avarice settings for the JTAG\r
-JTAG_DEV = /dev/com1\r
-\r
-# Debugging port used to communicate between GDB / avarice / simulavr.\r
-DEBUG_PORT = 4242\r
-\r
-# Debugging host used to communicate between GDB / avarice / simulavr, normally\r
-#     just set to localhost unless doing some sort of crazy debugging when \r
-#     avarice is running on a different computer.\r
-DEBUG_HOST = localhost\r
-\r
-\r
-\r
-#============================================================================\r
-\r
-\r
-# Define programs and commands.\r
-SHELL = sh\r
-CC = avr-gcc\r
-OBJCOPY = avr-objcopy\r
-OBJDUMP = avr-objdump\r
-SIZE = avr-size\r
-AR = avr-ar rcs\r
-NM = avr-nm\r
-AVRDUDE = avrdude\r
-REMOVE = rm -f\r
-REMOVEDIR = rm -rf\r
-COPY = cp\r
-WINSHELL = cmd\r
-\r
-# Define Messages\r
-# English\r
-MSG_ERRORS_NONE = Errors: none\r
-MSG_BEGIN = -------- begin --------\r
-MSG_END = --------  end  --------\r
-MSG_SIZE_BEFORE = Size before: \r
-MSG_SIZE_AFTER = Size after:\r
-MSG_COFF = Converting to AVR COFF:\r
-MSG_EXTENDED_COFF = Converting to AVR Extended COFF:\r
-MSG_FLASH = Creating load file for Flash:\r
-MSG_EEPROM = Creating load file for EEPROM:\r
-MSG_EXTENDED_LISTING = Creating Extended Listing:\r
-MSG_SYMBOL_TABLE = Creating Symbol Table:\r
-MSG_LINKING = Linking:\r
-MSG_COMPILING = Compiling C:\r
-MSG_COMPILING_CPP = Compiling C++:\r
-MSG_ASSEMBLING = Assembling:\r
-MSG_CLEANING = Cleaning project:\r
-MSG_CREATING_LIBRARY = Creating library:\r
-\r
-\r
-\r
-\r
-# Define all object files.\r
-OBJ = $(SRC:%.c=$(OBJDIR)/%.o) $(CPPSRC:%.cpp=$(OBJDIR)/%.o) $(ASRC:%.S=$(OBJDIR)/%.o) \r
-\r
-# Define all listing files.\r
-LST = $(SRC:%.c=$(OBJDIR)/%.lst) $(CPPSRC:%.cpp=$(OBJDIR)/%.lst) $(ASRC:%.S=$(OBJDIR)/%.lst) \r
-\r
-\r
-# Compiler flags to generate dependency files.\r
-GENDEPFLAGS = -MMD -MP -MF .dep/$(@F).d\r
-\r
-\r
-# Combine all necessary flags and optional flags.\r
-# Add target processor to flags.\r
-ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS)\r
-ALL_CPPFLAGS = -mmcu=$(MCU) -I. -x c++ $(CPPFLAGS) $(GENDEPFLAGS)\r
-ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)\r
-\r
-\r
-\r
-\r
-\r
-# Default target.\r
-all: begin gccversion sizebefore build checkhooks checklibmode checkboard sizeafter end\r
-\r
-# Change the build target to build a HEX file or a library.\r
-build: elf hex eep lss sym\r
-#build: lib\r
-\r
-\r
-elf: $(TARGET).elf\r
-hex: $(TARGET).hex\r
-eep: $(TARGET).eep\r
-lss: $(TARGET).lss\r
-sym: $(TARGET).sym\r
-LIBNAME=lib$(TARGET).a\r
-lib: $(LIBNAME)\r
-\r
-\r
-\r
-# Eye candy.\r
-# AVR Studio 3.x does not check make's exit code but relies on\r
-# the following magic strings to be generated by the compile job.\r
-begin:\r
-       @echo\r
-       @echo $(MSG_BEGIN)\r
-\r
-end:\r
-       @echo $(MSG_END)\r
-       @echo\r
-\r
-\r
-# Display size of file.\r
-HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex\r
-ELFSIZE = $(SIZE) $(MCU_FLAG) $(FORMAT_FLAG) $(TARGET).elf\r
-MCU_FLAG = $(shell $(SIZE) --help | grep -- --mcu > /dev/null && echo --mcu=$(MCU) )\r
-FORMAT_FLAG = $(shell $(SIZE) --help | grep -- --format=.*avr > /dev/null && echo --format=avr )\r
-\r
-sizebefore:\r
-       @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \\r
-       2>/dev/null; echo; fi\r
-\r
-sizeafter:\r
-       @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \\r
-       2>/dev/null; echo; fi\r
-\r
-checkhooks: build\r
-       @echo\r
-       @echo ------- Unhooked LUFA Events -------\r
-       @$(shell) (grep -s '^EVENT_.*LUFA/.*\\.o' $(TARGET).map | \\r
-                  cut -d' ' -f1 | cut -d'_' -f2- | grep ".*") || \\r
-                          echo "(None)"\r
-       @echo ------------------------------------\r
-\r
-checklibmode:\r
-       @echo\r
-       @echo ----------- Library Mode -----------\r
-       @$(shell) ($(CC) $(ALL_CFLAGS) -E -dM - < /dev/null \\r
-                 | grep 'USB_\(DEVICE\|HOST\)_ONLY' | cut -d' ' -f2 | grep ".*") \\r
-                 || echo "No specific mode (both device and host mode allowable)."\r
-       @echo ------------------------------------\r
-\r
-checkboard:\r
-       @echo\r
-       @echo ---------- Selected Board ----------\r
-       @echo Selected board model is $(BOARD).\r
-       @echo ------------------------------------\r
-       \r
-# Display compiler version information.\r
-gccversion : \r
-       @$(CC) --version\r
-\r
-\r
-\r
-# Program the device.  \r
-program: $(TARGET).hex $(TARGET).eep\r
-       $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)\r
-\r
-flip: $(TARGET).hex\r
-       batchisp -hardware usb -device $(MCU) -operation erase f\r
-       batchisp -hardware usb -device $(MCU) -operation loadbuffer $(TARGET).hex program\r
-       batchisp -hardware usb -device $(MCU) -operation start reset 0\r
-\r
-dfu: $(TARGET).hex\r
-       dfu-programmer $(MCU) erase\r
-       dfu-programmer $(MCU) flash --debug 1 $(TARGET).hex\r
-       dfu-programmer $(MCU) reset\r
-\r
-flip-ee: $(TARGET).hex $(TARGET).eep\r
-       copy $(TARGET).eep $(TARGET)eep.hex\r
-       batchisp -hardware usb -device $(MCU) -operation memory EEPROM erase\r
-       batchisp -hardware usb -device $(MCU) -operation memory EEPROM loadbuffer $(TARGET)eep.hex program\r
-       batchisp -hardware usb -device $(MCU) -operation start reset 0\r
-\r
-dfu-ee: $(TARGET).hex $(TARGET).eep\r
-       dfu-programmer $(MCU) flash-eeprom --debug 1 --suppress-bootloader-mem $(TARGET).eep\r
-       dfu-programmer $(MCU) reset\r
-\r
-\r
-# Generate avr-gdb config/init file which does the following:\r
-#     define the reset signal, load the target file, connect to target, and set \r
-#     a breakpoint at main().\r
-gdb-config: \r
-       @$(REMOVE) $(GDBINIT_FILE)\r
-       @echo define reset >> $(GDBINIT_FILE)\r
-       @echo SIGNAL SIGHUP >> $(GDBINIT_FILE)\r
-       @echo end >> $(GDBINIT_FILE)\r
-       @echo file $(TARGET).elf >> $(GDBINIT_FILE)\r
-       @echo target remote $(DEBUG_HOST):$(DEBUG_PORT)  >> $(GDBINIT_FILE)\r
-ifeq ($(DEBUG_BACKEND),simulavr)\r
-       @echo load  >> $(GDBINIT_FILE)\r
-endif\r
-       @echo break main >> $(GDBINIT_FILE)\r
-\r
-debug: gdb-config $(TARGET).elf\r
-ifeq ($(DEBUG_BACKEND), avarice)\r
-       @echo Starting AVaRICE - Press enter when "waiting to connect" message displays.\r
-       @$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \\r
-       $(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT)\r
-       @$(WINSHELL) /c pause\r
-\r
-else\r
-       @$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \\r
-       $(DEBUG_MFREQ) --port $(DEBUG_PORT)\r
-endif\r
-       @$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE)\r
-\r
-\r
-\r
-\r
-# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.\r
-COFFCONVERT = $(OBJCOPY) --debugging\r
-COFFCONVERT += --change-section-address .data-0x800000\r
-COFFCONVERT += --change-section-address .bss-0x800000\r
-COFFCONVERT += --change-section-address .noinit-0x800000\r
-COFFCONVERT += --change-section-address .eeprom-0x810000\r
-\r
-\r
-\r
-coff: $(TARGET).elf\r
-       @echo\r
-       @echo $(MSG_COFF) $(TARGET).cof\r
-       $(COFFCONVERT) -O coff-avr $< $(TARGET).cof\r
-\r
-\r
-extcoff: $(TARGET).elf\r
-       @echo\r
-       @echo $(MSG_EXTENDED_COFF) $(TARGET).cof\r
-       $(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof\r
-\r
-\r
-\r
-# Create final output files (.hex, .eep) from ELF output file.\r
-%.hex: %.elf\r
-       @echo\r
-       @echo $(MSG_FLASH) $@\r
-       $(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@\r
-\r
-%.eep: %.elf\r
-       @echo\r
-       @echo $(MSG_EEPROM) $@\r
-       -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \\r
-       --change-section-lma .eeprom=0 --no-change-warnings -O $(FORMAT) $< $@ || exit 0\r
-\r
-# Create extended listing file from ELF output file.\r
-%.lss: %.elf\r
-       @echo\r
-       @echo $(MSG_EXTENDED_LISTING) $@\r
-       $(OBJDUMP) -h -z -S $< > $@\r
-\r
-# Create a symbol table from ELF output file.\r
-%.sym: %.elf\r
-       @echo\r
-       @echo $(MSG_SYMBOL_TABLE) $@\r
-       $(NM) -n $< > $@\r
-\r
-\r
-\r
-# Create library from object files.\r
-.SECONDARY : $(TARGET).a\r
-.PRECIOUS : $(OBJ)\r
-%.a: $(OBJ)\r
-       @echo\r
-       @echo $(MSG_CREATING_LIBRARY) $@\r
-       $(AR) $@ $(OBJ)\r
-\r
-\r
-# Link: create ELF output file from object files.\r
-.SECONDARY : $(TARGET).elf\r
-.PRECIOUS : $(OBJ)\r
-%.elf: $(OBJ)\r
-       @echo\r
-       @echo $(MSG_LINKING) $@\r
-       $(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)\r
-\r
-\r
-# Compile: create object files from C source files.\r
-$(OBJDIR)/%.o : %.c\r
-       @echo\r
-       @echo $(MSG_COMPILING) $<\r
-       $(CC) -c $(ALL_CFLAGS) $< -o $@ \r
-\r
-\r
-# Compile: create object files from C++ source files.\r
-$(OBJDIR)/%.o : %.cpp\r
-       @echo\r
-       @echo $(MSG_COMPILING_CPP) $<\r
-       $(CC) -c $(ALL_CPPFLAGS) $< -o $@ \r
-\r
-\r
-# Compile: create assembler files from C source files.\r
-%.s : %.c\r
-       $(CC) -S $(ALL_CFLAGS) $< -o $@\r
-\r
-\r
-# Compile: create assembler files from C++ source files.\r
-%.s : %.cpp\r
-       $(CC) -S $(ALL_CPPFLAGS) $< -o $@\r
-\r
-\r
-# Assemble: create object files from assembler source files.\r
-$(OBJDIR)/%.o : %.S\r
-       @echo\r
-       @echo $(MSG_ASSEMBLING) $<\r
-       $(CC) -c $(ALL_ASFLAGS) $< -o $@\r
-\r
-\r
-# Create preprocessed source for use in sending a bug report.\r
-%.i : %.c\r
-       $(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ \r
-       \r
-\r
-# Target: clean project.\r
-clean: begin clean_list clean_binary end\r
-\r
-clean_binary:\r
-       $(REMOVE) $(TARGET).hex\r
-       \r
-clean_list:\r
-       @echo $(MSG_CLEANING)\r
-       $(REMOVE) $(TARGET).eep\r
-       $(REMOVE) $(TARGET)eep.hex\r
-       $(REMOVE) $(TARGET).cof\r
-       $(REMOVE) $(TARGET).elf\r
-       $(REMOVE) $(TARGET).map\r
-       $(REMOVE) $(TARGET).sym\r
-       $(REMOVE) $(TARGET).lss\r
-       $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.o)\r
-       $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.lst)\r
-       $(REMOVE) $(SRC:.c=.s)\r
-       $(REMOVE) $(SRC:.c=.d)\r
-       $(REMOVE) $(SRC:.c=.i)\r
-       $(REMOVEDIR) .dep\r
-\r
-\r
-doxygen:\r
-       @echo Generating Project Documentation...\r
-       @doxygen Doxygen.conf\r
-       @echo Documentation Generation Complete.\r
-\r
-clean_doxygen:\r
-       rm -rf Documentation\r
-\r
-# Create object files directory\r
-$(shell mkdir $(OBJDIR) 2>/dev/null)\r
-\r
-\r
-# Include the dependency files.\r
--include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)\r
-\r
-\r
-# Listing of phony targets.\r
-.PHONY : all checkhooks checklibmode checkboard   \\r
-begin finish end sizebefore sizeafter gccversion  \\r
-build elf hex eep lss sym coff extcoff clean      \\r
-clean_list clean_binary program debug gdb-config  \\r
-doxygen dfu flip flip-ee dfu-ee
\ No newline at end of file
diff --git a/Demos/Device/Joystick/Descriptors.c b/Demos/Device/Joystick/Descriptors.c
deleted file mode 100644 (file)
index bd7be65..0000000
+++ /dev/null
@@ -1,250 +0,0 @@
-/*\r
-             LUFA Library\r
-     Copyright (C) Dean Camera, 2009.\r
-              \r
-  dean [at] fourwalledcubicle [dot] com\r
-      www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
-  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
-  Permission to use, copy, modify, and distribute this software\r
-  and its documentation for any purpose and without fee is hereby\r
-  granted, provided that the above copyright notice appear in all\r
-  copies and that both that the copyright notice and this\r
-  permission notice and warranty disclaimer appear in supporting\r
-  documentation, and that the name of the author not be used in\r
-  advertising or publicity pertaining to distribution of the\r
-  software without specific, written prior permission.\r
-\r
-  The author disclaim all warranties with regard to this\r
-  software, including all implied warranties of merchantability\r
-  and fitness.  In no event shall the author be liable for any\r
-  special, indirect or consequential damages or any damages\r
-  whatsoever resulting from loss of use, data or profits, whether\r
-  in an action of contract, negligence or other tortious action,\r
-  arising out of or in connection with the use or performance of\r
-  this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- *  USB Device Descriptors, for library use when in USB device mode. Descriptors are special \r
- *  computer-readable structures which the host requests upon device enumeration, to determine\r
- *  the device's capabilities and functions.  \r
- */\r
-\r
-#include "Descriptors.h"\r
-\r
-/** HID class report descriptor. This is a special descriptor constructed with values from the\r
- *  USBIF HID class specification to describe the reports and capabilities of the HID device. This\r
- *  descriptor is parsed by the host and its contents used to determine what data (and in what encoding)\r
- *  the device will send, and what it may be sent back from the host. Refer to the HID specification for\r
- *  more details on HID report descriptors.\r
- */\r
-USB_Descriptor_HIDReport_Datatype_t PROGMEM JoystickReport[] =\r
-{\r
-       0x05, 0x01,          /* Usage Page (Generic Desktop)                       */\r
-       0x09, 0x04,          /* Usage (Joystick)                                   */\r
-       0xa1, 0x01,          /* Collection (Application)                           */\r
-       0x09, 0x01,          /*   Usage (Pointer)                                  */\r
-       0xa1, 0x00,          /*   Collection (Physical)                            */\r
-       0x05, 0x01,          /*     Usage Page (Generic Desktop)                   */\r
-       0x09, 0x30,          /*     Usage (X)                                      */\r
-       0x09, 0x31,          /*     Usage (Y)                                      */\r
-       0x15, 0x9c,          /*     Logical Minimum (-100)                         */\r
-       0x25, 0x64,          /*     Logical Maximum (100)                          */\r
-       0x75, 0x08,          /*     Report Size (8)                                */\r
-       0x95, 0x02,          /*     Report Count (2)                               */\r
-       0x81, 0x82,          /*     Input (Data, Variable, Absolute, Volatile)     */\r
-       0x05, 0x09,          /*     Usage Page (Button)                            */\r
-       0x09, 0x02,          /*     Usage (Button 2)                               */\r
-       0x09, 0x01,          /*     Usage (Button 1)                               */\r
-       0x15, 0x00,          /*     Logical Minimum (0)                            */\r
-       0x25, 0x01,          /*     Logical Maximum (1)                            */\r
-       0x75, 0x01,          /*     Report Size (1)                                */\r
-       0x95, 0x02,          /*     Report Count (2)                               */\r
-       0x81, 0x02,          /*     Input (Data, Variable, Absolute)               */\r
-       0x75, 0x06,          /*     Report Size (6)                                */\r
-       0x95, 0x01,          /*     Report Count (1)                               */\r
-       0x81, 0x01,          /*     Input (Constant)                               */\r
-       0xc0,                /*   End Collection                                   */\r
-       0xc0                 /* End Collection                                     */\r
-};\r
-\r
-/** Device descriptor structure. This descriptor, located in FLASH memory, describes the overall\r
- *  device characteristics, including the supported USB version, control endpoint size and the\r
- *  number of device configurations. The descriptor is read out by the USB host when the enumeration\r
- *  process begins.\r
- */\r
-USB_Descriptor_Device_t PROGMEM DeviceDescriptor =\r
-{\r
-       .Header                 = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device},\r
-               \r
-       .USBSpecification       = VERSION_BCD(01.10),\r
-       .Class                  = 0x00,\r
-       .SubClass               = 0x00,\r
-       .Protocol               = 0x00,\r
-                               \r
-       .Endpoint0Size          = FIXED_CONTROL_ENDPOINT_SIZE,\r
-               \r
-       .VendorID               = 0x03EB,\r
-       .ProductID              = 0x2043,\r
-       .ReleaseNumber          = 0x0000,\r
-               \r
-       .ManufacturerStrIndex   = 0x01,\r
-       .ProductStrIndex        = 0x02,\r
-       .SerialNumStrIndex      = NO_DESCRIPTOR,\r
-               \r
-       .NumberOfConfigurations = 1\r
-};\r
-\r
-/** Configuration descriptor structure. This descriptor, located in FLASH memory, describes the usage\r
- *  of the device in one of its supported configurations, including information about any device interfaces\r
- *  and endpoints. The descriptor is read out by the USB host during the enumeration process when selecting\r
- *  a configuration so that the host may correctly communicate with the USB device.\r
- */\r
-USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =\r
-{\r
-       .Config = \r
-               {\r
-                       .Header                 = {.Size = sizeof(USB_Descriptor_Configuration_Header_t), .Type = DTYPE_Configuration},\r
-\r
-                       .TotalConfigurationSize = sizeof(USB_Descriptor_Configuration_t),\r
-                       .TotalInterfaces        = 1,\r
-                               \r
-                       .ConfigurationNumber    = 1,\r
-                       .ConfigurationStrIndex  = NO_DESCRIPTOR,\r
-                               \r
-                       .ConfigAttributes       = (USB_CONFIG_ATTR_BUSPOWERED | USB_CONFIG_ATTR_SELFPOWERED),\r
-                       \r
-                       .MaxPowerConsumption    = USB_CONFIG_POWER_MA(100)\r
-               },\r
-               \r
-       .Interface = \r
-               {\r
-                       .Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},\r
-\r
-                       .InterfaceNumber        = 0x00,\r
-                       .AlternateSetting       = 0x00,\r
-                       \r
-                       .TotalEndpoints         = 1,\r
-                               \r
-                       .Class                  = 0x03,\r
-                       .SubClass               = 0x00,\r
-                       .Protocol               = 0x00,\r
-                               \r
-                       .InterfaceStrIndex      = NO_DESCRIPTOR\r
-               },\r
-\r
-       .JoystickHID = \r
-               {\r
-                       .Header                 = {.Size = sizeof(USB_Descriptor_HID_t), .Type = DTYPE_HID},\r
-                                                                        \r
-                       .HIDSpec                = VERSION_BCD(01.11),\r
-                       .CountryCode            = 0x00,\r
-                       .TotalReportDescriptors = 1,\r
-                       .HIDReportType          = DTYPE_Report,\r
-                       .HIDReportLength        = sizeof(JoystickReport)\r
-               },\r
-\r
-       .JoystickEndpoint = \r
-               {\r
-                       .Header                 = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},\r
-                                                                                \r
-                       .EndpointAddress        = (ENDPOINT_DESCRIPTOR_DIR_IN | JOYSTICK_EPNUM),\r
-                       .Attributes             = EP_TYPE_INTERRUPT,\r
-                       .EndpointSize           = JOYSTICK_EPSIZE,\r
-                       .PollingIntervalMS      = 0x02\r
-               }       \r
-};\r
-\r
-/** Language descriptor structure. This descriptor, located in FLASH memory, is returned when the host requests\r
- *  the string descriptor with index 0 (the first index). It is actually an array of 16-bit integers, which indicate\r
- *  via the language ID table available at USB.org what languages the device supports for its string descriptors.\r
- */\r
-USB_Descriptor_String_t PROGMEM LanguageString =\r
-{\r
-       .Header                 = {.Size = USB_STRING_LEN(1), .Type = DTYPE_String},\r
-               \r
-       .UnicodeString          = {LANGUAGE_ID_ENG}\r
-};\r
-\r
-/** Manufacturer descriptor string. This is a Unicode string containing the manufacturer's details in human readable\r
- *  form, and is read out upon request by the host when the appropriate string ID is requested, listed in the Device\r
- *  Descriptor.\r
- */\r
-USB_Descriptor_String_t PROGMEM ManufacturerString =\r
-{\r
-       .Header                 = {.Size = USB_STRING_LEN(11), .Type = DTYPE_String},\r
-               \r
-       .UnicodeString          = L"Dean Camera"\r
-};\r
-\r
-/** Product descriptor string. This is a Unicode string containing the product's details in human readable form,\r
- *  and is read out upon request by the host when the appropriate string ID is requested, listed in the Device\r
- *  Descriptor.\r
- */\r
-USB_Descriptor_String_t PROGMEM ProductString =\r
-{\r
-       .Header                 = {.Size = USB_STRING_LEN(18), .Type = DTYPE_String},\r
-               \r
-       .UnicodeString          = L"LUFA Joystick Demo"\r
-};\r
-\r
-/** This function is called by the library when in device mode, and must be overridden (see library "USB Descriptors"\r
- *  documentation) by the application code so that the address and size of a requested descriptor can be given\r
- *  to the USB library. When the device receives a Get Descriptor request on the control endpoint, this function\r
- *  is called so that the descriptor details can be passed back and the appropriate descriptor sent back to the\r
- *  USB host.\r
- */\r
-uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
-{\r
-       const uint8_t  DescriptorType   = (wValue >> 8);\r
-       const uint8_t  DescriptorNumber = (wValue & 0xFF);\r
-\r
-       void*    Address = NULL;\r
-       uint16_t Size    = NO_DESCRIPTOR;\r
-\r
-       switch (DescriptorType)\r
-       {\r
-               case DTYPE_Device:\r
-                       Address = (void*)&DeviceDescriptor;\r
-                       Size    = sizeof(USB_Descriptor_Device_t);\r
-                       break;\r
-               case DTYPE_Configuration: \r
-                       Address = (void*)&ConfigurationDescriptor;\r
-                       Size    = sizeof(USB_Descriptor_Configuration_t);\r
-                       break;\r
-               case DTYPE_String: \r
-                       switch (DescriptorNumber)\r
-                       {\r
-                               case 0x00: \r
-                                       Address = (void*)&LanguageString;\r
-                                       Size    = pgm_read_byte(&LanguageString.Header.Size);\r
-                                       break;\r
-                               case 0x01: \r
-                                       Address = (void*)&ManufacturerString;\r
-                                       Size    = pgm_read_byte(&ManufacturerString.Header.Size);\r
-                                       break;\r
-                               case 0x02: \r
-                                       Address = (void*)&ProductString;\r
-                                       Size    = pgm_read_byte(&ProductString.Header.Size);\r
-                                       break;\r
-                       }\r
-                       \r
-                       break;\r
-               case DTYPE_HID: \r
-                       Address = (void*)&ConfigurationDescriptor.JoystickHID;\r
-                       Size    = sizeof(USB_Descriptor_HID_t);\r
-                       break;\r
-               case DTYPE_Report: \r
-                       Address = (void*)&JoystickReport;\r
-                       Size    = sizeof(JoystickReport);\r
-                       break;\r
-       }\r
-       \r
-       *DescriptorAddress = Address;\r
-       return Size;\r
-}\r
diff --git a/Demos/Device/Joystick/Descriptors.h b/Demos/Device/Joystick/Descriptors.h
deleted file mode 100644 (file)
index 1241ad1..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-/*\r
-             LUFA Library\r
-     Copyright (C) Dean Camera, 2009.\r
-              \r
-  dean [at] fourwalledcubicle [dot] com\r
-      www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
-  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
-  Permission to use, copy, modify, and distribute this software\r
-  and its documentation for any purpose and without fee is hereby\r
-  granted, provided that the above copyright notice appear in all\r
-  copies and that both that the copyright notice and this\r
-  permission notice and warranty disclaimer appear in supporting\r
-  documentation, and that the name of the author not be used in\r
-  advertising or publicity pertaining to distribution of the\r
-  software without specific, written prior permission.\r
-\r
-  The author disclaim all warranties with regard to this\r
-  software, including all implied warranties of merchantability\r
-  and fitness.  In no event shall the author be liable for any\r
-  special, indirect or consequential damages or any damages\r
-  whatsoever resulting from loss of use, data or profits, whether\r
-  in an action of contract, negligence or other tortious action,\r
-  arising out of or in connection with the use or performance of\r
-  this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- *  Header file for Descriptors.c.\r
- */\r
\r
-#ifndef _DESCRIPTORS_H_\r
-#define _DESCRIPTORS_H_\r
-\r
-       /* Includes: */\r
-               #include <avr/pgmspace.h>\r
-\r
-               #include <LUFA/Drivers/USB/USB.h>\r
-               #include <LUFA/Drivers/USB/Class/Device/HID.h>\r
-\r
-       /* Type Defines: */\r
-               /** Type define for the device configuration descriptor structure. This must be defined in the\r
-                *  application code, as the configuration descriptor contains several sub-descriptors which\r
-                *  vary between devices, and which describe the device's usage to the host.\r
-                */\r
-               typedef struct\r
-               {\r
-                       USB_Descriptor_Configuration_Header_t Config;\r
-                       USB_Descriptor_Interface_t            Interface;\r
-                       USB_Descriptor_HID_t                  JoystickHID;\r
-               USB_Descriptor_Endpoint_t             JoystickEndpoint;\r
-               } USB_Descriptor_Configuration_t;\r
-                                       \r
-       /* Macros: */\r
-               /** Endpoint number of the Joystick HID reporting IN endpoint. */\r
-               #define JOYSTICK_EPNUM               1\r
-\r
-               /** Size in bytes of the Joystick HID reporting IN endpoint. */\r
-               #define JOYSTICK_EPSIZE              8\r
-\r
-       /* Function Prototypes: */\r
-               uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
-                                                                                       ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);\r
-\r
-#endif\r
diff --git a/Demos/Device/Joystick/Doxygen.conf b/Demos/Device/Joystick/Doxygen.conf
deleted file mode 100644 (file)
index 2af5ce6..0000000
+++ /dev/null
@@ -1,1485 +0,0 @@
-# Doxyfile 1.5.7.1\r
-\r
-# This file describes the settings to be used by the documentation system\r
-# doxygen (www.doxygen.org) for a project\r
-#\r
-# All text after a hash (#) is considered a comment and will be ignored\r
-# The format is:\r
-#       TAG = value [value, ...]\r
-# For lists items can also be appended using:\r
-#       TAG += value [value, ...]\r
-# Values that contain spaces should be placed between quotes (" ")\r
-\r
-#---------------------------------------------------------------------------\r
-# Project related configuration options\r
-#---------------------------------------------------------------------------\r
-\r
-# This tag specifies the encoding used for all characters in the config file \r
-# that follow. The default is UTF-8 which is also the encoding used for all \r
-# text before the first occurrence of this tag. Doxygen uses libiconv (or the \r
-# iconv built into libc) for the transcoding. See \r
-# http://www.gnu.org/software/libiconv for the list of possible encodings.\r
-\r
-DOXYFILE_ENCODING      = UTF-8\r
-\r
-# The PROJECT_NAME tag is a single word (or a sequence of words surrounded \r
-# by quotes) that should identify the project.\r
-\r
-PROJECT_NAME           = "LUFA Library - Joystick Device Demo"\r
-\r
-# The PROJECT_NUMBER tag can be used to enter a project or revision number. \r
-# This could be handy for archiving the generated documentation or \r
-# if some version control system is used.\r
-\r
-PROJECT_NUMBER         = 0.0.0\r
-\r
-# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) \r
-# base path where the generated documentation will be put. \r
-# If a relative path is entered, it will be relative to the location \r
-# where doxygen was started. If left blank the current directory will be used.\r
-\r
-OUTPUT_DIRECTORY       = ./Documentation/\r
-\r
-# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create \r
-# 4096 sub-directories (in 2 levels) under the output directory of each output \r
-# format and will distribute the generated files over these directories. \r
-# Enabling this option can be useful when feeding doxygen a huge amount of \r
-# source files, where putting all generated files in the same directory would \r
-# otherwise cause performance problems for the file system.\r
-\r
-CREATE_SUBDIRS         = YES\r
-\r
-# The OUTPUT_LANGUAGE tag is used to specify the language in which all \r
-# documentation generated by doxygen is written. Doxygen will use this \r
-# information to generate all constant output in the proper language. \r
-# The default language is English, other supported languages are: \r
-# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, \r
-# Croatian, Czech, Danish, Dutch, Farsi, Finnish, French, German, Greek, \r
-# Hungarian, Italian, Japanese, Japanese-en (Japanese with English messages), \r
-# Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, Polish, \r
-# Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, Slovene, \r
-# Spanish, Swedish, and Ukrainian.\r
-\r
-OUTPUT_LANGUAGE        = English\r
-\r
-# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will \r
-# include brief member descriptions after the members that are listed in \r
-# the file and class documentation (similar to JavaDoc). \r
-# Set to NO to disable this.\r
-\r
-BRIEF_MEMBER_DESC      = YES\r
-\r
-# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend \r
-# the brief description of a member or function before the detailed description. \r
-# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the \r
-# brief descriptions will be completely suppressed.\r
-\r
-REPEAT_BRIEF           = YES\r
-\r
-# This tag implements a quasi-intelligent brief description abbreviator \r
-# that is used to form the text in various listings. Each string \r
-# in this list, if found as the leading text of the brief description, will be \r
-# stripped from the text and the result after processing the whole list, is \r
-# used as the annotated text. Otherwise, the brief description is used as-is. \r
-# If left blank, the following values are used ("$name" is automatically \r
-# replaced with the name of the entity): "The $name class" "The $name widget" \r
-# "The $name file" "is" "provides" "specifies" "contains" \r
-# "represents" "a" "an" "the"\r
-\r
-ABBREVIATE_BRIEF       = "The $name class" \\r
-                         "The $name widget" \\r
-                         "The $name file" \\r
-                         is \\r
-                         provides \\r
-                         specifies \\r
-                         contains \\r
-                         represents \\r
-                         a \\r
-                         an \\r
-                         the\r
-\r
-# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then \r
-# Doxygen will generate a detailed section even if there is only a brief \r
-# description.\r
-\r
-ALWAYS_DETAILED_SEC    = NO\r
-\r
-# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all \r
-# inherited members of a class in the documentation of that class as if those \r
-# members were ordinary class members. Constructors, destructors and assignment \r
-# operators of the base classes will not be shown.\r
-\r
-INLINE_INHERITED_MEMB  = NO\r
-\r
-# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full \r
-# path before files name in the file list and in the header files. If set \r
-# to NO the shortest path that makes the file name unique will be used.\r
-\r
-FULL_PATH_NAMES        = YES\r
-\r
-# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag \r
-# can be used to strip a user-defined part of the path. Stripping is \r
-# only done if one of the specified strings matches the left-hand part of \r
-# the path. The tag can be used to show relative paths in the file list. \r
-# If left blank the directory from which doxygen is run is used as the \r
-# path to strip.\r
-\r
-STRIP_FROM_PATH        = \r
-\r
-# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of \r
-# the path mentioned in the documentation of a class, which tells \r
-# the reader which header file to include in order to use a class. \r
-# If left blank only the name of the header file containing the class \r
-# definition is used. Otherwise one should specify the include paths that \r
-# are normally passed to the compiler using the -I flag.\r
-\r
-STRIP_FROM_INC_PATH    = \r
-\r
-# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter \r
-# (but less readable) file names. This can be useful is your file systems \r
-# doesn't support long names like on DOS, Mac, or CD-ROM.\r
-\r
-SHORT_NAMES            = YES\r
-\r
-# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen \r
-# will interpret the first line (until the first dot) of a JavaDoc-style \r
-# comment as the brief description. If set to NO, the JavaDoc \r
-# comments will behave just like regular Qt-style comments \r
-# (thus requiring an explicit @brief command for a brief description.)\r
-\r
-JAVADOC_AUTOBRIEF      = NO\r
-\r
-# If the QT_AUTOBRIEF tag is set to YES then Doxygen will \r
-# interpret the first line (until the first dot) of a Qt-style \r
-# comment as the brief description. If set to NO, the comments \r
-# will behave just like regular Qt-style comments (thus requiring \r
-# an explicit \brief command for a brief description.)\r
-\r
-QT_AUTOBRIEF           = NO\r
-\r
-# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen \r
-# treat a multi-line C++ special comment block (i.e. a block of //! or /// \r
-# comments) as a brief description. This used to be the default behaviour. \r
-# The new default is to treat a multi-line C++ comment block as a detailed \r
-# description. Set this tag to YES if you prefer the old behaviour instead.\r
-\r
-MULTILINE_CPP_IS_BRIEF = NO\r
-\r
-# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented \r
-# member inherits the documentation from any documented member that it \r
-# re-implements.\r
-\r
-INHERIT_DOCS           = YES\r
-\r
-# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce \r
-# a new page for each member. If set to NO, the documentation of a member will \r
-# be part of the file/class/namespace that contains it.\r
-\r
-SEPARATE_MEMBER_PAGES  = NO\r
-\r
-# The TAB_SIZE tag can be used to set the number of spaces in a tab. \r
-# Doxygen uses this value to replace tabs by spaces in code fragments.\r
-\r
-TAB_SIZE               = 4\r
-\r
-# This tag can be used to specify a number of aliases that acts \r
-# as commands in the documentation. An alias has the form "name=value". \r
-# For example adding "sideeffect=\par Side Effects:\n" will allow you to \r
-# put the command \sideeffect (or @sideeffect) in the documentation, which \r
-# will result in a user-defined paragraph with heading "Side Effects:". \r
-# You can put \n's in the value part of an alias to insert newlines.\r
-\r
-ALIASES                = \r
-\r
-# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C \r
-# sources only. Doxygen will then generate output that is more tailored for C. \r
-# For instance, some of the names that are used will be different. The list \r
-# of all members will be omitted, etc.\r
-\r
-OPTIMIZE_OUTPUT_FOR_C  = YES\r
-\r
-# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java \r
-# sources only. Doxygen will then generate output that is more tailored for \r
-# Java. For instance, namespaces will be presented as packages, qualified \r
-# scopes will look different, etc.\r
-\r
-OPTIMIZE_OUTPUT_JAVA   = NO\r
-\r
-# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran \r
-# sources only. Doxygen will then generate output that is more tailored for \r
-# Fortran.\r
-\r
-OPTIMIZE_FOR_FORTRAN   = NO\r
-\r
-# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL \r
-# sources. Doxygen will then generate output that is tailored for \r
-# VHDL.\r
-\r
-OPTIMIZE_OUTPUT_VHDL   = NO\r
-\r
-# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want \r
-# to include (a tag file for) the STL sources as input, then you should \r
-# set this tag to YES in order to let doxygen match functions declarations and \r
-# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. \r
-# func(std::string) {}). This also make the inheritance and collaboration \r
-# diagrams that involve STL classes more complete and accurate.\r
-\r
-BUILTIN_STL_SUPPORT    = NO\r
-\r
-# If you use Microsoft's C++/CLI language, you should set this option to YES to\r
-# enable parsing support.\r
-\r
-CPP_CLI_SUPPORT        = NO\r
-\r
-# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. \r
-# Doxygen will parse them like normal C++ but will assume all classes use public \r
-# instead of private inheritance when no explicit protection keyword is present.\r
-\r
-SIP_SUPPORT            = NO\r
-\r
-# For Microsoft's IDL there are propget and propput attributes to indicate getter \r
-# and setter methods for a property. Setting this option to YES (the default) \r
-# will make doxygen to replace the get and set methods by a property in the \r
-# documentation. This will only work if the methods are indeed getting or \r
-# setting a simple type. If this is not the case, or you want to show the \r
-# methods anyway, you should set this option to NO.\r
-\r
-IDL_PROPERTY_SUPPORT   = YES\r
-\r
-# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC \r
-# tag is set to YES, then doxygen will reuse the documentation of the first \r
-# member in the group (if any) for the other members of the group. By default \r
-# all members of a group must be documented explicitly.\r
-\r
-DISTRIBUTE_GROUP_DOC   = NO\r
-\r
-# Set the SUBGROUPING tag to YES (the default) to allow class member groups of \r
-# the same type (for instance a group of public functions) to be put as a \r
-# subgroup of that type (e.g. under the Public Functions section). Set it to \r
-# NO to prevent subgrouping. Alternatively, this can be done per class using \r
-# the \nosubgrouping command.\r
-\r
-SUBGROUPING            = YES\r
-\r
-# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum \r
-# is documented as struct, union, or enum with the name of the typedef. So \r
-# typedef struct TypeS {} TypeT, will appear in the documentation as a struct \r
-# with name TypeT. When disabled the typedef will appear as a member of a file, \r
-# namespace, or class. And the struct will be named TypeS. This can typically \r
-# be useful for C code in case the coding convention dictates that all compound \r
-# types are typedef'ed and only the typedef is referenced, never the tag name.\r
-\r
-TYPEDEF_HIDES_STRUCT   = NO\r
-\r
-# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to \r
-# determine which symbols to keep in memory and which to flush to disk.\r
-# When the cache is full, less often used symbols will be written to disk.\r
-# For small to medium size projects (<1000 input files) the default value is \r
-# probably good enough. For larger projects a too small cache size can cause \r
-# doxygen to be busy swapping symbols to and from disk most of the time \r
-# causing a significant performance penality. \r
-# If the system has enough physical memory increasing the cache will improve the \r
-# performance by keeping more symbols in memory. Note that the value works on \r
-# a logarithmic scale so increasing the size by one will rougly double the \r
-# memory usage. The cache size is given by this formula: \r
-# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, \r
-# corresponding to a cache size of 2^16 = 65536 symbols\r
-\r
-SYMBOL_CACHE_SIZE      = 0\r
-\r
-#---------------------------------------------------------------------------\r
-# Build related configuration options\r
-#---------------------------------------------------------------------------\r
-\r
-# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in \r
-# documentation are documented, even if no documentation was available. \r
-# Private class members and static file members will be hidden unless \r
-# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES\r
-\r
-EXTRACT_ALL            = YES\r
-\r
-# If the EXTRACT_PRIVATE tag is set to YES all private members of a class \r
-# will be included in the documentation.\r
-\r
-EXTRACT_PRIVATE        = YES\r
-\r
-# If the EXTRACT_STATIC tag is set to YES all static members of a file \r
-# will be included in the documentation.\r
-\r
-EXTRACT_STATIC         = YES\r
-\r
-# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) \r
-# defined locally in source files will be included in the documentation. \r
-# If set to NO only classes defined in header files are included.\r
-\r
-EXTRACT_LOCAL_CLASSES  = YES\r
-\r
-# This flag is only useful for Objective-C code. When set to YES local \r
-# methods, which are defined in the implementation section but not in \r
-# the interface are included in the documentation. \r
-# If set to NO (the default) only methods in the interface are included.\r
-\r
-EXTRACT_LOCAL_METHODS  = NO\r
-\r
-# If this flag is set to YES, the members of anonymous namespaces will be \r
-# extracted and appear in the documentation as a namespace called \r
-# 'anonymous_namespace{file}', where file will be replaced with the base \r
-# name of the file that contains the anonymous namespace. By default \r
-# anonymous namespace are hidden.\r
-\r
-EXTRACT_ANON_NSPACES   = NO\r
-\r
-# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all \r
-# undocumented members of documented classes, files or namespaces. \r
-# If set to NO (the default) these members will be included in the \r
-# various overviews, but no documentation section is generated. \r
-# This option has no effect if EXTRACT_ALL is enabled.\r
-\r
-HIDE_UNDOC_MEMBERS     = NO\r
-\r
-# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all \r
-# undocumented classes that are normally visible in the class hierarchy. \r
-# If set to NO (the default) these classes will be included in the various \r
-# overviews. This option has no effect if EXTRACT_ALL is enabled.\r
-\r
-HIDE_UNDOC_CLASSES     = NO\r
-\r
-# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all \r
-# friend (class|struct|union) declarations. \r
-# If set to NO (the default) these declarations will be included in the \r
-# documentation.\r
-\r
-HIDE_FRIEND_COMPOUNDS  = NO\r
-\r
-# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any \r
-# documentation blocks found inside the body of a function. \r
-# If set to NO (the default) these blocks will be appended to the \r
-# function's detailed documentation block.\r
-\r
-HIDE_IN_BODY_DOCS      = NO\r
-\r
-# The INTERNAL_DOCS tag determines if documentation \r
-# that is typed after a \internal command is included. If the tag is set \r
-# to NO (the default) then the documentation will be excluded. \r
-# Set it to YES to include the internal documentation.\r
-\r
-INTERNAL_DOCS          = NO\r
-\r
-# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate \r
-# file names in lower-case letters. If set to YES upper-case letters are also \r
-# allowed. This is useful if you have classes or files whose names only differ \r
-# in case and if your file system supports case sensitive file names. Windows \r
-# and Mac users are advised to set this option to NO.\r
-\r
-CASE_SENSE_NAMES       = NO\r
-\r
-# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen \r
-# will show members with their full class and namespace scopes in the \r
-# documentation. If set to YES the scope will be hidden.\r
-\r
-HIDE_SCOPE_NAMES       = NO\r
-\r
-# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen \r
-# will put a list of the files that are included by a file in the documentation \r
-# of that file.\r
-\r
-SHOW_INCLUDE_FILES     = YES\r
-\r
-# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] \r
-# is inserted in the documentation for inline members.\r
-\r
-INLINE_INFO            = YES\r
-\r
-# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen \r
-# will sort the (detailed) documentation of file and class members \r
-# alphabetically by member name. If set to NO the members will appear in \r
-# declaration order.\r
-\r
-SORT_MEMBER_DOCS       = YES\r
-\r
-# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the \r
-# brief documentation of file, namespace and class members alphabetically \r
-# by member name. If set to NO (the default) the members will appear in \r
-# declaration order.\r
-\r
-SORT_BRIEF_DOCS        = NO\r
-\r
-# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the \r
-# hierarchy of group names into alphabetical order. If set to NO (the default) \r
-# the group names will appear in their defined order.\r
-\r
-SORT_GROUP_NAMES       = NO\r
-\r
-# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be \r
-# sorted by fully-qualified names, including namespaces. If set to \r
-# NO (the default), the class list will be sorted only by class name, \r
-# not including the namespace part. \r
-# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.\r
-# Note: This option applies only to the class list, not to the \r
-# alphabetical list.\r
-\r
-SORT_BY_SCOPE_NAME     = NO\r
-\r
-# The GENERATE_TODOLIST tag can be used to enable (YES) or \r
-# disable (NO) the todo list. This list is created by putting \todo \r
-# commands in the documentation.\r
-\r
-GENERATE_TODOLIST      = NO\r
-\r
-# The GENERATE_TESTLIST tag can be used to enable (YES) or \r
-# disable (NO) the test list. This list is created by putting \test \r
-# commands in the documentation.\r
-\r
-GENERATE_TESTLIST      = NO\r
-\r
-# The GENERATE_BUGLIST tag can be used to enable (YES) or \r
-# disable (NO) the bug list. This list is created by putting \bug \r
-# commands in the documentation.\r
-\r
-GENERATE_BUGLIST       = NO\r
-\r
-# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or \r
-# disable (NO) the deprecated list. This list is created by putting \r
-# \deprecated commands in the documentation.\r
-\r
-GENERATE_DEPRECATEDLIST= YES\r
-\r
-# The ENABLED_SECTIONS tag can be used to enable conditional \r
-# documentation sections, marked by \if sectionname ... \endif.\r
-\r
-ENABLED_SECTIONS       = \r
-\r
-# The MAX_INITIALIZER_LINES tag determines the maximum number of lines \r
-# the initial value of a variable or define consists of for it to appear in \r
-# the documentation. If the initializer consists of more lines than specified \r
-# here it will be hidden. Use a value of 0 to hide initializers completely. \r
-# The appearance of the initializer of individual variables and defines in the \r
-# documentation can be controlled using \showinitializer or \hideinitializer \r
-# command in the documentation regardless of this setting.\r
-\r
-MAX_INITIALIZER_LINES  = 30\r
-\r
-# Set the SHOW_USED_FILES tag to NO to disable the list of files generated \r
-# at the bottom of the documentation of classes and structs. If set to YES the \r
-# list will mention the files that were used to generate the documentation.\r
-\r
-SHOW_USED_FILES        = YES\r
-\r
-# If the sources in your project are distributed over multiple directories \r
-# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy \r
-# in the documentation. The default is NO.\r
-\r
-SHOW_DIRECTORIES       = YES\r
-\r
-# Set the SHOW_FILES tag to NO to disable the generation of the Files page.\r
-# This will remove the Files entry from the Quick Index and from the \r
-# Folder Tree View (if specified). The default is YES.\r
-\r
-SHOW_FILES             = YES\r
-\r
-# Set the SHOW_NAMESPACES tag to NO to disable the generation of the \r
-# Namespaces page.  This will remove the Namespaces entry from the Quick Index\r
-# and from the Folder Tree View (if specified). The default is YES.\r
-\r
-SHOW_NAMESPACES        = YES\r
-\r
-# The FILE_VERSION_FILTER tag can be used to specify a program or script that \r
-# doxygen should invoke to get the current version for each file (typically from \r
-# the version control system). Doxygen will invoke the program by executing (via \r
-# popen()) the command <command> <input-file>, where <command> is the value of \r
-# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file \r
-# provided by doxygen. Whatever the program writes to standard output \r
-# is used as the file version. See the manual for examples.\r
-\r
-FILE_VERSION_FILTER    = \r
-\r
-# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by \r
-# doxygen. The layout file controls the global structure of the generated output files \r
-# in an output format independent way. The create the layout file that represents \r
-# doxygen's defaults, run doxygen with the -l option. You can optionally specify a \r
-# file name after the option, if omitted DoxygenLayout.xml will be used as the name \r
-# of the layout file.\r
-\r
-LAYOUT_FILE            = \r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to warning and progress messages\r
-#---------------------------------------------------------------------------\r
-\r
-# The QUIET tag can be used to turn on/off the messages that are generated \r
-# by doxygen. Possible values are YES and NO. If left blank NO is used.\r
-\r
-QUIET                  = YES\r
-\r
-# The WARNINGS tag can be used to turn on/off the warning messages that are \r
-# generated by doxygen. Possible values are YES and NO. If left blank \r
-# NO is used.\r
-\r
-WARNINGS               = YES\r
-\r
-# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings \r
-# for undocumented members. If EXTRACT_ALL is set to YES then this flag will \r
-# automatically be disabled.\r
-\r
-WARN_IF_UNDOCUMENTED   = YES\r
-\r
-# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for \r
-# potential errors in the documentation, such as not documenting some \r
-# parameters in a documented function, or documenting parameters that \r
-# don't exist or using markup commands wrongly.\r
-\r
-WARN_IF_DOC_ERROR      = YES\r
-\r
-# This WARN_NO_PARAMDOC option can be abled to get warnings for \r
-# functions that are documented, but have no documentation for their parameters \r
-# or return value. If set to NO (the default) doxygen will only warn about \r
-# wrong or incomplete parameter documentation, but not about the absence of \r
-# documentation.\r
-\r
-WARN_NO_PARAMDOC       = YES\r
-\r
-# The WARN_FORMAT tag determines the format of the warning messages that \r
-# doxygen can produce. The string should contain the $file, $line, and $text \r
-# tags, which will be replaced by the file and line number from which the \r
-# warning originated and the warning text. Optionally the format may contain \r
-# $version, which will be replaced by the version of the file (if it could \r
-# be obtained via FILE_VERSION_FILTER)\r
-\r
-WARN_FORMAT            = "$file:$line: $text"\r
-\r
-# The WARN_LOGFILE tag can be used to specify a file to which warning \r
-# and error messages should be written. If left blank the output is written \r
-# to stderr.\r
-\r
-WARN_LOGFILE           = \r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the input files\r
-#---------------------------------------------------------------------------\r
-\r
-# The INPUT tag can be used to specify the files and/or directories that contain \r
-# documented source files. You may enter file names like "myfile.cpp" or \r
-# directories like "/usr/src/myproject". Separate the files or directories \r
-# with spaces.\r
-\r
-INPUT                  = ./\r
-\r
-# This tag can be used to specify the character encoding of the source files \r
-# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is \r
-# also the default input encoding. Doxygen uses libiconv (or the iconv built \r
-# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for \r
-# the list of possible encodings.\r
-\r
-INPUT_ENCODING         = UTF-8\r
-\r
-# If the value of the INPUT tag contains directories, you can use the \r
-# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \r
-# and *.h) to filter out the source-files in the directories. If left \r
-# blank the following patterns are tested: \r
-# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx \r
-# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90\r
-\r
-FILE_PATTERNS          = *.h \\r
-                         *.c \\r
-                                                *.txt\r
-\r
-# The RECURSIVE tag can be used to turn specify whether or not subdirectories \r
-# should be searched for input files as well. Possible values are YES and NO. \r
-# If left blank NO is used.\r
-\r
-RECURSIVE              = YES\r
-\r
-# The EXCLUDE tag can be used to specify files and/or directories that should \r
-# excluded from the INPUT source files. This way you can easily exclude a \r
-# subdirectory from a directory tree whose root is specified with the INPUT tag.\r
-\r
-EXCLUDE                = \r
-\r
-# The EXCLUDE_SYMLINKS tag can be used select whether or not files or \r
-# directories that are symbolic links (a Unix filesystem feature) are excluded \r
-# from the input.\r
-\r
-EXCLUDE_SYMLINKS       = NO\r
-\r
-# If the value of the INPUT tag contains directories, you can use the \r
-# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude \r
-# certain files from those directories. Note that the wildcards are matched \r
-# against the file with absolute path, so to exclude all test directories \r
-# for example use the pattern */test/*\r
-\r
-EXCLUDE_PATTERNS       = */LowLevel/USBMode.h\r
-\r
-# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names \r
-# (namespaces, classes, functions, etc.) that should be excluded from the \r
-# output. The symbol name can be a fully qualified name, a word, or if the \r
-# wildcard * is used, a substring. Examples: ANamespace, AClass, \r
-# AClass::ANamespace, ANamespace::*Test\r
-\r
-EXCLUDE_SYMBOLS        = __*\r
-\r
-# The EXAMPLE_PATH tag can be used to specify one or more files or \r
-# directories that contain example code fragments that are included (see \r
-# the \include command).\r
-\r
-EXAMPLE_PATH           = \r
-\r
-# If the value of the EXAMPLE_PATH tag contains directories, you can use the \r
-# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \r
-# and *.h) to filter out the source-files in the directories. If left \r
-# blank all files are included.\r
-\r
-EXAMPLE_PATTERNS       = *\r
-\r
-# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be \r
-# searched for input files to be used with the \include or \dontinclude \r
-# commands irrespective of the value of the RECURSIVE tag. \r
-# Possible values are YES and NO. If left blank NO is used.\r
-\r
-EXAMPLE_RECURSIVE      = NO\r
-\r
-# The IMAGE_PATH tag can be used to specify one or more files or \r
-# directories that contain image that are included in the documentation (see \r
-# the \image command).\r
-\r
-IMAGE_PATH             = \r
-\r
-# The INPUT_FILTER tag can be used to specify a program that doxygen should \r
-# invoke to filter for each input file. Doxygen will invoke the filter program \r
-# by executing (via popen()) the command <filter> <input-file>, where <filter> \r
-# is the value of the INPUT_FILTER tag, and <input-file> is the name of an \r
-# input file. Doxygen will then use the output that the filter program writes \r
-# to standard output.  If FILTER_PATTERNS is specified, this tag will be \r
-# ignored.\r
-\r
-INPUT_FILTER           = \r
-\r
-# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern \r
-# basis.  Doxygen will compare the file name with each pattern and apply the \r
-# filter if there is a match.  The filters are a list of the form: \r
-# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further \r
-# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER \r
-# is applied to all files.\r
-\r
-FILTER_PATTERNS        = \r
-\r
-# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using \r
-# INPUT_FILTER) will be used to filter the input files when producing source \r
-# files to browse (i.e. when SOURCE_BROWSER is set to YES).\r
-\r
-FILTER_SOURCE_FILES    = NO\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to source browsing\r
-#---------------------------------------------------------------------------\r
-\r
-# If the SOURCE_BROWSER tag is set to YES then a list of source files will \r
-# be generated. Documented entities will be cross-referenced with these sources. \r
-# Note: To get rid of all source code in the generated output, make sure also \r
-# VERBATIM_HEADERS is set to NO.\r
-\r
-SOURCE_BROWSER         = NO\r
-\r
-# Setting the INLINE_SOURCES tag to YES will include the body \r
-# of functions and classes directly in the documentation.\r
-\r
-INLINE_SOURCES         = NO\r
-\r
-# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct \r
-# doxygen to hide any special comment blocks from generated source code \r
-# fragments. Normal C and C++ comments will always remain visible.\r
-\r
-STRIP_CODE_COMMENTS    = YES\r
-\r
-# If the REFERENCED_BY_RELATION tag is set to YES \r
-# then for each documented function all documented \r
-# functions referencing it will be listed.\r
-\r
-REFERENCED_BY_RELATION = NO\r
-\r
-# If the REFERENCES_RELATION tag is set to YES \r
-# then for each documented function all documented entities \r
-# called/used by that function will be listed.\r
-\r
-REFERENCES_RELATION    = NO\r
-\r
-# If the REFERENCES_LINK_SOURCE tag is set to YES (the default)\r
-# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from\r
-# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will\r
-# link to the source code.  Otherwise they will link to the documentstion.\r
-\r
-REFERENCES_LINK_SOURCE = NO\r
-\r
-# If the USE_HTAGS tag is set to YES then the references to source code \r
-# will point to the HTML generated by the htags(1) tool instead of doxygen \r
-# built-in source browser. The htags tool is part of GNU's global source \r
-# tagging system (see http://www.gnu.org/software/global/global.html). You \r
-# will need version 4.8.6 or higher.\r
-\r
-USE_HTAGS              = NO\r
-\r
-# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen \r
-# will generate a verbatim copy of the header file for each class for \r
-# which an include is specified. Set to NO to disable this.\r
-\r
-VERBATIM_HEADERS       = NO\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the alphabetical class index\r
-#---------------------------------------------------------------------------\r
-\r
-# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index \r
-# of all compounds will be generated. Enable this if the project \r
-# contains a lot of classes, structs, unions or interfaces.\r
-\r
-ALPHABETICAL_INDEX     = YES\r
-\r
-# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then \r
-# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns \r
-# in which this list will be split (can be a number in the range [1..20])\r
-\r
-COLS_IN_ALPHA_INDEX    = 5\r
-\r
-# In case all classes in a project start with a common prefix, all \r
-# classes will be put under the same header in the alphabetical index. \r
-# The IGNORE_PREFIX tag can be used to specify one or more prefixes that \r
-# should be ignored while generating the index headers.\r
-\r
-IGNORE_PREFIX          = \r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the HTML output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_HTML tag is set to YES (the default) Doxygen will \r
-# generate HTML output.\r
-\r
-GENERATE_HTML          = YES\r
-\r
-# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. \r
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
-# put in front of it. If left blank `html' will be used as the default path.\r
-\r
-HTML_OUTPUT            = html\r
-\r
-# The HTML_FILE_EXTENSION tag can be used to specify the file extension for \r
-# each generated HTML page (for example: .htm,.php,.asp). If it is left blank \r
-# doxygen will generate files with .html extension.\r
-\r
-HTML_FILE_EXTENSION    = .html\r
-\r
-# The HTML_HEADER tag can be used to specify a personal HTML header for \r
-# each generated HTML page. If it is left blank doxygen will generate a \r
-# standard header.\r
-\r
-HTML_HEADER            = \r
-\r
-# The HTML_FOOTER tag can be used to specify a personal HTML footer for \r
-# each generated HTML page. If it is left blank doxygen will generate a \r
-# standard footer.\r
-\r
-HTML_FOOTER            = \r
-\r
-# The HTML_STYLESHEET tag can be used to specify a user-defined cascading \r
-# style sheet that is used by each HTML page. It can be used to \r
-# fine-tune the look of the HTML output. If the tag is left blank doxygen \r
-# will generate a default style sheet. Note that doxygen will try to copy \r
-# the style sheet file to the HTML output directory, so don't put your own \r
-# stylesheet in the HTML output directory as well, or it will be erased!\r
-\r
-HTML_STYLESHEET        = \r
-\r
-# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, \r
-# files or namespaces will be aligned in HTML using tables. If set to \r
-# NO a bullet list will be used.\r
-\r
-HTML_ALIGN_MEMBERS     = YES\r
-\r
-# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML \r
-# documentation will contain sections that can be hidden and shown after the \r
-# page has loaded. For this to work a browser that supports \r
-# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox \r
-# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari).\r
-\r
-HTML_DYNAMIC_SECTIONS  = YES\r
-\r
-# If the GENERATE_DOCSET tag is set to YES, additional index files \r
-# will be generated that can be used as input for Apple's Xcode 3 \r
-# integrated development environment, introduced with OSX 10.5 (Leopard). \r
-# To create a documentation set, doxygen will generate a Makefile in the \r
-# HTML output directory. Running make will produce the docset in that \r
-# directory and running "make install" will install the docset in \r
-# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find \r
-# it at startup. \r
-# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information.\r
-\r
-GENERATE_DOCSET        = NO\r
-\r
-# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the \r
-# feed. A documentation feed provides an umbrella under which multiple \r
-# documentation sets from a single provider (such as a company or product suite) \r
-# can be grouped.\r
-\r
-DOCSET_FEEDNAME        = "Doxygen generated docs"\r
-\r
-# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that \r
-# should uniquely identify the documentation set bundle. This should be a \r
-# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen \r
-# will append .docset to the name.\r
-\r
-DOCSET_BUNDLE_ID       = org.doxygen.Project\r
-\r
-# If the GENERATE_HTMLHELP tag is set to YES, additional index files \r
-# will be generated that can be used as input for tools like the \r
-# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) \r
-# of the generated HTML documentation.\r
-\r
-GENERATE_HTMLHELP      = NO\r
-\r
-# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can \r
-# be used to specify the file name of the resulting .chm file. You \r
-# can add a path in front of the file if the result should not be \r
-# written to the html output directory.\r
-\r
-CHM_FILE               = \r
-\r
-# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can \r
-# be used to specify the location (absolute path including file name) of \r
-# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run \r
-# the HTML help compiler on the generated index.hhp.\r
-\r
-HHC_LOCATION           = \r
-\r
-# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag \r
-# controls if a separate .chi index file is generated (YES) or that \r
-# it should be included in the master .chm file (NO).\r
-\r
-GENERATE_CHI           = NO\r
-\r
-# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING\r
-# is used to encode HtmlHelp index (hhk), content (hhc) and project file\r
-# content.\r
-\r
-CHM_INDEX_ENCODING     = \r
-\r
-# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag \r
-# controls whether a binary table of contents is generated (YES) or a \r
-# normal table of contents (NO) in the .chm file.\r
-\r
-BINARY_TOC             = NO\r
-\r
-# The TOC_EXPAND flag can be set to YES to add extra items for group members \r
-# to the contents of the HTML help documentation and to the tree view.\r
-\r
-TOC_EXPAND             = YES\r
-\r
-# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER \r
-# are set, an additional index file will be generated that can be used as input for \r
-# Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated \r
-# HTML documentation.\r
-\r
-GENERATE_QHP           = NO\r
-\r
-# If the QHG_LOCATION tag is specified, the QCH_FILE tag can \r
-# be used to specify the file name of the resulting .qch file. \r
-# The path specified is relative to the HTML output folder.\r
-\r
-QCH_FILE               = \r
-\r
-# The QHP_NAMESPACE tag specifies the namespace to use when generating \r
-# Qt Help Project output. For more information please see \r
-# <a href="http://doc.trolltech.com/qthelpproject.html#namespace">Qt Help Project / Namespace</a>.\r
-\r
-QHP_NAMESPACE          = org.doxygen.Project\r
-\r
-# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating \r
-# Qt Help Project output. For more information please see \r
-# <a href="http://doc.trolltech.com/qthelpproject.html#virtual-folders">Qt Help Project / Virtual Folders</a>.\r
-\r
-QHP_VIRTUAL_FOLDER     = doc\r
-\r
-# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can \r
-# be used to specify the location of Qt's qhelpgenerator. \r
-# If non-empty doxygen will try to run qhelpgenerator on the generated \r
-# .qhp file .\r
-\r
-QHG_LOCATION           = \r
-\r
-# The DISABLE_INDEX tag can be used to turn on/off the condensed index at \r
-# top of each HTML page. The value NO (the default) enables the index and \r
-# the value YES disables it.\r
-\r
-DISABLE_INDEX          = NO\r
-\r
-# This tag can be used to set the number of enum values (range [1..20]) \r
-# that doxygen will group on one line in the generated HTML documentation.\r
-\r
-ENUM_VALUES_PER_LINE   = 1\r
-\r
-# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index\r
-# structure should be generated to display hierarchical information.\r
-# If the tag value is set to FRAME, a side panel will be generated\r
-# containing a tree-like index structure (just like the one that \r
-# is generated for HTML Help). For this to work a browser that supports \r
-# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, \r
-# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are \r
-# probably better off using the HTML help feature. Other possible values \r
-# for this tag are: HIERARCHIES, which will generate the Groups, Directories,\r
-# and Class Hierarchy pages using a tree view instead of an ordered list;\r
-# ALL, which combines the behavior of FRAME and HIERARCHIES; and NONE, which\r
-# disables this behavior completely. For backwards compatibility with previous\r
-# releases of Doxygen, the values YES and NO are equivalent to FRAME and NONE\r
-# respectively.\r
-\r
-GENERATE_TREEVIEW      = YES\r
-\r
-# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be \r
-# used to set the initial width (in pixels) of the frame in which the tree \r
-# is shown.\r
-\r
-TREEVIEW_WIDTH         = 250\r
-\r
-# Use this tag to change the font size of Latex formulas included \r
-# as images in the HTML documentation. The default is 10. Note that \r
-# when you change the font size after a successful doxygen run you need \r
-# to manually remove any form_*.png images from the HTML output directory \r
-# to force them to be regenerated.\r
-\r
-FORMULA_FONTSIZE       = 10\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the LaTeX output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will \r
-# generate Latex output.\r
-\r
-GENERATE_LATEX         = NO\r
-\r
-# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. \r
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
-# put in front of it. If left blank `latex' will be used as the default path.\r
-\r
-LATEX_OUTPUT           = latex\r
-\r
-# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be \r
-# invoked. If left blank `latex' will be used as the default command name.\r
-\r
-LATEX_CMD_NAME         = latex\r
-\r
-# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to \r
-# generate index for LaTeX. If left blank `makeindex' will be used as the \r
-# default command name.\r
-\r
-MAKEINDEX_CMD_NAME     = makeindex\r
-\r
-# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact \r
-# LaTeX documents. This may be useful for small projects and may help to \r
-# save some trees in general.\r
-\r
-COMPACT_LATEX          = NO\r
-\r
-# The PAPER_TYPE tag can be used to set the paper type that is used \r
-# by the printer. Possible values are: a4, a4wide, letter, legal and \r
-# executive. If left blank a4wide will be used.\r
-\r
-PAPER_TYPE             = a4wide\r
-\r
-# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX \r
-# packages that should be included in the LaTeX output.\r
-\r
-EXTRA_PACKAGES         = \r
-\r
-# The LATEX_HEADER tag can be used to specify a personal LaTeX header for \r
-# the generated latex document. The header should contain everything until \r
-# the first chapter. If it is left blank doxygen will generate a \r
-# standard header. Notice: only use this tag if you know what you are doing!\r
-\r
-LATEX_HEADER           = \r
-\r
-# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated \r
-# is prepared for conversion to pdf (using ps2pdf). The pdf file will \r
-# contain links (just like the HTML output) instead of page references \r
-# This makes the output suitable for online browsing using a pdf viewer.\r
-\r
-PDF_HYPERLINKS         = YES\r
-\r
-# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of \r
-# plain latex in the generated Makefile. Set this option to YES to get a \r
-# higher quality PDF documentation.\r
-\r
-USE_PDFLATEX           = YES\r
-\r
-# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. \r
-# command to the generated LaTeX files. This will instruct LaTeX to keep \r
-# running if errors occur, instead of asking the user for help. \r
-# This option is also used when generating formulas in HTML.\r
-\r
-LATEX_BATCHMODE        = NO\r
-\r
-# If LATEX_HIDE_INDICES is set to YES then doxygen will not \r
-# include the index chapters (such as File Index, Compound Index, etc.) \r
-# in the output.\r
-\r
-LATEX_HIDE_INDICES     = NO\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the RTF output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output \r
-# The RTF output is optimized for Word 97 and may not look very pretty with \r
-# other RTF readers or editors.\r
-\r
-GENERATE_RTF           = NO\r
-\r
-# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. \r
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
-# put in front of it. If left blank `rtf' will be used as the default path.\r
-\r
-RTF_OUTPUT             = rtf\r
-\r
-# If the COMPACT_RTF tag is set to YES Doxygen generates more compact \r
-# RTF documents. This may be useful for small projects and may help to \r
-# save some trees in general.\r
-\r
-COMPACT_RTF            = NO\r
-\r
-# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated \r
-# will contain hyperlink fields. The RTF file will \r
-# contain links (just like the HTML output) instead of page references. \r
-# This makes the output suitable for online browsing using WORD or other \r
-# programs which support those fields. \r
-# Note: wordpad (write) and others do not support links.\r
-\r
-RTF_HYPERLINKS         = NO\r
-\r
-# Load stylesheet definitions from file. Syntax is similar to doxygen's \r
-# config file, i.e. a series of assignments. You only have to provide \r
-# replacements, missing definitions are set to their default value.\r
-\r
-RTF_STYLESHEET_FILE    = \r
-\r
-# Set optional variables used in the generation of an rtf document. \r
-# Syntax is similar to doxygen's config file.\r
-\r
-RTF_EXTENSIONS_FILE    = \r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the man page output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_MAN tag is set to YES (the default) Doxygen will \r
-# generate man pages\r
-\r
-GENERATE_MAN           = NO\r
-\r
-# The MAN_OUTPUT tag is used to specify where the man pages will be put. \r
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
-# put in front of it. If left blank `man' will be used as the default path.\r
-\r
-MAN_OUTPUT             = man\r
-\r
-# The MAN_EXTENSION tag determines the extension that is added to \r
-# the generated man pages (default is the subroutine's section .3)\r
-\r
-MAN_EXTENSION          = .3\r
-\r
-# If the MAN_LINKS tag is set to YES and Doxygen generates man output, \r
-# then it will generate one additional man file for each entity \r
-# documented in the real man page(s). These additional files \r
-# only source the real man page, but without them the man command \r
-# would be unable to find the correct page. The default is NO.\r
-\r
-MAN_LINKS              = NO\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the XML output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_XML tag is set to YES Doxygen will \r
-# generate an XML file that captures the structure of \r
-# the code including all documentation.\r
-\r
-GENERATE_XML           = NO\r
-\r
-# The XML_OUTPUT tag is used to specify where the XML pages will be put. \r
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
-# put in front of it. If left blank `xml' will be used as the default path.\r
-\r
-XML_OUTPUT             = xml\r
-\r
-# The XML_SCHEMA tag can be used to specify an XML schema, \r
-# which can be used by a validating XML parser to check the \r
-# syntax of the XML files.\r
-\r
-XML_SCHEMA             = \r
-\r
-# The XML_DTD tag can be used to specify an XML DTD, \r
-# which can be used by a validating XML parser to check the \r
-# syntax of the XML files.\r
-\r
-XML_DTD                = \r
-\r
-# If the XML_PROGRAMLISTING tag is set to YES Doxygen will \r
-# dump the program listings (including syntax highlighting \r
-# and cross-referencing information) to the XML output. Note that \r
-# enabling this will significantly increase the size of the XML output.\r
-\r
-XML_PROGRAMLISTING     = YES\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options for the AutoGen Definitions output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will \r
-# generate an AutoGen Definitions (see autogen.sf.net) file \r
-# that captures the structure of the code including all \r
-# documentation. Note that this feature is still experimental \r
-# and incomplete at the moment.\r
-\r
-GENERATE_AUTOGEN_DEF   = NO\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the Perl module output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_PERLMOD tag is set to YES Doxygen will \r
-# generate a Perl module file that captures the structure of \r
-# the code including all documentation. Note that this \r
-# feature is still experimental and incomplete at the \r
-# moment.\r
-\r
-GENERATE_PERLMOD       = NO\r
-\r
-# If the PERLMOD_LATEX tag is set to YES Doxygen will generate \r
-# the necessary Makefile rules, Perl scripts and LaTeX code to be able \r
-# to generate PDF and DVI output from the Perl module output.\r
-\r
-PERLMOD_LATEX          = NO\r
-\r
-# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be \r
-# nicely formatted so it can be parsed by a human reader.  This is useful \r
-# if you want to understand what is going on.  On the other hand, if this \r
-# tag is set to NO the size of the Perl module output will be much smaller \r
-# and Perl will parse it just the same.\r
-\r
-PERLMOD_PRETTY         = YES\r
-\r
-# The names of the make variables in the generated doxyrules.make file \r
-# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. \r
-# This is useful so different doxyrules.make files included by the same \r
-# Makefile don't overwrite each other's variables.\r
-\r
-PERLMOD_MAKEVAR_PREFIX = \r
-\r
-#---------------------------------------------------------------------------\r
-# Configuration options related to the preprocessor   \r
-#---------------------------------------------------------------------------\r
-\r
-# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will \r
-# evaluate all C-preprocessor directives found in the sources and include \r
-# files.\r
-\r
-ENABLE_PREPROCESSING   = YES\r
-\r
-# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro \r
-# names in the source code. If set to NO (the default) only conditional \r
-# compilation will be performed. Macro expansion can be done in a controlled \r
-# way by setting EXPAND_ONLY_PREDEF to YES.\r
-\r
-MACRO_EXPANSION        = YES\r
-\r
-# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES \r
-# then the macro expansion is limited to the macros specified with the \r
-# PREDEFINED and EXPAND_AS_DEFINED tags.\r
-\r
-EXPAND_ONLY_PREDEF     = YES\r
-\r
-# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files \r
-# in the INCLUDE_PATH (see below) will be search if a #include is found.\r
-\r
-SEARCH_INCLUDES        = YES\r
-\r
-# The INCLUDE_PATH tag can be used to specify one or more directories that \r
-# contain include files that are not input files but should be processed by \r
-# the preprocessor.\r
-\r
-INCLUDE_PATH           = \r
-\r
-# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard \r
-# patterns (like *.h and *.hpp) to filter out the header-files in the \r
-# directories. If left blank, the patterns specified with FILE_PATTERNS will \r
-# be used.\r
-\r
-INCLUDE_FILE_PATTERNS  = \r
-\r
-# The PREDEFINED tag can be used to specify one or more macro names that \r
-# are defined before the preprocessor is started (similar to the -D option of \r
-# gcc). The argument of the tag is a list of macros of the form: name \r
-# or name=definition (no spaces). If the definition and the = are \r
-# omitted =1 is assumed. To prevent a macro definition from being \r
-# undefined via #undef or recursively expanded use the := operator \r
-# instead of the = operator.\r
-\r
-PREDEFINED             = __DOXYGEN__\r
-\r
-# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then \r
-# this tag can be used to specify a list of macro names that should be expanded. \r
-# The macro definition that is found in the sources will be used. \r
-# Use the PREDEFINED tag if you want to use a different macro definition.\r
-\r
-EXPAND_AS_DEFINED      = BUTTLOADTAG\r
-\r
-# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then \r
-# doxygen's preprocessor will remove all function-like macros that are alone \r
-# on a line, have an all uppercase name, and do not end with a semicolon. Such \r
-# function macros are typically used for boiler-plate code, and will confuse \r
-# the parser if not removed.\r
-\r
-SKIP_FUNCTION_MACROS   = YES\r
-\r
-#---------------------------------------------------------------------------\r
-# Configuration::additions related to external references   \r
-#---------------------------------------------------------------------------\r
-\r
-# The TAGFILES option can be used to specify one or more tagfiles. \r
-# Optionally an initial location of the external documentation \r
-# can be added for each tagfile. The format of a tag file without \r
-# this location is as follows: \r
-#   TAGFILES = file1 file2 ... \r
-# Adding location for the tag files is done as follows: \r
-#   TAGFILES = file1=loc1 "file2 = loc2" ... \r
-# where "loc1" and "loc2" can be relative or absolute paths or \r
-# URLs. If a location is present for each tag, the installdox tool \r
-# does not have to be run to correct the links.\r
-# Note that each tag file must have a unique name\r
-# (where the name does NOT include the path)\r
-# If a tag file is not located in the directory in which doxygen \r
-# is run, you must also specify the path to the tagfile here.\r
-\r
-TAGFILES               = \r
-\r
-# When a file name is specified after GENERATE_TAGFILE, doxygen will create \r
-# a tag file that is based on the input files it reads.\r
-\r
-GENERATE_TAGFILE       = \r
-\r
-# If the ALLEXTERNALS tag is set to YES all external classes will be listed \r
-# in the class index. If set to NO only the inherited external classes \r
-# will be listed.\r
-\r
-ALLEXTERNALS           = NO\r
-\r
-# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed \r
-# in the modules index. If set to NO, only the current project's groups will \r
-# be listed.\r
-\r
-EXTERNAL_GROUPS        = YES\r
-\r
-# The PERL_PATH should be the absolute path and name of the perl script \r
-# interpreter (i.e. the result of `which perl').\r
-\r
-PERL_PATH              = /usr/bin/perl\r
-\r
-#---------------------------------------------------------------------------\r
-# Configuration options related to the dot tool   \r
-#---------------------------------------------------------------------------\r
-\r
-# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will \r
-# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base \r
-# or super classes. Setting the tag to NO turns the diagrams off. Note that \r
-# this option is superseded by the HAVE_DOT option below. This is only a \r
-# fallback. It is recommended to install and use dot, since it yields more \r
-# powerful graphs.\r
-\r
-CLASS_DIAGRAMS         = NO\r
-\r
-# You can define message sequence charts within doxygen comments using the \msc \r
-# command. Doxygen will then run the mscgen tool (see \r
-# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the \r
-# documentation. The MSCGEN_PATH tag allows you to specify the directory where \r
-# the mscgen tool resides. If left empty the tool is assumed to be found in the \r
-# default search path.\r
-\r
-MSCGEN_PATH            = \r
-\r
-# If set to YES, the inheritance and collaboration graphs will hide \r
-# inheritance and usage relations if the target is undocumented \r
-# or is not a class.\r
-\r
-HIDE_UNDOC_RELATIONS   = YES\r
-\r
-# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is \r
-# available from the path. This tool is part of Graphviz, a graph visualization \r
-# toolkit from AT&T and Lucent Bell Labs. The other options in this section \r
-# have no effect if this option is set to NO (the default)\r
-\r
-HAVE_DOT               = NO\r
-\r
-# By default doxygen will write a font called FreeSans.ttf to the output \r
-# directory and reference it in all dot files that doxygen generates. This \r
-# font does not include all possible unicode characters however, so when you need \r
-# these (or just want a differently looking font) you can specify the font name \r
-# using DOT_FONTNAME. You need need to make sure dot is able to find the font, \r
-# which can be done by putting it in a standard location or by setting the \r
-# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory \r
-# containing the font.\r
-\r
-DOT_FONTNAME           = FreeSans\r
-\r
-# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. \r
-# The default size is 10pt.\r
-\r
-DOT_FONTSIZE           = 10\r
-\r
-# By default doxygen will tell dot to use the output directory to look for the \r
-# FreeSans.ttf font (which doxygen will put there itself). If you specify a \r
-# different font using DOT_FONTNAME you can set the path where dot \r
-# can find it using this tag.\r
-\r
-DOT_FONTPATH           = \r
-\r
-# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen \r
-# will generate a graph for each documented class showing the direct and \r
-# indirect inheritance relations. Setting this tag to YES will force the \r
-# the CLASS_DIAGRAMS tag to NO.\r
-\r
-CLASS_GRAPH            = NO\r
-\r
-# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen \r
-# will generate a graph for each documented class showing the direct and \r
-# indirect implementation dependencies (inheritance, containment, and \r
-# class references variables) of the class with other documented classes.\r
-\r
-COLLABORATION_GRAPH    = NO\r
-\r
-# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen \r
-# will generate a graph for groups, showing the direct groups dependencies\r
-\r
-GROUP_GRAPHS           = NO\r
-\r
-# If the UML_LOOK tag is set to YES doxygen will generate inheritance and \r
-# collaboration diagrams in a style similar to the OMG's Unified Modeling \r
-# Language.\r
-\r
-UML_LOOK               = NO\r
-\r
-# If set to YES, the inheritance and collaboration graphs will show the \r
-# relations between templates and their instances.\r
-\r
-TEMPLATE_RELATIONS     = NO\r
-\r
-# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT \r
-# tags are set to YES then doxygen will generate a graph for each documented \r
-# file showing the direct and indirect include dependencies of the file with \r
-# other documented files.\r
-\r
-INCLUDE_GRAPH          = NO\r
-\r
-# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and \r
-# HAVE_DOT tags are set to YES then doxygen will generate a graph for each \r
-# documented header file showing the documented files that directly or \r
-# indirectly include this file.\r
-\r
-INCLUDED_BY_GRAPH      = NO\r
-\r
-# If the CALL_GRAPH and HAVE_DOT options are set to YES then \r
-# doxygen will generate a call dependency graph for every global function \r
-# or class method. Note that enabling this option will significantly increase \r
-# the time of a run. So in most cases it will be better to enable call graphs \r
-# for selected functions only using the \callgraph command.\r
-\r
-CALL_GRAPH             = NO\r
-\r
-# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then \r
-# doxygen will generate a caller dependency graph for every global function \r
-# or class method. Note that enabling this option will significantly increase \r
-# the time of a run. So in most cases it will be better to enable caller \r
-# graphs for selected functions only using the \callergraph command.\r
-\r
-CALLER_GRAPH           = NO\r
-\r
-# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen \r
-# will graphical hierarchy of all classes instead of a textual one.\r
-\r
-GRAPHICAL_HIERARCHY    = NO\r
-\r
-# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES \r
-# then doxygen will show the dependencies a directory has on other directories \r
-# in a graphical way. The dependency relations are determined by the #include\r
-# relations between the files in the directories.\r
-\r
-DIRECTORY_GRAPH        = NO\r
-\r
-# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images \r
-# generated by dot. Possible values are png, jpg, or gif\r
-# If left blank png will be used.\r
-\r
-DOT_IMAGE_FORMAT       = png\r
-\r
-# The tag DOT_PATH can be used to specify the path where the dot tool can be \r
-# found. If left blank, it is assumed the dot tool can be found in the path.\r
-\r
-DOT_PATH               = "C:/Program Files/Graphviz2.18/bin"\r
-\r
-# The DOTFILE_DIRS tag can be used to specify one or more directories that \r
-# contain dot files that are included in the documentation (see the \r
-# \dotfile command).\r
-\r
-DOTFILE_DIRS           = \r
-\r
-# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of \r
-# nodes that will be shown in the graph. If the number of nodes in a graph \r
-# becomes larger than this value, doxygen will truncate the graph, which is \r
-# visualized by representing a node as a red box. Note that doxygen if the \r
-# number of direct children of the root node in a graph is already larger than \r
-# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note \r
-# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.\r
-\r
-DOT_GRAPH_MAX_NODES    = 15\r
-\r
-# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the \r
-# graphs generated by dot. A depth value of 3 means that only nodes reachable \r
-# from the root by following a path via at most 3 edges will be shown. Nodes \r
-# that lay further from the root node will be omitted. Note that setting this \r
-# option to 1 or 2 may greatly reduce the computation time needed for large \r
-# code bases. Also note that the size of a graph can be further restricted by \r
-# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.\r
-\r
-MAX_DOT_GRAPH_DEPTH    = 2\r
-\r
-# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent \r
-# background. This is disabled by default, because dot on Windows does not \r
-# seem to support this out of the box. Warning: Depending on the platform used, \r
-# enabling this option may lead to badly anti-aliased labels on the edges of \r
-# a graph (i.e. they become hard to read).\r
-\r
-DOT_TRANSPARENT        = YES\r
-\r
-# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output \r
-# files in one run (i.e. multiple -o and -T options on the command line). This \r
-# makes dot run faster, but since only newer versions of dot (>1.8.10) \r
-# support this, this feature is disabled by default.\r
-\r
-DOT_MULTI_TARGETS      = NO\r
-\r
-# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will \r
-# generate a legend page explaining the meaning of the various boxes and \r
-# arrows in the dot generated graphs.\r
-\r
-GENERATE_LEGEND        = YES\r
-\r
-# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will \r
-# remove the intermediate dot files that are used to generate \r
-# the various graphs.\r
-\r
-DOT_CLEANUP            = YES\r
-\r
-#---------------------------------------------------------------------------\r
-# Configuration::additions related to the search engine   \r
-#---------------------------------------------------------------------------\r
-\r
-# The SEARCHENGINE tag specifies whether or not a search engine should be \r
-# used. If set to NO the values of all tags below this one will be ignored.\r
-\r
-SEARCHENGINE           = NO\r
diff --git a/Demos/Device/Joystick/Joystick.aps b/Demos/Device/Joystick/Joystick.aps
deleted file mode 100644 (file)
index 245245d..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<AVRStudio><MANAGEMENT><ProjectName>Joystick</ProjectName><Created>30-Sep-2008 14:06:38</Created><LastEdit>30-Sep-2008 14:07:27</LastEdit><ICON>241</ICON><ProjectType>0</ProjectType><Created>30-Sep-2008 14:06:38</Created><Version>4</Version><Build>4, 14, 0, 589</Build><ProjectTypeName>AVR GCC</ProjectTypeName></MANAGEMENT><CODE_CREATION><ObjectFile></ObjectFile><EntryFile></EntryFile><SaveFolder>C:\Users\Dean\Documents\Electronics\Projects\WORK\MyUSBWORK\Demos\Joystick\</SaveFolder></CODE_CREATION><DEBUG_TARGET><CURRENT_TARGET>JTAGICE mkII</CURRENT_TARGET><CURRENT_PART>AT90USB1287.xml</CURRENT_PART><BREAKPOINTS></BREAKPOINTS><IO_EXPAND><HIDE>false</HIDE></IO_EXPAND><REGISTERNAMES><Register>R00</Register><Register>R01</Register><Register>R02</Register><Register>R03</Register><Register>R04</Register><Register>R05</Register><Register>R06</Register><Register>R07</Register><Register>R08</Register><Register>R09</Register><Register>R10</Register><Register>R11</Register><Register>R12</Register><Register>R13</Register><Register>R14</Register><Register>R15</Register><Register>R16</Register><Register>R17</Register><Register>R18</Register><Register>R19</Register><Register>R20</Register><Register>R21</Register><Register>R22</Register><Register>R23</Register><Register>R24</Register><Register>R25</Register><Register>R26</Register><Register>R27</Register><Register>R28</Register><Register>R29</Register><Register>R30</Register><Register>R31</Register></REGISTERNAMES><COM>Auto</COM><COMType>0</COMType><WATCHNUM>0</WATCHNUM><WATCHNAMES><Pane0></Pane0><Pane1></Pane1><Pane2></Pane2><Pane3></Pane3></WATCHNAMES><BreakOnTrcaeFull>0</BreakOnTrcaeFull></DEBUG_TARGET><Debugger><Triggers></Triggers></Debugger><AVRGCCPLUGIN><FILES><SOURCEFILE>Descriptors.c</SOURCEFILE><SOURCEFILE>Joystick.c</SOURCEFILE><HEADERFILE>Descriptors.h</HEADERFILE><HEADERFILE>Joystick.h</HEADERFILE><OTHERFILE>makefile</OTHERFILE></FILES><CONFIGS><CONFIG><NAME>default</NAME><USESEXTERNALMAKEFILE>YES</USESEXTERNALMAKEFILE><EXTERNALMAKEFILE>makefile</EXTERNALMAKEFILE><PART>at90usb1287</PART><HEX>1</HEX><LIST>1</LIST><MAP>1</MAP><OUTPUTFILENAME>Joystick.elf</OUTPUTFILENAME><OUTPUTDIR>default\</OUTPUTDIR><ISDIRTY>1</ISDIRTY><OPTIONS/><INCDIRS/><LIBDIRS/><LIBS/><LINKOBJECTS/><OPTIONSFORALL>-Wall -gdwarf-2 -std=gnu99 -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums</OPTIONSFORALL><LINKEROPTIONS></LINKEROPTIONS><SEGMENTS/></CONFIG></CONFIGS><LASTCONFIG>default</LASTCONFIG><USES_WINAVR>1</USES_WINAVR><GCC_LOC>C:\WinAVR-20080512\bin\avr-gcc.exe</GCC_LOC><MAKE_LOC>C:\WinAVR-20080512\utils\bin\make.exe</MAKE_LOC></AVRGCCPLUGIN><IOView><usergroups/><sort sorted="0" column="0" ordername="0" orderaddress="0" ordergroup="0"/></IOView><Files></Files><Events><Bookmarks></Bookmarks></Events><Trace><Filters></Filters></Trace></AVRStudio>\r
diff --git a/Demos/Device/Joystick/Joystick.c b/Demos/Device/Joystick/Joystick.c
deleted file mode 100644 (file)
index 1cf59bb..0000000
+++ /dev/null
@@ -1,171 +0,0 @@
-/*\r
-             LUFA Library\r
-     Copyright (C) Dean Camera, 2009.\r
-              \r
-  dean [at] fourwalledcubicle [dot] com\r
-      www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
-  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
-  Permission to use, copy, modify, and distribute this software\r
-  and its documentation for any purpose and without fee is hereby\r
-  granted, provided that the above copyright notice appear in all\r
-  copies and that both that the copyright notice and this\r
-  permission notice and warranty disclaimer appear in supporting\r
-  documentation, and that the name of the author not be used in\r
-  advertising or publicity pertaining to distribution of the\r
-  software without specific, written prior permission.\r
-\r
-  The author disclaim all warranties with regard to this\r
-  software, including all implied warranties of merchantability\r
-  and fitness.  In no event shall the author be liable for any\r
-  special, indirect or consequential damages or any damages\r
-  whatsoever resulting from loss of use, data or profits, whether\r
-  in an action of contract, negligence or other tortious action,\r
-  arising out of or in connection with the use or performance of\r
-  this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- *  Main source file for the Joystick demo. This file contains the main tasks of\r
- *  the demo and is responsible for the initial application hardware configuration.\r
- */\r
-\r
-#include "Joystick.h"\r
-\r
-/** LUFA HID Class driver interface configuration and state information. This structure is\r
- *  passed to all HID Class driver functions, so that multiple instances of the same class\r
- *  within a device can be differentiated from one another.\r
- */\r
-USB_ClassInfo_HID_t Joystick_HID_Interface =\r
-       {\r
-               .InterfaceNumber         = 0,\r
-\r
-               .ReportINEndpointNumber  = JOYSTICK_EPNUM,\r
-               .ReportINEndpointSize    = JOYSTICK_EPSIZE,\r
-               \r
-               .ReportINBufferSize      = sizeof(USB_JoystickReport_Data_t),\r
-\r
-               .UsingReportProtocol     = true,\r
-       };\r
-\r
-/** Main program entry point. This routine contains the overall program flow, including initial\r
- *  setup of all components and the main program loop.\r
- */\r
-int main(void)\r
-{\r
-       SetupHardware();\r
-       \r
-       LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);\r
-       \r
-       for (;;)\r
-       {\r
-               USB_HID_USBTask(&Joystick_HID_Interface);\r
-               USB_USBTask();\r
-       }\r
-}\r
-\r
-/** Configures the board hardware and chip peripherals for the demo's functionality. */\r
-void SetupHardware(void)\r
-{\r
-       /* Disable watchdog if enabled by bootloader/fuses */\r
-       MCUSR &= ~(1 << WDRF);\r
-       wdt_disable();\r
-\r
-       /* Disable clock division */\r
-       clock_prescale_set(clock_div_1);\r
-\r
-       /* Hardware Initialization */\r
-       Joystick_Init();\r
-       LEDs_Init();\r
-       Buttons_Init();\r
-       USB_Init();\r
-\r
-       /* Millisecond timer initialization, with output compare interrupt enabled for the idle timing */\r
-       OCR0A  = ((F_CPU / 64) / 1000);\r
-       TCCR0A = (1 << WGM01);\r
-       TCCR0B = ((1 << CS01) | (1 << CS00));\r
-       TIMSK0 = (1 << OCIE0A);\r
-}\r
-\r
-/** Event handler for the library USB Connection event. */\r
-void EVENT_USB_Connect(void)\r
-{\r
-       LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING);\r
-}\r
-\r
-/** Event handler for the library USB Disconnection event. */\r
-void EVENT_USB_Disconnect(void)\r
-{\r
-       LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);\r
-}\r
-\r
-/** Event handler for the library USB Configuration Changed event. */\r
-void EVENT_USB_ConfigurationChanged(void)\r
-{\r
-       LEDs_SetAllLEDs(LEDMASK_USB_READY);\r
-\r
-       if (!(USB_HID_ConfigureEndpoints(&Joystick_HID_Interface)))\r
-         LEDs_SetAllLEDs(LEDMASK_USB_ERROR);\r
-}\r
-\r
-/** Event handler for the library USB Unhandled Control Packet event. */\r
-void EVENT_USB_UnhandledControlPacket(void)\r
-{\r
-       USB_HID_ProcessControlPacket(&Joystick_HID_Interface);\r
-}\r
-\r
-/** ISR to keep track of each millisecond interrupt, for determining the HID class idle period remaining when set. */\r
-ISR(TIMER0_COMPA_vect, ISR_BLOCK)\r
-{\r
-       if (Joystick_HID_Interface.IdleMSRemaining)\r
-         Joystick_HID_Interface.IdleMSRemaining--;\r
-}\r
-\r
-/** HID class driver callback function for the creation of HID reports to the host.\r
- *\r
- *  \param HIDInterfaceInfo  Pointer to the HID class interface configuration structure being referenced\r
- *  \param ReportData  Pointer to a buffer where the created report should be stored\r
- *\r
- *  \return Number of bytes written in the report (or zero if no report is to be sent\r
- */\r
-uint16_t CALLBACK_USB_HID_CreateNextHIDReport(USB_ClassInfo_HID_t* HIDInterfaceInfo, uint8_t* ReportID, void* ReportData)\r
-{\r
-       USB_JoystickReport_Data_t* JoystickReport = (USB_JoystickReport_Data_t*)ReportData;\r
-       \r
-       uint8_t JoyStatus_LCL    = Joystick_GetStatus();\r
-       uint8_t ButtonStatus_LCL = Buttons_GetStatus();\r
-\r
-       if (JoyStatus_LCL & JOY_UP)\r
-         JoystickReport->Y = -100;\r
-       else if (JoyStatus_LCL & JOY_DOWN)\r
-         JoystickReport->Y =  100;\r
-\r
-       if (JoyStatus_LCL & JOY_RIGHT)\r
-         JoystickReport->X =  100;\r
-       else if (JoyStatus_LCL & JOY_LEFT)\r
-         JoystickReport->X = -100;\r
-\r
-       if (JoyStatus_LCL & JOY_PRESS)\r
-         JoystickReport->Button  = (1 << 1);\r
-         \r
-       if (ButtonStatus_LCL & BUTTONS_BUTTON1)\r
-         JoystickReport->Button |= (1 << 0);\r
-         \r
-       return sizeof(USB_JoystickReport_Data_t);\r
-}\r
-\r
-/** HID class driver callback function for the processing of HID reports from the host.\r
- *\r
- *  \param HIDInterfaceInfo  Pointer to the HID class interface configuration structure being referenced\r
- *  \param ReportData  Pointer to a buffer where the created report has been stored\r
- *  \param ReportSize  Size in bytes of the received HID report\r
- */\r
-void CALLBACK_USB_HID_ProcessReceivedHIDReport(USB_ClassInfo_HID_t* HIDInterfaceInfo, uint8_t ReportID,\r
-                                               void* ReportData, uint16_t ReportSize)\r
-{\r
-       // Unused (but mandatory for the HID class driver) in this demo, since there are no Host->Device reports\r
-}\r
diff --git a/Demos/Device/Joystick/Joystick.h b/Demos/Device/Joystick/Joystick.h
deleted file mode 100644 (file)
index 4209f4d..0000000
+++ /dev/null
@@ -1,90 +0,0 @@
-/*\r
-             LUFA Library\r
-     Copyright (C) Dean Camera, 2009.\r
-              \r
-  dean [at] fourwalledcubicle [dot] com\r
-      www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
-  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
-  Permission to use, copy, modify, and distribute this software\r
-  and its documentation for any purpose and without fee is hereby\r
-  granted, provided that the above copyright notice appear in all\r
-  copies and that both that the copyright notice and this\r
-  permission notice and warranty disclaimer appear in supporting\r
-  documentation, and that the name of the author not be used in\r
-  advertising or publicity pertaining to distribution of the\r
-  software without specific, written prior permission.\r
-\r
-  The author disclaim all warranties with regard to this\r
-  software, including all implied warranties of merchantability\r
-  and fitness.  In no event shall the author be liable for any\r
-  special, indirect or consequential damages or any damages\r
-  whatsoever resulting from loss of use, data or profits, whether\r
-  in an action of contract, negligence or other tortious action,\r
-  arising out of or in connection with the use or performance of\r
-  this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- *  Header file for Joystick.c.\r
- */\r
\r
-#ifndef _JOYSTICK_H_\r
-#define _JOYSTICK_H_\r
-\r
-       /* Includes: */\r
-               #include <avr/io.h>\r
-               #include <avr/wdt.h>\r
-               #include <avr/power.h>\r
-               #include <string.h>\r
-\r
-               #include "Descriptors.h"\r
-\r
-               #include <LUFA/Version.h>\r
-               #include <LUFA/Drivers/Board/Joystick.h>\r
-               #include <LUFA/Drivers/Board/LEDs.h>\r
-               #include <LUFA/Drivers/Board/Buttons.h>\r
-               #include <LUFA/Drivers/USB/USB.h>\r
-               #include <LUFA/Drivers/USB/Class/Device/HID.h>\r
-\r
-       /* Type Defines: */\r
-               /** Type define for the joystick HID report structure, for creating and sending HID reports to the host PC.\r
-                *  This mirrors the layout described to the host in the HID report descriptor, in Descriptors.c.\r
-                */\r
-               typedef struct\r
-               {\r
-                       int8_t  X; /**< Current absolute joystick X position, as a signed 8-bit integer */\r
-                       int8_t  Y; /**< Current absolute joystick Y position, as a signed 8-bit integer */\r
-                       uint8_t Button; /**< Bit mask of the currently pressed joystick buttons */\r
-               } USB_JoystickReport_Data_t;\r
-                       \r
-       /* Macros: */\r
-               /** LED mask for the library LED driver, to indicate that the USB interface is not ready. */\r
-               #define LEDMASK_USB_NOTREADY      LEDS_LED1\r
-\r
-               /** LED mask for the library LED driver, to indicate that the USB interface is enumerating. */\r
-               #define LEDMASK_USB_ENUMERATING  (LEDS_LED2 | LEDS_LED3)\r
-\r
-               /** LED mask for the library LED driver, to indicate that the USB interface is ready. */\r
-               #define LEDMASK_USB_READY        (LEDS_LED2 | LEDS_LED4)\r
-\r
-               /** LED mask for the library LED driver, to indicate that an error has occurred in the USB interface. */\r
-               #define LEDMASK_USB_ERROR        (LEDS_LED1 | LEDS_LED3)\r
-\r
-       /* Function Prototypes: */\r
-               void SetupHardware(void);\r
-\r
-               void EVENT_USB_Connect(void);\r
-               void EVENT_USB_Disconnect(void);\r
-               void EVENT_USB_ConfigurationChanged(void);\r
-               void EVENT_USB_UnhandledControlPacket(void);\r
-\r
-               uint16_t CALLBACK_USB_HID_CreateNextHIDReport(USB_ClassInfo_HID_t* HIDInterfaceInfo, uint8_t* ReportID, void* ReportData);\r
-               void     CALLBACK_USB_HID_ProcessReceivedHIDReport(USB_ClassInfo_HID_t* HIDInterfaceInfo, uint8_t ReportID, \r
-                                                                  void* ReportData, uint16_t ReportSize);\r
-\r
-#endif\r
diff --git a/Demos/Device/Joystick/Joystick.txt b/Demos/Device/Joystick/Joystick.txt
deleted file mode 100644 (file)
index 7d47ae9..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
-/** \file\r
- *\r
- *  This file contains special DoxyGen information for the generation of the main page and other special\r
- *  documentation pages. It is not a project source file.\r
- */\r
\r
-/** \mainpage Joystick Device Demo\r
- *\r
- *  \section SSec_Info USB Information:\r
- *\r
- *  The following table gives a rundown of the USB utilization of this demo.\r
- *\r
- *  <table>\r
- *   <tr>\r
- *    <td><b>USB Mode:</b></td>\r
- *    <td>Device</td>\r
- *   </tr>\r
- *   <tr>\r
- *    <td><b>USB Class:</b></td>\r
- *    <td>Human Interface Device (HID)</td>\r
- *   </tr>\r
- *   <tr> \r
- *    <td><b>USB Subclass:</b></td>\r
- *    <td>N/A</td>\r
- *   </tr>\r
- *   <tr>\r
- *    <td><b>Relevant Standards:</b></td>\r
- *    <td>USBIF HID Specification, USBIF HID Usage Tables</td>\r
- *   </tr>\r
- *   <tr>\r
- *    <td><b>Usable Speeds:</b></td>\r
- *    <td>Low Speed Mode, Full Speed Mode</td>\r
- *   </tr>\r
- *  </table>\r
- *\r
- *  \section SSec_Description Project Description: \r
- *\r
- *  Joystick demonstration application. This gives a simple reference\r
- *  application for implementing a USB Keyboard device, for USB Joysticks\r
- *  using the standard Keyboard HID profile.\r
- *  \r
- *  This device will show up as a generic joystick device, with two buttons.\r
- *  Pressing the joystick inwards is the first button, and the HWB button\r
- *  is the second.\r
- *  \r
- *  Moving the joystick on the selected board moves the joystick location on\r
- *  the host computer.\r
- *  \r
- *  Currently only single interface joysticks are supported.\r
- *\r
- *  \section SSec_Options Project Options\r
- *\r
- *  The following defines can be found in this demo, which can control the demo behaviour when defined, or changed in value.\r
- *\r
- *  <table>\r
- *   <tr>\r
- *    <td>\r
- *     None\r
- *    </td>\r
- *   </tr>\r
- *  </table>\r
- */
\ No newline at end of file
diff --git a/Demos/Device/Joystick/makefile b/Demos/Device/Joystick/makefile
deleted file mode 100644 (file)
index 826766c..0000000
+++ /dev/null
@@ -1,733 +0,0 @@
-# Hey Emacs, this is a -*- makefile -*-\r
-#----------------------------------------------------------------------------\r
-# WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al.\r
-#  >> Modified for use with the LUFA project. <<\r
-#\r
-# Released to the Public Domain\r
-#\r
-# Additional material for this makefile was written by:\r
-# Peter Fleury\r
-# Tim Henigan\r
-# Colin O'Flynn\r
-# Reiner Patommel\r
-# Markus Pfaff\r
-# Sander Pool\r
-# Frederik Rouleau\r
-# Carlos Lamas\r
-# Dean Camera\r
-# Opendous Inc.\r
-# Denver Gingerich\r
-#\r
-#----------------------------------------------------------------------------\r
-# On command line:\r
-#\r
-# make all = Make software.\r
-#\r
-# make clean = Clean out built project files.\r
-#\r
-# make coff = Convert ELF to AVR COFF.\r
-#\r
-# make extcoff = Convert ELF to AVR Extended COFF.\r
-#\r
-# make program = Download the hex file to the device, using avrdude.\r
-#                Please customize the avrdude settings below first!\r
-#\r
-# make dfu = Download the hex file to the device, using dfu-programmer (must\r
-#            have dfu-programmer installed).\r
-#\r
-# make flip = Download the hex file to the device, using Atmel FLIP (must\r
-#             have Atmel FLIP installed).\r
-#\r
-# make dfu-ee = Download the eeprom file to the device, using dfu-programmer\r
-#               (must have dfu-programmer installed).\r
-#\r
-# make flip-ee = Download the eeprom file to the device, using Atmel FLIP\r
-#                (must have Atmel FLIP installed).\r
-#\r
-# make doxygen = Generate DoxyGen documentation for the project (must have\r
-#                DoxyGen installed)\r
-#\r
-# make debug = Start either simulavr or avarice as specified for debugging, \r
-#              with avr-gdb or avr-insight as the front end for debugging.\r
-#\r
-# make filename.s = Just compile filename.c into the assembler code only.\r
-#\r
-# make filename.i = Create a preprocessed source file for use in submitting\r
-#                   bug reports to the GCC project.\r
-#\r
-# To rebuild project do "make clean" then "make all".\r
-#----------------------------------------------------------------------------\r
-\r
-\r
-# MCU name\r
-MCU = at90usb1287\r
-\r
-\r
-# Target board (see library "Board Types" documentation, USER or blank for projects not requiring\r
-# LUFA board drivers). If USER is selected, put custom board drivers in a directory called \r
-# "Board" inside the application directory.\r
-BOARD  = USBKEY\r
-\r
-\r
-# Processor frequency.\r
-#     This will define a symbol, F_CPU, in all source code files equal to the \r
-#     processor frequency. You can then use this symbol in your source code to \r
-#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done\r
-#     automatically to create a 32-bit value in your source code.\r
-#     Typical values are:\r
-#         F_CPU =  1000000\r
-#         F_CPU =  1843200\r
-#         F_CPU =  2000000\r
-#         F_CPU =  3686400\r
-#         F_CPU =  4000000\r
-#         F_CPU =  7372800\r
-#         F_CPU =  8000000\r
-#         F_CPU = 11059200\r
-#         F_CPU = 14745600\r
-#         F_CPU = 16000000\r
-#         F_CPU = 18432000\r
-#         F_CPU = 20000000\r
-F_CPU = 8000000\r
-\r
-\r
-# Input clock frequency.\r
-#     This will define a symbol, F_CLOCK, in all source code files equal to the \r
-#     input clock frequency (before any prescaling is performed). This value may\r
-#     differ from F_CPU if prescaling is used on the latter, and is required as the\r
-#     raw input clock is fed directly to the PLL sections of the AVR for high speed\r
-#     clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'\r
-#     at the end, this will be done automatically to create a 32-bit value in your\r
-#     source code.\r
-#\r
-#     If no clock division is performed on the input clock inside the AVR (via the\r
-#     CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.\r
-F_CLOCK = 8000000\r
-\r
-\r
-# Output format. (can be srec, ihex, binary)\r
-FORMAT = ihex\r
-\r
-\r
-# Target file name (without extension).\r
-TARGET = Joystick\r
-\r
-\r
-# Object files directory\r
-#     To put object files in current directory, use a dot (.), do NOT make\r
-#     this an empty or blank macro!\r
-OBJDIR = .\r
-\r
-\r
-# Path to the LUFA library\r
-LUFA_PATH = ../../..\r
-\r
-\r
-# List C source files here. (C dependencies are automatically generated.)\r
-SRC = $(TARGET).c                                                 \\r
-         Descriptors.c                                               \\r
-         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/DevChapter9.c        \\r
-         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Endpoint.c           \\r
-         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Host.c               \\r
-         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/HostChapter9.c       \\r
-         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/LowLevel.c           \\r
-         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Pipe.c               \\r
-         $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/Events.c            \\r
-         $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBInterrupt.c      \\r
-         $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBTask.c           \\r
-         $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/ConfigDescriptor.c  \\r
-         $(LUFA_PATH)/LUFA/Drivers/USB/Class/Device/HID.c            \\r
-\r
-\r
-# List C++ source files here. (C dependencies are automatically generated.)\r
-CPPSRC = \r
-\r
-\r
-# List Assembler source files here.\r
-#     Make them always end in a capital .S.  Files ending in a lowercase .s\r
-#     will not be considered source files but generated files (assembler\r
-#     output from the compiler), and will be deleted upon "make clean"!\r
-#     Even though the DOS/Win* filesystem matches both .s and .S the same,\r
-#     it will preserve the spelling of the filenames, and gcc itself does\r
-#     care about how the name is spelled on its command-line.\r
-ASRC =\r
-\r
-\r
-# Optimization level, can be [0, 1, 2, 3, s]. \r
-#     0 = turn off optimization. s = optimize for size.\r
-#     (Note: 3 is not always the best optimization level. See avr-libc FAQ.)\r
-OPT = s\r
-\r
-\r
-# Debugging format.\r
-#     Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs.\r
-#     AVR Studio 4.10 requires dwarf-2.\r
-#     AVR [Extended] COFF format requires stabs, plus an avr-objcopy run.\r
-DEBUG = dwarf-2\r
-\r
-\r
-# List any extra directories to look for include files here.\r
-#     Each directory must be seperated by a space.\r
-#     Use forward slashes for directory separators.\r
-#     For a directory that has spaces, enclose it in quotes.\r
-EXTRAINCDIRS = $(LUFA_PATH)/\r
-\r
-\r
-# Compiler flag to set the C Standard level.\r
-#     c89   = "ANSI" C\r
-#     gnu89 = c89 plus GCC extensions\r
-#     c99   = ISO C99 standard (not yet fully implemented)\r
-#     gnu99 = c99 plus GCC extensions\r
-CSTANDARD = -std=gnu99\r
-\r
-\r
-# Place -D or -U options here for C sources\r
-CDEFS  = -DF_CPU=$(F_CPU)UL -DF_CLOCK=$(F_CLOCK)UL -DBOARD=BOARD_$(BOARD)\r
-CDEFS += -DUSE_NONSTANDARD_DESCRIPTOR_NAMES -DUSB_DEVICE_ONLY\r
-CDEFS += -DFIXED_CONTROL_ENDPOINT_SIZE=8 -DUSE_SINGLE_DEVICE_CONFIGURATION\r
-CDEFS += -DUSE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)"\r
-\r
-\r
-# Place -D or -U options here for ASM sources\r
-ADEFS = -DF_CPU=$(F_CPU)\r
-\r
-\r
-# Place -D or -U options here for C++ sources\r
-CPPDEFS = -DF_CPU=$(F_CPU)UL\r
-#CPPDEFS += -D__STDC_LIMIT_MACROS\r
-#CPPDEFS += -D__STDC_CONSTANT_MACROS\r
-\r
-\r
-\r
-#---------------- Compiler Options C ----------------\r
-#  -g*:          generate debugging information\r
-#  -O*:          optimization level\r
-#  -f...:        tuning, see GCC manual and avr-libc documentation\r
-#  -Wall...:     warning level\r
-#  -Wa,...:      tell GCC to pass this to the assembler.\r
-#    -adhlns...: create assembler listing\r
-CFLAGS = -g$(DEBUG)\r
-CFLAGS += $(CDEFS)\r
-CFLAGS += -O$(OPT)\r
-CFLAGS += -funsigned-char\r
-CFLAGS += -funsigned-bitfields\r
-CFLAGS += -ffunction-sections\r
-CFLAGS += -fpack-struct\r
-CFLAGS += -fshort-enums\r
-CFLAGS += -finline-limit=20\r
-CFLAGS += -Wall\r
-CFLAGS += -Wstrict-prototypes\r
-CFLAGS += -Wundef\r
-#CFLAGS += -fno-unit-at-a-time\r
-#CFLAGS += -Wunreachable-code\r
-#CFLAGS += -Wsign-compare\r
-CFLAGS += -Wa,-adhlns=$(<:%.c=$(OBJDIR)/%.lst)\r
-CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))\r
-CFLAGS += $(CSTANDARD)\r
-\r
-\r
-#---------------- Compiler Options C++ ----------------\r
-#  -g*:          generate debugging information\r
-#  -O*:          optimization level\r
-#  -f...:        tuning, see GCC manual and avr-libc documentation\r
-#  -Wall...:     warning level\r
-#  -Wa,...:      tell GCC to pass this to the assembler.\r
-#    -adhlns...: create assembler listing\r
-CPPFLAGS = -g$(DEBUG)\r
-CPPFLAGS += $(CPPDEFS)\r
-CPPFLAGS += -O$(OPT)\r
-CPPFLAGS += -funsigned-char\r
-CPPFLAGS += -funsigned-bitfields\r
-CPPFLAGS += -fpack-struct\r
-CPPFLAGS += -fshort-enums\r
-CPPFLAGS += -fno-exceptions\r
-CPPFLAGS += -Wall\r
-CFLAGS += -Wundef\r
-#CPPFLAGS += -mshort-calls\r
-#CPPFLAGS += -fno-unit-at-a-time\r
-#CPPFLAGS += -Wstrict-prototypes\r
-#CPPFLAGS += -Wunreachable-code\r
-#CPPFLAGS += -Wsign-compare\r
-CPPFLAGS += -Wa,-adhlns=$(<:%.cpp=$(OBJDIR)/%.lst)\r
-CPPFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))\r
-#CPPFLAGS += $(CSTANDARD)\r
-\r
-\r
-#---------------- Assembler Options ----------------\r
-#  -Wa,...:   tell GCC to pass this to the assembler.\r
-#  -adhlns:   create listing\r
-#  -gstabs:   have the assembler create line number information; note that\r
-#             for use in COFF files, additional information about filenames\r
-#             and function names needs to be present in the assembler source\r
-#             files -- see avr-libc docs [FIXME: not yet described there]\r
-#  -listing-cont-lines: Sets the maximum number of continuation lines of hex \r
-#       dump that will be displayed for a given single line of source input.\r
-ASFLAGS = $(ADEFS) -Wa,-adhlns=$(<:%.S=$(OBJDIR)/%.lst),-gstabs,--listing-cont-lines=100\r
-\r
-\r
-#---------------- Library Options ----------------\r
-# Minimalistic printf version\r
-PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min\r
-\r
-# Floating point printf version (requires MATH_LIB = -lm below)\r
-PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt\r
-\r
-# If this is left blank, then it will use the Standard printf version.\r
-PRINTF_LIB = \r
-#PRINTF_LIB = $(PRINTF_LIB_MIN)\r
-#PRINTF_LIB = $(PRINTF_LIB_FLOAT)\r
-\r
-\r
-# Minimalistic scanf version\r
-SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min\r
-\r
-# Floating point + %[ scanf version (requires MATH_LIB = -lm below)\r
-SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt\r
-\r
-# If this is left blank, then it will use the Standard scanf version.\r
-SCANF_LIB = \r
-#SCANF_LIB = $(SCANF_LIB_MIN)\r
-#SCANF_LIB = $(SCANF_LIB_FLOAT)\r
-\r
-\r
-MATH_LIB = -lm\r
-\r
-\r
-# List any extra directories to look for libraries here.\r
-#     Each directory must be seperated by a space.\r
-#     Use forward slashes for directory separators.\r
-#     For a directory that has spaces, enclose it in quotes.\r
-EXTRALIBDIRS = \r
-\r
-\r
-\r
-#---------------- External Memory Options ----------------\r
-\r
-# 64 KB of external RAM, starting after internal RAM (ATmega128!),\r
-# used for variables (.data/.bss) and heap (malloc()).\r
-#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff\r
-\r
-# 64 KB of external RAM, starting after internal RAM (ATmega128!),\r
-# only used for heap (malloc()).\r
-#EXTMEMOPTS = -Wl,--section-start,.data=0x801100,--defsym=__heap_end=0x80ffff\r
-\r
-EXTMEMOPTS =\r
-\r
-\r
-\r
-#---------------- Linker Options ----------------\r
-#  -Wl,...:     tell GCC to pass this to linker.\r
-#    -Map:      create map file\r
-#    --cref:    add cross reference to  map file\r
-LDFLAGS = -Wl,-Map=$(TARGET).map,--cref\r
-LDFLAGS += -Wl,--relax \r
-LDFLAGS += -Wl,--gc-sections\r
-LDFLAGS += $(EXTMEMOPTS)\r
-LDFLAGS += $(patsubst %,-L%,$(EXTRALIBDIRS))\r
-LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)\r
-#LDFLAGS += -T linker_script.x\r
-\r
-\r
-\r
-#---------------- Programming Options (avrdude) ----------------\r
-\r
-# Programming hardware: alf avr910 avrisp bascom bsd \r
-# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500\r
-#\r
-# Type: avrdude -c ?\r
-# to get a full listing.\r
-#\r
-AVRDUDE_PROGRAMMER = jtagmkII\r
-\r
-# com1 = serial port. Use lpt1 to connect to parallel port.\r
-AVRDUDE_PORT = usb\r
-\r
-AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex\r
-#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep\r
-\r
-\r
-# Uncomment the following if you want avrdude's erase cycle counter.\r
-# Note that this counter needs to be initialized first using -Yn,\r
-# see avrdude manual.\r
-#AVRDUDE_ERASE_COUNTER = -y\r
-\r
-# Uncomment the following if you do /not/ wish a verification to be\r
-# performed after programming the device.\r
-#AVRDUDE_NO_VERIFY = -V\r
-\r
-# Increase verbosity level.  Please use this when submitting bug\r
-# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude> \r
-# to submit bug reports.\r
-#AVRDUDE_VERBOSE = -v -v\r
-\r
-AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)\r
-AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY)\r
-AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE)\r
-AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER)\r
-\r
-\r
-\r
-#---------------- Debugging Options ----------------\r
-\r
-# For simulavr only - target MCU frequency.\r
-DEBUG_MFREQ = $(F_CPU)\r
-\r
-# Set the DEBUG_UI to either gdb or insight.\r
-# DEBUG_UI = gdb\r
-DEBUG_UI = insight\r
-\r
-# Set the debugging back-end to either avarice, simulavr.\r
-DEBUG_BACKEND = avarice\r
-#DEBUG_BACKEND = simulavr\r
-\r
-# GDB Init Filename.\r
-GDBINIT_FILE = __avr_gdbinit\r
-\r
-# When using avarice settings for the JTAG\r
-JTAG_DEV = /dev/com1\r
-\r
-# Debugging port used to communicate between GDB / avarice / simulavr.\r
-DEBUG_PORT = 4242\r
-\r
-# Debugging host used to communicate between GDB / avarice / simulavr, normally\r
-#     just set to localhost unless doing some sort of crazy debugging when \r
-#     avarice is running on a different computer.\r
-DEBUG_HOST = localhost\r
-\r
-\r
-\r
-#============================================================================\r
-\r
-\r
-# Define programs and commands.\r
-SHELL = sh\r
-CC = avr-gcc\r
-OBJCOPY = avr-objcopy\r
-OBJDUMP = avr-objdump\r
-SIZE = avr-size\r
-AR = avr-ar rcs\r
-NM = avr-nm\r
-AVRDUDE = avrdude\r
-REMOVE = rm -f\r
-REMOVEDIR = rm -rf\r
-COPY = cp\r
-WINSHELL = cmd\r
-\r
-# Define Messages\r
-# English\r
-MSG_ERRORS_NONE = Errors: none\r
-MSG_BEGIN = -------- begin --------\r
-MSG_END = --------  end  --------\r
-MSG_SIZE_BEFORE = Size before: \r
-MSG_SIZE_AFTER = Size after:\r
-MSG_COFF = Converting to AVR COFF:\r
-MSG_EXTENDED_COFF = Converting to AVR Extended COFF:\r
-MSG_FLASH = Creating load file for Flash:\r
-MSG_EEPROM = Creating load file for EEPROM:\r
-MSG_EXTENDED_LISTING = Creating Extended Listing:\r
-MSG_SYMBOL_TABLE = Creating Symbol Table:\r
-MSG_LINKING = Linking:\r
-MSG_COMPILING = Compiling C:\r
-MSG_COMPILING_CPP = Compiling C++:\r
-MSG_ASSEMBLING = Assembling:\r
-MSG_CLEANING = Cleaning project:\r
-MSG_CREATING_LIBRARY = Creating library:\r
-\r
-\r
-\r
-\r
-# Define all object files.\r
-OBJ = $(SRC:%.c=$(OBJDIR)/%.o) $(CPPSRC:%.cpp=$(OBJDIR)/%.o) $(ASRC:%.S=$(OBJDIR)/%.o) \r
-\r
-# Define all listing files.\r
-LST = $(SRC:%.c=$(OBJDIR)/%.lst) $(CPPSRC:%.cpp=$(OBJDIR)/%.lst) $(ASRC:%.S=$(OBJDIR)/%.lst) \r
-\r
-\r
-# Compiler flags to generate dependency files.\r
-GENDEPFLAGS = -MMD -MP -MF .dep/$(@F).d\r
-\r
-\r
-# Combine all necessary flags and optional flags.\r
-# Add target processor to flags.\r
-ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS)\r
-ALL_CPPFLAGS = -mmcu=$(MCU) -I. -x c++ $(CPPFLAGS) $(GENDEPFLAGS)\r
-ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)\r
-\r
-\r
-\r
-\r
-\r
-# Default target.\r
-all: begin gccversion sizebefore build checkhooks checklibmode checkboard sizeafter end\r
-\r
-# Change the build target to build a HEX file or a library.\r
-build: elf hex eep lss sym\r
-#build: lib\r
-\r
-\r
-elf: $(TARGET).elf\r
-hex: $(TARGET).hex\r
-eep: $(TARGET).eep\r
-lss: $(TARGET).lss\r
-sym: $(TARGET).sym\r
-LIBNAME=lib$(TARGET).a\r
-lib: $(LIBNAME)\r
-\r
-\r
-\r
-# Eye candy.\r
-# AVR Studio 3.x does not check make's exit code but relies on\r
-# the following magic strings to be generated by the compile job.\r
-begin:\r
-       @echo\r
-       @echo $(MSG_BEGIN)\r
-\r
-end:\r
-       @echo $(MSG_END)\r
-       @echo\r
-\r
-\r
-# Display size of file.\r
-HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex\r
-ELFSIZE = $(SIZE) $(MCU_FLAG) $(FORMAT_FLAG) $(TARGET).elf\r
-MCU_FLAG = $(shell $(SIZE) --help | grep -- --mcu > /dev/null && echo --mcu=$(MCU) )\r
-FORMAT_FLAG = $(shell $(SIZE) --help | grep -- --format=.*avr > /dev/null && echo --format=avr )\r
-\r
-sizebefore:\r
-       @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \\r
-       2>/dev/null; echo; fi\r
-\r
-sizeafter:\r
-       @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \\r
-       2>/dev/null; echo; fi\r
-\r
-checkhooks: build\r
-       @echo\r
-       @echo ------- Unhooked LUFA Events -------\r
-       @$(shell) (grep -s '^EVENT_.*LUFA/.*\\.o' $(TARGET).map | \\r
-                  cut -d' ' -f1 | cut -d'_' -f2- | grep ".*") || \\r
-                          echo "(None)"\r
-       @echo ------------------------------------\r
-\r
-checklibmode:\r
-       @echo\r
-       @echo ----------- Library Mode -----------\r
-       @$(shell) ($(CC) $(ALL_CFLAGS) -E -dM - < /dev/null \\r
-                 | grep 'USB_\(DEVICE\|HOST\)_ONLY' | cut -d' ' -f2 | grep ".*") \\r
-                 || echo "No specific mode (both device and host mode allowable)."\r
-       @echo ------------------------------------\r
-\r
-checkboard:\r
-       @echo\r
-       @echo ---------- Selected Board ----------\r
-       @echo Selected board model is $(BOARD).\r
-       @echo ------------------------------------\r
-       \r
-# Display compiler version information.\r
-gccversion : \r
-       @$(CC) --version\r
-\r
-\r
-\r
-# Program the device.  \r
-program: $(TARGET).hex $(TARGET).eep\r
-       $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)\r
-\r
-flip: $(TARGET).hex\r
-       batchisp -hardware usb -device $(MCU) -operation erase f\r
-       batchisp -hardware usb -device $(MCU) -operation loadbuffer $(TARGET).hex program\r
-       batchisp -hardware usb -device $(MCU) -operation start reset 0\r
-\r
-dfu: $(TARGET).hex\r
-       dfu-programmer $(MCU) erase\r
-       dfu-programmer $(MCU) flash --debug 1 $(TARGET).hex\r
-       dfu-programmer $(MCU) reset\r
-\r
-flip-ee: $(TARGET).hex $(TARGET).eep\r
-       copy $(TARGET).eep $(TARGET)eep.hex\r
-       batchisp -hardware usb -device $(MCU) -operation memory EEPROM erase\r
-       batchisp -hardware usb -device $(MCU) -operation memory EEPROM loadbuffer $(TARGET)eep.hex program\r
-       batchisp -hardware usb -device $(MCU) -operation start reset 0\r
-\r
-dfu-ee: $(TARGET).hex $(TARGET).eep\r
-       dfu-programmer $(MCU) flash-eeprom --debug 1 --suppress-bootloader-mem $(TARGET).eep\r
-       dfu-programmer $(MCU) reset\r
-\r
-\r
-# Generate avr-gdb config/init file which does the following:\r
-#     define the reset signal, load the target file, connect to target, and set \r
-#     a breakpoint at main().\r
-gdb-config: \r
-       @$(REMOVE) $(GDBINIT_FILE)\r
-       @echo define reset >> $(GDBINIT_FILE)\r
-       @echo SIGNAL SIGHUP >> $(GDBINIT_FILE)\r
-       @echo end >> $(GDBINIT_FILE)\r
-       @echo file $(TARGET).elf >> $(GDBINIT_FILE)\r
-       @echo target remote $(DEBUG_HOST):$(DEBUG_PORT)  >> $(GDBINIT_FILE)\r
-ifeq ($(DEBUG_BACKEND),simulavr)\r
-       @echo load  >> $(GDBINIT_FILE)\r
-endif\r
-       @echo break main >> $(GDBINIT_FILE)\r
-\r
-debug: gdb-config $(TARGET).elf\r
-ifeq ($(DEBUG_BACKEND), avarice)\r
-       @echo Starting AVaRICE - Press enter when "waiting to connect" message displays.\r
-       @$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \\r
-       $(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT)\r
-       @$(WINSHELL) /c pause\r
-\r
-else\r
-       @$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \\r
-       $(DEBUG_MFREQ) --port $(DEBUG_PORT)\r
-endif\r
-       @$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE)\r
-\r
-\r
-\r
-\r
-# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.\r
-COFFCONVERT = $(OBJCOPY) --debugging\r
-COFFCONVERT += --change-section-address .data-0x800000\r
-COFFCONVERT += --change-section-address .bss-0x800000\r
-COFFCONVERT += --change-section-address .noinit-0x800000\r
-COFFCONVERT += --change-section-address .eeprom-0x810000\r
-\r
-\r
-\r
-coff: $(TARGET).elf\r
-       @echo\r
-       @echo $(MSG_COFF) $(TARGET).cof\r
-       $(COFFCONVERT) -O coff-avr $< $(TARGET).cof\r
-\r
-\r
-extcoff: $(TARGET).elf\r
-       @echo\r
-       @echo $(MSG_EXTENDED_COFF) $(TARGET).cof\r
-       $(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof\r
-\r
-\r
-\r
-# Create final output files (.hex, .eep) from ELF output file.\r
-%.hex: %.elf\r
-       @echo\r
-       @echo $(MSG_FLASH) $@\r
-       $(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@\r
-\r
-%.eep: %.elf\r
-       @echo\r
-       @echo $(MSG_EEPROM) $@\r
-       -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \\r
-       --change-section-lma .eeprom=0 --no-change-warnings -O $(FORMAT) $< $@ || exit 0\r
-\r
-# Create extended listing file from ELF output file.\r
-%.lss: %.elf\r
-       @echo\r
-       @echo $(MSG_EXTENDED_LISTING) $@\r
-       $(OBJDUMP) -h -z -S $< > $@\r
-\r
-# Create a symbol table from ELF output file.\r
-%.sym: %.elf\r
-       @echo\r
-       @echo $(MSG_SYMBOL_TABLE) $@\r
-       $(NM) -n $< > $@\r
-\r
-\r
-\r
-# Create library from object files.\r
-.SECONDARY : $(TARGET).a\r
-.PRECIOUS : $(OBJ)\r
-%.a: $(OBJ)\r
-       @echo\r
-       @echo $(MSG_CREATING_LIBRARY) $@\r
-       $(AR) $@ $(OBJ)\r
-\r
-\r
-# Link: create ELF output file from object files.\r
-.SECONDARY : $(TARGET).elf\r
-.PRECIOUS : $(OBJ)\r
-%.elf: $(OBJ)\r
-       @echo\r
-       @echo $(MSG_LINKING) $@\r
-       $(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)\r
-\r
-\r
-# Compile: create object files from C source files.\r
-$(OBJDIR)/%.o : %.c\r
-       @echo\r
-       @echo $(MSG_COMPILING) $<\r
-       $(CC) -c $(ALL_CFLAGS) $< -o $@ \r
-\r
-\r
-# Compile: create object files from C++ source files.\r
-$(OBJDIR)/%.o : %.cpp\r
-       @echo\r
-       @echo $(MSG_COMPILING_CPP) $<\r
-       $(CC) -c $(ALL_CPPFLAGS) $< -o $@ \r
-\r
-\r
-# Compile: create assembler files from C source files.\r
-%.s : %.c\r
-       $(CC) -S $(ALL_CFLAGS) $< -o $@\r
-\r
-\r
-# Compile: create assembler files from C++ source files.\r
-%.s : %.cpp\r
-       $(CC) -S $(ALL_CPPFLAGS) $< -o $@\r
-\r
-\r
-# Assemble: create object files from assembler source files.\r
-$(OBJDIR)/%.o : %.S\r
-       @echo\r
-       @echo $(MSG_ASSEMBLING) $<\r
-       $(CC) -c $(ALL_ASFLAGS) $< -o $@\r
-\r
-\r
-# Create preprocessed source for use in sending a bug report.\r
-%.i : %.c\r
-       $(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ \r
-       \r
-\r
-# Target: clean project.\r
-clean: begin clean_list clean_binary end\r
-\r
-clean_binary:\r
-       $(REMOVE) $(TARGET).hex\r
-       \r
-clean_list:\r
-       @echo $(MSG_CLEANING)\r
-       $(REMOVE) $(TARGET).eep\r
-       $(REMOVE) $(TARGET)eep.hex\r
-       $(REMOVE) $(TARGET).cof\r
-       $(REMOVE) $(TARGET).elf\r
-       $(REMOVE) $(TARGET).map\r
-       $(REMOVE) $(TARGET).sym\r
-       $(REMOVE) $(TARGET).lss\r
-       $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.o)\r
-       $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.lst)\r
-       $(REMOVE) $(SRC:.c=.s)\r
-       $(REMOVE) $(SRC:.c=.d)\r
-       $(REMOVE) $(SRC:.c=.i)\r
-       $(REMOVEDIR) .dep\r
-\r
-\r
-doxygen:\r
-       @echo Generating Project Documentation...\r
-       @doxygen Doxygen.conf\r
-       @echo Documentation Generation Complete.\r
-\r
-clean_doxygen:\r
-       rm -rf Documentation\r
-\r
-# Create object files directory\r
-$(shell mkdir $(OBJDIR) 2>/dev/null)\r
-\r
-\r
-# Include the dependency files.\r
--include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)\r
-\r
-\r
-# Listing of phony targets.\r
-.PHONY : all checkhooks checklibmode checkboard   \\r
-begin finish end sizebefore sizeafter gccversion  \\r
-build elf hex eep lss sym coff extcoff clean      \\r
-clean_list clean_binary program debug gdb-config  \\r
-doxygen dfu flip flip-ee dfu-ee
\ No newline at end of file
diff --git a/Demos/Device/Keyboard/Descriptors.c b/Demos/Device/Keyboard/Descriptors.c
deleted file mode 100644 (file)
index 8914909..0000000
+++ /dev/null
@@ -1,257 +0,0 @@
-/*\r
-             LUFA Library\r
-     Copyright (C) Dean Camera, 2009.\r
-              \r
-  dean [at] fourwalledcubicle [dot] com\r
-      www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
-  Copyright 2009  Denver Gingerich (denver [at] ossguy [dot] com)\r
-      Based on code by Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-         \r
-  Permission to use, copy, modify, and distribute this software\r
-  and its documentation for any purpose and without fee is hereby\r
-  granted, provided that the above copyright notice appear in all\r
-  copies and that both that the copyright notice and this\r
-  permission notice and warranty disclaimer appear in supporting\r
-  documentation, and that the name of the author not be used in\r
-  advertising or publicity pertaining to distribution of the\r
-  software without specific, written prior permission.\r
-\r
-  The author disclaim all warranties with regard to this\r
-  software, including all implied warranties of merchantability\r
-  and fitness.  In no event shall the author be liable for any\r
-  special, indirect or consequential damages or any damages\r
-  whatsoever resulting from loss of use, data or profits, whether\r
-  in an action of contract, negligence or other tortious action,\r
-  arising out of or in connection with the use or performance of\r
-  this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- *  USB Device Descriptors, for library use when in USB device mode. Descriptors are special \r
- *  computer-readable structures which the host requests upon device enumeration, to determine\r
- *  the device's capabilities and functions.  \r
- */\r
-\r
-#include "Descriptors.h"\r
-\r
-/** HID class report descriptor. This is a special descriptor constructed with values from the\r
- *  USBIF HID class specification to describe the reports and capabilities of the HID device. This\r
- *  descriptor is parsed by the host and its contents used to determine what data (and in what encoding)\r
- *  the device will send, and what it may be sent back from the host. Refer to the HID specification for\r
- *  more details on HID report descriptors.\r
- */\r
-USB_Descriptor_HIDReport_Datatype_t PROGMEM KeyboardReport[] =\r
-{\r
-       0x05, 0x01,          /* Usage Page (Generic Desktop)                    */\r
-       0x09, 0x06,          /* Usage (Keyboard)                                */\r
-       0xa1, 0x01,          /* Collection (Application)                        */\r
-       0x75, 0x01,          /*   Report Size (1)                               */\r
-       0x95, 0x08,          /*   Report Count (8)                              */\r
-       0x05, 0x07,          /*   Usage Page (Key Codes)                        */\r
-       0x19, 0xe0,          /*   Usage Minimum (Keyboard LeftControl)          */\r
-       0x29, 0xe7,          /*   Usage Maximum (Keyboard Right GUI)            */\r
-       0x15, 0x00,          /*   Logical Minimum (0)                           */\r
-       0x25, 0x01,          /*   Logical Maximum (1)                           */\r
-       0x81, 0x02,          /*   Input (Data, Variable, Absolute)              */\r
-       0x95, 0x01,          /*   Report Count (1)                              */\r
-       0x75, 0x08,          /*   Report Size (8)                               */\r
-       0x81, 0x03,          /*   Input (Const, Variable, Absolute)             */\r
-       0x95, 0x05,          /*   Report Count (5)                              */\r
-       0x75, 0x01,          /*   Report Size (1)                               */\r
-       0x05, 0x08,          /*   Usage Page (LEDs)                             */\r
-       0x19, 0x01,          /*   Usage Minimum (Num Lock)                      */\r
-       0x29, 0x05,          /*   Usage Maximum (Kana)                          */\r
-       0x91, 0x02,          /*   Output (Data, Variable, Absolute)             */\r
-       0x95, 0x01,          /*   Report Count (1)                              */\r
-       0x75, 0x03,          /*   Report Size (3)                               */\r
-       0x91, 0x03,          /*   Output (Const, Variable, Absolute)            */\r
-       0x95, 0x06,          /*   Report Count (6)                              */\r
-       0x75, 0x08,          /*   Report Size (8)                               */\r
-       0x15, 0x00,          /*   Logical Minimum (0)                           */\r
-       0x25, 0x65,          /*   Logical Maximum (101)                         */\r
-       0x05, 0x07,          /*   Usage Page (Keyboard)                         */\r
-       0x19, 0x00,          /*   Usage Minimum (Reserved (no event indicated)) */\r
-       0x29, 0x65,          /*   Usage Maximum (Keyboard Application)          */\r
-       0x81, 0x00,          /*   Input (Data, Array, Absolute)                 */\r
-       0xc0                 /* End Collection                                  */\r
-};\r
-\r
-/** Device descriptor structure. This descriptor, located in FLASH memory, describes the overall\r
- *  device characteristics, including the supported USB version, control endpoint size and the\r
- *  number of device configurations. The descriptor is read out by the USB host when the enumeration\r
- *  process begins.\r
- */\r
-USB_Descriptor_Device_t PROGMEM DeviceDescriptor =\r
-{\r
-       .Header                 = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device},\r
-               \r
-       .USBSpecification       = VERSION_BCD(01.10),\r
-       .Class                  = 0x00,\r
-       .SubClass               = 0x00,\r
-       .Protocol               = 0x00,\r
-                               \r
-       .Endpoint0Size          = FIXED_CONTROL_ENDPOINT_SIZE,\r
-               \r
-       .VendorID               = 0x03EB,\r
-       .ProductID              = 0x2042,\r
-       .ReleaseNumber          = 0x0000,\r
-               \r
-       .ManufacturerStrIndex   = 0x01,\r
-       .ProductStrIndex        = 0x02,\r
-       .SerialNumStrIndex      = NO_DESCRIPTOR,\r
-               \r
-       .NumberOfConfigurations = 1\r
-};\r
-\r
-/** Configuration descriptor structure. This descriptor, located in FLASH memory, describes the usage\r
- *  of the device in one of its supported configurations, including information about any device interfaces\r
- *  and endpoints. The descriptor is read out by the USB host during the enumeration process when selecting\r
- *  a configuration so that the host may correctly communicate with the USB device.\r
- */\r
-USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =\r
-{\r
-       .Config = \r
-               {\r
-                       .Header                 = {.Size = sizeof(USB_Descriptor_Configuration_Header_t), .Type = DTYPE_Configuration},\r
-\r
-                       .TotalConfigurationSize = sizeof(USB_Descriptor_Configuration_t),\r
-                       .TotalInterfaces        = 1,\r
-                               \r
-                       .ConfigurationNumber    = 1,\r
-                       .ConfigurationStrIndex  = NO_DESCRIPTOR,\r
-                               \r
-                       .ConfigAttributes       = (USB_CONFIG_ATTR_BUSPOWERED | USB_CONFIG_ATTR_SELFPOWERED),\r
-                       \r
-                       .MaxPowerConsumption    = USB_CONFIG_POWER_MA(100)\r
-               },\r
-               \r
-       .Interface = \r
-               {\r
-                       .Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},\r
-\r
-                       .InterfaceNumber        = 0x00,\r
-                       .AlternateSetting       = 0x00,\r
-                       \r
-                       .TotalEndpoints         = 1,\r
-                               \r
-                       .Class                  = 0x03,\r
-                       .SubClass               = 0x01,\r
-                       .Protocol               = 0x01,\r
-                               \r
-                       .InterfaceStrIndex      = NO_DESCRIPTOR\r
-               },\r
-\r
-       .KeyboardHID = \r
-               {  \r
-                       .Header                 = {.Size = sizeof(USB_Descriptor_HID_t), .Type = DTYPE_HID},\r
-                       \r
-                       .HIDSpec                = VERSION_BCD(01.11),\r
-                       .CountryCode            = 0x00,\r
-                       .TotalReportDescriptors = 1,\r
-                       .HIDReportType          = DTYPE_Report,\r
-                       .HIDReportLength        = sizeof(KeyboardReport)\r
-               },\r
-               \r
-       .KeyboardEndpoint = \r
-               {\r
-                       .Header                 = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},\r
-\r
-                       .EndpointAddress        = (ENDPOINT_DESCRIPTOR_DIR_IN | KEYBOARD_EPNUM),\r
-                       .Attributes             = EP_TYPE_INTERRUPT,\r
-                       .EndpointSize           = KEYBOARD_EPSIZE,\r
-                       .PollingIntervalMS      = 0x04\r
-               },\r
-};\r
-\r
-/** Language descriptor structure. This descriptor, located in FLASH memory, is returned when the host requests\r
- *  the string descriptor with index 0 (the first index). It is actually an array of 16-bit integers, which indicate\r
- *  via the language ID table available at USB.org what languages the device supports for its string descriptors.\r
- */\r
-USB_Descriptor_String_t PROGMEM LanguageString =\r
-{\r
-       .Header                 = {.Size = USB_STRING_LEN(1), .Type = DTYPE_String},\r
-               \r
-       .UnicodeString          = {LANGUAGE_ID_ENG}\r
-};\r
-\r
-/** Manufacturer descriptor string. This is a Unicode string containing the manufacturer's details in human readable\r
- *  form, and is read out upon request by the host when the appropriate string ID is requested, listed in the Device\r
- *  Descriptor.\r
- */\r
-USB_Descriptor_String_t PROGMEM ManufacturerString =\r
-{\r
-       .Header                 = {.Size = USB_STRING_LEN(16), .Type = DTYPE_String},\r
-               \r
-       .UnicodeString          = L"Denver Gingerich"\r
-};\r
-\r
-/** Product descriptor string. This is a Unicode string containing the product's details in human readable form,\r
- *  and is read out upon request by the host when the appropriate string ID is requested, listed in the Device\r
- *  Descriptor.\r
- */\r
-USB_Descriptor_String_t PROGMEM ProductString =\r
-{\r
-       .Header                 = {.Size = USB_STRING_LEN(18), .Type = DTYPE_String},\r
-               \r
-       .UnicodeString          = L"LUFA Keyboard Demo"\r
-};\r
-\r
-/** This function is called by the library when in device mode, and must be overridden (see library "USB Descriptors"\r
- *  documentation) by the application code so that the address and size of a requested descriptor can be given\r
- *  to the USB library. When the device receives a Get Descriptor request on the control endpoint, this function\r
- *  is called so that the descriptor details can be passed back and the appropriate descriptor sent back to the\r
- *  USB host.\r
- */\r
-uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
-{\r
-       const uint8_t  DescriptorType   = (wValue >> 8);\r
-       const uint8_t  DescriptorNumber = (wValue & 0xFF);\r
-\r
-       void*    Address = NULL;\r
-       uint16_t Size    = NO_DESCRIPTOR;\r
-\r
-       switch (DescriptorType)\r
-       {\r
-               case DTYPE_Device: \r
-                       Address = (void*)&DeviceDescriptor;\r
-                       Size    = sizeof(USB_Descriptor_Device_t);\r
-                       break;\r
-               case DTYPE_Configuration: \r
-                       Address = (void*)&ConfigurationDescriptor;\r
-                       Size    = sizeof(USB_Descriptor_Configuration_t);\r
-                       break;\r
-               case DTYPE_String: \r
-                       switch (DescriptorNumber)\r
-                       {\r
-                               case 0x00: \r
-                                       Address = (void*)&LanguageString;\r
-                                       Size    = pgm_read_byte(&LanguageString.Header.Size);\r
-                                       break;\r
-                               case 0x01: \r
-                                       Address = (void*)&ManufacturerString;\r
-                                       Size    = pgm_read_byte(&ManufacturerString.Header.Size);\r
-                                       break;\r
-                               case 0x02: \r
-                                       Address = (void*)&ProductString;\r
-                                       Size    = pgm_read_byte(&ProductString.Header.Size);\r
-                                       break;\r
-                       }\r
-                       \r
-                       break;\r
-               case DTYPE_HID: \r
-                       Address = (void*)&ConfigurationDescriptor.KeyboardHID;\r
-                       Size    = sizeof(USB_Descriptor_HID_t);\r
-                       break;\r
-               case DTYPE_Report: \r
-                       Address = (void*)&KeyboardReport;\r
-                       Size    = sizeof(KeyboardReport);\r
-                       break;\r
-       }\r
-       \r
-       *DescriptorAddress = Address;\r
-       return Size;\r
-}\r
diff --git a/Demos/Device/Keyboard/Descriptors.h b/Demos/Device/Keyboard/Descriptors.h
deleted file mode 100644 (file)
index 40b358c..0000000
+++ /dev/null
@@ -1,70 +0,0 @@
-/*\r
-             LUFA Library\r
-     Copyright (C) Dean Camera, 2009.\r
-              \r
-  dean [at] fourwalledcubicle [dot] com\r
-      www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
-  Copyright 2009  Denver Gingerich (denver [at] ossguy [dot] com)\r
-      Based on code by Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-         \r
-  Permission to use, copy, modify, and distribute this software\r
-  and its documentation for any purpose and without fee is hereby\r
-  granted, provided that the above copyright notice appear in all\r
-  copies and that both that the copyright notice and this\r
-  permission notice and warranty disclaimer appear in supporting\r
-  documentation, and that the name of the author not be used in\r
-  advertising or publicity pertaining to distribution of the\r
-  software without specific, written prior permission.\r
-\r
-  The author disclaim all warranties with regard to this\r
-  software, including all implied warranties of merchantability\r
-  and fitness.  In no event shall the author be liable for any\r
-  special, indirect or consequential damages or any damages\r
-  whatsoever resulting from loss of use, data or profits, whether\r
-  in an action of contract, negligence or other tortious action,\r
-  arising out of or in connection with the use or performance of\r
-  this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- *  Header file for Descriptors.c.\r
- */\r
-\r
-#ifndef _DESCRIPTORS_H_\r
-#define _DESCRIPTORS_H_\r
-\r
-       /* Includes: */\r
-               #include <avr/pgmspace.h>\r
-\r
-               #include <LUFA/Drivers/USB/USB.h>\r
-               #include <LUFA/Drivers/USB/Class/Device/HID.h>\r
-\r
-       /* Type Defines: */\r
-               /** Type define for the device configuration descriptor structure. This must be defined in the\r
-                *  application code, as the configuration descriptor contains several sub-descriptors which\r
-                *  vary between devices, and which describe the device's usage to the host.\r
-                */\r
-               typedef struct\r
-               {\r
-                       USB_Descriptor_Configuration_Header_t Config;\r
-                       USB_Descriptor_Interface_t            Interface;\r
-                       USB_Descriptor_HID_t                  KeyboardHID;\r
-               USB_Descriptor_Endpoint_t             KeyboardEndpoint;\r
-               } USB_Descriptor_Configuration_t;\r
-                                       \r
-       /* Macros: */\r
-               /** Endpoint number of the Keyboard HID reporting IN endpoint. */\r
-               #define KEYBOARD_EPNUM               1\r
-               \r
-               /** Size in bytes of the Keyboard HID reporting IN and OUT endpoints. */                \r
-               #define KEYBOARD_EPSIZE              8\r
-\r
-       /* Function Prototypes: */\r
-               uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
-                                                                                       ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);\r
-\r
-#endif\r
diff --git a/Demos/Device/Keyboard/Doxygen.conf b/Demos/Device/Keyboard/Doxygen.conf
deleted file mode 100644 (file)
index 79a300a..0000000
+++ /dev/null
@@ -1,1485 +0,0 @@
-# Doxyfile 1.5.7.1\r
-\r
-# This file describes the settings to be used by the documentation system\r
-# doxygen (www.doxygen.org) for a project\r
-#\r
-# All text after a hash (#) is considered a comment and will be ignored\r
-# The format is:\r
-#       TAG = value [value, ...]\r
-# For lists items can also be appended using:\r
-#       TAG += value [value, ...]\r
-# Values that contain spaces should be placed between quotes (" ")\r
-\r
-#---------------------------------------------------------------------------\r
-# Project related configuration options\r
-#---------------------------------------------------------------------------\r
-\r
-# This tag specifies the encoding used for all characters in the config file \r
-# that follow. The default is UTF-8 which is also the encoding used for all \r
-# text before the first occurrence of this tag. Doxygen uses libiconv (or the \r
-# iconv built into libc) for the transcoding. See \r
-# http://www.gnu.org/software/libiconv for the list of possible encodings.\r
-\r
-DOXYFILE_ENCODING      = UTF-8\r
-\r
-# The PROJECT_NAME tag is a single word (or a sequence of words surrounded \r
-# by quotes) that should identify the project.\r
-\r
-PROJECT_NAME           = "LUFA Library - Keyboard Device Demo"\r
-\r
-# The PROJECT_NUMBER tag can be used to enter a project or revision number. \r
-# This could be handy for archiving the generated documentation or \r
-# if some version control system is used.\r
-\r
-PROJECT_NUMBER         = 0.0.0\r
-\r
-# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) \r
-# base path where the generated documentation will be put. \r
-# If a relative path is entered, it will be relative to the location \r
-# where doxygen was started. If left blank the current directory will be used.\r
-\r
-OUTPUT_DIRECTORY       = ./Documentation/\r
-\r
-# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create \r
-# 4096 sub-directories (in 2 levels) under the output directory of each output \r
-# format and will distribute the generated files over these directories. \r
-# Enabling this option can be useful when feeding doxygen a huge amount of \r
-# source files, where putting all generated files in the same directory would \r
-# otherwise cause performance problems for the file system.\r
-\r
-CREATE_SUBDIRS         = YES\r
-\r
-# The OUTPUT_LANGUAGE tag is used to specify the language in which all \r
-# documentation generated by doxygen is written. Doxygen will use this \r
-# information to generate all constant output in the proper language. \r
-# The default language is English, other supported languages are: \r
-# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, \r
-# Croatian, Czech, Danish, Dutch, Farsi, Finnish, French, German, Greek, \r
-# Hungarian, Italian, Japanese, Japanese-en (Japanese with English messages), \r
-# Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, Polish, \r
-# Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, Slovene, \r
-# Spanish, Swedish, and Ukrainian.\r
-\r
-OUTPUT_LANGUAGE        = English\r
-\r
-# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will \r
-# include brief member descriptions after the members that are listed in \r
-# the file and class documentation (similar to JavaDoc). \r
-# Set to NO to disable this.\r
-\r
-BRIEF_MEMBER_DESC      = YES\r
-\r
-# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend \r
-# the brief description of a member or function before the detailed description. \r
-# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the \r
-# brief descriptions will be completely suppressed.\r
-\r
-REPEAT_BRIEF           = YES\r
-\r
-# This tag implements a quasi-intelligent brief description abbreviator \r
-# that is used to form the text in various listings. Each string \r
-# in this list, if found as the leading text of the brief description, will be \r
-# stripped from the text and the result after processing the whole list, is \r
-# used as the annotated text. Otherwise, the brief description is used as-is. \r
-# If left blank, the following values are used ("$name" is automatically \r
-# replaced with the name of the entity): "The $name class" "The $name widget" \r
-# "The $name file" "is" "provides" "specifies" "contains" \r
-# "represents" "a" "an" "the"\r
-\r
-ABBREVIATE_BRIEF       = "The $name class" \\r
-                         "The $name widget" \\r
-                         "The $name file" \\r
-                         is \\r
-                         provides \\r
-                         specifies \\r
-                         contains \\r
-                         represents \\r
-                         a \\r
-                         an \\r
-                         the\r
-\r
-# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then \r
-# Doxygen will generate a detailed section even if there is only a brief \r
-# description.\r
-\r
-ALWAYS_DETAILED_SEC    = NO\r
-\r
-# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all \r
-# inherited members of a class in the documentation of that class as if those \r
-# members were ordinary class members. Constructors, destructors and assignment \r
-# operators of the base classes will not be shown.\r
-\r
-INLINE_INHERITED_MEMB  = NO\r
-\r
-# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full \r
-# path before files name in the file list and in the header files. If set \r
-# to NO the shortest path that makes the file name unique will be used.\r
-\r
-FULL_PATH_NAMES        = YES\r
-\r
-# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag \r
-# can be used to strip a user-defined part of the path. Stripping is \r
-# only done if one of the specified strings matches the left-hand part of \r
-# the path. The tag can be used to show relative paths in the file list. \r
-# If left blank the directory from which doxygen is run is used as the \r
-# path to strip.\r
-\r
-STRIP_FROM_PATH        = \r
-\r
-# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of \r
-# the path mentioned in the documentation of a class, which tells \r
-# the reader which header file to include in order to use a class. \r
-# If left blank only the name of the header file containing the class \r
-# definition is used. Otherwise one should specify the include paths that \r
-# are normally passed to the compiler using the -I flag.\r
-\r
-STRIP_FROM_INC_PATH    = \r
-\r
-# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter \r
-# (but less readable) file names. This can be useful is your file systems \r
-# doesn't support long names like on DOS, Mac, or CD-ROM.\r
-\r
-SHORT_NAMES            = YES\r
-\r
-# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen \r
-# will interpret the first line (until the first dot) of a JavaDoc-style \r
-# comment as the brief description. If set to NO, the JavaDoc \r
-# comments will behave just like regular Qt-style comments \r
-# (thus requiring an explicit @brief command for a brief description.)\r
-\r
-JAVADOC_AUTOBRIEF      = NO\r
-\r
-# If the QT_AUTOBRIEF tag is set to YES then Doxygen will \r
-# interpret the first line (until the first dot) of a Qt-style \r
-# comment as the brief description. If set to NO, the comments \r
-# will behave just like regular Qt-style comments (thus requiring \r
-# an explicit \brief command for a brief description.)\r
-\r
-QT_AUTOBRIEF           = NO\r
-\r
-# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen \r
-# treat a multi-line C++ special comment block (i.e. a block of //! or /// \r
-# comments) as a brief description. This used to be the default behaviour. \r
-# The new default is to treat a multi-line C++ comment block as a detailed \r
-# description. Set this tag to YES if you prefer the old behaviour instead.\r
-\r
-MULTILINE_CPP_IS_BRIEF = NO\r
-\r
-# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented \r
-# member inherits the documentation from any documented member that it \r
-# re-implements.\r
-\r
-INHERIT_DOCS           = YES\r
-\r
-# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce \r
-# a new page for each member. If set to NO, the documentation of a member will \r
-# be part of the file/class/namespace that contains it.\r
-\r
-SEPARATE_MEMBER_PAGES  = NO\r
-\r
-# The TAB_SIZE tag can be used to set the number of spaces in a tab. \r
-# Doxygen uses this value to replace tabs by spaces in code fragments.\r
-\r
-TAB_SIZE               = 4\r
-\r
-# This tag can be used to specify a number of aliases that acts \r
-# as commands in the documentation. An alias has the form "name=value". \r
-# For example adding "sideeffect=\par Side Effects:\n" will allow you to \r
-# put the command \sideeffect (or @sideeffect) in the documentation, which \r
-# will result in a user-defined paragraph with heading "Side Effects:". \r
-# You can put \n's in the value part of an alias to insert newlines.\r
-\r
-ALIASES                = \r
-\r
-# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C \r
-# sources only. Doxygen will then generate output that is more tailored for C. \r
-# For instance, some of the names that are used will be different. The list \r
-# of all members will be omitted, etc.\r
-\r
-OPTIMIZE_OUTPUT_FOR_C  = YES\r
-\r
-# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java \r
-# sources only. Doxygen will then generate output that is more tailored for \r
-# Java. For instance, namespaces will be presented as packages, qualified \r
-# scopes will look different, etc.\r
-\r
-OPTIMIZE_OUTPUT_JAVA   = NO\r
-\r
-# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran \r
-# sources only. Doxygen will then generate output that is more tailored for \r
-# Fortran.\r
-\r
-OPTIMIZE_FOR_FORTRAN   = NO\r
-\r
-# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL \r
-# sources. Doxygen will then generate output that is tailored for \r
-# VHDL.\r
-\r
-OPTIMIZE_OUTPUT_VHDL   = NO\r
-\r
-# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want \r
-# to include (a tag file for) the STL sources as input, then you should \r
-# set this tag to YES in order to let doxygen match functions declarations and \r
-# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. \r
-# func(std::string) {}). This also make the inheritance and collaboration \r
-# diagrams that involve STL classes more complete and accurate.\r
-\r
-BUILTIN_STL_SUPPORT    = NO\r
-\r
-# If you use Microsoft's C++/CLI language, you should set this option to YES to\r
-# enable parsing support.\r
-\r
-CPP_CLI_SUPPORT        = NO\r
-\r
-# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. \r
-# Doxygen will parse them like normal C++ but will assume all classes use public \r
-# instead of private inheritance when no explicit protection keyword is present.\r
-\r
-SIP_SUPPORT            = NO\r
-\r
-# For Microsoft's IDL there are propget and propput attributes to indicate getter \r
-# and setter methods for a property. Setting this option to YES (the default) \r
-# will make doxygen to replace the get and set methods by a property in the \r
-# documentation. This will only work if the methods are indeed getting or \r
-# setting a simple type. If this is not the case, or you want to show the \r
-# methods anyway, you should set this option to NO.\r
-\r
-IDL_PROPERTY_SUPPORT   = YES\r
-\r
-# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC \r
-# tag is set to YES, then doxygen will reuse the documentation of the first \r
-# member in the group (if any) for the other members of the group. By default \r
-# all members of a group must be documented explicitly.\r
-\r
-DISTRIBUTE_GROUP_DOC   = NO\r
-\r
-# Set the SUBGROUPING tag to YES (the default) to allow class member groups of \r
-# the same type (for instance a group of public functions) to be put as a \r
-# subgroup of that type (e.g. under the Public Functions section). Set it to \r
-# NO to prevent subgrouping. Alternatively, this can be done per class using \r
-# the \nosubgrouping command.\r
-\r
-SUBGROUPING            = YES\r
-\r
-# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum \r
-# is documented as struct, union, or enum with the name of the typedef. So \r
-# typedef struct TypeS {} TypeT, will appear in the documentation as a struct \r
-# with name TypeT. When disabled the typedef will appear as a member of a file, \r
-# namespace, or class. And the struct will be named TypeS. This can typically \r
-# be useful for C code in case the coding convention dictates that all compound \r
-# types are typedef'ed and only the typedef is referenced, never the tag name.\r
-\r
-TYPEDEF_HIDES_STRUCT   = NO\r
-\r
-# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to \r
-# determine which symbols to keep in memory and which to flush to disk.\r
-# When the cache is full, less often used symbols will be written to disk.\r
-# For small to medium size projects (<1000 input files) the default value is \r
-# probably good enough. For larger projects a too small cache size can cause \r
-# doxygen to be busy swapping symbols to and from disk most of the time \r
-# causing a significant performance penality. \r
-# If the system has enough physical memory increasing the cache will improve the \r
-# performance by keeping more symbols in memory. Note that the value works on \r
-# a logarithmic scale so increasing the size by one will rougly double the \r
-# memory usage. The cache size is given by this formula: \r
-# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, \r
-# corresponding to a cache size of 2^16 = 65536 symbols\r
-\r
-SYMBOL_CACHE_SIZE      = 0\r
-\r
-#---------------------------------------------------------------------------\r
-# Build related configuration options\r
-#---------------------------------------------------------------------------\r
-\r
-# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in \r
-# documentation are documented, even if no documentation was available. \r
-# Private class members and static file members will be hidden unless \r
-# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES\r
-\r
-EXTRACT_ALL            = YES\r
-\r
-# If the EXTRACT_PRIVATE tag is set to YES all private members of a class \r
-# will be included in the documentation.\r
-\r
-EXTRACT_PRIVATE        = YES\r
-\r
-# If the EXTRACT_STATIC tag is set to YES all static members of a file \r
-# will be included in the documentation.\r
-\r
-EXTRACT_STATIC         = YES\r
-\r
-# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) \r
-# defined locally in source files will be included in the documentation. \r
-# If set to NO only classes defined in header files are included.\r
-\r
-EXTRACT_LOCAL_CLASSES  = YES\r
-\r
-# This flag is only useful for Objective-C code. When set to YES local \r
-# methods, which are defined in the implementation section but not in \r
-# the interface are included in the documentation. \r
-# If set to NO (the default) only methods in the interface are included.\r
-\r
-EXTRACT_LOCAL_METHODS  = NO\r
-\r
-# If this flag is set to YES, the members of anonymous namespaces will be \r
-# extracted and appear in the documentation as a namespace called \r
-# 'anonymous_namespace{file}', where file will be replaced with the base \r
-# name of the file that contains the anonymous namespace. By default \r
-# anonymous namespace are hidden.\r
-\r
-EXTRACT_ANON_NSPACES   = NO\r
-\r
-# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all \r
-# undocumented members of documented classes, files or namespaces. \r
-# If set to NO (the default) these members will be included in the \r
-# various overviews, but no documentation section is generated. \r
-# This option has no effect if EXTRACT_ALL is enabled.\r
-\r
-HIDE_UNDOC_MEMBERS     = NO\r
-\r
-# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all \r
-# undocumented classes that are normally visible in the class hierarchy. \r
-# If set to NO (the default) these classes will be included in the various \r
-# overviews. This option has no effect if EXTRACT_ALL is enabled.\r
-\r
-HIDE_UNDOC_CLASSES     = NO\r
-\r
-# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all \r
-# friend (class|struct|union) declarations. \r
-# If set to NO (the default) these declarations will be included in the \r
-# documentation.\r
-\r
-HIDE_FRIEND_COMPOUNDS  = NO\r
-\r
-# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any \r
-# documentation blocks found inside the body of a function. \r
-# If set to NO (the default) these blocks will be appended to the \r
-# function's detailed documentation block.\r
-\r
-HIDE_IN_BODY_DOCS      = NO\r
-\r
-# The INTERNAL_DOCS tag determines if documentation \r
-# that is typed after a \internal command is included. If the tag is set \r
-# to NO (the default) then the documentation will be excluded. \r
-# Set it to YES to include the internal documentation.\r
-\r
-INTERNAL_DOCS          = NO\r
-\r
-# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate \r
-# file names in lower-case letters. If set to YES upper-case letters are also \r
-# allowed. This is useful if you have classes or files whose names only differ \r
-# in case and if your file system supports case sensitive file names. Windows \r
-# and Mac users are advised to set this option to NO.\r
-\r
-CASE_SENSE_NAMES       = NO\r
-\r
-# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen \r
-# will show members with their full class and namespace scopes in the \r
-# documentation. If set to YES the scope will be hidden.\r
-\r
-HIDE_SCOPE_NAMES       = NO\r
-\r
-# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen \r
-# will put a list of the files that are included by a file in the documentation \r
-# of that file.\r
-\r
-SHOW_INCLUDE_FILES     = YES\r
-\r
-# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] \r
-# is inserted in the documentation for inline members.\r
-\r
-INLINE_INFO            = YES\r
-\r
-# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen \r
-# will sort the (detailed) documentation of file and class members \r
-# alphabetically by member name. If set to NO the members will appear in \r
-# declaration order.\r
-\r
-SORT_MEMBER_DOCS       = YES\r
-\r
-# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the \r
-# brief documentation of file, namespace and class members alphabetically \r
-# by member name. If set to NO (the default) the members will appear in \r
-# declaration order.\r
-\r
-SORT_BRIEF_DOCS        = NO\r
-\r
-# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the \r
-# hierarchy of group names into alphabetical order. If set to NO (the default) \r
-# the group names will appear in their defined order.\r
-\r
-SORT_GROUP_NAMES       = NO\r
-\r
-# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be \r
-# sorted by fully-qualified names, including namespaces. If set to \r
-# NO (the default), the class list will be sorted only by class name, \r
-# not including the namespace part. \r
-# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.\r
-# Note: This option applies only to the class list, not to the \r
-# alphabetical list.\r
-\r
-SORT_BY_SCOPE_NAME     = NO\r
-\r
-# The GENERATE_TODOLIST tag can be used to enable (YES) or \r
-# disable (NO) the todo list. This list is created by putting \todo \r
-# commands in the documentation.\r
-\r
-GENERATE_TODOLIST      = NO\r
-\r
-# The GENERATE_TESTLIST tag can be used to enable (YES) or \r
-# disable (NO) the test list. This list is created by putting \test \r
-# commands in the documentation.\r
-\r
-GENERATE_TESTLIST      = NO\r
-\r
-# The GENERATE_BUGLIST tag can be used to enable (YES) or \r
-# disable (NO) the bug list. This list is created by putting \bug \r
-# commands in the documentation.\r
-\r
-GENERATE_BUGLIST       = NO\r
-\r
-# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or \r
-# disable (NO) the deprecated list. This list is created by putting \r
-# \deprecated commands in the documentation.\r
-\r
-GENERATE_DEPRECATEDLIST= YES\r
-\r
-# The ENABLED_SECTIONS tag can be used to enable conditional \r
-# documentation sections, marked by \if sectionname ... \endif.\r
-\r
-ENABLED_SECTIONS       = \r
-\r
-# The MAX_INITIALIZER_LINES tag determines the maximum number of lines \r
-# the initial value of a variable or define consists of for it to appear in \r
-# the documentation. If the initializer consists of more lines than specified \r
-# here it will be hidden. Use a value of 0 to hide initializers completely. \r
-# The appearance of the initializer of individual variables and defines in the \r
-# documentation can be controlled using \showinitializer or \hideinitializer \r
-# command in the documentation regardless of this setting.\r
-\r
-MAX_INITIALIZER_LINES  = 30\r
-\r
-# Set the SHOW_USED_FILES tag to NO to disable the list of files generated \r
-# at the bottom of the documentation of classes and structs. If set to YES the \r
-# list will mention the files that were used to generate the documentation.\r
-\r
-SHOW_USED_FILES        = YES\r
-\r
-# If the sources in your project are distributed over multiple directories \r
-# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy \r
-# in the documentation. The default is NO.\r
-\r
-SHOW_DIRECTORIES       = YES\r
-\r
-# Set the SHOW_FILES tag to NO to disable the generation of the Files page.\r
-# This will remove the Files entry from the Quick Index and from the \r
-# Folder Tree View (if specified). The default is YES.\r
-\r
-SHOW_FILES             = YES\r
-\r
-# Set the SHOW_NAMESPACES tag to NO to disable the generation of the \r
-# Namespaces page.  This will remove the Namespaces entry from the Quick Index\r
-# and from the Folder Tree View (if specified). The default is YES.\r
-\r
-SHOW_NAMESPACES        = YES\r
-\r
-# The FILE_VERSION_FILTER tag can be used to specify a program or script that \r
-# doxygen should invoke to get the current version for each file (typically from \r
-# the version control system). Doxygen will invoke the program by executing (via \r
-# popen()) the command <command> <input-file>, where <command> is the value of \r
-# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file \r
-# provided by doxygen. Whatever the program writes to standard output \r
-# is used as the file version. See the manual for examples.\r
-\r
-FILE_VERSION_FILTER    = \r
-\r
-# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by \r
-# doxygen. The layout file controls the global structure of the generated output files \r
-# in an output format independent way. The create the layout file that represents \r
-# doxygen's defaults, run doxygen with the -l option. You can optionally specify a \r
-# file name after the option, if omitted DoxygenLayout.xml will be used as the name \r
-# of the layout file.\r
-\r
-LAYOUT_FILE            = \r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to warning and progress messages\r
-#---------------------------------------------------------------------------\r
-\r
-# The QUIET tag can be used to turn on/off the messages that are generated \r
-# by doxygen. Possible values are YES and NO. If left blank NO is used.\r
-\r
-QUIET                  = YES\r
-\r
-# The WARNINGS tag can be used to turn on/off the warning messages that are \r
-# generated by doxygen. Possible values are YES and NO. If left blank \r
-# NO is used.\r
-\r
-WARNINGS               = YES\r
-\r
-# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings \r
-# for undocumented members. If EXTRACT_ALL is set to YES then this flag will \r
-# automatically be disabled.\r
-\r
-WARN_IF_UNDOCUMENTED   = YES\r
-\r
-# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for \r
-# potential errors in the documentation, such as not documenting some \r
-# parameters in a documented function, or documenting parameters that \r
-# don't exist or using markup commands wrongly.\r
-\r
-WARN_IF_DOC_ERROR      = YES\r
-\r
-# This WARN_NO_PARAMDOC option can be abled to get warnings for \r
-# functions that are documented, but have no documentation for their parameters \r
-# or return value. If set to NO (the default) doxygen will only warn about \r
-# wrong or incomplete parameter documentation, but not about the absence of \r
-# documentation.\r
-\r
-WARN_NO_PARAMDOC       = YES\r
-\r
-# The WARN_FORMAT tag determines the format of the warning messages that \r
-# doxygen can produce. The string should contain the $file, $line, and $text \r
-# tags, which will be replaced by the file and line number from which the \r
-# warning originated and the warning text. Optionally the format may contain \r
-# $version, which will be replaced by the version of the file (if it could \r
-# be obtained via FILE_VERSION_FILTER)\r
-\r
-WARN_FORMAT            = "$file:$line: $text"\r
-\r
-# The WARN_LOGFILE tag can be used to specify a file to which warning \r
-# and error messages should be written. If left blank the output is written \r
-# to stderr.\r
-\r
-WARN_LOGFILE           = \r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the input files\r
-#---------------------------------------------------------------------------\r
-\r
-# The INPUT tag can be used to specify the files and/or directories that contain \r
-# documented source files. You may enter file names like "myfile.cpp" or \r
-# directories like "/usr/src/myproject". Separate the files or directories \r
-# with spaces.\r
-\r
-INPUT                  = ./\r
-\r
-# This tag can be used to specify the character encoding of the source files \r
-# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is \r
-# also the default input encoding. Doxygen uses libiconv (or the iconv built \r
-# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for \r
-# the list of possible encodings.\r
-\r
-INPUT_ENCODING         = UTF-8\r
-\r
-# If the value of the INPUT tag contains directories, you can use the \r
-# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \r
-# and *.h) to filter out the source-files in the directories. If left \r
-# blank the following patterns are tested: \r
-# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx \r
-# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90\r
-\r
-FILE_PATTERNS          = *.h \\r
-                         *.c \\r
-                                                *.txt\r
-\r
-# The RECURSIVE tag can be used to turn specify whether or not subdirectories \r
-# should be searched for input files as well. Possible values are YES and NO. \r
-# If left blank NO is used.\r
-\r
-RECURSIVE              = YES\r
-\r
-# The EXCLUDE tag can be used to specify files and/or directories that should \r
-# excluded from the INPUT source files. This way you can easily exclude a \r
-# subdirectory from a directory tree whose root is specified with the INPUT tag.\r
-\r
-EXCLUDE                = \r
-\r
-# The EXCLUDE_SYMLINKS tag can be used select whether or not files or \r
-# directories that are symbolic links (a Unix filesystem feature) are excluded \r
-# from the input.\r
-\r
-EXCLUDE_SYMLINKS       = NO\r
-\r
-# If the value of the INPUT tag contains directories, you can use the \r
-# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude \r
-# certain files from those directories. Note that the wildcards are matched \r
-# against the file with absolute path, so to exclude all test directories \r
-# for example use the pattern */test/*\r
-\r
-EXCLUDE_PATTERNS       = */LowLevel/USBMode.h\r
-\r
-# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names \r
-# (namespaces, classes, functions, etc.) that should be excluded from the \r
-# output. The symbol name can be a fully qualified name, a word, or if the \r
-# wildcard * is used, a substring. Examples: ANamespace, AClass, \r
-# AClass::ANamespace, ANamespace::*Test\r
-\r
-EXCLUDE_SYMBOLS        = __*\r
-\r
-# The EXAMPLE_PATH tag can be used to specify one or more files or \r
-# directories that contain example code fragments that are included (see \r
-# the \include command).\r
-\r
-EXAMPLE_PATH           = \r
-\r
-# If the value of the EXAMPLE_PATH tag contains directories, you can use the \r
-# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \r
-# and *.h) to filter out the source-files in the directories. If left \r
-# blank all files are included.\r
-\r
-EXAMPLE_PATTERNS       = *\r
-\r
-# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be \r
-# searched for input files to be used with the \include or \dontinclude \r
-# commands irrespective of the value of the RECURSIVE tag. \r
-# Possible values are YES and NO. If left blank NO is used.\r
-\r
-EXAMPLE_RECURSIVE      = NO\r
-\r
-# The IMAGE_PATH tag can be used to specify one or more files or \r
-# directories that contain image that are included in the documentation (see \r
-# the \image command).\r
-\r
-IMAGE_PATH             = \r
-\r
-# The INPUT_FILTER tag can be used to specify a program that doxygen should \r
-# invoke to filter for each input file. Doxygen will invoke the filter program \r
-# by executing (via popen()) the command <filter> <input-file>, where <filter> \r
-# is the value of the INPUT_FILTER tag, and <input-file> is the name of an \r
-# input file. Doxygen will then use the output that the filter program writes \r
-# to standard output.  If FILTER_PATTERNS is specified, this tag will be \r
-# ignored.\r
-\r
-INPUT_FILTER           = \r
-\r
-# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern \r
-# basis.  Doxygen will compare the file name with each pattern and apply the \r
-# filter if there is a match.  The filters are a list of the form: \r
-# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further \r
-# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER \r
-# is applied to all files.\r
-\r
-FILTER_PATTERNS        = \r
-\r
-# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using \r
-# INPUT_FILTER) will be used to filter the input files when producing source \r
-# files to browse (i.e. when SOURCE_BROWSER is set to YES).\r
-\r
-FILTER_SOURCE_FILES    = NO\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to source browsing\r
-#---------------------------------------------------------------------------\r
-\r
-# If the SOURCE_BROWSER tag is set to YES then a list of source files will \r
-# be generated. Documented entities will be cross-referenced with these sources. \r
-# Note: To get rid of all source code in the generated output, make sure also \r
-# VERBATIM_HEADERS is set to NO.\r
-\r
-SOURCE_BROWSER         = NO\r
-\r
-# Setting the INLINE_SOURCES tag to YES will include the body \r
-# of functions and classes directly in the documentation.\r
-\r
-INLINE_SOURCES         = NO\r
-\r
-# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct \r
-# doxygen to hide any special comment blocks from generated source code \r
-# fragments. Normal C and C++ comments will always remain visible.\r
-\r
-STRIP_CODE_COMMENTS    = YES\r
-\r
-# If the REFERENCED_BY_RELATION tag is set to YES \r
-# then for each documented function all documented \r
-# functions referencing it will be listed.\r
-\r
-REFERENCED_BY_RELATION = NO\r
-\r
-# If the REFERENCES_RELATION tag is set to YES \r
-# then for each documented function all documented entities \r
-# called/used by that function will be listed.\r
-\r
-REFERENCES_RELATION    = NO\r
-\r
-# If the REFERENCES_LINK_SOURCE tag is set to YES (the default)\r
-# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from\r
-# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will\r
-# link to the source code.  Otherwise they will link to the documentstion.\r
-\r
-REFERENCES_LINK_SOURCE = NO\r
-\r
-# If the USE_HTAGS tag is set to YES then the references to source code \r
-# will point to the HTML generated by the htags(1) tool instead of doxygen \r
-# built-in source browser. The htags tool is part of GNU's global source \r
-# tagging system (see http://www.gnu.org/software/global/global.html). You \r
-# will need version 4.8.6 or higher.\r
-\r
-USE_HTAGS              = NO\r
-\r
-# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen \r
-# will generate a verbatim copy of the header file for each class for \r
-# which an include is specified. Set to NO to disable this.\r
-\r
-VERBATIM_HEADERS       = NO\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the alphabetical class index\r
-#---------------------------------------------------------------------------\r
-\r
-# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index \r
-# of all compounds will be generated. Enable this if the project \r
-# contains a lot of classes, structs, unions or interfaces.\r
-\r
-ALPHABETICAL_INDEX     = YES\r
-\r
-# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then \r
-# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns \r
-# in which this list will be split (can be a number in the range [1..20])\r
-\r
-COLS_IN_ALPHA_INDEX    = 5\r
-\r
-# In case all classes in a project start with a common prefix, all \r
-# classes will be put under the same header in the alphabetical index. \r
-# The IGNORE_PREFIX tag can be used to specify one or more prefixes that \r
-# should be ignored while generating the index headers.\r
-\r
-IGNORE_PREFIX          = \r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the HTML output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_HTML tag is set to YES (the default) Doxygen will \r
-# generate HTML output.\r
-\r
-GENERATE_HTML          = YES\r
-\r
-# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. \r
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
-# put in front of it. If left blank `html' will be used as the default path.\r
-\r
-HTML_OUTPUT            = html\r
-\r
-# The HTML_FILE_EXTENSION tag can be used to specify the file extension for \r
-# each generated HTML page (for example: .htm,.php,.asp). If it is left blank \r
-# doxygen will generate files with .html extension.\r
-\r
-HTML_FILE_EXTENSION    = .html\r
-\r
-# The HTML_HEADER tag can be used to specify a personal HTML header for \r
-# each generated HTML page. If it is left blank doxygen will generate a \r
-# standard header.\r
-\r
-HTML_HEADER            = \r
-\r
-# The HTML_FOOTER tag can be used to specify a personal HTML footer for \r
-# each generated HTML page. If it is left blank doxygen will generate a \r
-# standard footer.\r
-\r
-HTML_FOOTER            = \r
-\r
-# The HTML_STYLESHEET tag can be used to specify a user-defined cascading \r
-# style sheet that is used by each HTML page. It can be used to \r
-# fine-tune the look of the HTML output. If the tag is left blank doxygen \r
-# will generate a default style sheet. Note that doxygen will try to copy \r
-# the style sheet file to the HTML output directory, so don't put your own \r
-# stylesheet in the HTML output directory as well, or it will be erased!\r
-\r
-HTML_STYLESHEET        = \r
-\r
-# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, \r
-# files or namespaces will be aligned in HTML using tables. If set to \r
-# NO a bullet list will be used.\r
-\r
-HTML_ALIGN_MEMBERS     = YES\r
-\r
-# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML \r
-# documentation will contain sections that can be hidden and shown after the \r
-# page has loaded. For this to work a browser that supports \r
-# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox \r
-# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari).\r
-\r
-HTML_DYNAMIC_SECTIONS  = YES\r
-\r
-# If the GENERATE_DOCSET tag is set to YES, additional index files \r
-# will be generated that can be used as input for Apple's Xcode 3 \r
-# integrated development environment, introduced with OSX 10.5 (Leopard). \r
-# To create a documentation set, doxygen will generate a Makefile in the \r
-# HTML output directory. Running make will produce the docset in that \r
-# directory and running "make install" will install the docset in \r
-# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find \r
-# it at startup. \r
-# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information.\r
-\r
-GENERATE_DOCSET        = NO\r
-\r
-# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the \r
-# feed. A documentation feed provides an umbrella under which multiple \r
-# documentation sets from a single provider (such as a company or product suite) \r
-# can be grouped.\r
-\r
-DOCSET_FEEDNAME        = "Doxygen generated docs"\r
-\r
-# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that \r
-# should uniquely identify the documentation set bundle. This should be a \r
-# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen \r
-# will append .docset to the name.\r
-\r
-DOCSET_BUNDLE_ID       = org.doxygen.Project\r
-\r
-# If the GENERATE_HTMLHELP tag is set to YES, additional index files \r
-# will be generated that can be used as input for tools like the \r
-# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) \r
-# of the generated HTML documentation.\r
-\r
-GENERATE_HTMLHELP      = NO\r
-\r
-# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can \r
-# be used to specify the file name of the resulting .chm file. You \r
-# can add a path in front of the file if the result should not be \r
-# written to the html output directory.\r
-\r
-CHM_FILE               = \r
-\r
-# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can \r
-# be used to specify the location (absolute path including file name) of \r
-# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run \r
-# the HTML help compiler on the generated index.hhp.\r
-\r
-HHC_LOCATION           = \r
-\r
-# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag \r
-# controls if a separate .chi index file is generated (YES) or that \r
-# it should be included in the master .chm file (NO).\r
-\r
-GENERATE_CHI           = NO\r
-\r
-# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING\r
-# is used to encode HtmlHelp index (hhk), content (hhc) and project file\r
-# content.\r
-\r
-CHM_INDEX_ENCODING     = \r
-\r
-# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag \r
-# controls whether a binary table of contents is generated (YES) or a \r
-# normal table of contents (NO) in the .chm file.\r
-\r
-BINARY_TOC             = NO\r
-\r
-# The TOC_EXPAND flag can be set to YES to add extra items for group members \r
-# to the contents of the HTML help documentation and to the tree view.\r
-\r
-TOC_EXPAND             = YES\r
-\r
-# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER \r
-# are set, an additional index file will be generated that can be used as input for \r
-# Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated \r
-# HTML documentation.\r
-\r
-GENERATE_QHP           = NO\r
-\r
-# If the QHG_LOCATION tag is specified, the QCH_FILE tag can \r
-# be used to specify the file name of the resulting .qch file. \r
-# The path specified is relative to the HTML output folder.\r
-\r
-QCH_FILE               = \r
-\r
-# The QHP_NAMESPACE tag specifies the namespace to use when generating \r
-# Qt Help Project output. For more information please see \r
-# <a href="http://doc.trolltech.com/qthelpproject.html#namespace">Qt Help Project / Namespace</a>.\r
-\r
-QHP_NAMESPACE          = org.doxygen.Project\r
-\r
-# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating \r
-# Qt Help Project output. For more information please see \r
-# <a href="http://doc.trolltech.com/qthelpproject.html#virtual-folders">Qt Help Project / Virtual Folders</a>.\r
-\r
-QHP_VIRTUAL_FOLDER     = doc\r
-\r
-# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can \r
-# be used to specify the location of Qt's qhelpgenerator. \r
-# If non-empty doxygen will try to run qhelpgenerator on the generated \r
-# .qhp file .\r
-\r
-QHG_LOCATION           = \r
-\r
-# The DISABLE_INDEX tag can be used to turn on/off the condensed index at \r
-# top of each HTML page. The value NO (the default) enables the index and \r
-# the value YES disables it.\r
-\r
-DISABLE_INDEX          = NO\r
-\r
-# This tag can be used to set the number of enum values (range [1..20]) \r
-# that doxygen will group on one line in the generated HTML documentation.\r
-\r
-ENUM_VALUES_PER_LINE   = 1\r
-\r
-# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index\r
-# structure should be generated to display hierarchical information.\r
-# If the tag value is set to FRAME, a side panel will be generated\r
-# containing a tree-like index structure (just like the one that \r
-# is generated for HTML Help). For this to work a browser that supports \r
-# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, \r
-# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are \r
-# probably better off using the HTML help feature. Other possible values \r
-# for this tag are: HIERARCHIES, which will generate the Groups, Directories,\r
-# and Class Hierarchy pages using a tree view instead of an ordered list;\r
-# ALL, which combines the behavior of FRAME and HIERARCHIES; and NONE, which\r
-# disables this behavior completely. For backwards compatibility with previous\r
-# releases of Doxygen, the values YES and NO are equivalent to FRAME and NONE\r
-# respectively.\r
-\r
-GENERATE_TREEVIEW      = YES\r
-\r
-# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be \r
-# used to set the initial width (in pixels) of the frame in which the tree \r
-# is shown.\r
-\r
-TREEVIEW_WIDTH         = 250\r
-\r
-# Use this tag to change the font size of Latex formulas included \r
-# as images in the HTML documentation. The default is 10. Note that \r
-# when you change the font size after a successful doxygen run you need \r
-# to manually remove any form_*.png images from the HTML output directory \r
-# to force them to be regenerated.\r
-\r
-FORMULA_FONTSIZE       = 10\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the LaTeX output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will \r
-# generate Latex output.\r
-\r
-GENERATE_LATEX         = NO\r
-\r
-# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. \r
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
-# put in front of it. If left blank `latex' will be used as the default path.\r
-\r
-LATEX_OUTPUT           = latex\r
-\r
-# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be \r
-# invoked. If left blank `latex' will be used as the default command name.\r
-\r
-LATEX_CMD_NAME         = latex\r
-\r
-# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to \r
-# generate index for LaTeX. If left blank `makeindex' will be used as the \r
-# default command name.\r
-\r
-MAKEINDEX_CMD_NAME     = makeindex\r
-\r
-# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact \r
-# LaTeX documents. This may be useful for small projects and may help to \r
-# save some trees in general.\r
-\r
-COMPACT_LATEX          = NO\r
-\r
-# The PAPER_TYPE tag can be used to set the paper type that is used \r
-# by the printer. Possible values are: a4, a4wide, letter, legal and \r
-# executive. If left blank a4wide will be used.\r
-\r
-PAPER_TYPE             = a4wide\r
-\r
-# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX \r
-# packages that should be included in the LaTeX output.\r
-\r
-EXTRA_PACKAGES         = \r
-\r
-# The LATEX_HEADER tag can be used to specify a personal LaTeX header for \r
-# the generated latex document. The header should contain everything until \r
-# the first chapter. If it is left blank doxygen will generate a \r
-# standard header. Notice: only use this tag if you know what you are doing!\r
-\r
-LATEX_HEADER           = \r
-\r
-# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated \r
-# is prepared for conversion to pdf (using ps2pdf). The pdf file will \r
-# contain links (just like the HTML output) instead of page references \r
-# This makes the output suitable for online browsing using a pdf viewer.\r
-\r
-PDF_HYPERLINKS         = YES\r
-\r
-# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of \r
-# plain latex in the generated Makefile. Set this option to YES to get a \r
-# higher quality PDF documentation.\r
-\r
-USE_PDFLATEX           = YES\r
-\r
-# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. \r
-# command to the generated LaTeX files. This will instruct LaTeX to keep \r
-# running if errors occur, instead of asking the user for help. \r
-# This option is also used when generating formulas in HTML.\r
-\r
-LATEX_BATCHMODE        = NO\r
-\r
-# If LATEX_HIDE_INDICES is set to YES then doxygen will not \r
-# include the index chapters (such as File Index, Compound Index, etc.) \r
-# in the output.\r
-\r
-LATEX_HIDE_INDICES     = NO\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the RTF output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output \r
-# The RTF output is optimized for Word 97 and may not look very pretty with \r
-# other RTF readers or editors.\r
-\r
-GENERATE_RTF           = NO\r
-\r
-# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. \r
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
-# put in front of it. If left blank `rtf' will be used as the default path.\r
-\r
-RTF_OUTPUT             = rtf\r
-\r
-# If the COMPACT_RTF tag is set to YES Doxygen generates more compact \r
-# RTF documents. This may be useful for small projects and may help to \r
-# save some trees in general.\r
-\r
-COMPACT_RTF            = NO\r
-\r
-# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated \r
-# will contain hyperlink fields. The RTF file will \r
-# contain links (just like the HTML output) instead of page references. \r
-# This makes the output suitable for online browsing using WORD or other \r
-# programs which support those fields. \r
-# Note: wordpad (write) and others do not support links.\r
-\r
-RTF_HYPERLINKS         = NO\r
-\r
-# Load stylesheet definitions from file. Syntax is similar to doxygen's \r
-# config file, i.e. a series of assignments. You only have to provide \r
-# replacements, missing definitions are set to their default value.\r
-\r
-RTF_STYLESHEET_FILE    = \r
-\r
-# Set optional variables used in the generation of an rtf document. \r
-# Syntax is similar to doxygen's config file.\r
-\r
-RTF_EXTENSIONS_FILE    = \r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the man page output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_MAN tag is set to YES (the default) Doxygen will \r
-# generate man pages\r
-\r
-GENERATE_MAN           = NO\r
-\r
-# The MAN_OUTPUT tag is used to specify where the man pages will be put. \r
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
-# put in front of it. If left blank `man' will be used as the default path.\r
-\r
-MAN_OUTPUT             = man\r
-\r
-# The MAN_EXTENSION tag determines the extension that is added to \r
-# the generated man pages (default is the subroutine's section .3)\r
-\r
-MAN_EXTENSION          = .3\r
-\r
-# If the MAN_LINKS tag is set to YES and Doxygen generates man output, \r
-# then it will generate one additional man file for each entity \r
-# documented in the real man page(s). These additional files \r
-# only source the real man page, but without them the man command \r
-# would be unable to find the correct page. The default is NO.\r
-\r
-MAN_LINKS              = NO\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the XML output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_XML tag is set to YES Doxygen will \r
-# generate an XML file that captures the structure of \r
-# the code including all documentation.\r
-\r
-GENERATE_XML           = NO\r
-\r
-# The XML_OUTPUT tag is used to specify where the XML pages will be put. \r
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
-# put in front of it. If left blank `xml' will be used as the default path.\r
-\r
-XML_OUTPUT             = xml\r
-\r
-# The XML_SCHEMA tag can be used to specify an XML schema, \r
-# which can be used by a validating XML parser to check the \r
-# syntax of the XML files.\r
-\r
-XML_SCHEMA             = \r
-\r
-# The XML_DTD tag can be used to specify an XML DTD, \r
-# which can be used by a validating XML parser to check the \r
-# syntax of the XML files.\r
-\r
-XML_DTD                = \r
-\r
-# If the XML_PROGRAMLISTING tag is set to YES Doxygen will \r
-# dump the program listings (including syntax highlighting \r
-# and cross-referencing information) to the XML output. Note that \r
-# enabling this will significantly increase the size of the XML output.\r
-\r
-XML_PROGRAMLISTING     = YES\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options for the AutoGen Definitions output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will \r
-# generate an AutoGen Definitions (see autogen.sf.net) file \r
-# that captures the structure of the code including all \r
-# documentation. Note that this feature is still experimental \r
-# and incomplete at the moment.\r
-\r
-GENERATE_AUTOGEN_DEF   = NO\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the Perl module output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_PERLMOD tag is set to YES Doxygen will \r
-# generate a Perl module file that captures the structure of \r
-# the code including all documentation. Note that this \r
-# feature is still experimental and incomplete at the \r
-# moment.\r
-\r
-GENERATE_PERLMOD       = NO\r
-\r
-# If the PERLMOD_LATEX tag is set to YES Doxygen will generate \r
-# the necessary Makefile rules, Perl scripts and LaTeX code to be able \r
-# to generate PDF and DVI output from the Perl module output.\r
-\r
-PERLMOD_LATEX          = NO\r
-\r
-# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be \r
-# nicely formatted so it can be parsed by a human reader.  This is useful \r
-# if you want to understand what is going on.  On the other hand, if this \r
-# tag is set to NO the size of the Perl module output will be much smaller \r
-# and Perl will parse it just the same.\r
-\r
-PERLMOD_PRETTY         = YES\r
-\r
-# The names of the make variables in the generated doxyrules.make file \r
-# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. \r
-# This is useful so different doxyrules.make files included by the same \r
-# Makefile don't overwrite each other's variables.\r
-\r
-PERLMOD_MAKEVAR_PREFIX = \r
-\r
-#---------------------------------------------------------------------------\r
-# Configuration options related to the preprocessor   \r
-#---------------------------------------------------------------------------\r
-\r
-# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will \r
-# evaluate all C-preprocessor directives found in the sources and include \r
-# files.\r
-\r
-ENABLE_PREPROCESSING   = YES\r
-\r
-# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro \r
-# names in the source code. If set to NO (the default) only conditional \r
-# compilation will be performed. Macro expansion can be done in a controlled \r
-# way by setting EXPAND_ONLY_PREDEF to YES.\r
-\r
-MACRO_EXPANSION        = YES\r
-\r
-# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES \r
-# then the macro expansion is limited to the macros specified with the \r
-# PREDEFINED and EXPAND_AS_DEFINED tags.\r
-\r
-EXPAND_ONLY_PREDEF     = YES\r
-\r
-# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files \r
-# in the INCLUDE_PATH (see below) will be search if a #include is found.\r
-\r
-SEARCH_INCLUDES        = YES\r
-\r
-# The INCLUDE_PATH tag can be used to specify one or more directories that \r
-# contain include files that are not input files but should be processed by \r
-# the preprocessor.\r
-\r
-INCLUDE_PATH           = \r
-\r
-# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard \r
-# patterns (like *.h and *.hpp) to filter out the header-files in the \r
-# directories. If left blank, the patterns specified with FILE_PATTERNS will \r
-# be used.\r
-\r
-INCLUDE_FILE_PATTERNS  = \r
-\r
-# The PREDEFINED tag can be used to specify one or more macro names that \r
-# are defined before the preprocessor is started (similar to the -D option of \r
-# gcc). The argument of the tag is a list of macros of the form: name \r
-# or name=definition (no spaces). If the definition and the = are \r
-# omitted =1 is assumed. To prevent a macro definition from being \r
-# undefined via #undef or recursively expanded use the := operator \r
-# instead of the = operator.\r
-\r
-PREDEFINED             = __DOXYGEN__\r
-\r
-# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then \r
-# this tag can be used to specify a list of macro names that should be expanded. \r
-# The macro definition that is found in the sources will be used. \r
-# Use the PREDEFINED tag if you want to use a different macro definition.\r
-\r
-EXPAND_AS_DEFINED      = BUTTLOADTAG\r
-\r
-# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then \r
-# doxygen's preprocessor will remove all function-like macros that are alone \r
-# on a line, have an all uppercase name, and do not end with a semicolon. Such \r
-# function macros are typically used for boiler-plate code, and will confuse \r
-# the parser if not removed.\r
-\r
-SKIP_FUNCTION_MACROS   = YES\r
-\r
-#---------------------------------------------------------------------------\r
-# Configuration::additions related to external references   \r
-#---------------------------------------------------------------------------\r
-\r
-# The TAGFILES option can be used to specify one or more tagfiles. \r
-# Optionally an initial location of the external documentation \r
-# can be added for each tagfile. The format of a tag file without \r
-# this location is as follows: \r
-#   TAGFILES = file1 file2 ... \r
-# Adding location for the tag files is done as follows: \r
-#   TAGFILES = file1=loc1 "file2 = loc2" ... \r
-# where "loc1" and "loc2" can be relative or absolute paths or \r
-# URLs. If a location is present for each tag, the installdox tool \r
-# does not have to be run to correct the links.\r
-# Note that each tag file must have a unique name\r
-# (where the name does NOT include the path)\r
-# If a tag file is not located in the directory in which doxygen \r
-# is run, you must also specify the path to the tagfile here.\r
-\r
-TAGFILES               = \r
-\r
-# When a file name is specified after GENERATE_TAGFILE, doxygen will create \r
-# a tag file that is based on the input files it reads.\r
-\r
-GENERATE_TAGFILE       = \r
-\r
-# If the ALLEXTERNALS tag is set to YES all external classes will be listed \r
-# in the class index. If set to NO only the inherited external classes \r
-# will be listed.\r
-\r
-ALLEXTERNALS           = NO\r
-\r
-# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed \r
-# in the modules index. If set to NO, only the current project's groups will \r
-# be listed.\r
-\r
-EXTERNAL_GROUPS        = YES\r
-\r
-# The PERL_PATH should be the absolute path and name of the perl script \r
-# interpreter (i.e. the result of `which perl').\r
-\r
-PERL_PATH              = /usr/bin/perl\r
-\r
-#---------------------------------------------------------------------------\r
-# Configuration options related to the dot tool   \r
-#---------------------------------------------------------------------------\r
-\r
-# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will \r
-# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base \r
-# or super classes. Setting the tag to NO turns the diagrams off. Note that \r
-# this option is superseded by the HAVE_DOT option below. This is only a \r
-# fallback. It is recommended to install and use dot, since it yields more \r
-# powerful graphs.\r
-\r
-CLASS_DIAGRAMS         = NO\r
-\r
-# You can define message sequence charts within doxygen comments using the \msc \r
-# command. Doxygen will then run the mscgen tool (see \r
-# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the \r
-# documentation. The MSCGEN_PATH tag allows you to specify the directory where \r
-# the mscgen tool resides. If left empty the tool is assumed to be found in the \r
-# default search path.\r
-\r
-MSCGEN_PATH            = \r
-\r
-# If set to YES, the inheritance and collaboration graphs will hide \r
-# inheritance and usage relations if the target is undocumented \r
-# or is not a class.\r
-\r
-HIDE_UNDOC_RELATIONS   = YES\r
-\r
-# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is \r
-# available from the path. This tool is part of Graphviz, a graph visualization \r
-# toolkit from AT&T and Lucent Bell Labs. The other options in this section \r
-# have no effect if this option is set to NO (the default)\r
-\r
-HAVE_DOT               = NO\r
-\r
-# By default doxygen will write a font called FreeSans.ttf to the output \r
-# directory and reference it in all dot files that doxygen generates. This \r
-# font does not include all possible unicode characters however, so when you need \r
-# these (or just want a differently looking font) you can specify the font name \r
-# using DOT_FONTNAME. You need need to make sure dot is able to find the font, \r
-# which can be done by putting it in a standard location or by setting the \r
-# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory \r
-# containing the font.\r
-\r
-DOT_FONTNAME           = FreeSans\r
-\r
-# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. \r
-# The default size is 10pt.\r
-\r
-DOT_FONTSIZE           = 10\r
-\r
-# By default doxygen will tell dot to use the output directory to look for the \r
-# FreeSans.ttf font (which doxygen will put there itself). If you specify a \r
-# different font using DOT_FONTNAME you can set the path where dot \r
-# can find it using this tag.\r
-\r
-DOT_FONTPATH           = \r
-\r
-# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen \r
-# will generate a graph for each documented class showing the direct and \r
-# indirect inheritance relations. Setting this tag to YES will force the \r
-# the CLASS_DIAGRAMS tag to NO.\r
-\r
-CLASS_GRAPH            = NO\r
-\r
-# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen \r
-# will generate a graph for each documented class showing the direct and \r
-# indirect implementation dependencies (inheritance, containment, and \r
-# class references variables) of the class with other documented classes.\r
-\r
-COLLABORATION_GRAPH    = NO\r
-\r
-# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen \r
-# will generate a graph for groups, showing the direct groups dependencies\r
-\r
-GROUP_GRAPHS           = NO\r
-\r
-# If the UML_LOOK tag is set to YES doxygen will generate inheritance and \r
-# collaboration diagrams in a style similar to the OMG's Unified Modeling \r
-# Language.\r
-\r
-UML_LOOK               = NO\r
-\r
-# If set to YES, the inheritance and collaboration graphs will show the \r
-# relations between templates and their instances.\r
-\r
-TEMPLATE_RELATIONS     = NO\r
-\r
-# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT \r
-# tags are set to YES then doxygen will generate a graph for each documented \r
-# file showing the direct and indirect include dependencies of the file with \r
-# other documented files.\r
-\r
-INCLUDE_GRAPH          = NO\r
-\r
-# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and \r
-# HAVE_DOT tags are set to YES then doxygen will generate a graph for each \r
-# documented header file showing the documented files that directly or \r
-# indirectly include this file.\r
-\r
-INCLUDED_BY_GRAPH      = NO\r
-\r
-# If the CALL_GRAPH and HAVE_DOT options are set to YES then \r
-# doxygen will generate a call dependency graph for every global function \r
-# or class method. Note that enabling this option will significantly increase \r
-# the time of a run. So in most cases it will be better to enable call graphs \r
-# for selected functions only using the \callgraph command.\r
-\r
-CALL_GRAPH             = NO\r
-\r
-# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then \r
-# doxygen will generate a caller dependency graph for every global function \r
-# or class method. Note that enabling this option will significantly increase \r
-# the time of a run. So in most cases it will be better to enable caller \r
-# graphs for selected functions only using the \callergraph command.\r
-\r
-CALLER_GRAPH           = NO\r
-\r
-# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen \r
-# will graphical hierarchy of all classes instead of a textual one.\r
-\r
-GRAPHICAL_HIERARCHY    = NO\r
-\r
-# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES \r
-# then doxygen will show the dependencies a directory has on other directories \r
-# in a graphical way. The dependency relations are determined by the #include\r
-# relations between the files in the directories.\r
-\r
-DIRECTORY_GRAPH        = NO\r
-\r
-# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images \r
-# generated by dot. Possible values are png, jpg, or gif\r
-# If left blank png will be used.\r
-\r
-DOT_IMAGE_FORMAT       = png\r
-\r
-# The tag DOT_PATH can be used to specify the path where the dot tool can be \r
-# found. If left blank, it is assumed the dot tool can be found in the path.\r
-\r
-DOT_PATH               = "C:/Program Files/Graphviz2.18/bin"\r
-\r
-# The DOTFILE_DIRS tag can be used to specify one or more directories that \r
-# contain dot files that are included in the documentation (see the \r
-# \dotfile command).\r
-\r
-DOTFILE_DIRS           = \r
-\r
-# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of \r
-# nodes that will be shown in the graph. If the number of nodes in a graph \r
-# becomes larger than this value, doxygen will truncate the graph, which is \r
-# visualized by representing a node as a red box. Note that doxygen if the \r
-# number of direct children of the root node in a graph is already larger than \r
-# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note \r
-# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.\r
-\r
-DOT_GRAPH_MAX_NODES    = 15\r
-\r
-# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the \r
-# graphs generated by dot. A depth value of 3 means that only nodes reachable \r
-# from the root by following a path via at most 3 edges will be shown. Nodes \r
-# that lay further from the root node will be omitted. Note that setting this \r
-# option to 1 or 2 may greatly reduce the computation time needed for large \r
-# code bases. Also note that the size of a graph can be further restricted by \r
-# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.\r
-\r
-MAX_DOT_GRAPH_DEPTH    = 2\r
-\r
-# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent \r
-# background. This is disabled by default, because dot on Windows does not \r
-# seem to support this out of the box. Warning: Depending on the platform used, \r
-# enabling this option may lead to badly anti-aliased labels on the edges of \r
-# a graph (i.e. they become hard to read).\r
-\r
-DOT_TRANSPARENT        = YES\r
-\r
-# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output \r
-# files in one run (i.e. multiple -o and -T options on the command line). This \r
-# makes dot run faster, but since only newer versions of dot (>1.8.10) \r
-# support this, this feature is disabled by default.\r
-\r
-DOT_MULTI_TARGETS      = NO\r
-\r
-# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will \r
-# generate a legend page explaining the meaning of the various boxes and \r
-# arrows in the dot generated graphs.\r
-\r
-GENERATE_LEGEND        = YES\r
-\r
-# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will \r
-# remove the intermediate dot files that are used to generate \r
-# the various graphs.\r
-\r
-DOT_CLEANUP            = YES\r
-\r
-#---------------------------------------------------------------------------\r
-# Configuration::additions related to the search engine   \r
-#---------------------------------------------------------------------------\r
-\r
-# The SEARCHENGINE tag specifies whether or not a search engine should be \r
-# used. If set to NO the values of all tags below this one will be ignored.\r
-\r
-SEARCHENGINE           = NO\r
diff --git a/Demos/Device/Keyboard/Keyboard.aps b/Demos/Device/Keyboard/Keyboard.aps
deleted file mode 100644 (file)
index 541c175..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<AVRStudio><MANAGEMENT><ProjectName>Keyboard</ProjectName><Created>30-Sep-2008 13:59:29</Created><LastEdit>30-Sep-2008 14:00:25</LastEdit><ICON>241</ICON><ProjectType>0</ProjectType><Created>30-Sep-2008 13:59:29</Created><Version>4</Version><Build>4, 14, 0, 589</Build><ProjectTypeName>AVR GCC</ProjectTypeName></MANAGEMENT><CODE_CREATION><ObjectFile>Keyboard.elf</ObjectFile><EntryFile></EntryFile><SaveFolder>C:\Users\Dean\Documents\Electronics\Projects\WORK\MyUSBWORK\Demos\Keyboard\</SaveFolder></CODE_CREATION><DEBUG_TARGET><CURRENT_TARGET>JTAGICE mkII</CURRENT_TARGET><CURRENT_PART>AT90USB1287.xml</CURRENT_PART><BREAKPOINTS></BREAKPOINTS><IO_EXPAND><HIDE>false</HIDE></IO_EXPAND><REGISTERNAMES><Register>R00</Register><Register>R01</Register><Register>R02</Register><Register>R03</Register><Register>R04</Register><Register>R05</Register><Register>R06</Register><Register>R07</Register><Register>R08</Register><Register>R09</Register><Register>R10</Register><Register>R11</Register><Register>R12</Register><Register>R13</Register><Register>R14</Register><Register>R15</Register><Register>R16</Register><Register>R17</Register><Register>R18</Register><Register>R19</Register><Register>R20</Register><Register>R21</Register><Register>R22</Register><Register>R23</Register><Register>R24</Register><Register>R25</Register><Register>R26</Register><Register>R27</Register><Register>R28</Register><Register>R29</Register><Register>R30</Register><Register>R31</Register></REGISTERNAMES><COM>Auto</COM><COMType>0</COMType><WATCHNUM>0</WATCHNUM><WATCHNAMES><Pane0></Pane0><Pane1></Pane1><Pane2></Pane2><Pane3></Pane3></WATCHNAMES><BreakOnTrcaeFull>0</BreakOnTrcaeFull></DEBUG_TARGET><Debugger><Triggers></Triggers></Debugger><AVRGCCPLUGIN><FILES><SOURCEFILE>Descriptors.c</SOURCEFILE><SOURCEFILE>Keyboard.c</SOURCEFILE><HEADERFILE>Descriptors.h</HEADERFILE><HEADERFILE>Keyboard.h</HEADERFILE><OTHERFILE>makefile</OTHERFILE></FILES><CONFIGS><CONFIG><NAME>default</NAME><USESEXTERNALMAKEFILE>YES</USESEXTERNALMAKEFILE><EXTERNALMAKEFILE>makefile</EXTERNALMAKEFILE><PART>at90usb1287</PART><HEX>1</HEX><LIST>1</LIST><MAP>1</MAP><OUTPUTFILENAME>Keyboard.elf</OUTPUTFILENAME><OUTPUTDIR>default\</OUTPUTDIR><ISDIRTY>1</ISDIRTY><OPTIONS/><INCDIRS/><LIBDIRS/><LIBS/><LINKOBJECTS/><OPTIONSFORALL>-Wall -gdwarf-2 -std=gnu99 -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums</OPTIONSFORALL><LINKEROPTIONS></LINKEROPTIONS><SEGMENTS/></CONFIG></CONFIGS><LASTCONFIG>default</LASTCONFIG><USES_WINAVR>1</USES_WINAVR><GCC_LOC>C:\WinAVR-20080512\bin\avr-gcc.exe</GCC_LOC><MAKE_LOC>C:\WinAVR-20080512\utils\bin\make.exe</MAKE_LOC></AVRGCCPLUGIN><IOView><usergroups/><sort sorted="0" column="0" ordername="0" orderaddress="0" ordergroup="0"/></IOView><Files><File00000><FileId>00000</FileId><FileName>makefile</FileName><Status>1</Status></File00000></Files><Events><Bookmarks></Bookmarks></Events><Trace><Filters></Filters></Trace></AVRStudio>\r
diff --git a/Demos/Device/Keyboard/Keyboard.c b/Demos/Device/Keyboard/Keyboard.c
deleted file mode 100644 (file)
index bebad12..0000000
+++ /dev/null
@@ -1,184 +0,0 @@
-/*\r
-             LUFA Library\r
-     Copyright (C) Dean Camera, 2009.\r
-              \r
-  dean [at] fourwalledcubicle [dot] com\r
-      www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
-  Copyright 2009  Denver Gingerich (denver [at] ossguy [dot] com)\r
-      Based on code by Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
-  Permission to use, copy, modify, and distribute this software\r
-  and its documentation for any purpose and without fee is hereby\r
-  granted, provided that the above copyright notice appear in all\r
-  copies and that both that the copyright notice and this\r
-  permission notice and warranty disclaimer appear in supporting\r
-  documentation, and that the name of the author not be used in\r
-  advertising or publicity pertaining to distribution of the\r
-  software without specific, written prior permission.\r
-\r
-  The author disclaim all warranties with regard to this\r
-  software, including all implied warranties of merchantability\r
-  and fitness.  In no event shall the author be liable for any\r
-  special, indirect or consequential damages or any damages\r
-  whatsoever resulting from loss of use, data or profits, whether\r
-  in an action of contract, negligence or other tortious action,\r
-  arising out of or in connection with the use or performance of\r
-  this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- *  Main source file for the Keyboard demo. This file contains the main tasks of\r
- *  the demo and is responsible for the initial application hardware configuration.\r
- */\r
-\r
-#include "Keyboard.h"\r
-\r
-/** LUFA HID Class driver interface configuration and state information. This structure is\r
- *  passed to all HID Class driver functions, so that multiple instances of the same class\r
- *  within a device can be differentiated from one another.\r
- */\r
-USB_ClassInfo_HID_t Keyboard_HID_Interface =\r
-    {\r
-        .InterfaceNumber         = 0,\r
-\r
-        .ReportINEndpointNumber  = KEYBOARD_EPNUM,\r
-        .ReportINEndpointSize    = KEYBOARD_EPSIZE,\r
-\r
-               .ReportINBufferSize      = sizeof(USB_KeyboardReport_Data_t),\r
-\r
-        .IdleCount               = 500,\r
-    };\r
-\r
-/** Main program entry point. This routine contains the overall program flow, including initial\r
- *  setup of all components and the main program loop.\r
- */\r
-int main(void)\r
-{\r
-    SetupHardware();\r
-\r
-    LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);\r
-    \r
-    for (;;)\r
-    {\r
-        USB_HID_USBTask(&Keyboard_HID_Interface);\r
-        USB_USBTask();\r
-    }\r
-}\r
-\r
-/** Configures the board hardware and chip peripherals for the demo's functionality. */\r
-void SetupHardware()\r
-{\r
-    /* Disable watchdog if enabled by bootloader/fuses */\r
-    MCUSR &= ~(1 << WDRF);\r
-    wdt_disable();\r
-\r
-    /* Disable clock division */\r
-    clock_prescale_set(clock_div_1);\r
-\r
-    /* Hardware Initialization */\r
-    Joystick_Init();\r
-    LEDs_Init();\r
-    Buttons_Init();\r
-    USB_Init();\r
-\r
-       /* Millisecond timer initialization, with output compare interrupt enabled for the idle timing */\r
-       OCR0A  = ((F_CPU / 64) / 1000);\r
-       TCCR0A = (1 << WGM01);\r
-       TCCR0B = ((1 << CS01) | (1 << CS00));\r
-       TIMSK0 = (1 << OCIE0A);\r
-}\r
-\r
-/** Event handler for the library USB Connection event. */\r
-void EVENT_USB_Connect(void)\r
-{\r
-    LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING);\r
-}\r
-\r
-/** Event handler for the library USB Disconnection event. */\r
-void EVENT_USB_Disconnect(void)\r
-{\r
-    LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);\r
-}\r
-\r
-/** Event handler for the library USB Configuration Changed event. */\r
-void EVENT_USB_ConfigurationChanged(void)\r
-{\r
-    LEDs_SetAllLEDs(LEDMASK_USB_READY);\r
-\r
-    if (!(USB_HID_ConfigureEndpoints(&Keyboard_HID_Interface)))\r
-      LEDs_SetAllLEDs(LEDMASK_USB_ERROR);\r
-}\r
-\r
-/** Event handler for the library USB Unhandled Control Packet event. */\r
-void EVENT_USB_UnhandledControlPacket(void)\r
-{\r
-    USB_HID_ProcessControlPacket(&Keyboard_HID_Interface);\r
-}\r
-\r
-/** ISR to keep track of each millisecond interrupt, for determining the HID class idle period remaining when set. */\r
-ISR(TIMER0_COMPA_vect, ISR_BLOCK)\r
-{\r
-       if (Keyboard_HID_Interface.IdleMSRemaining)\r
-         Keyboard_HID_Interface.IdleMSRemaining--;\r
-}\r
-\r
-/** HID class driver callback function for the creation of HID reports to the host.\r
- *\r
- *  \param HIDInterfaceInfo  Pointer to the HID class interface configuration structure being referenced\r
- *  \param ReportData  Pointer to a buffer where the created report should be stored\r
- *\r
- *  \return Number of bytes written in the report (or zero if no report is to be sent\r
- */\r
-uint16_t CALLBACK_USB_HID_CreateNextHIDReport(USB_ClassInfo_HID_t* HIDInterfaceInfo, uint8_t* ReportID, void* ReportData)\r
-{\r
-    USB_KeyboardReport_Data_t* KeyboardReport = (USB_KeyboardReport_Data_t*)ReportData;\r
-    \r
-    uint8_t JoyStatus_LCL    = Joystick_GetStatus();\r
-    uint8_t ButtonStatus_LCL = Buttons_GetStatus();\r
-\r
-    if (JoyStatus_LCL & JOY_UP)\r
-      KeyboardReport->KeyCode[0] = 0x04; // A\r
-    else if (JoyStatus_LCL & JOY_DOWN)\r
-      KeyboardReport->KeyCode[0] = 0x05; // B\r
-\r
-    if (JoyStatus_LCL & JOY_LEFT)\r
-      KeyboardReport->KeyCode[0] = 0x06; // C\r
-    else if (JoyStatus_LCL & JOY_RIGHT)\r
-      KeyboardReport->KeyCode[0] = 0x07; // D\r
-\r
-    if (JoyStatus_LCL & JOY_PRESS)\r
-      KeyboardReport->KeyCode[0] = 0x08; // E\r
-      \r
-    if (ButtonStatus_LCL & BUTTONS_BUTTON1)\r
-      KeyboardReport->KeyCode[0] = 0x09; // F\r
-      \r
-    return sizeof(USB_KeyboardReport_Data_t);\r
-}\r
-\r
-/** HID class driver callback function for the processing of HID reports from the host.\r
- *\r
- *  \param HIDInterfaceInfo  Pointer to the HID class interface configuration structure being referenced\r
- *  \param ReportData  Pointer to a buffer where the created report has been stored\r
- *  \param ReportSize  Size in bytes of the received HID report\r
- */\r
-void CALLBACK_USB_HID_ProcessReceivedHIDReport(USB_ClassInfo_HID_t* HIDInterfaceInfo, uint8_t ReportID,\r
-                                               void* ReportData, uint16_t ReportSize)\r
-{\r
-    uint8_t  LEDMask   = LEDS_NO_LEDS;\r
-    uint8_t* LEDReport = (uint8_t*)ReportData;\r
-\r
-    if (*LEDReport & 0x01) // NUM Lock\r
-      LEDMask |= LEDS_LED1;\r
-    \r
-    if (*LEDReport & 0x02) // CAPS Lock\r
-      LEDMask |= LEDS_LED3;\r
-\r
-    if (*LEDReport & 0x04) // SCROLL Lock\r
-      LEDMask |= LEDS_LED4;\r
-      \r
-    LEDs_SetAllLEDs(LEDMask);\r
-}\r
diff --git a/Demos/Device/Keyboard/Keyboard.h b/Demos/Device/Keyboard/Keyboard.h
deleted file mode 100644 (file)
index 1b4bb70..0000000
+++ /dev/null
@@ -1,93 +0,0 @@
-/*\r
-             LUFA Library\r
-     Copyright (C) Dean Camera, 2009.\r
-              \r
-  dean [at] fourwalledcubicle [dot] com\r
-      www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
-  Copyright 2009  Denver Gingerich (denver [at] ossguy [dot] com)\r
-      Based on code by Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
-  Permission to use, copy, modify, and distribute this software\r
-  and its documentation for any purpose and without fee is hereby\r
-  granted, provided that the above copyright notice appear in all\r
-  copies and that both that the copyright notice and this\r
-  permission notice and warranty disclaimer appear in supporting\r
-  documentation, and that the name of the author not be used in\r
-  advertising or publicity pertaining to distribution of the\r
-  software without specific, written prior permission.\r
-\r
-  The author disclaim all warranties with regard to this\r
-  software, including all implied warranties of merchantability\r
-  and fitness.  In no event shall the author be liable for any\r
-  special, indirect or consequential damages or any damages\r
-  whatsoever resulting from loss of use, data or profits, whether\r
-  in an action of contract, negligence or other tortious action,\r
-  arising out of or in connection with the use or performance of\r
-  this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- *  Header file for Keyboard.c.\r
- */\r
-\r
-#ifndef _KEYBOARD_H_\r
-#define _KEYBOARD_H_\r
-\r
-       /* Includes: */\r
-               #include <avr/io.h>\r
-               #include <avr/wdt.h>\r
-               #include <avr/interrupt.h>\r
-               #include <avr/power.h>\r
-               #include <stdbool.h>\r
-               #include <string.h>\r
-\r
-               #include "Descriptors.h"\r
-\r
-               #include <LUFA/Version.h>\r
-               #include <LUFA/Drivers/Board/Joystick.h>\r
-               #include <LUFA/Drivers/Board/LEDs.h>\r
-               #include <LUFA/Drivers/Board/Buttons.h>\r
-               #include <LUFA/Drivers/USB/USB.h>\r
-               #include <LUFA/Drivers/USB/Class/Device/HID.h>\r
-\r
-       /* Type Defines: */\r
-               /** Type define for the keyboard HID report structure, for creating and sending HID reports to the host PC.\r
-                *  This mirrors the layout described to the host in the HID report descriptor, in Descriptors.c.\r
-                */\r
-               typedef struct\r
-               {\r
-                       uint8_t Modifier; /**< Modifier mask byte, containing a mask of modifier keys set (such as shift or CTRL) */\r
-                       uint8_t Reserved; /**< Reserved, always set as 0x00 */\r
-                       uint8_t KeyCode[6]; /**< Array of up to six simultaneous key codes of pressed keys */\r
-               } USB_KeyboardReport_Data_t;\r
-                       \r
-       /* Macros: */\r
-               /** LED mask for the library LED driver, to indicate that the USB interface is not ready. */\r
-               #define LEDMASK_USB_NOTREADY      LEDS_LED1\r
-\r
-               /** LED mask for the library LED driver, to indicate that the USB interface is enumerating. */\r
-               #define LEDMASK_USB_ENUMERATING  (LEDS_LED2 | LEDS_LED3)\r
-\r
-               /** LED mask for the library LED driver, to indicate that the USB interface is ready. */\r
-               #define LEDMASK_USB_READY        (LEDS_LED2 | LEDS_LED4)\r
-\r
-               /** LED mask for the library LED driver, to indicate that an error has occurred in the USB interface. */\r
-               #define LEDMASK_USB_ERROR        (LEDS_LED1 | LEDS_LED3)\r
-               \r
-       /* Function Prototypes: */\r
-               void SetupHardware(void);\r
-\r
-               void EVENT_USB_Connect(void);\r
-               void EVENT_USB_Disconnect(void);\r
-               void EVENT_USB_ConfigurationChanged(void);\r
-               void EVENT_USB_UnhandledControlPacket(void);\r
-\r
-               uint16_t CALLBACK_USB_HID_CreateNextHIDReport(USB_ClassInfo_HID_t* HIDInterfaceInfo, uint8_t* ReportID, void* ReportData);\r
-               void     CALLBACK_USB_HID_ProcessReceivedHIDReport(USB_ClassInfo_HID_t* HIDInterfaceInfo, uint8_t ReportID, \r
-                                                                  void* ReportData, uint16_t ReportSize);\r
-\r
-#endif\r
diff --git a/Demos/Device/Keyboard/Keyboard.txt b/Demos/Device/Keyboard/Keyboard.txt
deleted file mode 100644 (file)
index 3fc9bee..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
-/** \file\r
- *\r
- *  This file contains special DoxyGen information for the generation of the main page and other special\r
- *  documentation pages. It is not a project source file.\r
- */\r
\r
-/** \mainpage Keyboard Device Demo\r
- *\r
- *  \section SSec_Info USB Information:\r
- *\r
- *  The following table gives a rundown of the USB utilization of this demo.\r
- *\r
- *  <table>\r
- *   <tr>\r
- *    <td><b>USB Mode:</b></td>\r
- *    <td>Device</td>\r
- *   </tr>\r
- *   <tr>\r
- *    <td><b>USB Class:</b></td>\r
- *    <td>Human Interface Device (HID)</td>\r
- *   </tr>\r
- *   <tr> \r
- *    <td><b>USB Subclass:</b></td>\r
- *    <td>N/A</td>\r
- *   </tr>\r
- *   <tr>\r
- *    <td><b>Relevant Standards:</b></td>\r
- *    <td>USBIF HID Specification, USBIF HID Usage Tables</td>\r
- *   </tr>\r
- *   <tr>\r
- *    <td><b>Usable Speeds:</b></td>\r
- *    <td>Low Speed Mode, Full Speed Mode</td>\r
- *   </tr>\r
- *  </table>\r
- *\r
- *  \section SSec_Description Project Description:\r
- *\r
- *  Keyboard demonstration application. This gives a simple reference application\r
- *  for implementing a USB Keyboard using the basic USB HID drivers in all modern\r
- *  OSes (i.e. no special drivers required). It is boot protocol compatible, and thus\r
- *  works under compatible BIOS as if it was a native keyboard (e.g. PS/2).\r
- *  \r
- *  On start-up the system will automatically enumerate and function\r
- *  as a keyboard when the USB connection to a host is present. To use\r
- *  the keyboard example, manipulate the joystick to send the letters\r
- *  a, b, c, d and e. See the USB HID documentation for more information\r
- *  on sending keyboard event and key presses.\r
- *\r
- *  \section SSec_Options Project Options\r
- *  \r
- *  The following defines can be found in this demo, which can control the demo behaviour when defined, or changed in value.\r
- *\r
- *  <table>\r
- *   <tr>\r
- *    <td>\r
- *     None\r
- *    </td>\r
- *   </tr>\r
- *  </table>\r
- */\r
diff --git a/Demos/Device/Keyboard/makefile b/Demos/Device/Keyboard/makefile
deleted file mode 100644 (file)
index 98cda2f..0000000
+++ /dev/null
@@ -1,732 +0,0 @@
-# Hey Emacs, this is a -*- makefile -*-\r
-#----------------------------------------------------------------------------\r
-# WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al.\r
-#  >> Modified for use with the LUFA project. <<\r
-#\r
-# Released to the Public Domain\r
-#\r
-# Additional material for this makefile was written by:\r
-# Peter Fleury\r
-# Tim Henigan\r
-# Colin O'Flynn\r
-# Reiner Patommel\r
-# Markus Pfaff\r
-# Sander Pool\r
-# Frederik Rouleau\r
-# Carlos Lamas\r
-# Dean Camera\r
-# Opendous Inc.\r
-# Denver Gingerich\r
-#\r
-#----------------------------------------------------------------------------\r
-# On command line:\r
-#\r
-# make all = Make software.\r
-#\r
-# make clean = Clean out built project files.\r
-#\r
-# make coff = Convert ELF to AVR COFF.\r
-#\r
-# make extcoff = Convert ELF to AVR Extended COFF.\r
-#\r
-# make program = Download the hex file to the device, using avrdude.\r
-#                Please customize the avrdude settings below first!\r
-#\r
-# make dfu = Download the hex file to the device, using dfu-programmer (must\r
-#            have dfu-programmer installed).\r
-#\r
-# make flip = Download the hex file to the device, using Atmel FLIP (must\r
-#             have Atmel FLIP installed).\r
-#\r
-# make dfu-ee = Download the eeprom file to the device, using dfu-programmer\r
-#               (must have dfu-programmer installed).\r
-#\r
-# make flip-ee = Download the eeprom file to the device, using Atmel FLIP\r
-#                (must have Atmel FLIP installed).\r
-#\r
-# make doxygen = Generate DoxyGen documentation for the project (must have\r
-#                DoxyGen installed)\r
-#\r
-# make debug = Start either simulavr or avarice as specified for debugging, \r
-#              with avr-gdb or avr-insight as the front end for debugging.\r
-#\r
-# make filename.s = Just compile filename.c into the assembler code only.\r
-#\r
-# make filename.i = Create a preprocessed source file for use in submitting\r
-#                   bug reports to the GCC project.\r
-#\r
-# To rebuild project do "make clean" then "make all".\r
-#----------------------------------------------------------------------------\r
-\r
-\r
-# MCU name\r
-MCU = at90usb1287\r
-\r
-\r
-# Target board (see library "Board Types" documentation, USER or blank for projects not requiring\r
-# LUFA board drivers). If USER is selected, put custom board drivers in a directory called \r
-# "Board" inside the application directory.\r
-BOARD  = USBKEY\r
-\r
-\r
-# Processor frequency.\r
-#     This will define a symbol, F_CPU, in all source code files equal to the \r
-#     processor frequency. You can then use this symbol in your source code to \r
-#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done\r
-#     automatically to create a 32-bit value in your source code.\r
-#     Typical values are:\r
-#         F_CPU =  1000000\r
-#         F_CPU =  1843200\r
-#         F_CPU =  2000000\r
-#         F_CPU =  3686400\r
-#         F_CPU =  4000000\r
-#         F_CPU =  7372800\r
-#         F_CPU =  8000000\r
-#         F_CPU = 11059200\r
-#         F_CPU = 14745600\r
-#         F_CPU = 16000000\r
-#         F_CPU = 18432000\r
-#         F_CPU = 20000000\r
-F_CPU = 8000000\r
-\r
-\r
-# Input clock frequency.\r
-#     This will define a symbol, F_CLOCK, in all source code files equal to the \r
-#     input clock frequency (before any prescaling is performed). This value may\r
-#     differ from F_CPU if prescaling is used on the latter, and is required as the\r
-#     raw input clock is fed directly to the PLL sections of the AVR for high speed\r
-#     clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'\r
-#     at the end, this will be done automatically to create a 32-bit value in your\r
-#     source code.\r
-#\r
-#     If no clock division is performed on the input clock inside the AVR (via the\r
-#     CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.\r
-F_CLOCK = 8000000\r
-\r
-\r
-# Output format. (can be srec, ihex, binary)\r
-FORMAT = ihex\r
-\r
-\r
-# Target file name (without extension).\r
-TARGET = Keyboard\r
-\r
-\r
-# Object files directory\r
-#     To put object files in current directory, use a dot (.), do NOT make\r
-#     this an empty or blank macro!\r
-OBJDIR = .\r
-\r
-\r
-# Path to the LUFA library\r
-LUFA_PATH = ../../..\r
-\r
-\r
-# List C source files here. (C dependencies are automatically generated.)\r
-SRC = $(TARGET).c                                                 \\r
-         Descriptors.c                                               \\r
-         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/DevChapter9.c        \\r
-         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Endpoint.c           \\r
-         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Host.c               \\r
-         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/HostChapter9.c       \\r
-         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/LowLevel.c           \\r
-         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Pipe.c               \\r
-         $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/Events.c            \\r
-         $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBInterrupt.c      \\r
-         $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBTask.c           \\r
-         $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/ConfigDescriptor.c  \\r
-         $(LUFA_PATH)/LUFA/Drivers/USB/Class/Device/HID.c            \\r
-\r
-\r
-# List C++ source files here. (C dependencies are automatically generated.)\r
-CPPSRC = \r
-\r
-\r
-# List Assembler source files here.\r
-#     Make them always end in a capital .S.  Files ending in a lowercase .s\r
-#     will not be considered source files but generated files (assembler\r
-#     output from the compiler), and will be deleted upon "make clean"!\r
-#     Even though the DOS/Win* filesystem matches both .s and .S the same,\r
-#     it will preserve the spelling of the filenames, and gcc itself does\r
-#     care about how the name is spelled on its command-line.\r
-ASRC =\r
-\r
-\r
-# Optimization level, can be [0, 1, 2, 3, s]. \r
-#     0 = turn off optimization. s = optimize for size.\r
-#     (Note: 3 is not always the best optimization level. See avr-libc FAQ.)\r
-OPT = s\r
-\r
-\r
-# Debugging format.\r
-#     Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs.\r
-#     AVR Studio 4.10 requires dwarf-2.\r
-#     AVR [Extended] COFF format requires stabs, plus an avr-objcopy run.\r
-DEBUG = dwarf-2\r
-\r
-\r
-# List any extra directories to look for include files here.\r
-#     Each directory must be seperated by a space.\r
-#     Use forward slashes for directory separators.\r
-#     For a directory that has spaces, enclose it in quotes.\r
-EXTRAINCDIRS = $(LUFA_PATH)/\r
-\r
-\r
-# Compiler flag to set the C Standard level.\r
-#     c89   = "ANSI" C\r
-#     gnu89 = c89 plus GCC extensions\r
-#     c99   = ISO C99 standard (not yet fully implemented)\r
-#     gnu99 = c99 plus GCC extensions\r
-CSTANDARD = -std=gnu99\r
-\r
-\r
-# Place -D or -U options here for C sources\r
-CDEFS  = -DF_CPU=$(F_CPU)UL -DF_CLOCK=$(F_CLOCK)UL -DBOARD=BOARD_$(BOARD)\r
-CDEFS += -DUSE_NONSTANDARD_DESCRIPTOR_NAMES -DUSB_DEVICE_ONLY\r
-CDEFS += -DFIXED_CONTROL_ENDPOINT_SIZE=8 -DUSE_SINGLE_DEVICE_CONFIGURATION\r
-CDEFS += -DUSE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)"\r
-\r
-# Place -D or -U options here for ASM sources\r
-ADEFS = -DF_CPU=$(F_CPU)\r
-\r
-\r
-# Place -D or -U options here for C++ sources\r
-CPPDEFS = -DF_CPU=$(F_CPU)UL\r
-#CPPDEFS += -D__STDC_LIMIT_MACROS\r
-#CPPDEFS += -D__STDC_CONSTANT_MACROS\r
-\r
-\r
-\r
-#---------------- Compiler Options C ----------------\r
-#  -g*:          generate debugging information\r
-#  -O*:          optimization level\r
-#  -f...:        tuning, see GCC manual and avr-libc documentation\r
-#  -Wall...:     warning level\r
-#  -Wa,...:      tell GCC to pass this to the assembler.\r
-#    -adhlns...: create assembler listing\r
-CFLAGS = -g$(DEBUG)\r
-CFLAGS += $(CDEFS)\r
-CFLAGS += -O$(OPT)\r
-CFLAGS += -funsigned-char\r
-CFLAGS += -funsigned-bitfields\r
-CFLAGS += -ffunction-sections\r
-CFLAGS += -fpack-struct\r
-CFLAGS += -fshort-enums\r
-CFLAGS += -finline-limit=20\r
-CFLAGS += -Wall\r
-CFLAGS += -Wstrict-prototypes\r
-CFLAGS += -Wundef\r
-#CFLAGS += -fno-unit-at-a-time\r
-#CFLAGS += -Wunreachable-code\r
-#CFLAGS += -Wsign-compare\r
-CFLAGS += -Wa,-adhlns=$(<:%.c=$(OBJDIR)/%.lst)\r
-CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))\r
-CFLAGS += $(CSTANDARD)\r
-\r
-\r
-#---------------- Compiler Options C++ ----------------\r
-#  -g*:          generate debugging information\r
-#  -O*:          optimization level\r
-#  -f...:        tuning, see GCC manual and avr-libc documentation\r
-#  -Wall...:     warning level\r
-#  -Wa,...:      tell GCC to pass this to the assembler.\r
-#    -adhlns...: create assembler listing\r
-CPPFLAGS = -g$(DEBUG)\r
-CPPFLAGS += $(CPPDEFS)\r
-CPPFLAGS += -O$(OPT)\r
-CPPFLAGS += -funsigned-char\r
-CPPFLAGS += -funsigned-bitfields\r
-CPPFLAGS += -fpack-struct\r
-CPPFLAGS += -fshort-enums\r
-CPPFLAGS += -fno-exceptions\r
-CPPFLAGS += -Wall\r
-CFLAGS += -Wundef\r
-#CPPFLAGS += -mshort-calls\r
-#CPPFLAGS += -fno-unit-at-a-time\r
-#CPPFLAGS += -Wstrict-prototypes\r
-#CPPFLAGS += -Wunreachable-code\r
-#CPPFLAGS += -Wsign-compare\r
-CPPFLAGS += -Wa,-adhlns=$(<:%.cpp=$(OBJDIR)/%.lst)\r
-CPPFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))\r
-#CPPFLAGS += $(CSTANDARD)\r
-\r
-\r
-#---------------- Assembler Options ----------------\r
-#  -Wa,...:   tell GCC to pass this to the assembler.\r
-#  -adhlns:   create listing\r
-#  -gstabs:   have the assembler create line number information; note that\r
-#             for use in COFF files, additional information about filenames\r
-#             and function names needs to be present in the assembler source\r
-#             files -- see avr-libc docs [FIXME: not yet described there]\r
-#  -listing-cont-lines: Sets the maximum number of continuation lines of hex \r
-#       dump that will be displayed for a given single line of source input.\r
-ASFLAGS = $(ADEFS) -Wa,-adhlns=$(<:%.S=$(OBJDIR)/%.lst),-gstabs,--listing-cont-lines=100\r
-\r
-\r
-#---------------- Library Options ----------------\r
-# Minimalistic printf version\r
-PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min\r
-\r
-# Floating point printf version (requires MATH_LIB = -lm below)\r
-PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt\r
-\r
-# If this is left blank, then it will use the Standard printf version.\r
-PRINTF_LIB = \r
-#PRINTF_LIB = $(PRINTF_LIB_MIN)\r
-#PRINTF_LIB = $(PRINTF_LIB_FLOAT)\r
-\r
-\r
-# Minimalistic scanf version\r
-SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min\r
-\r
-# Floating point + %[ scanf version (requires MATH_LIB = -lm below)\r
-SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt\r
-\r
-# If this is left blank, then it will use the Standard scanf version.\r
-SCANF_LIB = \r
-#SCANF_LIB = $(SCANF_LIB_MIN)\r
-#SCANF_LIB = $(SCANF_LIB_FLOAT)\r
-\r
-\r
-MATH_LIB = -lm\r
-\r
-\r
-# List any extra directories to look for libraries here.\r
-#     Each directory must be seperated by a space.\r
-#     Use forward slashes for directory separators.\r
-#     For a directory that has spaces, enclose it in quotes.\r
-EXTRALIBDIRS = \r
-\r
-\r
-\r
-#---------------- External Memory Options ----------------\r
-\r
-# 64 KB of external RAM, starting after internal RAM (ATmega128!),\r
-# used for variables (.data/.bss) and heap (malloc()).\r
-#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff\r
-\r
-# 64 KB of external RAM, starting after internal RAM (ATmega128!),\r
-# only used for heap (malloc()).\r
-#EXTMEMOPTS = -Wl,--section-start,.data=0x801100,--defsym=__heap_end=0x80ffff\r
-\r
-EXTMEMOPTS =\r
-\r
-\r
-\r
-#---------------- Linker Options ----------------\r
-#  -Wl,...:     tell GCC to pass this to linker.\r
-#    -Map:      create map file\r
-#    --cref:    add cross reference to  map file\r
-LDFLAGS = -Wl,-Map=$(TARGET).map,--cref\r
-LDFLAGS += -Wl,--relax \r
-LDFLAGS += -Wl,--gc-sections\r
-LDFLAGS += $(EXTMEMOPTS)\r
-LDFLAGS += $(patsubst %,-L%,$(EXTRALIBDIRS))\r
-LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)\r
-#LDFLAGS += -T linker_script.x\r
-\r
-\r
-\r
-#---------------- Programming Options (avrdude) ----------------\r
-\r
-# Programming hardware: alf avr910 avrisp bascom bsd \r
-# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500\r
-#\r
-# Type: avrdude -c ?\r
-# to get a full listing.\r
-#\r
-AVRDUDE_PROGRAMMER = jtagmkII\r
-\r
-# com1 = serial port. Use lpt1 to connect to parallel port.\r
-AVRDUDE_PORT = usb\r
-\r
-AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex\r
-#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep\r
-\r
-\r
-# Uncomment the following if you want avrdude's erase cycle counter.\r
-# Note that this counter needs to be initialized first using -Yn,\r
-# see avrdude manual.\r
-#AVRDUDE_ERASE_COUNTER = -y\r
-\r
-# Uncomment the following if you do /not/ wish a verification to be\r
-# performed after programming the device.\r
-#AVRDUDE_NO_VERIFY = -V\r
-\r
-# Increase verbosity level.  Please use this when submitting bug\r
-# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude> \r
-# to submit bug reports.\r
-#AVRDUDE_VERBOSE = -v -v\r
-\r
-AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)\r
-AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY)\r
-AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE)\r
-AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER)\r
-\r
-\r
-\r
-#---------------- Debugging Options ----------------\r
-\r
-# For simulavr only - target MCU frequency.\r
-DEBUG_MFREQ = $(F_CPU)\r
-\r
-# Set the DEBUG_UI to either gdb or insight.\r
-# DEBUG_UI = gdb\r
-DEBUG_UI = insight\r
-\r
-# Set the debugging back-end to either avarice, simulavr.\r
-DEBUG_BACKEND = avarice\r
-#DEBUG_BACKEND = simulavr\r
-\r
-# GDB Init Filename.\r
-GDBINIT_FILE = __avr_gdbinit\r
-\r
-# When using avarice settings for the JTAG\r
-JTAG_DEV = /dev/com1\r
-\r
-# Debugging port used to communicate between GDB / avarice / simulavr.\r
-DEBUG_PORT = 4242\r
-\r
-# Debugging host used to communicate between GDB / avarice / simulavr, normally\r
-#     just set to localhost unless doing some sort of crazy debugging when \r
-#     avarice is running on a different computer.\r
-DEBUG_HOST = localhost\r
-\r
-\r
-\r
-#============================================================================\r
-\r
-\r
-# Define programs and commands.\r
-SHELL = sh\r
-CC = avr-gcc\r
-OBJCOPY = avr-objcopy\r
-OBJDUMP = avr-objdump\r
-SIZE = avr-size\r
-AR = avr-ar rcs\r
-NM = avr-nm\r
-AVRDUDE = avrdude\r
-REMOVE = rm -f\r
-REMOVEDIR = rm -rf\r
-COPY = cp\r
-WINSHELL = cmd\r
-\r
-# Define Messages\r
-# English\r
-MSG_ERRORS_NONE = Errors: none\r
-MSG_BEGIN = -------- begin --------\r
-MSG_END = --------  end  --------\r
-MSG_SIZE_BEFORE = Size before: \r
-MSG_SIZE_AFTER = Size after:\r
-MSG_COFF = Converting to AVR COFF:\r
-MSG_EXTENDED_COFF = Converting to AVR Extended COFF:\r
-MSG_FLASH = Creating load file for Flash:\r
-MSG_EEPROM = Creating load file for EEPROM:\r
-MSG_EXTENDED_LISTING = Creating Extended Listing:\r
-MSG_SYMBOL_TABLE = Creating Symbol Table:\r
-MSG_LINKING = Linking:\r
-MSG_COMPILING = Compiling C:\r
-MSG_COMPILING_CPP = Compiling C++:\r
-MSG_ASSEMBLING = Assembling:\r
-MSG_CLEANING = Cleaning project:\r
-MSG_CREATING_LIBRARY = Creating library:\r
-\r
-\r
-\r
-\r
-# Define all object files.\r
-OBJ = $(SRC:%.c=$(OBJDIR)/%.o) $(CPPSRC:%.cpp=$(OBJDIR)/%.o) $(ASRC:%.S=$(OBJDIR)/%.o) \r
-\r
-# Define all listing files.\r
-LST = $(SRC:%.c=$(OBJDIR)/%.lst) $(CPPSRC:%.cpp=$(OBJDIR)/%.lst) $(ASRC:%.S=$(OBJDIR)/%.lst) \r
-\r
-\r
-# Compiler flags to generate dependency files.\r
-GENDEPFLAGS = -MMD -MP -MF .dep/$(@F).d\r
-\r
-\r
-# Combine all necessary flags and optional flags.\r
-# Add target processor to flags.\r
-ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS)\r
-ALL_CPPFLAGS = -mmcu=$(MCU) -I. -x c++ $(CPPFLAGS) $(GENDEPFLAGS)\r
-ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)\r
-\r
-\r
-\r
-\r
-\r
-# Default target.\r
-all: begin gccversion sizebefore build checkhooks checklibmode checkboard sizeafter end\r
-\r
-# Change the build target to build a HEX file or a library.\r
-build: elf hex eep lss sym\r
-#build: lib\r
-\r
-\r
-elf: $(TARGET).elf\r
-hex: $(TARGET).hex\r
-eep: $(TARGET).eep\r
-lss: $(TARGET).lss\r
-sym: $(TARGET).sym\r
-LIBNAME=lib$(TARGET).a\r
-lib: $(LIBNAME)\r
-\r
-\r
-\r
-# Eye candy.\r
-# AVR Studio 3.x does not check make's exit code but relies on\r
-# the following magic strings to be generated by the compile job.\r
-begin:\r
-       @echo\r
-       @echo $(MSG_BEGIN)\r
-\r
-end:\r
-       @echo $(MSG_END)\r
-       @echo\r
-\r
-\r
-# Display size of file.\r
-HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex\r
-ELFSIZE = $(SIZE) $(MCU_FLAG) $(FORMAT_FLAG) $(TARGET).elf\r
-MCU_FLAG = $(shell $(SIZE) --help | grep -- --mcu > /dev/null && echo --mcu=$(MCU) )\r
-FORMAT_FLAG = $(shell $(SIZE) --help | grep -- --format=.*avr > /dev/null && echo --format=avr )\r
-\r
-sizebefore:\r
-       @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \\r
-       2>/dev/null; echo; fi\r
-\r
-sizeafter:\r
-       @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \\r
-       2>/dev/null; echo; fi\r
-\r
-checkhooks: build\r
-       @echo\r
-       @echo ------- Unhooked LUFA Events -------\r
-       @$(shell) (grep -s '^EVENT_.*LUFA/.*\\.o' $(TARGET).map | \\r
-                  cut -d' ' -f1 | cut -d'_' -f2- | grep ".*") || \\r
-                          echo "(None)"\r
-       @echo ------------------------------------\r
-\r
-checklibmode:\r
-       @echo\r
-       @echo ----------- Library Mode -----------\r
-       @$(shell) ($(CC) $(ALL_CFLAGS) -E -dM - < /dev/null \\r
-                 | grep 'USB_\(DEVICE\|HOST\)_ONLY' | cut -d' ' -f2 | grep ".*") \\r
-                 || echo "No specific mode (both device and host mode allowable)."\r
-       @echo ------------------------------------\r
-\r
-checkboard:\r
-       @echo\r
-       @echo ---------- Selected Board ----------\r
-       @echo Selected board model is $(BOARD).\r
-       @echo ------------------------------------\r
-       \r
-# Display compiler version information.\r
-gccversion : \r
-       @$(CC) --version\r
-\r
-\r
-\r
-# Program the device.  \r
-program: $(TARGET).hex $(TARGET).eep\r
-       $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)\r
-\r
-flip: $(TARGET).hex\r
-       batchisp -hardware usb -device $(MCU) -operation erase f\r
-       batchisp -hardware usb -device $(MCU) -operation loadbuffer $(TARGET).hex program\r
-       batchisp -hardware usb -device $(MCU) -operation start reset 0\r
-\r
-dfu: $(TARGET).hex\r
-       dfu-programmer $(MCU) erase\r
-       dfu-programmer $(MCU) flash --debug 1 $(TARGET).hex\r
-       dfu-programmer $(MCU) reset\r
-\r
-flip-ee: $(TARGET).hex $(TARGET).eep\r
-       copy $(TARGET).eep $(TARGET)eep.hex\r
-       batchisp -hardware usb -device $(MCU) -operation memory EEPROM erase\r
-       batchisp -hardware usb -device $(MCU) -operation memory EEPROM loadbuffer $(TARGET)eep.hex program\r
-       batchisp -hardware usb -device $(MCU) -operation start reset 0\r
-\r
-dfu-ee: $(TARGET).hex $(TARGET).eep\r
-       dfu-programmer $(MCU) flash-eeprom --debug 1 --suppress-bootloader-mem $(TARGET).eep\r
-       dfu-programmer $(MCU) reset\r
-\r
-\r
-# Generate avr-gdb config/init file which does the following:\r
-#     define the reset signal, load the target file, connect to target, and set \r
-#     a breakpoint at main().\r
-gdb-config: \r
-       @$(REMOVE) $(GDBINIT_FILE)\r
-       @echo define reset >> $(GDBINIT_FILE)\r
-       @echo SIGNAL SIGHUP >> $(GDBINIT_FILE)\r
-       @echo end >> $(GDBINIT_FILE)\r
-       @echo file $(TARGET).elf >> $(GDBINIT_FILE)\r
-       @echo target remote $(DEBUG_HOST):$(DEBUG_PORT)  >> $(GDBINIT_FILE)\r
-ifeq ($(DEBUG_BACKEND),simulavr)\r
-       @echo load  >> $(GDBINIT_FILE)\r
-endif\r
-       @echo break main >> $(GDBINIT_FILE)\r
-\r
-debug: gdb-config $(TARGET).elf\r
-ifeq ($(DEBUG_BACKEND), avarice)\r
-       @echo Starting AVaRICE - Press enter when "waiting to connect" message displays.\r
-       @$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \\r
-       $(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT)\r
-       @$(WINSHELL) /c pause\r
-\r
-else\r
-       @$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \\r
-       $(DEBUG_MFREQ) --port $(DEBUG_PORT)\r
-endif\r
-       @$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE)\r
-\r
-\r
-\r
-\r
-# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.\r
-COFFCONVERT = $(OBJCOPY) --debugging\r
-COFFCONVERT += --change-section-address .data-0x800000\r
-COFFCONVERT += --change-section-address .bss-0x800000\r
-COFFCONVERT += --change-section-address .noinit-0x800000\r
-COFFCONVERT += --change-section-address .eeprom-0x810000\r
-\r
-\r
-\r
-coff: $(TARGET).elf\r
-       @echo\r
-       @echo $(MSG_COFF) $(TARGET).cof\r
-       $(COFFCONVERT) -O coff-avr $< $(TARGET).cof\r
-\r
-\r
-extcoff: $(TARGET).elf\r
-       @echo\r
-       @echo $(MSG_EXTENDED_COFF) $(TARGET).cof\r
-       $(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof\r
-\r
-\r
-\r
-# Create final output files (.hex, .eep) from ELF output file.\r
-%.hex: %.elf\r
-       @echo\r
-       @echo $(MSG_FLASH) $@\r
-       $(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@\r
-\r
-%.eep: %.elf\r
-       @echo\r
-       @echo $(MSG_EEPROM) $@\r
-       -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \\r
-       --change-section-lma .eeprom=0 --no-change-warnings -O $(FORMAT) $< $@ || exit 0\r
-\r
-# Create extended listing file from ELF output file.\r
-%.lss: %.elf\r
-       @echo\r
-       @echo $(MSG_EXTENDED_LISTING) $@\r
-       $(OBJDUMP) -h -z -S $< > $@\r
-\r
-# Create a symbol table from ELF output file.\r
-%.sym: %.elf\r
-       @echo\r
-       @echo $(MSG_SYMBOL_TABLE) $@\r
-       $(NM) -n $< > $@\r
-\r
-\r
-\r
-# Create library from object files.\r
-.SECONDARY : $(TARGET).a\r
-.PRECIOUS : $(OBJ)\r
-%.a: $(OBJ)\r
-       @echo\r
-       @echo $(MSG_CREATING_LIBRARY) $@\r
-       $(AR) $@ $(OBJ)\r
-\r
-\r
-# Link: create ELF output file from object files.\r
-.SECONDARY : $(TARGET).elf\r
-.PRECIOUS : $(OBJ)\r
-%.elf: $(OBJ)\r
-       @echo\r
-       @echo $(MSG_LINKING) $@\r
-       $(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)\r
-\r
-\r
-# Compile: create object files from C source files.\r
-$(OBJDIR)/%.o : %.c\r
-       @echo\r
-       @echo $(MSG_COMPILING) $<\r
-       $(CC) -c $(ALL_CFLAGS) $< -o $@ \r
-\r
-\r
-# Compile: create object files from C++ source files.\r
-$(OBJDIR)/%.o : %.cpp\r
-       @echo\r
-       @echo $(MSG_COMPILING_CPP) $<\r
-       $(CC) -c $(ALL_CPPFLAGS) $< -o $@ \r
-\r
-\r
-# Compile: create assembler files from C source files.\r
-%.s : %.c\r
-       $(CC) -S $(ALL_CFLAGS) $< -o $@\r
-\r
-\r
-# Compile: create assembler files from C++ source files.\r
-%.s : %.cpp\r
-       $(CC) -S $(ALL_CPPFLAGS) $< -o $@\r
-\r
-\r
-# Assemble: create object files from assembler source files.\r
-$(OBJDIR)/%.o : %.S\r
-       @echo\r
-       @echo $(MSG_ASSEMBLING) $<\r
-       $(CC) -c $(ALL_ASFLAGS) $< -o $@\r
-\r
-\r
-# Create preprocessed source for use in sending a bug report.\r
-%.i : %.c\r
-       $(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ \r
-       \r
-\r
-# Target: clean project.\r
-clean: begin clean_list clean_binary end\r
-\r
-clean_binary:\r
-       $(REMOVE) $(TARGET).hex\r
-       \r
-clean_list:\r
-       @echo $(MSG_CLEANING)\r
-       $(REMOVE) $(TARGET).eep\r
-       $(REMOVE) $(TARGET)eep.hex\r
-       $(REMOVE) $(TARGET).cof\r
-       $(REMOVE) $(TARGET).elf\r
-       $(REMOVE) $(TARGET).map\r
-       $(REMOVE) $(TARGET).sym\r
-       $(REMOVE) $(TARGET).lss\r
-       $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.o)\r
-       $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.lst)\r
-       $(REMOVE) $(SRC:.c=.s)\r
-       $(REMOVE) $(SRC:.c=.d)\r
-       $(REMOVE) $(SRC:.c=.i)\r
-       $(REMOVEDIR) .dep\r
-\r
-\r
-doxygen:\r
-       @echo Generating Project Documentation...\r
-       @doxygen Doxygen.conf\r
-       @echo Documentation Generation Complete.\r
-\r
-clean_doxygen:\r
-       rm -rf Documentation\r
-\r
-# Create object files directory\r
-$(shell mkdir $(OBJDIR) 2>/dev/null)\r
-\r
-\r
-# Include the dependency files.\r
--include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)\r
-\r
-\r
-# Listing of phony targets.\r
-.PHONY : all checkhooks checklibmode checkboard   \\r
-begin finish end sizebefore sizeafter gccversion  \\r
-build elf hex eep lss sym coff extcoff clean      \\r
-clean_list clean_binary program debug gdb-config  \\r
-doxygen dfu flip flip-ee dfu-ee
\ No newline at end of file
diff --git a/Demos/Device/KeyboardMouse/Descriptors.c b/Demos/Device/KeyboardMouse/Descriptors.c
deleted file mode 100644 (file)
index c9a778f..0000000
+++ /dev/null
@@ -1,344 +0,0 @@
-/*\r
-             LUFA Library\r
-     Copyright (C) Dean Camera, 2009.\r
-              \r
-  dean [at] fourwalledcubicle [dot] com\r
-      www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
-  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-  Copyright 2009  Denver Gingerich (denver [at] ossguy [dot] com)\r
-  \r
-  Permission to use, copy, modify, and distribute this software\r
-  and its documentation for any purpose and without fee is hereby\r
-  granted, provided that the above copyright notice appear in all\r
-  copies and that both that the copyright notice and this\r
-  permission notice and warranty disclaimer appear in supporting\r
-  documentation, and that the name of the author not be used in\r
-  advertising or publicity pertaining to distribution of the\r
-  software without specific, written prior permission.\r
-\r
-  The author disclaim all warranties with regard to this\r
-  software, including all implied warranties of merchantability\r
-  and fitness.  In no event shall the author be liable for any\r
-  special, indirect or consequential damages or any damages\r
-  whatsoever resulting from loss of use, data or profits, whether\r
-  in an action of contract, negligence or other tortious action,\r
-  arising out of or in connection with the use or performance of\r
-  this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- *  USB Device Descriptors, for library use when in USB device mode. Descriptors are special \r
- *  computer-readable structures which the host requests upon device enumeration, to determine\r
- *  the device's capabilities and functions.  \r
- */\r
-\r
-#include "Descriptors.h"\r
-\r
-/** HID class report descriptor. This is a special descriptor constructed with values from the\r
- *  USBIF HID class specification to describe the reports and capabilities of the HID device. This\r
- *  descriptor is parsed by the host and its contents used to determine what data (and in what encoding)\r
- *  the device will send, and what it may be sent back from the host. Refer to the HID specification for\r
- *  more details on HID report descriptors.\r
- *\r
- *  This descriptor describes the mouse HID interface's report structure.\r
- */\r
-USB_Descriptor_HIDReport_Datatype_t PROGMEM MouseReport[] =\r
-{\r
-       0x05, 0x01,          /* Usage Page (Generic Desktop)                    */\r
-       0x09, 0x02,          /* Usage (Mouse)                                   */\r
-       0xA1, 0x01,          /* Collection (Application)                        */\r
-       0x09, 0x01,          /*   Usage (Pointer)                               */\r
-       0xA1, 0x00,          /*   Collection (Physical)                         */\r
-       0x95, 0x03,          /*     Report Count (3)                            */\r
-       0x75, 0x01,          /*     Report Size (1)                             */\r
-       0x05, 0x09,          /*     Usage Page (Button)                         */\r
-       0x19, 0x01,          /*     Usage Minimum (Button 1)                    */\r
-       0x29, 0x03,          /*     Usage Maximum (Button 3)                    */\r
-       0x15, 0x00,          /*     Logical Minimum (0)                         */\r
-       0x25, 0x01,          /*     Logical Maximum (1)                         */\r
-       0x81, 0x02,          /*     Input (Data, Variable, Absolute)            */\r
-       0x95, 0x01,          /*     Report Count (1)                            */\r
-       0x75, 0x05,          /*     Report Size (5)                             */\r
-       0x81, 0x01,          /*     Input (Constant)                            */\r
-       0x75, 0x08,          /*     Report Size (8)                             */\r
-       0x95, 0x02,          /*     Report Count (2)                            */\r
-       0x05, 0x01,          /*     Usage Page (Generic Desktop Control)        */\r
-       0x09, 0x30,          /*     Usage X                                     */\r
-       0x09, 0x31,          /*     Usage Y                                     */\r
-       0x15, 0x81,          /*     Logical Minimum (-127)                      */\r
-       0x25, 0x7F,          /*     Logical Maximum (127)                       */\r
-       0x81, 0x06,          /*     Input (Data, Variable, Relative)            */\r
-       0xC0,                /*   End Collection                                */\r
-       0xC0,                /* End Collection                                  */\r
-};\r
-\r
-/** Same as the MouseReport structure, but defines the keyboard HID interface's report structure. */\r
-USB_Descriptor_HIDReport_Datatype_t PROGMEM KeyboardReport[] =\r
-{\r
-       0x05, 0x01,          /* Usage Page (Generic Desktop)                    */\r
-       0x09, 0x06,          /* Usage (Keyboard)                                */\r
-       0xa1, 0x01,          /* Collection (Application)                        */\r
-       0x75, 0x01,          /*   Report Size (1)                               */\r
-       0x95, 0x08,          /*   Report Count (8)                              */\r
-       0x05, 0x07,          /*   Usage Page (Key Codes)                        */\r
-       0x19, 0xe0,          /*   Usage Minimum (Keyboard LeftControl)          */\r
-       0x29, 0xe7,          /*   Usage Maximum (Keyboard Right GUI)            */\r
-       0x15, 0x00,          /*   Logical Minimum (0)                           */\r
-       0x25, 0x01,          /*   Logical Maximum (1)                           */\r
-       0x81, 0x02,          /*   Input (Data, Variable, Absolute)              */\r
-       0x95, 0x01,          /*   Report Count (1)                              */\r
-       0x75, 0x08,          /*   Report Size (8)                               */\r
-       0x81, 0x03,          /*   Input (Const, Variable, Absolute)             */\r
-       0x95, 0x05,          /*   Report Count (5)                              */\r
-       0x75, 0x01,          /*   Report Size (1)                               */\r
-       0x05, 0x08,          /*   Usage Page (LEDs)                             */\r
-       0x19, 0x01,          /*   Usage Minimum (Num Lock)                      */\r
-       0x29, 0x05,          /*   Usage Maximum (Kana)                          */\r
-       0x91, 0x02,          /*   Output (Data, Variable, Absolute)             */\r
-       0x95, 0x01,          /*   Report Count (1)                              */\r
-       0x75, 0x03,          /*   Report Size (3)                               */\r
-       0x91, 0x03,          /*   Output (Const, Variable, Absolute)            */\r
-       0x95, 0x06,          /*   Report Count (6)                              */\r
-       0x75, 0x08,          /*   Report Size (8)                               */\r
-       0x15, 0x00,          /*   Logical Minimum (0)                           */\r
-       0x25, 0x65,          /*   Logical Maximum (101)                         */\r
-       0x05, 0x07,          /*   Usage Page (Keyboard)                         */\r
-       0x19, 0x00,          /*   Usage Minimum (Reserved (no event indicated)) */\r
-       0x29, 0x65,          /*   Usage Maximum (Keyboard Application)          */\r
-       0x81, 0x00,          /*   Input (Data, Array, Absolute)                 */\r
-       0xC0                 /* End Collection                                  */\r
-};\r
-\r
-/** Device descriptor structure. This descriptor, located in FLASH memory, describes the overall\r
- *  device characteristics, including the supported USB version, control endpoint size and the\r
- *  number of device configurations. The descriptor is read out by the USB host when the enumeration\r
- *  process begins.\r
- */\r
-USB_Descriptor_Device_t PROGMEM DeviceDescriptor =\r
-{\r
-       .Header                 = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device},\r
-               \r
-       .USBSpecification       = VERSION_BCD(01.10),\r
-       .Class                  = 0x00,\r
-       .SubClass               = 0x00,\r
-       .Protocol               = 0x00,\r
-                               \r
-       .Endpoint0Size          = FIXED_CONTROL_ENDPOINT_SIZE,\r
-               \r
-       .VendorID               = 0x03EB,\r
-       .ProductID              = 0x204D,\r
-       .ReleaseNumber          = 0x0000,\r
-               \r
-       .ManufacturerStrIndex   = 0x01,\r
-       .ProductStrIndex        = 0x02,\r
-       .SerialNumStrIndex      = NO_DESCRIPTOR,\r
-               \r
-       .NumberOfConfigurations = 1\r
-};\r
-\r
-/** Configuration descriptor structure. This descriptor, located in FLASH memory, describes the usage\r
- *  of the device in one of its supported configurations, including information about any device interfaces\r
- *  and endpoints. The descriptor is read out by the USB host during the enumeration process when selecting\r
- *  a configuration so that the host may correctly communicate with the USB device.\r
- */\r
-USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =\r
-{\r
-       .Config = \r
-               {\r
-                       .Header                 = {.Size = sizeof(USB_Descriptor_Configuration_Header_t), .Type = DTYPE_Configuration},\r
-\r
-                       .TotalConfigurationSize = sizeof(USB_Descriptor_Configuration_t),\r
-                       .TotalInterfaces        = 2,\r
-                               \r
-                       .ConfigurationNumber    = 1,\r
-                       .ConfigurationStrIndex  = NO_DESCRIPTOR,\r
-                               \r
-                       .ConfigAttributes       = (USB_CONFIG_ATTR_BUSPOWERED | USB_CONFIG_ATTR_SELFPOWERED),\r
-                       \r
-                       .MaxPowerConsumption    = USB_CONFIG_POWER_MA(100)\r
-               },\r
-               \r
-       .KeyboardInterface = \r
-               {\r
-                       .Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},\r
-\r
-                       .InterfaceNumber        = 0x00,\r
-                       .AlternateSetting       = 0x00,\r
-                       \r
-                       .TotalEndpoints         = 1,\r
-                               \r
-                       .Class                  = 0x03,\r
-                       .SubClass               = 0x01,\r
-                       .Protocol               = 0x01,\r
-                               \r
-                       .InterfaceStrIndex      = NO_DESCRIPTOR\r
-               },\r
-\r
-       .KeyboardHID = \r
-               {  \r
-                       .Header                 = {.Size = sizeof(USB_Descriptor_HID_t), .Type = DTYPE_HID},\r
-                       \r
-                       .HIDSpec                = VERSION_BCD(01.11),\r
-                       .CountryCode            = 0x00,\r
-                       .TotalReportDescriptors = 1,\r
-                       .HIDReportType          = DTYPE_Report,\r
-                       .HIDReportLength        = sizeof(KeyboardReport)\r
-               },\r
-               \r
-       .KeyboardInEndpoint = \r
-               {\r
-                       .Header                 = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},\r
-\r
-                       .EndpointAddress        = (ENDPOINT_DESCRIPTOR_DIR_IN | KEYBOARD_IN_EPNUM),\r
-                       .Attributes             = EP_TYPE_INTERRUPT,\r
-                       .EndpointSize           = HID_EPSIZE,\r
-                       .PollingIntervalMS      = 0x02\r
-               },\r
-\r
-       .MouseInterface = \r
-               {\r
-                       .Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},\r
-\r
-                       .InterfaceNumber        = 0x01,\r
-                       .AlternateSetting       = 0x00,\r
-                       \r
-                       .TotalEndpoints         = 1,\r
-                               \r
-                       .Class                  = 0x03,\r
-                       .SubClass               = 0x01,\r
-                       .Protocol               = 0x02,\r
-                               \r
-                       .InterfaceStrIndex      = NO_DESCRIPTOR\r
-               },\r
-\r
-       .MouseHID = \r
-               {  \r
-                       .Header                 = {.Size = sizeof(USB_Descriptor_HID_t), .Type = DTYPE_HID},\r
-                       \r
-                       .HIDSpec                = VERSION_BCD(01.11),\r
-                       .CountryCode            = 0x00,\r
-                       .TotalReportDescriptors = 1,\r
-                       .HIDReportType          = DTYPE_Report,\r
-                       .HIDReportLength        = sizeof(MouseReport)\r
-               },\r
-               \r
-       .MouseInEndpoint = \r
-               {\r
-                       .Header                 = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},\r
-\r
-                       .EndpointAddress        = (ENDPOINT_DESCRIPTOR_DIR_IN | MOUSE_IN_EPNUM),\r
-                       .Attributes             = EP_TYPE_INTERRUPT,\r
-                       .EndpointSize           = HID_EPSIZE,\r
-                       .PollingIntervalMS      = 0x02\r
-               }\r
-};\r
-\r
-/** Language descriptor structure. This descriptor, located in FLASH memory, is returned when the host requests\r
- *  the string descriptor with index 0 (the first index). It is actually an array of 16-bit integers, which indicate\r
- *  via the language ID table available at USB.org what languages the device supports for its string descriptors.\r
- */\r
-USB_Descriptor_String_t PROGMEM LanguageString =\r
-{\r
-       .Header                 = {.Size = USB_STRING_LEN(1), .Type = DTYPE_String},\r
-               \r
-       .UnicodeString          = {LANGUAGE_ID_ENG}\r
-};\r
-\r
-/** Manufacturer descriptor string. This is a Unicode string containing the manufacturer's details in human readable\r
- *  form, and is read out upon request by the host when the appropriate string ID is requested, listed in the Device\r
- *  Descriptor.\r
- */\r
-USB_Descriptor_String_t PROGMEM ManufacturerString =\r
-{\r
-       .Header                 = {.Size = USB_STRING_LEN(11), .Type = DTYPE_String},\r
-               \r
-       .UnicodeString          = L"Dean Camera"\r
-};\r
-\r
-/** Product descriptor string. This is a Unicode string containing the product's details in human readable form,\r
- *  and is read out upon request by the host when the appropriate string ID is requested, listed in the Device\r
- *  Descriptor.\r
- */\r
-USB_Descriptor_String_t PROGMEM ProductString =\r
-{\r
-       .Header                 = {.Size = USB_STRING_LEN(28), .Type = DTYPE_String},\r
-               \r
-       .UnicodeString          = L"LUFA Mouse and Keyboard Demo"\r
-};\r
-\r
-/** This function is called by the library when in device mode, and must be overridden (see library "USB Descriptors"\r
- *  documentation) by the application code so that the address and size of a requested descriptor can be given\r
- *  to the USB library. When the device receives a Get Descriptor request on the control endpoint, this function\r
- *  is called so that the descriptor details can be passed back and the appropriate descriptor sent back to the\r
- *  USB host.\r
- */\r
-uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
-{\r
-       const uint8_t  DescriptorType   = (wValue >> 8);\r
-       const uint8_t  DescriptorNumber = (wValue & 0xFF);\r
-\r
-       void*    Address = NULL;\r
-       uint16_t Size    = NO_DESCRIPTOR;\r
-\r
-       switch (DescriptorType)\r
-       {\r
-               case DTYPE_Device: \r
-                       Address = (void*)&DeviceDescriptor;\r
-                       Size    = sizeof(USB_Descriptor_Device_t);\r
-                       break;\r
-               case DTYPE_Configuration: \r
-                       Address = (void*)&ConfigurationDescriptor;\r
-                       Size    = sizeof(USB_Descriptor_Configuration_t);\r
-                       break;\r
-               case DTYPE_String: \r
-                       switch (DescriptorNumber)\r
-                       {\r
-                               case 0x00: \r
-                                       Address = (void*)&LanguageString;\r
-                                       Size    = pgm_read_byte(&LanguageString.Header.Size);\r
-                                       break;\r
-                               case 0x01: \r
-                                       Address = (void*)&ManufacturerString;\r
-                                       Size    = pgm_read_byte(&ManufacturerString.Header.Size);\r
-                                       break;\r
-                               case 0x02: \r
-                                       Address = (void*)&ProductString;\r
-                                       Size    = pgm_read_byte(&ProductString.Header.Size);\r
-                                       break;\r
-                       }\r
-                       \r
-                       break;\r
-               case DTYPE_HID: \r
-                       if (!(wIndex))\r
-                       {\r
-                               Address = (void*)&ConfigurationDescriptor.KeyboardHID;\r
-                               Size    = sizeof(USB_Descriptor_HID_t);\r
-                       }\r
-                       else\r
-                       {\r
-                               Address = (void*)&ConfigurationDescriptor.MouseHID;\r
-                               Size    = sizeof(USB_Descriptor_HID_t);                 \r
-                       }\r
-                       break;\r
-               case DTYPE_Report: \r
-                       if (!(wIndex))\r
-                       {\r
-                               Address = (void*)&KeyboardReport;\r
-                               Size    = sizeof(KeyboardReport);\r
-                       }\r
-                       else\r
-                       {                       \r
-                               Address = (void*)&MouseReport;\r
-                               Size    = sizeof(MouseReport);\r
-                       }\r
-                       \r
-                       break;\r
-       }\r
-       \r
-       *DescriptorAddress = Address;\r
-       return Size;\r
-}\r
diff --git a/Demos/Device/KeyboardMouse/Descriptors.h b/Demos/Device/KeyboardMouse/Descriptors.h
deleted file mode 100644 (file)
index 1dcad08..0000000
+++ /dev/null
@@ -1,76 +0,0 @@
-/*\r
-             LUFA Library\r
-     Copyright (C) Dean Camera, 2009.\r
-              \r
-  dean [at] fourwalledcubicle [dot] com\r
-      www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
-  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-  Copyright 2009  Denver Gingerich (denver [at] ossguy [dot] com)\r
-  \r
-  Permission to use, copy, modify, and distribute this software\r
-  and its documentation for any purpose and without fee is hereby\r
-  granted, provided that the above copyright notice appear in all\r
-  copies and that both that the copyright notice and this\r
-  permission notice and warranty disclaimer appear in supporting\r
-  documentation, and that the name of the author not be used in\r
-  advertising or publicity pertaining to distribution of the\r
-  software without specific, written prior permission.\r
-\r
-  The author disclaim all warranties with regard to this\r
-  software, including all implied warranties of merchantability\r
-  and fitness.  In no event shall the author be liable for any\r
-  special, indirect or consequential damages or any damages\r
-  whatsoever resulting from loss of use, data or profits, whether\r
-  in an action of contract, negligence or other tortious action,\r
-  arising out of or in connection with the use or performance of\r
-  this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- *  Header file for Descriptors.c.\r
- */\r
\r
-#ifndef _DESCRIPTORS_H_\r
-#define _DESCRIPTORS_H_\r
-\r
-       /* Includes: */\r
-               #include <avr/pgmspace.h>\r
-\r
-               #include <LUFA/Drivers/USB/USB.h>\r
-               #include <LUFA/Drivers/USB/Class/Device/HID.h>\r
-\r
-       /* Type Defines: */\r
-               /** Type define for the device configuration descriptor structure. This must be defined in the\r
-                *  application code, as the configuration descriptor contains several sub-descriptors which\r
-                *  vary between devices, and which describe the device's usage to the host.\r
-                */\r
-               typedef struct\r
-               {\r
-                       USB_Descriptor_Configuration_Header_t Config;\r
-                       USB_Descriptor_Interface_t            KeyboardInterface;\r
-                       USB_Descriptor_HID_t                  KeyboardHID;\r
-               USB_Descriptor_Endpoint_t             KeyboardInEndpoint;\r
-                       USB_Descriptor_Interface_t            MouseInterface;\r
-                       USB_Descriptor_HID_t                  MouseHID;\r
-               USB_Descriptor_Endpoint_t             MouseInEndpoint;\r
-               } USB_Descriptor_Configuration_t;\r
-                                       \r
-       /* Macros: */\r
-               /** Endpoint number of the Keyboard HID reporting IN endpoint. */\r
-               #define KEYBOARD_IN_EPNUM         1\r
-\r
-               /** Endpoint number of the Mouse HID reporting IN endpoint. */\r
-               #define MOUSE_IN_EPNUM            3\r
-\r
-               /** Size in bytes of each of the HID reporting IN and OUT endpoints. */\r
-               #define HID_EPSIZE                8\r
-\r
-       /* Function Prototypes: */\r
-               uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
-                                                                                       ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);\r
-\r
-#endif\r
diff --git a/Demos/Device/KeyboardMouse/Doxygen.conf b/Demos/Device/KeyboardMouse/Doxygen.conf
deleted file mode 100644 (file)
index 1291685..0000000
+++ /dev/null
@@ -1,1485 +0,0 @@
-# Doxyfile 1.5.7.1\r
-\r
-# This file describes the settings to be used by the documentation system\r
-# doxygen (www.doxygen.org) for a project\r
-#\r
-# All text after a hash (#) is considered a comment and will be ignored\r
-# The format is:\r
-#       TAG = value [value, ...]\r
-# For lists items can also be appended using:\r
-#       TAG += value [value, ...]\r
-# Values that contain spaces should be placed between quotes (" ")\r
-\r
-#---------------------------------------------------------------------------\r
-# Project related configuration options\r
-#---------------------------------------------------------------------------\r
-\r
-# This tag specifies the encoding used for all characters in the config file \r
-# that follow. The default is UTF-8 which is also the encoding used for all \r
-# text before the first occurrence of this tag. Doxygen uses libiconv (or the \r
-# iconv built into libc) for the transcoding. See \r
-# http://www.gnu.org/software/libiconv for the list of possible encodings.\r
-\r
-DOXYFILE_ENCODING      = UTF-8\r
-\r
-# The PROJECT_NAME tag is a single word (or a sequence of words surrounded \r
-# by quotes) that should identify the project.\r
-\r
-PROJECT_NAME           = "LUFA Library - Combined Keyboard/Mouse Device Demo"\r
-\r
-# The PROJECT_NUMBER tag can be used to enter a project or revision number. \r
-# This could be handy for archiving the generated documentation or \r
-# if some version control system is used.\r
-\r
-PROJECT_NUMBER         = 0.0.0\r
-\r
-# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) \r
-# base path where the generated documentation will be put. \r
-# If a relative path is entered, it will be relative to the location \r
-# where doxygen was started. If left blank the current directory will be used.\r
-\r
-OUTPUT_DIRECTORY       = ./Documentation/\r
-\r
-# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create \r
-# 4096 sub-directories (in 2 levels) under the output directory of each output \r
-# format and will distribute the generated files over these directories. \r
-# Enabling this option can be useful when feeding doxygen a huge amount of \r
-# source files, where putting all generated files in the same directory would \r
-# otherwise cause performance problems for the file system.\r
-\r
-CREATE_SUBDIRS         = YES\r
-\r
-# The OUTPUT_LANGUAGE tag is used to specify the language in which all \r
-# documentation generated by doxygen is written. Doxygen will use this \r
-# information to generate all constant output in the proper language. \r
-# The default language is English, other supported languages are: \r
-# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, \r
-# Croatian, Czech, Danish, Dutch, Farsi, Finnish, French, German, Greek, \r
-# Hungarian, Italian, Japanese, Japanese-en (Japanese with English messages), \r
-# Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, Polish, \r
-# Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, Slovene, \r
-# Spanish, Swedish, and Ukrainian.\r
-\r
-OUTPUT_LANGUAGE        = English\r
-\r
-# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will \r
-# include brief member descriptions after the members that are listed in \r
-# the file and class documentation (similar to JavaDoc). \r
-# Set to NO to disable this.\r
-\r
-BRIEF_MEMBER_DESC      = YES\r
-\r
-# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend \r
-# the brief description of a member or function before the detailed description. \r
-# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the \r
-# brief descriptions will be completely suppressed.\r
-\r
-REPEAT_BRIEF           = YES\r
-\r
-# This tag implements a quasi-intelligent brief description abbreviator \r
-# that is used to form the text in various listings. Each string \r
-# in this list, if found as the leading text of the brief description, will be \r
-# stripped from the text and the result after processing the whole list, is \r
-# used as the annotated text. Otherwise, the brief description is used as-is. \r
-# If left blank, the following values are used ("$name" is automatically \r
-# replaced with the name of the entity): "The $name class" "The $name widget" \r
-# "The $name file" "is" "provides" "specifies" "contains" \r
-# "represents" "a" "an" "the"\r
-\r
-ABBREVIATE_BRIEF       = "The $name class" \\r
-                         "The $name widget" \\r
-                         "The $name file" \\r
-                         is \\r
-                         provides \\r
-                         specifies \\r
-                         contains \\r
-                         represents \\r
-                         a \\r
-                         an \\r
-                         the\r
-\r
-# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then \r
-# Doxygen will generate a detailed section even if there is only a brief \r
-# description.\r
-\r
-ALWAYS_DETAILED_SEC    = NO\r
-\r
-# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all \r
-# inherited members of a class in the documentation of that class as if those \r
-# members were ordinary class members. Constructors, destructors and assignment \r
-# operators of the base classes will not be shown.\r
-\r
-INLINE_INHERITED_MEMB  = NO\r
-\r
-# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full \r
-# path before files name in the file list and in the header files. If set \r
-# to NO the shortest path that makes the file name unique will be used.\r
-\r
-FULL_PATH_NAMES        = YES\r
-\r
-# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag \r
-# can be used to strip a user-defined part of the path. Stripping is \r
-# only done if one of the specified strings matches the left-hand part of \r
-# the path. The tag can be used to show relative paths in the file list. \r
-# If left blank the directory from which doxygen is run is used as the \r
-# path to strip.\r
-\r
-STRIP_FROM_PATH        = \r
-\r
-# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of \r
-# the path mentioned in the documentation of a class, which tells \r
-# the reader which header file to include in order to use a class. \r
-# If left blank only the name of the header file containing the class \r
-# definition is used. Otherwise one should specify the include paths that \r
-# are normally passed to the compiler using the -I flag.\r
-\r
-STRIP_FROM_INC_PATH    = \r
-\r
-# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter \r
-# (but less readable) file names. This can be useful is your file systems \r
-# doesn't support long names like on DOS, Mac, or CD-ROM.\r
-\r
-SHORT_NAMES            = YES\r
-\r
-# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen \r
-# will interpret the first line (until the first dot) of a JavaDoc-style \r
-# comment as the brief description. If set to NO, the JavaDoc \r
-# comments will behave just like regular Qt-style comments \r
-# (thus requiring an explicit @brief command for a brief description.)\r
-\r
-JAVADOC_AUTOBRIEF      = NO\r
-\r
-# If the QT_AUTOBRIEF tag is set to YES then Doxygen will \r
-# interpret the first line (until the first dot) of a Qt-style \r
-# comment as the brief description. If set to NO, the comments \r
-# will behave just like regular Qt-style comments (thus requiring \r
-# an explicit \brief command for a brief description.)\r
-\r
-QT_AUTOBRIEF           = NO\r
-\r
-# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen \r
-# treat a multi-line C++ special comment block (i.e. a block of //! or /// \r
-# comments) as a brief description. This used to be the default behaviour. \r
-# The new default is to treat a multi-line C++ comment block as a detailed \r
-# description. Set this tag to YES if you prefer the old behaviour instead.\r
-\r
-MULTILINE_CPP_IS_BRIEF = NO\r
-\r
-# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented \r
-# member inherits the documentation from any documented member that it \r
-# re-implements.\r
-\r
-INHERIT_DOCS           = YES\r
-\r
-# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce \r
-# a new page for each member. If set to NO, the documentation of a member will \r
-# be part of the file/class/namespace that contains it.\r
-\r
-SEPARATE_MEMBER_PAGES  = NO\r
-\r
-# The TAB_SIZE tag can be used to set the number of spaces in a tab. \r
-# Doxygen uses this value to replace tabs by spaces in code fragments.\r
-\r
-TAB_SIZE               = 4\r
-\r
-# This tag can be used to specify a number of aliases that acts \r
-# as commands in the documentation. An alias has the form "name=value". \r
-# For example adding "sideeffect=\par Side Effects:\n" will allow you to \r
-# put the command \sideeffect (or @sideeffect) in the documentation, which \r
-# will result in a user-defined paragraph with heading "Side Effects:". \r
-# You can put \n's in the value part of an alias to insert newlines.\r
-\r
-ALIASES                = \r
-\r
-# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C \r
-# sources only. Doxygen will then generate output that is more tailored for C. \r
-# For instance, some of the names that are used will be different. The list \r
-# of all members will be omitted, etc.\r
-\r
-OPTIMIZE_OUTPUT_FOR_C  = YES\r
-\r
-# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java \r
-# sources only. Doxygen will then generate output that is more tailored for \r
-# Java. For instance, namespaces will be presented as packages, qualified \r
-# scopes will look different, etc.\r
-\r
-OPTIMIZE_OUTPUT_JAVA   = NO\r
-\r
-# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran \r
-# sources only. Doxygen will then generate output that is more tailored for \r
-# Fortran.\r
-\r
-OPTIMIZE_FOR_FORTRAN   = NO\r
-\r
-# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL \r
-# sources. Doxygen will then generate output that is tailored for \r
-# VHDL.\r
-\r
-OPTIMIZE_OUTPUT_VHDL   = NO\r
-\r
-# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want \r
-# to include (a tag file for) the STL sources as input, then you should \r
-# set this tag to YES in order to let doxygen match functions declarations and \r
-# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. \r
-# func(std::string) {}). This also make the inheritance and collaboration \r
-# diagrams that involve STL classes more complete and accurate.\r
-\r
-BUILTIN_STL_SUPPORT    = NO\r
-\r
-# If you use Microsoft's C++/CLI language, you should set this option to YES to\r
-# enable parsing support.\r
-\r
-CPP_CLI_SUPPORT        = NO\r
-\r
-# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. \r
-# Doxygen will parse them like normal C++ but will assume all classes use public \r
-# instead of private inheritance when no explicit protection keyword is present.\r
-\r
-SIP_SUPPORT            = NO\r
-\r
-# For Microsoft's IDL there are propget and propput attributes to indicate getter \r
-# and setter methods for a property. Setting this option to YES (the default) \r
-# will make doxygen to replace the get and set methods by a property in the \r
-# documentation. This will only work if the methods are indeed getting or \r
-# setting a simple type. If this is not the case, or you want to show the \r
-# methods anyway, you should set this option to NO.\r
-\r
-IDL_PROPERTY_SUPPORT   = YES\r
-\r
-# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC \r
-# tag is set to YES, then doxygen will reuse the documentation of the first \r
-# member in the group (if any) for the other members of the group. By default \r
-# all members of a group must be documented explicitly.\r
-\r
-DISTRIBUTE_GROUP_DOC   = NO\r
-\r
-# Set the SUBGROUPING tag to YES (the default) to allow class member groups of \r
-# the same type (for instance a group of public functions) to be put as a \r
-# subgroup of that type (e.g. under the Public Functions section). Set it to \r
-# NO to prevent subgrouping. Alternatively, this can be done per class using \r
-# the \nosubgrouping command.\r
-\r
-SUBGROUPING            = YES\r
-\r
-# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum \r
-# is documented as struct, union, or enum with the name of the typedef. So \r
-# typedef struct TypeS {} TypeT, will appear in the documentation as a struct \r
-# with name TypeT. When disabled the typedef will appear as a member of a file, \r
-# namespace, or class. And the struct will be named TypeS. This can typically \r
-# be useful for C code in case the coding convention dictates that all compound \r
-# types are typedef'ed and only the typedef is referenced, never the tag name.\r
-\r
-TYPEDEF_HIDES_STRUCT   = NO\r
-\r
-# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to \r
-# determine which symbols to keep in memory and which to flush to disk.\r
-# When the cache is full, less often used symbols will be written to disk.\r
-# For small to medium size projects (<1000 input files) the default value is \r
-# probably good enough. For larger projects a too small cache size can cause \r
-# doxygen to be busy swapping symbols to and from disk most of the time \r
-# causing a significant performance penality. \r
-# If the system has enough physical memory increasing the cache will improve the \r
-# performance by keeping more symbols in memory. Note that the value works on \r
-# a logarithmic scale so increasing the size by one will rougly double the \r
-# memory usage. The cache size is given by this formula: \r
-# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, \r
-# corresponding to a cache size of 2^16 = 65536 symbols\r
-\r
-SYMBOL_CACHE_SIZE      = 0\r
-\r
-#---------------------------------------------------------------------------\r
-# Build related configuration options\r
-#---------------------------------------------------------------------------\r
-\r
-# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in \r
-# documentation are documented, even if no documentation was available. \r
-# Private class members and static file members will be hidden unless \r
-# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES\r
-\r
-EXTRACT_ALL            = YES\r
-\r
-# If the EXTRACT_PRIVATE tag is set to YES all private members of a class \r
-# will be included in the documentation.\r
-\r
-EXTRACT_PRIVATE        = YES\r
-\r
-# If the EXTRACT_STATIC tag is set to YES all static members of a file \r
-# will be included in the documentation.\r
-\r
-EXTRACT_STATIC         = YES\r
-\r
-# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) \r
-# defined locally in source files will be included in the documentation. \r
-# If set to NO only classes defined in header files are included.\r
-\r
-EXTRACT_LOCAL_CLASSES  = YES\r
-\r
-# This flag is only useful for Objective-C code. When set to YES local \r
-# methods, which are defined in the implementation section but not in \r
-# the interface are included in the documentation. \r
-# If set to NO (the default) only methods in the interface are included.\r
-\r
-EXTRACT_LOCAL_METHODS  = NO\r
-\r
-# If this flag is set to YES, the members of anonymous namespaces will be \r
-# extracted and appear in the documentation as a namespace called \r
-# 'anonymous_namespace{file}', where file will be replaced with the base \r
-# name of the file that contains the anonymous namespace. By default \r
-# anonymous namespace are hidden.\r
-\r
-EXTRACT_ANON_NSPACES   = NO\r
-\r
-# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all \r
-# undocumented members of documented classes, files or namespaces. \r
-# If set to NO (the default) these members will be included in the \r
-# various overviews, but no documentation section is generated. \r
-# This option has no effect if EXTRACT_ALL is enabled.\r
-\r
-HIDE_UNDOC_MEMBERS     = NO\r
-\r
-# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all \r
-# undocumented classes that are normally visible in the class hierarchy. \r
-# If set to NO (the default) these classes will be included in the various \r
-# overviews. This option has no effect if EXTRACT_ALL is enabled.\r
-\r
-HIDE_UNDOC_CLASSES     = NO\r
-\r
-# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all \r
-# friend (class|struct|union) declarations. \r
-# If set to NO (the default) these declarations will be included in the \r
-# documentation.\r
-\r
-HIDE_FRIEND_COMPOUNDS  = NO\r
-\r
-# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any \r
-# documentation blocks found inside the body of a function. \r
-# If set to NO (the default) these blocks will be appended to the \r
-# function's detailed documentation block.\r
-\r
-HIDE_IN_BODY_DOCS      = NO\r
-\r
-# The INTERNAL_DOCS tag determines if documentation \r
-# that is typed after a \internal command is included. If the tag is set \r
-# to NO (the default) then the documentation will be excluded. \r
-# Set it to YES to include the internal documentation.\r
-\r
-INTERNAL_DOCS          = NO\r
-\r
-# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate \r
-# file names in lower-case letters. If set to YES upper-case letters are also \r
-# allowed. This is useful if you have classes or files whose names only differ \r
-# in case and if your file system supports case sensitive file names. Windows \r
-# and Mac users are advised to set this option to NO.\r
-\r
-CASE_SENSE_NAMES       = NO\r
-\r
-# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen \r
-# will show members with their full class and namespace scopes in the \r
-# documentation. If set to YES the scope will be hidden.\r
-\r
-HIDE_SCOPE_NAMES       = NO\r
-\r
-# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen \r
-# will put a list of the files that are included by a file in the documentation \r
-# of that file.\r
-\r
-SHOW_INCLUDE_FILES     = YES\r
-\r
-# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] \r
-# is inserted in the documentation for inline members.\r
-\r
-INLINE_INFO            = YES\r
-\r
-# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen \r
-# will sort the (detailed) documentation of file and class members \r
-# alphabetically by member name. If set to NO the members will appear in \r
-# declaration order.\r
-\r
-SORT_MEMBER_DOCS       = YES\r
-\r
-# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the \r
-# brief documentation of file, namespace and class members alphabetically \r
-# by member name. If set to NO (the default) the members will appear in \r
-# declaration order.\r
-\r
-SORT_BRIEF_DOCS        = NO\r
-\r
-# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the \r
-# hierarchy of group names into alphabetical order. If set to NO (the default) \r
-# the group names will appear in their defined order.\r
-\r
-SORT_GROUP_NAMES       = NO\r
-\r
-# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be \r
-# sorted by fully-qualified names, including namespaces. If set to \r
-# NO (the default), the class list will be sorted only by class name, \r
-# not including the namespace part. \r
-# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.\r
-# Note: This option applies only to the class list, not to the \r
-# alphabetical list.\r
-\r
-SORT_BY_SCOPE_NAME     = NO\r
-\r
-# The GENERATE_TODOLIST tag can be used to enable (YES) or \r
-# disable (NO) the todo list. This list is created by putting \todo \r
-# commands in the documentation.\r
-\r
-GENERATE_TODOLIST      = NO\r
-\r
-# The GENERATE_TESTLIST tag can be used to enable (YES) or \r
-# disable (NO) the test list. This list is created by putting \test \r
-# commands in the documentation.\r
-\r
-GENERATE_TESTLIST      = NO\r
-\r
-# The GENERATE_BUGLIST tag can be used to enable (YES) or \r
-# disable (NO) the bug list. This list is created by putting \bug \r
-# commands in the documentation.\r
-\r
-GENERATE_BUGLIST       = NO\r
-\r
-# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or \r
-# disable (NO) the deprecated list. This list is created by putting \r
-# \deprecated commands in the documentation.\r
-\r
-GENERATE_DEPRECATEDLIST= YES\r
-\r
-# The ENABLED_SECTIONS tag can be used to enable conditional \r
-# documentation sections, marked by \if sectionname ... \endif.\r
-\r
-ENABLED_SECTIONS       = \r
-\r
-# The MAX_INITIALIZER_LINES tag determines the maximum number of lines \r
-# the initial value of a variable or define consists of for it to appear in \r
-# the documentation. If the initializer consists of more lines than specified \r
-# here it will be hidden. Use a value of 0 to hide initializers completely. \r
-# The appearance of the initializer of individual variables and defines in the \r
-# documentation can be controlled using \showinitializer or \hideinitializer \r
-# command in the documentation regardless of this setting.\r
-\r
-MAX_INITIALIZER_LINES  = 30\r
-\r
-# Set the SHOW_USED_FILES tag to NO to disable the list of files generated \r
-# at the bottom of the documentation of classes and structs. If set to YES the \r
-# list will mention the files that were used to generate the documentation.\r
-\r
-SHOW_USED_FILES        = YES\r
-\r
-# If the sources in your project are distributed over multiple directories \r
-# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy \r
-# in the documentation. The default is NO.\r
-\r
-SHOW_DIRECTORIES       = YES\r
-\r
-# Set the SHOW_FILES tag to NO to disable the generation of the Files page.\r
-# This will remove the Files entry from the Quick Index and from the \r
-# Folder Tree View (if specified). The default is YES.\r
-\r
-SHOW_FILES             = YES\r
-\r
-# Set the SHOW_NAMESPACES tag to NO to disable the generation of the \r
-# Namespaces page.  This will remove the Namespaces entry from the Quick Index\r
-# and from the Folder Tree View (if specified). The default is YES.\r
-\r
-SHOW_NAMESPACES        = YES\r
-\r
-# The FILE_VERSION_FILTER tag can be used to specify a program or script that \r
-# doxygen should invoke to get the current version for each file (typically from \r
-# the version control system). Doxygen will invoke the program by executing (via \r
-# popen()) the command <command> <input-file>, where <command> is the value of \r
-# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file \r
-# provided by doxygen. Whatever the program writes to standard output \r
-# is used as the file version. See the manual for examples.\r
-\r
-FILE_VERSION_FILTER    = \r
-\r
-# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by \r
-# doxygen. The layout file controls the global structure of the generated output files \r
-# in an output format independent way. The create the layout file that represents \r
-# doxygen's defaults, run doxygen with the -l option. You can optionally specify a \r
-# file name after the option, if omitted DoxygenLayout.xml will be used as the name \r
-# of the layout file.\r
-\r
-LAYOUT_FILE            = \r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to warning and progress messages\r
-#---------------------------------------------------------------------------\r
-\r
-# The QUIET tag can be used to turn on/off the messages that are generated \r
-# by doxygen. Possible values are YES and NO. If left blank NO is used.\r
-\r
-QUIET                  = YES\r
-\r
-# The WARNINGS tag can be used to turn on/off the warning messages that are \r
-# generated by doxygen. Possible values are YES and NO. If left blank \r
-# NO is used.\r
-\r
-WARNINGS               = YES\r
-\r
-# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings \r
-# for undocumented members. If EXTRACT_ALL is set to YES then this flag will \r
-# automatically be disabled.\r
-\r
-WARN_IF_UNDOCUMENTED   = YES\r
-\r
-# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for \r
-# potential errors in the documentation, such as not documenting some \r
-# parameters in a documented function, or documenting parameters that \r
-# don't exist or using markup commands wrongly.\r
-\r
-WARN_IF_DOC_ERROR      = YES\r
-\r
-# This WARN_NO_PARAMDOC option can be abled to get warnings for \r
-# functions that are documented, but have no documentation for their parameters \r
-# or return value. If set to NO (the default) doxygen will only warn about \r
-# wrong or incomplete parameter documentation, but not about the absence of \r
-# documentation.\r
-\r
-WARN_NO_PARAMDOC       = YES\r
-\r
-# The WARN_FORMAT tag determines the format of the warning messages that \r
-# doxygen can produce. The string should contain the $file, $line, and $text \r
-# tags, which will be replaced by the file and line number from which the \r
-# warning originated and the warning text. Optionally the format may contain \r
-# $version, which will be replaced by the version of the file (if it could \r
-# be obtained via FILE_VERSION_FILTER)\r
-\r
-WARN_FORMAT            = "$file:$line: $text"\r
-\r
-# The WARN_LOGFILE tag can be used to specify a file to which warning \r
-# and error messages should be written. If left blank the output is written \r
-# to stderr.\r
-\r
-WARN_LOGFILE           = \r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the input files\r
-#---------------------------------------------------------------------------\r
-\r
-# The INPUT tag can be used to specify the files and/or directories that contain \r
-# documented source files. You may enter file names like "myfile.cpp" or \r
-# directories like "/usr/src/myproject". Separate the files or directories \r
-# with spaces.\r
-\r
-INPUT                  = ./\r
-\r
-# This tag can be used to specify the character encoding of the source files \r
-# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is \r
-# also the default input encoding. Doxygen uses libiconv (or the iconv built \r
-# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for \r
-# the list of possible encodings.\r
-\r
-INPUT_ENCODING         = UTF-8\r
-\r
-# If the value of the INPUT tag contains directories, you can use the \r
-# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \r
-# and *.h) to filter out the source-files in the directories. If left \r
-# blank the following patterns are tested: \r
-# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx \r
-# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90\r
-\r
-FILE_PATTERNS          = *.h \\r
-                         *.c \\r
-                                                *.txt\r
-\r
-# The RECURSIVE tag can be used to turn specify whether or not subdirectories \r
-# should be searched for input files as well. Possible values are YES and NO. \r
-# If left blank NO is used.\r
-\r
-RECURSIVE              = YES\r
-\r
-# The EXCLUDE tag can be used to specify files and/or directories that should \r
-# excluded from the INPUT source files. This way you can easily exclude a \r
-# subdirectory from a directory tree whose root is specified with the INPUT tag.\r
-\r
-EXCLUDE                = \r
-\r
-# The EXCLUDE_SYMLINKS tag can be used select whether or not files or \r
-# directories that are symbolic links (a Unix filesystem feature) are excluded \r
-# from the input.\r
-\r
-EXCLUDE_SYMLINKS       = NO\r
-\r
-# If the value of the INPUT tag contains directories, you can use the \r
-# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude \r
-# certain files from those directories. Note that the wildcards are matched \r
-# against the file with absolute path, so to exclude all test directories \r
-# for example use the pattern */test/*\r
-\r
-EXCLUDE_PATTERNS       = */LowLevel/USBMode.h\r
-\r
-# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names \r
-# (namespaces, classes, functions, etc.) that should be excluded from the \r
-# output. The symbol name can be a fully qualified name, a word, or if the \r
-# wildcard * is used, a substring. Examples: ANamespace, AClass, \r
-# AClass::ANamespace, ANamespace::*Test\r
-\r
-EXCLUDE_SYMBOLS        = __*\r
-\r
-# The EXAMPLE_PATH tag can be used to specify one or more files or \r
-# directories that contain example code fragments that are included (see \r
-# the \include command).\r
-\r
-EXAMPLE_PATH           = \r
-\r
-# If the value of the EXAMPLE_PATH tag contains directories, you can use the \r
-# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \r
-# and *.h) to filter out the source-files in the directories. If left \r
-# blank all files are included.\r
-\r
-EXAMPLE_PATTERNS       = *\r
-\r
-# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be \r
-# searched for input files to be used with the \include or \dontinclude \r
-# commands irrespective of the value of the RECURSIVE tag. \r
-# Possible values are YES and NO. If left blank NO is used.\r
-\r
-EXAMPLE_RECURSIVE      = NO\r
-\r
-# The IMAGE_PATH tag can be used to specify one or more files or \r
-# directories that contain image that are included in the documentation (see \r
-# the \image command).\r
-\r
-IMAGE_PATH             = \r
-\r
-# The INPUT_FILTER tag can be used to specify a program that doxygen should \r
-# invoke to filter for each input file. Doxygen will invoke the filter program \r
-# by executing (via popen()) the command <filter> <input-file>, where <filter> \r
-# is the value of the INPUT_FILTER tag, and <input-file> is the name of an \r
-# input file. Doxygen will then use the output that the filter program writes \r
-# to standard output.  If FILTER_PATTERNS is specified, this tag will be \r
-# ignored.\r
-\r
-INPUT_FILTER           = \r
-\r
-# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern \r
-# basis.  Doxygen will compare the file name with each pattern and apply the \r
-# filter if there is a match.  The filters are a list of the form: \r
-# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further \r
-# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER \r
-# is applied to all files.\r
-\r
-FILTER_PATTERNS        = \r
-\r
-# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using \r
-# INPUT_FILTER) will be used to filter the input files when producing source \r
-# files to browse (i.e. when SOURCE_BROWSER is set to YES).\r
-\r
-FILTER_SOURCE_FILES    = NO\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to source browsing\r
-#---------------------------------------------------------------------------\r
-\r
-# If the SOURCE_BROWSER tag is set to YES then a list of source files will \r
-# be generated. Documented entities will be cross-referenced with these sources. \r
-# Note: To get rid of all source code in the generated output, make sure also \r
-# VERBATIM_HEADERS is set to NO.\r
-\r
-SOURCE_BROWSER         = NO\r
-\r
-# Setting the INLINE_SOURCES tag to YES will include the body \r
-# of functions and classes directly in the documentation.\r
-\r
-INLINE_SOURCES         = NO\r
-\r
-# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct \r
-# doxygen to hide any special comment blocks from generated source code \r
-# fragments. Normal C and C++ comments will always remain visible.\r
-\r
-STRIP_CODE_COMMENTS    = YES\r
-\r
-# If the REFERENCED_BY_RELATION tag is set to YES \r
-# then for each documented function all documented \r
-# functions referencing it will be listed.\r
-\r
-REFERENCED_BY_RELATION = NO\r
-\r
-# If the REFERENCES_RELATION tag is set to YES \r
-# then for each documented function all documented entities \r
-# called/used by that function will be listed.\r
-\r
-REFERENCES_RELATION    = NO\r
-\r
-# If the REFERENCES_LINK_SOURCE tag is set to YES (the default)\r
-# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from\r
-# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will\r
-# link to the source code.  Otherwise they will link to the documentstion.\r
-\r
-REFERENCES_LINK_SOURCE = NO\r
-\r
-# If the USE_HTAGS tag is set to YES then the references to source code \r
-# will point to the HTML generated by the htags(1) tool instead of doxygen \r
-# built-in source browser. The htags tool is part of GNU's global source \r
-# tagging system (see http://www.gnu.org/software/global/global.html). You \r
-# will need version 4.8.6 or higher.\r
-\r
-USE_HTAGS              = NO\r
-\r
-# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen \r
-# will generate a verbatim copy of the header file for each class for \r
-# which an include is specified. Set to NO to disable this.\r
-\r
-VERBATIM_HEADERS       = NO\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the alphabetical class index\r
-#---------------------------------------------------------------------------\r
-\r
-# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index \r
-# of all compounds will be generated. Enable this if the project \r
-# contains a lot of classes, structs, unions or interfaces.\r
-\r
-ALPHABETICAL_INDEX     = YES\r
-\r
-# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then \r
-# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns \r
-# in which this list will be split (can be a number in the range [1..20])\r
-\r
-COLS_IN_ALPHA_INDEX    = 5\r
-\r
-# In case all classes in a project start with a common prefix, all \r
-# classes will be put under the same header in the alphabetical index. \r
-# The IGNORE_PREFIX tag can be used to specify one or more prefixes that \r
-# should be ignored while generating the index headers.\r
-\r
-IGNORE_PREFIX          = \r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the HTML output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_HTML tag is set to YES (the default) Doxygen will \r
-# generate HTML output.\r
-\r
-GENERATE_HTML          = YES\r
-\r
-# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. \r
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
-# put in front of it. If left blank `html' will be used as the default path.\r
-\r
-HTML_OUTPUT            = html\r
-\r
-# The HTML_FILE_EXTENSION tag can be used to specify the file extension for \r
-# each generated HTML page (for example: .htm,.php,.asp). If it is left blank \r
-# doxygen will generate files with .html extension.\r
-\r
-HTML_FILE_EXTENSION    = .html\r
-\r
-# The HTML_HEADER tag can be used to specify a personal HTML header for \r
-# each generated HTML page. If it is left blank doxygen will generate a \r
-# standard header.\r
-\r
-HTML_HEADER            = \r
-\r
-# The HTML_FOOTER tag can be used to specify a personal HTML footer for \r
-# each generated HTML page. If it is left blank doxygen will generate a \r
-# standard footer.\r
-\r
-HTML_FOOTER            = \r
-\r
-# The HTML_STYLESHEET tag can be used to specify a user-defined cascading \r
-# style sheet that is used by each HTML page. It can be used to \r
-# fine-tune the look of the HTML output. If the tag is left blank doxygen \r
-# will generate a default style sheet. Note that doxygen will try to copy \r
-# the style sheet file to the HTML output directory, so don't put your own \r
-# stylesheet in the HTML output directory as well, or it will be erased!\r
-\r
-HTML_STYLESHEET        = \r
-\r
-# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, \r
-# files or namespaces will be aligned in HTML using tables. If set to \r
-# NO a bullet list will be used.\r
-\r
-HTML_ALIGN_MEMBERS     = YES\r
-\r
-# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML \r
-# documentation will contain sections that can be hidden and shown after the \r
-# page has loaded. For this to work a browser that supports \r
-# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox \r
-# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari).\r
-\r
-HTML_DYNAMIC_SECTIONS  = YES\r
-\r
-# If the GENERATE_DOCSET tag is set to YES, additional index files \r
-# will be generated that can be used as input for Apple's Xcode 3 \r
-# integrated development environment, introduced with OSX 10.5 (Leopard). \r
-# To create a documentation set, doxygen will generate a Makefile in the \r
-# HTML output directory. Running make will produce the docset in that \r
-# directory and running "make install" will install the docset in \r
-# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find \r
-# it at startup. \r
-# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information.\r
-\r
-GENERATE_DOCSET        = NO\r
-\r
-# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the \r
-# feed. A documentation feed provides an umbrella under which multiple \r
-# documentation sets from a single provider (such as a company or product suite) \r
-# can be grouped.\r
-\r
-DOCSET_FEEDNAME        = "Doxygen generated docs"\r
-\r
-# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that \r
-# should uniquely identify the documentation set bundle. This should be a \r
-# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen \r
-# will append .docset to the name.\r
-\r
-DOCSET_BUNDLE_ID       = org.doxygen.Project\r
-\r
-# If the GENERATE_HTMLHELP tag is set to YES, additional index files \r
-# will be generated that can be used as input for tools like the \r
-# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) \r
-# of the generated HTML documentation.\r
-\r
-GENERATE_HTMLHELP      = NO\r
-\r
-# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can \r
-# be used to specify the file name of the resulting .chm file. You \r
-# can add a path in front of the file if the result should not be \r
-# written to the html output directory.\r
-\r
-CHM_FILE               = \r
-\r
-# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can \r
-# be used to specify the location (absolute path including file name) of \r
-# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run \r
-# the HTML help compiler on the generated index.hhp.\r
-\r
-HHC_LOCATION           = \r
-\r
-# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag \r
-# controls if a separate .chi index file is generated (YES) or that \r
-# it should be included in the master .chm file (NO).\r
-\r
-GENERATE_CHI           = NO\r
-\r
-# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING\r
-# is used to encode HtmlHelp index (hhk), content (hhc) and project file\r
-# content.\r
-\r
-CHM_INDEX_ENCODING     = \r
-\r
-# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag \r
-# controls whether a binary table of contents is generated (YES) or a \r
-# normal table of contents (NO) in the .chm file.\r
-\r
-BINARY_TOC             = NO\r
-\r
-# The TOC_EXPAND flag can be set to YES to add extra items for group members \r
-# to the contents of the HTML help documentation and to the tree view.\r
-\r
-TOC_EXPAND             = YES\r
-\r
-# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER \r
-# are set, an additional index file will be generated that can be used as input for \r
-# Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated \r
-# HTML documentation.\r
-\r
-GENERATE_QHP           = NO\r
-\r
-# If the QHG_LOCATION tag is specified, the QCH_FILE tag can \r
-# be used to specify the file name of the resulting .qch file. \r
-# The path specified is relative to the HTML output folder.\r
-\r
-QCH_FILE               = \r
-\r
-# The QHP_NAMESPACE tag specifies the namespace to use when generating \r
-# Qt Help Project output. For more information please see \r
-# <a href="http://doc.trolltech.com/qthelpproject.html#namespace">Qt Help Project / Namespace</a>.\r
-\r
-QHP_NAMESPACE          = org.doxygen.Project\r
-\r
-# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating \r
-# Qt Help Project output. For more information please see \r
-# <a href="http://doc.trolltech.com/qthelpproject.html#virtual-folders">Qt Help Project / Virtual Folders</a>.\r
-\r
-QHP_VIRTUAL_FOLDER     = doc\r
-\r
-# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can \r
-# be used to specify the location of Qt's qhelpgenerator. \r
-# If non-empty doxygen will try to run qhelpgenerator on the generated \r
-# .qhp file .\r
-\r
-QHG_LOCATION           = \r
-\r
-# The DISABLE_INDEX tag can be used to turn on/off the condensed index at \r
-# top of each HTML page. The value NO (the default) enables the index and \r
-# the value YES disables it.\r
-\r
-DISABLE_INDEX          = NO\r
-\r
-# This tag can be used to set the number of enum values (range [1..20]) \r
-# that doxygen will group on one line in the generated HTML documentation.\r
-\r
-ENUM_VALUES_PER_LINE   = 1\r
-\r
-# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index\r
-# structure should be generated to display hierarchical information.\r
-# If the tag value is set to FRAME, a side panel will be generated\r
-# containing a tree-like index structure (just like the one that \r
-# is generated for HTML Help). For this to work a browser that supports \r
-# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, \r
-# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are \r
-# probably better off using the HTML help feature. Other possible values \r
-# for this tag are: HIERARCHIES, which will generate the Groups, Directories,\r
-# and Class Hierarchy pages using a tree view instead of an ordered list;\r
-# ALL, which combines the behavior of FRAME and HIERARCHIES; and NONE, which\r
-# disables this behavior completely. For backwards compatibility with previous\r
-# releases of Doxygen, the values YES and NO are equivalent to FRAME and NONE\r
-# respectively.\r
-\r
-GENERATE_TREEVIEW      = YES\r
-\r
-# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be \r
-# used to set the initial width (in pixels) of the frame in which the tree \r
-# is shown.\r
-\r
-TREEVIEW_WIDTH         = 250\r
-\r
-# Use this tag to change the font size of Latex formulas included \r
-# as images in the HTML documentation. The default is 10. Note that \r
-# when you change the font size after a successful doxygen run you need \r
-# to manually remove any form_*.png images from the HTML output directory \r
-# to force them to be regenerated.\r
-\r
-FORMULA_FONTSIZE       = 10\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the LaTeX output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will \r
-# generate Latex output.\r
-\r
-GENERATE_LATEX         = NO\r
-\r
-# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. \r
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
-# put in front of it. If left blank `latex' will be used as the default path.\r
-\r
-LATEX_OUTPUT           = latex\r
-\r
-# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be \r
-# invoked. If left blank `latex' will be used as the default command name.\r
-\r
-LATEX_CMD_NAME         = latex\r
-\r
-# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to \r
-# generate index for LaTeX. If left blank `makeindex' will be used as the \r
-# default command name.\r
-\r
-MAKEINDEX_CMD_NAME     = makeindex\r
-\r
-# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact \r
-# LaTeX documents. This may be useful for small projects and may help to \r
-# save some trees in general.\r
-\r
-COMPACT_LATEX          = NO\r
-\r
-# The PAPER_TYPE tag can be used to set the paper type that is used \r
-# by the printer. Possible values are: a4, a4wide, letter, legal and \r
-# executive. If left blank a4wide will be used.\r
-\r
-PAPER_TYPE             = a4wide\r
-\r
-# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX \r
-# packages that should be included in the LaTeX output.\r
-\r
-EXTRA_PACKAGES         = \r
-\r
-# The LATEX_HEADER tag can be used to specify a personal LaTeX header for \r
-# the generated latex document. The header should contain everything until \r
-# the first chapter. If it is left blank doxygen will generate a \r
-# standard header. Notice: only use this tag if you know what you are doing!\r
-\r
-LATEX_HEADER           = \r
-\r
-# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated \r
-# is prepared for conversion to pdf (using ps2pdf). The pdf file will \r
-# contain links (just like the HTML output) instead of page references \r
-# This makes the output suitable for online browsing using a pdf viewer.\r
-\r
-PDF_HYPERLINKS         = YES\r
-\r
-# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of \r
-# plain latex in the generated Makefile. Set this option to YES to get a \r
-# higher quality PDF documentation.\r
-\r
-USE_PDFLATEX           = YES\r
-\r
-# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. \r
-# command to the generated LaTeX files. This will instruct LaTeX to keep \r
-# running if errors occur, instead of asking the user for help. \r
-# This option is also used when generating formulas in HTML.\r
-\r
-LATEX_BATCHMODE        = NO\r
-\r
-# If LATEX_HIDE_INDICES is set to YES then doxygen will not \r
-# include the index chapters (such as File Index, Compound Index, etc.) \r
-# in the output.\r
-\r
-LATEX_HIDE_INDICES     = NO\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the RTF output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output \r
-# The RTF output is optimized for Word 97 and may not look very pretty with \r
-# other RTF readers or editors.\r
-\r
-GENERATE_RTF           = NO\r
-\r
-# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. \r
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
-# put in front of it. If left blank `rtf' will be used as the default path.\r
-\r
-RTF_OUTPUT             = rtf\r
-\r
-# If the COMPACT_RTF tag is set to YES Doxygen generates more compact \r
-# RTF documents. This may be useful for small projects and may help to \r
-# save some trees in general.\r
-\r
-COMPACT_RTF            = NO\r
-\r
-# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated \r
-# will contain hyperlink fields. The RTF file will \r
-# contain links (just like the HTML output) instead of page references. \r
-# This makes the output suitable for online browsing using WORD or other \r
-# programs which support those fields. \r
-# Note: wordpad (write) and others do not support links.\r
-\r
-RTF_HYPERLINKS         = NO\r
-\r
-# Load stylesheet definitions from file. Syntax is similar to doxygen's \r
-# config file, i.e. a series of assignments. You only have to provide \r
-# replacements, missing definitions are set to their default value.\r
-\r
-RTF_STYLESHEET_FILE    = \r
-\r
-# Set optional variables used in the generation of an rtf document. \r
-# Syntax is similar to doxygen's config file.\r
-\r
-RTF_EXTENSIONS_FILE    = \r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the man page output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_MAN tag is set to YES (the default) Doxygen will \r
-# generate man pages\r
-\r
-GENERATE_MAN           = NO\r
-\r
-# The MAN_OUTPUT tag is used to specify where the man pages will be put. \r
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
-# put in front of it. If left blank `man' will be used as the default path.\r
-\r
-MAN_OUTPUT             = man\r
-\r
-# The MAN_EXTENSION tag determines the extension that is added to \r
-# the generated man pages (default is the subroutine's section .3)\r
-\r
-MAN_EXTENSION          = .3\r
-\r
-# If the MAN_LINKS tag is set to YES and Doxygen generates man output, \r
-# then it will generate one additional man file for each entity \r
-# documented in the real man page(s). These additional files \r
-# only source the real man page, but without them the man command \r
-# would be unable to find the correct page. The default is NO.\r
-\r
-MAN_LINKS              = NO\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the XML output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_XML tag is set to YES Doxygen will \r
-# generate an XML file that captures the structure of \r
-# the code including all documentation.\r
-\r
-GENERATE_XML           = NO\r
-\r
-# The XML_OUTPUT tag is used to specify where the XML pages will be put. \r
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
-# put in front of it. If left blank `xml' will be used as the default path.\r
-\r
-XML_OUTPUT             = xml\r
-\r
-# The XML_SCHEMA tag can be used to specify an XML schema, \r
-# which can be used by a validating XML parser to check the \r
-# syntax of the XML files.\r
-\r
-XML_SCHEMA             = \r
-\r
-# The XML_DTD tag can be used to specify an XML DTD, \r
-# which can be used by a validating XML parser to check the \r
-# syntax of the XML files.\r
-\r
-XML_DTD                = \r
-\r
-# If the XML_PROGRAMLISTING tag is set to YES Doxygen will \r
-# dump the program listings (including syntax highlighting \r
-# and cross-referencing information) to the XML output. Note that \r
-# enabling this will significantly increase the size of the XML output.\r
-\r
-XML_PROGRAMLISTING     = YES\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options for the AutoGen Definitions output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will \r
-# generate an AutoGen Definitions (see autogen.sf.net) file \r
-# that captures the structure of the code including all \r
-# documentation. Note that this feature is still experimental \r
-# and incomplete at the moment.\r
-\r
-GENERATE_AUTOGEN_DEF   = NO\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the Perl module output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_PERLMOD tag is set to YES Doxygen will \r
-# generate a Perl module file that captures the structure of \r
-# the code including all documentation. Note that this \r
-# feature is still experimental and incomplete at the \r
-# moment.\r
-\r
-GENERATE_PERLMOD       = NO\r
-\r
-# If the PERLMOD_LATEX tag is set to YES Doxygen will generate \r
-# the necessary Makefile rules, Perl scripts and LaTeX code to be able \r
-# to generate PDF and DVI output from the Perl module output.\r
-\r
-PERLMOD_LATEX          = NO\r
-\r
-# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be \r
-# nicely formatted so it can be parsed by a human reader.  This is useful \r
-# if you want to understand what is going on.  On the other hand, if this \r
-# tag is set to NO the size of the Perl module output will be much smaller \r
-# and Perl will parse it just the same.\r
-\r
-PERLMOD_PRETTY         = YES\r
-\r
-# The names of the make variables in the generated doxyrules.make file \r
-# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. \r
-# This is useful so different doxyrules.make files included by the same \r
-# Makefile don't overwrite each other's variables.\r
-\r
-PERLMOD_MAKEVAR_PREFIX = \r
-\r
-#---------------------------------------------------------------------------\r
-# Configuration options related to the preprocessor   \r
-#---------------------------------------------------------------------------\r
-\r
-# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will \r
-# evaluate all C-preprocessor directives found in the sources and include \r
-# files.\r
-\r
-ENABLE_PREPROCESSING   = YES\r
-\r
-# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro \r
-# names in the source code. If set to NO (the default) only conditional \r
-# compilation will be performed. Macro expansion can be done in a controlled \r
-# way by setting EXPAND_ONLY_PREDEF to YES.\r
-\r
-MACRO_EXPANSION        = YES\r
-\r
-# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES \r
-# then the macro expansion is limited to the macros specified with the \r
-# PREDEFINED and EXPAND_AS_DEFINED tags.\r
-\r
-EXPAND_ONLY_PREDEF     = YES\r
-\r
-# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files \r
-# in the INCLUDE_PATH (see below) will be search if a #include is found.\r
-\r
-SEARCH_INCLUDES        = YES\r
-\r
-# The INCLUDE_PATH tag can be used to specify one or more directories that \r
-# contain include files that are not input files but should be processed by \r
-# the preprocessor.\r
-\r
-INCLUDE_PATH           = \r
-\r
-# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard \r
-# patterns (like *.h and *.hpp) to filter out the header-files in the \r
-# directories. If left blank, the patterns specified with FILE_PATTERNS will \r
-# be used.\r
-\r
-INCLUDE_FILE_PATTERNS  = \r
-\r
-# The PREDEFINED tag can be used to specify one or more macro names that \r
-# are defined before the preprocessor is started (similar to the -D option of \r
-# gcc). The argument of the tag is a list of macros of the form: name \r
-# or name=definition (no spaces). If the definition and the = are \r
-# omitted =1 is assumed. To prevent a macro definition from being \r
-# undefined via #undef or recursively expanded use the := operator \r
-# instead of the = operator.\r
-\r
-PREDEFINED             = __DOXYGEN__\r
-\r
-# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then \r
-# this tag can be used to specify a list of macro names that should be expanded. \r
-# The macro definition that is found in the sources will be used. \r
-# Use the PREDEFINED tag if you want to use a different macro definition.\r
-\r
-EXPAND_AS_DEFINED      = BUTTLOADTAG\r
-\r
-# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then \r
-# doxygen's preprocessor will remove all function-like macros that are alone \r
-# on a line, have an all uppercase name, and do not end with a semicolon. Such \r
-# function macros are typically used for boiler-plate code, and will confuse \r
-# the parser if not removed.\r
-\r
-SKIP_FUNCTION_MACROS   = YES\r
-\r
-#---------------------------------------------------------------------------\r
-# Configuration::additions related to external references   \r
-#---------------------------------------------------------------------------\r
-\r
-# The TAGFILES option can be used to specify one or more tagfiles. \r
-# Optionally an initial location of the external documentation \r
-# can be added for each tagfile. The format of a tag file without \r
-# this location is as follows: \r
-#   TAGFILES = file1 file2 ... \r
-# Adding location for the tag files is done as follows: \r
-#   TAGFILES = file1=loc1 "file2 = loc2" ... \r
-# where "loc1" and "loc2" can be relative or absolute paths or \r
-# URLs. If a location is present for each tag, the installdox tool \r
-# does not have to be run to correct the links.\r
-# Note that each tag file must have a unique name\r
-# (where the name does NOT include the path)\r
-# If a tag file is not located in the directory in which doxygen \r
-# is run, you must also specify the path to the tagfile here.\r
-\r
-TAGFILES               = \r
-\r
-# When a file name is specified after GENERATE_TAGFILE, doxygen will create \r
-# a tag file that is based on the input files it reads.\r
-\r
-GENERATE_TAGFILE       = \r
-\r
-# If the ALLEXTERNALS tag is set to YES all external classes will be listed \r
-# in the class index. If set to NO only the inherited external classes \r
-# will be listed.\r
-\r
-ALLEXTERNALS           = NO\r
-\r
-# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed \r
-# in the modules index. If set to NO, only the current project's groups will \r
-# be listed.\r
-\r
-EXTERNAL_GROUPS        = YES\r
-\r
-# The PERL_PATH should be the absolute path and name of the perl script \r
-# interpreter (i.e. the result of `which perl').\r
-\r
-PERL_PATH              = /usr/bin/perl\r
-\r
-#---------------------------------------------------------------------------\r
-# Configuration options related to the dot tool   \r
-#---------------------------------------------------------------------------\r
-\r
-# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will \r
-# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base \r
-# or super classes. Setting the tag to NO turns the diagrams off. Note that \r
-# this option is superseded by the HAVE_DOT option below. This is only a \r
-# fallback. It is recommended to install and use dot, since it yields more \r
-# powerful graphs.\r
-\r
-CLASS_DIAGRAMS         = NO\r
-\r
-# You can define message sequence charts within doxygen comments using the \msc \r
-# command. Doxygen will then run the mscgen tool (see \r
-# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the \r
-# documentation. The MSCGEN_PATH tag allows you to specify the directory where \r
-# the mscgen tool resides. If left empty the tool is assumed to be found in the \r
-# default search path.\r
-\r
-MSCGEN_PATH            = \r
-\r
-# If set to YES, the inheritance and collaboration graphs will hide \r
-# inheritance and usage relations if the target is undocumented \r
-# or is not a class.\r
-\r
-HIDE_UNDOC_RELATIONS   = YES\r
-\r
-# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is \r
-# available from the path. This tool is part of Graphviz, a graph visualization \r
-# toolkit from AT&T and Lucent Bell Labs. The other options in this section \r
-# have no effect if this option is set to NO (the default)\r
-\r
-HAVE_DOT               = NO\r
-\r
-# By default doxygen will write a font called FreeSans.ttf to the output \r
-# directory and reference it in all dot files that doxygen generates. This \r
-# font does not include all possible unicode characters however, so when you need \r
-# these (or just want a differently looking font) you can specify the font name \r
-# using DOT_FONTNAME. You need need to make sure dot is able to find the font, \r
-# which can be done by putting it in a standard location or by setting the \r
-# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory \r
-# containing the font.\r
-\r
-DOT_FONTNAME           = FreeSans\r
-\r
-# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. \r
-# The default size is 10pt.\r
-\r
-DOT_FONTSIZE           = 10\r
-\r
-# By default doxygen will tell dot to use the output directory to look for the \r
-# FreeSans.ttf font (which doxygen will put there itself). If you specify a \r
-# different font using DOT_FONTNAME you can set the path where dot \r
-# can find it using this tag.\r
-\r
-DOT_FONTPATH           = \r
-\r
-# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen \r
-# will generate a graph for each documented class showing the direct and \r
-# indirect inheritance relations. Setting this tag to YES will force the \r
-# the CLASS_DIAGRAMS tag to NO.\r
-\r
-CLASS_GRAPH            = NO\r
-\r
-# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen \r
-# will generate a graph for each documented class showing the direct and \r
-# indirect implementation dependencies (inheritance, containment, and \r
-# class references variables) of the class with other documented classes.\r
-\r
-COLLABORATION_GRAPH    = NO\r
-\r
-# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen \r
-# will generate a graph for groups, showing the direct groups dependencies\r
-\r
-GROUP_GRAPHS           = NO\r
-\r
-# If the UML_LOOK tag is set to YES doxygen will generate inheritance and \r
-# collaboration diagrams in a style similar to the OMG's Unified Modeling \r
-# Language.\r
-\r
-UML_LOOK               = NO\r
-\r
-# If set to YES, the inheritance and collaboration graphs will show the \r
-# relations between templates and their instances.\r
-\r
-TEMPLATE_RELATIONS     = NO\r
-\r
-# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT \r
-# tags are set to YES then doxygen will generate a graph for each documented \r
-# file showing the direct and indirect include dependencies of the file with \r
-# other documented files.\r
-\r
-INCLUDE_GRAPH          = NO\r
-\r
-# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and \r
-# HAVE_DOT tags are set to YES then doxygen will generate a graph for each \r
-# documented header file showing the documented files that directly or \r
-# indirectly include this file.\r
-\r
-INCLUDED_BY_GRAPH      = NO\r
-\r
-# If the CALL_GRAPH and HAVE_DOT options are set to YES then \r
-# doxygen will generate a call dependency graph for every global function \r
-# or class method. Note that enabling this option will significantly increase \r
-# the time of a run. So in most cases it will be better to enable call graphs \r
-# for selected functions only using the \callgraph command.\r
-\r
-CALL_GRAPH             = NO\r
-\r
-# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then \r
-# doxygen will generate a caller dependency graph for every global function \r
-# or class method. Note that enabling this option will significantly increase \r
-# the time of a run. So in most cases it will be better to enable caller \r
-# graphs for selected functions only using the \callergraph command.\r
-\r
-CALLER_GRAPH           = NO\r
-\r
-# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen \r
-# will graphical hierarchy of all classes instead of a textual one.\r
-\r
-GRAPHICAL_HIERARCHY    = NO\r
-\r
-# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES \r
-# then doxygen will show the dependencies a directory has on other directories \r
-# in a graphical way. The dependency relations are determined by the #include\r
-# relations between the files in the directories.\r
-\r
-DIRECTORY_GRAPH        = NO\r
-\r
-# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images \r
-# generated by dot. Possible values are png, jpg, or gif\r
-# If left blank png will be used.\r
-\r
-DOT_IMAGE_FORMAT       = png\r
-\r
-# The tag DOT_PATH can be used to specify the path where the dot tool can be \r
-# found. If left blank, it is assumed the dot tool can be found in the path.\r
-\r
-DOT_PATH               = "C:/Program Files/Graphviz2.18/bin"\r
-\r
-# The DOTFILE_DIRS tag can be used to specify one or more directories that \r
-# contain dot files that are included in the documentation (see the \r
-# \dotfile command).\r
-\r
-DOTFILE_DIRS           = \r
-\r
-# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of \r
-# nodes that will be shown in the graph. If the number of nodes in a graph \r
-# becomes larger than this value, doxygen will truncate the graph, which is \r
-# visualized by representing a node as a red box. Note that doxygen if the \r
-# number of direct children of the root node in a graph is already larger than \r
-# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note \r
-# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.\r
-\r
-DOT_GRAPH_MAX_NODES    = 15\r
-\r
-# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the \r
-# graphs generated by dot. A depth value of 3 means that only nodes reachable \r
-# from the root by following a path via at most 3 edges will be shown. Nodes \r
-# that lay further from the root node will be omitted. Note that setting this \r
-# option to 1 or 2 may greatly reduce the computation time needed for large \r
-# code bases. Also note that the size of a graph can be further restricted by \r
-# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.\r
-\r
-MAX_DOT_GRAPH_DEPTH    = 2\r
-\r
-# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent \r
-# background. This is disabled by default, because dot on Windows does not \r
-# seem to support this out of the box. Warning: Depending on the platform used, \r
-# enabling this option may lead to badly anti-aliased labels on the edges of \r
-# a graph (i.e. they become hard to read).\r
-\r
-DOT_TRANSPARENT        = YES\r
-\r
-# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output \r
-# files in one run (i.e. multiple -o and -T options on the command line). This \r
-# makes dot run faster, but since only newer versions of dot (>1.8.10) \r
-# support this, this feature is disabled by default.\r
-\r
-DOT_MULTI_TARGETS      = NO\r
-\r
-# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will \r
-# generate a legend page explaining the meaning of the various boxes and \r
-# arrows in the dot generated graphs.\r
-\r
-GENERATE_LEGEND        = YES\r
-\r
-# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will \r
-# remove the intermediate dot files that are used to generate \r
-# the various graphs.\r
-\r
-DOT_CLEANUP            = YES\r
-\r
-#---------------------------------------------------------------------------\r
-# Configuration::additions related to the search engine   \r
-#---------------------------------------------------------------------------\r
-\r
-# The SEARCHENGINE tag specifies whether or not a search engine should be \r
-# used. If set to NO the values of all tags below this one will be ignored.\r
-\r
-SEARCHENGINE           = NO\r
diff --git a/Demos/Device/KeyboardMouse/KeyboardMouse.aps b/Demos/Device/KeyboardMouse/KeyboardMouse.aps
deleted file mode 100644 (file)
index eb54f1d..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<AVRStudio><MANAGEMENT><ProjectName>KeyboardMouse</ProjectName><Created>30-Sep-2008 14:11:00</Created><LastEdit>30-Sep-2008 14:11:17</LastEdit><ICON>241</ICON><ProjectType>0</ProjectType><Created>30-Sep-2008 14:11:00</Created><Version>4</Version><Build>4, 14, 0, 589</Build><ProjectTypeName>AVR GCC</ProjectTypeName></MANAGEMENT><CODE_CREATION><ObjectFile></ObjectFile><EntryFile></EntryFile><SaveFolder>C:\Users\Dean\Documents\Electronics\Projects\WORK\MyUSBWORK\Demos\KeyboardMouse\</SaveFolder></CODE_CREATION><DEBUG_TARGET><CURRENT_TARGET>JTAGICE mkII</CURRENT_TARGET><CURRENT_PART>AT90USB1287.xml</CURRENT_PART><BREAKPOINTS></BREAKPOINTS><IO_EXPAND><HIDE>false</HIDE></IO_EXPAND><REGISTERNAMES><Register>R00</Register><Register>R01</Register><Register>R02</Register><Register>R03</Register><Register>R04</Register><Register>R05</Register><Register>R06</Register><Register>R07</Register><Register>R08</Register><Register>R09</Register><Register>R10</Register><Register>R11</Register><Register>R12</Register><Register>R13</Register><Register>R14</Register><Register>R15</Register><Register>R16</Register><Register>R17</Register><Register>R18</Register><Register>R19</Register><Register>R20</Register><Register>R21</Register><Register>R22</Register><Register>R23</Register><Register>R24</Register><Register>R25</Register><Register>R26</Register><Register>R27</Register><Register>R28</Register><Register>R29</Register><Register>R30</Register><Register>R31</Register></REGISTERNAMES><COM>Auto</COM><COMType>0</COMType><WATCHNUM>0</WATCHNUM><WATCHNAMES><Pane0></Pane0><Pane1></Pane1><Pane2></Pane2><Pane3></Pane3></WATCHNAMES><BreakOnTrcaeFull>0</BreakOnTrcaeFull></DEBUG_TARGET><Debugger><Triggers></Triggers></Debugger><AVRGCCPLUGIN><FILES><SOURCEFILE>Descriptors.c</SOURCEFILE><SOURCEFILE>KeyboardMouse.c</SOURCEFILE><HEADERFILE>Descriptors.h</HEADERFILE><HEADERFILE>KeyboardMouse.h</HEADERFILE><OTHERFILE>makefile</OTHERFILE></FILES><CONFIGS><CONFIG><NAME>default</NAME><USESEXTERNALMAKEFILE>YES</USESEXTERNALMAKEFILE><EXTERNALMAKEFILE>makefile</EXTERNALMAKEFILE><PART>at90usb1287</PART><HEX>1</HEX><LIST>1</LIST><MAP>1</MAP><OUTPUTFILENAME>KeyboardMouse.elf</OUTPUTFILENAME><OUTPUTDIR>default\</OUTPUTDIR><ISDIRTY>1</ISDIRTY><OPTIONS/><INCDIRS/><LIBDIRS/><LIBS/><LINKOBJECTS/><OPTIONSFORALL>-Wall -gdwarf-2 -std=gnu99 -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums</OPTIONSFORALL><LINKEROPTIONS></LINKEROPTIONS><SEGMENTS/></CONFIG></CONFIGS><LASTCONFIG>default</LASTCONFIG><USES_WINAVR>1</USES_WINAVR><GCC_LOC>C:\WinAVR-20080512\bin\avr-gcc.exe</GCC_LOC><MAKE_LOC>C:\WinAVR-20080512\utils\bin\make.exe</MAKE_LOC></AVRGCCPLUGIN><IOView><usergroups/><sort sorted="0" column="0" ordername="0" orderaddress="0" ordergroup="0"/></IOView><Files></Files><Events><Bookmarks></Bookmarks></Events><Trace><Filters></Filters></Trace></AVRStudio>\r
diff --git a/Demos/Device/KeyboardMouse/KeyboardMouse.c b/Demos/Device/KeyboardMouse/KeyboardMouse.c
deleted file mode 100644 (file)
index 5cea555..0000000
+++ /dev/null
@@ -1,237 +0,0 @@
-/*\r
-             LUFA Library\r
-     Copyright (C) Dean Camera, 2009.\r
-              \r
-  dean [at] fourwalledcubicle [dot] com\r
-      www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
-  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-  Copyright 2009  Denver Gingerich (denver [at] ossguy [dot] com)\r
-         \r
-  Permission to use, copy, modify, and distribute this software\r
-  and its documentation for any purpose and without fee is hereby\r
-  granted, provided that the above copyright notice appear in all\r
-  copies and that both that the copyright notice and this\r
-  permission notice and warranty disclaimer appear in supporting\r
-  documentation, and that the name of the author not be used in\r
-  advertising or publicity pertaining to distribution of the\r
-  software without specific, written prior permission.\r
-\r
-  The author disclaim all warranties with regard to this\r
-  software, including all implied warranties of merchantability\r
-  and fitness.  In no event shall the author be liable for any\r
-  special, indirect or consequential damages or any damages\r
-  whatsoever resulting from loss of use, data or profits, whether\r
-  in an action of contract, negligence or other tortious action,\r
-  arising out of or in connection with the use or performance of\r
-  this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- *  Main source file for the KeyboardMouse demo. This file contains the main tasks of\r
- *  the demo and is responsible for the initial application hardware configuration.\r
- */\r
-\r
-#include "KeyboardMouse.h"\r
-\r
-/** LUFA HID Class driver interface configuration and state information. This structure is\r
- *  passed to all HID Class driver functions, so that multiple instances of the same class\r
- *  within a device can be differentiated from one another. This is for the keyboard HID\r
- *  interface within the device.\r
- */\r
-USB_ClassInfo_HID_t Keyboard_HID_Interface =\r
-       {\r
-               .InterfaceNumber         = 0,\r
-\r
-               .ReportINEndpointNumber  = KEYBOARD_IN_EPNUM,\r
-               .ReportINEndpointSize    = HID_EPSIZE,\r
-               \r
-               .ReportINBufferSize      = sizeof(USB_KeyboardReport_Data_t),\r
-\r
-               .IdleCount               = 500,\r
-       };\r
-       \r
-/** LUFA HID Class driver interface configuration and state information. This structure is\r
- *  passed to all HID Class driver functions, so that multiple instances of the same class\r
- *  within a device can be differentiated from one another. This is for the mouse HID\r
- *  interface within the device.\r
- */\r
-USB_ClassInfo_HID_t Mouse_HID_Interface =\r
-       {\r
-               .InterfaceNumber         = 0,\r
-\r
-               .ReportINEndpointNumber  = MOUSE_IN_EPNUM,\r
-               .ReportINEndpointSize    = HID_EPSIZE,\r
-\r
-               .ReportINBufferSize      = sizeof(USB_MouseReport_Data_t),\r
-       };\r
-\r
-/** Main program entry point. This routine contains the overall program flow, including initial\r
- *  setup of all components and the main program loop.\r
- */\r
-int main(void)\r
-{\r
-       SetupHardware();\r
-\r
-       LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);\r
-\r
-       for (;;)\r
-       {\r
-               USB_HID_USBTask(&Keyboard_HID_Interface);\r
-               USB_HID_USBTask(&Mouse_HID_Interface);\r
-               USB_USBTask();\r
-       }\r
-}\r
-\r
-/** Configures the board hardware and chip peripherals for the demo's functionality. */\r
-void SetupHardware()\r
-{\r
-       /* Disable watchdog if enabled by bootloader/fuses */\r
-       MCUSR &= ~(1 << WDRF);\r
-       wdt_disable();\r
-\r
-       /* Disable clock division */\r
-       clock_prescale_set(clock_div_1);\r
-\r
-       /* Hardware Initialization */\r
-       Joystick_Init();\r
-       LEDs_Init();\r
-       USB_Init();\r
-\r
-       /* Millisecond timer initialization, with output compare interrupt enabled for the idle timing */\r
-       OCR0A  = ((F_CPU / 64) / 1000);\r
-       TCCR0A = (1 << WGM01);\r
-       TCCR0B = ((1 << CS01) | (1 << CS00));\r
-       TIMSK0 = (1 << OCIE0A);\r
-}\r
-\r
-/** Event handler for the library USB Connection event. */\r
-void EVENT_USB_Connect(void)\r
-{\r
-    LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING);\r
-}\r
-\r
-/** Event handler for the library USB Disconnection event. */\r
-void EVENT_USB_Disconnect(void)\r
-{\r
-    LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);\r
-}\r
-\r
-/** Event handler for the library USB Configuration Changed event. */\r
-void EVENT_USB_ConfigurationChanged(void)\r
-{\r
-       LEDs_SetAllLEDs(LEDMASK_USB_READY);\r
-\r
-       if (!(USB_HID_ConfigureEndpoints(&Keyboard_HID_Interface)))\r
-         LEDs_SetAllLEDs(LEDMASK_USB_ERROR);\r
-       \r
-       if (!(USB_HID_ConfigureEndpoints(&Mouse_HID_Interface)))\r
-         LEDs_SetAllLEDs(LEDMASK_USB_ERROR);\r
-}\r
-\r
-/** Event handler for the library USB Unhandled Control Packet event. */\r
-void EVENT_USB_UnhandledControlPacket(void)\r
-{\r
-       USB_HID_ProcessControlPacket(&Keyboard_HID_Interface);\r
-       USB_HID_ProcessControlPacket(&Mouse_HID_Interface);\r
-}\r
-\r
-/** ISR to keep track of each millisecond interrupt, for determining the HID class idle period remaining when set. */\r
-ISR(TIMER0_COMPA_vect, ISR_BLOCK)\r
-{\r
-       if (Keyboard_HID_Interface.IdleMSRemaining)\r
-         Keyboard_HID_Interface.IdleMSRemaining--;\r
-\r
-       if (Mouse_HID_Interface.IdleMSRemaining)\r
-         Mouse_HID_Interface.IdleMSRemaining--;\r
-}\r
-\r
-/** HID class driver callback function for the creation of HID reports to the host.\r
- *\r
- *  \param HIDInterfaceInfo  Pointer to the HID class interface configuration structure being referenced\r
- *  \param ReportData  Pointer to a buffer where the created report should be stored\r
- *\r
- *  \return Number of bytes written in the report (or zero if no report is to be sent\r
- */\r
-uint16_t CALLBACK_USB_HID_CreateNextHIDReport(USB_ClassInfo_HID_t* HIDInterfaceInfo, uint8_t* ReportID, void* ReportData)\r
-{\r
-       uint8_t JoyStatus_LCL    = Joystick_GetStatus();\r
-       uint8_t ButtonStatus_LCL = Buttons_GetStatus();\r
-\r
-       if (HIDInterfaceInfo == &Keyboard_HID_Interface)\r
-       {\r
-               USB_KeyboardReport_Data_t* KeyboardReport = (USB_KeyboardReport_Data_t*)ReportData;\r
-               \r
-               /* If first board button not being held down, no keyboard report */\r
-               if (!(ButtonStatus_LCL & BUTTONS_BUTTON1))\r
-                 return 0;\r
-               \r
-               if (JoyStatus_LCL & JOY_UP)\r
-                 KeyboardReport->KeyCode[0] = 0x04; // A\r
-               else if (JoyStatus_LCL & JOY_DOWN)\r
-                 KeyboardReport->KeyCode[0] = 0x05; // B\r
-\r
-               if (JoyStatus_LCL & JOY_LEFT)\r
-                 KeyboardReport->KeyCode[0] = 0x06; // C\r
-               else if (JoyStatus_LCL & JOY_RIGHT)\r
-                 KeyboardReport->KeyCode[0] = 0x07; // D\r
-\r
-               if (JoyStatus_LCL & JOY_PRESS)\r
-                 KeyboardReport->KeyCode[0] = 0x08; // E\r
-                 \r
-               return sizeof(USB_KeyboardReport_Data_t);\r
-       }\r
-       else\r
-       {\r
-               USB_MouseReport_Data_t* MouseReport = (USB_MouseReport_Data_t*)ReportData;\r
-\r
-               /* If first board button being held down, no mouse report */\r
-               if (ButtonStatus_LCL & BUTTONS_BUTTON1)\r
-                 return 0;\r
-                 \r
-               if (JoyStatus_LCL & JOY_UP)\r
-                 MouseReport->Y = -1;\r
-               else if (JoyStatus_LCL & JOY_DOWN)\r
-                 MouseReport->Y =  1;\r
-\r
-               if (JoyStatus_LCL & JOY_RIGHT)\r
-                 MouseReport->X =  1;\r
-               else if (JoyStatus_LCL & JOY_LEFT)\r
-                 MouseReport->X = -1;\r
-\r
-               if (JoyStatus_LCL & JOY_PRESS)\r
-                 MouseReport->Button  = (1 << 0);\r
-               \r
-               return sizeof(USB_MouseReport_Data_t);          \r
-       }\r
-}\r
-\r
-/** HID class driver callback function for the processing of HID reports from the host.\r
- *\r
- *  \param HIDInterfaceInfo  Pointer to the HID class interface configuration structure being referenced\r
- *  \param ReportData  Pointer to a buffer where the created report has been stored\r
- *  \param ReportSize  Size in bytes of the received HID report\r
- */\r
-void CALLBACK_USB_HID_ProcessReceivedHIDReport(USB_ClassInfo_HID_t* HIDInterfaceInfo, uint8_t ReportID,\r
-                                               void* ReportData, uint16_t ReportSize)\r
-{\r
-       if (HIDInterfaceInfo == &Keyboard_HID_Interface)\r
-       {\r
-               uint8_t  LEDMask   = LEDS_NO_LEDS;\r
-               uint8_t* LEDReport = (uint8_t*)ReportData;\r
-\r
-               if (*LEDReport & 0x01) // NUM Lock\r
-                 LEDMask |= LEDS_LED1;\r
-               \r
-               if (*LEDReport & 0x02) // CAPS Lock\r
-                 LEDMask |= LEDS_LED3;\r
-\r
-               if (*LEDReport & 0x04) // SCROLL Lock\r
-                 LEDMask |= LEDS_LED4;\r
-                 \r
-               LEDs_SetAllLEDs(LEDMask);\r
-       }\r
-}
\ No newline at end of file
diff --git a/Demos/Device/KeyboardMouse/KeyboardMouse.h b/Demos/Device/KeyboardMouse/KeyboardMouse.h
deleted file mode 100644 (file)
index 74b1c9e..0000000
+++ /dev/null
@@ -1,97 +0,0 @@
-/*\r
-             LUFA Library\r
-     Copyright (C) Dean Camera, 2009.\r
-              \r
-  dean [at] fourwalledcubicle [dot] com\r
-      www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
-  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-  Copyright 2009  Denver Gingerich (denver [at] ossguy [dot] com)\r
-  \r
-  Permission to use, copy, modify, and distribute this software\r
-  and its documentation for any purpose and without fee is hereby\r
-  granted, provided that the above copyright notice appear in all\r
-  copies and that both that the copyright notice and this\r
-  permission notice and warranty disclaimer appear in supporting\r
-  documentation, and that the name of the author not be used in\r
-  advertising or publicity pertaining to distribution of the\r
-  software without specific, written prior permission.\r
-\r
-  The author disclaim all warranties with regard to this\r
-  software, including all implied warranties of merchantability\r
-  and fitness.  In no event shall the author be liable for any\r
-  special, indirect or consequential damages or any damages\r
-  whatsoever resulting from loss of use, data or profits, whether\r
-  in an action of contract, negligence or other tortious action,\r
-  arising out of or in connection with the use or performance of\r
-  this software.\r
-*/\r
-\r
-#ifndef _KEYBOARD_MOUSE_H_\r
-#define _KEYBOARD_MOUSE_H_\r
-\r
-       /* Includes: */\r
-               #include <avr/io.h>\r
-               #include <avr/wdt.h>\r
-               #include <avr/power.h>\r
-               #include <stdbool.h>\r
-               #include <string.h>\r
-\r
-               #include "Descriptors.h"\r
-\r
-               #include <LUFA/Version.h>\r
-               #include <LUFA/Drivers/Board/Joystick.h>\r
-               #include <LUFA/Drivers/Board/LEDs.h>\r
-               #include <LUFA/Drivers/Board/Buttons.h>\r
-               #include <LUFA/Drivers/USB/USB.h>\r
-               #include <LUFA/Drivers/USB/Class/Device/HID.h>\r
-\r
-       /* Macros: */\r
-               /** LED mask for the library LED driver, to indicate that the USB interface is not ready. */\r
-               #define LEDMASK_USB_NOTREADY      LEDS_LED1\r
-\r
-               /** LED mask for the library LED driver, to indicate that the USB interface is enumerating. */\r
-               #define LEDMASK_USB_ENUMERATING  (LEDS_LED2 | LEDS_LED3)\r
-\r
-               /** LED mask for the library LED driver, to indicate that the USB interface is ready. */\r
-               #define LEDMASK_USB_READY        (LEDS_LED2 | LEDS_LED4)\r
-\r
-               /** LED mask for the library LED driver, to indicate that an error has occurred in the USB interface. */\r
-               #define LEDMASK_USB_ERROR        (LEDS_LED1 | LEDS_LED3)\r
-               \r
-       /* Type Defines: */\r
-               /** Type define for the keyboard HID report structure, for creating and sending HID reports to the host PC.\r
-                *  This mirrors the layout described to the host in the HID report descriptor, in Descriptors.c.\r
-                */\r
-               typedef struct\r
-               {\r
-                       uint8_t Modifier; /**< Modifier mask byte, containing a mask of modifier keys set (such as shift or CTRL) */\r
-                       uint8_t Reserved; /**< Reserved, always set as 0x00 */\r
-                       uint8_t KeyCode[6]; /**< Array of up to six simultaneous key codes of pressed keys */\r
-               } USB_KeyboardReport_Data_t;\r
-\r
-               /** Type define for the mouse HID report structure, for creating and sending HID reports to the host PC.\r
-                *  This mirrors the layout described to the host in the HID report descriptor, in Descriptors.c.\r
-                */\r
-               typedef struct\r
-               {\r
-                       uint8_t Button; /**< Bit mask of the currently pressed mouse buttons */\r
-                       int8_t  X; /**< Current mouse delta X movement, as a signed 8-bit integer */\r
-                       int8_t  Y; /**< Current mouse delta Y movement, as a signed 8-bit integer */\r
-               } USB_MouseReport_Data_t;\r
-                       \r
-       /* Function Prototypes: */\r
-               void SetupHardware(void);\r
-\r
-               void EVENT_USB_Connect(void);\r
-               void EVENT_USB_Disconnect(void);\r
-               void EVENT_USB_ConfigurationChanged(void);\r
-               void EVENT_USB_UnhandledControlPacket(void);\r
-\r
-               uint16_t CALLBACK_USB_HID_CreateNextHIDReport(USB_ClassInfo_HID_t* HIDInterfaceInfo, uint8_t* ReportID, void* ReportData);\r
-               void     CALLBACK_USB_HID_ProcessReceivedHIDReport(USB_ClassInfo_HID_t* HIDInterfaceInfo, uint8_t ReportID, \r
-                                                                  void* ReportData, uint16_t ReportSize);\r
-               \r
-#endif\r
diff --git a/Demos/Device/KeyboardMouse/KeyboardMouse.txt b/Demos/Device/KeyboardMouse/KeyboardMouse.txt
deleted file mode 100644 (file)
index 3e31057..0000000
+++ /dev/null
@@ -1,66 +0,0 @@
-/** \file\r
- *\r
- *  This file contains special DoxyGen information for the generation of the main page and other special\r
- *  documentation pages. It is not a project source file.\r
- */\r
\r
-/** \mainpage Dual HID Keyboard and Mouse Device Demo\r
- *\r
- *  \section SSec_Info USB Information:\r
- *\r
- *  The following table gives a rundown of the USB utilization of this demo.\r
- *\r
- *  <table>\r
- *   <tr>\r
- *    <td><b>USB Mode:</b></td>\r
- *    <td>Device</td>\r
- *   </tr>\r
- *   <tr>\r
- *    <td><b>USB Class:</b></td>\r
- *    <td>Human Interface Device (HID)</td>\r
- *   </tr>\r
- *   <tr> \r
- *    <td><b>USB Subclass:</b></td>\r
- *    <td>N/A</td>\r
- *   </tr>\r
- *   <tr>\r
- *    <td><b>Relevant Standards:</b></td>\r
- *    <td>USBIF HID Specification, USBIF HID Usage Tables</td>\r
- *   </tr>\r
- *   <tr>\r
- *    <td><b>Usable Speeds:</b></td>\r
- *    <td>Low Speed Mode, Full Speed Mode</td>\r
- *   </tr>\r
- *  </table>\r
- *\r
- *  \section SSec_Description Project Description: \r
- *\r
- *  Keyboard/Mouse demonstration application. This gives a simple reference\r
- *  application for implementing a composite device containing both USB Keyboard\r
- *  and USB Mouse functionality using the basic USB HID drivers in all modern OSes\r
- *  (i.e. no special drivers required). This example uses two separate HID\r
- *  interfaces for each function. It is boot protocol compatible, and thus works under\r
- *  compatible BIOS as if it was a native keyboard and mouse (e.g. PS/2).\r
- *  \r
- *  On start-up the system will automatically enumerate and function\r
- *  as a keyboard when the USB connection to a host is present and the HWB is not\r
- *  pressed. When enabled, manipulate the joystick to send the letters\r
- *  a, b, c, d and e. See the USB HID documentation for more information\r
- *  on sending keyboard event and key presses.\r
- *  \r
- *  When the HWB is pressed, the mouse mode is enabled. When enabled, move the\r
- *  joystick to move the pointer, and push the joystick inwards to simulate a\r
- *  left-button click.\r
- *\r
- *  \section SSec_Options Project Options\r
- *\r
- *  The following defines can be found in this demo, which can control the demo behaviour when defined, or changed in value.\r
- *\r
- *  <table>\r
- *   <tr>\r
- *    <td>\r
- *     None\r
- *    </td>\r
- *   </tr>\r
- *  </table>\r
- */\r
diff --git a/Demos/Device/KeyboardMouse/makefile b/Demos/Device/KeyboardMouse/makefile
deleted file mode 100644 (file)
index ddad7d2..0000000
+++ /dev/null
@@ -1,733 +0,0 @@
-# Hey Emacs, this is a -*- makefile -*-\r
-#----------------------------------------------------------------------------\r
-# WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al.\r
-#  >> Modified for use with the LUFA project. <<\r
-#\r
-# Released to the Public Domain\r
-#\r
-# Additional material for this makefile was written by:\r
-# Peter Fleury\r
-# Tim Henigan\r
-# Colin O'Flynn\r
-# Reiner Patommel\r
-# Markus Pfaff\r
-# Sander Pool\r
-# Frederik Rouleau\r
-# Carlos Lamas\r
-# Dean Camera\r
-# Opendous Inc.\r
-# Denver Gingerich\r
-#\r
-#----------------------------------------------------------------------------\r
-# On command line:\r
-#\r
-# make all = Make software.\r
-#\r
-# make clean = Clean out built project files.\r
-#\r
-# make coff = Convert ELF to AVR COFF.\r
-#\r
-# make extcoff = Convert ELF to AVR Extended COFF.\r
-#\r
-# make program = Download the hex file to the device, using avrdude.\r
-#                Please customize the avrdude settings below first!\r
-#\r
-# make dfu = Download the hex file to the device, using dfu-programmer (must\r
-#            have dfu-programmer installed).\r
-#\r
-# make flip = Download the hex file to the device, using Atmel FLIP (must\r
-#             have Atmel FLIP installed).\r
-#\r
-# make dfu-ee = Download the eeprom file to the device, using dfu-programmer\r
-#               (must have dfu-programmer installed).\r
-#\r
-# make flip-ee = Download the eeprom file to the device, using Atmel FLIP\r
-#                (must have Atmel FLIP installed).\r
-#\r
-# make doxygen = Generate DoxyGen documentation for the project (must have\r
-#                DoxyGen installed)\r
-#\r
-# make debug = Start either simulavr or avarice as specified for debugging, \r
-#              with avr-gdb or avr-insight as the front end for debugging.\r
-#\r
-# make filename.s = Just compile filename.c into the assembler code only.\r
-#\r
-# make filename.i = Create a preprocessed source file for use in submitting\r
-#                   bug reports to the GCC project.\r
-#\r
-# To rebuild project do "make clean" then "make all".\r
-#----------------------------------------------------------------------------\r
-\r
-\r
-# MCU name\r
-MCU = at90usb1287\r
-\r
-\r
-# Target board (see library "Board Types" documentation, USER or blank for projects not requiring\r
-# LUFA board drivers). If USER is selected, put custom board drivers in a directory called \r
-# "Board" inside the application directory.\r
-BOARD  = USBKEY\r
-\r
-\r
-# Processor frequency.\r
-#     This will define a symbol, F_CPU, in all source code files equal to the \r
-#     processor frequency. You can then use this symbol in your source code to \r
-#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done\r
-#     automatically to create a 32-bit value in your source code.\r
-#     Typical values are:\r
-#         F_CPU =  1000000\r
-#         F_CPU =  1843200\r
-#         F_CPU =  2000000\r
-#         F_CPU =  3686400\r
-#         F_CPU =  4000000\r
-#         F_CPU =  7372800\r
-#         F_CPU =  8000000\r
-#         F_CPU = 11059200\r
-#         F_CPU = 14745600\r
-#         F_CPU = 16000000\r
-#         F_CPU = 18432000\r
-#         F_CPU = 20000000\r
-F_CPU = 8000000\r
-\r
-\r
-# Input clock frequency.\r
-#     This will define a symbol, F_CLOCK, in all source code files equal to the \r
-#     input clock frequency (before any prescaling is performed). This value may\r
-#     differ from F_CPU if prescaling is used on the latter, and is required as the\r
-#     raw input clock is fed directly to the PLL sections of the AVR for high speed\r
-#     clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'\r
-#     at the end, this will be done automatically to create a 32-bit value in your\r
-#     source code.\r
-#\r
-#     If no clock division is performed on the input clock inside the AVR (via the\r
-#     CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.\r
-F_CLOCK = 8000000\r
-\r
-\r
-# Output format. (can be srec, ihex, binary)\r
-FORMAT = ihex\r
-\r
-\r
-# Target file name (without extension).\r
-TARGET = KeyboardMouse\r
-\r
-\r
-# Object files directory\r
-#     To put object files in current directory, use a dot (.), do NOT make\r
-#     this an empty or blank macro!\r
-OBJDIR = .\r
-\r
-\r
-# Path to the LUFA library\r
-LUFA_PATH = ../../..\r
-\r
-\r
-# List C source files here. (C dependencies are automatically generated.)\r
-SRC = $(TARGET).c                                                 \\r
-         Descriptors.c                                               \\r
-         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/DevChapter9.c        \\r
-         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Endpoint.c           \\r
-         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Host.c               \\r
-         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/HostChapter9.c       \\r
-         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/LowLevel.c           \\r
-         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Pipe.c               \\r
-         $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/Events.c            \\r
-         $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBInterrupt.c      \\r
-         $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBTask.c           \\r
-         $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/ConfigDescriptor.c  \\r
-         $(LUFA_PATH)/LUFA/Drivers/USB/Class/Device/HID.c            \\r
-\r
-\r
-# List C++ source files here. (C dependencies are automatically generated.)\r
-CPPSRC = \r
-\r
-\r
-# List Assembler source files here.\r
-#     Make them always end in a capital .S.  Files ending in a lowercase .s\r
-#     will not be considered source files but generated files (assembler\r
-#     output from the compiler), and will be deleted upon "make clean"!\r
-#     Even though the DOS/Win* filesystem matches both .s and .S the same,\r
-#     it will preserve the spelling of the filenames, and gcc itself does\r
-#     care about how the name is spelled on its command-line.\r
-ASRC =\r
-\r
-\r
-# Optimization level, can be [0, 1, 2, 3, s]. \r
-#     0 = turn off optimization. s = optimize for size.\r
-#     (Note: 3 is not always the best optimization level. See avr-libc FAQ.)\r
-OPT = s\r
-\r
-\r
-# Debugging format.\r
-#     Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs.\r
-#     AVR Studio 4.10 requires dwarf-2.\r
-#     AVR [Extended] COFF format requires stabs, plus an avr-objcopy run.\r
-DEBUG = dwarf-2\r
-\r
-\r
-# List any extra directories to look for include files here.\r
-#     Each directory must be seperated by a space.\r
-#     Use forward slashes for directory separators.\r
-#     For a directory that has spaces, enclose it in quotes.\r
-EXTRAINCDIRS = $(LUFA_PATH)/\r
-\r
-\r
-# Compiler flag to set the C Standard level.\r
-#     c89   = "ANSI" C\r
-#     gnu89 = c89 plus GCC extensions\r
-#     c99   = ISO C99 standard (not yet fully implemented)\r
-#     gnu99 = c99 plus GCC extensions\r
-CSTANDARD = -std=gnu99\r
-\r
-\r
-# Place -D or -U options here for C sources\r
-CDEFS  = -DF_CPU=$(F_CPU)UL -DF_CLOCK=$(F_CLOCK)UL -DBOARD=BOARD_$(BOARD)\r
-CDEFS += -DUSE_NONSTANDARD_DESCRIPTOR_NAMES -DUSB_DEVICE_ONLY\r
-CDEFS += -DFIXED_CONTROL_ENDPOINT_SIZE=8 -DUSE_SINGLE_DEVICE_CONFIGURATION\r
-CDEFS += -DUSE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)"\r
-\r
-\r
-# Place -D or -U options here for ASM sources\r
-ADEFS = -DF_CPU=$(F_CPU)\r
-\r
-\r
-# Place -D or -U options here for C++ sources\r
-CPPDEFS = -DF_CPU=$(F_CPU)UL\r
-#CPPDEFS += -D__STDC_LIMIT_MACROS\r
-#CPPDEFS += -D__STDC_CONSTANT_MACROS\r
-\r
-\r
-\r
-#---------------- Compiler Options C ----------------\r
-#  -g*:          generate debugging information\r
-#  -O*:          optimization level\r
-#  -f...:        tuning, see GCC manual and avr-libc documentation\r
-#  -Wall...:     warning level\r
-#  -Wa,...:      tell GCC to pass this to the assembler.\r
-#    -adhlns...: create assembler listing\r
-CFLAGS = -g$(DEBUG)\r
-CFLAGS += $(CDEFS)\r
-CFLAGS += -O$(OPT)\r
-CFLAGS += -funsigned-char\r
-CFLAGS += -funsigned-bitfields\r
-CFLAGS += -ffunction-sections\r
-CFLAGS += -fpack-struct\r
-CFLAGS += -fshort-enums\r
-CFLAGS += -finline-limit=20\r
-CFLAGS += -Wall\r
-CFLAGS += -Wstrict-prototypes\r
-CFLAGS += -Wundef\r
-#CFLAGS += -fno-unit-at-a-time\r
-#CFLAGS += -Wunreachable-code\r
-#CFLAGS += -Wsign-compare\r
-CFLAGS += -Wa,-adhlns=$(<:%.c=$(OBJDIR)/%.lst)\r
-CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))\r
-CFLAGS += $(CSTANDARD)\r
-\r
-\r
-#---------------- Compiler Options C++ ----------------\r
-#  -g*:          generate debugging information\r
-#  -O*:          optimization level\r
-#  -f...:        tuning, see GCC manual and avr-libc documentation\r
-#  -Wall...:     warning level\r
-#  -Wa,...:      tell GCC to pass this to the assembler.\r
-#    -adhlns...: create assembler listing\r
-CPPFLAGS = -g$(DEBUG)\r
-CPPFLAGS += $(CPPDEFS)\r
-CPPFLAGS += -O$(OPT)\r
-CPPFLAGS += -funsigned-char\r
-CPPFLAGS += -funsigned-bitfields\r
-CPPFLAGS += -fpack-struct\r
-CPPFLAGS += -fshort-enums\r
-CPPFLAGS += -fno-exceptions\r
-CPPFLAGS += -Wall\r
-CFLAGS += -Wundef\r
-#CPPFLAGS += -mshort-calls\r
-#CPPFLAGS += -fno-unit-at-a-time\r
-#CPPFLAGS += -Wstrict-prototypes\r
-#CPPFLAGS += -Wunreachable-code\r
-#CPPFLAGS += -Wsign-compare\r
-CPPFLAGS += -Wa,-adhlns=$(<:%.cpp=$(OBJDIR)/%.lst)\r
-CPPFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))\r
-#CPPFLAGS += $(CSTANDARD)\r
-\r
-\r
-#---------------- Assembler Options ----------------\r
-#  -Wa,...:   tell GCC to pass this to the assembler.\r
-#  -adhlns:   create listing\r
-#  -gstabs:   have the assembler create line number information; note that\r
-#             for use in COFF files, additional information about filenames\r
-#             and function names needs to be present in the assembler source\r
-#             files -- see avr-libc docs [FIXME: not yet described there]\r
-#  -listing-cont-lines: Sets the maximum number of continuation lines of hex \r
-#       dump that will be displayed for a given single line of source input.\r
-ASFLAGS = $(ADEFS) -Wa,-adhlns=$(<:%.S=$(OBJDIR)/%.lst),-gstabs,--listing-cont-lines=100\r
-\r
-\r
-#---------------- Library Options ----------------\r
-# Minimalistic printf version\r
-PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min\r
-\r
-# Floating point printf version (requires MATH_LIB = -lm below)\r
-PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt\r
-\r
-# If this is left blank, then it will use the Standard printf version.\r
-PRINTF_LIB = \r
-#PRINTF_LIB = $(PRINTF_LIB_MIN)\r
-#PRINTF_LIB = $(PRINTF_LIB_FLOAT)\r
-\r
-\r
-# Minimalistic scanf version\r
-SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min\r
-\r
-# Floating point + %[ scanf version (requires MATH_LIB = -lm below)\r
-SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt\r
-\r
-# If this is left blank, then it will use the Standard scanf version.\r
-SCANF_LIB = \r
-#SCANF_LIB = $(SCANF_LIB_MIN)\r
-#SCANF_LIB = $(SCANF_LIB_FLOAT)\r
-\r
-\r
-MATH_LIB = -lm\r
-\r
-\r
-# List any extra directories to look for libraries here.\r
-#     Each directory must be seperated by a space.\r
-#     Use forward slashes for directory separators.\r
-#     For a directory that has spaces, enclose it in quotes.\r
-EXTRALIBDIRS = \r
-\r
-\r
-\r
-#---------------- External Memory Options ----------------\r
-\r
-# 64 KB of external RAM, starting after internal RAM (ATmega128!),\r
-# used for variables (.data/.bss) and heap (malloc()).\r
-#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff\r
-\r
-# 64 KB of external RAM, starting after internal RAM (ATmega128!),\r
-# only used for heap (malloc()).\r
-#EXTMEMOPTS = -Wl,--section-start,.data=0x801100,--defsym=__heap_end=0x80ffff\r
-\r
-EXTMEMOPTS =\r
-\r
-\r
-\r
-#---------------- Linker Options ----------------\r
-#  -Wl,...:     tell GCC to pass this to linker.\r
-#    -Map:      create map file\r
-#    --cref:    add cross reference to  map file\r
-LDFLAGS = -Wl,-Map=$(TARGET).map,--cref\r
-LDFLAGS += -Wl,--relax \r
-LDFLAGS += -Wl,--gc-sections\r
-LDFLAGS += $(EXTMEMOPTS)\r
-LDFLAGS += $(patsubst %,-L%,$(EXTRALIBDIRS))\r
-LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)\r
-#LDFLAGS += -T linker_script.x\r
-\r
-\r
-\r
-#---------------- Programming Options (avrdude) ----------------\r
-\r
-# Programming hardware: alf avr910 avrisp bascom bsd \r
-# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500\r
-#\r
-# Type: avrdude -c ?\r
-# to get a full listing.\r
-#\r
-AVRDUDE_PROGRAMMER = jtagmkII\r
-\r
-# com1 = serial port. Use lpt1 to connect to parallel port.\r
-AVRDUDE_PORT = usb\r
-\r
-AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex\r
-#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep\r
-\r
-\r
-# Uncomment the following if you want avrdude's erase cycle counter.\r
-# Note that this counter needs to be initialized first using -Yn,\r
-# see avrdude manual.\r
-#AVRDUDE_ERASE_COUNTER = -y\r
-\r
-# Uncomment the following if you do /not/ wish a verification to be\r
-# performed after programming the device.\r
-#AVRDUDE_NO_VERIFY = -V\r
-\r
-# Increase verbosity level.  Please use this when submitting bug\r
-# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude> \r
-# to submit bug reports.\r
-#AVRDUDE_VERBOSE = -v -v\r
-\r
-AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)\r
-AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY)\r
-AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE)\r
-AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER)\r
-\r
-\r
-\r
-#---------------- Debugging Options ----------------\r
-\r
-# For simulavr only - target MCU frequency.\r
-DEBUG_MFREQ = $(F_CPU)\r
-\r
-# Set the DEBUG_UI to either gdb or insight.\r
-# DEBUG_UI = gdb\r
-DEBUG_UI = insight\r
-\r
-# Set the debugging back-end to either avarice, simulavr.\r
-DEBUG_BACKEND = avarice\r
-#DEBUG_BACKEND = simulavr\r
-\r
-# GDB Init Filename.\r
-GDBINIT_FILE = __avr_gdbinit\r
-\r
-# When using avarice settings for the JTAG\r
-JTAG_DEV = /dev/com1\r
-\r
-# Debugging port used to communicate between GDB / avarice / simulavr.\r
-DEBUG_PORT = 4242\r
-\r
-# Debugging host used to communicate between GDB / avarice / simulavr, normally\r
-#     just set to localhost unless doing some sort of crazy debugging when \r
-#     avarice is running on a different computer.\r
-DEBUG_HOST = localhost\r
-\r
-\r
-\r
-#============================================================================\r
-\r
-\r
-# Define programs and commands.\r
-SHELL = sh\r
-CC = avr-gcc\r
-OBJCOPY = avr-objcopy\r
-OBJDUMP = avr-objdump\r
-SIZE = avr-size\r
-AR = avr-ar rcs\r
-NM = avr-nm\r
-AVRDUDE = avrdude\r
-REMOVE = rm -f\r
-REMOVEDIR = rm -rf\r
-COPY = cp\r
-WINSHELL = cmd\r
-\r
-# Define Messages\r
-# English\r
-MSG_ERRORS_NONE = Errors: none\r
-MSG_BEGIN = -------- begin --------\r
-MSG_END = --------  end  --------\r
-MSG_SIZE_BEFORE = Size before: \r
-MSG_SIZE_AFTER = Size after:\r
-MSG_COFF = Converting to AVR COFF:\r
-MSG_EXTENDED_COFF = Converting to AVR Extended COFF:\r
-MSG_FLASH = Creating load file for Flash:\r
-MSG_EEPROM = Creating load file for EEPROM:\r
-MSG_EXTENDED_LISTING = Creating Extended Listing:\r
-MSG_SYMBOL_TABLE = Creating Symbol Table:\r
-MSG_LINKING = Linking:\r
-MSG_COMPILING = Compiling C:\r
-MSG_COMPILING_CPP = Compiling C++:\r
-MSG_ASSEMBLING = Assembling:\r
-MSG_CLEANING = Cleaning project:\r
-MSG_CREATING_LIBRARY = Creating library:\r
-\r
-\r
-\r
-\r
-# Define all object files.\r
-OBJ = $(SRC:%.c=$(OBJDIR)/%.o) $(CPPSRC:%.cpp=$(OBJDIR)/%.o) $(ASRC:%.S=$(OBJDIR)/%.o) \r
-\r
-# Define all listing files.\r
-LST = $(SRC:%.c=$(OBJDIR)/%.lst) $(CPPSRC:%.cpp=$(OBJDIR)/%.lst) $(ASRC:%.S=$(OBJDIR)/%.lst) \r
-\r
-\r
-# Compiler flags to generate dependency files.\r
-GENDEPFLAGS = -MMD -MP -MF .dep/$(@F).d\r
-\r
-\r
-# Combine all necessary flags and optional flags.\r
-# Add target processor to flags.\r
-ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS)\r
-ALL_CPPFLAGS = -mmcu=$(MCU) -I. -x c++ $(CPPFLAGS) $(GENDEPFLAGS)\r
-ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)\r
-\r
-\r
-\r
-\r
-\r
-# Default target.\r
-all: begin gccversion sizebefore build checkhooks checklibmode checkboard sizeafter end\r
-\r
-# Change the build target to build a HEX file or a library.\r
-build: elf hex eep lss sym\r
-#build: lib\r
-\r
-\r
-elf: $(TARGET).elf\r
-hex: $(TARGET).hex\r
-eep: $(TARGET).eep\r
-lss: $(TARGET).lss\r
-sym: $(TARGET).sym\r
-LIBNAME=lib$(TARGET).a\r
-lib: $(LIBNAME)\r
-\r
-\r
-\r
-# Eye candy.\r
-# AVR Studio 3.x does not check make's exit code but relies on\r
-# the following magic strings to be generated by the compile job.\r
-begin:\r
-       @echo\r
-       @echo $(MSG_BEGIN)\r
-\r
-end:\r
-       @echo $(MSG_END)\r
-       @echo\r
-\r
-\r
-# Display size of file.\r
-HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex\r
-ELFSIZE = $(SIZE) $(MCU_FLAG) $(FORMAT_FLAG) $(TARGET).elf\r
-MCU_FLAG = $(shell $(SIZE) --help | grep -- --mcu > /dev/null && echo --mcu=$(MCU) )\r
-FORMAT_FLAG = $(shell $(SIZE) --help | grep -- --format=.*avr > /dev/null && echo --format=avr )\r
-\r
-sizebefore:\r
-       @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \\r
-       2>/dev/null; echo; fi\r
-\r
-sizeafter:\r
-       @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \\r
-       2>/dev/null; echo; fi\r
-\r
-checkhooks: build\r
-       @echo\r
-       @echo ------- Unhooked LUFA Events -------\r
-       @$(shell) (grep -s '^EVENT_.*LUFA/.*\\.o' $(TARGET).map | \\r
-                  cut -d' ' -f1 | cut -d'_' -f2- | grep ".*") || \\r
-                          echo "(None)"\r
-       @echo ------------------------------------\r
-\r
-checklibmode:\r
-       @echo\r
-       @echo ----------- Library Mode -----------\r
-       @$(shell) ($(CC) $(ALL_CFLAGS) -E -dM - < /dev/null \\r
-                 | grep 'USB_\(DEVICE\|HOST\)_ONLY' | cut -d' ' -f2 | grep ".*") \\r
-                 || echo "No specific mode (both device and host mode allowable)."\r
-       @echo ------------------------------------\r
-\r
-checkboard:\r
-       @echo\r
-       @echo ---------- Selected Board ----------\r
-       @echo Selected board model is $(BOARD).\r
-       @echo ------------------------------------\r
-       \r
-# Display compiler version information.\r
-gccversion : \r
-       @$(CC) --version\r
-\r
-\r
-\r
-# Program the device.  \r
-program: $(TARGET).hex $(TARGET).eep\r
-       $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)\r
-\r
-flip: $(TARGET).hex\r
-       batchisp -hardware usb -device $(MCU) -operation erase f\r
-       batchisp -hardware usb -device $(MCU) -operation loadbuffer $(TARGET).hex program\r
-       batchisp -hardware usb -device $(MCU) -operation start reset 0\r
-\r
-dfu: $(TARGET).hex\r
-       dfu-programmer $(MCU) erase\r
-       dfu-programmer $(MCU) flash --debug 1 $(TARGET).hex\r
-       dfu-programmer $(MCU) reset\r
-\r
-flip-ee: $(TARGET).hex $(TARGET).eep\r
-       copy $(TARGET).eep $(TARGET)eep.hex\r
-       batchisp -hardware usb -device $(MCU) -operation memory EEPROM erase\r
-       batchisp -hardware usb -device $(MCU) -operation memory EEPROM loadbuffer $(TARGET)eep.hex program\r
-       batchisp -hardware usb -device $(MCU) -operation start reset 0\r
-\r
-dfu-ee: $(TARGET).hex $(TARGET).eep\r
-       dfu-programmer $(MCU) flash-eeprom --debug 1 --suppress-bootloader-mem $(TARGET).eep\r
-       dfu-programmer $(MCU) reset\r
-\r
-\r
-# Generate avr-gdb config/init file which does the following:\r
-#     define the reset signal, load the target file, connect to target, and set \r
-#     a breakpoint at main().\r
-gdb-config: \r
-       @$(REMOVE) $(GDBINIT_FILE)\r
-       @echo define reset >> $(GDBINIT_FILE)\r
-       @echo SIGNAL SIGHUP >> $(GDBINIT_FILE)\r
-       @echo end >> $(GDBINIT_FILE)\r
-       @echo file $(TARGET).elf >> $(GDBINIT_FILE)\r
-       @echo target remote $(DEBUG_HOST):$(DEBUG_PORT)  >> $(GDBINIT_FILE)\r
-ifeq ($(DEBUG_BACKEND),simulavr)\r
-       @echo load  >> $(GDBINIT_FILE)\r
-endif\r
-       @echo break main >> $(GDBINIT_FILE)\r
-\r
-debug: gdb-config $(TARGET).elf\r
-ifeq ($(DEBUG_BACKEND), avarice)\r
-       @echo Starting AVaRICE - Press enter when "waiting to connect" message displays.\r
-       @$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \\r
-       $(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT)\r
-       @$(WINSHELL) /c pause\r
-\r
-else\r
-       @$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \\r
-       $(DEBUG_MFREQ) --port $(DEBUG_PORT)\r
-endif\r
-       @$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE)\r
-\r
-\r
-\r
-\r
-# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.\r
-COFFCONVERT = $(OBJCOPY) --debugging\r
-COFFCONVERT += --change-section-address .data-0x800000\r
-COFFCONVERT += --change-section-address .bss-0x800000\r
-COFFCONVERT += --change-section-address .noinit-0x800000\r
-COFFCONVERT += --change-section-address .eeprom-0x810000\r
-\r
-\r
-\r
-coff: $(TARGET).elf\r
-       @echo\r
-       @echo $(MSG_COFF) $(TARGET).cof\r
-       $(COFFCONVERT) -O coff-avr $< $(TARGET).cof\r
-\r
-\r
-extcoff: $(TARGET).elf\r
-       @echo\r
-       @echo $(MSG_EXTENDED_COFF) $(TARGET).cof\r
-       $(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof\r
-\r
-\r
-\r
-# Create final output files (.hex, .eep) from ELF output file.\r
-%.hex: %.elf\r
-       @echo\r
-       @echo $(MSG_FLASH) $@\r
-       $(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@\r
-\r
-%.eep: %.elf\r
-       @echo\r
-       @echo $(MSG_EEPROM) $@\r
-       -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \\r
-       --change-section-lma .eeprom=0 --no-change-warnings -O $(FORMAT) $< $@ || exit 0\r
-\r
-# Create extended listing file from ELF output file.\r
-%.lss: %.elf\r
-       @echo\r
-       @echo $(MSG_EXTENDED_LISTING) $@\r
-       $(OBJDUMP) -h -z -S $< > $@\r
-\r
-# Create a symbol table from ELF output file.\r
-%.sym: %.elf\r
-       @echo\r
-       @echo $(MSG_SYMBOL_TABLE) $@\r
-       $(NM) -n $< > $@\r
-\r
-\r
-\r
-# Create library from object files.\r
-.SECONDARY : $(TARGET).a\r
-.PRECIOUS : $(OBJ)\r
-%.a: $(OBJ)\r
-       @echo\r
-       @echo $(MSG_CREATING_LIBRARY) $@\r
-       $(AR) $@ $(OBJ)\r
-\r
-\r
-# Link: create ELF output file from object files.\r
-.SECONDARY : $(TARGET).elf\r
-.PRECIOUS : $(OBJ)\r
-%.elf: $(OBJ)\r
-       @echo\r
-       @echo $(MSG_LINKING) $@\r
-       $(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)\r
-\r
-\r
-# Compile: create object files from C source files.\r
-$(OBJDIR)/%.o : %.c\r
-       @echo\r
-       @echo $(MSG_COMPILING) $<\r
-       $(CC) -c $(ALL_CFLAGS) $< -o $@ \r
-\r
-\r
-# Compile: create object files from C++ source files.\r
-$(OBJDIR)/%.o : %.cpp\r
-       @echo\r
-       @echo $(MSG_COMPILING_CPP) $<\r
-       $(CC) -c $(ALL_CPPFLAGS) $< -o $@ \r
-\r
-\r
-# Compile: create assembler files from C source files.\r
-%.s : %.c\r
-       $(CC) -S $(ALL_CFLAGS) $< -o $@\r
-\r
-\r
-# Compile: create assembler files from C++ source files.\r
-%.s : %.cpp\r
-       $(CC) -S $(ALL_CPPFLAGS) $< -o $@\r
-\r
-\r
-# Assemble: create object files from assembler source files.\r
-$(OBJDIR)/%.o : %.S\r
-       @echo\r
-       @echo $(MSG_ASSEMBLING) $<\r
-       $(CC) -c $(ALL_ASFLAGS) $< -o $@\r
-\r
-\r
-# Create preprocessed source for use in sending a bug report.\r
-%.i : %.c\r
-       $(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ \r
-       \r
-\r
-# Target: clean project.\r
-clean: begin clean_list clean_binary end\r
-\r
-clean_binary:\r
-       $(REMOVE) $(TARGET).hex\r
-       \r
-clean_list:\r
-       @echo $(MSG_CLEANING)\r
-       $(REMOVE) $(TARGET).eep\r
-       $(REMOVE) $(TARGET)eep.hex\r
-       $(REMOVE) $(TARGET).cof\r
-       $(REMOVE) $(TARGET).elf\r
-       $(REMOVE) $(TARGET).map\r
-       $(REMOVE) $(TARGET).sym\r
-       $(REMOVE) $(TARGET).lss\r
-       $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.o)\r
-       $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.lst)\r
-       $(REMOVE) $(SRC:.c=.s)\r
-       $(REMOVE) $(SRC:.c=.d)\r
-       $(REMOVE) $(SRC:.c=.i)\r
-       $(REMOVEDIR) .dep\r
-\r
-\r
-doxygen:\r
-       @echo Generating Project Documentation...\r
-       @doxygen Doxygen.conf\r
-       @echo Documentation Generation Complete.\r
-\r
-clean_doxygen:\r
-       rm -rf Documentation\r
-\r
-# Create object files directory\r
-$(shell mkdir $(OBJDIR) 2>/dev/null)\r
-\r
-\r
-# Include the dependency files.\r
--include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)\r
-\r
-\r
-# Listing of phony targets.\r
-.PHONY : all checkhooks checklibmode checkboard   \\r
-begin finish end sizebefore sizeafter gccversion  \\r
-build elf hex eep lss sym coff extcoff clean      \\r
-clean_list clean_binary program debug gdb-config  \\r
-doxygen dfu flip flip-ee dfu-ee
\ No newline at end of file
diff --git a/Demos/Device/LowLevel/AudioInput/AudioInput.aps b/Demos/Device/LowLevel/AudioInput/AudioInput.aps
new file mode 100644 (file)
index 0000000..aed850a
--- /dev/null
@@ -0,0 +1 @@
+<AVRStudio><MANAGEMENT><ProjectName>AudioInput</ProjectName><Created>30-Sep-2008 14:03:00</Created><LastEdit>30-Sep-2008 14:03:28</LastEdit><ICON>241</ICON><ProjectType>0</ProjectType><Created>30-Sep-2008 14:03:00</Created><Version>4</Version><Build>4, 14, 0, 589</Build><ProjectTypeName>AVR GCC</ProjectTypeName></MANAGEMENT><CODE_CREATION><ObjectFile>AudioInput.elf</ObjectFile><EntryFile></EntryFile><SaveFolder>C:\Users\Dean\Documents\Electronics\Projects\WORK\MyUSBWORK\Demos\AudioInput\</SaveFolder></CODE_CREATION><DEBUG_TARGET><CURRENT_TARGET></CURRENT_TARGET><CURRENT_PART></CURRENT_PART><BREAKPOINTS></BREAKPOINTS><IO_EXPAND><HIDE>false</HIDE></IO_EXPAND><REGISTERNAMES><Register>R00</Register><Register>R01</Register><Register>R02</Register><Register>R03</Register><Register>R04</Register><Register>R05</Register><Register>R06</Register><Register>R07</Register><Register>R08</Register><Register>R09</Register><Register>R10</Register><Register>R11</Register><Register>R12</Register><Register>R13</Register><Register>R14</Register><Register>R15</Register><Register>R16</Register><Register>R17</Register><Register>R18</Register><Register>R19</Register><Register>R20</Register><Register>R21</Register><Register>R22</Register><Register>R23</Register><Register>R24</Register><Register>R25</Register><Register>R26</Register><Register>R27</Register><Register>R28</Register><Register>R29</Register><Register>R30</Register><Register>R31</Register></REGISTERNAMES><COM></COM><COMType>0</COMType><WATCHNUM>0</WATCHNUM><WATCHNAMES><Pane0></Pane0><Pane1></Pane1><Pane2></Pane2><Pane3></Pane3></WATCHNAMES><BreakOnTrcaeFull>0</BreakOnTrcaeFull></DEBUG_TARGET><Debugger><Triggers></Triggers></Debugger><AVRGCCPLUGIN><FILES><SOURCEFILE>AudioInput.c</SOURCEFILE><SOURCEFILE>Descriptors.c</SOURCEFILE><HEADERFILE>AudioInput.h</HEADERFILE><HEADERFILE>Descriptors.h</HEADERFILE><OTHERFILE>makefile</OTHERFILE></FILES><CONFIGS><CONFIG><NAME>default</NAME><USESEXTERNALMAKEFILE>YES</USESEXTERNALMAKEFILE><EXTERNALMAKEFILE>makefile</EXTERNALMAKEFILE><PART>atmega128</PART><HEX>1</HEX><LIST>1</LIST><MAP>1</MAP><OUTPUTFILENAME>AudioInput.elf</OUTPUTFILENAME><OUTPUTDIR>default\</OUTPUTDIR><ISDIRTY>1</ISDIRTY><OPTIONS/><INCDIRS/><LIBDIRS/><LIBS/><LINKOBJECTS/><OPTIONSFORALL>-Wall -gdwarf-2 -std=gnu99 -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums</OPTIONSFORALL><LINKEROPTIONS></LINKEROPTIONS><SEGMENTS/></CONFIG></CONFIGS><LASTCONFIG>default</LASTCONFIG><USES_WINAVR>1</USES_WINAVR><GCC_LOC>C:\WinAVR-20080512\bin\avr-gcc.exe</GCC_LOC><MAKE_LOC>C:\WinAVR-20080512\utils\bin\make.exe</MAKE_LOC></AVRGCCPLUGIN><ProjectFiles><Files><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\MyUSBWORK\Demos\AudioInput\AudioInput.h</Name><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\MyUSBWORK\Demos\AudioInput\Descriptors.h</Name><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\MyUSBWORK\Demos\AudioInput\AudioInput.c</Name><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\MyUSBWORK\Demos\AudioInput\Descriptors.c</Name></Files></ProjectFiles><IOView><usergroups/><sort sorted="0" column="0" ordername="0" orderaddress="0" ordergroup="0"/></IOView><Files></Files><Events><Bookmarks></Bookmarks></Events><Trace><Filters></Filters></Trace></AVRStudio>\r
diff --git a/Demos/Device/LowLevel/AudioInput/AudioInput.c b/Demos/Device/LowLevel/AudioInput/AudioInput.c
new file mode 100644 (file)
index 0000000..ecd8cdd
--- /dev/null
@@ -0,0 +1,220 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  Main source file for the Audio Input demo. This file contains the main tasks of the demo and\r
+ *  is responsible for the initial application hardware configuration.\r
+ */\r
+\r
+#include "AudioInput.h"\r
+\r
+/* Scheduler Task List */\r
+TASK_LIST\r
+{\r
+       { .Task = USB_USBTask          , .TaskStatus = TASK_STOP },\r
+       { .Task = USB_Audio_Task       , .TaskStatus = TASK_STOP },\r
+};\r
+\r
+\r
+/** Main program entry point. This routine configures the hardware required by the application, then\r
+ *  starts the scheduler to run the application tasks.\r
+ */\r
+int main(void)\r
+{\r
+       /* Disable watchdog if enabled by bootloader/fuses */\r
+       MCUSR &= ~(1 << WDRF);\r
+       wdt_disable();\r
+\r
+       /* Disable clock division */\r
+       clock_prescale_set(clock_div_1);\r
+       \r
+       /* Hardware Initialization */\r
+       LEDs_Init();\r
+       ADC_Init(ADC_FREE_RUNNING | ADC_PRESCALE_32);\r
+       ADC_SetupChannel(MIC_IN_ADC_CHANNEL);\r
+       \r
+       /* Start the ADC conversion in free running mode */\r
+       ADC_StartReading(ADC_REFERENCE_AVCC | ADC_RIGHT_ADJUSTED | MIC_IN_ADC_CHANNEL);\r
+       \r
+       /* Indicate USB not ready */\r
+       UpdateStatus(Status_USBNotReady);\r
+       \r
+       /* Initialize Scheduler so that it can be used */\r
+       Scheduler_Init();\r
+\r
+       /* Initialize USB Subsystem */\r
+       USB_Init();\r
+\r
+       /* Scheduling - routine never returns, so put this last in the main function */\r
+       Scheduler_Start();\r
+}\r
+\r
+/** Event handler for the USB_Connect event. This indicates that the device is enumerating via the status LEDs, and\r
+ *  configures the sample update and PWM timers.\r
+ */\r
+void EVENT_USB_Connect(void)\r
+{\r
+       /* Start USB management task */\r
+       Scheduler_SetTaskMode(USB_USBTask, TASK_RUN);\r
+\r
+       /* Indicate USB enumerating */\r
+       UpdateStatus(Status_USBEnumerating);\r
+\r
+       /* Sample reload timer initialization */\r
+       OCR0A   = (F_CPU / AUDIO_SAMPLE_FREQUENCY) - 1;\r
+       TCCR0A  = (1 << WGM01);  // CTC mode\r
+       TCCR0B  = (1 << CS00);   // Fcpu speed\r
+}\r
+\r
+/** Event handler for the USB_Disconnect event. This indicates that the device is no longer connected to a host via\r
+ *  the status LEDs, disables the sample update and PWM output timers and stops the USB and Audio management tasks.\r
+ */\r
+void EVENT_USB_Disconnect(void)\r
+{\r
+       /* Stop the sample reload timer */\r
+       TCCR0B = 0;\r
+\r
+       /* Stop running audio and USB management tasks */\r
+       Scheduler_SetTaskMode(USB_Audio_Task, TASK_STOP);\r
+       Scheduler_SetTaskMode(USB_USBTask, TASK_STOP);\r
+\r
+       /* Indicate USB not ready */\r
+       UpdateStatus(Status_USBNotReady);\r
+}\r
+\r
+/** Event handler for the USB_ConfigurationChanged event. This is fired when the host set the current configuration\r
+ *  of the USB device after enumeration - the device endpoints are configured.\r
+ */\r
+void EVENT_USB_ConfigurationChanged(void)\r
+{\r
+       /* Setup audio stream endpoint */\r
+       Endpoint_ConfigureEndpoint(AUDIO_STREAM_EPNUM, EP_TYPE_ISOCHRONOUS,\r
+                                      ENDPOINT_DIR_IN, AUDIO_STREAM_EPSIZE,\r
+                                  ENDPOINT_BANK_DOUBLE);\r
+\r
+       /* Indicate USB connected and ready */\r
+       UpdateStatus(Status_USBReady);\r
+}\r
+\r
+/** Event handler for the USB_UnhandledControlPacket event. This is used to catch standard and class specific\r
+ *  control requests that are not handled internally by the USB library (including the Audio class-specific\r
+ *  requests) so that they can be handled appropriately for the application.\r
+ */\r
+void EVENT_USB_UnhandledControlPacket(void)\r
+{\r
+       /* Process General and Audio specific control requests */\r
+       switch (USB_ControlRequest.bRequest)\r
+       {\r
+               case REQ_SetInterface:\r
+                       /* Set Interface is not handled by the library, as its function is application-specific */\r
+                       if (USB_ControlRequest.bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_STANDARD | REQREC_INTERFACE))\r
+                       {\r
+                               Endpoint_ClearSETUP();\r
+                               \r
+                               /* Check if the host is enabling the audio interface (setting AlternateSetting to 1) */\r
+                               if (USB_ControlRequest.wValue)\r
+                               {\r
+                                       /* Start audio task */\r
+                                       Scheduler_SetTaskMode(USB_Audio_Task, TASK_RUN);\r
+                               }\r
+                               else\r
+                               {\r
+                                       /* Stop audio task */\r
+                                       Scheduler_SetTaskMode(USB_Audio_Task, TASK_STOP);                               \r
+                               }\r
+                               \r
+                               /* Acknowledge status stage */\r
+                               while (!(Endpoint_IsINReady()));\r
+                               Endpoint_ClearIN();\r
+                       }\r
+\r
+                       break;\r
+       }\r
+}\r
+\r
+/** Function to manage status updates to the user. This is done via LEDs on the given board, if available, but may be changed to\r
+ *  log to a serial port, or anything else that is suitable for status updates.\r
+ *\r
+ *  \param CurrentStatus  Current status of the system, from the AudioInput_StatusCodes_t enum\r
+ */\r
+void UpdateStatus(uint8_t CurrentStatus)\r
+{\r
+       uint8_t LEDMask = LEDS_NO_LEDS;\r
+       \r
+       /* Set the LED mask to the appropriate LED mask based on the given status code */\r
+       switch (CurrentStatus)\r
+       {\r
+               case Status_USBNotReady:\r
+                       LEDMask = (LEDS_LED1);\r
+                       break;\r
+               case Status_USBEnumerating:\r
+                       LEDMask = (LEDS_LED1 | LEDS_LED2);\r
+                       break;\r
+               case Status_USBReady:\r
+                       LEDMask = (LEDS_LED2 | LEDS_LED4);\r
+                       break;\r
+       }\r
+       \r
+       /* Set the board LEDs to the new LED mask */\r
+       LEDs_SetAllLEDs(LEDMask);\r
+}\r
+\r
+/** Task to manage the Audio interface, reading in ADC samples from the microphone, and them to the host. */\r
+TASK(USB_Audio_Task)\r
+{\r
+       /* Select the audio stream endpoint */\r
+       Endpoint_SelectEndpoint(AUDIO_STREAM_EPNUM);\r
+       \r
+       /* Check if the current endpoint can be written to and that the next sample should be stored */\r
+       if (Endpoint_IsINReady() && (TIFR0 & (1 << OCF0A)))\r
+       {\r
+               /* Clear the sample reload timer */\r
+               TIFR0 |= (1 << OCF0A);\r
+\r
+               /* Audio sample is ADC value scaled to fit the entire range */\r
+               int16_t AudioSample = ((SAMPLE_MAX_RANGE / ADC_MAX_RANGE) * ADC_GetResult());\r
+               \r
+#if defined(MICROPHONE_BIASED_TO_HALF_RAIL)\r
+               /* Microphone is biased to half rail voltage, subtract the bias from the sample value */\r
+               AudioSample -= (SAMPLE_MAX_RANGE / 2));\r
+#endif\r
+\r
+               /* Write the sample to the buffer */\r
+               Endpoint_Write_Word_LE(AudioSample);\r
+\r
+               /* Check to see if the bank is now full */\r
+               if (!(Endpoint_IsReadWriteAllowed()))\r
+               {\r
+                       /* Send the full packet to the host */\r
+                       Endpoint_ClearIN();\r
+               }\r
+       }\r
+}\r
diff --git a/Demos/Device/LowLevel/AudioInput/AudioInput.h b/Demos/Device/LowLevel/AudioInput/AudioInput.h
new file mode 100644 (file)
index 0000000..a394492
--- /dev/null
@@ -0,0 +1,82 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  Header file for AudioInput.c.\r
+ */\r
\r
+#ifndef _AUDIO_INPUT_H_\r
+#define _AUDIO_INPUT_H_\r
+\r
+       /* Includes: */\r
+               #include <avr/io.h>\r
+               #include <avr/wdt.h>\r
+               #include <avr/power.h>\r
+\r
+               #include "Descriptors.h"\r
+                               \r
+               #include <LUFA/Version.h>                      // Library Version Information\r
+               #include <LUFA/Drivers/USB/USB.h>              // USB Functionality\r
+               #include <LUFA/Drivers/Board/LEDs.h>           // LEDs driver\r
+               #include <LUFA/Drivers/Peripheral/ADC.h>       // ADC driver\r
+               #include <LUFA/Scheduler/Scheduler.h>          // Simple scheduler for task management\r
+\r
+       /* Macros: */\r
+               /** ADC channel number for the microphone input. */\r
+               #define MIC_IN_ADC_CHANNEL               2\r
+               \r
+               /** Maximum ADC sample value for the microphone input. */\r
+               #define SAMPLE_MAX_RANGE                 0xFFFF\r
+\r
+               /** Maximum ADC range for the microphone input. */\r
+               #define ADC_MAX_RANGE                    0x3FF\r
+\r
+       /* Enums: */\r
+               /** Enum for the possible status codes for passing to the UpdateStatus() function. */\r
+               enum AudioInput_StatusCodes_t\r
+               {\r
+                       Status_USBNotReady    = 0, /**< USB is not ready (disconnected from a USB host) */\r
+                       Status_USBEnumerating = 1, /**< USB interface is enumerating */\r
+                       Status_USBReady       = 2, /**< USB interface is connected and ready */\r
+               };\r
+\r
+       /* Task Definitions: */\r
+               TASK(USB_Audio_Task);\r
+\r
+       /* Function Prototypes: */\r
+               void EVENT_USB_Connect(void);\r
+               void EVENT_USB_Disconnect(void);\r
+               void EVENT_USB_ConfigurationChanged(void);\r
+               void EVENT_USB_UnhandledControlPacket(void);\r
+\r
+               void UpdateStatus(uint8_t CurrentStatus);\r
+               \r
+#endif\r
diff --git a/Demos/Device/LowLevel/AudioInput/AudioInput.txt b/Demos/Device/LowLevel/AudioInput/AudioInput.txt
new file mode 100644 (file)
index 0000000..cf71259
--- /dev/null
@@ -0,0 +1,75 @@
+/** \file\r
+ *\r
+ *  This file contains special DoxyGen information for the generation of the main page and other special\r
+ *  documentation pages. It is not a project source file.\r
+ */\r
\r
+/** \mainpage Audio Input Device Demo\r
+ *\r
+ *  \section SSec_Info USB Information:\r
+ *\r
+ *  The following table gives a rundown of the USB utilization of this demo.\r
+ *\r
+ *  <table>\r
+ *   <tr>\r
+ *    <td><b>USB Mode:</b></td>\r
+ *    <td>Device</td>\r
+ *   </tr>\r
+ *   <tr>\r
+ *    <td><b>USB Class:</b></td>\r
+ *    <td>Audio Class</td>\r
+ *   </tr>\r
+ *   <tr> \r
+ *    <td><b>USB Subclass:</b></td>\r
+ *    <td>Standard Audio Device</td>\r
+ *   </tr>\r
+ *   <tr>\r
+ *    <td><b>Relevant Standards:</b></td>\r
+ *    <td>USBIF Audio Class Specification</td>\r
+ *    <td>USBIF Audio Class Terminal Types Specification</td>\r
+ *    <td>USBIF Audio Data Formats Specification</td>\r
+ *   </tr>\r
+ *   <tr>\r
+ *    <td><b>Usable Speeds:</b></td>\r
+ *    <td>Full Speed Mode</td>\r
+ *   </tr>\r
+ *  </table>\r
+ *\r
+ *  \section SSec_Description Project Description: \r
+ *\r
+ *  Audio demonstration application. This gives a simple reference\r
+ *  application for implementing a USB Audio Input device using the\r
+ *  basic USB Audio drivers in all modern OSes (i.e. no special drivers\r
+ *  required).\r
+ *  \r
+ *  On start-up the system will automatically enumerate and function\r
+ *  as a USB microphone. Incoming audio from the ADC channel 1 will\r
+ *  be sampled and sent to the host computer.\r
+ *  \r
+ *  To use, connect a microphone to the ADC channel 2.\r
+ *  \r
+ *  Under Windows, if a driver request dialogue pops up, select the option\r
+ *  to automatically install the appropriate drivers.\r
+ *\r
+ *  \section SSec_Options Project Options\r
+ *\r
+ *  The following defines can be found in this demo, which can control the demo behaviour when defined, or changed in value.\r
+ *\r
+ *  <table>\r
+ *   <tr>\r
+ *    <td><b>Define Name:</b></td>\r
+ *    <td><b>Location:</b></td>\r
+ *    <td><b>Description:</b></td>\r
+ *   </tr>\r
+ *   <tr>\r
+ *    <td>MICROPHONE_BIASED_TO_HALF_RAIL</td>\r
+ *    <td>Makefile CDEFS</td>\r
+ *    <td>When defined, this alters the demo so that the half VCC bias of the microphone input is subtracted.</td>\r
+ *   </tr>\r
+ *   <tr>\r
+ *    <td>AUDIO_SAMPLE_FREQUENCY</td>\r
+ *    <td>Descriptors.h</td>\r
+ *    <td>Gives the audio sample rate per channel for the audio stream, in Hz.</td>\r
+ *   </tr>\r
+ *  </table>\r
+ */\r
diff --git a/Demos/Device/LowLevel/AudioInput/Descriptors.c b/Demos/Device/LowLevel/AudioInput/Descriptors.c
new file mode 100644 (file)
index 0000000..b8de373
--- /dev/null
@@ -0,0 +1,314 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  USB Device Descriptors, for library use when in USB device mode. Descriptors are special \r
+ *  computer-readable structures which the host requests upon device enumeration, to determine\r
+ *  the device's capabilities and functions.  \r
+ */\r
\r
+#include "Descriptors.h"\r
+\r
+/** Device descriptor structure. This descriptor, located in FLASH memory, describes the overall\r
+ *  device characteristics, including the supported USB version, control endpoint size and the\r
+ *  number of device configurations. The descriptor is read out by the USB host when the enumeration\r
+ *  process begins.\r
+ */\r
+USB_Descriptor_Device_t PROGMEM DeviceDescriptor =\r
+{\r
+       .Header                 = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device},\r
+               \r
+       .USBSpecification       = VERSION_BCD(02.00),\r
+       .Class                  = 0x00,\r
+       .SubClass               = 0x00,\r
+       .Protocol               = 0x00,\r
+                               \r
+       .Endpoint0Size          = FIXED_CONTROL_ENDPOINT_SIZE,\r
+               \r
+       .VendorID               = 0x03EB,\r
+       .ProductID              = 0x2047,\r
+       .ReleaseNumber          = 0x0000,\r
+               \r
+       .ManufacturerStrIndex   = 0x01,\r
+       .ProductStrIndex        = 0x02,\r
+       .SerialNumStrIndex      = NO_DESCRIPTOR,\r
+               \r
+       .NumberOfConfigurations = 1\r
+};\r
+\r
+/** Configuration descriptor structure. This descriptor, located in FLASH memory, describes the usage\r
+ *  of the device in one of its supported configurations, including information about any device interfaces\r
+ *  and endpoints. The descriptor is read out by the USB host during the enumeration process when selecting\r
+ *  a configuration so that the host may correctly communicate with the USB device.\r
+ */\r
+USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =\r
+{\r
+       .Config = \r
+               {\r
+                       .Header                   = {.Size = sizeof(USB_Descriptor_Configuration_Header_t), .Type = DTYPE_Configuration},\r
+\r
+                       .TotalConfigurationSize   = sizeof(USB_Descriptor_Configuration_t),\r
+                       .TotalInterfaces          = 2,\r
+\r
+                       .ConfigurationNumber      = 1,\r
+                       .ConfigurationStrIndex    = NO_DESCRIPTOR,\r
+                               \r
+                       .ConfigAttributes         = (USB_CONFIG_ATTR_BUSPOWERED | USB_CONFIG_ATTR_SELFPOWERED),\r
+                       \r
+                       .MaxPowerConsumption      = USB_CONFIG_POWER_MA(100)\r
+               },\r
+               \r
+       .AudioControlInterface = \r
+               {\r
+                       .Header                   = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},\r
+\r
+                       .InterfaceNumber          = 0,\r
+                       .AlternateSetting         = 0,\r
+                       \r
+                       .TotalEndpoints           = 0,\r
+                               \r
+                       .Class                    = 0x01,\r
+                       .SubClass                 = 0x01,\r
+                       .Protocol                 = 0x00,\r
+                               \r
+                       .InterfaceStrIndex        = NO_DESCRIPTOR                       \r
+               },\r
+       \r
+       .AudioControlInterface_SPC = \r
+               {\r
+                       .Header                   = {.Size = sizeof(USB_AudioInterface_AC_t), .Type = DTYPE_AudioInterface},\r
+                       .Subtype                  = DSUBTYPE_Header,\r
+                       \r
+                       .ACSpecification          = VERSION_BCD(01.00),\r
+                       .TotalLength              = (sizeof(USB_AudioInterface_AC_t) +\r
+                                                    sizeof(USB_AudioInputTerminal_t) +\r
+                                                                            sizeof(USB_AudioOutputTerminal_t)),\r
+                       \r
+                       .InCollection             = 1,\r
+                       .InterfaceNumbers         = {1},                        \r
+               },\r
+\r
+       .InputTerminal = \r
+               {\r
+                       .Header                   = {.Size = sizeof(USB_AudioInputTerminal_t), .Type = DTYPE_AudioInterface},\r
+                       .Subtype                  = DSUBTYPE_InputTerminal,\r
+               \r
+                       .TerminalID               = 0x01,\r
+                       .TerminalType             = TERMINAL_IN_MIC,\r
+                       .AssociatedOutputTerminal = 0x00,\r
+                       \r
+                       .TotalChannels            = 1,\r
+                       .ChannelConfig            = 0,\r
+                       \r
+                       .ChannelStrIndex          = NO_DESCRIPTOR,\r
+                       .TerminalStrIndex         = NO_DESCRIPTOR\r
+               },\r
+\r
+       .OutputTerminal = \r
+               {\r
+                       .Header                   = {.Size = sizeof(USB_AudioOutputTerminal_t), .Type = DTYPE_AudioInterface},\r
+                       .Subtype                  = DSUBTYPE_OutputTerminal,\r
+               \r
+                       .TerminalID               = 0x02,\r
+                       .TerminalType             = TERMINAL_STREAMING,\r
+                       .AssociatedInputTerminal  = 0x00,\r
+                       \r
+                       .SourceID                 = 0x01,\r
+                       \r
+                       .TerminalStrIndex         = NO_DESCRIPTOR                       \r
+               },\r
+\r
+       .AudioStreamInterface_Alt0 = \r
+               {\r
+                       .Header                   = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},\r
+\r
+                       .InterfaceNumber          = 1,\r
+                       .AlternateSetting         = 0,\r
+                       \r
+                       .TotalEndpoints           = 0,\r
+                               \r
+                       .Class                    = 0x01,\r
+                       .SubClass                 = 0x02,\r
+                       .Protocol                 = 0x00,\r
+                               \r
+                       .InterfaceStrIndex        = NO_DESCRIPTOR\r
+               },\r
+\r
+       .AudioStreamInterface_Alt1 = \r
+               {\r
+                       .Header                   = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},\r
+\r
+                       .InterfaceNumber          = 1,\r
+                       .AlternateSetting         = 1,\r
+                       \r
+                       .TotalEndpoints           = 1,\r
+                               \r
+                       .Class                    = 0x01,\r
+                       .SubClass                 = 0x02,\r
+                       .Protocol                 = 0x00,\r
+                               \r
+                       .InterfaceStrIndex        = NO_DESCRIPTOR\r
+               },\r
+               \r
+       .AudioStreamInterface_SPC = \r
+               {\r
+                       .Header                   = {.Size = sizeof(USB_AudioInterface_AS_t), .Type = DTYPE_AudioInterface},\r
+                       .Subtype                  = DSUBTYPE_General,\r
+                       \r
+                       .TerminalLink             = 0x02,\r
+                       \r
+                       .FrameDelay               = 1,\r
+                       .AudioFormat              = 0x0001\r
+               },\r
+               \r
+       .AudioFormat = \r
+               {\r
+                       .Header                   = {.Size = sizeof(USB_AudioFormat_t), .Type = DTYPE_AudioInterface},\r
+                       .Subtype                  = DSUBTYPE_Format,\r
+\r
+                       .FormatType               = 0x01,\r
+                       .Channels                 = 0x01,\r
+                       \r
+                       .SubFrameSize             = 0x02,\r
+                       .BitResolution            = 16,\r
+                       .SampleFrequencyType      = (sizeof(ConfigurationDescriptor.AudioFormat.SampleFrequencies) / sizeof(AudioSampleFreq_t)),\r
+               \r
+                       .SampleFrequencies        = {SAMPLE_FREQ(AUDIO_SAMPLE_FREQUENCY)}\r
+               },\r
+       \r
+       .AudioEndpoint = \r
+               {\r
+                       .Endpoint = \r
+                               {\r
+                                       .Header              = {.Size = sizeof(USB_AudioStreamEndpoint_Std_t), .Type = DTYPE_Endpoint},\r
+\r
+                                       .EndpointAddress     = (ENDPOINT_DESCRIPTOR_DIR_IN | AUDIO_STREAM_EPNUM),\r
+                                       .Attributes          = (EP_TYPE_ISOCHRONOUS | ENDPOINT_ATTR_SYNC | ENDPOINT_USAGE_DATA),\r
+                                       .EndpointSize        = AUDIO_STREAM_EPSIZE,\r
+                                       .PollingIntervalMS   = 1\r
+                               },\r
+                       \r
+                       .Refresh                  = 0,\r
+                       .SyncEndpointNumber       = 0\r
+               },\r
+               \r
+       .AudioEndpoint_SPC = \r
+               {\r
+                       .Header                   = {.Size = sizeof(USB_AudioStreamEndpoint_Spc_t), .Type = DTYPE_AudioEndpoint},\r
+                       .Subtype                  = DSUBTYPE_General,\r
+                       \r
+                       .Attributes               = 0x00,\r
+                       \r
+                       .LockDelayUnits           = 0x00,\r
+                       .LockDelay                = 0x0000\r
+               }\r
+};\r
+\r
+/** Language descriptor structure. This descriptor, located in FLASH memory, is returned when the host requests\r
+ *  the string descriptor with index 0 (the first index). It is actually an array of 16-bit integers, which indicate\r
+ *  via the language ID table available at USB.org what languages the device supports for its string descriptors.\r
+ */\r
+USB_Descriptor_String_t PROGMEM LanguageString =\r
+{\r
+       .Header                 = {.Size = USB_STRING_LEN(1), .Type = DTYPE_String},\r
+               \r
+       .UnicodeString          = {LANGUAGE_ID_ENG}\r
+};\r
+\r
+/** Manufacturer descriptor string. This is a Unicode string containing the manufacturer's details in human readable\r
+ *  form, and is read out upon request by the host when the appropriate string ID is requested, listed in the Device\r
+ *  Descriptor.\r
+ */\r
+USB_Descriptor_String_t PROGMEM ManufacturerString =\r
+{\r
+       .Header                 = {.Size = USB_STRING_LEN(11), .Type = DTYPE_String},\r
+               \r
+       .UnicodeString          = L"Dean Camera"\r
+};\r
+\r
+/** Product descriptor string. This is a Unicode string containing the product's details in human readable form,\r
+ *  and is read out upon request by the host when the appropriate string ID is requested, listed in the Device\r
+ *  Descriptor.\r
+ */\r
+USB_Descriptor_String_t PROGMEM ProductString =\r
+{\r
+       .Header                 = {.Size = USB_STRING_LEN(18), .Type = DTYPE_String},\r
+               \r
+       .UnicodeString          = L"LUFA Audio In Demo"\r
+};\r
+\r
+/** This function is called by the library when in device mode, and must be overridden (see library "USB Descriptors"\r
+ *  documentation) by the application code so that the address and size of a requested descriptor can be given\r
+ *  to the USB library. When the device receives a Get Descriptor request on the control endpoint, this function\r
+ *  is called so that the descriptor details can be passed back and the appropriate descriptor sent back to the\r
+ *  USB host.\r
+ */\r
+uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
+{\r
+       const uint8_t  DescriptorType   = (wValue >> 8);\r
+       const uint8_t  DescriptorNumber = (wValue & 0xFF);\r
+\r
+       void*    Address = NULL;\r
+       uint16_t Size    = NO_DESCRIPTOR;\r
+\r
+       switch (DescriptorType)\r
+       {\r
+               case DTYPE_Device:\r
+                       Address = (void*)&DeviceDescriptor;\r
+                       Size    = sizeof(USB_Descriptor_Device_t);\r
+                       break;\r
+               case DTYPE_Configuration: \r
+                       Address = (void*)&ConfigurationDescriptor;\r
+                       Size    = sizeof(USB_Descriptor_Configuration_t);\r
+                       break;\r
+               case DTYPE_String: \r
+                       switch (DescriptorNumber)\r
+                       {\r
+                               case 0x00: \r
+                                       Address = (void*)&LanguageString;\r
+                                       Size    = pgm_read_byte(&LanguageString.Header.Size);\r
+                                       break;\r
+                               case 0x01: \r
+                                       Address = (void*)&ManufacturerString;\r
+                                       Size    = pgm_read_byte(&ManufacturerString.Header.Size);\r
+                                       break;\r
+                               case 0x02: \r
+                                       Address = (void*)&ProductString;\r
+                                       Size    = pgm_read_byte(&ProductString.Header.Size);\r
+                                       break;\r
+                       }\r
+                       \r
+                       break;\r
+       }\r
+       \r
+       *DescriptorAddress = Address;\r
+       return Size;\r
+}\r
diff --git a/Demos/Device/LowLevel/AudioInput/Descriptors.h b/Demos/Device/LowLevel/AudioInput/Descriptors.h
new file mode 100644 (file)
index 0000000..c2b4b05
--- /dev/null
@@ -0,0 +1,322 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  Header file for Descriptors.c.\r
+ */\r
\r
+#ifndef _DESCRIPTORS_H_\r
+#define _DESCRIPTORS_H_\r
+\r
+       /* Includes: */\r
+               #include <LUFA/Drivers/USB/USB.h>\r
+\r
+               #include <avr/pgmspace.h>\r
+\r
+       /* Macros: */\r
+               /** Descriptor header constant to indicate a Audio class interface descriptor. */\r
+               #define DTYPE_AudioInterface         0x24\r
+\r
+               /** Descriptor header constant to indicate a Audio class endpoint descriptor. */\r
+               #define DTYPE_AudioEndpoint          0x25\r
+\r
+               /** Audio class descriptor subtype value for a Audio class specific header descriptor. */\r
+               #define DSUBTYPE_Header              0x01\r
+\r
+               /** Audio class descriptor subtype value for an Output Terminal Audio class specific descriptor. */\r
+               #define DSUBTYPE_InputTerminal       0x02\r
+\r
+               /** Audio class descriptor subtype value for an Input Terminal Audio class specific descriptor. */\r
+               #define DSUBTYPE_OutputTerminal      0x03\r
+\r
+               /** Audio class descriptor subtype value for a Feature Unit Audio class specific descriptor. */\r
+               #define DSUBTYPE_FeatureUnit         0x06\r
+\r
+               /** Audio class descriptor subtype value for a general Audio class specific descriptor. */\r
+               #define DSUBTYPE_General             0x01\r
+\r
+               /** Audio class descriptor subtype value for an Audio class specific descriptor indicating the format of an audio stream. */\r
+               #define DSUBTYPE_Format              0x02\r
+               \r
+               //@{\r
+               /** Supported channel mask for an Audio class terminal descriptor. See the Audio class specification for more details. */\r
+\r
+               #define CHANNEL_LEFT_FRONT           (1 << 0)\r
+               #define CHANNEL_RIGHT_FRONT          (1 << 1)\r
+               #define CHANNEL_CENTER_FRONT         (1 << 2)\r
+               #define CHANNEL_LOW_FREQ_ENHANCE     (1 << 3)\r
+               #define CHANNEL_LEFT_SURROUND        (1 << 4)\r
+               #define CHANNEL_RIGHT_SURROUND       (1 << 5)\r
+               #define CHANNEL_LEFT_OF_CENTER       (1 << 6)\r
+               #define CHANNEL_RIGHT_OF_CENTER      (1 << 7)\r
+               #define CHANNEL_SURROUND             (1 << 8)\r
+               #define CHANNEL_SIDE_LEFT            (1 << 9)\r
+               #define CHANNEL_SIDE_RIGHT           (1 << 10)\r
+               #define CHANNEL_TOP                  (1 << 11)\r
+               //@}\r
+\r
+               //@{\r
+               /** Supported feature mask for an Audio class feature unit descriptor. See the Audio class specification for more details. */\r
+\r
+               #define FEATURE_MUTE                 (1 << 0)\r
+               #define FEATURE_VOLUME               (1 << 1)\r
+               #define FEATURE_BASS                 (1 << 2)\r
+               #define FEATURE_MID                  (1 << 3)\r
+               #define FEATURE_TREBLE               (1 << 4)\r
+               #define FEATURE_GRAPHIC_EQUALIZER    (1 << 5)\r
+               #define FEATURE_AUTOMATIC_GAIN       (1 << 6)\r
+               #define FEATURE_DELAY                (1 << 7)\r
+               #define FEATURE_BASS_BOOST           (1 << 8)\r
+               #define FEATURE_BASS_LOUDNESS        (1 << 9)\r
+               //@}\r
+\r
+               //@{\r
+               /** Terminal type constant for an Audio class terminal descriptor. See the Audio class specification for more details. */\r
+               \r
+               #define TERMINAL_UNDEFINED           0x0100\r
+               #define TERMINAL_STREAMING           0x0101\r
+               #define TERMINAL_VENDOR              0x01FF\r
+               #define TERMINAL_IN_UNDEFINED        0x0200\r
+               #define TERMINAL_IN_MIC              0x0201\r
+               #define TERMINAL_IN_DESKTOP_MIC      0x0202\r
+               #define TERMINAL_IN_PERSONAL_MIC     0x0203\r
+               #define TERMINAL_IN_OMNIDIR_MIC      0x0204\r
+               #define TERMINAL_IN_MIC_ARRAY        0x0205\r
+               #define TERMINAL_IN_PROCESSING_MIC   0x0206\r
+               #define TERMINAL_IN_OUT_UNDEFINED    0x0300\r
+               #define TERMINAL_OUT_SPEAKER         0x0301\r
+               #define TERMINAL_OUT_HEADPHONES      0x0302\r
+               #define TERMINAL_OUT_HEAD_MOUNTED    0x0303\r
+               #define TERMINAL_OUT_DESKTOP         0x0304\r
+               #define TERMINAL_OUT_ROOM            0x0305\r
+               #define TERMINAL_OUT_COMMUNICATION   0x0306\r
+               #define TERMINAL_OUT_LOWFREQ         0x0307\r
+               //@}\r
+\r
+               /** Convenience macro, to fill a 24-bit AudioSampleFreq_t structure with the given sample rate as a 24-bit number.\r
+                *\r
+                *  \param freq  Required audio sampling frequency in HZ\r
+                */\r
+               #define SAMPLE_FREQ(freq)  {LowWord: ((uint32_t)freq & 0x00FFFF), HighByte: (((uint32_t)freq >> 16) & 0x0000FF)}\r
+               \r
+               /** Mask for the attributes parameter of an Audio class specific Endpoint descriptor, indicating that the endpoint\r
+                *  accepts only filled endpoint packets of audio samples.\r
+                */\r
+               #define EP_ACCEPTS_ONLY_FULL_PACKETS (1 << 7)\r
+\r
+               /** Mask for the attributes parameter of an Audio class specific Endpoint descriptor, indicating that the endpoint\r
+                *  will accept partially filled endpoint packets of audio samples.\r
+                */\r
+               #define EP_ACCEPTS_SMALL_PACKETS     (0 << 7)\r
+\r
+               #if defined(USB_FULL_CONTROLLER) || defined(__DOXYGEN__)\r
+                       /** Endpoint number of the Audio isochronous streaming data endpoint. */\r
+                       #define AUDIO_STREAM_EPNUM       1\r
+               #else\r
+                       #define AUDIO_STREAM_EPNUM       3              \r
+               #endif\r
+               \r
+               /** Endpoint size in bytes of the Audio isochronous streaming data endpoint. The Windows audio stack requires\r
+                *  at least 192 bytes for correct output, thus the smaller 128 byte maximum endpoint size on some of the smaller\r
+                *  USB AVR models will result in unavoidable distorted output.\r
+                */\r
+               #define AUDIO_STREAM_EPSIZE          ENDPOINT_MAX_SIZE(AUDIO_STREAM_EPNUM)\r
+               \r
+               /** Sample frequency of the data being transmitted through the streaming endpoint. */\r
+               #define AUDIO_SAMPLE_FREQUENCY       48000\r
+               \r
+       /* Type Defines: */\r
+               /** Type define for an Audio class specific interface descriptor. This follows a regular interface descriptor to\r
+                *  supply extra information about the audio device's layout to the host. See the USB Audio specification for more\r
+                *  details.\r
+                */\r
+               typedef struct\r
+               {\r
+                       USB_Descriptor_Header_t   Header; /**< Regular descriptor header containing the descriptor's type and length */\r
+                       uint8_t                   Subtype; /**< Sub type value used to distinguish between audio class specific descriptors */\r
+\r
+                       uint16_t                  ACSpecification; /**< Binary coded decimal value, indicating the supported Audio Class specification version */\r
+                       uint16_t                  TotalLength; /**< Total length of the Audio class specific descriptors, including this descriptor */\r
+                       \r
+                       uint8_t                   InCollection; /**< Total number of audio class interfaces within this device */\r
+                       uint8_t                   InterfaceNumbers[1]; /**< Interface numbers of each audio interface */\r
+               } USB_AudioInterface_AC_t;\r
+               \r
+               /** Type define for an Audio class specific Feature Unit descriptor. This indicates to the host what features\r
+                *  are present in the device's audio stream for basic control, such as per-channel volume. See the USB Audio\r
+                *  specification for more details.\r
+                */\r
+               typedef struct\r
+               {\r
+                       USB_Descriptor_Header_t   Header; /**< Regular descriptor header containing the descriptor's type and length */\r
+                       uint8_t                   Subtype; /**< Sub type value used to distinguish between audio class specific descriptors */\r
+                       \r
+                       uint8_t                   UnitID; /**< ID value of this feature unit - must be a unique value within the device */\r
+                       uint8_t                   SourceID; /**< Source ID value of the audio source input into this feature unit */\r
+                       \r
+                       uint8_t                   ControlSize; /**< Size of each element in the ChanelControlls array */\r
+                       uint8_t                   ChannelControls[3]; /**< Feature masks for the control channel, and each separate audio channel */\r
+                       \r
+                       uint8_t                   FeatureUnitStrIndex; /**< Index of a string descriptor describing this descriptor within the device */\r
+               } USB_AudioFeatureUnit_t;\r
+\r
+               /** Type define for an Audio class specific input terminal descriptor. This indicates to the host that the device\r
+                *  contains an input audio source, either from a physical terminal on the device, or a logical terminal (for example,\r
+                *  a USB endpoint). See the USB Audio specification for more details.\r
+                */\r
+               typedef struct\r
+               {\r
+                       USB_Descriptor_Header_t   Header; /**< Regular descriptor header containing the descriptor's type and length */\r
+                       uint8_t                   Subtype; /**< Sub type value used to distinguish between audio class specific descriptors */\r
+               \r
+                       uint8_t                   TerminalID; /**< ID value of this terminal unit - must be a unique value within the device */\r
+                       uint16_t                  TerminalType; /**< Type of terminal, a TERMINAL_* mask */\r
+                       uint8_t                   AssociatedOutputTerminal; /**< ID of associated output terminal, for physically grouped terminals\r
+                                                                            *   such as the speaker and microphone of a phone handset\r
+                                                                            */\r
+                       uint8_t                   TotalChannels; /**< Total number of separate audio channels within this interface (right, left, etc.) */\r
+                       uint16_t                  ChannelConfig; /**< CHANNEL_* masks indicating what channel layout is supported by this terminal */\r
+                       \r
+                       uint8_t                   ChannelStrIndex; /**< Index of a string descriptor describing this channel within the device */\r
+                       uint8_t                   TerminalStrIndex; /**< Index of a string descriptor describing this descriptor within the device */\r
+               } USB_AudioInputTerminal_t;\r
+\r
+               /** Type define for an Audio class specific output terminal descriptor. This indicates to the host that the device\r
+                *  contains an output audio sink, either to a physical terminal on the device, or a logical terminal (for example,\r
+                *  a USB endpoint). See the USB Audio specification for more details.\r
+                */\r
+               typedef struct\r
+               {\r
+                       USB_Descriptor_Header_t   Header; /**< Regular descriptor header containing the descriptor's type and length */\r
+                       uint8_t                   Subtype; /**< Sub type value used to distinguish between audio class specific descriptors */\r
+               \r
+                       uint8_t                   TerminalID; /**< ID value of this terminal unit - must be a unique value within the device */\r
+                       uint16_t                  TerminalType; /**< Type of terminal, a TERMINAL_* mask */\r
+                       uint8_t                   AssociatedInputTerminal; /**< ID of associated input terminal, for physically grouped terminals\r
+                                                                           *   such as the speaker and microphone of a phone handset\r
+                                                                           */\r
+                       uint8_t                   SourceID; /**< ID value of the unit this terminal's audio is sourced from */\r
+                       \r
+                       uint8_t                   TerminalStrIndex; /**< Index of a string descriptor describing this descriptor within the device */\r
+               } USB_AudioOutputTerminal_t;\r
+               \r
+               /** Type define for an Audio class specific streaming interface descriptor. This indicates to the host\r
+                *  how audio streams within the device are formatted. See the USB Audio specification for more details.\r
+                */\r
+               typedef struct\r
+               {\r
+                       USB_Descriptor_Header_t   Header; /**< Regular descriptor header containing the descriptor's type and length */\r
+                       uint8_t                   Subtype; /**< Sub type value used to distinguish between audio class specific descriptors */\r
+                       \r
+                       uint8_t                   TerminalLink; /**< ID value of the output terminal this descriptor is describing */\r
+                       \r
+                       uint8_t                   FrameDelay; /**< Delay in frames resulting from the complete sample processing from input to output */\r
+                       uint16_t                  AudioFormat; /**< Format of the audio stream, see Audio Device Formats specification */\r
+               } USB_AudioInterface_AS_t;\r
+               \r
+               /** Type define for a 24bit audio sample frequency structure. GCC does not contain a built in 24bit datatype,\r
+                *  this this structure is used to build up the value instead. Fill this structure with the SAMPLE_FREQ() macro.\r
+                */\r
+               typedef struct\r
+               {\r
+                       uint16_t                  LowWord; /**< Low 16 bits of the 24-bit value */\r
+                       uint8_t                   HighByte; /**< Upper 8 bits of the 24-bit value */\r
+               } AudioSampleFreq_t;\r
+\r
+               /** Type define for an Audio class specific audio format descriptor. This is used to give the host full details\r
+                *  about the number of channels, the sample resolution, acceptable sample frequencies and encoding method used\r
+                *  in the device's audio streams. See the USB Audio specification for more details.\r
+                */\r
+               typedef struct\r
+               {\r
+                       USB_Descriptor_Header_t   Header; /**< Regular descriptor header containing the descriptor's type and length */\r
+                       uint8_t                   Subtype; /**< Sub type value used to distinguish between audio class specific descriptors */\r
+\r
+                       uint8_t                   FormatType; /**< Format of the audio stream, see Audio Device Formats specification */\r
+                       uint8_t                   Channels; /**< Total number of discrete channels in the stream */\r
+                       \r
+                       uint8_t                   SubFrameSize; /**< Size in bytes of each channel's sample data in the stream */\r
+                       uint8_t                   BitResolution; /**< Bits of resolution of each channel's samples in the stream */\r
+\r
+                       uint8_t                   SampleFrequencyType; /**< Total number of sample frequencies supported by the device */                       \r
+                       AudioSampleFreq_t         SampleFrequencies[1]; /**< Sample frequencies supported by the device */\r
+               } USB_AudioFormat_t;\r
+               \r
+               /** Type define for an Audio class specific endpoint descriptor. This contains a regular endpoint \r
+                *  descriptor with a few Audio-class specific extensions. See the USB Audio specification for more details.\r
+                */\r
+               typedef struct\r
+               {\r
+                       USB_Descriptor_Endpoint_t Endpoint; /**< Standard endpoint descriptor describing the audio endpoint */\r
+\r
+                       uint8_t                   Refresh; /**< Always set to zero */\r
+                       uint8_t                   SyncEndpointNumber; /**< Endpoint address to send synchronisation information to, if needed (zero otherwise) */\r
+               } USB_AudioStreamEndpoint_Std_t;\r
+                                       \r
+               /** Type define for an Audio class specific extended endpoint descriptor. This contains extra information\r
+                *  on the usage of endpoints used to stream audio in and out of the USB Audio device, and follows an Audio\r
+                *  class specific extended endpoint descriptor. See the USB Audio specification for more details.\r
+                */\r
+               typedef struct\r
+               {\r
+                       USB_Descriptor_Header_t   Header; /**< Regular descriptor header containing the descriptor's type and length */\r
+                       uint8_t                   Subtype; /**< Sub type value used to distinguish between audio class specific descriptors */\r
+                       \r
+                       uint8_t                   Attributes; /**< Audio class specific endpoint attributes, such as ACCEPTS_SMALL_PACKETS */\r
+\r
+                       uint8_t                   LockDelayUnits; /**< Units used for the LockDelay field, see Audio class specification */\r
+                       uint16_t                  LockDelay; /**< Time required to internally lock endpoint's internal clock recovery circuitry */\r
+               } USB_AudioStreamEndpoint_Spc_t;\r
+               \r
+               /** Type define for the device configuration descriptor structure. This must be defined in the\r
+                *  application code, as the configuration descriptor contains several sub-descriptors which\r
+                *  vary between devices, and which describe the device's usage to the host.\r
+                */\r
+               typedef struct\r
+               {\r
+                       USB_Descriptor_Configuration_Header_t Config;\r
+                       USB_Descriptor_Interface_t            AudioControlInterface;\r
+                       USB_AudioInterface_AC_t               AudioControlInterface_SPC;\r
+                       USB_AudioInputTerminal_t              InputTerminal;\r
+                       USB_AudioOutputTerminal_t             OutputTerminal;\r
+                       USB_Descriptor_Interface_t            AudioStreamInterface_Alt0;\r
+                       USB_Descriptor_Interface_t            AudioStreamInterface_Alt1;\r
+                       USB_AudioInterface_AS_t               AudioStreamInterface_SPC;\r
+                       USB_AudioFormat_t                     AudioFormat;\r
+                       USB_AudioStreamEndpoint_Std_t         AudioEndpoint;\r
+                       USB_AudioStreamEndpoint_Spc_t         AudioEndpoint_SPC;\r
+               } USB_Descriptor_Configuration_t;\r
+               \r
+       /* Function Prototypes: */\r
+               uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
+                                                   ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);\r
+\r
+#endif\r
diff --git a/Demos/Device/LowLevel/AudioInput/Doxygen.conf b/Demos/Device/LowLevel/AudioInput/Doxygen.conf
new file mode 100644 (file)
index 0000000..f84efb7
--- /dev/null
@@ -0,0 +1,1485 @@
+# Doxyfile 1.5.7.1\r
+\r
+# This file describes the settings to be used by the documentation system\r
+# doxygen (www.doxygen.org) for a project\r
+#\r
+# All text after a hash (#) is considered a comment and will be ignored\r
+# The format is:\r
+#       TAG = value [value, ...]\r
+# For lists items can also be appended using:\r
+#       TAG += value [value, ...]\r
+# Values that contain spaces should be placed between quotes (" ")\r
+\r
+#---------------------------------------------------------------------------\r
+# Project related configuration options\r
+#---------------------------------------------------------------------------\r
+\r
+# This tag specifies the encoding used for all characters in the config file \r
+# that follow. The default is UTF-8 which is also the encoding used for all \r
+# text before the first occurrence of this tag. Doxygen uses libiconv (or the \r
+# iconv built into libc) for the transcoding. See \r
+# http://www.gnu.org/software/libiconv for the list of possible encodings.\r
+\r
+DOXYFILE_ENCODING      = UTF-8\r
+\r
+# The PROJECT_NAME tag is a single word (or a sequence of words surrounded \r
+# by quotes) that should identify the project.\r
+\r
+PROJECT_NAME           = "LUFA Library - Audio Input Device Demo"\r
+\r
+# The PROJECT_NUMBER tag can be used to enter a project or revision number. \r
+# This could be handy for archiving the generated documentation or \r
+# if some version control system is used.\r
+\r
+PROJECT_NUMBER         = 0.0.0\r
+\r
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) \r
+# base path where the generated documentation will be put. \r
+# If a relative path is entered, it will be relative to the location \r
+# where doxygen was started. If left blank the current directory will be used.\r
+\r
+OUTPUT_DIRECTORY       = ./Documentation/\r
+\r
+# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create \r
+# 4096 sub-directories (in 2 levels) under the output directory of each output \r
+# format and will distribute the generated files over these directories. \r
+# Enabling this option can be useful when feeding doxygen a huge amount of \r
+# source files, where putting all generated files in the same directory would \r
+# otherwise cause performance problems for the file system.\r
+\r
+CREATE_SUBDIRS         = YES\r
+\r
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all \r
+# documentation generated by doxygen is written. Doxygen will use this \r
+# information to generate all constant output in the proper language. \r
+# The default language is English, other supported languages are: \r
+# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, \r
+# Croatian, Czech, Danish, Dutch, Farsi, Finnish, French, German, Greek, \r
+# Hungarian, Italian, Japanese, Japanese-en (Japanese with English messages), \r
+# Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, Polish, \r
+# Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, Slovene, \r
+# Spanish, Swedish, and Ukrainian.\r
+\r
+OUTPUT_LANGUAGE        = English\r
+\r
+# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will \r
+# include brief member descriptions after the members that are listed in \r
+# the file and class documentation (similar to JavaDoc). \r
+# Set to NO to disable this.\r
+\r
+BRIEF_MEMBER_DESC      = YES\r
+\r
+# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend \r
+# the brief description of a member or function before the detailed description. \r
+# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the \r
+# brief descriptions will be completely suppressed.\r
+\r
+REPEAT_BRIEF           = YES\r
+\r
+# This tag implements a quasi-intelligent brief description abbreviator \r
+# that is used to form the text in various listings. Each string \r
+# in this list, if found as the leading text of the brief description, will be \r
+# stripped from the text and the result after processing the whole list, is \r
+# used as the annotated text. Otherwise, the brief description is used as-is. \r
+# If left blank, the following values are used ("$name" is automatically \r
+# replaced with the name of the entity): "The $name class" "The $name widget" \r
+# "The $name file" "is" "provides" "specifies" "contains" \r
+# "represents" "a" "an" "the"\r
+\r
+ABBREVIATE_BRIEF       = "The $name class" \\r
+                         "The $name widget" \\r
+                         "The $name file" \\r
+                         is \\r
+                         provides \\r
+                         specifies \\r
+                         contains \\r
+                         represents \\r
+                         a \\r
+                         an \\r
+                         the\r
+\r
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then \r
+# Doxygen will generate a detailed section even if there is only a brief \r
+# description.\r
+\r
+ALWAYS_DETAILED_SEC    = NO\r
+\r
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all \r
+# inherited members of a class in the documentation of that class as if those \r
+# members were ordinary class members. Constructors, destructors and assignment \r
+# operators of the base classes will not be shown.\r
+\r
+INLINE_INHERITED_MEMB  = NO\r
+\r
+# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full \r
+# path before files name in the file list and in the header files. If set \r
+# to NO the shortest path that makes the file name unique will be used.\r
+\r
+FULL_PATH_NAMES        = YES\r
+\r
+# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag \r
+# can be used to strip a user-defined part of the path. Stripping is \r
+# only done if one of the specified strings matches the left-hand part of \r
+# the path. The tag can be used to show relative paths in the file list. \r
+# If left blank the directory from which doxygen is run is used as the \r
+# path to strip.\r
+\r
+STRIP_FROM_PATH        = \r
+\r
+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of \r
+# the path mentioned in the documentation of a class, which tells \r
+# the reader which header file to include in order to use a class. \r
+# If left blank only the name of the header file containing the class \r
+# definition is used. Otherwise one should specify the include paths that \r
+# are normally passed to the compiler using the -I flag.\r
+\r
+STRIP_FROM_INC_PATH    = \r
+\r
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter \r
+# (but less readable) file names. This can be useful is your file systems \r
+# doesn't support long names like on DOS, Mac, or CD-ROM.\r
+\r
+SHORT_NAMES            = YES\r
+\r
+# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen \r
+# will interpret the first line (until the first dot) of a JavaDoc-style \r
+# comment as the brief description. If set to NO, the JavaDoc \r
+# comments will behave just like regular Qt-style comments \r
+# (thus requiring an explicit @brief command for a brief description.)\r
+\r
+JAVADOC_AUTOBRIEF      = NO\r
+\r
+# If the QT_AUTOBRIEF tag is set to YES then Doxygen will \r
+# interpret the first line (until the first dot) of a Qt-style \r
+# comment as the brief description. If set to NO, the comments \r
+# will behave just like regular Qt-style comments (thus requiring \r
+# an explicit \brief command for a brief description.)\r
+\r
+QT_AUTOBRIEF           = NO\r
+\r
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen \r
+# treat a multi-line C++ special comment block (i.e. a block of //! or /// \r
+# comments) as a brief description. This used to be the default behaviour. \r
+# The new default is to treat a multi-line C++ comment block as a detailed \r
+# description. Set this tag to YES if you prefer the old behaviour instead.\r
+\r
+MULTILINE_CPP_IS_BRIEF = NO\r
+\r
+# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented \r
+# member inherits the documentation from any documented member that it \r
+# re-implements.\r
+\r
+INHERIT_DOCS           = YES\r
+\r
+# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce \r
+# a new page for each member. If set to NO, the documentation of a member will \r
+# be part of the file/class/namespace that contains it.\r
+\r
+SEPARATE_MEMBER_PAGES  = NO\r
+\r
+# The TAB_SIZE tag can be used to set the number of spaces in a tab. \r
+# Doxygen uses this value to replace tabs by spaces in code fragments.\r
+\r
+TAB_SIZE               = 4\r
+\r
+# This tag can be used to specify a number of aliases that acts \r
+# as commands in the documentation. An alias has the form "name=value". \r
+# For example adding "sideeffect=\par Side Effects:\n" will allow you to \r
+# put the command \sideeffect (or @sideeffect) in the documentation, which \r
+# will result in a user-defined paragraph with heading "Side Effects:". \r
+# You can put \n's in the value part of an alias to insert newlines.\r
+\r
+ALIASES                = \r
+\r
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C \r
+# sources only. Doxygen will then generate output that is more tailored for C. \r
+# For instance, some of the names that are used will be different. The list \r
+# of all members will be omitted, etc.\r
+\r
+OPTIMIZE_OUTPUT_FOR_C  = YES\r
+\r
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java \r
+# sources only. Doxygen will then generate output that is more tailored for \r
+# Java. For instance, namespaces will be presented as packages, qualified \r
+# scopes will look different, etc.\r
+\r
+OPTIMIZE_OUTPUT_JAVA   = NO\r
+\r
+# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran \r
+# sources only. Doxygen will then generate output that is more tailored for \r
+# Fortran.\r
+\r
+OPTIMIZE_FOR_FORTRAN   = NO\r
+\r
+# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL \r
+# sources. Doxygen will then generate output that is tailored for \r
+# VHDL.\r
+\r
+OPTIMIZE_OUTPUT_VHDL   = NO\r
+\r
+# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want \r
+# to include (a tag file for) the STL sources as input, then you should \r
+# set this tag to YES in order to let doxygen match functions declarations and \r
+# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. \r
+# func(std::string) {}). This also make the inheritance and collaboration \r
+# diagrams that involve STL classes more complete and accurate.\r
+\r
+BUILTIN_STL_SUPPORT    = NO\r
+\r
+# If you use Microsoft's C++/CLI language, you should set this option to YES to\r
+# enable parsing support.\r
+\r
+CPP_CLI_SUPPORT        = NO\r
+\r
+# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. \r
+# Doxygen will parse them like normal C++ but will assume all classes use public \r
+# instead of private inheritance when no explicit protection keyword is present.\r
+\r
+SIP_SUPPORT            = NO\r
+\r
+# For Microsoft's IDL there are propget and propput attributes to indicate getter \r
+# and setter methods for a property. Setting this option to YES (the default) \r
+# will make doxygen to replace the get and set methods by a property in the \r
+# documentation. This will only work if the methods are indeed getting or \r
+# setting a simple type. If this is not the case, or you want to show the \r
+# methods anyway, you should set this option to NO.\r
+\r
+IDL_PROPERTY_SUPPORT   = YES\r
+\r
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC \r
+# tag is set to YES, then doxygen will reuse the documentation of the first \r
+# member in the group (if any) for the other members of the group. By default \r
+# all members of a group must be documented explicitly.\r
+\r
+DISTRIBUTE_GROUP_DOC   = NO\r
+\r
+# Set the SUBGROUPING tag to YES (the default) to allow class member groups of \r
+# the same type (for instance a group of public functions) to be put as a \r
+# subgroup of that type (e.g. under the Public Functions section). Set it to \r
+# NO to prevent subgrouping. Alternatively, this can be done per class using \r
+# the \nosubgrouping command.\r
+\r
+SUBGROUPING            = YES\r
+\r
+# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum \r
+# is documented as struct, union, or enum with the name of the typedef. So \r
+# typedef struct TypeS {} TypeT, will appear in the documentation as a struct \r
+# with name TypeT. When disabled the typedef will appear as a member of a file, \r
+# namespace, or class. And the struct will be named TypeS. This can typically \r
+# be useful for C code in case the coding convention dictates that all compound \r
+# types are typedef'ed and only the typedef is referenced, never the tag name.\r
+\r
+TYPEDEF_HIDES_STRUCT   = NO\r
+\r
+# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to \r
+# determine which symbols to keep in memory and which to flush to disk.\r
+# When the cache is full, less often used symbols will be written to disk.\r
+# For small to medium size projects (<1000 input files) the default value is \r
+# probably good enough. For larger projects a too small cache size can cause \r
+# doxygen to be busy swapping symbols to and from disk most of the time \r
+# causing a significant performance penality. \r
+# If the system has enough physical memory increasing the cache will improve the \r
+# performance by keeping more symbols in memory. Note that the value works on \r
+# a logarithmic scale so increasing the size by one will rougly double the \r
+# memory usage. The cache size is given by this formula: \r
+# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, \r
+# corresponding to a cache size of 2^16 = 65536 symbols\r
+\r
+SYMBOL_CACHE_SIZE      = 0\r
+\r
+#---------------------------------------------------------------------------\r
+# Build related configuration options\r
+#---------------------------------------------------------------------------\r
+\r
+# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in \r
+# documentation are documented, even if no documentation was available. \r
+# Private class members and static file members will be hidden unless \r
+# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES\r
+\r
+EXTRACT_ALL            = YES\r
+\r
+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class \r
+# will be included in the documentation.\r
+\r
+EXTRACT_PRIVATE        = YES\r
+\r
+# If the EXTRACT_STATIC tag is set to YES all static members of a file \r
+# will be included in the documentation.\r
+\r
+EXTRACT_STATIC         = YES\r
+\r
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) \r
+# defined locally in source files will be included in the documentation. \r
+# If set to NO only classes defined in header files are included.\r
+\r
+EXTRACT_LOCAL_CLASSES  = YES\r
+\r
+# This flag is only useful for Objective-C code. When set to YES local \r
+# methods, which are defined in the implementation section but not in \r
+# the interface are included in the documentation. \r
+# If set to NO (the default) only methods in the interface are included.\r
+\r
+EXTRACT_LOCAL_METHODS  = NO\r
+\r
+# If this flag is set to YES, the members of anonymous namespaces will be \r
+# extracted and appear in the documentation as a namespace called \r
+# 'anonymous_namespace{file}', where file will be replaced with the base \r
+# name of the file that contains the anonymous namespace. By default \r
+# anonymous namespace are hidden.\r
+\r
+EXTRACT_ANON_NSPACES   = NO\r
+\r
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all \r
+# undocumented members of documented classes, files or namespaces. \r
+# If set to NO (the default) these members will be included in the \r
+# various overviews, but no documentation section is generated. \r
+# This option has no effect if EXTRACT_ALL is enabled.\r
+\r
+HIDE_UNDOC_MEMBERS     = NO\r
+\r
+# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all \r
+# undocumented classes that are normally visible in the class hierarchy. \r
+# If set to NO (the default) these classes will be included in the various \r
+# overviews. This option has no effect if EXTRACT_ALL is enabled.\r
+\r
+HIDE_UNDOC_CLASSES     = NO\r
+\r
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all \r
+# friend (class|struct|union) declarations. \r
+# If set to NO (the default) these declarations will be included in the \r
+# documentation.\r
+\r
+HIDE_FRIEND_COMPOUNDS  = NO\r
+\r
+# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any \r
+# documentation blocks found inside the body of a function. \r
+# If set to NO (the default) these blocks will be appended to the \r
+# function's detailed documentation block.\r
+\r
+HIDE_IN_BODY_DOCS      = NO\r
+\r
+# The INTERNAL_DOCS tag determines if documentation \r
+# that is typed after a \internal command is included. If the tag is set \r
+# to NO (the default) then the documentation will be excluded. \r
+# Set it to YES to include the internal documentation.\r
+\r
+INTERNAL_DOCS          = NO\r
+\r
+# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate \r
+# file names in lower-case letters. If set to YES upper-case letters are also \r
+# allowed. This is useful if you have classes or files whose names only differ \r
+# in case and if your file system supports case sensitive file names. Windows \r
+# and Mac users are advised to set this option to NO.\r
+\r
+CASE_SENSE_NAMES       = NO\r
+\r
+# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen \r
+# will show members with their full class and namespace scopes in the \r
+# documentation. If set to YES the scope will be hidden.\r
+\r
+HIDE_SCOPE_NAMES       = NO\r
+\r
+# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen \r
+# will put a list of the files that are included by a file in the documentation \r
+# of that file.\r
+\r
+SHOW_INCLUDE_FILES     = YES\r
+\r
+# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] \r
+# is inserted in the documentation for inline members.\r
+\r
+INLINE_INFO            = YES\r
+\r
+# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen \r
+# will sort the (detailed) documentation of file and class members \r
+# alphabetically by member name. If set to NO the members will appear in \r
+# declaration order.\r
+\r
+SORT_MEMBER_DOCS       = YES\r
+\r
+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the \r
+# brief documentation of file, namespace and class members alphabetically \r
+# by member name. If set to NO (the default) the members will appear in \r
+# declaration order.\r
+\r
+SORT_BRIEF_DOCS        = NO\r
+\r
+# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the \r
+# hierarchy of group names into alphabetical order. If set to NO (the default) \r
+# the group names will appear in their defined order.\r
+\r
+SORT_GROUP_NAMES       = NO\r
+\r
+# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be \r
+# sorted by fully-qualified names, including namespaces. If set to \r
+# NO (the default), the class list will be sorted only by class name, \r
+# not including the namespace part. \r
+# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.\r
+# Note: This option applies only to the class list, not to the \r
+# alphabetical list.\r
+\r
+SORT_BY_SCOPE_NAME     = NO\r
+\r
+# The GENERATE_TODOLIST tag can be used to enable (YES) or \r
+# disable (NO) the todo list. This list is created by putting \todo \r
+# commands in the documentation.\r
+\r
+GENERATE_TODOLIST      = NO\r
+\r
+# The GENERATE_TESTLIST tag can be used to enable (YES) or \r
+# disable (NO) the test list. This list is created by putting \test \r
+# commands in the documentation.\r
+\r
+GENERATE_TESTLIST      = NO\r
+\r
+# The GENERATE_BUGLIST tag can be used to enable (YES) or \r
+# disable (NO) the bug list. This list is created by putting \bug \r
+# commands in the documentation.\r
+\r
+GENERATE_BUGLIST       = NO\r
+\r
+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or \r
+# disable (NO) the deprecated list. This list is created by putting \r
+# \deprecated commands in the documentation.\r
+\r
+GENERATE_DEPRECATEDLIST= YES\r
+\r
+# The ENABLED_SECTIONS tag can be used to enable conditional \r
+# documentation sections, marked by \if sectionname ... \endif.\r
+\r
+ENABLED_SECTIONS       = \r
+\r
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines \r
+# the initial value of a variable or define consists of for it to appear in \r
+# the documentation. If the initializer consists of more lines than specified \r
+# here it will be hidden. Use a value of 0 to hide initializers completely. \r
+# The appearance of the initializer of individual variables and defines in the \r
+# documentation can be controlled using \showinitializer or \hideinitializer \r
+# command in the documentation regardless of this setting.\r
+\r
+MAX_INITIALIZER_LINES  = 30\r
+\r
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated \r
+# at the bottom of the documentation of classes and structs. If set to YES the \r
+# list will mention the files that were used to generate the documentation.\r
+\r
+SHOW_USED_FILES        = YES\r
+\r
+# If the sources in your project are distributed over multiple directories \r
+# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy \r
+# in the documentation. The default is NO.\r
+\r
+SHOW_DIRECTORIES       = YES\r
+\r
+# Set the SHOW_FILES tag to NO to disable the generation of the Files page.\r
+# This will remove the Files entry from the Quick Index and from the \r
+# Folder Tree View (if specified). The default is YES.\r
+\r
+SHOW_FILES             = YES\r
+\r
+# Set the SHOW_NAMESPACES tag to NO to disable the generation of the \r
+# Namespaces page.  This will remove the Namespaces entry from the Quick Index\r
+# and from the Folder Tree View (if specified). The default is YES.\r
+\r
+SHOW_NAMESPACES        = YES\r
+\r
+# The FILE_VERSION_FILTER tag can be used to specify a program or script that \r
+# doxygen should invoke to get the current version for each file (typically from \r
+# the version control system). Doxygen will invoke the program by executing (via \r
+# popen()) the command <command> <input-file>, where <command> is the value of \r
+# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file \r
+# provided by doxygen. Whatever the program writes to standard output \r
+# is used as the file version. See the manual for examples.\r
+\r
+FILE_VERSION_FILTER    = \r
+\r
+# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by \r
+# doxygen. The layout file controls the global structure of the generated output files \r
+# in an output format independent way. The create the layout file that represents \r
+# doxygen's defaults, run doxygen with the -l option. You can optionally specify a \r
+# file name after the option, if omitted DoxygenLayout.xml will be used as the name \r
+# of the layout file.\r
+\r
+LAYOUT_FILE            = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to warning and progress messages\r
+#---------------------------------------------------------------------------\r
+\r
+# The QUIET tag can be used to turn on/off the messages that are generated \r
+# by doxygen. Possible values are YES and NO. If left blank NO is used.\r
+\r
+QUIET                  = YES\r
+\r
+# The WARNINGS tag can be used to turn on/off the warning messages that are \r
+# generated by doxygen. Possible values are YES and NO. If left blank \r
+# NO is used.\r
+\r
+WARNINGS               = YES\r
+\r
+# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings \r
+# for undocumented members. If EXTRACT_ALL is set to YES then this flag will \r
+# automatically be disabled.\r
+\r
+WARN_IF_UNDOCUMENTED   = YES\r
+\r
+# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for \r
+# potential errors in the documentation, such as not documenting some \r
+# parameters in a documented function, or documenting parameters that \r
+# don't exist or using markup commands wrongly.\r
+\r
+WARN_IF_DOC_ERROR      = YES\r
+\r
+# This WARN_NO_PARAMDOC option can be abled to get warnings for \r
+# functions that are documented, but have no documentation for their parameters \r
+# or return value. If set to NO (the default) doxygen will only warn about \r
+# wrong or incomplete parameter documentation, but not about the absence of \r
+# documentation.\r
+\r
+WARN_NO_PARAMDOC       = YES\r
+\r
+# The WARN_FORMAT tag determines the format of the warning messages that \r
+# doxygen can produce. The string should contain the $file, $line, and $text \r
+# tags, which will be replaced by the file and line number from which the \r
+# warning originated and the warning text. Optionally the format may contain \r
+# $version, which will be replaced by the version of the file (if it could \r
+# be obtained via FILE_VERSION_FILTER)\r
+\r
+WARN_FORMAT            = "$file:$line: $text"\r
+\r
+# The WARN_LOGFILE tag can be used to specify a file to which warning \r
+# and error messages should be written. If left blank the output is written \r
+# to stderr.\r
+\r
+WARN_LOGFILE           = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the input files\r
+#---------------------------------------------------------------------------\r
+\r
+# The INPUT tag can be used to specify the files and/or directories that contain \r
+# documented source files. You may enter file names like "myfile.cpp" or \r
+# directories like "/usr/src/myproject". Separate the files or directories \r
+# with spaces.\r
+\r
+INPUT                  = ./\r
+\r
+# This tag can be used to specify the character encoding of the source files \r
+# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is \r
+# also the default input encoding. Doxygen uses libiconv (or the iconv built \r
+# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for \r
+# the list of possible encodings.\r
+\r
+INPUT_ENCODING         = UTF-8\r
+\r
+# If the value of the INPUT tag contains directories, you can use the \r
+# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \r
+# and *.h) to filter out the source-files in the directories. If left \r
+# blank the following patterns are tested: \r
+# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx \r
+# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90\r
+\r
+FILE_PATTERNS          = *.h \\r
+                         *.c \\r
+                                                *.txt\r
+\r
+# The RECURSIVE tag can be used to turn specify whether or not subdirectories \r
+# should be searched for input files as well. Possible values are YES and NO. \r
+# If left blank NO is used.\r
+\r
+RECURSIVE              = YES\r
+\r
+# The EXCLUDE tag can be used to specify files and/or directories that should \r
+# excluded from the INPUT source files. This way you can easily exclude a \r
+# subdirectory from a directory tree whose root is specified with the INPUT tag.\r
+\r
+EXCLUDE                = \r
+\r
+# The EXCLUDE_SYMLINKS tag can be used select whether or not files or \r
+# directories that are symbolic links (a Unix filesystem feature) are excluded \r
+# from the input.\r
+\r
+EXCLUDE_SYMLINKS       = NO\r
+\r
+# If the value of the INPUT tag contains directories, you can use the \r
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude \r
+# certain files from those directories. Note that the wildcards are matched \r
+# against the file with absolute path, so to exclude all test directories \r
+# for example use the pattern */test/*\r
+\r
+EXCLUDE_PATTERNS       = */LowLevel/USBMode.h\r
+\r
+# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names \r
+# (namespaces, classes, functions, etc.) that should be excluded from the \r
+# output. The symbol name can be a fully qualified name, a word, or if the \r
+# wildcard * is used, a substring. Examples: ANamespace, AClass, \r
+# AClass::ANamespace, ANamespace::*Test\r
+\r
+EXCLUDE_SYMBOLS        = __*\r
+\r
+# The EXAMPLE_PATH tag can be used to specify one or more files or \r
+# directories that contain example code fragments that are included (see \r
+# the \include command).\r
+\r
+EXAMPLE_PATH           = \r
+\r
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the \r
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \r
+# and *.h) to filter out the source-files in the directories. If left \r
+# blank all files are included.\r
+\r
+EXAMPLE_PATTERNS       = *\r
+\r
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be \r
+# searched for input files to be used with the \include or \dontinclude \r
+# commands irrespective of the value of the RECURSIVE tag. \r
+# Possible values are YES and NO. If left blank NO is used.\r
+\r
+EXAMPLE_RECURSIVE      = NO\r
+\r
+# The IMAGE_PATH tag can be used to specify one or more files or \r
+# directories that contain image that are included in the documentation (see \r
+# the \image command).\r
+\r
+IMAGE_PATH             = \r
+\r
+# The INPUT_FILTER tag can be used to specify a program that doxygen should \r
+# invoke to filter for each input file. Doxygen will invoke the filter program \r
+# by executing (via popen()) the command <filter> <input-file>, where <filter> \r
+# is the value of the INPUT_FILTER tag, and <input-file> is the name of an \r
+# input file. Doxygen will then use the output that the filter program writes \r
+# to standard output.  If FILTER_PATTERNS is specified, this tag will be \r
+# ignored.\r
+\r
+INPUT_FILTER           = \r
+\r
+# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern \r
+# basis.  Doxygen will compare the file name with each pattern and apply the \r
+# filter if there is a match.  The filters are a list of the form: \r
+# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further \r
+# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER \r
+# is applied to all files.\r
+\r
+FILTER_PATTERNS        = \r
+\r
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using \r
+# INPUT_FILTER) will be used to filter the input files when producing source \r
+# files to browse (i.e. when SOURCE_BROWSER is set to YES).\r
+\r
+FILTER_SOURCE_FILES    = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to source browsing\r
+#---------------------------------------------------------------------------\r
+\r
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will \r
+# be generated. Documented entities will be cross-referenced with these sources. \r
+# Note: To get rid of all source code in the generated output, make sure also \r
+# VERBATIM_HEADERS is set to NO.\r
+\r
+SOURCE_BROWSER         = NO\r
+\r
+# Setting the INLINE_SOURCES tag to YES will include the body \r
+# of functions and classes directly in the documentation.\r
+\r
+INLINE_SOURCES         = NO\r
+\r
+# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct \r
+# doxygen to hide any special comment blocks from generated source code \r
+# fragments. Normal C and C++ comments will always remain visible.\r
+\r
+STRIP_CODE_COMMENTS    = YES\r
+\r
+# If the REFERENCED_BY_RELATION tag is set to YES \r
+# then for each documented function all documented \r
+# functions referencing it will be listed.\r
+\r
+REFERENCED_BY_RELATION = NO\r
+\r
+# If the REFERENCES_RELATION tag is set to YES \r
+# then for each documented function all documented entities \r
+# called/used by that function will be listed.\r
+\r
+REFERENCES_RELATION    = NO\r
+\r
+# If the REFERENCES_LINK_SOURCE tag is set to YES (the default)\r
+# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from\r
+# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will\r
+# link to the source code.  Otherwise they will link to the documentstion.\r
+\r
+REFERENCES_LINK_SOURCE = NO\r
+\r
+# If the USE_HTAGS tag is set to YES then the references to source code \r
+# will point to the HTML generated by the htags(1) tool instead of doxygen \r
+# built-in source browser. The htags tool is part of GNU's global source \r
+# tagging system (see http://www.gnu.org/software/global/global.html). You \r
+# will need version 4.8.6 or higher.\r
+\r
+USE_HTAGS              = NO\r
+\r
+# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen \r
+# will generate a verbatim copy of the header file for each class for \r
+# which an include is specified. Set to NO to disable this.\r
+\r
+VERBATIM_HEADERS       = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the alphabetical class index\r
+#---------------------------------------------------------------------------\r
+\r
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index \r
+# of all compounds will be generated. Enable this if the project \r
+# contains a lot of classes, structs, unions or interfaces.\r
+\r
+ALPHABETICAL_INDEX     = YES\r
+\r
+# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then \r
+# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns \r
+# in which this list will be split (can be a number in the range [1..20])\r
+\r
+COLS_IN_ALPHA_INDEX    = 5\r
+\r
+# In case all classes in a project start with a common prefix, all \r
+# classes will be put under the same header in the alphabetical index. \r
+# The IGNORE_PREFIX tag can be used to specify one or more prefixes that \r
+# should be ignored while generating the index headers.\r
+\r
+IGNORE_PREFIX          = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the HTML output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_HTML tag is set to YES (the default) Doxygen will \r
+# generate HTML output.\r
+\r
+GENERATE_HTML          = YES\r
+\r
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `html' will be used as the default path.\r
+\r
+HTML_OUTPUT            = html\r
+\r
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for \r
+# each generated HTML page (for example: .htm,.php,.asp). If it is left blank \r
+# doxygen will generate files with .html extension.\r
+\r
+HTML_FILE_EXTENSION    = .html\r
+\r
+# The HTML_HEADER tag can be used to specify a personal HTML header for \r
+# each generated HTML page. If it is left blank doxygen will generate a \r
+# standard header.\r
+\r
+HTML_HEADER            = \r
+\r
+# The HTML_FOOTER tag can be used to specify a personal HTML footer for \r
+# each generated HTML page. If it is left blank doxygen will generate a \r
+# standard footer.\r
+\r
+HTML_FOOTER            = \r
+\r
+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading \r
+# style sheet that is used by each HTML page. It can be used to \r
+# fine-tune the look of the HTML output. If the tag is left blank doxygen \r
+# will generate a default style sheet. Note that doxygen will try to copy \r
+# the style sheet file to the HTML output directory, so don't put your own \r
+# stylesheet in the HTML output directory as well, or it will be erased!\r
+\r
+HTML_STYLESHEET        = \r
+\r
+# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, \r
+# files or namespaces will be aligned in HTML using tables. If set to \r
+# NO a bullet list will be used.\r
+\r
+HTML_ALIGN_MEMBERS     = YES\r
+\r
+# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML \r
+# documentation will contain sections that can be hidden and shown after the \r
+# page has loaded. For this to work a browser that supports \r
+# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox \r
+# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari).\r
+\r
+HTML_DYNAMIC_SECTIONS  = YES\r
+\r
+# If the GENERATE_DOCSET tag is set to YES, additional index files \r
+# will be generated that can be used as input for Apple's Xcode 3 \r
+# integrated development environment, introduced with OSX 10.5 (Leopard). \r
+# To create a documentation set, doxygen will generate a Makefile in the \r
+# HTML output directory. Running make will produce the docset in that \r
+# directory and running "make install" will install the docset in \r
+# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find \r
+# it at startup. \r
+# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information.\r
+\r
+GENERATE_DOCSET        = NO\r
+\r
+# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the \r
+# feed. A documentation feed provides an umbrella under which multiple \r
+# documentation sets from a single provider (such as a company or product suite) \r
+# can be grouped.\r
+\r
+DOCSET_FEEDNAME        = "Doxygen generated docs"\r
+\r
+# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that \r
+# should uniquely identify the documentation set bundle. This should be a \r
+# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen \r
+# will append .docset to the name.\r
+\r
+DOCSET_BUNDLE_ID       = org.doxygen.Project\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, additional index files \r
+# will be generated that can be used as input for tools like the \r
+# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) \r
+# of the generated HTML documentation.\r
+\r
+GENERATE_HTMLHELP      = NO\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can \r
+# be used to specify the file name of the resulting .chm file. You \r
+# can add a path in front of the file if the result should not be \r
+# written to the html output directory.\r
+\r
+CHM_FILE               = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can \r
+# be used to specify the location (absolute path including file name) of \r
+# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run \r
+# the HTML help compiler on the generated index.hhp.\r
+\r
+HHC_LOCATION           = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag \r
+# controls if a separate .chi index file is generated (YES) or that \r
+# it should be included in the master .chm file (NO).\r
+\r
+GENERATE_CHI           = NO\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING\r
+# is used to encode HtmlHelp index (hhk), content (hhc) and project file\r
+# content.\r
+\r
+CHM_INDEX_ENCODING     = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag \r
+# controls whether a binary table of contents is generated (YES) or a \r
+# normal table of contents (NO) in the .chm file.\r
+\r
+BINARY_TOC             = NO\r
+\r
+# The TOC_EXPAND flag can be set to YES to add extra items for group members \r
+# to the contents of the HTML help documentation and to the tree view.\r
+\r
+TOC_EXPAND             = YES\r
+\r
+# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER \r
+# are set, an additional index file will be generated that can be used as input for \r
+# Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated \r
+# HTML documentation.\r
+\r
+GENERATE_QHP           = NO\r
+\r
+# If the QHG_LOCATION tag is specified, the QCH_FILE tag can \r
+# be used to specify the file name of the resulting .qch file. \r
+# The path specified is relative to the HTML output folder.\r
+\r
+QCH_FILE               = \r
+\r
+# The QHP_NAMESPACE tag specifies the namespace to use when generating \r
+# Qt Help Project output. For more information please see \r
+# <a href="http://doc.trolltech.com/qthelpproject.html#namespace">Qt Help Project / Namespace</a>.\r
+\r
+QHP_NAMESPACE          = org.doxygen.Project\r
+\r
+# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating \r
+# Qt Help Project output. For more information please see \r
+# <a href="http://doc.trolltech.com/qthelpproject.html#virtual-folders">Qt Help Project / Virtual Folders</a>.\r
+\r
+QHP_VIRTUAL_FOLDER     = doc\r
+\r
+# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can \r
+# be used to specify the location of Qt's qhelpgenerator. \r
+# If non-empty doxygen will try to run qhelpgenerator on the generated \r
+# .qhp file .\r
+\r
+QHG_LOCATION           = \r
+\r
+# The DISABLE_INDEX tag can be used to turn on/off the condensed index at \r
+# top of each HTML page. The value NO (the default) enables the index and \r
+# the value YES disables it.\r
+\r
+DISABLE_INDEX          = NO\r
+\r
+# This tag can be used to set the number of enum values (range [1..20]) \r
+# that doxygen will group on one line in the generated HTML documentation.\r
+\r
+ENUM_VALUES_PER_LINE   = 1\r
+\r
+# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index\r
+# structure should be generated to display hierarchical information.\r
+# If the tag value is set to FRAME, a side panel will be generated\r
+# containing a tree-like index structure (just like the one that \r
+# is generated for HTML Help). For this to work a browser that supports \r
+# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, \r
+# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are \r
+# probably better off using the HTML help feature. Other possible values \r
+# for this tag are: HIERARCHIES, which will generate the Groups, Directories,\r
+# and Class Hierarchy pages using a tree view instead of an ordered list;\r
+# ALL, which combines the behavior of FRAME and HIERARCHIES; and NONE, which\r
+# disables this behavior completely. For backwards compatibility with previous\r
+# releases of Doxygen, the values YES and NO are equivalent to FRAME and NONE\r
+# respectively.\r
+\r
+GENERATE_TREEVIEW      = YES\r
+\r
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be \r
+# used to set the initial width (in pixels) of the frame in which the tree \r
+# is shown.\r
+\r
+TREEVIEW_WIDTH         = 250\r
+\r
+# Use this tag to change the font size of Latex formulas included \r
+# as images in the HTML documentation. The default is 10. Note that \r
+# when you change the font size after a successful doxygen run you need \r
+# to manually remove any form_*.png images from the HTML output directory \r
+# to force them to be regenerated.\r
+\r
+FORMULA_FONTSIZE       = 10\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the LaTeX output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will \r
+# generate Latex output.\r
+\r
+GENERATE_LATEX         = NO\r
+\r
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `latex' will be used as the default path.\r
+\r
+LATEX_OUTPUT           = latex\r
+\r
+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be \r
+# invoked. If left blank `latex' will be used as the default command name.\r
+\r
+LATEX_CMD_NAME         = latex\r
+\r
+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to \r
+# generate index for LaTeX. If left blank `makeindex' will be used as the \r
+# default command name.\r
+\r
+MAKEINDEX_CMD_NAME     = makeindex\r
+\r
+# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact \r
+# LaTeX documents. This may be useful for small projects and may help to \r
+# save some trees in general.\r
+\r
+COMPACT_LATEX          = NO\r
+\r
+# The PAPER_TYPE tag can be used to set the paper type that is used \r
+# by the printer. Possible values are: a4, a4wide, letter, legal and \r
+# executive. If left blank a4wide will be used.\r
+\r
+PAPER_TYPE             = a4wide\r
+\r
+# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX \r
+# packages that should be included in the LaTeX output.\r
+\r
+EXTRA_PACKAGES         = \r
+\r
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for \r
+# the generated latex document. The header should contain everything until \r
+# the first chapter. If it is left blank doxygen will generate a \r
+# standard header. Notice: only use this tag if you know what you are doing!\r
+\r
+LATEX_HEADER           = \r
+\r
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated \r
+# is prepared for conversion to pdf (using ps2pdf). The pdf file will \r
+# contain links (just like the HTML output) instead of page references \r
+# This makes the output suitable for online browsing using a pdf viewer.\r
+\r
+PDF_HYPERLINKS         = YES\r
+\r
+# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of \r
+# plain latex in the generated Makefile. Set this option to YES to get a \r
+# higher quality PDF documentation.\r
+\r
+USE_PDFLATEX           = YES\r
+\r
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. \r
+# command to the generated LaTeX files. This will instruct LaTeX to keep \r
+# running if errors occur, instead of asking the user for help. \r
+# This option is also used when generating formulas in HTML.\r
+\r
+LATEX_BATCHMODE        = NO\r
+\r
+# If LATEX_HIDE_INDICES is set to YES then doxygen will not \r
+# include the index chapters (such as File Index, Compound Index, etc.) \r
+# in the output.\r
+\r
+LATEX_HIDE_INDICES     = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the RTF output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output \r
+# The RTF output is optimized for Word 97 and may not look very pretty with \r
+# other RTF readers or editors.\r
+\r
+GENERATE_RTF           = NO\r
+\r
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `rtf' will be used as the default path.\r
+\r
+RTF_OUTPUT             = rtf\r
+\r
+# If the COMPACT_RTF tag is set to YES Doxygen generates more compact \r
+# RTF documents. This may be useful for small projects and may help to \r
+# save some trees in general.\r
+\r
+COMPACT_RTF            = NO\r
+\r
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated \r
+# will contain hyperlink fields. The RTF file will \r
+# contain links (just like the HTML output) instead of page references. \r
+# This makes the output suitable for online browsing using WORD or other \r
+# programs which support those fields. \r
+# Note: wordpad (write) and others do not support links.\r
+\r
+RTF_HYPERLINKS         = NO\r
+\r
+# Load stylesheet definitions from file. Syntax is similar to doxygen's \r
+# config file, i.e. a series of assignments. You only have to provide \r
+# replacements, missing definitions are set to their default value.\r
+\r
+RTF_STYLESHEET_FILE    = \r
+\r
+# Set optional variables used in the generation of an rtf document. \r
+# Syntax is similar to doxygen's config file.\r
+\r
+RTF_EXTENSIONS_FILE    = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the man page output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_MAN tag is set to YES (the default) Doxygen will \r
+# generate man pages\r
+\r
+GENERATE_MAN           = NO\r
+\r
+# The MAN_OUTPUT tag is used to specify where the man pages will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `man' will be used as the default path.\r
+\r
+MAN_OUTPUT             = man\r
+\r
+# The MAN_EXTENSION tag determines the extension that is added to \r
+# the generated man pages (default is the subroutine's section .3)\r
+\r
+MAN_EXTENSION          = .3\r
+\r
+# If the MAN_LINKS tag is set to YES and Doxygen generates man output, \r
+# then it will generate one additional man file for each entity \r
+# documented in the real man page(s). These additional files \r
+# only source the real man page, but without them the man command \r
+# would be unable to find the correct page. The default is NO.\r
+\r
+MAN_LINKS              = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the XML output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_XML tag is set to YES Doxygen will \r
+# generate an XML file that captures the structure of \r
+# the code including all documentation.\r
+\r
+GENERATE_XML           = NO\r
+\r
+# The XML_OUTPUT tag is used to specify where the XML pages will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `xml' will be used as the default path.\r
+\r
+XML_OUTPUT             = xml\r
+\r
+# The XML_SCHEMA tag can be used to specify an XML schema, \r
+# which can be used by a validating XML parser to check the \r
+# syntax of the XML files.\r
+\r
+XML_SCHEMA             = \r
+\r
+# The XML_DTD tag can be used to specify an XML DTD, \r
+# which can be used by a validating XML parser to check the \r
+# syntax of the XML files.\r
+\r
+XML_DTD                = \r
+\r
+# If the XML_PROGRAMLISTING tag is set to YES Doxygen will \r
+# dump the program listings (including syntax highlighting \r
+# and cross-referencing information) to the XML output. Note that \r
+# enabling this will significantly increase the size of the XML output.\r
+\r
+XML_PROGRAMLISTING     = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options for the AutoGen Definitions output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will \r
+# generate an AutoGen Definitions (see autogen.sf.net) file \r
+# that captures the structure of the code including all \r
+# documentation. Note that this feature is still experimental \r
+# and incomplete at the moment.\r
+\r
+GENERATE_AUTOGEN_DEF   = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the Perl module output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_PERLMOD tag is set to YES Doxygen will \r
+# generate a Perl module file that captures the structure of \r
+# the code including all documentation. Note that this \r
+# feature is still experimental and incomplete at the \r
+# moment.\r
+\r
+GENERATE_PERLMOD       = NO\r
+\r
+# If the PERLMOD_LATEX tag is set to YES Doxygen will generate \r
+# the necessary Makefile rules, Perl scripts and LaTeX code to be able \r
+# to generate PDF and DVI output from the Perl module output.\r
+\r
+PERLMOD_LATEX          = NO\r
+\r
+# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be \r
+# nicely formatted so it can be parsed by a human reader.  This is useful \r
+# if you want to understand what is going on.  On the other hand, if this \r
+# tag is set to NO the size of the Perl module output will be much smaller \r
+# and Perl will parse it just the same.\r
+\r
+PERLMOD_PRETTY         = YES\r
+\r
+# The names of the make variables in the generated doxyrules.make file \r
+# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. \r
+# This is useful so different doxyrules.make files included by the same \r
+# Makefile don't overwrite each other's variables.\r
+\r
+PERLMOD_MAKEVAR_PREFIX = \r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration options related to the preprocessor   \r
+#---------------------------------------------------------------------------\r
+\r
+# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will \r
+# evaluate all C-preprocessor directives found in the sources and include \r
+# files.\r
+\r
+ENABLE_PREPROCESSING   = YES\r
+\r
+# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro \r
+# names in the source code. If set to NO (the default) only conditional \r
+# compilation will be performed. Macro expansion can be done in a controlled \r
+# way by setting EXPAND_ONLY_PREDEF to YES.\r
+\r
+MACRO_EXPANSION        = YES\r
+\r
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES \r
+# then the macro expansion is limited to the macros specified with the \r
+# PREDEFINED and EXPAND_AS_DEFINED tags.\r
+\r
+EXPAND_ONLY_PREDEF     = YES\r
+\r
+# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files \r
+# in the INCLUDE_PATH (see below) will be search if a #include is found.\r
+\r
+SEARCH_INCLUDES        = YES\r
+\r
+# The INCLUDE_PATH tag can be used to specify one or more directories that \r
+# contain include files that are not input files but should be processed by \r
+# the preprocessor.\r
+\r
+INCLUDE_PATH           = \r
+\r
+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard \r
+# patterns (like *.h and *.hpp) to filter out the header-files in the \r
+# directories. If left blank, the patterns specified with FILE_PATTERNS will \r
+# be used.\r
+\r
+INCLUDE_FILE_PATTERNS  = \r
+\r
+# The PREDEFINED tag can be used to specify one or more macro names that \r
+# are defined before the preprocessor is started (similar to the -D option of \r
+# gcc). The argument of the tag is a list of macros of the form: name \r
+# or name=definition (no spaces). If the definition and the = are \r
+# omitted =1 is assumed. To prevent a macro definition from being \r
+# undefined via #undef or recursively expanded use the := operator \r
+# instead of the = operator.\r
+\r
+PREDEFINED             = __DOXYGEN__\r
+\r
+# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then \r
+# this tag can be used to specify a list of macro names that should be expanded. \r
+# The macro definition that is found in the sources will be used. \r
+# Use the PREDEFINED tag if you want to use a different macro definition.\r
+\r
+EXPAND_AS_DEFINED      = BUTTLOADTAG\r
+\r
+# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then \r
+# doxygen's preprocessor will remove all function-like macros that are alone \r
+# on a line, have an all uppercase name, and do not end with a semicolon. Such \r
+# function macros are typically used for boiler-plate code, and will confuse \r
+# the parser if not removed.\r
+\r
+SKIP_FUNCTION_MACROS   = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration::additions related to external references   \r
+#---------------------------------------------------------------------------\r
+\r
+# The TAGFILES option can be used to specify one or more tagfiles. \r
+# Optionally an initial location of the external documentation \r
+# can be added for each tagfile. The format of a tag file without \r
+# this location is as follows: \r
+#   TAGFILES = file1 file2 ... \r
+# Adding location for the tag files is done as follows: \r
+#   TAGFILES = file1=loc1 "file2 = loc2" ... \r
+# where "loc1" and "loc2" can be relative or absolute paths or \r
+# URLs. If a location is present for each tag, the installdox tool \r
+# does not have to be run to correct the links.\r
+# Note that each tag file must have a unique name\r
+# (where the name does NOT include the path)\r
+# If a tag file is not located in the directory in which doxygen \r
+# is run, you must also specify the path to the tagfile here.\r
+\r
+TAGFILES               = \r
+\r
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create \r
+# a tag file that is based on the input files it reads.\r
+\r
+GENERATE_TAGFILE       = \r
+\r
+# If the ALLEXTERNALS tag is set to YES all external classes will be listed \r
+# in the class index. If set to NO only the inherited external classes \r
+# will be listed.\r
+\r
+ALLEXTERNALS           = NO\r
+\r
+# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed \r
+# in the modules index. If set to NO, only the current project's groups will \r
+# be listed.\r
+\r
+EXTERNAL_GROUPS        = YES\r
+\r
+# The PERL_PATH should be the absolute path and name of the perl script \r
+# interpreter (i.e. the result of `which perl').\r
+\r
+PERL_PATH              = /usr/bin/perl\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration options related to the dot tool   \r
+#---------------------------------------------------------------------------\r
+\r
+# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will \r
+# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base \r
+# or super classes. Setting the tag to NO turns the diagrams off. Note that \r
+# this option is superseded by the HAVE_DOT option below. This is only a \r
+# fallback. It is recommended to install and use dot, since it yields more \r
+# powerful graphs.\r
+\r
+CLASS_DIAGRAMS         = NO\r
+\r
+# You can define message sequence charts within doxygen comments using the \msc \r
+# command. Doxygen will then run the mscgen tool (see \r
+# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the \r
+# documentation. The MSCGEN_PATH tag allows you to specify the directory where \r
+# the mscgen tool resides. If left empty the tool is assumed to be found in the \r
+# default search path.\r
+\r
+MSCGEN_PATH            = \r
+\r
+# If set to YES, the inheritance and collaboration graphs will hide \r
+# inheritance and usage relations if the target is undocumented \r
+# or is not a class.\r
+\r
+HIDE_UNDOC_RELATIONS   = YES\r
+\r
+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is \r
+# available from the path. This tool is part of Graphviz, a graph visualization \r
+# toolkit from AT&T and Lucent Bell Labs. The other options in this section \r
+# have no effect if this option is set to NO (the default)\r
+\r
+HAVE_DOT               = NO\r
+\r
+# By default doxygen will write a font called FreeSans.ttf to the output \r
+# directory and reference it in all dot files that doxygen generates. This \r
+# font does not include all possible unicode characters however, so when you need \r
+# these (or just want a differently looking font) you can specify the font name \r
+# using DOT_FONTNAME. You need need to make sure dot is able to find the font, \r
+# which can be done by putting it in a standard location or by setting the \r
+# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory \r
+# containing the font.\r
+\r
+DOT_FONTNAME           = FreeSans\r
+\r
+# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. \r
+# The default size is 10pt.\r
+\r
+DOT_FONTSIZE           = 10\r
+\r
+# By default doxygen will tell dot to use the output directory to look for the \r
+# FreeSans.ttf font (which doxygen will put there itself). If you specify a \r
+# different font using DOT_FONTNAME you can set the path where dot \r
+# can find it using this tag.\r
+\r
+DOT_FONTPATH           = \r
+\r
+# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for each documented class showing the direct and \r
+# indirect inheritance relations. Setting this tag to YES will force the \r
+# the CLASS_DIAGRAMS tag to NO.\r
+\r
+CLASS_GRAPH            = NO\r
+\r
+# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for each documented class showing the direct and \r
+# indirect implementation dependencies (inheritance, containment, and \r
+# class references variables) of the class with other documented classes.\r
+\r
+COLLABORATION_GRAPH    = NO\r
+\r
+# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for groups, showing the direct groups dependencies\r
+\r
+GROUP_GRAPHS           = NO\r
+\r
+# If the UML_LOOK tag is set to YES doxygen will generate inheritance and \r
+# collaboration diagrams in a style similar to the OMG's Unified Modeling \r
+# Language.\r
+\r
+UML_LOOK               = NO\r
+\r
+# If set to YES, the inheritance and collaboration graphs will show the \r
+# relations between templates and their instances.\r
+\r
+TEMPLATE_RELATIONS     = NO\r
+\r
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT \r
+# tags are set to YES then doxygen will generate a graph for each documented \r
+# file showing the direct and indirect include dependencies of the file with \r
+# other documented files.\r
+\r
+INCLUDE_GRAPH          = NO\r
+\r
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and \r
+# HAVE_DOT tags are set to YES then doxygen will generate a graph for each \r
+# documented header file showing the documented files that directly or \r
+# indirectly include this file.\r
+\r
+INCLUDED_BY_GRAPH      = NO\r
+\r
+# If the CALL_GRAPH and HAVE_DOT options are set to YES then \r
+# doxygen will generate a call dependency graph for every global function \r
+# or class method. Note that enabling this option will significantly increase \r
+# the time of a run. So in most cases it will be better to enable call graphs \r
+# for selected functions only using the \callgraph command.\r
+\r
+CALL_GRAPH             = NO\r
+\r
+# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then \r
+# doxygen will generate a caller dependency graph for every global function \r
+# or class method. Note that enabling this option will significantly increase \r
+# the time of a run. So in most cases it will be better to enable caller \r
+# graphs for selected functions only using the \callergraph command.\r
+\r
+CALLER_GRAPH           = NO\r
+\r
+# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen \r
+# will graphical hierarchy of all classes instead of a textual one.\r
+\r
+GRAPHICAL_HIERARCHY    = NO\r
+\r
+# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES \r
+# then doxygen will show the dependencies a directory has on other directories \r
+# in a graphical way. The dependency relations are determined by the #include\r
+# relations between the files in the directories.\r
+\r
+DIRECTORY_GRAPH        = NO\r
+\r
+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images \r
+# generated by dot. Possible values are png, jpg, or gif\r
+# If left blank png will be used.\r
+\r
+DOT_IMAGE_FORMAT       = png\r
+\r
+# The tag DOT_PATH can be used to specify the path where the dot tool can be \r
+# found. If left blank, it is assumed the dot tool can be found in the path.\r
+\r
+DOT_PATH               = "C:/Program Files/Graphviz2.18/bin"\r
+\r
+# The DOTFILE_DIRS tag can be used to specify one or more directories that \r
+# contain dot files that are included in the documentation (see the \r
+# \dotfile command).\r
+\r
+DOTFILE_DIRS           = \r
+\r
+# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of \r
+# nodes that will be shown in the graph. If the number of nodes in a graph \r
+# becomes larger than this value, doxygen will truncate the graph, which is \r
+# visualized by representing a node as a red box. Note that doxygen if the \r
+# number of direct children of the root node in a graph is already larger than \r
+# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note \r
+# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.\r
+\r
+DOT_GRAPH_MAX_NODES    = 15\r
+\r
+# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the \r
+# graphs generated by dot. A depth value of 3 means that only nodes reachable \r
+# from the root by following a path via at most 3 edges will be shown. Nodes \r
+# that lay further from the root node will be omitted. Note that setting this \r
+# option to 1 or 2 may greatly reduce the computation time needed for large \r
+# code bases. Also note that the size of a graph can be further restricted by \r
+# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.\r
+\r
+MAX_DOT_GRAPH_DEPTH    = 2\r
+\r
+# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent \r
+# background. This is disabled by default, because dot on Windows does not \r
+# seem to support this out of the box. Warning: Depending on the platform used, \r
+# enabling this option may lead to badly anti-aliased labels on the edges of \r
+# a graph (i.e. they become hard to read).\r
+\r
+DOT_TRANSPARENT        = YES\r
+\r
+# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output \r
+# files in one run (i.e. multiple -o and -T options on the command line). This \r
+# makes dot run faster, but since only newer versions of dot (>1.8.10) \r
+# support this, this feature is disabled by default.\r
+\r
+DOT_MULTI_TARGETS      = NO\r
+\r
+# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will \r
+# generate a legend page explaining the meaning of the various boxes and \r
+# arrows in the dot generated graphs.\r
+\r
+GENERATE_LEGEND        = YES\r
+\r
+# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will \r
+# remove the intermediate dot files that are used to generate \r
+# the various graphs.\r
+\r
+DOT_CLEANUP            = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration::additions related to the search engine   \r
+#---------------------------------------------------------------------------\r
+\r
+# The SEARCHENGINE tag specifies whether or not a search engine should be \r
+# used. If set to NO the values of all tags below this one will be ignored.\r
+\r
+SEARCHENGINE           = NO\r
diff --git a/Demos/Device/LowLevel/AudioInput/makefile b/Demos/Device/LowLevel/AudioInput/makefile
new file mode 100644 (file)
index 0000000..c70e98e
--- /dev/null
@@ -0,0 +1,734 @@
+# Hey Emacs, this is a -*- makefile -*-\r
+#----------------------------------------------------------------------------\r
+# WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al.\r
+#  >> Modified for use with the LUFA project. <<\r
+#\r
+# Released to the Public Domain\r
+#\r
+# Additional material for this makefile was written by:\r
+# Peter Fleury\r
+# Tim Henigan\r
+# Colin O'Flynn\r
+# Reiner Patommel\r
+# Markus Pfaff\r
+# Sander Pool\r
+# Frederik Rouleau\r
+# Carlos Lamas\r
+# Dean Camera\r
+# Opendous Inc.\r
+# Denver Gingerich\r
+#\r
+#----------------------------------------------------------------------------\r
+# On command line:\r
+#\r
+# make all = Make software.\r
+#\r
+# make clean = Clean out built project files.\r
+#\r
+# make coff = Convert ELF to AVR COFF.\r
+#\r
+# make extcoff = Convert ELF to AVR Extended COFF.\r
+#\r
+# make program = Download the hex file to the device, using avrdude.\r
+#                Please customize the avrdude settings below first!\r
+#\r
+# make dfu = Download the hex file to the device, using dfu-programmer (must\r
+#            have dfu-programmer installed).\r
+#\r
+# make flip = Download the hex file to the device, using Atmel FLIP (must\r
+#             have Atmel FLIP installed).\r
+#\r
+# make dfu-ee = Download the eeprom file to the device, using dfu-programmer\r
+#               (must have dfu-programmer installed).\r
+#\r
+# make flip-ee = Download the eeprom file to the device, using Atmel FLIP\r
+#                (must have Atmel FLIP installed).\r
+#\r
+# make doxygen = Generate DoxyGen documentation for the project (must have\r
+#                DoxyGen installed)\r
+#\r
+# make debug = Start either simulavr or avarice as specified for debugging, \r
+#              with avr-gdb or avr-insight as the front end for debugging.\r
+#\r
+# make filename.s = Just compile filename.c into the assembler code only.\r
+#\r
+# make filename.i = Create a preprocessed source file for use in submitting\r
+#                   bug reports to the GCC project.\r
+#\r
+# To rebuild project do "make clean" then "make all".\r
+#----------------------------------------------------------------------------\r
+\r
+\r
+# MCU name\r
+MCU = at90usb1287\r
+\r
+\r
+# Target board (see library "Board Types" documentation, USER or blank for projects not requiring\r
+# LUFA board drivers). If USER is selected, put custom board drivers in a directory called \r
+# "Board" inside the application directory.\r
+BOARD  = USBKEY\r
+\r
+\r
+# Processor frequency.\r
+#     This will define a symbol, F_CPU, in all source code files equal to the \r
+#     processor frequency. You can then use this symbol in your source code to \r
+#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done\r
+#     automatically to create a 32-bit value in your source code.\r
+#     Typical values are:\r
+#         F_CPU =  1000000\r
+#         F_CPU =  1843200\r
+#         F_CPU =  2000000\r
+#         F_CPU =  3686400\r
+#         F_CPU =  4000000\r
+#         F_CPU =  7372800\r
+#         F_CPU =  8000000\r
+#         F_CPU = 11059200\r
+#         F_CPU = 14745600\r
+#         F_CPU = 16000000\r
+#         F_CPU = 18432000\r
+#         F_CPU = 20000000\r
+F_CPU = 8000000\r
+\r
+\r
+# Input clock frequency.\r
+#     This will define a symbol, F_CLOCK, in all source code files equal to the \r
+#     input clock frequency (before any prescaling is performed). This value may\r
+#     differ from F_CPU if prescaling is used on the latter, and is required as the\r
+#     raw input clock is fed directly to the PLL sections of the AVR for high speed\r
+#     clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'\r
+#     at the end, this will be done automatically to create a 32-bit value in your\r
+#     source code.\r
+#\r
+#     If no clock division is performed on the input clock inside the AVR (via the\r
+#     CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.\r
+F_CLOCK = 8000000\r
+\r
+\r
+# Output format. (can be srec, ihex, binary)\r
+FORMAT = ihex\r
+\r
+\r
+# Target file name (without extension).\r
+TARGET = AudioInput\r
+\r
+\r
+# Object files directory\r
+#     To put object files in current directory, use a dot (.), do NOT make\r
+#     this an empty or blank macro!\r
+OBJDIR = .\r
+\r
+\r
+# Path to the LUFA library\r
+LUFA_PATH = ../../..\r
+\r
+\r
+# List C source files here. (C dependencies are automatically generated.)\r
+SRC = $(TARGET).c                                                 \\r
+         Descriptors.c                                               \\r
+         $(LUFA_PATH)/LUFA/Scheduler/Scheduler.c                     \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/DevChapter9.c        \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Endpoint.c           \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Host.c               \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/HostChapter9.c       \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/LowLevel.c           \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Pipe.c               \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/Events.c            \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBInterrupt.c      \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBTask.c           \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/ConfigDescriptor.c  \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/Class/HIDParser.c             \\r
+\r
+\r
+# List C++ source files here. (C dependencies are automatically generated.)\r
+CPPSRC = \r
+\r
+\r
+# List Assembler source files here.\r
+#     Make them always end in a capital .S.  Files ending in a lowercase .s\r
+#     will not be considered source files but generated files (assembler\r
+#     output from the compiler), and will be deleted upon "make clean"!\r
+#     Even though the DOS/Win* filesystem matches both .s and .S the same,\r
+#     it will preserve the spelling of the filenames, and gcc itself does\r
+#     care about how the name is spelled on its command-line.\r
+ASRC =\r
+\r
+\r
+# Optimization level, can be [0, 1, 2, 3, s]. \r
+#     0 = turn off optimization. s = optimize for size.\r
+#     (Note: 3 is not always the best optimization level. See avr-libc FAQ.)\r
+OPT = s\r
+\r
+\r
+# Debugging format.\r
+#     Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs.\r
+#     AVR Studio 4.10 requires dwarf-2.\r
+#     AVR [Extended] COFF format requires stabs, plus an avr-objcopy run.\r
+DEBUG = dwarf-2\r
+\r
+\r
+# List any extra directories to look for include files here.\r
+#     Each directory must be seperated by a space.\r
+#     Use forward slashes for directory separators.\r
+#     For a directory that has spaces, enclose it in quotes.\r
+EXTRAINCDIRS = $(LUFA_PATH)/\r
+\r
+\r
+# Compiler flag to set the C Standard level.\r
+#     c89   = "ANSI" C\r
+#     gnu89 = c89 plus GCC extensions\r
+#     c99   = ISO C99 standard (not yet fully implemented)\r
+#     gnu99 = c99 plus GCC extensions\r
+CSTANDARD = -std=gnu99\r
+\r
+\r
+# Place -D or -U options here for C sources\r
+CDEFS  = -DF_CPU=$(F_CPU)UL -DF_CLOCK=$(F_CLOCK)UL -DBOARD=BOARD_$(BOARD)\r
+CDEFS += -DUSE_NONSTANDARD_DESCRIPTOR_NAMES -DNO_STREAM_CALLBACKS -DUSB_DEVICE_ONLY\r
+CDEFS += -DFIXED_CONTROL_ENDPOINT_SIZE=8 -DUSE_SINGLE_DEVICE_CONFIGURATION\r
+CDEFS += -DUSE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)"\r
+\r
+\r
+# Place -D or -U options here for ASM sources\r
+ADEFS = -DF_CPU=$(F_CPU)\r
+\r
+\r
+# Place -D or -U options here for C++ sources\r
+CPPDEFS = -DF_CPU=$(F_CPU)UL\r
+#CPPDEFS += -D__STDC_LIMIT_MACROS\r
+#CPPDEFS += -D__STDC_CONSTANT_MACROS\r
+\r
+\r
+\r
+#---------------- Compiler Options C ----------------\r
+#  -g*:          generate debugging information\r
+#  -O*:          optimization level\r
+#  -f...:        tuning, see GCC manual and avr-libc documentation\r
+#  -Wall...:     warning level\r
+#  -Wa,...:      tell GCC to pass this to the assembler.\r
+#    -adhlns...: create assembler listing\r
+CFLAGS = -g$(DEBUG)\r
+CFLAGS += $(CDEFS)\r
+CFLAGS += -O$(OPT)\r
+CFLAGS += -funsigned-char\r
+CFLAGS += -funsigned-bitfields\r
+CFLAGS += -ffunction-sections\r
+CFLAGS += -fpack-struct\r
+CFLAGS += -fshort-enums\r
+CFLAGS += -finline-limit=20\r
+CFLAGS += -Wall\r
+CFLAGS += -Wstrict-prototypes\r
+CFLAGS += -Wundef\r
+#CFLAGS += -fno-unit-at-a-time\r
+#CFLAGS += -Wunreachable-code\r
+#CFLAGS += -Wsign-compare\r
+CFLAGS += -Wa,-adhlns=$(<:%.c=$(OBJDIR)/%.lst)\r
+CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))\r
+CFLAGS += $(CSTANDARD)\r
+\r
+\r
+#---------------- Compiler Options C++ ----------------\r
+#  -g*:          generate debugging information\r
+#  -O*:          optimization level\r
+#  -f...:        tuning, see GCC manual and avr-libc documentation\r
+#  -Wall...:     warning level\r
+#  -Wa,...:      tell GCC to pass this to the assembler.\r
+#    -adhlns...: create assembler listing\r
+CPPFLAGS = -g$(DEBUG)\r
+CPPFLAGS += $(CPPDEFS)\r
+CPPFLAGS += -O$(OPT)\r
+CPPFLAGS += -funsigned-char\r
+CPPFLAGS += -funsigned-bitfields\r
+CPPFLAGS += -fpack-struct\r
+CPPFLAGS += -fshort-enums\r
+CPPFLAGS += -fno-exceptions\r
+CPPFLAGS += -Wall\r
+CFLAGS += -Wundef\r
+#CPPFLAGS += -mshort-calls\r
+#CPPFLAGS += -fno-unit-at-a-time\r
+#CPPFLAGS += -Wstrict-prototypes\r
+#CPPFLAGS += -Wunreachable-code\r
+#CPPFLAGS += -Wsign-compare\r
+CPPFLAGS += -Wa,-adhlns=$(<:%.cpp=$(OBJDIR)/%.lst)\r
+CPPFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))\r
+#CPPFLAGS += $(CSTANDARD)\r
+\r
+\r
+#---------------- Assembler Options ----------------\r
+#  -Wa,...:   tell GCC to pass this to the assembler.\r
+#  -adhlns:   create listing\r
+#  -gstabs:   have the assembler create line number information; note that\r
+#             for use in COFF files, additional information about filenames\r
+#             and function names needs to be present in the assembler source\r
+#             files -- see avr-libc docs [FIXME: not yet described there]\r
+#  -listing-cont-lines: Sets the maximum number of continuation lines of hex \r
+#       dump that will be displayed for a given single line of source input.\r
+ASFLAGS = $(ADEFS) -Wa,-adhlns=$(<:%.S=$(OBJDIR)/%.lst),-gstabs,--listing-cont-lines=100\r
+\r
+\r
+#---------------- Library Options ----------------\r
+# Minimalistic printf version\r
+PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min\r
+\r
+# Floating point printf version (requires MATH_LIB = -lm below)\r
+PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt\r
+\r
+# If this is left blank, then it will use the Standard printf version.\r
+PRINTF_LIB = \r
+#PRINTF_LIB = $(PRINTF_LIB_MIN)\r
+#PRINTF_LIB = $(PRINTF_LIB_FLOAT)\r
+\r
+\r
+# Minimalistic scanf version\r
+SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min\r
+\r
+# Floating point + %[ scanf version (requires MATH_LIB = -lm below)\r
+SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt\r
+\r
+# If this is left blank, then it will use the Standard scanf version.\r
+SCANF_LIB = \r
+#SCANF_LIB = $(SCANF_LIB_MIN)\r
+#SCANF_LIB = $(SCANF_LIB_FLOAT)\r
+\r
+\r
+MATH_LIB = -lm\r
+\r
+\r
+# List any extra directories to look for libraries here.\r
+#     Each directory must be seperated by a space.\r
+#     Use forward slashes for directory separators.\r
+#     For a directory that has spaces, enclose it in quotes.\r
+EXTRALIBDIRS = \r
+\r
+\r
+\r
+#---------------- External Memory Options ----------------\r
+\r
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),\r
+# used for variables (.data/.bss) and heap (malloc()).\r
+#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff\r
+\r
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),\r
+# only used for heap (malloc()).\r
+#EXTMEMOPTS = -Wl,--section-start,.data=0x801100,--defsym=__heap_end=0x80ffff\r
+\r
+EXTMEMOPTS =\r
+\r
+\r
+\r
+#---------------- Linker Options ----------------\r
+#  -Wl,...:     tell GCC to pass this to linker.\r
+#    -Map:      create map file\r
+#    --cref:    add cross reference to  map file\r
+LDFLAGS = -Wl,-Map=$(TARGET).map,--cref\r
+LDFLAGS += -Wl,--relax \r
+LDFLAGS += -Wl,--gc-sections\r
+LDFLAGS += $(EXTMEMOPTS)\r
+LDFLAGS += $(patsubst %,-L%,$(EXTRALIBDIRS))\r
+LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)\r
+#LDFLAGS += -T linker_script.x\r
+\r
+\r
+\r
+#---------------- Programming Options (avrdude) ----------------\r
+\r
+# Programming hardware: alf avr910 avrisp bascom bsd \r
+# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500\r
+#\r
+# Type: avrdude -c ?\r
+# to get a full listing.\r
+#\r
+AVRDUDE_PROGRAMMER = jtagmkII\r
+\r
+# com1 = serial port. Use lpt1 to connect to parallel port.\r
+AVRDUDE_PORT = usb\r
+\r
+AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex\r
+#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep\r
+\r
+\r
+# Uncomment the following if you want avrdude's erase cycle counter.\r
+# Note that this counter needs to be initialized first using -Yn,\r
+# see avrdude manual.\r
+#AVRDUDE_ERASE_COUNTER = -y\r
+\r
+# Uncomment the following if you do /not/ wish a verification to be\r
+# performed after programming the device.\r
+#AVRDUDE_NO_VERIFY = -V\r
+\r
+# Increase verbosity level.  Please use this when submitting bug\r
+# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude> \r
+# to submit bug reports.\r
+#AVRDUDE_VERBOSE = -v -v\r
+\r
+AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)\r
+AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY)\r
+AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE)\r
+AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER)\r
+\r
+\r
+\r
+#---------------- Debugging Options ----------------\r
+\r
+# For simulavr only - target MCU frequency.\r
+DEBUG_MFREQ = $(F_CPU)\r
+\r
+# Set the DEBUG_UI to either gdb or insight.\r
+# DEBUG_UI = gdb\r
+DEBUG_UI = insight\r
+\r
+# Set the debugging back-end to either avarice, simulavr.\r
+DEBUG_BACKEND = avarice\r
+#DEBUG_BACKEND = simulavr\r
+\r
+# GDB Init Filename.\r
+GDBINIT_FILE = __avr_gdbinit\r
+\r
+# When using avarice settings for the JTAG\r
+JTAG_DEV = /dev/com1\r
+\r
+# Debugging port used to communicate between GDB / avarice / simulavr.\r
+DEBUG_PORT = 4242\r
+\r
+# Debugging host used to communicate between GDB / avarice / simulavr, normally\r
+#     just set to localhost unless doing some sort of crazy debugging when \r
+#     avarice is running on a different computer.\r
+DEBUG_HOST = localhost\r
+\r
+\r
+\r
+#============================================================================\r
+\r
+\r
+# Define programs and commands.\r
+SHELL = sh\r
+CC = avr-gcc\r
+OBJCOPY = avr-objcopy\r
+OBJDUMP = avr-objdump\r
+SIZE = avr-size\r
+AR = avr-ar rcs\r
+NM = avr-nm\r
+AVRDUDE = avrdude\r
+REMOVE = rm -f\r
+REMOVEDIR = rm -rf\r
+COPY = cp\r
+WINSHELL = cmd\r
+\r
+# Define Messages\r
+# English\r
+MSG_ERRORS_NONE = Errors: none\r
+MSG_BEGIN = -------- begin --------\r
+MSG_END = --------  end  --------\r
+MSG_SIZE_BEFORE = Size before: \r
+MSG_SIZE_AFTER = Size after:\r
+MSG_COFF = Converting to AVR COFF:\r
+MSG_EXTENDED_COFF = Converting to AVR Extended COFF:\r
+MSG_FLASH = Creating load file for Flash:\r
+MSG_EEPROM = Creating load file for EEPROM:\r
+MSG_EXTENDED_LISTING = Creating Extended Listing:\r
+MSG_SYMBOL_TABLE = Creating Symbol Table:\r
+MSG_LINKING = Linking:\r
+MSG_COMPILING = Compiling C:\r
+MSG_COMPILING_CPP = Compiling C++:\r
+MSG_ASSEMBLING = Assembling:\r
+MSG_CLEANING = Cleaning project:\r
+MSG_CREATING_LIBRARY = Creating library:\r
+\r
+\r
+\r
+\r
+# Define all object files.\r
+OBJ = $(SRC:%.c=$(OBJDIR)/%.o) $(CPPSRC:%.cpp=$(OBJDIR)/%.o) $(ASRC:%.S=$(OBJDIR)/%.o) \r
+\r
+# Define all listing files.\r
+LST = $(SRC:%.c=$(OBJDIR)/%.lst) $(CPPSRC:%.cpp=$(OBJDIR)/%.lst) $(ASRC:%.S=$(OBJDIR)/%.lst) \r
+\r
+\r
+# Compiler flags to generate dependency files.\r
+GENDEPFLAGS = -MMD -MP -MF .dep/$(@F).d\r
+\r
+\r
+# Combine all necessary flags and optional flags.\r
+# Add target processor to flags.\r
+ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS)\r
+ALL_CPPFLAGS = -mmcu=$(MCU) -I. -x c++ $(CPPFLAGS) $(GENDEPFLAGS)\r
+ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)\r
+\r
+\r
+\r
+\r
+\r
+# Default target.\r
+all: begin gccversion sizebefore build checkhooks checklibmode checkboard sizeafter end\r
+\r
+# Change the build target to build a HEX file or a library.\r
+build: elf hex eep lss sym\r
+#build: lib\r
+\r
+\r
+elf: $(TARGET).elf\r
+hex: $(TARGET).hex\r
+eep: $(TARGET).eep\r
+lss: $(TARGET).lss\r
+sym: $(TARGET).sym\r
+LIBNAME=lib$(TARGET).a\r
+lib: $(LIBNAME)\r
+\r
+\r
+\r
+# Eye candy.\r
+# AVR Studio 3.x does not check make's exit code but relies on\r
+# the following magic strings to be generated by the compile job.\r
+begin:\r
+       @echo\r
+       @echo $(MSG_BEGIN)\r
+\r
+end:\r
+       @echo $(MSG_END)\r
+       @echo\r
+\r
+\r
+# Display size of file.\r
+HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex\r
+ELFSIZE = $(SIZE) $(MCU_FLAG) $(FORMAT_FLAG) $(TARGET).elf\r
+MCU_FLAG = $(shell $(SIZE) --help | grep -- --mcu > /dev/null && echo --mcu=$(MCU) )\r
+FORMAT_FLAG = $(shell $(SIZE) --help | grep -- --format=.*avr > /dev/null && echo --format=avr )\r
+\r
+sizebefore:\r
+       @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \\r
+       2>/dev/null; echo; fi\r
+\r
+sizeafter:\r
+       @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \\r
+       2>/dev/null; echo; fi\r
+\r
+checkhooks: build\r
+       @echo\r
+       @echo ------- Unhooked LUFA Events -------\r
+       @$(shell) (grep -s '^EVENT_.*LUFA/.*\\.o' $(TARGET).map | \\r
+                  cut -d' ' -f1 | cut -d'_' -f2- | grep ".*") || \\r
+                          echo "(None)"\r
+       @echo ------------------------------------\r
+\r
+checklibmode:\r
+       @echo\r
+       @echo ----------- Library Mode -----------\r
+       @$(shell) ($(CC) $(ALL_CFLAGS) -E -dM - < /dev/null \\r
+                 | grep 'USB_\(DEVICE\|HOST\)_ONLY' | cut -d' ' -f2 | grep ".*") \\r
+                 || echo "No specific mode (both device and host mode allowable)."\r
+       @echo ------------------------------------\r
+\r
+checkboard:\r
+       @echo\r
+       @echo ---------- Selected Board ----------\r
+       @echo Selected board model is $(BOARD).\r
+       @echo ------------------------------------\r
+       \r
+# Display compiler version information.\r
+gccversion : \r
+       @$(CC) --version\r
+\r
+\r
+\r
+# Program the device.  \r
+program: $(TARGET).hex $(TARGET).eep\r
+       $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)\r
+\r
+flip: $(TARGET).hex\r
+       batchisp -hardware usb -device $(MCU) -operation erase f\r
+       batchisp -hardware usb -device $(MCU) -operation loadbuffer $(TARGET).hex program\r
+       batchisp -hardware usb -device $(MCU) -operation start reset 0\r
+\r
+dfu: $(TARGET).hex\r
+       dfu-programmer $(MCU) erase\r
+       dfu-programmer $(MCU) flash --debug 1 $(TARGET).hex\r
+       dfu-programmer $(MCU) reset\r
+\r
+flip-ee: $(TARGET).hex $(TARGET).eep\r
+       copy $(TARGET).eep $(TARGET)eep.hex\r
+       batchisp -hardware usb -device $(MCU) -operation memory EEPROM erase\r
+       batchisp -hardware usb -device $(MCU) -operation memory EEPROM loadbuffer $(TARGET)eep.hex program\r
+       batchisp -hardware usb -device $(MCU) -operation start reset 0\r
+\r
+dfu-ee: $(TARGET).hex $(TARGET).eep\r
+       dfu-programmer $(MCU) flash-eeprom --debug 1 --suppress-bootloader-mem $(TARGET).eep\r
+       dfu-programmer $(MCU) reset\r
+\r
+\r
+# Generate avr-gdb config/init file which does the following:\r
+#     define the reset signal, load the target file, connect to target, and set \r
+#     a breakpoint at main().\r
+gdb-config: \r
+       @$(REMOVE) $(GDBINIT_FILE)\r
+       @echo define reset >> $(GDBINIT_FILE)\r
+       @echo SIGNAL SIGHUP >> $(GDBINIT_FILE)\r
+       @echo end >> $(GDBINIT_FILE)\r
+       @echo file $(TARGET).elf >> $(GDBINIT_FILE)\r
+       @echo target remote $(DEBUG_HOST):$(DEBUG_PORT)  >> $(GDBINIT_FILE)\r
+ifeq ($(DEBUG_BACKEND),simulavr)\r
+       @echo load  >> $(GDBINIT_FILE)\r
+endif\r
+       @echo break main >> $(GDBINIT_FILE)\r
+\r
+debug: gdb-config $(TARGET).elf\r
+ifeq ($(DEBUG_BACKEND), avarice)\r
+       @echo Starting AVaRICE - Press enter when "waiting to connect" message displays.\r
+       @$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \\r
+       $(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT)\r
+       @$(WINSHELL) /c pause\r
+\r
+else\r
+       @$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \\r
+       $(DEBUG_MFREQ) --port $(DEBUG_PORT)\r
+endif\r
+       @$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE)\r
+\r
+\r
+\r
+\r
+# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.\r
+COFFCONVERT = $(OBJCOPY) --debugging\r
+COFFCONVERT += --change-section-address .data-0x800000\r
+COFFCONVERT += --change-section-address .bss-0x800000\r
+COFFCONVERT += --change-section-address .noinit-0x800000\r
+COFFCONVERT += --change-section-address .eeprom-0x810000\r
+\r
+\r
+\r
+coff: $(TARGET).elf\r
+       @echo\r
+       @echo $(MSG_COFF) $(TARGET).cof\r
+       $(COFFCONVERT) -O coff-avr $< $(TARGET).cof\r
+\r
+\r
+extcoff: $(TARGET).elf\r
+       @echo\r
+       @echo $(MSG_EXTENDED_COFF) $(TARGET).cof\r
+       $(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof\r
+\r
+\r
+\r
+# Create final output files (.hex, .eep) from ELF output file.\r
+%.hex: %.elf\r
+       @echo\r
+       @echo $(MSG_FLASH) $@\r
+       $(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@\r
+\r
+%.eep: %.elf\r
+       @echo\r
+       @echo $(MSG_EEPROM) $@\r
+       -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \\r
+       --change-section-lma .eeprom=0 --no-change-warnings -O $(FORMAT) $< $@ || exit 0\r
+\r
+# Create extended listing file from ELF output file.\r
+%.lss: %.elf\r
+       @echo\r
+       @echo $(MSG_EXTENDED_LISTING) $@\r
+       $(OBJDUMP) -h -z -S $< > $@\r
+\r
+# Create a symbol table from ELF output file.\r
+%.sym: %.elf\r
+       @echo\r
+       @echo $(MSG_SYMBOL_TABLE) $@\r
+       $(NM) -n $< > $@\r
+\r
+\r
+\r
+# Create library from object files.\r
+.SECONDARY : $(TARGET).a\r
+.PRECIOUS : $(OBJ)\r
+%.a: $(OBJ)\r
+       @echo\r
+       @echo $(MSG_CREATING_LIBRARY) $@\r
+       $(AR) $@ $(OBJ)\r
+\r
+\r
+# Link: create ELF output file from object files.\r
+.SECONDARY : $(TARGET).elf\r
+.PRECIOUS : $(OBJ)\r
+%.elf: $(OBJ)\r
+       @echo\r
+       @echo $(MSG_LINKING) $@\r
+       $(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)\r
+\r
+\r
+# Compile: create object files from C source files.\r
+$(OBJDIR)/%.o : %.c\r
+       @echo\r
+       @echo $(MSG_COMPILING) $<\r
+       $(CC) -c $(ALL_CFLAGS) $< -o $@ \r
+\r
+\r
+# Compile: create object files from C++ source files.\r
+$(OBJDIR)/%.o : %.cpp\r
+       @echo\r
+       @echo $(MSG_COMPILING_CPP) $<\r
+       $(CC) -c $(ALL_CPPFLAGS) $< -o $@ \r
+\r
+\r
+# Compile: create assembler files from C source files.\r
+%.s : %.c\r
+       $(CC) -S $(ALL_CFLAGS) $< -o $@\r
+\r
+\r
+# Compile: create assembler files from C++ source files.\r
+%.s : %.cpp\r
+       $(CC) -S $(ALL_CPPFLAGS) $< -o $@\r
+\r
+\r
+# Assemble: create object files from assembler source files.\r
+$(OBJDIR)/%.o : %.S\r
+       @echo\r
+       @echo $(MSG_ASSEMBLING) $<\r
+       $(CC) -c $(ALL_ASFLAGS) $< -o $@\r
+\r
+\r
+# Create preprocessed source for use in sending a bug report.\r
+%.i : %.c\r
+       $(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ \r
+       \r
+\r
+# Target: clean project.\r
+clean: begin clean_list clean_binary end\r
+\r
+clean_binary:\r
+       $(REMOVE) $(TARGET).hex\r
+       \r
+clean_list:\r
+       @echo $(MSG_CLEANING)\r
+       $(REMOVE) $(TARGET).eep\r
+       $(REMOVE) $(TARGET)eep.hex\r
+       $(REMOVE) $(TARGET).cof\r
+       $(REMOVE) $(TARGET).elf\r
+       $(REMOVE) $(TARGET).map\r
+       $(REMOVE) $(TARGET).sym\r
+       $(REMOVE) $(TARGET).lss\r
+       $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.o)\r
+       $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.lst)\r
+       $(REMOVE) $(SRC:.c=.s)\r
+       $(REMOVE) $(SRC:.c=.d)\r
+       $(REMOVE) $(SRC:.c=.i)\r
+       $(REMOVEDIR) .dep\r
+\r
+\r
+doxygen:\r
+       @echo Generating Project Documentation...\r
+       @doxygen Doxygen.conf\r
+       @echo Documentation Generation Complete.\r
+\r
+clean_doxygen:\r
+       rm -rf Documentation\r
+\r
+# Create object files directory\r
+$(shell mkdir $(OBJDIR) 2>/dev/null)\r
+\r
+\r
+# Include the dependency files.\r
+-include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)\r
+\r
+\r
+# Listing of phony targets.\r
+.PHONY : all checkhooks checklibmode checkboard   \\r
+begin finish end sizebefore sizeafter gccversion  \\r
+build elf hex eep lss sym coff extcoff clean      \\r
+clean_list clean_binary program debug gdb-config  \\r
+doxygen dfu flip flip-ee dfu-ee
\ No newline at end of file
diff --git a/Demos/Device/LowLevel/AudioOutput/AudioOutput.aps b/Demos/Device/LowLevel/AudioOutput/AudioOutput.aps
new file mode 100644 (file)
index 0000000..a01ba8f
--- /dev/null
@@ -0,0 +1 @@
+<AVRStudio><MANAGEMENT><ProjectName>AudioOutput</ProjectName><Created>30-Sep-2008 14:03:51</Created><LastEdit>30-Sep-2008 14:04:06</LastEdit><ICON>241</ICON><ProjectType>0</ProjectType><Created>30-Sep-2008 14:03:51</Created><Version>4</Version><Build>4, 14, 0, 589</Build><ProjectTypeName>AVR GCC</ProjectTypeName></MANAGEMENT><CODE_CREATION><ObjectFile></ObjectFile><EntryFile></EntryFile><SaveFolder>C:\Users\Dean\Documents\Electronics\Projects\WORK\MyUSBWORK\Demos\AudioOutput\</SaveFolder></CODE_CREATION><DEBUG_TARGET><CURRENT_TARGET></CURRENT_TARGET><CURRENT_PART></CURRENT_PART><BREAKPOINTS></BREAKPOINTS><IO_EXPAND><HIDE>false</HIDE></IO_EXPAND><REGISTERNAMES><Register>R00</Register><Register>R01</Register><Register>R02</Register><Register>R03</Register><Register>R04</Register><Register>R05</Register><Register>R06</Register><Register>R07</Register><Register>R08</Register><Register>R09</Register><Register>R10</Register><Register>R11</Register><Register>R12</Register><Register>R13</Register><Register>R14</Register><Register>R15</Register><Register>R16</Register><Register>R17</Register><Register>R18</Register><Register>R19</Register><Register>R20</Register><Register>R21</Register><Register>R22</Register><Register>R23</Register><Register>R24</Register><Register>R25</Register><Register>R26</Register><Register>R27</Register><Register>R28</Register><Register>R29</Register><Register>R30</Register><Register>R31</Register></REGISTERNAMES><COM></COM><COMType>0</COMType><WATCHNUM>0</WATCHNUM><WATCHNAMES><Pane0></Pane0><Pane1></Pane1><Pane2></Pane2><Pane3></Pane3></WATCHNAMES><BreakOnTrcaeFull>0</BreakOnTrcaeFull></DEBUG_TARGET><Debugger><Triggers></Triggers></Debugger><AVRGCCPLUGIN><FILES><SOURCEFILE>AudioOutput.c</SOURCEFILE><SOURCEFILE>Descriptors.c</SOURCEFILE><HEADERFILE>AudioOutput.h</HEADERFILE><HEADERFILE>Descriptors.h</HEADERFILE><OTHERFILE>makefile</OTHERFILE></FILES><CONFIGS><CONFIG><NAME>default</NAME><USESEXTERNALMAKEFILE>YES</USESEXTERNALMAKEFILE><EXTERNALMAKEFILE>makefile</EXTERNALMAKEFILE><PART>atmega128</PART><HEX>1</HEX><LIST>1</LIST><MAP>1</MAP><OUTPUTFILENAME>AudioOutput.elf</OUTPUTFILENAME><OUTPUTDIR>default\</OUTPUTDIR><ISDIRTY>1</ISDIRTY><OPTIONS/><INCDIRS/><LIBDIRS/><LIBS/><LINKOBJECTS/><OPTIONSFORALL>-Wall -gdwarf-2 -std=gnu99 -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums</OPTIONSFORALL><LINKEROPTIONS></LINKEROPTIONS><SEGMENTS/></CONFIG></CONFIGS><LASTCONFIG>default</LASTCONFIG><USES_WINAVR>1</USES_WINAVR><GCC_LOC>C:\WinAVR-20080512\bin\avr-gcc.exe</GCC_LOC><MAKE_LOC>C:\WinAVR-20080512\utils\bin\make.exe</MAKE_LOC></AVRGCCPLUGIN><IOView><usergroups/><sort sorted="0" column="0" ordername="0" orderaddress="0" ordergroup="0"/></IOView><Files></Files><Events><Bookmarks></Bookmarks></Events><Trace><Filters></Filters></Trace></AVRStudio>\r
diff --git a/Demos/Device/LowLevel/AudioOutput/AudioOutput.c b/Demos/Device/LowLevel/AudioOutput/AudioOutput.c
new file mode 100644 (file)
index 0000000..40e376b
--- /dev/null
@@ -0,0 +1,291 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  Main source file for the Audio Output demo. This file contains the main tasks of the demo and\r
+ *  is responsible for the initial application hardware configuration.\r
+ */\r
\r
+#include "AudioOutput.h"\r
+\r
+/* Scheduler Task List */\r
+TASK_LIST\r
+{\r
+       { .Task = USB_USBTask          , .TaskStatus = TASK_STOP },\r
+       { .Task = USB_Audio_Task       , .TaskStatus = TASK_STOP },\r
+};\r
+\r
+\r
+/** Main program entry point. This routine configures the hardware required by the application, then\r
+ *  starts the scheduler to run the application tasks.\r
+ */\r
+int main(void)\r
+{\r
+       /* Disable watchdog if enabled by bootloader/fuses */\r
+       MCUSR &= ~(1 << WDRF);\r
+       wdt_disable();\r
+\r
+       /* Disable clock division */\r
+       clock_prescale_set(clock_div_1);\r
+\r
+       /* Hardware Initialization */\r
+       LEDs_Init();\r
+       \r
+       /* Indicate USB not ready */\r
+       UpdateStatus(Status_USBNotReady);\r
+       \r
+       /* Initialize Scheduler so that it can be used */\r
+       Scheduler_Init();\r
+\r
+       /* Initialize USB Subsystem */\r
+       USB_Init();\r
+\r
+       /* Scheduling - routine never returns, so put this last in the main function */\r
+       Scheduler_Start();\r
+}\r
+\r
+/** Event handler for the USB_Connect event. This indicates that the device is enumerating via the status LEDs, and\r
+ *  configures the sample update and PWM timers.\r
+ */\r
+void EVENT_USB_Connect(void)\r
+{\r
+       /* Start USB management task */\r
+       Scheduler_SetTaskMode(USB_USBTask, TASK_RUN);\r
+\r
+       /* Indicate USB enumerating */\r
+       UpdateStatus(Status_USBEnumerating);\r
+       \r
+       /* Sample reload timer initialization */\r
+       OCR0A   = (F_CPU / AUDIO_SAMPLE_FREQUENCY) - 1;\r
+       TCCR0A  = (1 << WGM01);  // CTC mode\r
+       TCCR0B  = (1 << CS00);   // Fcpu speed\r
+                       \r
+#if defined(AUDIO_OUT_MONO)\r
+       /* Set speaker as output */\r
+       DDRC   |= (1 << 6);\r
+#elif defined(AUDIO_OUT_STEREO)\r
+       /* Set speakers as outputs */\r
+       DDRC   |= ((1 << 6) | (1 << 5));\r
+#elif defined(AUDIO_OUT_PORTC)\r
+       /* Set PORTC as outputs */\r
+       DDRC   |= 0xFF;\r
+#endif\r
+\r
+#if (defined(AUDIO_OUT_MONO) || defined(AUDIO_OUT_STEREO))\r
+       /* PWM speaker timer initialization */\r
+       TCCRxA  = ((1 << WGMx0) | (1 << COMxA1) | (1 << COMxA0)\r
+                                                       | (1 << COMxB1) | (1 << COMxB0)); // Set on match, clear on TOP\r
+       TCCRxB  = ((1 << WGMx2) | (1 << CSx0));  // Fast 8-Bit PWM, Fcpu speed\r
+#endif \r
+}\r
+\r
+/** Event handler for the USB_Disconnect event. This indicates that the device is no longer connected to a host via\r
+ *  the status LEDs, disables the sample update and PWM output timers and stops the USB and Audio management tasks.\r
+ */\r
+void EVENT_USB_Disconnect(void)\r
+{\r
+       /* Stop the timers */\r
+       TCCR0B = 0;\r
+#if (defined(AUDIO_OUT_MONO) || defined(AUDIO_OUT_STEREO))\r
+       TCCRxB = 0;\r
+#endif         \r
+\r
+#if defined(AUDIO_OUT_MONO)\r
+       /* Set speaker as input to reduce current draw */\r
+       DDRC   &= ~(1 << 6);\r
+#elif defined(AUDIO_OUT_STEREO)\r
+       /* Set speakers as inputs to reduce current draw */\r
+       DDRC   &= ~((1 << 6) | (1 << 5));\r
+#elif defined(AUDIO_OUT_PORTC)\r
+       /* Set PORTC low */\r
+       PORTC  = 0x00;\r
+#endif\r
+\r
+       /* Stop running audio and USB management tasks */\r
+       Scheduler_SetTaskMode(USB_Audio_Task, TASK_STOP);\r
+       Scheduler_SetTaskMode(USB_USBTask, TASK_STOP);\r
+\r
+       /* Indicate USB not ready */\r
+       UpdateStatus(Status_USBNotReady);\r
+}\r
+\r
+/** Event handler for the USB_ConfigurationChanged event. This is fired when the host set the current configuration\r
+ *  of the USB device after enumeration - the device endpoints are configured.\r
+ */\r
+void EVENT_USB_ConfigurationChanged(void)\r
+{\r
+       /* Setup audio stream endpoint */\r
+       Endpoint_ConfigureEndpoint(AUDIO_STREAM_EPNUM, EP_TYPE_ISOCHRONOUS,\r
+                                      ENDPOINT_DIR_OUT, AUDIO_STREAM_EPSIZE,\r
+                                  ENDPOINT_BANK_DOUBLE);\r
+\r
+       /* Indicate USB connected and ready */\r
+       UpdateStatus(Status_USBReady);\r
+}\r
+\r
+/** Event handler for the USB_UnhandledControlPacket event. This is used to catch standard and class specific\r
+ *  control requests that are not handled internally by the USB library (including the Audio class-specific\r
+ *  requests) so that they can be handled appropriately for the application.\r
+ */\r
+void EVENT_USB_UnhandledControlPacket(void)\r
+{\r
+       /* Process General and Audio specific control requests */\r
+       switch (USB_ControlRequest.bRequest)\r
+       {\r
+               case REQ_SetInterface:\r
+                       /* Set Interface is not handled by the library, as its function is application-specific */\r
+                       if (USB_ControlRequest.bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_STANDARD | REQREC_INTERFACE))\r
+                       {\r
+                               Endpoint_ClearSETUP();\r
+                               \r
+                               /* Check if the host is enabling the audio interface (setting AlternateSetting to 1) */\r
+                               if (USB_ControlRequest.wValue)\r
+                               {\r
+                                       /* Start audio task */\r
+                                       Scheduler_SetTaskMode(USB_Audio_Task, TASK_RUN);\r
+                               }\r
+                               else\r
+                               {\r
+                                       /* Stop audio task */\r
+                                       Scheduler_SetTaskMode(USB_Audio_Task, TASK_STOP);                               \r
+                               }\r
+                               \r
+                               /* Acknowledge status stage */\r
+                               while (!(Endpoint_IsINReady()));\r
+                               Endpoint_ClearIN();\r
+                       }\r
+\r
+                       break;\r
+       }\r
+}\r
+\r
+/** Function to manage status updates to the user. This is done via LEDs on the given board, if available, but may be changed to\r
+ *  log to a serial port, or anything else that is suitable for status updates.\r
+ *\r
+ *  \param CurrentStatus  Current status of the system, from the AudioOutput_StatusCodes_t enum\r
+ */\r
+void UpdateStatus(uint8_t CurrentStatus)\r
+{\r
+       uint8_t LEDMask = LEDS_NO_LEDS;\r
+       \r
+       /* Set the LED mask to the appropriate LED mask based on the given status code */\r
+       switch (CurrentStatus)\r
+       {\r
+               case Status_USBNotReady:\r
+                       LEDMask = (LEDS_LED1);\r
+                       break;\r
+               case Status_USBEnumerating:\r
+                       LEDMask = (LEDS_LED1 | LEDS_LED2);\r
+                       break;\r
+               case Status_USBReady:\r
+                       LEDMask = (LEDS_LED2 | LEDS_LED4);\r
+                       break;\r
+       }\r
+       \r
+       /* Set the board LEDs to the new LED mask */\r
+       LEDs_SetAllLEDs(LEDMask);\r
+}\r
+\r
+/** Task to manage the Audio interface, reading in audio samples from the host, and outputting them to the speakers/LEDs as\r
+ *  desired.\r
+ */\r
+TASK(USB_Audio_Task)\r
+{\r
+       /* Select the audio stream endpoint */\r
+       Endpoint_SelectEndpoint(AUDIO_STREAM_EPNUM);\r
+       \r
+       /* Check if the current endpoint can be read from (contains a packet) and that the next sample should be read */\r
+       if (Endpoint_IsOUTReceived() && (TIFR0 & (1 << OCF0A)))\r
+       {\r
+               /* Clear the sample reload timer */\r
+               TIFR0 |= (1 << OCF0A);\r
+\r
+               /* Retrieve the signed 16-bit left and right audio samples */\r
+               int16_t LeftSample_16Bit  = (int16_t)Endpoint_Read_Word_LE();\r
+               int16_t RightSample_16Bit = (int16_t)Endpoint_Read_Word_LE();\r
+\r
+               /* Check to see if the bank is now empty */\r
+               if (!(Endpoint_IsReadWriteAllowed()))\r
+               {\r
+                       /* Acknowledge the packet, clear the bank ready for the next packet */\r
+                       Endpoint_ClearOUT();\r
+               }\r
+\r
+               /* Massage signed 16-bit left and right audio samples into signed 8-bit */\r
+               int8_t  LeftSample_8Bit   = (LeftSample_16Bit  >> 8);\r
+               int8_t  RightSample_8Bit  = (RightSample_16Bit >> 8);\r
+                       \r
+#if defined(AUDIO_OUT_MONO)\r
+               /* Mix the two channels together to produce a mono, 8-bit sample */\r
+               int8_t  MixedSample_8Bit  = (((int16_t)LeftSample_8Bit + (int16_t)RightSample_8Bit) >> 1);\r
+\r
+               /* Load the sample into the PWM timer channel */\r
+               OCRxA = ((uint8_t)MixedSample_8Bit ^ (1 << 7));\r
+#elif defined(AUDIO_OUT_STEREO)\r
+               /* Load the dual 8-bit samples into the PWM timer channels */\r
+               OCRxA = ((uint8_t)LeftSample_8Bit  ^ (1 << 7));\r
+               OCRxB = ((uint8_t)RightSample_8Bit ^ (1 << 7));\r
+#elif defined(AUDIO_OUT_PORTC)\r
+               /* Mix the two channels together to produce a mono, 8-bit sample */\r
+               int8_t  MixedSample_8Bit  = (((int16_t)LeftSample_8Bit + (int16_t)RightSample_8Bit) >> 1);\r
+\r
+               PORTC = MixedSample_8Bit;\r
+#else\r
+               uint8_t LEDMask = LEDS_NO_LEDS;\r
+\r
+               /* Make left channel positive (absolute) */\r
+               if (LeftSample_8Bit < 0)\r
+                 LeftSample_8Bit = -LeftSample_8Bit;\r
+\r
+               /* Make right channel positive (absolute) */\r
+               if (RightSample_8Bit < 0)\r
+                 RightSample_8Bit = -RightSample_8Bit;\r
+\r
+               /* Set first LED based on sample value */\r
+               if (LeftSample_8Bit < ((128 / 8) * 1))\r
+                 LEDMask |= LEDS_LED2;\r
+               else if (LeftSample_8Bit < ((128 / 8) * 3))\r
+                 LEDMask |= (LEDS_LED1 | LEDS_LED2);\r
+               else\r
+                 LEDMask |= LEDS_LED1;\r
+\r
+               /* Set second LED based on sample value */\r
+               if (RightSample_8Bit < ((128 / 8) * 1))\r
+                 LEDMask |= LEDS_LED4;\r
+               else if (RightSample_8Bit < ((128 / 8) * 3))\r
+                 LEDMask |= (LEDS_LED3 | LEDS_LED4);\r
+               else\r
+                 LEDMask |= LEDS_LED3;\r
+                 \r
+               LEDs_SetAllLEDs(LEDMask);\r
+#endif\r
+       }\r
+}\r
diff --git a/Demos/Device/LowLevel/AudioOutput/AudioOutput.h b/Demos/Device/LowLevel/AudioOutput/AudioOutput.h
new file mode 100644 (file)
index 0000000..d8725a0
--- /dev/null
@@ -0,0 +1,119 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  Header file for AudioOutput.c.\r
+ */\r
+\r
+#ifndef _AUDIO_OUTPUT_H_\r
+#define _AUDIO_OUTPUT_H_\r
+\r
+       /* Includes: */\r
+               #include <avr/io.h>\r
+               #include <avr/wdt.h>\r
+               #include <avr/power.h>\r
+\r
+               #include "Descriptors.h"\r
+               \r
+               #include <LUFA/Version.h>                    // Library Version Information\r
+               #include <LUFA/Drivers/USB/USB.h>            // USB Functionality\r
+               #include <LUFA/Drivers/Board/LEDs.h>         // LEDs driver\r
+               #include <LUFA/Scheduler/Scheduler.h>        // Simple scheduler for task management\r
+       \r
+       /* Macros: */\r
+               #if defined(USB_FULL_CONTROLLER) || defined(USB_MODIFIED_FULL_CONTROLLER)\r
+                       #define TCCRxA          TCCR3A\r
+                       #define TCCRxB          TCCR3B\r
+                       #define OCRxA           OCR3A\r
+                       #define OCRxB           OCR3B\r
+                       #define WGMx0           WGM30\r
+                       #define WGMx2           WGM32\r
+                       #define COMxA1          COM3A1\r
+                       #define COMxA0          COM3A0\r
+                       #define COMxB1          COM3B1\r
+                       #define COMxB0          COM3B0\r
+                       #define CSx0            CS30\r
+               #else\r
+                       /** Timer count register used for left channel PWM audio output (or mixed output in mono output mode) */\r
+                       #define TCCRxA          TCCR1A\r
+\r
+                       /** Timer count register used for right channel PWM audio output */\r
+                       #define TCCRxB          TCCR1B\r
+\r
+                       /** Timer compare register used for left channel PWM audio output (or mixed output in mono output mode) */\r
+                       #define OCRxA           OCR1A\r
+\r
+                       /** Timer compare register used for right channel PWM audio output */\r
+                       #define OCRxB           OCR1B\r
+\r
+                       /** Timer control register mask used to select PWM mode */\r
+                       #define WGMx0           WGM10\r
+\r
+                       /** Timer control register mask used to select PWM mode */\r
+                       #define WGMx2           WGM12\r
+\r
+                       /** Timer control register mask used to set, clear or toggle channel output pin on match */\r
+                       #define COMxA1          COM1A1\r
+\r
+                       /** Timer control register mask used to set, clear or toggle channel output pin on match */\r
+                       #define COMxA0          COM1A0\r
+\r
+                       /** Timer control register mask used to set, clear or toggle channel output pin on match */\r
+                       #define COMxB1          COM1B1\r
+\r
+                       /** Timer control register mask used to set, clear or toggle channel output pin on match */\r
+                       #define COMxB0          COM1B0\r
+\r
+                       /** Timer control register mask used to start the timer at Fcpu clock rate */\r
+                       #define CSx0            CS10\r
+               #endif\r
+               \r
+       /* Enums: */\r
+               /** Enum for the possible status codes for passing to the UpdateStatus() function. */\r
+               enum AudioOutput_StatusCodes_t\r
+               {\r
+                       Status_USBNotReady    = 0, /**< USB is not ready (disconnected from a USB host) */\r
+                       Status_USBEnumerating = 1, /**< USB interface is enumerating */\r
+                       Status_USBReady       = 2, /**< USB interface is connected and ready */\r
+               };\r
+\r
+       /* Task Definitions: */\r
+               TASK(USB_Audio_Task);\r
+       \r
+       /* Function Prototypes: */\r
+               void EVENT_USB_Connect(void);\r
+               void EVENT_USB_Disconnect(void);\r
+               void EVENT_USB_ConfigurationChanged(void);\r
+               void EVENT_USB_UnhandledControlPacket(void);\r
+               \r
+               void UpdateStatus(uint8_t CurrentStatus);\r
+\r
+#endif\r
diff --git a/Demos/Device/LowLevel/AudioOutput/AudioOutput.txt b/Demos/Device/LowLevel/AudioOutput/AudioOutput.txt
new file mode 100644 (file)
index 0000000..a47f9b5
--- /dev/null
@@ -0,0 +1,93 @@
+/** \file\r
+ *\r
+ *  This file contains special DoxyGen information for the generation of the main page and other special\r
+ *  documentation pages. It is not a project source file.\r
+ */\r
\r
+/** \mainpage Audio Output Device Demo\r
+ *\r
+ *  \section SSec_Info USB Information:\r
+ *\r
+ *  The following table gives a rundown of the USB utilization of this demo.\r
+ *\r
+ *  <table>\r
+ *   <tr>\r
+ *    <td><b>USB Mode:</b></td>\r
+ *    <td>Device</td>\r
+ *   </tr>\r
+ *   <tr>\r
+ *    <td><b>USB Class:</b></td>\r
+ *    <td>Audio Class</td>\r
+ *   </tr>\r
+ *   <tr> \r
+ *    <td><b>USB Subclass:</b></td>\r
+ *    <td>Standard Audio Device</td>\r
+ *   </tr>\r
+ *   <tr>\r
+ *    <td><b>Relevant Standards:</b></td>\r
+ *    <td>USBIF Audio Class Specification</td>\r
+ *    <td>USBIF Audio Class Terminal Types Specification</td>\r
+ *    <td>USBIF Audio Data Formats Specification</td>\r
+ *   </tr>\r
+ *   <tr>\r
+ *    <td><b>Usable Speeds:</b></td>\r
+ *    <td>Full Speed Mode</td>\r
+ *   </tr>\r
+ *  </table>\r
+ *\r
+ *  \section SSec_Description Project Description: \r
+ *\r
+ *  Audio demonstration application. This gives a simple reference\r
+ *  application for implementing a USB Audio Output device using the\r
+ *  basic USB Audio drivers in all modern OSes (i.e. no special drivers\r
+ *  required).\r
+ *  \r
+ *  On start-up the system will automatically enumerate and function\r
+ *  as a USB speaker. Incoming audio will output in 8-bit PWM onto\r
+ *  the timer output (timer 3 for the AT90USBXXX6/7 USB AVRs, timer 1 for\r
+ *  the AT90USBXXX2 controller AVRs) compare channel A for AUDIO_OUT_MONO\r
+ *  mode, on channels A and B for AUDIO_OUT_STEREO and on the board LEDs\r
+ *  for AUDIO_OUT_LEDS mode. Decouple audio outputs with a capacitor and\r
+ *  attach to a speaker to hear the audio.\r
+ *  \r
+ *  Under Windows, if a driver request dialogue pops up, select the option\r
+ *  to automatically install the appropriate drivers.\r
+ *\r
+ *  \section SSec_Options Project Options\r
+ *\r
+ *  The following defines can be found in this demo, which can control the demo behaviour when defined, or changed in value.\r
+ *\r
+ *  <table>\r
+ *   <tr>\r
+ *    <td><b>Define Name:</b></td>\r
+ *    <td><b>Location:</b></td>\r
+ *    <td><b>Description:</b></td>\r
+ *   </tr>\r
+ *   <tr>\r
+ *    <td>AUDIO_OUT_STEREO</td>\r
+ *    <td>Makefile CDEFS</td>\r
+ *    <td>When defined, this outputs the audio samples in stereo to the timer output pins of the microcontroller.</td>\r
+ *   </tr>\r
+ *   <tr>\r
+ *    <td>AUDIO_OUT_MONO</td>\r
+ *    <td>Makefile CDEFS</td>\r
+ *    <td>When defined, this outputs the audio samples in mono to the timer output pin of the microcontroller.</td>\r
+ *   </tr>\r
+ *   <tr>\r
+ *    <td>AUDIO_OUT_LEDS</td>\r
+ *    <td>Makefile CDEFS</td>\r
+ *    <td>When defined, this outputs the audio samples in stereo to the board LEDs.</td>\r
+ *   </tr>\r
+ *   <tr>\r
+ *    <td>AUDIO_OUT_PORTC</td>\r
+ *    <td>Makefile CDEFS</td>\r
+ *    <td>When defined, this outputs the audio samples in mono to port C of the microcontroller, for connection to an\r
+ *        external DAC.</td>\r
+ *   </tr>\r
+ *   <tr>\r
+ *    <td>AUDIO_SAMPLE_FREQUENCY</td>\r
+ *    <td>Descriptors.h</td>\r
+ *    <td>Gives the audio sample rate per channel for the audio stream, in Hz.</td>\r
+ *   </tr>\r
+ *  </table>\r
+ */\r
diff --git a/Demos/Device/LowLevel/AudioOutput/Descriptors.c b/Demos/Device/LowLevel/AudioOutput/Descriptors.c
new file mode 100644 (file)
index 0000000..92d7e0d
--- /dev/null
@@ -0,0 +1,314 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  USB Device Descriptors, for library use when in USB device mode. Descriptors are special \r
+ *  computer-readable structures which the host requests upon device enumeration, to determine\r
+ *  the device's capabilities and functions.  \r
+ */\r
\r
+#include "Descriptors.h"\r
+\r
+/** Device descriptor structure. This descriptor, located in FLASH memory, describes the overall\r
+ *  device characteristics, including the supported USB version, control endpoint size and the\r
+ *  number of device configurations. The descriptor is read out by the USB host when the enumeration\r
+ *  process begins.\r
+ */\r
+USB_Descriptor_Device_t PROGMEM DeviceDescriptor =\r
+{\r
+       .Header                 = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device},\r
+               \r
+       .USBSpecification       = VERSION_BCD(02.00),\r
+       .Class                  = 0x00,\r
+       .SubClass               = 0x00,\r
+       .Protocol               = 0x00,\r
+                               \r
+       .Endpoint0Size          = FIXED_CONTROL_ENDPOINT_SIZE,\r
+               \r
+       .VendorID               = 0x03EB,\r
+       .ProductID              = 0x2046,\r
+       .ReleaseNumber          = 0x0000,\r
+               \r
+       .ManufacturerStrIndex   = 0x01,\r
+       .ProductStrIndex        = 0x02,\r
+       .SerialNumStrIndex      = NO_DESCRIPTOR,\r
+               \r
+       .NumberOfConfigurations = 1\r
+};\r
+\r
+/** Configuration descriptor structure. This descriptor, located in FLASH memory, describes the usage\r
+ *  of the device in one of its supported configurations, including information about any device interfaces\r
+ *  and endpoints. The descriptor is read out by the USB host during the enumeration process when selecting\r
+ *  a configuration so that the host may correctly communicate with the USB device.\r
+ */\r
+USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =\r
+{\r
+       .Config = \r
+               {\r
+                       .Header                   = {.Size = sizeof(USB_Descriptor_Configuration_Header_t), .Type = DTYPE_Configuration},\r
+\r
+                       .TotalConfigurationSize   = sizeof(USB_Descriptor_Configuration_t),\r
+                       .TotalInterfaces          = 2,\r
+\r
+                       .ConfigurationNumber      = 1,\r
+                       .ConfigurationStrIndex    = NO_DESCRIPTOR,\r
+                               \r
+                       .ConfigAttributes         = (USB_CONFIG_ATTR_BUSPOWERED | USB_CONFIG_ATTR_SELFPOWERED),\r
+                       \r
+                       .MaxPowerConsumption      = USB_CONFIG_POWER_MA(100)\r
+               },\r
+               \r
+       .AudioControlInterface = \r
+               {\r
+                       .Header                   = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},\r
+\r
+                       .InterfaceNumber          = 0,\r
+                       .AlternateSetting         = 0,\r
+                       \r
+                       .TotalEndpoints           = 0,\r
+                               \r
+                       .Class                    = 0x01,\r
+                       .SubClass                 = 0x01,\r
+                       .Protocol                 = 0x00,\r
+                               \r
+                       .InterfaceStrIndex        = NO_DESCRIPTOR                       \r
+               },\r
+       \r
+       .AudioControlInterface_SPC = \r
+               {\r
+                       .Header                   = {.Size = sizeof(USB_AudioInterface_AC_t), .Type = DTYPE_AudioInterface},\r
+                       .Subtype                  = DSUBTYPE_Header,\r
+                       \r
+                       .ACSpecification          = VERSION_BCD(01.00),\r
+                       .TotalLength              = (sizeof(USB_AudioInterface_AC_t) +\r
+                                                  sizeof(USB_AudioInputTerminal_t) +\r
+                                                                          sizeof(USB_AudioOutputTerminal_t)),\r
+                       \r
+                       .InCollection             = 1,\r
+                       .InterfaceNumbers         = {1},                        \r
+               },\r
+\r
+       .InputTerminal = \r
+               {\r
+                       .Header                   = {.Size = sizeof(USB_AudioInputTerminal_t), .Type = DTYPE_AudioInterface},\r
+                       .Subtype                  = DSUBTYPE_InputTerminal,\r
+               \r
+                       .TerminalID               = 0x01,\r
+                       .TerminalType             = TERMINAL_STREAMING,\r
+                       .AssociatedOutputTerminal = 0x00,\r
+                       \r
+                       .TotalChannels            = 2,\r
+                       .ChannelConfig            = (CHANNEL_LEFT_FRONT | CHANNEL_RIGHT_FRONT),\r
+                       \r
+                       .ChannelStrIndex          = NO_DESCRIPTOR,\r
+                       .TerminalStrIndex         = NO_DESCRIPTOR\r
+               },\r
+\r
+       .OutputTerminal = \r
+               {\r
+                       .Header                   = {.Size = sizeof(USB_AudioOutputTerminal_t), .Type = DTYPE_AudioInterface},\r
+                       .Subtype                  = DSUBTYPE_OutputTerminal,\r
+               \r
+                       .TerminalID               = 0x02,\r
+                       .TerminalType             = TERMINAL_OUT_SPEAKER,\r
+                       .AssociatedInputTerminal  = 0x00,\r
+                       \r
+                       .SourceID                 = 0x01,\r
+                       \r
+                       .TerminalStrIndex         = NO_DESCRIPTOR                       \r
+               },\r
+\r
+       .AudioStreamInterface_Alt0 = \r
+               {\r
+                       .Header                   = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},\r
+\r
+                       .InterfaceNumber          = 1,\r
+                       .AlternateSetting         = 0,\r
+                       \r
+                       .TotalEndpoints           = 0,\r
+                               \r
+                       .Class                    = 0x01,\r
+                       .SubClass                 = 0x02,\r
+                       .Protocol                 = 0x00,\r
+                               \r
+                       .InterfaceStrIndex        = NO_DESCRIPTOR\r
+               },\r
+\r
+       .AudioStreamInterface_Alt1 = \r
+               {\r
+                       .Header                   = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},\r
+\r
+                       .InterfaceNumber          = 1,\r
+                       .AlternateSetting         = 1,\r
+                       \r
+                       .TotalEndpoints           = 1,\r
+                               \r
+                       .Class                    = 0x01,\r
+                       .SubClass                 = 0x02,\r
+                       .Protocol                 = 0x00,\r
+                               \r
+                       .InterfaceStrIndex        = NO_DESCRIPTOR\r
+               },\r
+               \r
+       .AudioStreamInterface_SPC = \r
+               {\r
+                       .Header                   = {.Size = sizeof(USB_AudioInterface_AS_t), .Type = DTYPE_AudioInterface},\r
+                       .Subtype                  = DSUBTYPE_General,\r
+                       \r
+                       .TerminalLink             = 0x01,\r
+                       \r
+                       .FrameDelay               = 1,\r
+                       .AudioFormat              = 0x0001\r
+               },\r
+               \r
+       .AudioFormat = \r
+               {\r
+                       .Header                   = {.Size = sizeof(USB_AudioFormat_t), .Type = DTYPE_AudioInterface},\r
+                       .Subtype                  = DSUBTYPE_Format,\r
+\r
+                       .FormatType               = 0x01,\r
+                       .Channels                 = 0x02,\r
+                       \r
+                       .SubFrameSize             = 0x02,\r
+                       .BitResolution            = 16,\r
+\r
+                       .SampleFrequencyType      = (sizeof(ConfigurationDescriptor.AudioFormat.SampleFrequencies) / sizeof(AudioSampleFreq_t)),                \r
+                       .SampleFrequencies        = {SAMPLE_FREQ(AUDIO_SAMPLE_FREQUENCY)}\r
+               },\r
+       \r
+       .AudioEndpoint = \r
+               {\r
+                       .Endpoint = \r
+                               {\r
+                                       .Header              = {.Size = sizeof(USB_AudioStreamEndpoint_Std_t), .Type = DTYPE_Endpoint},\r
+\r
+                                       .EndpointAddress     = (ENDPOINT_DESCRIPTOR_DIR_OUT | AUDIO_STREAM_EPNUM),\r
+                                       .Attributes          = (EP_TYPE_ISOCHRONOUS | ENDPOINT_ATTR_SYNC | ENDPOINT_USAGE_DATA),\r
+                                       .EndpointSize        = AUDIO_STREAM_EPSIZE,\r
+                                       .PollingIntervalMS   = 1\r
+                               },\r
+                       \r
+                       .Refresh                  = 0,\r
+                       .SyncEndpointNumber       = 0\r
+               },\r
+               \r
+       .AudioEndpoint_SPC = \r
+               {\r
+                       .Header                   = {.Size = sizeof(USB_AudioStreamEndpoint_Spc_t), .Type = DTYPE_AudioEndpoint},\r
+                       .Subtype                  = DSUBTYPE_General,\r
+                       \r
+                       .Attributes               = EP_ACCEPTS_SMALL_PACKETS,\r
+                       \r
+                       .LockDelayUnits           = 0x00,\r
+                       .LockDelay                = 0x0000\r
+               }\r
+};\r
+\r
+/** Language descriptor structure. This descriptor, located in FLASH memory, is returned when the host requests\r
+ *  the string descriptor with index 0 (the first index). It is actually an array of 16-bit integers, which indicate\r
+ *  via the language ID table available at USB.org what languages the device supports for its string descriptors.\r
+ */\r
+USB_Descriptor_String_t PROGMEM LanguageString =\r
+{\r
+       .Header                 = {.Size = USB_STRING_LEN(1), .Type = DTYPE_String},\r
+               \r
+       .UnicodeString          = {LANGUAGE_ID_ENG}\r
+};\r
+\r
+/** Manufacturer descriptor string. This is a Unicode string containing the manufacturer's details in human readable\r
+ *  form, and is read out upon request by the host when the appropriate string ID is requested, listed in the Device\r
+ *  Descriptor.\r
+ */\r
+USB_Descriptor_String_t PROGMEM ManufacturerString =\r
+{\r
+       .Header                 = {.Size = USB_STRING_LEN(11), .Type = DTYPE_String},\r
+               \r
+       .UnicodeString          = L"Dean Camera"\r
+};\r
+\r
+/** Product descriptor string. This is a Unicode string containing the product's details in human readable form,\r
+ *  and is read out upon request by the host when the appropriate string ID is requested, listed in the Device\r
+ *  Descriptor.\r
+ */\r
+USB_Descriptor_String_t PROGMEM ProductString =\r
+{\r
+       .Header                 = {.Size = USB_STRING_LEN(19), .Type = DTYPE_String},\r
+               \r
+       .UnicodeString          = L"LUFA Audio Out Demo"\r
+};\r
+\r
+/** This function is called by the library when in device mode, and must be overridden (see library "USB Descriptors"\r
+ *  documentation) by the application code so that the address and size of a requested descriptor can be given\r
+ *  to the USB library. When the device receives a Get Descriptor request on the control endpoint, this function\r
+ *  is called so that the descriptor details can be passed back and the appropriate descriptor sent back to the\r
+ *  USB host.\r
+ */\r
+uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
+{\r
+       const uint8_t  DescriptorType   = (wValue >> 8);\r
+       const uint8_t  DescriptorNumber = (wValue & 0xFF);\r
+\r
+       void*    Address = NULL;\r
+       uint16_t Size    = NO_DESCRIPTOR;\r
+\r
+       switch (DescriptorType)\r
+       {\r
+               case DTYPE_Device:\r
+                       Address = (void*)&DeviceDescriptor;\r
+                       Size    = sizeof(USB_Descriptor_Device_t);\r
+                       break;\r
+               case DTYPE_Configuration:\r
+                       Address = (void*)&ConfigurationDescriptor;\r
+                       Size    = sizeof(USB_Descriptor_Configuration_t);\r
+                       break;\r
+               case DTYPE_String: \r
+                       switch (DescriptorNumber)\r
+                       {\r
+                               case 0x00:\r
+                                       Address = (void*)&LanguageString;\r
+                                       Size    = pgm_read_byte(&LanguageString.Header.Size);\r
+                                       break;\r
+                               case 0x01: \r
+                                       Address = (void*)&ManufacturerString;\r
+                                       Size    = pgm_read_byte(&ManufacturerString.Header.Size);\r
+                                       break;\r
+                               case 0x02: \r
+                                       Address = (void*)&ProductString;\r
+                                       Size    = pgm_read_byte(&ProductString.Header.Size);\r
+                                       break;\r
+                       }\r
+                       \r
+                       break;\r
+       }\r
+       \r
+       *DescriptorAddress = Address;\r
+       return Size;\r
+}\r
diff --git a/Demos/Device/LowLevel/AudioOutput/Descriptors.h b/Demos/Device/LowLevel/AudioOutput/Descriptors.h
new file mode 100644 (file)
index 0000000..e114571
--- /dev/null
@@ -0,0 +1,322 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  Header file for Descriptors.c.\r
+ */\r
\r
+#ifndef _DESCRIPTORS_H_\r
+#define _DESCRIPTORS_H_\r
+\r
+       /* Includes: */\r
+               #include <LUFA/Drivers/USB/USB.h>\r
+\r
+               #include <avr/pgmspace.h>\r
+\r
+       /* Macros: */\r
+               /** Descriptor header constant to indicate a Audio class interface descriptor. */\r
+               #define DTYPE_AudioInterface         0x24\r
+\r
+               /** Descriptor header constant to indicate a Audio class endpoint descriptor. */\r
+               #define DTYPE_AudioEndpoint          0x25\r
+\r
+               /** Audio class descriptor subtype value for a Audio class specific header descriptor. */\r
+               #define DSUBTYPE_Header              0x01\r
+\r
+               /** Audio class descriptor subtype value for an Output Terminal Audio class specific descriptor. */\r
+               #define DSUBTYPE_InputTerminal       0x02\r
+\r
+               /** Audio class descriptor subtype value for an Input Terminal Audio class specific descriptor. */\r
+               #define DSUBTYPE_OutputTerminal      0x03\r
+\r
+               /** Audio class descriptor subtype value for a Feature Unit Audio class specific descriptor. */\r
+               #define DSUBTYPE_FeatureUnit         0x06\r
+\r
+               /** Audio class descriptor subtype value for a general Audio class specific descriptor. */\r
+               #define DSUBTYPE_General             0x01\r
+\r
+               /** Audio class descriptor subtype value for an Audio class specific descriptor indicating the format of an audio stream. */\r
+               #define DSUBTYPE_Format              0x02\r
+               \r
+               //@{\r
+               /** Supported channel mask for an Audio class terminal descriptor. See the Audio class specification for more details. */\r
+\r
+               #define CHANNEL_LEFT_FRONT           (1 << 0)\r
+               #define CHANNEL_RIGHT_FRONT          (1 << 1)\r
+               #define CHANNEL_CENTER_FRONT         (1 << 2)\r
+               #define CHANNEL_LOW_FREQ_ENHANCE     (1 << 3)\r
+               #define CHANNEL_LEFT_SURROUND        (1 << 4)\r
+               #define CHANNEL_RIGHT_SURROUND       (1 << 5)\r
+               #define CHANNEL_LEFT_OF_CENTER       (1 << 6)\r
+               #define CHANNEL_RIGHT_OF_CENTER      (1 << 7)\r
+               #define CHANNEL_SURROUND             (1 << 8)\r
+               #define CHANNEL_SIDE_LEFT            (1 << 9)\r
+               #define CHANNEL_SIDE_RIGHT           (1 << 10)\r
+               #define CHANNEL_TOP                  (1 << 11)\r
+               //@}\r
+\r
+               //@{\r
+               /** Supported feature mask for an Audio class feature unit descriptor. See the Audio class specification for more details. */\r
+\r
+               #define FEATURE_MUTE                 (1 << 0)\r
+               #define FEATURE_VOLUME               (1 << 1)\r
+               #define FEATURE_BASS                 (1 << 2)\r
+               #define FEATURE_MID                  (1 << 3)\r
+               #define FEATURE_TREBLE               (1 << 4)\r
+               #define FEATURE_GRAPHIC_EQUALIZER    (1 << 5)\r
+               #define FEATURE_AUTOMATIC_GAIN       (1 << 6)\r
+               #define FEATURE_DELAY                (1 << 7)\r
+               #define FEATURE_BASS_BOOST           (1 << 8)\r
+               #define FEATURE_BASS_LOUDNESS        (1 << 9)\r
+               //@}\r
+\r
+               //@{\r
+               /** Terminal type constant for an Audio class terminal descriptor. See the Audio class specification for more details. */\r
+               \r
+               #define TERMINAL_UNDEFINED           0x0100\r
+               #define TERMINAL_STREAMING           0x0101\r
+               #define TERMINAL_VENDOR              0x01FF\r
+               #define TERMINAL_IN_UNDEFINED        0x0200\r
+               #define TERMINAL_IN_MIC              0x0201\r
+               #define TERMINAL_IN_DESKTOP_MIC      0x0202\r
+               #define TERMINAL_IN_PERSONAL_MIC     0x0203\r
+               #define TERMINAL_IN_OMNIDIR_MIC      0x0204\r
+               #define TERMINAL_IN_MIC_ARRAY        0x0205\r
+               #define TERMINAL_IN_PROCESSING_MIC   0x0206\r
+               #define TERMINAL_IN_OUT_UNDEFINED    0x0300\r
+               #define TERMINAL_OUT_SPEAKER         0x0301\r
+               #define TERMINAL_OUT_HEADPHONES      0x0302\r
+               #define TERMINAL_OUT_HEAD_MOUNTED    0x0303\r
+               #define TERMINAL_OUT_DESKTOP         0x0304\r
+               #define TERMINAL_OUT_ROOM            0x0305\r
+               #define TERMINAL_OUT_COMMUNICATION   0x0306\r
+               #define TERMINAL_OUT_LOWFREQ         0x0307\r
+               //@}\r
+\r
+               /** Convenience macro, to fill a 24-bit AudioSampleFreq_t structure with the given sample rate as a 24-bit number.\r
+                *\r
+                *  \param freq  Required audio sampling frequency in HZ\r
+                */\r
+               #define SAMPLE_FREQ(freq)  {LowWord: ((uint32_t)freq & 0x00FFFF), HighByte: (((uint32_t)freq >> 16) & 0x0000FF)}\r
+               \r
+               /** Mask for the attributes parameter of an Audio class specific Endpoint descriptor, indicating that the endpoint\r
+                *  accepts only filled endpoint packets of audio samples.\r
+                */\r
+               #define EP_ACCEPTS_ONLY_FULL_PACKETS (1 << 7)\r
+\r
+               /** Mask for the attributes parameter of an Audio class specific Endpoint descriptor, indicating that the endpoint\r
+                *  will accept partially filled endpoint packets of audio samples.\r
+                */\r
+               #define EP_ACCEPTS_SMALL_PACKETS     (0 << 7)\r
+\r
+               #if defined(USB_FULL_CONTROLLER) || defined(__DOXYGEN__)\r
+                       /** Endpoint number of the Audio isochronous streaming data endpoint. */\r
+                       #define AUDIO_STREAM_EPNUM       1\r
+               #else\r
+                       #define AUDIO_STREAM_EPNUM       3              \r
+               #endif\r
+               \r
+               /** Endpoint size in bytes of the Audio isochronous streaming data endpoint. The Windows audio stack requires\r
+                *  at least 192 bytes for correct output, thus the smaller 128 byte maximum endpoint size on some of the smaller\r
+                *  USB AVR models will result in unavoidable distorted output.\r
+                */\r
+               #define AUDIO_STREAM_EPSIZE          ENDPOINT_MAX_SIZE(AUDIO_STREAM_EPNUM)\r
+               \r
+               /** Sample frequency of the data being transmitted through the streaming endpoint. */\r
+               #define AUDIO_SAMPLE_FREQUENCY       48000\r
+               \r
+       /* Type Defines: */\r
+               /** Type define for an Audio class specific interface descriptor. This follows a regular interface descriptor to\r
+                *  supply extra information about the audio device's layout to the host. See the USB Audio specification for more\r
+                *  details.\r
+                */\r
+               typedef struct\r
+               {\r
+                       USB_Descriptor_Header_t   Header; /**< Regular descriptor header containing the descriptor's type and length */\r
+                       uint8_t                   Subtype; /**< Sub type value used to distinguish between audio class specific descriptors */\r
+\r
+                       uint16_t                  ACSpecification; /**< Binary coded decimal value, indicating the supported Audio Class specification version */\r
+                       uint16_t                  TotalLength; /**< Total length of the Audio class specific descriptors, including this descriptor */\r
+                       \r
+                       uint8_t                   InCollection; /**< Total number of audio class interfaces within this device */\r
+                       uint8_t                   InterfaceNumbers[1]; /**< Interface numbers of each audio interface */\r
+               } USB_AudioInterface_AC_t;\r
+               \r
+               /** Type define for an Audio class specific Feature Unit descriptor. This indicates to the host what features\r
+                *  are present in the device's audio stream for basic control, such as per-channel volume. See the USB Audio\r
+                *  specification for more details.\r
+                */\r
+               typedef struct\r
+               {\r
+                       USB_Descriptor_Header_t   Header; /**< Regular descriptor header containing the descriptor's type and length */\r
+                       uint8_t                   Subtype; /**< Sub type value used to distinguish between audio class specific descriptors */\r
+                       \r
+                       uint8_t                   UnitID; /**< ID value of this feature unit - must be a unique value within the device */\r
+                       uint8_t                   SourceID; /**< Source ID value of the audio source input into this feature unit */\r
+                       \r
+                       uint8_t                   ControlSize; /**< Size of each element in the ChanelControlls array */\r
+                       uint8_t                   ChannelControls[3]; /**< Feature masks for the control channel, and each separate audio channel */\r
+                       \r
+                       uint8_t                   FeatureUnitStrIndex; /**< Index of a string descriptor describing this descriptor within the device */\r
+               } USB_AudioFeatureUnit_t;\r
+\r
+               /** Type define for an Audio class specific input terminal descriptor. This indicates to the host that the device\r
+                *  contains an input audio source, either from a physical terminal on the device, or a logical terminal (for example,\r
+                *  a USB endpoint). See the USB Audio specification for more details.\r
+                */\r
+               typedef struct\r
+               {\r
+                       USB_Descriptor_Header_t   Header; /**< Regular descriptor header containing the descriptor's type and length */\r
+                       uint8_t                   Subtype; /**< Sub type value used to distinguish between audio class specific descriptors */\r
+               \r
+                       uint8_t                   TerminalID; /**< ID value of this terminal unit - must be a unique value within the device */\r
+                       uint16_t                  TerminalType; /**< Type of terminal, a TERMINAL_* mask */\r
+                       uint8_t                   AssociatedOutputTerminal; /**< ID of associated output terminal, for physically grouped terminals\r
+                                                                            *   such as the speaker and microphone of a phone handset\r
+                                                                            */\r
+                       uint8_t                   TotalChannels; /**< Total number of separate audio channels within this interface (right, left, etc.) */\r
+                       uint16_t                  ChannelConfig; /**< CHANNEL_* masks indicating what channel layout is supported by this terminal */\r
+                       \r
+                       uint8_t                   ChannelStrIndex; /**< Index of a string descriptor describing this channel within the device */\r
+                       uint8_t                   TerminalStrIndex; /**< Index of a string descriptor describing this descriptor within the device */\r
+               } USB_AudioInputTerminal_t;\r
+\r
+               /** Type define for an Audio class specific output terminal descriptor. This indicates to the host that the device\r
+                *  contains an output audio sink, either to a physical terminal on the device, or a logical terminal (for example,\r
+                *  a USB endpoint). See the USB Audio specification for more details.\r
+                */\r
+               typedef struct\r
+               {\r
+                       USB_Descriptor_Header_t   Header; /**< Regular descriptor header containing the descriptor's type and length */\r
+                       uint8_t                   Subtype; /**< Sub type value used to distinguish between audio class specific descriptors */\r
+               \r
+                       uint8_t                   TerminalID; /**< ID value of this terminal unit - must be a unique value within the device */\r
+                       uint16_t                  TerminalType; /**< Type of terminal, a TERMINAL_* mask */\r
+                       uint8_t                   AssociatedInputTerminal; /**< ID of associated input terminal, for physically grouped terminals\r
+                                                                           *   such as the speaker and microphone of a phone handset\r
+                                                                           */\r
+                       uint8_t                   SourceID; /**< ID value of the unit this terminal's audio is sourced from */\r
+                       \r
+                       uint8_t                   TerminalStrIndex; /**< Index of a string descriptor describing this descriptor within the device */\r
+               } USB_AudioOutputTerminal_t;\r
+               \r
+               /** Type define for an Audio class specific streaming interface descriptor. This indicates to the host\r
+                *  how audio streams within the device are formatted. See the USB Audio specification for more details.\r
+                */\r
+               typedef struct\r
+               {\r
+                       USB_Descriptor_Header_t   Header; /**< Regular descriptor header containing the descriptor's type and length */\r
+                       uint8_t                   Subtype; /**< Sub type value used to distinguish between audio class specific descriptors */\r
+                       \r
+                       uint8_t                   TerminalLink; /**< ID value of the output terminal this descriptor is describing */\r
+                       \r
+                       uint8_t                   FrameDelay; /**< Delay in frames resulting from the complete sample processing from input to output */\r
+                       uint16_t                  AudioFormat; /**< Format of the audio stream, see Audio Device Formats specification */\r
+               } USB_AudioInterface_AS_t;\r
+               \r
+               /** Type define for a 24bit audio sample frequency structure. GCC does not contain a built in 24bit datatype,\r
+                *  this this structure is used to build up the value instead. Fill this structure with the SAMPLE_FREQ() macro.\r
+                */\r
+               typedef struct\r
+               {\r
+                       uint16_t                  LowWord; /**< Low 16 bits of the 24-bit value */\r
+                       uint8_t                   HighByte; /**< Upper 8 bits of the 24-bit value */\r
+               } AudioSampleFreq_t;\r
+\r
+               /** Type define for an Audio class specific audio format descriptor. This is used to give the host full details\r
+                *  about the number of channels, the sample resolution, acceptable sample frequencies and encoding method used\r
+                *  in the device's audio streams. See the USB Audio specification for more details.\r
+                */\r
+               typedef struct\r
+               {\r
+                       USB_Descriptor_Header_t   Header; /**< Regular descriptor header containing the descriptor's type and length */\r
+                       uint8_t                   Subtype; /**< Sub type value used to distinguish between audio class specific descriptors */\r
+\r
+                       uint8_t                   FormatType; /**< Format of the audio stream, see Audio Device Formats specification */\r
+                       uint8_t                   Channels; /**< Total number of discrete channels in the stream */\r
+                       \r
+                       uint8_t                   SubFrameSize; /**< Size in bytes of each channel's sample data in the stream */\r
+                       uint8_t                   BitResolution; /**< Bits of resolution of each channel's samples in the stream */\r
+\r
+                       uint8_t                   SampleFrequencyType; /**< Total number of sample frequencies supported by the device */                       \r
+                       AudioSampleFreq_t         SampleFrequencies[1]; /**< Sample frequencies supported by the device */\r
+               } USB_AudioFormat_t;\r
+               \r
+               /** Type define for an Audio class specific endpoint descriptor. This contains a regular endpoint \r
+                *  descriptor with a few Audio-class specific extensions. See the USB Audio specification for more details.\r
+                */\r
+               typedef struct\r
+               {\r
+                       USB_Descriptor_Endpoint_t Endpoint; /**< Standard endpoint descriptor describing the audio endpoint */\r
+\r
+                       uint8_t                   Refresh; /**< Always set to zero */\r
+                       uint8_t                   SyncEndpointNumber; /**< Endpoint address to send synchronisation information to, if needed (zero otherwise) */\r
+               } USB_AudioStreamEndpoint_Std_t;\r
+                                       \r
+               /** Type define for an Audio class specific extended endpoint descriptor. This contains extra information\r
+                *  on the usage of endpoints used to stream audio in and out of the USB Audio device, and follows an Audio\r
+                *  class specific extended endpoint descriptor. See the USB Audio specification for more details.\r
+                */\r
+               typedef struct\r
+               {\r
+                       USB_Descriptor_Header_t   Header; /**< Regular descriptor header containing the descriptor's type and length */\r
+                       uint8_t                   Subtype; /**< Sub type value used to distinguish between audio class specific descriptors */\r
+                       \r
+                       uint8_t                   Attributes; /**< Audio class specific endpoint attributes, such as ACCEPTS_SMALL_PACKETS */\r
+\r
+                       uint8_t                   LockDelayUnits; /**< Units used for the LockDelay field, see Audio class specification */\r
+                       uint16_t                  LockDelay; /**< Time required to internally lock endpoint's internal clock recovery circuitry */\r
+               } USB_AudioStreamEndpoint_Spc_t;        \r
+\r
+               /** Type define for the device configuration descriptor structure. This must be defined in the\r
+                *  application code, as the configuration descriptor contains several sub-descriptors which\r
+                *  vary between devices, and which describe the device's usage to the host.\r
+                */\r
+               typedef struct\r
+               {\r
+                       USB_Descriptor_Configuration_Header_t Config;\r
+                       USB_Descriptor_Interface_t            AudioControlInterface;\r
+                       USB_AudioInterface_AC_t               AudioControlInterface_SPC;\r
+                       USB_AudioInputTerminal_t              InputTerminal;\r
+                       USB_AudioOutputTerminal_t             OutputTerminal;\r
+                       USB_Descriptor_Interface_t            AudioStreamInterface_Alt0;\r
+                       USB_Descriptor_Interface_t            AudioStreamInterface_Alt1;\r
+                       USB_AudioInterface_AS_t               AudioStreamInterface_SPC;\r
+                       USB_AudioFormat_t                     AudioFormat;\r
+                       USB_AudioStreamEndpoint_Std_t         AudioEndpoint;\r
+                       USB_AudioStreamEndpoint_Spc_t         AudioEndpoint_SPC;\r
+               } USB_Descriptor_Configuration_t;\r
+               \r
+       /* Function Prototypes: */\r
+               uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
+                                                                                       ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);\r
+\r
+#endif\r
diff --git a/Demos/Device/LowLevel/AudioOutput/Doxygen.conf b/Demos/Device/LowLevel/AudioOutput/Doxygen.conf
new file mode 100644 (file)
index 0000000..114137e
--- /dev/null
@@ -0,0 +1,1485 @@
+# Doxyfile 1.5.7.1\r
+\r
+# This file describes the settings to be used by the documentation system\r
+# doxygen (www.doxygen.org) for a project\r
+#\r
+# All text after a hash (#) is considered a comment and will be ignored\r
+# The format is:\r
+#       TAG = value [value, ...]\r
+# For lists items can also be appended using:\r
+#       TAG += value [value, ...]\r
+# Values that contain spaces should be placed between quotes (" ")\r
+\r
+#---------------------------------------------------------------------------\r
+# Project related configuration options\r
+#---------------------------------------------------------------------------\r
+\r
+# This tag specifies the encoding used for all characters in the config file \r
+# that follow. The default is UTF-8 which is also the encoding used for all \r
+# text before the first occurrence of this tag. Doxygen uses libiconv (or the \r
+# iconv built into libc) for the transcoding. See \r
+# http://www.gnu.org/software/libiconv for the list of possible encodings.\r
+\r
+DOXYFILE_ENCODING      = UTF-8\r
+\r
+# The PROJECT_NAME tag is a single word (or a sequence of words surrounded \r
+# by quotes) that should identify the project.\r
+\r
+PROJECT_NAME           = "LUFA Library - Audio Output Device Demo"\r
+\r
+# The PROJECT_NUMBER tag can be used to enter a project or revision number. \r
+# This could be handy for archiving the generated documentation or \r
+# if some version control system is used.\r
+\r
+PROJECT_NUMBER         = 0.0.0\r
+\r
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) \r
+# base path where the generated documentation will be put. \r
+# If a relative path is entered, it will be relative to the location \r
+# where doxygen was started. If left blank the current directory will be used.\r
+\r
+OUTPUT_DIRECTORY       = ./Documentation/\r
+\r
+# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create \r
+# 4096 sub-directories (in 2 levels) under the output directory of each output \r
+# format and will distribute the generated files over these directories. \r
+# Enabling this option can be useful when feeding doxygen a huge amount of \r
+# source files, where putting all generated files in the same directory would \r
+# otherwise cause performance problems for the file system.\r
+\r
+CREATE_SUBDIRS         = YES\r
+\r
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all \r
+# documentation generated by doxygen is written. Doxygen will use this \r
+# information to generate all constant output in the proper language. \r
+# The default language is English, other supported languages are: \r
+# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, \r
+# Croatian, Czech, Danish, Dutch, Farsi, Finnish, French, German, Greek, \r
+# Hungarian, Italian, Japanese, Japanese-en (Japanese with English messages), \r
+# Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, Polish, \r
+# Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, Slovene, \r
+# Spanish, Swedish, and Ukrainian.\r
+\r
+OUTPUT_LANGUAGE        = English\r
+\r
+# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will \r
+# include brief member descriptions after the members that are listed in \r
+# the file and class documentation (similar to JavaDoc). \r
+# Set to NO to disable this.\r
+\r
+BRIEF_MEMBER_DESC      = YES\r
+\r
+# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend \r
+# the brief description of a member or function before the detailed description. \r
+# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the \r
+# brief descriptions will be completely suppressed.\r
+\r
+REPEAT_BRIEF           = YES\r
+\r
+# This tag implements a quasi-intelligent brief description abbreviator \r
+# that is used to form the text in various listings. Each string \r
+# in this list, if found as the leading text of the brief description, will be \r
+# stripped from the text and the result after processing the whole list, is \r
+# used as the annotated text. Otherwise, the brief description is used as-is. \r
+# If left blank, the following values are used ("$name" is automatically \r
+# replaced with the name of the entity): "The $name class" "The $name widget" \r
+# "The $name file" "is" "provides" "specifies" "contains" \r
+# "represents" "a" "an" "the"\r
+\r
+ABBREVIATE_BRIEF       = "The $name class" \\r
+                         "The $name widget" \\r
+                         "The $name file" \\r
+                         is \\r
+                         provides \\r
+                         specifies \\r
+                         contains \\r
+                         represents \\r
+                         a \\r
+                         an \\r
+                         the\r
+\r
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then \r
+# Doxygen will generate a detailed section even if there is only a brief \r
+# description.\r
+\r
+ALWAYS_DETAILED_SEC    = NO\r
+\r
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all \r
+# inherited members of a class in the documentation of that class as if those \r
+# members were ordinary class members. Constructors, destructors and assignment \r
+# operators of the base classes will not be shown.\r
+\r
+INLINE_INHERITED_MEMB  = NO\r
+\r
+# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full \r
+# path before files name in the file list and in the header files. If set \r
+# to NO the shortest path that makes the file name unique will be used.\r
+\r
+FULL_PATH_NAMES        = YES\r
+\r
+# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag \r
+# can be used to strip a user-defined part of the path. Stripping is \r
+# only done if one of the specified strings matches the left-hand part of \r
+# the path. The tag can be used to show relative paths in the file list. \r
+# If left blank the directory from which doxygen is run is used as the \r
+# path to strip.\r
+\r
+STRIP_FROM_PATH        = \r
+\r
+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of \r
+# the path mentioned in the documentation of a class, which tells \r
+# the reader which header file to include in order to use a class. \r
+# If left blank only the name of the header file containing the class \r
+# definition is used. Otherwise one should specify the include paths that \r
+# are normally passed to the compiler using the -I flag.\r
+\r
+STRIP_FROM_INC_PATH    = \r
+\r
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter \r
+# (but less readable) file names. This can be useful is your file systems \r
+# doesn't support long names like on DOS, Mac, or CD-ROM.\r
+\r
+SHORT_NAMES            = YES\r
+\r
+# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen \r
+# will interpret the first line (until the first dot) of a JavaDoc-style \r
+# comment as the brief description. If set to NO, the JavaDoc \r
+# comments will behave just like regular Qt-style comments \r
+# (thus requiring an explicit @brief command for a brief description.)\r
+\r
+JAVADOC_AUTOBRIEF      = NO\r
+\r
+# If the QT_AUTOBRIEF tag is set to YES then Doxygen will \r
+# interpret the first line (until the first dot) of a Qt-style \r
+# comment as the brief description. If set to NO, the comments \r
+# will behave just like regular Qt-style comments (thus requiring \r
+# an explicit \brief command for a brief description.)\r
+\r
+QT_AUTOBRIEF           = NO\r
+\r
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen \r
+# treat a multi-line C++ special comment block (i.e. a block of //! or /// \r
+# comments) as a brief description. This used to be the default behaviour. \r
+# The new default is to treat a multi-line C++ comment block as a detailed \r
+# description. Set this tag to YES if you prefer the old behaviour instead.\r
+\r
+MULTILINE_CPP_IS_BRIEF = NO\r
+\r
+# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented \r
+# member inherits the documentation from any documented member that it \r
+# re-implements.\r
+\r
+INHERIT_DOCS           = YES\r
+\r
+# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce \r
+# a new page for each member. If set to NO, the documentation of a member will \r
+# be part of the file/class/namespace that contains it.\r
+\r
+SEPARATE_MEMBER_PAGES  = NO\r
+\r
+# The TAB_SIZE tag can be used to set the number of spaces in a tab. \r
+# Doxygen uses this value to replace tabs by spaces in code fragments.\r
+\r
+TAB_SIZE               = 4\r
+\r
+# This tag can be used to specify a number of aliases that acts \r
+# as commands in the documentation. An alias has the form "name=value". \r
+# For example adding "sideeffect=\par Side Effects:\n" will allow you to \r
+# put the command \sideeffect (or @sideeffect) in the documentation, which \r
+# will result in a user-defined paragraph with heading "Side Effects:". \r
+# You can put \n's in the value part of an alias to insert newlines.\r
+\r
+ALIASES                = \r
+\r
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C \r
+# sources only. Doxygen will then generate output that is more tailored for C. \r
+# For instance, some of the names that are used will be different. The list \r
+# of all members will be omitted, etc.\r
+\r
+OPTIMIZE_OUTPUT_FOR_C  = YES\r
+\r
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java \r
+# sources only. Doxygen will then generate output that is more tailored for \r
+# Java. For instance, namespaces will be presented as packages, qualified \r
+# scopes will look different, etc.\r
+\r
+OPTIMIZE_OUTPUT_JAVA   = NO\r
+\r
+# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran \r
+# sources only. Doxygen will then generate output that is more tailored for \r
+# Fortran.\r
+\r
+OPTIMIZE_FOR_FORTRAN   = NO\r
+\r
+# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL \r
+# sources. Doxygen will then generate output that is tailored for \r
+# VHDL.\r
+\r
+OPTIMIZE_OUTPUT_VHDL   = NO\r
+\r
+# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want \r
+# to include (a tag file for) the STL sources as input, then you should \r
+# set this tag to YES in order to let doxygen match functions declarations and \r
+# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. \r
+# func(std::string) {}). This also make the inheritance and collaboration \r
+# diagrams that involve STL classes more complete and accurate.\r
+\r
+BUILTIN_STL_SUPPORT    = NO\r
+\r
+# If you use Microsoft's C++/CLI language, you should set this option to YES to\r
+# enable parsing support.\r
+\r
+CPP_CLI_SUPPORT        = NO\r
+\r
+# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. \r
+# Doxygen will parse them like normal C++ but will assume all classes use public \r
+# instead of private inheritance when no explicit protection keyword is present.\r
+\r
+SIP_SUPPORT            = NO\r
+\r
+# For Microsoft's IDL there are propget and propput attributes to indicate getter \r
+# and setter methods for a property. Setting this option to YES (the default) \r
+# will make doxygen to replace the get and set methods by a property in the \r
+# documentation. This will only work if the methods are indeed getting or \r
+# setting a simple type. If this is not the case, or you want to show the \r
+# methods anyway, you should set this option to NO.\r
+\r
+IDL_PROPERTY_SUPPORT   = YES\r
+\r
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC \r
+# tag is set to YES, then doxygen will reuse the documentation of the first \r
+# member in the group (if any) for the other members of the group. By default \r
+# all members of a group must be documented explicitly.\r
+\r
+DISTRIBUTE_GROUP_DOC   = YES\r
+\r
+# Set the SUBGROUPING tag to YES (the default) to allow class member groups of \r
+# the same type (for instance a group of public functions) to be put as a \r
+# subgroup of that type (e.g. under the Public Functions section). Set it to \r
+# NO to prevent subgrouping. Alternatively, this can be done per class using \r
+# the \nosubgrouping command.\r
+\r
+SUBGROUPING            = YES\r
+\r
+# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum \r
+# is documented as struct, union, or enum with the name of the typedef. So \r
+# typedef struct TypeS {} TypeT, will appear in the documentation as a struct \r
+# with name TypeT. When disabled the typedef will appear as a member of a file, \r
+# namespace, or class. And the struct will be named TypeS. This can typically \r
+# be useful for C code in case the coding convention dictates that all compound \r
+# types are typedef'ed and only the typedef is referenced, never the tag name.\r
+\r
+TYPEDEF_HIDES_STRUCT   = NO\r
+\r
+# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to \r
+# determine which symbols to keep in memory and which to flush to disk.\r
+# When the cache is full, less often used symbols will be written to disk.\r
+# For small to medium size projects (<1000 input files) the default value is \r
+# probably good enough. For larger projects a too small cache size can cause \r
+# doxygen to be busy swapping symbols to and from disk most of the time \r
+# causing a significant performance penality. \r
+# If the system has enough physical memory increasing the cache will improve the \r
+# performance by keeping more symbols in memory. Note that the value works on \r
+# a logarithmic scale so increasing the size by one will rougly double the \r
+# memory usage. The cache size is given by this formula: \r
+# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, \r
+# corresponding to a cache size of 2^16 = 65536 symbols\r
+\r
+SYMBOL_CACHE_SIZE      = 0\r
+\r
+#---------------------------------------------------------------------------\r
+# Build related configuration options\r
+#---------------------------------------------------------------------------\r
+\r
+# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in \r
+# documentation are documented, even if no documentation was available. \r
+# Private class members and static file members will be hidden unless \r
+# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES\r
+\r
+EXTRACT_ALL            = YES\r
+\r
+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class \r
+# will be included in the documentation.\r
+\r
+EXTRACT_PRIVATE        = YES\r
+\r
+# If the EXTRACT_STATIC tag is set to YES all static members of a file \r
+# will be included in the documentation.\r
+\r
+EXTRACT_STATIC         = YES\r
+\r
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) \r
+# defined locally in source files will be included in the documentation. \r
+# If set to NO only classes defined in header files are included.\r
+\r
+EXTRACT_LOCAL_CLASSES  = YES\r
+\r
+# This flag is only useful for Objective-C code. When set to YES local \r
+# methods, which are defined in the implementation section but not in \r
+# the interface are included in the documentation. \r
+# If set to NO (the default) only methods in the interface are included.\r
+\r
+EXTRACT_LOCAL_METHODS  = NO\r
+\r
+# If this flag is set to YES, the members of anonymous namespaces will be \r
+# extracted and appear in the documentation as a namespace called \r
+# 'anonymous_namespace{file}', where file will be replaced with the base \r
+# name of the file that contains the anonymous namespace. By default \r
+# anonymous namespace are hidden.\r
+\r
+EXTRACT_ANON_NSPACES   = NO\r
+\r
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all \r
+# undocumented members of documented classes, files or namespaces. \r
+# If set to NO (the default) these members will be included in the \r
+# various overviews, but no documentation section is generated. \r
+# This option has no effect if EXTRACT_ALL is enabled.\r
+\r
+HIDE_UNDOC_MEMBERS     = NO\r
+\r
+# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all \r
+# undocumented classes that are normally visible in the class hierarchy. \r
+# If set to NO (the default) these classes will be included in the various \r
+# overviews. This option has no effect if EXTRACT_ALL is enabled.\r
+\r
+HIDE_UNDOC_CLASSES     = NO\r
+\r
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all \r
+# friend (class|struct|union) declarations. \r
+# If set to NO (the default) these declarations will be included in the \r
+# documentation.\r
+\r
+HIDE_FRIEND_COMPOUNDS  = NO\r
+\r
+# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any \r
+# documentation blocks found inside the body of a function. \r
+# If set to NO (the default) these blocks will be appended to the \r
+# function's detailed documentation block.\r
+\r
+HIDE_IN_BODY_DOCS      = NO\r
+\r
+# The INTERNAL_DOCS tag determines if documentation \r
+# that is typed after a \internal command is included. If the tag is set \r
+# to NO (the default) then the documentation will be excluded. \r
+# Set it to YES to include the internal documentation.\r
+\r
+INTERNAL_DOCS          = NO\r
+\r
+# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate \r
+# file names in lower-case letters. If set to YES upper-case letters are also \r
+# allowed. This is useful if you have classes or files whose names only differ \r
+# in case and if your file system supports case sensitive file names. Windows \r
+# and Mac users are advised to set this option to NO.\r
+\r
+CASE_SENSE_NAMES       = NO\r
+\r
+# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen \r
+# will show members with their full class and namespace scopes in the \r
+# documentation. If set to YES the scope will be hidden.\r
+\r
+HIDE_SCOPE_NAMES       = NO\r
+\r
+# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen \r
+# will put a list of the files that are included by a file in the documentation \r
+# of that file.\r
+\r
+SHOW_INCLUDE_FILES     = YES\r
+\r
+# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] \r
+# is inserted in the documentation for inline members.\r
+\r
+INLINE_INFO            = YES\r
+\r
+# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen \r
+# will sort the (detailed) documentation of file and class members \r
+# alphabetically by member name. If set to NO the members will appear in \r
+# declaration order.\r
+\r
+SORT_MEMBER_DOCS       = YES\r
+\r
+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the \r
+# brief documentation of file, namespace and class members alphabetically \r
+# by member name. If set to NO (the default) the members will appear in \r
+# declaration order.\r
+\r
+SORT_BRIEF_DOCS        = NO\r
+\r
+# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the \r
+# hierarchy of group names into alphabetical order. If set to NO (the default) \r
+# the group names will appear in their defined order.\r
+\r
+SORT_GROUP_NAMES       = NO\r
+\r
+# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be \r
+# sorted by fully-qualified names, including namespaces. If set to \r
+# NO (the default), the class list will be sorted only by class name, \r
+# not including the namespace part. \r
+# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.\r
+# Note: This option applies only to the class list, not to the \r
+# alphabetical list.\r
+\r
+SORT_BY_SCOPE_NAME     = NO\r
+\r
+# The GENERATE_TODOLIST tag can be used to enable (YES) or \r
+# disable (NO) the todo list. This list is created by putting \todo \r
+# commands in the documentation.\r
+\r
+GENERATE_TODOLIST      = NO\r
+\r
+# The GENERATE_TESTLIST tag can be used to enable (YES) or \r
+# disable (NO) the test list. This list is created by putting \test \r
+# commands in the documentation.\r
+\r
+GENERATE_TESTLIST      = NO\r
+\r
+# The GENERATE_BUGLIST tag can be used to enable (YES) or \r
+# disable (NO) the bug list. This list is created by putting \bug \r
+# commands in the documentation.\r
+\r
+GENERATE_BUGLIST       = NO\r
+\r
+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or \r
+# disable (NO) the deprecated list. This list is created by putting \r
+# \deprecated commands in the documentation.\r
+\r
+GENERATE_DEPRECATEDLIST= YES\r
+\r
+# The ENABLED_SECTIONS tag can be used to enable conditional \r
+# documentation sections, marked by \if sectionname ... \endif.\r
+\r
+ENABLED_SECTIONS       = \r
+\r
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines \r
+# the initial value of a variable or define consists of for it to appear in \r
+# the documentation. If the initializer consists of more lines than specified \r
+# here it will be hidden. Use a value of 0 to hide initializers completely. \r
+# The appearance of the initializer of individual variables and defines in the \r
+# documentation can be controlled using \showinitializer or \hideinitializer \r
+# command in the documentation regardless of this setting.\r
+\r
+MAX_INITIALIZER_LINES  = 30\r
+\r
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated \r
+# at the bottom of the documentation of classes and structs. If set to YES the \r
+# list will mention the files that were used to generate the documentation.\r
+\r
+SHOW_USED_FILES        = YES\r
+\r
+# If the sources in your project are distributed over multiple directories \r
+# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy \r
+# in the documentation. The default is NO.\r
+\r
+SHOW_DIRECTORIES       = YES\r
+\r
+# Set the SHOW_FILES tag to NO to disable the generation of the Files page.\r
+# This will remove the Files entry from the Quick Index and from the \r
+# Folder Tree View (if specified). The default is YES.\r
+\r
+SHOW_FILES             = YES\r
+\r
+# Set the SHOW_NAMESPACES tag to NO to disable the generation of the \r
+# Namespaces page.  This will remove the Namespaces entry from the Quick Index\r
+# and from the Folder Tree View (if specified). The default is YES.\r
+\r
+SHOW_NAMESPACES        = YES\r
+\r
+# The FILE_VERSION_FILTER tag can be used to specify a program or script that \r
+# doxygen should invoke to get the current version for each file (typically from \r
+# the version control system). Doxygen will invoke the program by executing (via \r
+# popen()) the command <command> <input-file>, where <command> is the value of \r
+# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file \r
+# provided by doxygen. Whatever the program writes to standard output \r
+# is used as the file version. See the manual for examples.\r
+\r
+FILE_VERSION_FILTER    = \r
+\r
+# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by \r
+# doxygen. The layout file controls the global structure of the generated output files \r
+# in an output format independent way. The create the layout file that represents \r
+# doxygen's defaults, run doxygen with the -l option. You can optionally specify a \r
+# file name after the option, if omitted DoxygenLayout.xml will be used as the name \r
+# of the layout file.\r
+\r
+LAYOUT_FILE            = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to warning and progress messages\r
+#---------------------------------------------------------------------------\r
+\r
+# The QUIET tag can be used to turn on/off the messages that are generated \r
+# by doxygen. Possible values are YES and NO. If left blank NO is used.\r
+\r
+QUIET                  = YES\r
+\r
+# The WARNINGS tag can be used to turn on/off the warning messages that are \r
+# generated by doxygen. Possible values are YES and NO. If left blank \r
+# NO is used.\r
+\r
+WARNINGS               = YES\r
+\r
+# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings \r
+# for undocumented members. If EXTRACT_ALL is set to YES then this flag will \r
+# automatically be disabled.\r
+\r
+WARN_IF_UNDOCUMENTED   = YES\r
+\r
+# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for \r
+# potential errors in the documentation, such as not documenting some \r
+# parameters in a documented function, or documenting parameters that \r
+# don't exist or using markup commands wrongly.\r
+\r
+WARN_IF_DOC_ERROR      = YES\r
+\r
+# This WARN_NO_PARAMDOC option can be abled to get warnings for \r
+# functions that are documented, but have no documentation for their parameters \r
+# or return value. If set to NO (the default) doxygen will only warn about \r
+# wrong or incomplete parameter documentation, but not about the absence of \r
+# documentation.\r
+\r
+WARN_NO_PARAMDOC       = YES\r
+\r
+# The WARN_FORMAT tag determines the format of the warning messages that \r
+# doxygen can produce. The string should contain the $file, $line, and $text \r
+# tags, which will be replaced by the file and line number from which the \r
+# warning originated and the warning text. Optionally the format may contain \r
+# $version, which will be replaced by the version of the file (if it could \r
+# be obtained via FILE_VERSION_FILTER)\r
+\r
+WARN_FORMAT            = "$file:$line: $text"\r
+\r
+# The WARN_LOGFILE tag can be used to specify a file to which warning \r
+# and error messages should be written. If left blank the output is written \r
+# to stderr.\r
+\r
+WARN_LOGFILE           = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the input files\r
+#---------------------------------------------------------------------------\r
+\r
+# The INPUT tag can be used to specify the files and/or directories that contain \r
+# documented source files. You may enter file names like "myfile.cpp" or \r
+# directories like "/usr/src/myproject". Separate the files or directories \r
+# with spaces.\r
+\r
+INPUT                  = ./\r
+\r
+# This tag can be used to specify the character encoding of the source files \r
+# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is \r
+# also the default input encoding. Doxygen uses libiconv (or the iconv built \r
+# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for \r
+# the list of possible encodings.\r
+\r
+INPUT_ENCODING         = UTF-8\r
+\r
+# If the value of the INPUT tag contains directories, you can use the \r
+# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \r
+# and *.h) to filter out the source-files in the directories. If left \r
+# blank the following patterns are tested: \r
+# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx \r
+# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90\r
+\r
+FILE_PATTERNS          = *.h \\r
+                         *.c \\r
+                                                *.txt\r
+\r
+# The RECURSIVE tag can be used to turn specify whether or not subdirectories \r
+# should be searched for input files as well. Possible values are YES and NO. \r
+# If left blank NO is used.\r
+\r
+RECURSIVE              = YES\r
+\r
+# The EXCLUDE tag can be used to specify files and/or directories that should \r
+# excluded from the INPUT source files. This way you can easily exclude a \r
+# subdirectory from a directory tree whose root is specified with the INPUT tag.\r
+\r
+EXCLUDE                = \r
+\r
+# The EXCLUDE_SYMLINKS tag can be used select whether or not files or \r
+# directories that are symbolic links (a Unix filesystem feature) are excluded \r
+# from the input.\r
+\r
+EXCLUDE_SYMLINKS       = NO\r
+\r
+# If the value of the INPUT tag contains directories, you can use the \r
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude \r
+# certain files from those directories. Note that the wildcards are matched \r
+# against the file with absolute path, so to exclude all test directories \r
+# for example use the pattern */test/*\r
+\r
+EXCLUDE_PATTERNS       = */LowLevel/USBMode.h\r
+\r
+# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names \r
+# (namespaces, classes, functions, etc.) that should be excluded from the \r
+# output. The symbol name can be a fully qualified name, a word, or if the \r
+# wildcard * is used, a substring. Examples: ANamespace, AClass, \r
+# AClass::ANamespace, ANamespace::*Test\r
+\r
+EXCLUDE_SYMBOLS        = __*\r
+\r
+# The EXAMPLE_PATH tag can be used to specify one or more files or \r
+# directories that contain example code fragments that are included (see \r
+# the \include command).\r
+\r
+EXAMPLE_PATH           = \r
+\r
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the \r
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \r
+# and *.h) to filter out the source-files in the directories. If left \r
+# blank all files are included.\r
+\r
+EXAMPLE_PATTERNS       = *\r
+\r
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be \r
+# searched for input files to be used with the \include or \dontinclude \r
+# commands irrespective of the value of the RECURSIVE tag. \r
+# Possible values are YES and NO. If left blank NO is used.\r
+\r
+EXAMPLE_RECURSIVE      = NO\r
+\r
+# The IMAGE_PATH tag can be used to specify one or more files or \r
+# directories that contain image that are included in the documentation (see \r
+# the \image command).\r
+\r
+IMAGE_PATH             = \r
+\r
+# The INPUT_FILTER tag can be used to specify a program that doxygen should \r
+# invoke to filter for each input file. Doxygen will invoke the filter program \r
+# by executing (via popen()) the command <filter> <input-file>, where <filter> \r
+# is the value of the INPUT_FILTER tag, and <input-file> is the name of an \r
+# input file. Doxygen will then use the output that the filter program writes \r
+# to standard output.  If FILTER_PATTERNS is specified, this tag will be \r
+# ignored.\r
+\r
+INPUT_FILTER           = \r
+\r
+# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern \r
+# basis.  Doxygen will compare the file name with each pattern and apply the \r
+# filter if there is a match.  The filters are a list of the form: \r
+# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further \r
+# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER \r
+# is applied to all files.\r
+\r
+FILTER_PATTERNS        = \r
+\r
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using \r
+# INPUT_FILTER) will be used to filter the input files when producing source \r
+# files to browse (i.e. when SOURCE_BROWSER is set to YES).\r
+\r
+FILTER_SOURCE_FILES    = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to source browsing\r
+#---------------------------------------------------------------------------\r
+\r
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will \r
+# be generated. Documented entities will be cross-referenced with these sources. \r
+# Note: To get rid of all source code in the generated output, make sure also \r
+# VERBATIM_HEADERS is set to NO.\r
+\r
+SOURCE_BROWSER         = NO\r
+\r
+# Setting the INLINE_SOURCES tag to YES will include the body \r
+# of functions and classes directly in the documentation.\r
+\r
+INLINE_SOURCES         = NO\r
+\r
+# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct \r
+# doxygen to hide any special comment blocks from generated source code \r
+# fragments. Normal C and C++ comments will always remain visible.\r
+\r
+STRIP_CODE_COMMENTS    = YES\r
+\r
+# If the REFERENCED_BY_RELATION tag is set to YES \r
+# then for each documented function all documented \r
+# functions referencing it will be listed.\r
+\r
+REFERENCED_BY_RELATION = NO\r
+\r
+# If the REFERENCES_RELATION tag is set to YES \r
+# then for each documented function all documented entities \r
+# called/used by that function will be listed.\r
+\r
+REFERENCES_RELATION    = NO\r
+\r
+# If the REFERENCES_LINK_SOURCE tag is set to YES (the default)\r
+# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from\r
+# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will\r
+# link to the source code.  Otherwise they will link to the documentstion.\r
+\r
+REFERENCES_LINK_SOURCE = NO\r
+\r
+# If the USE_HTAGS tag is set to YES then the references to source code \r
+# will point to the HTML generated by the htags(1) tool instead of doxygen \r
+# built-in source browser. The htags tool is part of GNU's global source \r
+# tagging system (see http://www.gnu.org/software/global/global.html). You \r
+# will need version 4.8.6 or higher.\r
+\r
+USE_HTAGS              = NO\r
+\r
+# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen \r
+# will generate a verbatim copy of the header file for each class for \r
+# which an include is specified. Set to NO to disable this.\r
+\r
+VERBATIM_HEADERS       = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the alphabetical class index\r
+#---------------------------------------------------------------------------\r
+\r
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index \r
+# of all compounds will be generated. Enable this if the project \r
+# contains a lot of classes, structs, unions or interfaces.\r
+\r
+ALPHABETICAL_INDEX     = YES\r
+\r
+# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then \r
+# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns \r
+# in which this list will be split (can be a number in the range [1..20])\r
+\r
+COLS_IN_ALPHA_INDEX    = 5\r
+\r
+# In case all classes in a project start with a common prefix, all \r
+# classes will be put under the same header in the alphabetical index. \r
+# The IGNORE_PREFIX tag can be used to specify one or more prefixes that \r
+# should be ignored while generating the index headers.\r
+\r
+IGNORE_PREFIX          = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the HTML output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_HTML tag is set to YES (the default) Doxygen will \r
+# generate HTML output.\r
+\r
+GENERATE_HTML          = YES\r
+\r
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `html' will be used as the default path.\r
+\r
+HTML_OUTPUT            = html\r
+\r
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for \r
+# each generated HTML page (for example: .htm,.php,.asp). If it is left blank \r
+# doxygen will generate files with .html extension.\r
+\r
+HTML_FILE_EXTENSION    = .html\r
+\r
+# The HTML_HEADER tag can be used to specify a personal HTML header for \r
+# each generated HTML page. If it is left blank doxygen will generate a \r
+# standard header.\r
+\r
+HTML_HEADER            = \r
+\r
+# The HTML_FOOTER tag can be used to specify a personal HTML footer for \r
+# each generated HTML page. If it is left blank doxygen will generate a \r
+# standard footer.\r
+\r
+HTML_FOOTER            = \r
+\r
+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading \r
+# style sheet that is used by each HTML page. It can be used to \r
+# fine-tune the look of the HTML output. If the tag is left blank doxygen \r
+# will generate a default style sheet. Note that doxygen will try to copy \r
+# the style sheet file to the HTML output directory, so don't put your own \r
+# stylesheet in the HTML output directory as well, or it will be erased!\r
+\r
+HTML_STYLESHEET        = \r
+\r
+# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, \r
+# files or namespaces will be aligned in HTML using tables. If set to \r
+# NO a bullet list will be used.\r
+\r
+HTML_ALIGN_MEMBERS     = YES\r
+\r
+# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML \r
+# documentation will contain sections that can be hidden and shown after the \r
+# page has loaded. For this to work a browser that supports \r
+# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox \r
+# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari).\r
+\r
+HTML_DYNAMIC_SECTIONS  = YES\r
+\r
+# If the GENERATE_DOCSET tag is set to YES, additional index files \r
+# will be generated that can be used as input for Apple's Xcode 3 \r
+# integrated development environment, introduced with OSX 10.5 (Leopard). \r
+# To create a documentation set, doxygen will generate a Makefile in the \r
+# HTML output directory. Running make will produce the docset in that \r
+# directory and running "make install" will install the docset in \r
+# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find \r
+# it at startup. \r
+# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information.\r
+\r
+GENERATE_DOCSET        = NO\r
+\r
+# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the \r
+# feed. A documentation feed provides an umbrella under which multiple \r
+# documentation sets from a single provider (such as a company or product suite) \r
+# can be grouped.\r
+\r
+DOCSET_FEEDNAME        = "Doxygen generated docs"\r
+\r
+# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that \r
+# should uniquely identify the documentation set bundle. This should be a \r
+# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen \r
+# will append .docset to the name.\r
+\r
+DOCSET_BUNDLE_ID       = org.doxygen.Project\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, additional index files \r
+# will be generated that can be used as input for tools like the \r
+# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) \r
+# of the generated HTML documentation.\r
+\r
+GENERATE_HTMLHELP      = NO\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can \r
+# be used to specify the file name of the resulting .chm file. You \r
+# can add a path in front of the file if the result should not be \r
+# written to the html output directory.\r
+\r
+CHM_FILE               = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can \r
+# be used to specify the location (absolute path including file name) of \r
+# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run \r
+# the HTML help compiler on the generated index.hhp.\r
+\r
+HHC_LOCATION           = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag \r
+# controls if a separate .chi index file is generated (YES) or that \r
+# it should be included in the master .chm file (NO).\r
+\r
+GENERATE_CHI           = NO\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING\r
+# is used to encode HtmlHelp index (hhk), content (hhc) and project file\r
+# content.\r
+\r
+CHM_INDEX_ENCODING     = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag \r
+# controls whether a binary table of contents is generated (YES) or a \r
+# normal table of contents (NO) in the .chm file.\r
+\r
+BINARY_TOC             = NO\r
+\r
+# The TOC_EXPAND flag can be set to YES to add extra items for group members \r
+# to the contents of the HTML help documentation and to the tree view.\r
+\r
+TOC_EXPAND             = YES\r
+\r
+# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER \r
+# are set, an additional index file will be generated that can be used as input for \r
+# Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated \r
+# HTML documentation.\r
+\r
+GENERATE_QHP           = NO\r
+\r
+# If the QHG_LOCATION tag is specified, the QCH_FILE tag can \r
+# be used to specify the file name of the resulting .qch file. \r
+# The path specified is relative to the HTML output folder.\r
+\r
+QCH_FILE               = \r
+\r
+# The QHP_NAMESPACE tag specifies the namespace to use when generating \r
+# Qt Help Project output. For more information please see \r
+# <a href="http://doc.trolltech.com/qthelpproject.html#namespace">Qt Help Project / Namespace</a>.\r
+\r
+QHP_NAMESPACE          = org.doxygen.Project\r
+\r
+# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating \r
+# Qt Help Project output. For more information please see \r
+# <a href="http://doc.trolltech.com/qthelpproject.html#virtual-folders">Qt Help Project / Virtual Folders</a>.\r
+\r
+QHP_VIRTUAL_FOLDER     = doc\r
+\r
+# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can \r
+# be used to specify the location of Qt's qhelpgenerator. \r
+# If non-empty doxygen will try to run qhelpgenerator on the generated \r
+# .qhp file .\r
+\r
+QHG_LOCATION           = \r
+\r
+# The DISABLE_INDEX tag can be used to turn on/off the condensed index at \r
+# top of each HTML page. The value NO (the default) enables the index and \r
+# the value YES disables it.\r
+\r
+DISABLE_INDEX          = NO\r
+\r
+# This tag can be used to set the number of enum values (range [1..20]) \r
+# that doxygen will group on one line in the generated HTML documentation.\r
+\r
+ENUM_VALUES_PER_LINE   = 1\r
+\r
+# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index\r
+# structure should be generated to display hierarchical information.\r
+# If the tag value is set to FRAME, a side panel will be generated\r
+# containing a tree-like index structure (just like the one that \r
+# is generated for HTML Help). For this to work a browser that supports \r
+# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, \r
+# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are \r
+# probably better off using the HTML help feature. Other possible values \r
+# for this tag are: HIERARCHIES, which will generate the Groups, Directories,\r
+# and Class Hierarchy pages using a tree view instead of an ordered list;\r
+# ALL, which combines the behavior of FRAME and HIERARCHIES; and NONE, which\r
+# disables this behavior completely. For backwards compatibility with previous\r
+# releases of Doxygen, the values YES and NO are equivalent to FRAME and NONE\r
+# respectively.\r
+\r
+GENERATE_TREEVIEW      = YES\r
+\r
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be \r
+# used to set the initial width (in pixels) of the frame in which the tree \r
+# is shown.\r
+\r
+TREEVIEW_WIDTH         = 250\r
+\r
+# Use this tag to change the font size of Latex formulas included \r
+# as images in the HTML documentation. The default is 10. Note that \r
+# when you change the font size after a successful doxygen run you need \r
+# to manually remove any form_*.png images from the HTML output directory \r
+# to force them to be regenerated.\r
+\r
+FORMULA_FONTSIZE       = 10\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the LaTeX output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will \r
+# generate Latex output.\r
+\r
+GENERATE_LATEX         = NO\r
+\r
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `latex' will be used as the default path.\r
+\r
+LATEX_OUTPUT           = latex\r
+\r
+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be \r
+# invoked. If left blank `latex' will be used as the default command name.\r
+\r
+LATEX_CMD_NAME         = latex\r
+\r
+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to \r
+# generate index for LaTeX. If left blank `makeindex' will be used as the \r
+# default command name.\r
+\r
+MAKEINDEX_CMD_NAME     = makeindex\r
+\r
+# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact \r
+# LaTeX documents. This may be useful for small projects and may help to \r
+# save some trees in general.\r
+\r
+COMPACT_LATEX          = NO\r
+\r
+# The PAPER_TYPE tag can be used to set the paper type that is used \r
+# by the printer. Possible values are: a4, a4wide, letter, legal and \r
+# executive. If left blank a4wide will be used.\r
+\r
+PAPER_TYPE             = a4wide\r
+\r
+# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX \r
+# packages that should be included in the LaTeX output.\r
+\r
+EXTRA_PACKAGES         = \r
+\r
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for \r
+# the generated latex document. The header should contain everything until \r
+# the first chapter. If it is left blank doxygen will generate a \r
+# standard header. Notice: only use this tag if you know what you are doing!\r
+\r
+LATEX_HEADER           = \r
+\r
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated \r
+# is prepared for conversion to pdf (using ps2pdf). The pdf file will \r
+# contain links (just like the HTML output) instead of page references \r
+# This makes the output suitable for online browsing using a pdf viewer.\r
+\r
+PDF_HYPERLINKS         = YES\r
+\r
+# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of \r
+# plain latex in the generated Makefile. Set this option to YES to get a \r
+# higher quality PDF documentation.\r
+\r
+USE_PDFLATEX           = YES\r
+\r
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. \r
+# command to the generated LaTeX files. This will instruct LaTeX to keep \r
+# running if errors occur, instead of asking the user for help. \r
+# This option is also used when generating formulas in HTML.\r
+\r
+LATEX_BATCHMODE        = NO\r
+\r
+# If LATEX_HIDE_INDICES is set to YES then doxygen will not \r
+# include the index chapters (such as File Index, Compound Index, etc.) \r
+# in the output.\r
+\r
+LATEX_HIDE_INDICES     = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the RTF output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output \r
+# The RTF output is optimized for Word 97 and may not look very pretty with \r
+# other RTF readers or editors.\r
+\r
+GENERATE_RTF           = NO\r
+\r
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `rtf' will be used as the default path.\r
+\r
+RTF_OUTPUT             = rtf\r
+\r
+# If the COMPACT_RTF tag is set to YES Doxygen generates more compact \r
+# RTF documents. This may be useful for small projects and may help to \r
+# save some trees in general.\r
+\r
+COMPACT_RTF            = NO\r
+\r
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated \r
+# will contain hyperlink fields. The RTF file will \r
+# contain links (just like the HTML output) instead of page references. \r
+# This makes the output suitable for online browsing using WORD or other \r
+# programs which support those fields. \r
+# Note: wordpad (write) and others do not support links.\r
+\r
+RTF_HYPERLINKS         = NO\r
+\r
+# Load stylesheet definitions from file. Syntax is similar to doxygen's \r
+# config file, i.e. a series of assignments. You only have to provide \r
+# replacements, missing definitions are set to their default value.\r
+\r
+RTF_STYLESHEET_FILE    = \r
+\r
+# Set optional variables used in the generation of an rtf document. \r
+# Syntax is similar to doxygen's config file.\r
+\r
+RTF_EXTENSIONS_FILE    = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the man page output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_MAN tag is set to YES (the default) Doxygen will \r
+# generate man pages\r
+\r
+GENERATE_MAN           = NO\r
+\r
+# The MAN_OUTPUT tag is used to specify where the man pages will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `man' will be used as the default path.\r
+\r
+MAN_OUTPUT             = man\r
+\r
+# The MAN_EXTENSION tag determines the extension that is added to \r
+# the generated man pages (default is the subroutine's section .3)\r
+\r
+MAN_EXTENSION          = .3\r
+\r
+# If the MAN_LINKS tag is set to YES and Doxygen generates man output, \r
+# then it will generate one additional man file for each entity \r
+# documented in the real man page(s). These additional files \r
+# only source the real man page, but without them the man command \r
+# would be unable to find the correct page. The default is NO.\r
+\r
+MAN_LINKS              = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the XML output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_XML tag is set to YES Doxygen will \r
+# generate an XML file that captures the structure of \r
+# the code including all documentation.\r
+\r
+GENERATE_XML           = NO\r
+\r
+# The XML_OUTPUT tag is used to specify where the XML pages will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `xml' will be used as the default path.\r
+\r
+XML_OUTPUT             = xml\r
+\r
+# The XML_SCHEMA tag can be used to specify an XML schema, \r
+# which can be used by a validating XML parser to check the \r
+# syntax of the XML files.\r
+\r
+XML_SCHEMA             = \r
+\r
+# The XML_DTD tag can be used to specify an XML DTD, \r
+# which can be used by a validating XML parser to check the \r
+# syntax of the XML files.\r
+\r
+XML_DTD                = \r
+\r
+# If the XML_PROGRAMLISTING tag is set to YES Doxygen will \r
+# dump the program listings (including syntax highlighting \r
+# and cross-referencing information) to the XML output. Note that \r
+# enabling this will significantly increase the size of the XML output.\r
+\r
+XML_PROGRAMLISTING     = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options for the AutoGen Definitions output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will \r
+# generate an AutoGen Definitions (see autogen.sf.net) file \r
+# that captures the structure of the code including all \r
+# documentation. Note that this feature is still experimental \r
+# and incomplete at the moment.\r
+\r
+GENERATE_AUTOGEN_DEF   = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the Perl module output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_PERLMOD tag is set to YES Doxygen will \r
+# generate a Perl module file that captures the structure of \r
+# the code including all documentation. Note that this \r
+# feature is still experimental and incomplete at the \r
+# moment.\r
+\r
+GENERATE_PERLMOD       = NO\r
+\r
+# If the PERLMOD_LATEX tag is set to YES Doxygen will generate \r
+# the necessary Makefile rules, Perl scripts and LaTeX code to be able \r
+# to generate PDF and DVI output from the Perl module output.\r
+\r
+PERLMOD_LATEX          = NO\r
+\r
+# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be \r
+# nicely formatted so it can be parsed by a human reader.  This is useful \r
+# if you want to understand what is going on.  On the other hand, if this \r
+# tag is set to NO the size of the Perl module output will be much smaller \r
+# and Perl will parse it just the same.\r
+\r
+PERLMOD_PRETTY         = YES\r
+\r
+# The names of the make variables in the generated doxyrules.make file \r
+# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. \r
+# This is useful so different doxyrules.make files included by the same \r
+# Makefile don't overwrite each other's variables.\r
+\r
+PERLMOD_MAKEVAR_PREFIX = \r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration options related to the preprocessor   \r
+#---------------------------------------------------------------------------\r
+\r
+# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will \r
+# evaluate all C-preprocessor directives found in the sources and include \r
+# files.\r
+\r
+ENABLE_PREPROCESSING   = YES\r
+\r
+# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro \r
+# names in the source code. If set to NO (the default) only conditional \r
+# compilation will be performed. Macro expansion can be done in a controlled \r
+# way by setting EXPAND_ONLY_PREDEF to YES.\r
+\r
+MACRO_EXPANSION        = YES\r
+\r
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES \r
+# then the macro expansion is limited to the macros specified with the \r
+# PREDEFINED and EXPAND_AS_DEFINED tags.\r
+\r
+EXPAND_ONLY_PREDEF     = YES\r
+\r
+# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files \r
+# in the INCLUDE_PATH (see below) will be search if a #include is found.\r
+\r
+SEARCH_INCLUDES        = YES\r
+\r
+# The INCLUDE_PATH tag can be used to specify one or more directories that \r
+# contain include files that are not input files but should be processed by \r
+# the preprocessor.\r
+\r
+INCLUDE_PATH           = \r
+\r
+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard \r
+# patterns (like *.h and *.hpp) to filter out the header-files in the \r
+# directories. If left blank, the patterns specified with FILE_PATTERNS will \r
+# be used.\r
+\r
+INCLUDE_FILE_PATTERNS  = \r
+\r
+# The PREDEFINED tag can be used to specify one or more macro names that \r
+# are defined before the preprocessor is started (similar to the -D option of \r
+# gcc). The argument of the tag is a list of macros of the form: name \r
+# or name=definition (no spaces). If the definition and the = are \r
+# omitted =1 is assumed. To prevent a macro definition from being \r
+# undefined via #undef or recursively expanded use the := operator \r
+# instead of the = operator.\r
+\r
+PREDEFINED             = __DOXYGEN__\r
+\r
+# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then \r
+# this tag can be used to specify a list of macro names that should be expanded. \r
+# The macro definition that is found in the sources will be used. \r
+# Use the PREDEFINED tag if you want to use a different macro definition.\r
+\r
+EXPAND_AS_DEFINED      = BUTTLOADTAG\r
+\r
+# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then \r
+# doxygen's preprocessor will remove all function-like macros that are alone \r
+# on a line, have an all uppercase name, and do not end with a semicolon. Such \r
+# function macros are typically used for boiler-plate code, and will confuse \r
+# the parser if not removed.\r
+\r
+SKIP_FUNCTION_MACROS   = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration::additions related to external references   \r
+#---------------------------------------------------------------------------\r
+\r
+# The TAGFILES option can be used to specify one or more tagfiles. \r
+# Optionally an initial location of the external documentation \r
+# can be added for each tagfile. The format of a tag file without \r
+# this location is as follows: \r
+#   TAGFILES = file1 file2 ... \r
+# Adding location for the tag files is done as follows: \r
+#   TAGFILES = file1=loc1 "file2 = loc2" ... \r
+# where "loc1" and "loc2" can be relative or absolute paths or \r
+# URLs. If a location is present for each tag, the installdox tool \r
+# does not have to be run to correct the links.\r
+# Note that each tag file must have a unique name\r
+# (where the name does NOT include the path)\r
+# If a tag file is not located in the directory in which doxygen \r
+# is run, you must also specify the path to the tagfile here.\r
+\r
+TAGFILES               = \r
+\r
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create \r
+# a tag file that is based on the input files it reads.\r
+\r
+GENERATE_TAGFILE       = \r
+\r
+# If the ALLEXTERNALS tag is set to YES all external classes will be listed \r
+# in the class index. If set to NO only the inherited external classes \r
+# will be listed.\r
+\r
+ALLEXTERNALS           = NO\r
+\r
+# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed \r
+# in the modules index. If set to NO, only the current project's groups will \r
+# be listed.\r
+\r
+EXTERNAL_GROUPS        = YES\r
+\r
+# The PERL_PATH should be the absolute path and name of the perl script \r
+# interpreter (i.e. the result of `which perl').\r
+\r
+PERL_PATH              = /usr/bin/perl\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration options related to the dot tool   \r
+#---------------------------------------------------------------------------\r
+\r
+# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will \r
+# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base \r
+# or super classes. Setting the tag to NO turns the diagrams off. Note that \r
+# this option is superseded by the HAVE_DOT option below. This is only a \r
+# fallback. It is recommended to install and use dot, since it yields more \r
+# powerful graphs.\r
+\r
+CLASS_DIAGRAMS         = NO\r
+\r
+# You can define message sequence charts within doxygen comments using the \msc \r
+# command. Doxygen will then run the mscgen tool (see \r
+# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the \r
+# documentation. The MSCGEN_PATH tag allows you to specify the directory where \r
+# the mscgen tool resides. If left empty the tool is assumed to be found in the \r
+# default search path.\r
+\r
+MSCGEN_PATH            = \r
+\r
+# If set to YES, the inheritance and collaboration graphs will hide \r
+# inheritance and usage relations if the target is undocumented \r
+# or is not a class.\r
+\r
+HIDE_UNDOC_RELATIONS   = YES\r
+\r
+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is \r
+# available from the path. This tool is part of Graphviz, a graph visualization \r
+# toolkit from AT&T and Lucent Bell Labs. The other options in this section \r
+# have no effect if this option is set to NO (the default)\r
+\r
+HAVE_DOT               = NO\r
+\r
+# By default doxygen will write a font called FreeSans.ttf to the output \r
+# directory and reference it in all dot files that doxygen generates. This \r
+# font does not include all possible unicode characters however, so when you need \r
+# these (or just want a differently looking font) you can specify the font name \r
+# using DOT_FONTNAME. You need need to make sure dot is able to find the font, \r
+# which can be done by putting it in a standard location or by setting the \r
+# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory \r
+# containing the font.\r
+\r
+DOT_FONTNAME           = FreeSans\r
+\r
+# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. \r
+# The default size is 10pt.\r
+\r
+DOT_FONTSIZE           = 10\r
+\r
+# By default doxygen will tell dot to use the output directory to look for the \r
+# FreeSans.ttf font (which doxygen will put there itself). If you specify a \r
+# different font using DOT_FONTNAME you can set the path where dot \r
+# can find it using this tag.\r
+\r
+DOT_FONTPATH           = \r
+\r
+# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for each documented class showing the direct and \r
+# indirect inheritance relations. Setting this tag to YES will force the \r
+# the CLASS_DIAGRAMS tag to NO.\r
+\r
+CLASS_GRAPH            = NO\r
+\r
+# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for each documented class showing the direct and \r
+# indirect implementation dependencies (inheritance, containment, and \r
+# class references variables) of the class with other documented classes.\r
+\r
+COLLABORATION_GRAPH    = NO\r
+\r
+# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for groups, showing the direct groups dependencies\r
+\r
+GROUP_GRAPHS           = NO\r
+\r
+# If the UML_LOOK tag is set to YES doxygen will generate inheritance and \r
+# collaboration diagrams in a style similar to the OMG's Unified Modeling \r
+# Language.\r
+\r
+UML_LOOK               = NO\r
+\r
+# If set to YES, the inheritance and collaboration graphs will show the \r
+# relations between templates and their instances.\r
+\r
+TEMPLATE_RELATIONS     = NO\r
+\r
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT \r
+# tags are set to YES then doxygen will generate a graph for each documented \r
+# file showing the direct and indirect include dependencies of the file with \r
+# other documented files.\r
+\r
+INCLUDE_GRAPH          = NO\r
+\r
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and \r
+# HAVE_DOT tags are set to YES then doxygen will generate a graph for each \r
+# documented header file showing the documented files that directly or \r
+# indirectly include this file.\r
+\r
+INCLUDED_BY_GRAPH      = NO\r
+\r
+# If the CALL_GRAPH and HAVE_DOT options are set to YES then \r
+# doxygen will generate a call dependency graph for every global function \r
+# or class method. Note that enabling this option will significantly increase \r
+# the time of a run. So in most cases it will be better to enable call graphs \r
+# for selected functions only using the \callgraph command.\r
+\r
+CALL_GRAPH             = NO\r
+\r
+# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then \r
+# doxygen will generate a caller dependency graph for every global function \r
+# or class method. Note that enabling this option will significantly increase \r
+# the time of a run. So in most cases it will be better to enable caller \r
+# graphs for selected functions only using the \callergraph command.\r
+\r
+CALLER_GRAPH           = NO\r
+\r
+# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen \r
+# will graphical hierarchy of all classes instead of a textual one.\r
+\r
+GRAPHICAL_HIERARCHY    = NO\r
+\r
+# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES \r
+# then doxygen will show the dependencies a directory has on other directories \r
+# in a graphical way. The dependency relations are determined by the #include\r
+# relations between the files in the directories.\r
+\r
+DIRECTORY_GRAPH        = NO\r
+\r
+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images \r
+# generated by dot. Possible values are png, jpg, or gif\r
+# If left blank png will be used.\r
+\r
+DOT_IMAGE_FORMAT       = png\r
+\r
+# The tag DOT_PATH can be used to specify the path where the dot tool can be \r
+# found. If left blank, it is assumed the dot tool can be found in the path.\r
+\r
+DOT_PATH               = "C:/Program Files/Graphviz2.18/bin"\r
+\r
+# The DOTFILE_DIRS tag can be used to specify one or more directories that \r
+# contain dot files that are included in the documentation (see the \r
+# \dotfile command).\r
+\r
+DOTFILE_DIRS           = \r
+\r
+# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of \r
+# nodes that will be shown in the graph. If the number of nodes in a graph \r
+# becomes larger than this value, doxygen will truncate the graph, which is \r
+# visualized by representing a node as a red box. Note that doxygen if the \r
+# number of direct children of the root node in a graph is already larger than \r
+# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note \r
+# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.\r
+\r
+DOT_GRAPH_MAX_NODES    = 15\r
+\r
+# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the \r
+# graphs generated by dot. A depth value of 3 means that only nodes reachable \r
+# from the root by following a path via at most 3 edges will be shown. Nodes \r
+# that lay further from the root node will be omitted. Note that setting this \r
+# option to 1 or 2 may greatly reduce the computation time needed for large \r
+# code bases. Also note that the size of a graph can be further restricted by \r
+# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.\r
+\r
+MAX_DOT_GRAPH_DEPTH    = 2\r
+\r
+# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent \r
+# background. This is disabled by default, because dot on Windows does not \r
+# seem to support this out of the box. Warning: Depending on the platform used, \r
+# enabling this option may lead to badly anti-aliased labels on the edges of \r
+# a graph (i.e. they become hard to read).\r
+\r
+DOT_TRANSPARENT        = YES\r
+\r
+# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output \r
+# files in one run (i.e. multiple -o and -T options on the command line). This \r
+# makes dot run faster, but since only newer versions of dot (>1.8.10) \r
+# support this, this feature is disabled by default.\r
+\r
+DOT_MULTI_TARGETS      = NO\r
+\r
+# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will \r
+# generate a legend page explaining the meaning of the various boxes and \r
+# arrows in the dot generated graphs.\r
+\r
+GENERATE_LEGEND        = YES\r
+\r
+# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will \r
+# remove the intermediate dot files that are used to generate \r
+# the various graphs.\r
+\r
+DOT_CLEANUP            = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration::additions related to the search engine   \r
+#---------------------------------------------------------------------------\r
+\r
+# The SEARCHENGINE tag specifies whether or not a search engine should be \r
+# used. If set to NO the values of all tags below this one will be ignored.\r
+\r
+SEARCHENGINE           = NO\r
diff --git a/Demos/Device/LowLevel/AudioOutput/makefile b/Demos/Device/LowLevel/AudioOutput/makefile
new file mode 100644 (file)
index 0000000..28f038f
--- /dev/null
@@ -0,0 +1,734 @@
+# Hey Emacs, this is a -*- makefile -*-\r
+#----------------------------------------------------------------------------\r
+# WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al.\r
+#  >> Modified for use with the LUFA project. <<\r
+#\r
+# Released to the Public Domain\r
+#\r
+# Additional material for this makefile was written by:\r
+# Peter Fleury\r
+# Tim Henigan\r
+# Colin O'Flynn\r
+# Reiner Patommel\r
+# Markus Pfaff\r
+# Sander Pool\r
+# Frederik Rouleau\r
+# Carlos Lamas\r
+# Dean Camera\r
+# Opendous Inc.\r
+# Denver Gingerich\r
+#\r
+#----------------------------------------------------------------------------\r
+# On command line:\r
+#\r
+# make all = Make software.\r
+#\r
+# make clean = Clean out built project files.\r
+#\r
+# make coff = Convert ELF to AVR COFF.\r
+#\r
+# make extcoff = Convert ELF to AVR Extended COFF.\r
+#\r
+# make program = Download the hex file to the device, using avrdude.\r
+#                Please customize the avrdude settings below first!\r
+#\r
+# make dfu = Download the hex file to the device, using dfu-programmer (must\r
+#            have dfu-programmer installed).\r
+#\r
+# make flip = Download the hex file to the device, using Atmel FLIP (must\r
+#             have Atmel FLIP installed).\r
+#\r
+# make dfu-ee = Download the eeprom file to the device, using dfu-programmer\r
+#               (must have dfu-programmer installed).\r
+#\r
+# make flip-ee = Download the eeprom file to the device, using Atmel FLIP\r
+#                (must have Atmel FLIP installed).\r
+#\r
+# make doxygen = Generate DoxyGen documentation for the project (must have\r
+#                DoxyGen installed)\r
+#\r
+# make debug = Start either simulavr or avarice as specified for debugging, \r
+#              with avr-gdb or avr-insight as the front end for debugging.\r
+#\r
+# make filename.s = Just compile filename.c into the assembler code only.\r
+#\r
+# make filename.i = Create a preprocessed source file for use in submitting\r
+#                   bug reports to the GCC project.\r
+#\r
+# To rebuild project do "make clean" then "make all".\r
+#----------------------------------------------------------------------------\r
+\r
+\r
+# MCU name\r
+MCU = at90usb1287\r
+\r
+\r
+# Target board (see library "Board Types" documentation, USER or blank for projects not requiring\r
+# LUFA board drivers). If USER is selected, put custom board drivers in a directory called \r
+# "Board" inside the application directory.\r
+BOARD  = USBKEY\r
+\r
+\r
+# Processor frequency.\r
+#     This will define a symbol, F_CPU, in all source code files equal to the \r
+#     processor frequency. You can then use this symbol in your source code to \r
+#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done\r
+#     automatically to create a 32-bit value in your source code.\r
+#     Typical values are:\r
+#         F_CPU =  1000000\r
+#         F_CPU =  1843200\r
+#         F_CPU =  2000000\r
+#         F_CPU =  3686400\r
+#         F_CPU =  4000000\r
+#         F_CPU =  7372800\r
+#         F_CPU =  8000000\r
+#         F_CPU = 11059200\r
+#         F_CPU = 14745600\r
+#         F_CPU = 16000000\r
+#         F_CPU = 18432000\r
+#         F_CPU = 20000000\r
+F_CPU = 8000000\r
+\r
+\r
+# Input clock frequency.\r
+#     This will define a symbol, F_CLOCK, in all source code files equal to the \r
+#     input clock frequency (before any prescaling is performed). This value may\r
+#     differ from F_CPU if prescaling is used on the latter, and is required as the\r
+#     raw input clock is fed directly to the PLL sections of the AVR for high speed\r
+#     clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'\r
+#     at the end, this will be done automatically to create a 32-bit value in your\r
+#     source code.\r
+#\r
+#     If no clock division is performed on the input clock inside the AVR (via the\r
+#     CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.\r
+F_CLOCK = 8000000\r
+\r
+\r
+# Output format. (can be srec, ihex, binary)\r
+FORMAT = ihex\r
+\r
+\r
+# Target file name (without extension).\r
+TARGET = AudioOutput\r
+\r
+\r
+# Object files directory\r
+#     To put object files in current directory, use a dot (.), do NOT make\r
+#     this an empty or blank macro!\r
+OBJDIR = .\r
+\r
+\r
+# Path to the LUFA library\r
+LUFA_PATH = ../../..\r
+\r
+\r
+# List C source files here. (C dependencies are automatically generated.)\r
+SRC = $(TARGET).c                                                 \\r
+         Descriptors.c                                               \\r
+         $(LUFA_PATH)/LUFA/Scheduler/Scheduler.c                     \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/DevChapter9.c        \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Endpoint.c           \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Host.c               \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/HostChapter9.c       \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/LowLevel.c           \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Pipe.c               \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/Events.c            \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBInterrupt.c      \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBTask.c           \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/ConfigDescriptor.c  \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/Class/HIDParser.c             \\r
+\r
+\r
+# List C++ source files here. (C dependencies are automatically generated.)\r
+CPPSRC = \r
+\r
+\r
+# List Assembler source files here.\r
+#     Make them always end in a capital .S.  Files ending in a lowercase .s\r
+#     will not be considered source files but generated files (assembler\r
+#     output from the compiler), and will be deleted upon "make clean"!\r
+#     Even though the DOS/Win* filesystem matches both .s and .S the same,\r
+#     it will preserve the spelling of the filenames, and gcc itself does\r
+#     care about how the name is spelled on its command-line.\r
+ASRC =\r
+\r
+\r
+# Optimization level, can be [0, 1, 2, 3, s]. \r
+#     0 = turn off optimization. s = optimize for size.\r
+#     (Note: 3 is not always the best optimization level. See avr-libc FAQ.)\r
+OPT = s\r
+\r
+\r
+# Debugging format.\r
+#     Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs.\r
+#     AVR Studio 4.10 requires dwarf-2.\r
+#     AVR [Extended] COFF format requires stabs, plus an avr-objcopy run.\r
+DEBUG = dwarf-2\r
+\r
+\r
+# List any extra directories to look for include files here.\r
+#     Each directory must be seperated by a space.\r
+#     Use forward slashes for directory separators.\r
+#     For a directory that has spaces, enclose it in quotes.\r
+EXTRAINCDIRS = $(LUFA_PATH)/\r
+\r
+\r
+# Compiler flag to set the C Standard level.\r
+#     c89   = "ANSI" C\r
+#     gnu89 = c89 plus GCC extensions\r
+#     c99   = ISO C99 standard (not yet fully implemented)\r
+#     gnu99 = c99 plus GCC extensions\r
+CSTANDARD = -std=gnu99\r
+\r
+\r
+# Place -D or -U options here for C sources\r
+CDEFS  = -DF_CPU=$(F_CPU)UL -DF_CLOCK=$(F_CLOCK)UL -DBOARD=BOARD_$(BOARD)\r
+CDEFS += -DUSE_NONSTANDARD_DESCRIPTOR_NAMES -DNO_STREAM_CALLBACKS -DUSB_DEVICE_ONLY\r
+CDEFS += -DFIXED_CONTROL_ENDPOINT_SIZE=8 -DUSE_SINGLE_DEVICE_CONFIGURATION\r
+CDEFS += -DUSE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)"\r
+CDEFS += -DAUDIO_OUT_STEREO\r
+\r
+# Place -D or -U options here for ASM sources\r
+ADEFS = -DF_CPU=$(F_CPU)\r
+\r
+\r
+# Place -D or -U options here for C++ sources\r
+CPPDEFS = -DF_CPU=$(F_CPU)UL\r
+#CPPDEFS += -D__STDC_LIMIT_MACROS\r
+#CPPDEFS += -D__STDC_CONSTANT_MACROS\r
+\r
+\r
+\r
+#---------------- Compiler Options C ----------------\r
+#  -g*:          generate debugging information\r
+#  -O*:          optimization level\r
+#  -f...:        tuning, see GCC manual and avr-libc documentation\r
+#  -Wall...:     warning level\r
+#  -Wa,...:      tell GCC to pass this to the assembler.\r
+#    -adhlns...: create assembler listing\r
+CFLAGS = -g$(DEBUG)\r
+CFLAGS += $(CDEFS)\r
+CFLAGS += -O$(OPT)\r
+CFLAGS += -funsigned-char\r
+CFLAGS += -funsigned-bitfields\r
+CFLAGS += -ffunction-sections\r
+CFLAGS += -fpack-struct\r
+CFLAGS += -fshort-enums\r
+CFLAGS += -finline-limit=20\r
+CFLAGS += -Wall\r
+CFLAGS += -Wstrict-prototypes\r
+CFLAGS += -Wundef\r
+#CFLAGS += -fno-unit-at-a-time\r
+#CFLAGS += -Wunreachable-code\r
+#CFLAGS += -Wsign-compare\r
+CFLAGS += -Wa,-adhlns=$(<:%.c=$(OBJDIR)/%.lst)\r
+CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))\r
+CFLAGS += $(CSTANDARD)\r
+\r
+\r
+#---------------- Compiler Options C++ ----------------\r
+#  -g*:          generate debugging information\r
+#  -O*:          optimization level\r
+#  -f...:        tuning, see GCC manual and avr-libc documentation\r
+#  -Wall...:     warning level\r
+#  -Wa,...:      tell GCC to pass this to the assembler.\r
+#    -adhlns...: create assembler listing\r
+CPPFLAGS = -g$(DEBUG)\r
+CPPFLAGS += $(CPPDEFS)\r
+CPPFLAGS += -O$(OPT)\r
+CPPFLAGS += -funsigned-char\r
+CPPFLAGS += -funsigned-bitfields\r
+CPPFLAGS += -fpack-struct\r
+CPPFLAGS += -fshort-enums\r
+CPPFLAGS += -fno-exceptions\r
+CPPFLAGS += -Wall\r
+CFLAGS += -Wundef\r
+#CPPFLAGS += -mshort-calls\r
+#CPPFLAGS += -fno-unit-at-a-time\r
+#CPPFLAGS += -Wstrict-prototypes\r
+#CPPFLAGS += -Wunreachable-code\r
+#CPPFLAGS += -Wsign-compare\r
+CPPFLAGS += -Wa,-adhlns=$(<:%.cpp=$(OBJDIR)/%.lst)\r
+CPPFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))\r
+#CPPFLAGS += $(CSTANDARD)\r
+\r
+\r
+#---------------- Assembler Options ----------------\r
+#  -Wa,...:   tell GCC to pass this to the assembler.\r
+#  -adhlns:   create listing\r
+#  -gstabs:   have the assembler create line number information; note that\r
+#             for use in COFF files, additional information about filenames\r
+#             and function names needs to be present in the assembler source\r
+#             files -- see avr-libc docs [FIXME: not yet described there]\r
+#  -listing-cont-lines: Sets the maximum number of continuation lines of hex \r
+#       dump that will be displayed for a given single line of source input.\r
+ASFLAGS = $(ADEFS) -Wa,-adhlns=$(<:%.S=$(OBJDIR)/%.lst),-gstabs,--listing-cont-lines=100\r
+\r
+\r
+#---------------- Library Options ----------------\r
+# Minimalistic printf version\r
+PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min\r
+\r
+# Floating point printf version (requires MATH_LIB = -lm below)\r
+PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt\r
+\r
+# If this is left blank, then it will use the Standard printf version.\r
+PRINTF_LIB = \r
+#PRINTF_LIB = $(PRINTF_LIB_MIN)\r
+#PRINTF_LIB = $(PRINTF_LIB_FLOAT)\r
+\r
+\r
+# Minimalistic scanf version\r
+SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min\r
+\r
+# Floating point + %[ scanf version (requires MATH_LIB = -lm below)\r
+SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt\r
+\r
+# If this is left blank, then it will use the Standard scanf version.\r
+SCANF_LIB = \r
+#SCANF_LIB = $(SCANF_LIB_MIN)\r
+#SCANF_LIB = $(SCANF_LIB_FLOAT)\r
+\r
+\r
+MATH_LIB = -lm\r
+\r
+\r
+# List any extra directories to look for libraries here.\r
+#     Each directory must be seperated by a space.\r
+#     Use forward slashes for directory separators.\r
+#     For a directory that has spaces, enclose it in quotes.\r
+EXTRALIBDIRS = \r
+\r
+\r
+\r
+#---------------- External Memory Options ----------------\r
+\r
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),\r
+# used for variables (.data/.bss) and heap (malloc()).\r
+#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff\r
+\r
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),\r
+# only used for heap (malloc()).\r
+#EXTMEMOPTS = -Wl,--section-start,.data=0x801100,--defsym=__heap_end=0x80ffff\r
+\r
+EXTMEMOPTS =\r
+\r
+\r
+\r
+#---------------- Linker Options ----------------\r
+#  -Wl,...:     tell GCC to pass this to linker.\r
+#    -Map:      create map file\r
+#    --cref:    add cross reference to  map file\r
+LDFLAGS = -Wl,-Map=$(TARGET).map,--cref\r
+LDFLAGS += -Wl,--relax \r
+LDFLAGS += -Wl,--gc-sections\r
+LDFLAGS += $(EXTMEMOPTS)\r
+LDFLAGS += $(patsubst %,-L%,$(EXTRALIBDIRS))\r
+LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)\r
+#LDFLAGS += -T linker_script.x\r
+\r
+\r
+\r
+#---------------- Programming Options (avrdude) ----------------\r
+\r
+# Programming hardware: alf avr910 avrisp bascom bsd \r
+# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500\r
+#\r
+# Type: avrdude -c ?\r
+# to get a full listing.\r
+#\r
+AVRDUDE_PROGRAMMER = jtagmkII\r
+\r
+# com1 = serial port. Use lpt1 to connect to parallel port.\r
+AVRDUDE_PORT = usb\r
+\r
+AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex\r
+#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep\r
+\r
+\r
+# Uncomment the following if you want avrdude's erase cycle counter.\r
+# Note that this counter needs to be initialized first using -Yn,\r
+# see avrdude manual.\r
+#AVRDUDE_ERASE_COUNTER = -y\r
+\r
+# Uncomment the following if you do /not/ wish a verification to be\r
+# performed after programming the device.\r
+#AVRDUDE_NO_VERIFY = -V\r
+\r
+# Increase verbosity level.  Please use this when submitting bug\r
+# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude> \r
+# to submit bug reports.\r
+#AVRDUDE_VERBOSE = -v -v\r
+\r
+AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)\r
+AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY)\r
+AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE)\r
+AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER)\r
+\r
+\r
+\r
+#---------------- Debugging Options ----------------\r
+\r
+# For simulavr only - target MCU frequency.\r
+DEBUG_MFREQ = $(F_CPU)\r
+\r
+# Set the DEBUG_UI to either gdb or insight.\r
+# DEBUG_UI = gdb\r
+DEBUG_UI = insight\r
+\r
+# Set the debugging back-end to either avarice, simulavr.\r
+DEBUG_BACKEND = avarice\r
+#DEBUG_BACKEND = simulavr\r
+\r
+# GDB Init Filename.\r
+GDBINIT_FILE = __avr_gdbinit\r
+\r
+# When using avarice settings for the JTAG\r
+JTAG_DEV = /dev/com1\r
+\r
+# Debugging port used to communicate between GDB / avarice / simulavr.\r
+DEBUG_PORT = 4242\r
+\r
+# Debugging host used to communicate between GDB / avarice / simulavr, normally\r
+#     just set to localhost unless doing some sort of crazy debugging when \r
+#     avarice is running on a different computer.\r
+DEBUG_HOST = localhost\r
+\r
+\r
+\r
+#============================================================================\r
+\r
+\r
+# Define programs and commands.\r
+SHELL = sh\r
+CC = avr-gcc\r
+OBJCOPY = avr-objcopy\r
+OBJDUMP = avr-objdump\r
+SIZE = avr-size\r
+AR = avr-ar rcs\r
+NM = avr-nm\r
+AVRDUDE = avrdude\r
+REMOVE = rm -f\r
+REMOVEDIR = rm -rf\r
+COPY = cp\r
+WINSHELL = cmd\r
+\r
+# Define Messages\r
+# English\r
+MSG_ERRORS_NONE = Errors: none\r
+MSG_BEGIN = -------- begin --------\r
+MSG_END = --------  end  --------\r
+MSG_SIZE_BEFORE = Size before: \r
+MSG_SIZE_AFTER = Size after:\r
+MSG_COFF = Converting to AVR COFF:\r
+MSG_EXTENDED_COFF = Converting to AVR Extended COFF:\r
+MSG_FLASH = Creating load file for Flash:\r
+MSG_EEPROM = Creating load file for EEPROM:\r
+MSG_EXTENDED_LISTING = Creating Extended Listing:\r
+MSG_SYMBOL_TABLE = Creating Symbol Table:\r
+MSG_LINKING = Linking:\r
+MSG_COMPILING = Compiling C:\r
+MSG_COMPILING_CPP = Compiling C++:\r
+MSG_ASSEMBLING = Assembling:\r
+MSG_CLEANING = Cleaning project:\r
+MSG_CREATING_LIBRARY = Creating library:\r
+\r
+\r
+\r
+\r
+# Define all object files.\r
+OBJ = $(SRC:%.c=$(OBJDIR)/%.o) $(CPPSRC:%.cpp=$(OBJDIR)/%.o) $(ASRC:%.S=$(OBJDIR)/%.o) \r
+\r
+# Define all listing files.\r
+LST = $(SRC:%.c=$(OBJDIR)/%.lst) $(CPPSRC:%.cpp=$(OBJDIR)/%.lst) $(ASRC:%.S=$(OBJDIR)/%.lst) \r
+\r
+\r
+# Compiler flags to generate dependency files.\r
+GENDEPFLAGS = -MMD -MP -MF .dep/$(@F).d\r
+\r
+\r
+# Combine all necessary flags and optional flags.\r
+# Add target processor to flags.\r
+ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS)\r
+ALL_CPPFLAGS = -mmcu=$(MCU) -I. -x c++ $(CPPFLAGS) $(GENDEPFLAGS)\r
+ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)\r
+\r
+\r
+\r
+\r
+\r
+# Default target.\r
+all: begin gccversion sizebefore build checkhooks checklibmode checkboard sizeafter end\r
+\r
+# Change the build target to build a HEX file or a library.\r
+build: elf hex eep lss sym\r
+#build: lib\r
+\r
+\r
+elf: $(TARGET).elf\r
+hex: $(TARGET).hex\r
+eep: $(TARGET).eep\r
+lss: $(TARGET).lss\r
+sym: $(TARGET).sym\r
+LIBNAME=lib$(TARGET).a\r
+lib: $(LIBNAME)\r
+\r
+\r
+\r
+# Eye candy.\r
+# AVR Studio 3.x does not check make's exit code but relies on\r
+# the following magic strings to be generated by the compile job.\r
+begin:\r
+       @echo\r
+       @echo $(MSG_BEGIN)\r
+\r
+end:\r
+       @echo $(MSG_END)\r
+       @echo\r
+\r
+\r
+# Display size of file.\r
+HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex\r
+ELFSIZE = $(SIZE) $(MCU_FLAG) $(FORMAT_FLAG) $(TARGET).elf\r
+MCU_FLAG = $(shell $(SIZE) --help | grep -- --mcu > /dev/null && echo --mcu=$(MCU) )\r
+FORMAT_FLAG = $(shell $(SIZE) --help | grep -- --format=.*avr > /dev/null && echo --format=avr )\r
+\r
+sizebefore:\r
+       @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \\r
+       2>/dev/null; echo; fi\r
+\r
+sizeafter:\r
+       @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \\r
+       2>/dev/null; echo; fi\r
+\r
+checkhooks: build\r
+       @echo\r
+       @echo ------- Unhooked LUFA Events -------\r
+       @$(shell) (grep -s '^EVENT_.*LUFA/.*\\.o' $(TARGET).map | \\r
+                  cut -d' ' -f1 | cut -d'_' -f2- | grep ".*") || \\r
+                          echo "(None)"\r
+       @echo ------------------------------------\r
+\r
+checklibmode:\r
+       @echo\r
+       @echo ----------- Library Mode -----------\r
+       @$(shell) ($(CC) $(ALL_CFLAGS) -E -dM - < /dev/null \\r
+                 | grep 'USB_\(DEVICE\|HOST\)_ONLY' | cut -d' ' -f2 | grep ".*") \\r
+                 || echo "No specific mode (both device and host mode allowable)."\r
+       @echo ------------------------------------\r
+\r
+checkboard:\r
+       @echo\r
+       @echo ---------- Selected Board ----------\r
+       @echo Selected board model is $(BOARD).\r
+       @echo ------------------------------------\r
+       \r
+# Display compiler version information.\r
+gccversion : \r
+       @$(CC) --version\r
+\r
+\r
+\r
+# Program the device.  \r
+program: $(TARGET).hex $(TARGET).eep\r
+       $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)\r
+\r
+flip: $(TARGET).hex\r
+       batchisp -hardware usb -device $(MCU) -operation erase f\r
+       batchisp -hardware usb -device $(MCU) -operation loadbuffer $(TARGET).hex program\r
+       batchisp -hardware usb -device $(MCU) -operation start reset 0\r
+\r
+dfu: $(TARGET).hex\r
+       dfu-programmer $(MCU) erase\r
+       dfu-programmer $(MCU) flash --debug 1 $(TARGET).hex\r
+       dfu-programmer $(MCU) reset\r
+\r
+flip-ee: $(TARGET).hex $(TARGET).eep\r
+       copy $(TARGET).eep $(TARGET)eep.hex\r
+       batchisp -hardware usb -device $(MCU) -operation memory EEPROM erase\r
+       batchisp -hardware usb -device $(MCU) -operation memory EEPROM loadbuffer $(TARGET)eep.hex program\r
+       batchisp -hardware usb -device $(MCU) -operation start reset 0\r
+\r
+dfu-ee: $(TARGET).hex $(TARGET).eep\r
+       dfu-programmer $(MCU) flash-eeprom --debug 1 --suppress-bootloader-mem $(TARGET).eep\r
+       dfu-programmer $(MCU) reset\r
+\r
+\r
+# Generate avr-gdb config/init file which does the following:\r
+#     define the reset signal, load the target file, connect to target, and set \r
+#     a breakpoint at main().\r
+gdb-config: \r
+       @$(REMOVE) $(GDBINIT_FILE)\r
+       @echo define reset >> $(GDBINIT_FILE)\r
+       @echo SIGNAL SIGHUP >> $(GDBINIT_FILE)\r
+       @echo end >> $(GDBINIT_FILE)\r
+       @echo file $(TARGET).elf >> $(GDBINIT_FILE)\r
+       @echo target remote $(DEBUG_HOST):$(DEBUG_PORT)  >> $(GDBINIT_FILE)\r
+ifeq ($(DEBUG_BACKEND),simulavr)\r
+       @echo load  >> $(GDBINIT_FILE)\r
+endif\r
+       @echo break main >> $(GDBINIT_FILE)\r
+\r
+debug: gdb-config $(TARGET).elf\r
+ifeq ($(DEBUG_BACKEND), avarice)\r
+       @echo Starting AVaRICE - Press enter when "waiting to connect" message displays.\r
+       @$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \\r
+       $(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT)\r
+       @$(WINSHELL) /c pause\r
+\r
+else\r
+       @$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \\r
+       $(DEBUG_MFREQ) --port $(DEBUG_PORT)\r
+endif\r
+       @$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE)\r
+\r
+\r
+\r
+\r
+# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.\r
+COFFCONVERT = $(OBJCOPY) --debugging\r
+COFFCONVERT += --change-section-address .data-0x800000\r
+COFFCONVERT += --change-section-address .bss-0x800000\r
+COFFCONVERT += --change-section-address .noinit-0x800000\r
+COFFCONVERT += --change-section-address .eeprom-0x810000\r
+\r
+\r
+\r
+coff: $(TARGET).elf\r
+       @echo\r
+       @echo $(MSG_COFF) $(TARGET).cof\r
+       $(COFFCONVERT) -O coff-avr $< $(TARGET).cof\r
+\r
+\r
+extcoff: $(TARGET).elf\r
+       @echo\r
+       @echo $(MSG_EXTENDED_COFF) $(TARGET).cof\r
+       $(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof\r
+\r
+\r
+\r
+# Create final output files (.hex, .eep) from ELF output file.\r
+%.hex: %.elf\r
+       @echo\r
+       @echo $(MSG_FLASH) $@\r
+       $(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@\r
+\r
+%.eep: %.elf\r
+       @echo\r
+       @echo $(MSG_EEPROM) $@\r
+       -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \\r
+       --change-section-lma .eeprom=0 --no-change-warnings -O $(FORMAT) $< $@ || exit 0\r
+\r
+# Create extended listing file from ELF output file.\r
+%.lss: %.elf\r
+       @echo\r
+       @echo $(MSG_EXTENDED_LISTING) $@\r
+       $(OBJDUMP) -h -z -S $< > $@\r
+\r
+# Create a symbol table from ELF output file.\r
+%.sym: %.elf\r
+       @echo\r
+       @echo $(MSG_SYMBOL_TABLE) $@\r
+       $(NM) -n $< > $@\r
+\r
+\r
+\r
+# Create library from object files.\r
+.SECONDARY : $(TARGET).a\r
+.PRECIOUS : $(OBJ)\r
+%.a: $(OBJ)\r
+       @echo\r
+       @echo $(MSG_CREATING_LIBRARY) $@\r
+       $(AR) $@ $(OBJ)\r
+\r
+\r
+# Link: create ELF output file from object files.\r
+.SECONDARY : $(TARGET).elf\r
+.PRECIOUS : $(OBJ)\r
+%.elf: $(OBJ)\r
+       @echo\r
+       @echo $(MSG_LINKING) $@\r
+       $(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)\r
+\r
+\r
+# Compile: create object files from C source files.\r
+$(OBJDIR)/%.o : %.c\r
+       @echo\r
+       @echo $(MSG_COMPILING) $<\r
+       $(CC) -c $(ALL_CFLAGS) $< -o $@ \r
+\r
+\r
+# Compile: create object files from C++ source files.\r
+$(OBJDIR)/%.o : %.cpp\r
+       @echo\r
+       @echo $(MSG_COMPILING_CPP) $<\r
+       $(CC) -c $(ALL_CPPFLAGS) $< -o $@ \r
+\r
+\r
+# Compile: create assembler files from C source files.\r
+%.s : %.c\r
+       $(CC) -S $(ALL_CFLAGS) $< -o $@\r
+\r
+\r
+# Compile: create assembler files from C++ source files.\r
+%.s : %.cpp\r
+       $(CC) -S $(ALL_CPPFLAGS) $< -o $@\r
+\r
+\r
+# Assemble: create object files from assembler source files.\r
+$(OBJDIR)/%.o : %.S\r
+       @echo\r
+       @echo $(MSG_ASSEMBLING) $<\r
+       $(CC) -c $(ALL_ASFLAGS) $< -o $@\r
+\r
+\r
+# Create preprocessed source for use in sending a bug report.\r
+%.i : %.c\r
+       $(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ \r
+       \r
+\r
+# Target: clean project.\r
+clean: begin clean_list clean_binary end\r
+\r
+clean_binary:\r
+       $(REMOVE) $(TARGET).hex\r
+       \r
+clean_list:\r
+       @echo $(MSG_CLEANING)\r
+       $(REMOVE) $(TARGET).eep\r
+       $(REMOVE) $(TARGET)eep.hex\r
+       $(REMOVE) $(TARGET).cof\r
+       $(REMOVE) $(TARGET).elf\r
+       $(REMOVE) $(TARGET).map\r
+       $(REMOVE) $(TARGET).sym\r
+       $(REMOVE) $(TARGET).lss\r
+       $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.o)\r
+       $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.lst)\r
+       $(REMOVE) $(SRC:.c=.s)\r
+       $(REMOVE) $(SRC:.c=.d)\r
+       $(REMOVE) $(SRC:.c=.i)\r
+       $(REMOVEDIR) .dep\r
+\r
+\r
+doxygen:\r
+       @echo Generating Project Documentation...\r
+       @doxygen Doxygen.conf\r
+       @echo Documentation Generation Complete.\r
+\r
+clean_doxygen:\r
+       rm -rf Documentation\r
+\r
+# Create object files directory\r
+$(shell mkdir $(OBJDIR) 2>/dev/null)\r
+\r
+\r
+# Include the dependency files.\r
+-include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)\r
+\r
+\r
+# Listing of phony targets.\r
+.PHONY : all checkhooks checklibmode checkboard   \\r
+begin finish end sizebefore sizeafter gccversion  \\r
+build elf hex eep lss sym coff extcoff clean      \\r
+clean_list clean_binary program debug gdb-config  \\r
+doxygen dfu flip flip-ee dfu-ee
\ No newline at end of file
diff --git a/Demos/Device/LowLevel/CDC/CDC.aps b/Demos/Device/LowLevel/CDC/CDC.aps
new file mode 100644 (file)
index 0000000..83dde59
--- /dev/null
@@ -0,0 +1 @@
+<AVRStudio><MANAGEMENT><ProjectName>CDC</ProjectName><Created>30-Sep-2008 14:04:34</Created><LastEdit>30-Sep-2008 14:04:56</LastEdit><ICON>241</ICON><ProjectType>0</ProjectType><Created>30-Sep-2008 14:04:34</Created><Version>4</Version><Build>4, 14, 0, 589</Build><ProjectTypeName>AVR GCC</ProjectTypeName></MANAGEMENT><CODE_CREATION><ObjectFile></ObjectFile><EntryFile></EntryFile><SaveFolder>C:\Users\Dean\Documents\Electronics\Projects\WORK\MyUSBWORK\Demos\CDC\</SaveFolder></CODE_CREATION><DEBUG_TARGET><CURRENT_TARGET></CURRENT_TARGET><CURRENT_PART></CURRENT_PART><BREAKPOINTS></BREAKPOINTS><IO_EXPAND><HIDE>false</HIDE></IO_EXPAND><REGISTERNAMES><Register>R00</Register><Register>R01</Register><Register>R02</Register><Register>R03</Register><Register>R04</Register><Register>R05</Register><Register>R06</Register><Register>R07</Register><Register>R08</Register><Register>R09</Register><Register>R10</Register><Register>R11</Register><Register>R12</Register><Register>R13</Register><Register>R14</Register><Register>R15</Register><Register>R16</Register><Register>R17</Register><Register>R18</Register><Register>R19</Register><Register>R20</Register><Register>R21</Register><Register>R22</Register><Register>R23</Register><Register>R24</Register><Register>R25</Register><Register>R26</Register><Register>R27</Register><Register>R28</Register><Register>R29</Register><Register>R30</Register><Register>R31</Register></REGISTERNAMES><COM>Auto</COM><COMType>0</COMType><WATCHNUM>0</WATCHNUM><WATCHNAMES><Pane0></Pane0><Pane1></Pane1><Pane2></Pane2><Pane3></Pane3></WATCHNAMES><BreakOnTrcaeFull>0</BreakOnTrcaeFull></DEBUG_TARGET><Debugger><Triggers></Triggers></Debugger><AVRGCCPLUGIN><FILES><SOURCEFILE>CDC.c</SOURCEFILE><SOURCEFILE>Descriptors.c</SOURCEFILE><HEADERFILE>CDC.h</HEADERFILE><HEADERFILE>Descriptors.h</HEADERFILE><OTHERFILE>makefile</OTHERFILE></FILES><CONFIGS><CONFIG><NAME>default</NAME><USESEXTERNALMAKEFILE>YES</USESEXTERNALMAKEFILE><EXTERNALMAKEFILE>makefile</EXTERNALMAKEFILE><PART>atmega128</PART><HEX>1</HEX><LIST>1</LIST><MAP>1</MAP><OUTPUTFILENAME>CDC.elf</OUTPUTFILENAME><OUTPUTDIR>default\</OUTPUTDIR><ISDIRTY>1</ISDIRTY><OPTIONS/><INCDIRS/><LIBDIRS/><LIBS/><LINKOBJECTS/><OPTIONSFORALL>-Wall -gdwarf-2 -std=gnu99 -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums</OPTIONSFORALL><LINKEROPTIONS></LINKEROPTIONS><SEGMENTS/></CONFIG></CONFIGS><LASTCONFIG>default</LASTCONFIG><USES_WINAVR>1</USES_WINAVR><GCC_LOC>C:\WinAVR-20080512\bin\avr-gcc.exe</GCC_LOC><MAKE_LOC>C:\WinAVR-20080512\utils\bin\make.exe</MAKE_LOC></AVRGCCPLUGIN><IOView><usergroups/><sort sorted="0" column="0" ordername="0" orderaddress="0" ordergroup="0"/></IOView><Files></Files><Events><Bookmarks></Bookmarks></Events><Trace><Filters></Filters></Trace></AVRStudio>\r
diff --git a/Demos/Device/LowLevel/CDC/CDC.c b/Demos/Device/LowLevel/CDC/CDC.c
new file mode 100644 (file)
index 0000000..d7ebb9e
--- /dev/null
@@ -0,0 +1,321 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  Main source file for the CDC demo. This file contains the main tasks of the demo and\r
+ *  is responsible for the initial application hardware configuration.\r
+ */\r
+\r
+#include "CDC.h"\r
+\r
+/* Scheduler Task List */\r
+TASK_LIST\r
+{\r
+       { .Task = USB_USBTask          , .TaskStatus = TASK_STOP },\r
+       { .Task = CDC_Task             , .TaskStatus = TASK_STOP },\r
+};\r
+\r
+/* Globals: */\r
+/** Contains the current baud rate and other settings of the virtual serial port. While this demo does not use\r
+ *  the physical USART and thus does not use these settings, they must still be retained and returned to the host\r
+ *  upon request or the host will assume the device is non-functional.\r
+ *\r
+ *  These values are set by the host via a class-specific request, however they are not required to be used accurately.\r
+ *  It is possible to completely ignore these value or use other settings as the host is completely unaware of the physical\r
+ *  serial link characteristics and instead sends and receives data in endpoint streams.\r
+ */\r
+CDC_Line_Coding_t LineCoding = { .BaudRateBPS = 9600,\r
+                                 .CharFormat  = OneStopBit,\r
+                                 .ParityType  = Parity_None,\r
+                                 .DataBits    = 8            };\r
+\r
+/** String to print through the virtual serial port when the joystick is pressed upwards. */\r
+char JoystickUpString[]      = "Joystick Up\r\n";\r
+\r
+/** String to print through the virtual serial port when the joystick is pressed downward. */\r
+char JoystickDownString[]    = "Joystick Down\r\n";\r
+\r
+/** String to print through the virtual serial port when the joystick is pressed left. */\r
+char JoystickLeftString[]    = "Joystick Left\r\n";\r
+\r
+/** String to print through the virtual serial port when the joystick is pressed right. */\r
+char JoystickRightString[]   = "Joystick Right\r\n";\r
+\r
+/** String to print through the virtual serial port when the joystick is pressed inwards. */\r
+char JoystickPressedString[] = "Joystick Pressed\r\n";\r
+\r
+/** Main program entry point. This routine configures the hardware required by the application, then\r
+ *  starts the scheduler to run the application tasks.\r
+ */\r
+int main(void)\r
+{\r
+       /* Disable watchdog if enabled by bootloader/fuses */\r
+       MCUSR &= ~(1 << WDRF);\r
+       wdt_disable();\r
+\r
+       /* Disable clock division */\r
+       clock_prescale_set(clock_div_1);\r
+\r
+       /* Hardware Initialization */\r
+       Joystick_Init();\r
+       LEDs_Init();\r
+       \r
+       /* Indicate USB not ready */\r
+       UpdateStatus(Status_USBNotReady);\r
+       \r
+       /* Initialize Scheduler so that it can be used */\r
+       Scheduler_Init();\r
+\r
+       /* Initialize USB Subsystem */\r
+       USB_Init();\r
+\r
+       /* Scheduling - routine never returns, so put this last in the main function */\r
+       Scheduler_Start();\r
+}\r
+\r
+/** Event handler for the USB_Connect event. This indicates that the device is enumerating via the status LEDs and\r
+ *  starts the library USB task to begin the enumeration and USB management process.\r
+ */\r
+void EVENT_USB_Connect(void)\r
+{\r
+       /* Start USB management task */\r
+       Scheduler_SetTaskMode(USB_USBTask, TASK_RUN);\r
+\r
+       /* Indicate USB enumerating */\r
+       UpdateStatus(Status_USBEnumerating);\r
+}\r
+\r
+/** Event handler for the USB_Disconnect event. This indicates that the device is no longer connected to a host via\r
+ *  the status LEDs and stops the USB management and CDC management tasks.\r
+ */\r
+void EVENT_USB_Disconnect(void)\r
+{\r
+       /* Stop running CDC and USB management tasks */\r
+       Scheduler_SetTaskMode(CDC_Task, TASK_STOP);\r
+       Scheduler_SetTaskMode(USB_USBTask, TASK_STOP);\r
+\r
+       /* Indicate USB not ready */\r
+       UpdateStatus(Status_USBNotReady);\r
+}\r
+\r
+/** Event handler for the USB_ConfigurationChanged event. This is fired when the host set the current configuration\r
+ *  of the USB device after enumeration - the device endpoints are configured and the CDC management task started.\r
+ */\r
+void EVENT_USB_ConfigurationChanged(void)\r
+{\r
+       /* Setup CDC Notification, Rx and Tx Endpoints */\r
+       Endpoint_ConfigureEndpoint(CDC_NOTIFICATION_EPNUM, EP_TYPE_INTERRUPT,\r
+                                      ENDPOINT_DIR_IN, CDC_NOTIFICATION_EPSIZE,\r
+                                  ENDPOINT_BANK_SINGLE);\r
+\r
+       Endpoint_ConfigureEndpoint(CDC_TX_EPNUM, EP_TYPE_BULK,\r
+                                      ENDPOINT_DIR_IN, CDC_TXRX_EPSIZE,\r
+                                  ENDPOINT_BANK_SINGLE);\r
+\r
+       Endpoint_ConfigureEndpoint(CDC_RX_EPNUM, EP_TYPE_BULK,\r
+                                      ENDPOINT_DIR_OUT, CDC_TXRX_EPSIZE,\r
+                                  ENDPOINT_BANK_SINGLE);\r
+\r
+       /* Indicate USB connected and ready */\r
+       UpdateStatus(Status_USBReady);\r
+       \r
+       /* Start CDC task */\r
+       Scheduler_SetTaskMode(CDC_Task, TASK_RUN);\r
+}\r
+\r
+/** Event handler for the USB_UnhandledControlPacket event. This is used to catch standard and class specific\r
+ *  control requests that are not handled internally by the USB library (including the CDC control commands,\r
+ *  which are all issued via the control endpoint), so that they can be handled appropriately for the application.\r
+ */\r
+void EVENT_USB_UnhandledControlPacket(void)\r
+{\r
+       uint8_t* LineCodingData = (uint8_t*)&LineCoding;\r
+\r
+       /* Process CDC specific control requests */\r
+       switch (USB_ControlRequest.bRequest)\r
+       {\r
+               case REQ_GetLineEncoding:\r
+                       if (USB_ControlRequest.bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_INTERFACE))\r
+                       {       \r
+                               /* Acknowledge the SETUP packet, ready for data transfer */\r
+                               Endpoint_ClearSETUP();\r
+\r
+                               /* Write the line coding data to the control endpoint */\r
+                               Endpoint_Write_Control_Stream_LE(LineCodingData, sizeof(CDC_Line_Coding_t));\r
+                               \r
+                               /* Finalize the stream transfer to send the last packet or clear the host abort */\r
+                               Endpoint_ClearOUT();\r
+                       }\r
+                       \r
+                       break;\r
+               case REQ_SetLineEncoding:\r
+                       if (USB_ControlRequest.bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE))\r
+                       {\r
+                               /* Acknowledge the SETUP packet, ready for data transfer */\r
+                               Endpoint_ClearSETUP();\r
+\r
+                               /* Read the line coding data in from the host into the global struct */\r
+                               Endpoint_Read_Control_Stream_LE(LineCodingData, sizeof(CDC_Line_Coding_t));\r
+\r
+                               /* Finalize the stream transfer to clear the last packet from the host */\r
+                               Endpoint_ClearIN();\r
+                       }\r
+       \r
+                       break;\r
+               case REQ_SetControlLineState:\r
+                       if (USB_ControlRequest.bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE))\r
+                       {\r
+                               /* Acknowledge the SETUP packet, ready for data transfer */\r
+                               Endpoint_ClearSETUP();\r
+                               \r
+                               /* NOTE: Here you can read in the line state mask from the host, to get the current state of the output handshake\r
+                                        lines. The mask is read in from the wValue parameter in USB_ControlRequest, and can be masked against the\r
+                                                CONTROL_LINE_OUT_* masks to determine the RTS and DTR line states using the following code:\r
+                               */\r
+                               \r
+                               /* Acknowledge status stage */\r
+                               while (!(Endpoint_IsINReady()));\r
+                               Endpoint_ClearIN();\r
+                       }\r
+       \r
+                       break;\r
+       }\r
+}\r
+\r
+/** Function to manage status updates to the user. This is done via LEDs on the given board, if available, but may be changed to\r
+ *  log to a serial port, or anything else that is suitable for status updates.\r
+ *\r
+ *  \param CurrentStatus  Current status of the system, from the CDC_StatusCodes_t enum\r
+ */\r
+void UpdateStatus(uint8_t CurrentStatus)\r
+{\r
+       uint8_t LEDMask = LEDS_NO_LEDS;\r
+       \r
+       /* Set the LED mask to the appropriate LED mask based on the given status code */\r
+       switch (CurrentStatus)\r
+       {\r
+               case Status_USBNotReady:\r
+                       LEDMask = (LEDS_LED1);\r
+                       break;\r
+               case Status_USBEnumerating:\r
+                       LEDMask = (LEDS_LED1 | LEDS_LED2);\r
+                       break;\r
+               case Status_USBReady:\r
+                       LEDMask = (LEDS_LED2 | LEDS_LED4);\r
+                       break;\r
+       }\r
+       \r
+       /* Set the board LEDs to the new LED mask */\r
+       LEDs_SetAllLEDs(LEDMask);\r
+}\r
+\r
+/** Function to manage CDC data transmission and reception to and from the host. */\r
+TASK(CDC_Task)\r
+{\r
+       char*       ReportString    = NULL;\r
+       uint8_t     JoyStatus_LCL   = Joystick_GetStatus();\r
+       static bool ActionSent      = false;\r
+       \r
+#if 0\r
+       /* NOTE: Here you can use the notification endpoint to send back line state changes to the host, for the special RS-232\r
+                handshake signal lines (and some error states), via the CONTROL_LINE_IN_* masks and the following code:\r
+       */\r
+       USB_Notification_Header_t Notification = (USB_Notification_Header_t)\r
+               {\r
+                       .NotificationType = (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_INTERFACE),\r
+                       .Notification     = NOTIF_SerialState,\r
+                       .wValue           = 0,\r
+                       .wIndex           = 0,\r
+                       .wLength          = sizeof(uint16_t),\r
+               };\r
+               \r
+       uint16_t LineStateMask;\r
+       \r
+       // Set LineStateMask here to a mask of CONTROL_LINE_IN_* masks to set the input handshake line states to send to the host\r
+       \r
+       Endpoint_SelectEndpoint(CDC_NOTIFICATION_EPNUM);\r
+       Endpoint_Write_Stream_LE(&Notification, sizeof(Notification));\r
+       Endpoint_Write_Stream_LE(&LineStateMask, sizeof(LineStateMask));\r
+       Endpoint_ClearIN();\r
+#endif\r
+\r
+       /* Determine if a joystick action has occurred */\r
+       if (JoyStatus_LCL & JOY_UP)\r
+         ReportString = JoystickUpString;\r
+       else if (JoyStatus_LCL & JOY_DOWN)\r
+         ReportString = JoystickDownString;\r
+       else if (JoyStatus_LCL & JOY_LEFT)\r
+         ReportString = JoystickLeftString;\r
+       else if (JoyStatus_LCL & JOY_RIGHT)\r
+         ReportString = JoystickRightString;\r
+       else if (JoyStatus_LCL & JOY_PRESS)\r
+         ReportString = JoystickPressedString;\r
+\r
+       /* Flag management - Only allow one string to be sent per action */\r
+       if (ReportString == NULL)\r
+       {\r
+               ActionSent = false;\r
+       }\r
+       else if (ActionSent == false)\r
+       {\r
+               ActionSent = true;\r
+\r
+               /* Select the Serial Tx Endpoint */\r
+               Endpoint_SelectEndpoint(CDC_TX_EPNUM);\r
+\r
+               /* Write the String to the Endpoint */\r
+               Endpoint_Write_Stream_LE(ReportString, strlen(ReportString));\r
+               \r
+               /* Remember if the packet to send completely fills the endpoint */\r
+               bool IsFull = (Endpoint_BytesInEndpoint() == CDC_TXRX_EPSIZE);\r
+\r
+               /* Finalize the stream transfer to send the last packet */\r
+               Endpoint_ClearIN();\r
+\r
+               /* If the last packet filled the endpoint, send an empty packet to release the buffer on \r
+                * the receiver (otherwise all data will be cached until a non-full packet is received) */\r
+               if (IsFull)\r
+               {\r
+                       /* Wait until the endpoint is ready for another packet */\r
+                       while (!(Endpoint_IsINReady()));\r
+                       \r
+                       /* Send an empty packet to ensure that the host does not buffer data sent to it */\r
+                       Endpoint_ClearIN();\r
+               }\r
+       }\r
+\r
+       /* Select the Serial Rx Endpoint */\r
+       Endpoint_SelectEndpoint(CDC_RX_EPNUM);\r
+       \r
+       /* Throw away any received data from the host */\r
+       if (Endpoint_IsOUTReceived())\r
+         Endpoint_ClearOUT();\r
+}\r
diff --git a/Demos/Device/LowLevel/CDC/CDC.h b/Demos/Device/LowLevel/CDC/CDC.h
new file mode 100644 (file)
index 0000000..4c4ca74
--- /dev/null
@@ -0,0 +1,182 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  Header file for CDC.c.\r
+ */\r
+\r
+#ifndef _CDC_H_\r
+#define _CDC_H_\r
+\r
+       /* Includes: */\r
+               #include <avr/io.h>\r
+               #include <avr/wdt.h>\r
+               #include <avr/power.h>\r
+               #include <string.h>\r
+\r
+               #include "Descriptors.h"\r
+\r
+               #include <LUFA/Version.h>                        // Library Version Information\r
+               #include <LUFA/Drivers/USB/USB.h>                // USB Functionality\r
+               #include <LUFA/Drivers/Board/Joystick.h>         // Joystick driver\r
+               #include <LUFA/Drivers/Board/LEDs.h>             // LEDs driver\r
+               #include <LUFA/Scheduler/Scheduler.h>            // Simple scheduler for task management\r
+\r
+       /* Macros: */\r
+               /** CDC Class specific request to get the current virtual serial port configuration settings. */\r
+               #define REQ_GetLineEncoding          0x21\r
+\r
+               /** CDC Class specific request to set the current virtual serial port configuration settings. */\r
+               #define REQ_SetLineEncoding          0x20\r
+\r
+               /** CDC Class specific request to set the current virtual serial port handshake line states. */\r
+               #define REQ_SetControlLineState      0x22\r
+               \r
+               /** Notification type constant for a change in the virtual serial port handshake line states, for\r
+                *  use with a USB_Notification_Header_t notification structure when sent to the host via the CDC \r
+                *  notification endpoint.\r
+                */\r
+               #define NOTIF_SerialState            0x20\r
+\r
+               /** Mask for the DTR handshake line for use with the REQ_SetControlLineState class specific request\r
+                *  from the host, to indicate that the DTR line state should be high.\r
+                */\r
+               #define CONTROL_LINE_OUT_DTR         (1 << 0)\r
+\r
+               /** Mask for the RTS handshake line for use with the REQ_SetControlLineState class specific request\r
+                *  from the host, to indicate that theRTS line state should be high.\r
+                */\r
+               #define CONTROL_LINE_OUT_RTS         (1 << 1)\r
+               \r
+               /** Mask for the DCD handshake line for use with the a NOTIF_SerialState class specific notification\r
+                *  from the device to the host, to indicate that the DCD line state is currently high.\r
+                */\r
+               #define CONTROL_LINE_IN_DCD          (1 << 0)\r
+\r
+               /** Mask for the DSR handshake line for use with the a NOTIF_SerialState class specific notification\r
+                *  from the device to the host, to indicate that the DSR line state is currently high.\r
+                */\r
+               #define CONTROL_LINE_IN_DSR          (1 << 1)\r
+\r
+               /** Mask for the BREAK handshake line for use with the a NOTIF_SerialState class specific notification\r
+                *  from the device to the host, to indicate that the BREAK line state is currently high.\r
+                */\r
+               #define CONTROL_LINE_IN_BREAK        (1 << 2)\r
+\r
+               /** Mask for the RING handshake line for use with the a NOTIF_SerialState class specific notification\r
+                *  from the device to the host, to indicate that the RING line state is currently high.\r
+                */\r
+               #define CONTROL_LINE_IN_RING         (1 << 3)\r
+\r
+               /** Mask for use with the a NOTIF_SerialState class specific notification from the device to the host,\r
+                *  to indicate that a framing error has occurred on the virtual serial port.\r
+                */\r
+               #define CONTROL_LINE_IN_FRAMEERROR   (1 << 4)\r
+\r
+               /** Mask for use with the a NOTIF_SerialState class specific notification from the device to the host,\r
+                *  to indicate that a parity error has occurred on the virtual serial port.\r
+                */\r
+               #define CONTROL_LINE_IN_PARITYERROR  (1 << 5)\r
+\r
+               /** Mask for use with the a NOTIF_SerialState class specific notification from the device to the host,\r
+                *  to indicate that a data overrun error has occurred on the virtual serial port.\r
+                */\r
+               #define CONTROL_LINE_IN_OVERRUNERROR (1 << 6)\r
+               \r
+       /* Type Defines: */\r
+               /** Type define for the virtual serial port line encoding settings, for storing the current USART configuration\r
+                *  as set by the host via a class specific request.\r
+                */\r
+               typedef struct\r
+               {\r
+                       uint32_t BaudRateBPS; /**< Baud rate of the virtual serial port, in bits per second */\r
+                       uint8_t  CharFormat; /**< Character format of the virtual serial port, a value from the\r
+                                             *   CDCDevice_CDC_LineCodingFormats_t enum\r
+                                             */\r
+                       uint8_t  ParityType; /**< Parity setting of the virtual serial port, a value from the\r
+                                             *   CDCDevice_LineCodingParity_t enum\r
+                                             */\r
+                       uint8_t  DataBits; /**< Bits of data per character of the virtual serial port */\r
+               } CDC_Line_Coding_t;\r
+               \r
+               /** Type define for a CDC notification, sent to the host via the CDC notification endpoint to indicate a\r
+                *  change in the device state asynchronously.\r
+                */\r
+               typedef struct\r
+               {\r
+                       uint8_t  NotificationType; /**< Notification type, a mask of REQDIR_*, REQTYPE_* and REQREC_* constants\r
+                                                   *   from the library StdRequestType.h header\r
+                                                   */\r
+                       uint8_t  Notification; /**< Notification value, a NOTIF_* constant */\r
+                       uint16_t wValue; /**< Notification wValue, notification-specific */\r
+                       uint16_t wIndex; /**< Notification wIndex, notification-specific */\r
+                       uint16_t wLength; /**< Notification wLength, notification-specific */\r
+               } USB_Notification_Header_t;\r
+               \r
+       /* Enums: */\r
+               /** Enum for the possible line encoding formats of a virtual serial port. */\r
+               enum CDCDevice_CDC_LineCodingFormats_t\r
+               {\r
+                       OneStopBit          = 0, /**< Each frame contains one stop bit */\r
+                       OneAndAHalfStopBits = 1, /**< Each frame contains one and a half stop bits */\r
+                       TwoStopBits         = 2, /**< Each frame contains two stop bits */\r
+               };\r
+               \r
+               /** Enum for the possible line encoding parity settings of a virtual serial port. */\r
+               enum CDCDevice_LineCodingParity_t\r
+               {\r
+                       Parity_None         = 0, /**< No parity bit mode on each frame */\r
+                       Parity_Odd          = 1, /**< Odd parity bit mode on each frame */\r
+                       Parity_Even         = 2, /**< Even parity bit mode on each frame */\r
+                       Parity_Mark         = 3, /**< Mark parity bit mode on each frame */\r
+                       Parity_Space        = 4, /**< Space parity bit mode on each frame */\r
+               };\r
+\r
+               /** Enum for the possible status codes for passing to the UpdateStatus() function. */\r
+               enum CDC_StatusCodes_t\r
+               {\r
+                       Status_USBNotReady    = 0, /**< USB is not ready (disconnected from a USB host) */\r
+                       Status_USBEnumerating = 1, /**< USB interface is enumerating */\r
+                       Status_USBReady       = 2, /**< USB interface is connected and ready */\r
+               };\r
+               \r
+       /* Tasks: */\r
+               TASK(CDC_Task);\r
+\r
+       /* Function Prototypes: */\r
+               void EVENT_USB_Connect(void);\r
+               void EVENT_USB_Disconnect(void);\r
+               void EVENT_USB_ConfigurationChanged(void);\r
+               void EVENT_USB_UnhandledControlPacket(void);\r
+\r
+               void UpdateStatus(uint8_t CurrentStatus);\r
+\r
+#endif\r
diff --git a/Demos/Device/LowLevel/CDC/CDC.txt b/Demos/Device/LowLevel/CDC/CDC.txt
new file mode 100644 (file)
index 0000000..8e13b55
--- /dev/null
@@ -0,0 +1,63 @@
+/** \file\r
+ *\r
+ *  This file contains special DoxyGen information for the generation of the main page and other special\r
+ *  documentation pages. It is not a project source file.\r
+ */\r
\r
+/** \mainpage Communications Device Class Device (Virtual Serial Port)\r
+ *\r
+ *  \section SSec_Info USB Information:\r
+ *\r
+ *  The following table gives a rundown of the USB utilization of this demo.\r
+ *\r
+ *  <table>\r
+ *   <tr>\r
+ *    <td><b>USB Mode:</b></td>\r
+ *    <td>Device</td>\r
+ *   </tr>\r
+ *   <tr>\r
+ *    <td><b>USB Class:</b></td>\r
+ *    <td>Communications Device Class (CDC)</td>\r
+ *   </tr>\r
+ *   <tr> \r
+ *    <td><b>USB Subclass:</b></td>\r
+ *    <td>Abstract Control Model (ACM)</td>\r
+ *   </tr>\r
+ *   <tr>\r
+ *    <td><b>Relevant Standards:</b></td>\r
+ *    <td>USBIF CDC Class Standard</td>\r
+ *   </tr>\r
+ *   <tr>\r
+ *    <td><b>Usable Speeds:</b></td>\r
+ *    <td>Full Speed Mode</td>\r
+ *   </tr>\r
+ *  </table>\r
+ *\r
+ *  \section SSec_Description Project Description: \r
+ *\r
+ *  Communications Device Class demonstration application.\r
+ *  This gives a simple reference application for implementing\r
+ *  a CDC device acting as a virtual serial port. Joystick\r
+ *  actions are transmitted to the host as strings. The device\r
+ *  does not respond to serial data sent from the host.\r
+ *  \r
+ *  After running this demo for the first time on a new computer,\r
+ *  you will need to supply the .INF file located in this demo\r
+ *  project's directory as the device's driver when running under\r
+ *  Windows. This will enable Windows to use its inbuilt CDC drivers,\r
+ *  negating the need for custom drivers for the device. Other\r
+ *  Operating Systems should automatically use their own inbuilt\r
+ *  CDC-ACM drivers.\r
+ *\r
+ *  \section SSec_Options Project Options\r
+ *\r
+ *  The following defines can be found in this demo, which can control the demo behaviour when defined, or changed in value.\r
+ *\r
+ *  <table>\r
+ *   <tr>\r
+ *    <td>\r
+ *     None\r
+ *    </td>\r
+ *   </tr>\r
+ *  </table>\r
+ */
\ No newline at end of file
diff --git a/Demos/Device/LowLevel/CDC/Descriptors.c b/Demos/Device/LowLevel/CDC/Descriptors.c
new file mode 100644 (file)
index 0000000..03e6882
--- /dev/null
@@ -0,0 +1,263 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  USB Device Descriptors, for library use when in USB device mode. Descriptors are special \r
+ *  computer-readable structures which the host requests upon device enumeration, to determine\r
+ *  the device's capabilities and functions.  \r
+ */\r
+\r
+#include "Descriptors.h"\r
+\r
+/** Device descriptor structure. This descriptor, located in FLASH memory, describes the overall\r
+ *  device characteristics, including the supported USB version, control endpoint size and the\r
+ *  number of device configurations. The descriptor is read out by the USB host when the enumeration\r
+ *  process begins.\r
+ */\r
+USB_Descriptor_Device_t PROGMEM DeviceDescriptor =\r
+{\r
+       .Header                 = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device},\r
+               \r
+       .USBSpecification       = VERSION_BCD(01.10),\r
+       .Class                  = 0x02,\r
+       .SubClass               = 0x00,\r
+       .Protocol               = 0x00,\r
+                               \r
+       .Endpoint0Size          = FIXED_CONTROL_ENDPOINT_SIZE,\r
+               \r
+       .VendorID               = 0x03EB,\r
+       .ProductID              = 0x2044,\r
+       .ReleaseNumber          = 0x0000,\r
+               \r
+       .ManufacturerStrIndex   = 0x01,\r
+       .ProductStrIndex        = 0x02,\r
+       .SerialNumStrIndex      = NO_DESCRIPTOR,\r
+               \r
+       .NumberOfConfigurations = 1\r
+};\r
+\r
+/** Configuration descriptor structure. This descriptor, located in FLASH memory, describes the usage\r
+ *  of the device in one of its supported configurations, including information about any device interfaces\r
+ *  and endpoints. The descriptor is read out by the USB host during the enumeration process when selecting\r
+ *  a configuration so that the host may correctly communicate with the USB device.\r
+ */\r
+USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =\r
+{\r
+       .Config = \r
+               {\r
+                       .Header                 = {.Size = sizeof(USB_Descriptor_Configuration_Header_t), .Type = DTYPE_Configuration},\r
+\r
+                       .TotalConfigurationSize = sizeof(USB_Descriptor_Configuration_t),\r
+                       .TotalInterfaces        = 2,\r
+                               \r
+                       .ConfigurationNumber    = 1,\r
+                       .ConfigurationStrIndex  = NO_DESCRIPTOR,\r
+                               \r
+                       .ConfigAttributes       = (USB_CONFIG_ATTR_BUSPOWERED | USB_CONFIG_ATTR_SELFPOWERED),\r
+                       \r
+                       .MaxPowerConsumption    = USB_CONFIG_POWER_MA(100)\r
+               },\r
+               \r
+       .CCI_Interface = \r
+               {\r
+                       .Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},\r
+\r
+                       .InterfaceNumber        = 0,\r
+                       .AlternateSetting       = 0,\r
+                       \r
+                       .TotalEndpoints         = 1,\r
+                               \r
+                       .Class                  = 0x02,\r
+                       .SubClass               = 0x02,\r
+                       .Protocol               = 0x01,\r
+                               \r
+                       .InterfaceStrIndex      = NO_DESCRIPTOR\r
+               },\r
+\r
+       .CDC_Functional_IntHeader = \r
+               {\r
+                       .Header                 = {.Size = sizeof(CDC_FUNCTIONAL_DESCRIPTOR(2)), .Type = 0x24},\r
+                       .SubType                = 0x00,\r
+                       \r
+                       .Data                   = {0x01, 0x10}\r
+               },\r
+\r
+       .CDC_Functional_CallManagement = \r
+               {\r
+                       .Header                 = {.Size = sizeof(CDC_FUNCTIONAL_DESCRIPTOR(2)), .Type = 0x24},\r
+                       .SubType                = 0x01,\r
+                       \r
+                       .Data                   = {0x03, 0x01}\r
+               },\r
+\r
+       .CDC_Functional_AbstractControlManagement = \r
+               {\r
+                       .Header                 = {.Size = sizeof(CDC_FUNCTIONAL_DESCRIPTOR(1)), .Type = 0x24},\r
+                       .SubType                = 0x02,\r
+                       \r
+                       .Data                   = {0x06}\r
+               },\r
+               \r
+       .CDC_Functional_Union = \r
+               {\r
+                       .Header                 = {.Size = sizeof(CDC_FUNCTIONAL_DESCRIPTOR(2)), .Type = 0x24},\r
+                       .SubType                = 0x06,\r
+                       \r
+                       .Data                   = {0x00, 0x01}\r
+               },\r
+\r
+       .ManagementEndpoint = \r
+               {\r
+                       .Header                 = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},\r
+                                                                                \r
+                       .EndpointAddress        = (ENDPOINT_DESCRIPTOR_DIR_IN | CDC_NOTIFICATION_EPNUM),\r
+                       .Attributes             = EP_TYPE_INTERRUPT,\r
+                       .EndpointSize           = CDC_NOTIFICATION_EPSIZE,\r
+                       .PollingIntervalMS      = 0xFF\r
+               },\r
+\r
+       .DCI_Interface = \r
+               {\r
+                       .Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},\r
+\r
+                       .InterfaceNumber        = 1,\r
+                       .AlternateSetting       = 0,\r
+                       \r
+                       .TotalEndpoints         = 2,\r
+                               \r
+                       .Class                  = 0x0A,\r
+                       .SubClass               = 0x00,\r
+                       .Protocol               = 0x00,\r
+                               \r
+                       .InterfaceStrIndex      = NO_DESCRIPTOR\r
+               },\r
+\r
+       .DataOutEndpoint = \r
+               {\r
+                       .Header                 = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},\r
+                                                                                \r
+                       .EndpointAddress        = (ENDPOINT_DESCRIPTOR_DIR_OUT | CDC_RX_EPNUM),\r
+                       .Attributes             = EP_TYPE_BULK,\r
+                       .EndpointSize           = CDC_TXRX_EPSIZE,\r
+                       .PollingIntervalMS      = 0x00\r
+               },\r
+               \r
+       .DataInEndpoint = \r
+               {\r
+                       .Header                 = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},\r
+                                                                                \r
+                       .EndpointAddress        = (ENDPOINT_DESCRIPTOR_DIR_IN | CDC_TX_EPNUM),\r
+                       .Attributes             = EP_TYPE_BULK,\r
+                       .EndpointSize           = CDC_TXRX_EPSIZE,\r
+                       .PollingIntervalMS      = 0x00\r
+               }\r
+};\r
+\r
+/** Language descriptor structure. This descriptor, located in FLASH memory, is returned when the host requests\r
+ *  the string descriptor with index 0 (the first index). It is actually an array of 16-bit integers, which indicate\r
+ *  via the language ID table available at USB.org what languages the device supports for its string descriptors.\r
+ */\r
+USB_Descriptor_String_t PROGMEM LanguageString =\r
+{\r
+       .Header                 = {.Size = USB_STRING_LEN(1), .Type = DTYPE_String},\r
+               \r
+       .UnicodeString          = {LANGUAGE_ID_ENG}\r
+};\r
+\r
+/** Manufacturer descriptor string. This is a Unicode string containing the manufacturer's details in human readable\r
+ *  form, and is read out upon request by the host when the appropriate string ID is requested, listed in the Device\r
+ *  Descriptor.\r
+ */\r
+USB_Descriptor_String_t PROGMEM ManufacturerString =\r
+{\r
+       .Header                 = {.Size = USB_STRING_LEN(11), .Type = DTYPE_String},\r
+               \r
+       .UnicodeString          = L"Dean Camera"\r
+};\r
+\r
+/** Product descriptor string. This is a Unicode string containing the product's details in human readable form,\r
+ *  and is read out upon request by the host when the appropriate string ID is requested, listed in the Device\r
+ *  Descriptor.\r
+ */\r
+USB_Descriptor_String_t PROGMEM ProductString =\r
+{\r
+       .Header                 = {.Size = USB_STRING_LEN(13), .Type = DTYPE_String},\r
+               \r
+       .UnicodeString          = L"LUFA CDC Demo"\r
+};\r
+\r
+/** This function is called by the library when in device mode, and must be overridden (see library "USB Descriptors"\r
+ *  documentation) by the application code so that the address and size of a requested descriptor can be given\r
+ *  to the USB library. When the device receives a Get Descriptor request on the control endpoint, this function\r
+ *  is called so that the descriptor details can be passed back and the appropriate descriptor sent back to the\r
+ *  USB host.\r
+ */\r
+uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
+{\r
+       const uint8_t  DescriptorType   = (wValue >> 8);\r
+       const uint8_t  DescriptorNumber = (wValue & 0xFF);\r
+\r
+       void*          Address = NULL;\r
+       uint16_t       Size    = NO_DESCRIPTOR;\r
+\r
+       switch (DescriptorType)\r
+       {\r
+               case DTYPE_Device:\r
+                       Address = (void*)&DeviceDescriptor;\r
+                       Size    = sizeof(USB_Descriptor_Device_t);\r
+                       break;\r
+               case DTYPE_Configuration: \r
+                       Address = (void*)&ConfigurationDescriptor;\r
+                       Size    = sizeof(USB_Descriptor_Configuration_t);\r
+                       break;\r
+               case DTYPE_String: \r
+                       switch (DescriptorNumber)\r
+                       {\r
+                               case 0x00: \r
+                                       Address = (void*)&LanguageString;\r
+                                       Size    = pgm_read_byte(&LanguageString.Header.Size);\r
+                                       break;\r
+                               case 0x01: \r
+                                       Address = (void*)&ManufacturerString;\r
+                                       Size    = pgm_read_byte(&ManufacturerString.Header.Size);\r
+                                       break;\r
+                               case 0x02: \r
+                                       Address = (void*)&ProductString;\r
+                                       Size    = pgm_read_byte(&ProductString.Header.Size);\r
+                                       break;\r
+                       }\r
+                       \r
+                       break;\r
+       }\r
+       \r
+       *DescriptorAddress = Address;           \r
+       return Size;\r
+}\r
diff --git a/Demos/Device/LowLevel/CDC/Descriptors.h b/Demos/Device/LowLevel/CDC/Descriptors.h
new file mode 100644 (file)
index 0000000..41b4430
--- /dev/null
@@ -0,0 +1,98 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  Header file for Descriptors.c.\r
+ */\r
\r
+#ifndef _DESCRIPTORS_H_\r
+#define _DESCRIPTORS_H_\r
+\r
+       /* Includes: */\r
+               #include <LUFA/Drivers/USB/USB.h>\r
+\r
+               #include <avr/pgmspace.h>\r
+\r
+       /* Macros: */\r
+               /** Macro to define a CDC class-specific functional descriptor. CDC functional descriptors have a\r
+                *  uniform structure but variable sized data payloads, thus cannot be represented accurately by\r
+                *  a single typedef struct. A macro is used instead so that functional descriptors can be created\r
+                *  easily by specifying the size of the payload. This allows sizeof() to work correctly.\r
+                *\r
+                *  \param DataSize  Size in bytes of the CDC functional descriptor's data payload\r
+                */\r
+               #define CDC_FUNCTIONAL_DESCRIPTOR(DataSize)        \\r
+                    struct                                        \\r
+                    {                                             \\r
+                         USB_Descriptor_Header_t Header;          \\r
+                             uint8_t                 SubType;         \\r
+                         uint8_t                 Data[DataSize];  \\r
+                    }\r
+                        \r
+               /** Endpoint number of the CDC device-to-host notification IN endpoint. */\r
+               #define CDC_NOTIFICATION_EPNUM         2\r
+\r
+               /** Endpoint number of the CDC device-to-host data IN endpoint. */\r
+               #define CDC_TX_EPNUM                   3        \r
+\r
+               /** Endpoint number of the CDC host-to-device data OUT endpoint. */\r
+               #define CDC_RX_EPNUM                   4        \r
+\r
+               /** Size in bytes of the CDC device-to-host notification IN endpoint. */\r
+               #define CDC_NOTIFICATION_EPSIZE        8\r
+\r
+               /** Size in bytes of the CDC data IN and OUT endpoints. */\r
+               #define CDC_TXRX_EPSIZE                16       \r
+\r
+       /* Type Defines: */\r
+               /** Type define for the device configuration descriptor structure. This must be defined in the\r
+                *  application code, as the configuration descriptor contains several sub-descriptors which\r
+                *  vary between devices, and which describe the device's usage to the host.\r
+                */\r
+               typedef struct\r
+               {\r
+                       USB_Descriptor_Configuration_Header_t    Config;\r
+                       USB_Descriptor_Interface_t               CCI_Interface;\r
+                       CDC_FUNCTIONAL_DESCRIPTOR(2)             CDC_Functional_IntHeader;\r
+                       CDC_FUNCTIONAL_DESCRIPTOR(2)             CDC_Functional_CallManagement;\r
+                       CDC_FUNCTIONAL_DESCRIPTOR(1)             CDC_Functional_AbstractControlManagement;\r
+                       CDC_FUNCTIONAL_DESCRIPTOR(2)             CDC_Functional_Union;\r
+                       USB_Descriptor_Endpoint_t                ManagementEndpoint;\r
+                       USB_Descriptor_Interface_t               DCI_Interface;\r
+                       USB_Descriptor_Endpoint_t                DataOutEndpoint;\r
+                       USB_Descriptor_Endpoint_t                DataInEndpoint;\r
+               } USB_Descriptor_Configuration_t;\r
+\r
+       /* Function Prototypes: */\r
+               uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
+                                                                                       ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);\r
+\r
+#endif\r
diff --git a/Demos/Device/LowLevel/CDC/Doxygen.conf b/Demos/Device/LowLevel/CDC/Doxygen.conf
new file mode 100644 (file)
index 0000000..3493347
--- /dev/null
@@ -0,0 +1,1485 @@
+# Doxyfile 1.5.7.1\r
+\r
+# This file describes the settings to be used by the documentation system\r
+# doxygen (www.doxygen.org) for a project\r
+#\r
+# All text after a hash (#) is considered a comment and will be ignored\r
+# The format is:\r
+#       TAG = value [value, ...]\r
+# For lists items can also be appended using:\r
+#       TAG += value [value, ...]\r
+# Values that contain spaces should be placed between quotes (" ")\r
+\r
+#---------------------------------------------------------------------------\r
+# Project related configuration options\r
+#---------------------------------------------------------------------------\r
+\r
+# This tag specifies the encoding used for all characters in the config file \r
+# that follow. The default is UTF-8 which is also the encoding used for all \r
+# text before the first occurrence of this tag. Doxygen uses libiconv (or the \r
+# iconv built into libc) for the transcoding. See \r
+# http://www.gnu.org/software/libiconv for the list of possible encodings.\r
+\r
+DOXYFILE_ENCODING      = UTF-8\r
+\r
+# The PROJECT_NAME tag is a single word (or a sequence of words surrounded \r
+# by quotes) that should identify the project.\r
+\r
+PROJECT_NAME           = "LUFA Library - CDC Device Demo"\r
+\r
+# The PROJECT_NUMBER tag can be used to enter a project or revision number. \r
+# This could be handy for archiving the generated documentation or \r
+# if some version control system is used.\r
+\r
+PROJECT_NUMBER         = 0.0.0\r
+\r
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) \r
+# base path where the generated documentation will be put. \r
+# If a relative path is entered, it will be relative to the location \r
+# where doxygen was started. If left blank the current directory will be used.\r
+\r
+OUTPUT_DIRECTORY       = ./Documentation/\r
+\r
+# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create \r
+# 4096 sub-directories (in 2 levels) under the output directory of each output \r
+# format and will distribute the generated files over these directories. \r
+# Enabling this option can be useful when feeding doxygen a huge amount of \r
+# source files, where putting all generated files in the same directory would \r
+# otherwise cause performance problems for the file system.\r
+\r
+CREATE_SUBDIRS         = YES\r
+\r
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all \r
+# documentation generated by doxygen is written. Doxygen will use this \r
+# information to generate all constant output in the proper language. \r
+# The default language is English, other supported languages are: \r
+# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, \r
+# Croatian, Czech, Danish, Dutch, Farsi, Finnish, French, German, Greek, \r
+# Hungarian, Italian, Japanese, Japanese-en (Japanese with English messages), \r
+# Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, Polish, \r
+# Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, Slovene, \r
+# Spanish, Swedish, and Ukrainian.\r
+\r
+OUTPUT_LANGUAGE        = English\r
+\r
+# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will \r
+# include brief member descriptions after the members that are listed in \r
+# the file and class documentation (similar to JavaDoc). \r
+# Set to NO to disable this.\r
+\r
+BRIEF_MEMBER_DESC      = YES\r
+\r
+# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend \r
+# the brief description of a member or function before the detailed description. \r
+# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the \r
+# brief descriptions will be completely suppressed.\r
+\r
+REPEAT_BRIEF           = YES\r
+\r
+# This tag implements a quasi-intelligent brief description abbreviator \r
+# that is used to form the text in various listings. Each string \r
+# in this list, if found as the leading text of the brief description, will be \r
+# stripped from the text and the result after processing the whole list, is \r
+# used as the annotated text. Otherwise, the brief description is used as-is. \r
+# If left blank, the following values are used ("$name" is automatically \r
+# replaced with the name of the entity): "The $name class" "The $name widget" \r
+# "The $name file" "is" "provides" "specifies" "contains" \r
+# "represents" "a" "an" "the"\r
+\r
+ABBREVIATE_BRIEF       = "The $name class" \\r
+                         "The $name widget" \\r
+                         "The $name file" \\r
+                         is \\r
+                         provides \\r
+                         specifies \\r
+                         contains \\r
+                         represents \\r
+                         a \\r
+                         an \\r
+                         the\r
+\r
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then \r
+# Doxygen will generate a detailed section even if there is only a brief \r
+# description.\r
+\r
+ALWAYS_DETAILED_SEC    = NO\r
+\r
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all \r
+# inherited members of a class in the documentation of that class as if those \r
+# members were ordinary class members. Constructors, destructors and assignment \r
+# operators of the base classes will not be shown.\r
+\r
+INLINE_INHERITED_MEMB  = NO\r
+\r
+# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full \r
+# path before files name in the file list and in the header files. If set \r
+# to NO the shortest path that makes the file name unique will be used.\r
+\r
+FULL_PATH_NAMES        = YES\r
+\r
+# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag \r
+# can be used to strip a user-defined part of the path. Stripping is \r
+# only done if one of the specified strings matches the left-hand part of \r
+# the path. The tag can be used to show relative paths in the file list. \r
+# If left blank the directory from which doxygen is run is used as the \r
+# path to strip.\r
+\r
+STRIP_FROM_PATH        = \r
+\r
+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of \r
+# the path mentioned in the documentation of a class, which tells \r
+# the reader which header file to include in order to use a class. \r
+# If left blank only the name of the header file containing the class \r
+# definition is used. Otherwise one should specify the include paths that \r
+# are normally passed to the compiler using the -I flag.\r
+\r
+STRIP_FROM_INC_PATH    = \r
+\r
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter \r
+# (but less readable) file names. This can be useful is your file systems \r
+# doesn't support long names like on DOS, Mac, or CD-ROM.\r
+\r
+SHORT_NAMES            = YES\r
+\r
+# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen \r
+# will interpret the first line (until the first dot) of a JavaDoc-style \r
+# comment as the brief description. If set to NO, the JavaDoc \r
+# comments will behave just like regular Qt-style comments \r
+# (thus requiring an explicit @brief command for a brief description.)\r
+\r
+JAVADOC_AUTOBRIEF      = NO\r
+\r
+# If the QT_AUTOBRIEF tag is set to YES then Doxygen will \r
+# interpret the first line (until the first dot) of a Qt-style \r
+# comment as the brief description. If set to NO, the comments \r
+# will behave just like regular Qt-style comments (thus requiring \r
+# an explicit \brief command for a brief description.)\r
+\r
+QT_AUTOBRIEF           = NO\r
+\r
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen \r
+# treat a multi-line C++ special comment block (i.e. a block of //! or /// \r
+# comments) as a brief description. This used to be the default behaviour. \r
+# The new default is to treat a multi-line C++ comment block as a detailed \r
+# description. Set this tag to YES if you prefer the old behaviour instead.\r
+\r
+MULTILINE_CPP_IS_BRIEF = NO\r
+\r
+# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented \r
+# member inherits the documentation from any documented member that it \r
+# re-implements.\r
+\r
+INHERIT_DOCS           = YES\r
+\r
+# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce \r
+# a new page for each member. If set to NO, the documentation of a member will \r
+# be part of the file/class/namespace that contains it.\r
+\r
+SEPARATE_MEMBER_PAGES  = NO\r
+\r
+# The TAB_SIZE tag can be used to set the number of spaces in a tab. \r
+# Doxygen uses this value to replace tabs by spaces in code fragments.\r
+\r
+TAB_SIZE               = 4\r
+\r
+# This tag can be used to specify a number of aliases that acts \r
+# as commands in the documentation. An alias has the form "name=value". \r
+# For example adding "sideeffect=\par Side Effects:\n" will allow you to \r
+# put the command \sideeffect (or @sideeffect) in the documentation, which \r
+# will result in a user-defined paragraph with heading "Side Effects:". \r
+# You can put \n's in the value part of an alias to insert newlines.\r
+\r
+ALIASES                = \r
+\r
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C \r
+# sources only. Doxygen will then generate output that is more tailored for C. \r
+# For instance, some of the names that are used will be different. The list \r
+# of all members will be omitted, etc.\r
+\r
+OPTIMIZE_OUTPUT_FOR_C  = YES\r
+\r
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java \r
+# sources only. Doxygen will then generate output that is more tailored for \r
+# Java. For instance, namespaces will be presented as packages, qualified \r
+# scopes will look different, etc.\r
+\r
+OPTIMIZE_OUTPUT_JAVA   = NO\r
+\r
+# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran \r
+# sources only. Doxygen will then generate output that is more tailored for \r
+# Fortran.\r
+\r
+OPTIMIZE_FOR_FORTRAN   = NO\r
+\r
+# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL \r
+# sources. Doxygen will then generate output that is tailored for \r
+# VHDL.\r
+\r
+OPTIMIZE_OUTPUT_VHDL   = NO\r
+\r
+# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want \r
+# to include (a tag file for) the STL sources as input, then you should \r
+# set this tag to YES in order to let doxygen match functions declarations and \r
+# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. \r
+# func(std::string) {}). This also make the inheritance and collaboration \r
+# diagrams that involve STL classes more complete and accurate.\r
+\r
+BUILTIN_STL_SUPPORT    = NO\r
+\r
+# If you use Microsoft's C++/CLI language, you should set this option to YES to\r
+# enable parsing support.\r
+\r
+CPP_CLI_SUPPORT        = NO\r
+\r
+# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. \r
+# Doxygen will parse them like normal C++ but will assume all classes use public \r
+# instead of private inheritance when no explicit protection keyword is present.\r
+\r
+SIP_SUPPORT            = NO\r
+\r
+# For Microsoft's IDL there are propget and propput attributes to indicate getter \r
+# and setter methods for a property. Setting this option to YES (the default) \r
+# will make doxygen to replace the get and set methods by a property in the \r
+# documentation. This will only work if the methods are indeed getting or \r
+# setting a simple type. If this is not the case, or you want to show the \r
+# methods anyway, you should set this option to NO.\r
+\r
+IDL_PROPERTY_SUPPORT   = YES\r
+\r
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC \r
+# tag is set to YES, then doxygen will reuse the documentation of the first \r
+# member in the group (if any) for the other members of the group. By default \r
+# all members of a group must be documented explicitly.\r
+\r
+DISTRIBUTE_GROUP_DOC   = NO\r
+\r
+# Set the SUBGROUPING tag to YES (the default) to allow class member groups of \r
+# the same type (for instance a group of public functions) to be put as a \r
+# subgroup of that type (e.g. under the Public Functions section). Set it to \r
+# NO to prevent subgrouping. Alternatively, this can be done per class using \r
+# the \nosubgrouping command.\r
+\r
+SUBGROUPING            = YES\r
+\r
+# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum \r
+# is documented as struct, union, or enum with the name of the typedef. So \r
+# typedef struct TypeS {} TypeT, will appear in the documentation as a struct \r
+# with name TypeT. When disabled the typedef will appear as a member of a file, \r
+# namespace, or class. And the struct will be named TypeS. This can typically \r
+# be useful for C code in case the coding convention dictates that all compound \r
+# types are typedef'ed and only the typedef is referenced, never the tag name.\r
+\r
+TYPEDEF_HIDES_STRUCT   = NO\r
+\r
+# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to \r
+# determine which symbols to keep in memory and which to flush to disk.\r
+# When the cache is full, less often used symbols will be written to disk.\r
+# For small to medium size projects (<1000 input files) the default value is \r
+# probably good enough. For larger projects a too small cache size can cause \r
+# doxygen to be busy swapping symbols to and from disk most of the time \r
+# causing a significant performance penality. \r
+# If the system has enough physical memory increasing the cache will improve the \r
+# performance by keeping more symbols in memory. Note that the value works on \r
+# a logarithmic scale so increasing the size by one will rougly double the \r
+# memory usage. The cache size is given by this formula: \r
+# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, \r
+# corresponding to a cache size of 2^16 = 65536 symbols\r
+\r
+SYMBOL_CACHE_SIZE      = 0\r
+\r
+#---------------------------------------------------------------------------\r
+# Build related configuration options\r
+#---------------------------------------------------------------------------\r
+\r
+# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in \r
+# documentation are documented, even if no documentation was available. \r
+# Private class members and static file members will be hidden unless \r
+# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES\r
+\r
+EXTRACT_ALL            = YES\r
+\r
+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class \r
+# will be included in the documentation.\r
+\r
+EXTRACT_PRIVATE        = YES\r
+\r
+# If the EXTRACT_STATIC tag is set to YES all static members of a file \r
+# will be included in the documentation.\r
+\r
+EXTRACT_STATIC         = YES\r
+\r
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) \r
+# defined locally in source files will be included in the documentation. \r
+# If set to NO only classes defined in header files are included.\r
+\r
+EXTRACT_LOCAL_CLASSES  = YES\r
+\r
+# This flag is only useful for Objective-C code. When set to YES local \r
+# methods, which are defined in the implementation section but not in \r
+# the interface are included in the documentation. \r
+# If set to NO (the default) only methods in the interface are included.\r
+\r
+EXTRACT_LOCAL_METHODS  = NO\r
+\r
+# If this flag is set to YES, the members of anonymous namespaces will be \r
+# extracted and appear in the documentation as a namespace called \r
+# 'anonymous_namespace{file}', where file will be replaced with the base \r
+# name of the file that contains the anonymous namespace. By default \r
+# anonymous namespace are hidden.\r
+\r
+EXTRACT_ANON_NSPACES   = NO\r
+\r
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all \r
+# undocumented members of documented classes, files or namespaces. \r
+# If set to NO (the default) these members will be included in the \r
+# various overviews, but no documentation section is generated. \r
+# This option has no effect if EXTRACT_ALL is enabled.\r
+\r
+HIDE_UNDOC_MEMBERS     = NO\r
+\r
+# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all \r
+# undocumented classes that are normally visible in the class hierarchy. \r
+# If set to NO (the default) these classes will be included in the various \r
+# overviews. This option has no effect if EXTRACT_ALL is enabled.\r
+\r
+HIDE_UNDOC_CLASSES     = NO\r
+\r
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all \r
+# friend (class|struct|union) declarations. \r
+# If set to NO (the default) these declarations will be included in the \r
+# documentation.\r
+\r
+HIDE_FRIEND_COMPOUNDS  = NO\r
+\r
+# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any \r
+# documentation blocks found inside the body of a function. \r
+# If set to NO (the default) these blocks will be appended to the \r
+# function's detailed documentation block.\r
+\r
+HIDE_IN_BODY_DOCS      = NO\r
+\r
+# The INTERNAL_DOCS tag determines if documentation \r
+# that is typed after a \internal command is included. If the tag is set \r
+# to NO (the default) then the documentation will be excluded. \r
+# Set it to YES to include the internal documentation.\r
+\r
+INTERNAL_DOCS          = NO\r
+\r
+# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate \r
+# file names in lower-case letters. If set to YES upper-case letters are also \r
+# allowed. This is useful if you have classes or files whose names only differ \r
+# in case and if your file system supports case sensitive file names. Windows \r
+# and Mac users are advised to set this option to NO.\r
+\r
+CASE_SENSE_NAMES       = NO\r
+\r
+# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen \r
+# will show members with their full class and namespace scopes in the \r
+# documentation. If set to YES the scope will be hidden.\r
+\r
+HIDE_SCOPE_NAMES       = NO\r
+\r
+# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen \r
+# will put a list of the files that are included by a file in the documentation \r
+# of that file.\r
+\r
+SHOW_INCLUDE_FILES     = YES\r
+\r
+# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] \r
+# is inserted in the documentation for inline members.\r
+\r
+INLINE_INFO            = YES\r
+\r
+# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen \r
+# will sort the (detailed) documentation of file and class members \r
+# alphabetically by member name. If set to NO the members will appear in \r
+# declaration order.\r
+\r
+SORT_MEMBER_DOCS       = YES\r
+\r
+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the \r
+# brief documentation of file, namespace and class members alphabetically \r
+# by member name. If set to NO (the default) the members will appear in \r
+# declaration order.\r
+\r
+SORT_BRIEF_DOCS        = NO\r
+\r
+# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the \r
+# hierarchy of group names into alphabetical order. If set to NO (the default) \r
+# the group names will appear in their defined order.\r
+\r
+SORT_GROUP_NAMES       = NO\r
+\r
+# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be \r
+# sorted by fully-qualified names, including namespaces. If set to \r
+# NO (the default), the class list will be sorted only by class name, \r
+# not including the namespace part. \r
+# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.\r
+# Note: This option applies only to the class list, not to the \r
+# alphabetical list.\r
+\r
+SORT_BY_SCOPE_NAME     = NO\r
+\r
+# The GENERATE_TODOLIST tag can be used to enable (YES) or \r
+# disable (NO) the todo list. This list is created by putting \todo \r
+# commands in the documentation.\r
+\r
+GENERATE_TODOLIST      = NO\r
+\r
+# The GENERATE_TESTLIST tag can be used to enable (YES) or \r
+# disable (NO) the test list. This list is created by putting \test \r
+# commands in the documentation.\r
+\r
+GENERATE_TESTLIST      = NO\r
+\r
+# The GENERATE_BUGLIST tag can be used to enable (YES) or \r
+# disable (NO) the bug list. This list is created by putting \bug \r
+# commands in the documentation.\r
+\r
+GENERATE_BUGLIST       = NO\r
+\r
+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or \r
+# disable (NO) the deprecated list. This list is created by putting \r
+# \deprecated commands in the documentation.\r
+\r
+GENERATE_DEPRECATEDLIST= YES\r
+\r
+# The ENABLED_SECTIONS tag can be used to enable conditional \r
+# documentation sections, marked by \if sectionname ... \endif.\r
+\r
+ENABLED_SECTIONS       = \r
+\r
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines \r
+# the initial value of a variable or define consists of for it to appear in \r
+# the documentation. If the initializer consists of more lines than specified \r
+# here it will be hidden. Use a value of 0 to hide initializers completely. \r
+# The appearance of the initializer of individual variables and defines in the \r
+# documentation can be controlled using \showinitializer or \hideinitializer \r
+# command in the documentation regardless of this setting.\r
+\r
+MAX_INITIALIZER_LINES  = 30\r
+\r
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated \r
+# at the bottom of the documentation of classes and structs. If set to YES the \r
+# list will mention the files that were used to generate the documentation.\r
+\r
+SHOW_USED_FILES        = YES\r
+\r
+# If the sources in your project are distributed over multiple directories \r
+# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy \r
+# in the documentation. The default is NO.\r
+\r
+SHOW_DIRECTORIES       = YES\r
+\r
+# Set the SHOW_FILES tag to NO to disable the generation of the Files page.\r
+# This will remove the Files entry from the Quick Index and from the \r
+# Folder Tree View (if specified). The default is YES.\r
+\r
+SHOW_FILES             = YES\r
+\r
+# Set the SHOW_NAMESPACES tag to NO to disable the generation of the \r
+# Namespaces page.  This will remove the Namespaces entry from the Quick Index\r
+# and from the Folder Tree View (if specified). The default is YES.\r
+\r
+SHOW_NAMESPACES        = YES\r
+\r
+# The FILE_VERSION_FILTER tag can be used to specify a program or script that \r
+# doxygen should invoke to get the current version for each file (typically from \r
+# the version control system). Doxygen will invoke the program by executing (via \r
+# popen()) the command <command> <input-file>, where <command> is the value of \r
+# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file \r
+# provided by doxygen. Whatever the program writes to standard output \r
+# is used as the file version. See the manual for examples.\r
+\r
+FILE_VERSION_FILTER    = \r
+\r
+# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by \r
+# doxygen. The layout file controls the global structure of the generated output files \r
+# in an output format independent way. The create the layout file that represents \r
+# doxygen's defaults, run doxygen with the -l option. You can optionally specify a \r
+# file name after the option, if omitted DoxygenLayout.xml will be used as the name \r
+# of the layout file.\r
+\r
+LAYOUT_FILE            = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to warning and progress messages\r
+#---------------------------------------------------------------------------\r
+\r
+# The QUIET tag can be used to turn on/off the messages that are generated \r
+# by doxygen. Possible values are YES and NO. If left blank NO is used.\r
+\r
+QUIET                  = YES\r
+\r
+# The WARNINGS tag can be used to turn on/off the warning messages that are \r
+# generated by doxygen. Possible values are YES and NO. If left blank \r
+# NO is used.\r
+\r
+WARNINGS               = YES\r
+\r
+# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings \r
+# for undocumented members. If EXTRACT_ALL is set to YES then this flag will \r
+# automatically be disabled.\r
+\r
+WARN_IF_UNDOCUMENTED   = YES\r
+\r
+# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for \r
+# potential errors in the documentation, such as not documenting some \r
+# parameters in a documented function, or documenting parameters that \r
+# don't exist or using markup commands wrongly.\r
+\r
+WARN_IF_DOC_ERROR      = YES\r
+\r
+# This WARN_NO_PARAMDOC option can be abled to get warnings for \r
+# functions that are documented, but have no documentation for their parameters \r
+# or return value. If set to NO (the default) doxygen will only warn about \r
+# wrong or incomplete parameter documentation, but not about the absence of \r
+# documentation.\r
+\r
+WARN_NO_PARAMDOC       = YES\r
+\r
+# The WARN_FORMAT tag determines the format of the warning messages that \r
+# doxygen can produce. The string should contain the $file, $line, and $text \r
+# tags, which will be replaced by the file and line number from which the \r
+# warning originated and the warning text. Optionally the format may contain \r
+# $version, which will be replaced by the version of the file (if it could \r
+# be obtained via FILE_VERSION_FILTER)\r
+\r
+WARN_FORMAT            = "$file:$line: $text"\r
+\r
+# The WARN_LOGFILE tag can be used to specify a file to which warning \r
+# and error messages should be written. If left blank the output is written \r
+# to stderr.\r
+\r
+WARN_LOGFILE           = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the input files\r
+#---------------------------------------------------------------------------\r
+\r
+# The INPUT tag can be used to specify the files and/or directories that contain \r
+# documented source files. You may enter file names like "myfile.cpp" or \r
+# directories like "/usr/src/myproject". Separate the files or directories \r
+# with spaces.\r
+\r
+INPUT                  = ./\r
+\r
+# This tag can be used to specify the character encoding of the source files \r
+# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is \r
+# also the default input encoding. Doxygen uses libiconv (or the iconv built \r
+# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for \r
+# the list of possible encodings.\r
+\r
+INPUT_ENCODING         = UTF-8\r
+\r
+# If the value of the INPUT tag contains directories, you can use the \r
+# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \r
+# and *.h) to filter out the source-files in the directories. If left \r
+# blank the following patterns are tested: \r
+# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx \r
+# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90\r
+\r
+FILE_PATTERNS          = *.h \\r
+                         *.c \\r
+                                                *.txt\r
+\r
+# The RECURSIVE tag can be used to turn specify whether or not subdirectories \r
+# should be searched for input files as well. Possible values are YES and NO. \r
+# If left blank NO is used.\r
+\r
+RECURSIVE              = YES\r
+\r
+# The EXCLUDE tag can be used to specify files and/or directories that should \r
+# excluded from the INPUT source files. This way you can easily exclude a \r
+# subdirectory from a directory tree whose root is specified with the INPUT tag.\r
+\r
+EXCLUDE                = \r
+\r
+# The EXCLUDE_SYMLINKS tag can be used select whether or not files or \r
+# directories that are symbolic links (a Unix filesystem feature) are excluded \r
+# from the input.\r
+\r
+EXCLUDE_SYMLINKS       = NO\r
+\r
+# If the value of the INPUT tag contains directories, you can use the \r
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude \r
+# certain files from those directories. Note that the wildcards are matched \r
+# against the file with absolute path, so to exclude all test directories \r
+# for example use the pattern */test/*\r
+\r
+EXCLUDE_PATTERNS       = */LowLevel/USBMode.h\r
+\r
+# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names \r
+# (namespaces, classes, functions, etc.) that should be excluded from the \r
+# output. The symbol name can be a fully qualified name, a word, or if the \r
+# wildcard * is used, a substring. Examples: ANamespace, AClass, \r
+# AClass::ANamespace, ANamespace::*Test\r
+\r
+EXCLUDE_SYMBOLS        = __*\r
+\r
+# The EXAMPLE_PATH tag can be used to specify one or more files or \r
+# directories that contain example code fragments that are included (see \r
+# the \include command).\r
+\r
+EXAMPLE_PATH           = \r
+\r
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the \r
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \r
+# and *.h) to filter out the source-files in the directories. If left \r
+# blank all files are included.\r
+\r
+EXAMPLE_PATTERNS       = *\r
+\r
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be \r
+# searched for input files to be used with the \include or \dontinclude \r
+# commands irrespective of the value of the RECURSIVE tag. \r
+# Possible values are YES and NO. If left blank NO is used.\r
+\r
+EXAMPLE_RECURSIVE      = NO\r
+\r
+# The IMAGE_PATH tag can be used to specify one or more files or \r
+# directories that contain image that are included in the documentation (see \r
+# the \image command).\r
+\r
+IMAGE_PATH             = \r
+\r
+# The INPUT_FILTER tag can be used to specify a program that doxygen should \r
+# invoke to filter for each input file. Doxygen will invoke the filter program \r
+# by executing (via popen()) the command <filter> <input-file>, where <filter> \r
+# is the value of the INPUT_FILTER tag, and <input-file> is the name of an \r
+# input file. Doxygen will then use the output that the filter program writes \r
+# to standard output.  If FILTER_PATTERNS is specified, this tag will be \r
+# ignored.\r
+\r
+INPUT_FILTER           = \r
+\r
+# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern \r
+# basis.  Doxygen will compare the file name with each pattern and apply the \r
+# filter if there is a match.  The filters are a list of the form: \r
+# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further \r
+# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER \r
+# is applied to all files.\r
+\r
+FILTER_PATTERNS        = \r
+\r
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using \r
+# INPUT_FILTER) will be used to filter the input files when producing source \r
+# files to browse (i.e. when SOURCE_BROWSER is set to YES).\r
+\r
+FILTER_SOURCE_FILES    = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to source browsing\r
+#---------------------------------------------------------------------------\r
+\r
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will \r
+# be generated. Documented entities will be cross-referenced with these sources. \r
+# Note: To get rid of all source code in the generated output, make sure also \r
+# VERBATIM_HEADERS is set to NO.\r
+\r
+SOURCE_BROWSER         = NO\r
+\r
+# Setting the INLINE_SOURCES tag to YES will include the body \r
+# of functions and classes directly in the documentation.\r
+\r
+INLINE_SOURCES         = NO\r
+\r
+# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct \r
+# doxygen to hide any special comment blocks from generated source code \r
+# fragments. Normal C and C++ comments will always remain visible.\r
+\r
+STRIP_CODE_COMMENTS    = YES\r
+\r
+# If the REFERENCED_BY_RELATION tag is set to YES \r
+# then for each documented function all documented \r
+# functions referencing it will be listed.\r
+\r
+REFERENCED_BY_RELATION = NO\r
+\r
+# If the REFERENCES_RELATION tag is set to YES \r
+# then for each documented function all documented entities \r
+# called/used by that function will be listed.\r
+\r
+REFERENCES_RELATION    = NO\r
+\r
+# If the REFERENCES_LINK_SOURCE tag is set to YES (the default)\r
+# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from\r
+# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will\r
+# link to the source code.  Otherwise they will link to the documentstion.\r
+\r
+REFERENCES_LINK_SOURCE = NO\r
+\r
+# If the USE_HTAGS tag is set to YES then the references to source code \r
+# will point to the HTML generated by the htags(1) tool instead of doxygen \r
+# built-in source browser. The htags tool is part of GNU's global source \r
+# tagging system (see http://www.gnu.org/software/global/global.html). You \r
+# will need version 4.8.6 or higher.\r
+\r
+USE_HTAGS              = NO\r
+\r
+# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen \r
+# will generate a verbatim copy of the header file for each class for \r
+# which an include is specified. Set to NO to disable this.\r
+\r
+VERBATIM_HEADERS       = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the alphabetical class index\r
+#---------------------------------------------------------------------------\r
+\r
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index \r
+# of all compounds will be generated. Enable this if the project \r
+# contains a lot of classes, structs, unions or interfaces.\r
+\r
+ALPHABETICAL_INDEX     = YES\r
+\r
+# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then \r
+# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns \r
+# in which this list will be split (can be a number in the range [1..20])\r
+\r
+COLS_IN_ALPHA_INDEX    = 5\r
+\r
+# In case all classes in a project start with a common prefix, all \r
+# classes will be put under the same header in the alphabetical index. \r
+# The IGNORE_PREFIX tag can be used to specify one or more prefixes that \r
+# should be ignored while generating the index headers.\r
+\r
+IGNORE_PREFIX          = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the HTML output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_HTML tag is set to YES (the default) Doxygen will \r
+# generate HTML output.\r
+\r
+GENERATE_HTML          = YES\r
+\r
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `html' will be used as the default path.\r
+\r
+HTML_OUTPUT            = html\r
+\r
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for \r
+# each generated HTML page (for example: .htm,.php,.asp). If it is left blank \r
+# doxygen will generate files with .html extension.\r
+\r
+HTML_FILE_EXTENSION    = .html\r
+\r
+# The HTML_HEADER tag can be used to specify a personal HTML header for \r
+# each generated HTML page. If it is left blank doxygen will generate a \r
+# standard header.\r
+\r
+HTML_HEADER            = \r
+\r
+# The HTML_FOOTER tag can be used to specify a personal HTML footer for \r
+# each generated HTML page. If it is left blank doxygen will generate a \r
+# standard footer.\r
+\r
+HTML_FOOTER            = \r
+\r
+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading \r
+# style sheet that is used by each HTML page. It can be used to \r
+# fine-tune the look of the HTML output. If the tag is left blank doxygen \r
+# will generate a default style sheet. Note that doxygen will try to copy \r
+# the style sheet file to the HTML output directory, so don't put your own \r
+# stylesheet in the HTML output directory as well, or it will be erased!\r
+\r
+HTML_STYLESHEET        = \r
+\r
+# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, \r
+# files or namespaces will be aligned in HTML using tables. If set to \r
+# NO a bullet list will be used.\r
+\r
+HTML_ALIGN_MEMBERS     = YES\r
+\r
+# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML \r
+# documentation will contain sections that can be hidden and shown after the \r
+# page has loaded. For this to work a browser that supports \r
+# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox \r
+# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari).\r
+\r
+HTML_DYNAMIC_SECTIONS  = YES\r
+\r
+# If the GENERATE_DOCSET tag is set to YES, additional index files \r
+# will be generated that can be used as input for Apple's Xcode 3 \r
+# integrated development environment, introduced with OSX 10.5 (Leopard). \r
+# To create a documentation set, doxygen will generate a Makefile in the \r
+# HTML output directory. Running make will produce the docset in that \r
+# directory and running "make install" will install the docset in \r
+# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find \r
+# it at startup. \r
+# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information.\r
+\r
+GENERATE_DOCSET        = NO\r
+\r
+# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the \r
+# feed. A documentation feed provides an umbrella under which multiple \r
+# documentation sets from a single provider (such as a company or product suite) \r
+# can be grouped.\r
+\r
+DOCSET_FEEDNAME        = "Doxygen generated docs"\r
+\r
+# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that \r
+# should uniquely identify the documentation set bundle. This should be a \r
+# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen \r
+# will append .docset to the name.\r
+\r
+DOCSET_BUNDLE_ID       = org.doxygen.Project\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, additional index files \r
+# will be generated that can be used as input for tools like the \r
+# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) \r
+# of the generated HTML documentation.\r
+\r
+GENERATE_HTMLHELP      = NO\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can \r
+# be used to specify the file name of the resulting .chm file. You \r
+# can add a path in front of the file if the result should not be \r
+# written to the html output directory.\r
+\r
+CHM_FILE               = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can \r
+# be used to specify the location (absolute path including file name) of \r
+# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run \r
+# the HTML help compiler on the generated index.hhp.\r
+\r
+HHC_LOCATION           = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag \r
+# controls if a separate .chi index file is generated (YES) or that \r
+# it should be included in the master .chm file (NO).\r
+\r
+GENERATE_CHI           = NO\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING\r
+# is used to encode HtmlHelp index (hhk), content (hhc) and project file\r
+# content.\r
+\r
+CHM_INDEX_ENCODING     = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag \r
+# controls whether a binary table of contents is generated (YES) or a \r
+# normal table of contents (NO) in the .chm file.\r
+\r
+BINARY_TOC             = NO\r
+\r
+# The TOC_EXPAND flag can be set to YES to add extra items for group members \r
+# to the contents of the HTML help documentation and to the tree view.\r
+\r
+TOC_EXPAND             = YES\r
+\r
+# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER \r
+# are set, an additional index file will be generated that can be used as input for \r
+# Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated \r
+# HTML documentation.\r
+\r
+GENERATE_QHP           = NO\r
+\r
+# If the QHG_LOCATION tag is specified, the QCH_FILE tag can \r
+# be used to specify the file name of the resulting .qch file. \r
+# The path specified is relative to the HTML output folder.\r
+\r
+QCH_FILE               = \r
+\r
+# The QHP_NAMESPACE tag specifies the namespace to use when generating \r
+# Qt Help Project output. For more information please see \r
+# <a href="http://doc.trolltech.com/qthelpproject.html#namespace">Qt Help Project / Namespace</a>.\r
+\r
+QHP_NAMESPACE          = org.doxygen.Project\r
+\r
+# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating \r
+# Qt Help Project output. For more information please see \r
+# <a href="http://doc.trolltech.com/qthelpproject.html#virtual-folders">Qt Help Project / Virtual Folders</a>.\r
+\r
+QHP_VIRTUAL_FOLDER     = doc\r
+\r
+# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can \r
+# be used to specify the location of Qt's qhelpgenerator. \r
+# If non-empty doxygen will try to run qhelpgenerator on the generated \r
+# .qhp file .\r
+\r
+QHG_LOCATION           = \r
+\r
+# The DISABLE_INDEX tag can be used to turn on/off the condensed index at \r
+# top of each HTML page. The value NO (the default) enables the index and \r
+# the value YES disables it.\r
+\r
+DISABLE_INDEX          = NO\r
+\r
+# This tag can be used to set the number of enum values (range [1..20]) \r
+# that doxygen will group on one line in the generated HTML documentation.\r
+\r
+ENUM_VALUES_PER_LINE   = 1\r
+\r
+# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index\r
+# structure should be generated to display hierarchical information.\r
+# If the tag value is set to FRAME, a side panel will be generated\r
+# containing a tree-like index structure (just like the one that \r
+# is generated for HTML Help). For this to work a browser that supports \r
+# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, \r
+# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are \r
+# probably better off using the HTML help feature. Other possible values \r
+# for this tag are: HIERARCHIES, which will generate the Groups, Directories,\r
+# and Class Hierarchy pages using a tree view instead of an ordered list;\r
+# ALL, which combines the behavior of FRAME and HIERARCHIES; and NONE, which\r
+# disables this behavior completely. For backwards compatibility with previous\r
+# releases of Doxygen, the values YES and NO are equivalent to FRAME and NONE\r
+# respectively.\r
+\r
+GENERATE_TREEVIEW      = YES\r
+\r
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be \r
+# used to set the initial width (in pixels) of the frame in which the tree \r
+# is shown.\r
+\r
+TREEVIEW_WIDTH         = 250\r
+\r
+# Use this tag to change the font size of Latex formulas included \r
+# as images in the HTML documentation. The default is 10. Note that \r
+# when you change the font size after a successful doxygen run you need \r
+# to manually remove any form_*.png images from the HTML output directory \r
+# to force them to be regenerated.\r
+\r
+FORMULA_FONTSIZE       = 10\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the LaTeX output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will \r
+# generate Latex output.\r
+\r
+GENERATE_LATEX         = NO\r
+\r
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `latex' will be used as the default path.\r
+\r
+LATEX_OUTPUT           = latex\r
+\r
+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be \r
+# invoked. If left blank `latex' will be used as the default command name.\r
+\r
+LATEX_CMD_NAME         = latex\r
+\r
+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to \r
+# generate index for LaTeX. If left blank `makeindex' will be used as the \r
+# default command name.\r
+\r
+MAKEINDEX_CMD_NAME     = makeindex\r
+\r
+# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact \r
+# LaTeX documents. This may be useful for small projects and may help to \r
+# save some trees in general.\r
+\r
+COMPACT_LATEX          = NO\r
+\r
+# The PAPER_TYPE tag can be used to set the paper type that is used \r
+# by the printer. Possible values are: a4, a4wide, letter, legal and \r
+# executive. If left blank a4wide will be used.\r
+\r
+PAPER_TYPE             = a4wide\r
+\r
+# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX \r
+# packages that should be included in the LaTeX output.\r
+\r
+EXTRA_PACKAGES         = \r
+\r
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for \r
+# the generated latex document. The header should contain everything until \r
+# the first chapter. If it is left blank doxygen will generate a \r
+# standard header. Notice: only use this tag if you know what you are doing!\r
+\r
+LATEX_HEADER           = \r
+\r
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated \r
+# is prepared for conversion to pdf (using ps2pdf). The pdf file will \r
+# contain links (just like the HTML output) instead of page references \r
+# This makes the output suitable for online browsing using a pdf viewer.\r
+\r
+PDF_HYPERLINKS         = YES\r
+\r
+# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of \r
+# plain latex in the generated Makefile. Set this option to YES to get a \r
+# higher quality PDF documentation.\r
+\r
+USE_PDFLATEX           = YES\r
+\r
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. \r
+# command to the generated LaTeX files. This will instruct LaTeX to keep \r
+# running if errors occur, instead of asking the user for help. \r
+# This option is also used when generating formulas in HTML.\r
+\r
+LATEX_BATCHMODE        = NO\r
+\r
+# If LATEX_HIDE_INDICES is set to YES then doxygen will not \r
+# include the index chapters (such as File Index, Compound Index, etc.) \r
+# in the output.\r
+\r
+LATEX_HIDE_INDICES     = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the RTF output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output \r
+# The RTF output is optimized for Word 97 and may not look very pretty with \r
+# other RTF readers or editors.\r
+\r
+GENERATE_RTF           = NO\r
+\r
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `rtf' will be used as the default path.\r
+\r
+RTF_OUTPUT             = rtf\r
+\r
+# If the COMPACT_RTF tag is set to YES Doxygen generates more compact \r
+# RTF documents. This may be useful for small projects and may help to \r
+# save some trees in general.\r
+\r
+COMPACT_RTF            = NO\r
+\r
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated \r
+# will contain hyperlink fields. The RTF file will \r
+# contain links (just like the HTML output) instead of page references. \r
+# This makes the output suitable for online browsing using WORD or other \r
+# programs which support those fields. \r
+# Note: wordpad (write) and others do not support links.\r
+\r
+RTF_HYPERLINKS         = NO\r
+\r
+# Load stylesheet definitions from file. Syntax is similar to doxygen's \r
+# config file, i.e. a series of assignments. You only have to provide \r
+# replacements, missing definitions are set to their default value.\r
+\r
+RTF_STYLESHEET_FILE    = \r
+\r
+# Set optional variables used in the generation of an rtf document. \r
+# Syntax is similar to doxygen's config file.\r
+\r
+RTF_EXTENSIONS_FILE    = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the man page output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_MAN tag is set to YES (the default) Doxygen will \r
+# generate man pages\r
+\r
+GENERATE_MAN           = NO\r
+\r
+# The MAN_OUTPUT tag is used to specify where the man pages will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `man' will be used as the default path.\r
+\r
+MAN_OUTPUT             = man\r
+\r
+# The MAN_EXTENSION tag determines the extension that is added to \r
+# the generated man pages (default is the subroutine's section .3)\r
+\r
+MAN_EXTENSION          = .3\r
+\r
+# If the MAN_LINKS tag is set to YES and Doxygen generates man output, \r
+# then it will generate one additional man file for each entity \r
+# documented in the real man page(s). These additional files \r
+# only source the real man page, but without them the man command \r
+# would be unable to find the correct page. The default is NO.\r
+\r
+MAN_LINKS              = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the XML output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_XML tag is set to YES Doxygen will \r
+# generate an XML file that captures the structure of \r
+# the code including all documentation.\r
+\r
+GENERATE_XML           = NO\r
+\r
+# The XML_OUTPUT tag is used to specify where the XML pages will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `xml' will be used as the default path.\r
+\r
+XML_OUTPUT             = xml\r
+\r
+# The XML_SCHEMA tag can be used to specify an XML schema, \r
+# which can be used by a validating XML parser to check the \r
+# syntax of the XML files.\r
+\r
+XML_SCHEMA             = \r
+\r
+# The XML_DTD tag can be used to specify an XML DTD, \r
+# which can be used by a validating XML parser to check the \r
+# syntax of the XML files.\r
+\r
+XML_DTD                = \r
+\r
+# If the XML_PROGRAMLISTING tag is set to YES Doxygen will \r
+# dump the program listings (including syntax highlighting \r
+# and cross-referencing information) to the XML output. Note that \r
+# enabling this will significantly increase the size of the XML output.\r
+\r
+XML_PROGRAMLISTING     = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options for the AutoGen Definitions output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will \r
+# generate an AutoGen Definitions (see autogen.sf.net) file \r
+# that captures the structure of the code including all \r
+# documentation. Note that this feature is still experimental \r
+# and incomplete at the moment.\r
+\r
+GENERATE_AUTOGEN_DEF   = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the Perl module output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_PERLMOD tag is set to YES Doxygen will \r
+# generate a Perl module file that captures the structure of \r
+# the code including all documentation. Note that this \r
+# feature is still experimental and incomplete at the \r
+# moment.\r
+\r
+GENERATE_PERLMOD       = NO\r
+\r
+# If the PERLMOD_LATEX tag is set to YES Doxygen will generate \r
+# the necessary Makefile rules, Perl scripts and LaTeX code to be able \r
+# to generate PDF and DVI output from the Perl module output.\r
+\r
+PERLMOD_LATEX          = NO\r
+\r
+# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be \r
+# nicely formatted so it can be parsed by a human reader.  This is useful \r
+# if you want to understand what is going on.  On the other hand, if this \r
+# tag is set to NO the size of the Perl module output will be much smaller \r
+# and Perl will parse it just the same.\r
+\r
+PERLMOD_PRETTY         = YES\r
+\r
+# The names of the make variables in the generated doxyrules.make file \r
+# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. \r
+# This is useful so different doxyrules.make files included by the same \r
+# Makefile don't overwrite each other's variables.\r
+\r
+PERLMOD_MAKEVAR_PREFIX = \r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration options related to the preprocessor   \r
+#---------------------------------------------------------------------------\r
+\r
+# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will \r
+# evaluate all C-preprocessor directives found in the sources and include \r
+# files.\r
+\r
+ENABLE_PREPROCESSING   = YES\r
+\r
+# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro \r
+# names in the source code. If set to NO (the default) only conditional \r
+# compilation will be performed. Macro expansion can be done in a controlled \r
+# way by setting EXPAND_ONLY_PREDEF to YES.\r
+\r
+MACRO_EXPANSION        = YES\r
+\r
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES \r
+# then the macro expansion is limited to the macros specified with the \r
+# PREDEFINED and EXPAND_AS_DEFINED tags.\r
+\r
+EXPAND_ONLY_PREDEF     = YES\r
+\r
+# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files \r
+# in the INCLUDE_PATH (see below) will be search if a #include is found.\r
+\r
+SEARCH_INCLUDES        = YES\r
+\r
+# The INCLUDE_PATH tag can be used to specify one or more directories that \r
+# contain include files that are not input files but should be processed by \r
+# the preprocessor.\r
+\r
+INCLUDE_PATH           = \r
+\r
+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard \r
+# patterns (like *.h and *.hpp) to filter out the header-files in the \r
+# directories. If left blank, the patterns specified with FILE_PATTERNS will \r
+# be used.\r
+\r
+INCLUDE_FILE_PATTERNS  = \r
+\r
+# The PREDEFINED tag can be used to specify one or more macro names that \r
+# are defined before the preprocessor is started (similar to the -D option of \r
+# gcc). The argument of the tag is a list of macros of the form: name \r
+# or name=definition (no spaces). If the definition and the = are \r
+# omitted =1 is assumed. To prevent a macro definition from being \r
+# undefined via #undef or recursively expanded use the := operator \r
+# instead of the = operator.\r
+\r
+PREDEFINED             = __DOXYGEN__\r
+\r
+# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then \r
+# this tag can be used to specify a list of macro names that should be expanded. \r
+# The macro definition that is found in the sources will be used. \r
+# Use the PREDEFINED tag if you want to use a different macro definition.\r
+\r
+EXPAND_AS_DEFINED      = BUTTLOADTAG\r
+\r
+# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then \r
+# doxygen's preprocessor will remove all function-like macros that are alone \r
+# on a line, have an all uppercase name, and do not end with a semicolon. Such \r
+# function macros are typically used for boiler-plate code, and will confuse \r
+# the parser if not removed.\r
+\r
+SKIP_FUNCTION_MACROS   = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration::additions related to external references   \r
+#---------------------------------------------------------------------------\r
+\r
+# The TAGFILES option can be used to specify one or more tagfiles. \r
+# Optionally an initial location of the external documentation \r
+# can be added for each tagfile. The format of a tag file without \r
+# this location is as follows: \r
+#   TAGFILES = file1 file2 ... \r
+# Adding location for the tag files is done as follows: \r
+#   TAGFILES = file1=loc1 "file2 = loc2" ... \r
+# where "loc1" and "loc2" can be relative or absolute paths or \r
+# URLs. If a location is present for each tag, the installdox tool \r
+# does not have to be run to correct the links.\r
+# Note that each tag file must have a unique name\r
+# (where the name does NOT include the path)\r
+# If a tag file is not located in the directory in which doxygen \r
+# is run, you must also specify the path to the tagfile here.\r
+\r
+TAGFILES               = \r
+\r
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create \r
+# a tag file that is based on the input files it reads.\r
+\r
+GENERATE_TAGFILE       = \r
+\r
+# If the ALLEXTERNALS tag is set to YES all external classes will be listed \r
+# in the class index. If set to NO only the inherited external classes \r
+# will be listed.\r
+\r
+ALLEXTERNALS           = NO\r
+\r
+# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed \r
+# in the modules index. If set to NO, only the current project's groups will \r
+# be listed.\r
+\r
+EXTERNAL_GROUPS        = YES\r
+\r
+# The PERL_PATH should be the absolute path and name of the perl script \r
+# interpreter (i.e. the result of `which perl').\r
+\r
+PERL_PATH              = /usr/bin/perl\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration options related to the dot tool   \r
+#---------------------------------------------------------------------------\r
+\r
+# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will \r
+# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base \r
+# or super classes. Setting the tag to NO turns the diagrams off. Note that \r
+# this option is superseded by the HAVE_DOT option below. This is only a \r
+# fallback. It is recommended to install and use dot, since it yields more \r
+# powerful graphs.\r
+\r
+CLASS_DIAGRAMS         = NO\r
+\r
+# You can define message sequence charts within doxygen comments using the \msc \r
+# command. Doxygen will then run the mscgen tool (see \r
+# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the \r
+# documentation. The MSCGEN_PATH tag allows you to specify the directory where \r
+# the mscgen tool resides. If left empty the tool is assumed to be found in the \r
+# default search path.\r
+\r
+MSCGEN_PATH            = \r
+\r
+# If set to YES, the inheritance and collaboration graphs will hide \r
+# inheritance and usage relations if the target is undocumented \r
+# or is not a class.\r
+\r
+HIDE_UNDOC_RELATIONS   = YES\r
+\r
+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is \r
+# available from the path. This tool is part of Graphviz, a graph visualization \r
+# toolkit from AT&T and Lucent Bell Labs. The other options in this section \r
+# have no effect if this option is set to NO (the default)\r
+\r
+HAVE_DOT               = NO\r
+\r
+# By default doxygen will write a font called FreeSans.ttf to the output \r
+# directory and reference it in all dot files that doxygen generates. This \r
+# font does not include all possible unicode characters however, so when you need \r
+# these (or just want a differently looking font) you can specify the font name \r
+# using DOT_FONTNAME. You need need to make sure dot is able to find the font, \r
+# which can be done by putting it in a standard location or by setting the \r
+# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory \r
+# containing the font.\r
+\r
+DOT_FONTNAME           = FreeSans\r
+\r
+# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. \r
+# The default size is 10pt.\r
+\r
+DOT_FONTSIZE           = 10\r
+\r
+# By default doxygen will tell dot to use the output directory to look for the \r
+# FreeSans.ttf font (which doxygen will put there itself). If you specify a \r
+# different font using DOT_FONTNAME you can set the path where dot \r
+# can find it using this tag.\r
+\r
+DOT_FONTPATH           = \r
+\r
+# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for each documented class showing the direct and \r
+# indirect inheritance relations. Setting this tag to YES will force the \r
+# the CLASS_DIAGRAMS tag to NO.\r
+\r
+CLASS_GRAPH            = NO\r
+\r
+# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for each documented class showing the direct and \r
+# indirect implementation dependencies (inheritance, containment, and \r
+# class references variables) of the class with other documented classes.\r
+\r
+COLLABORATION_GRAPH    = NO\r
+\r
+# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for groups, showing the direct groups dependencies\r
+\r
+GROUP_GRAPHS           = NO\r
+\r
+# If the UML_LOOK tag is set to YES doxygen will generate inheritance and \r
+# collaboration diagrams in a style similar to the OMG's Unified Modeling \r
+# Language.\r
+\r
+UML_LOOK               = NO\r
+\r
+# If set to YES, the inheritance and collaboration graphs will show the \r
+# relations between templates and their instances.\r
+\r
+TEMPLATE_RELATIONS     = NO\r
+\r
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT \r
+# tags are set to YES then doxygen will generate a graph for each documented \r
+# file showing the direct and indirect include dependencies of the file with \r
+# other documented files.\r
+\r
+INCLUDE_GRAPH          = NO\r
+\r
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and \r
+# HAVE_DOT tags are set to YES then doxygen will generate a graph for each \r
+# documented header file showing the documented files that directly or \r
+# indirectly include this file.\r
+\r
+INCLUDED_BY_GRAPH      = NO\r
+\r
+# If the CALL_GRAPH and HAVE_DOT options are set to YES then \r
+# doxygen will generate a call dependency graph for every global function \r
+# or class method. Note that enabling this option will significantly increase \r
+# the time of a run. So in most cases it will be better to enable call graphs \r
+# for selected functions only using the \callgraph command.\r
+\r
+CALL_GRAPH             = NO\r
+\r
+# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then \r
+# doxygen will generate a caller dependency graph for every global function \r
+# or class method. Note that enabling this option will significantly increase \r
+# the time of a run. So in most cases it will be better to enable caller \r
+# graphs for selected functions only using the \callergraph command.\r
+\r
+CALLER_GRAPH           = NO\r
+\r
+# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen \r
+# will graphical hierarchy of all classes instead of a textual one.\r
+\r
+GRAPHICAL_HIERARCHY    = NO\r
+\r
+# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES \r
+# then doxygen will show the dependencies a directory has on other directories \r
+# in a graphical way. The dependency relations are determined by the #include\r
+# relations between the files in the directories.\r
+\r
+DIRECTORY_GRAPH        = NO\r
+\r
+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images \r
+# generated by dot. Possible values are png, jpg, or gif\r
+# If left blank png will be used.\r
+\r
+DOT_IMAGE_FORMAT       = png\r
+\r
+# The tag DOT_PATH can be used to specify the path where the dot tool can be \r
+# found. If left blank, it is assumed the dot tool can be found in the path.\r
+\r
+DOT_PATH               = "C:/Program Files/Graphviz2.18/bin"\r
+\r
+# The DOTFILE_DIRS tag can be used to specify one or more directories that \r
+# contain dot files that are included in the documentation (see the \r
+# \dotfile command).\r
+\r
+DOTFILE_DIRS           = \r
+\r
+# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of \r
+# nodes that will be shown in the graph. If the number of nodes in a graph \r
+# becomes larger than this value, doxygen will truncate the graph, which is \r
+# visualized by representing a node as a red box. Note that doxygen if the \r
+# number of direct children of the root node in a graph is already larger than \r
+# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note \r
+# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.\r
+\r
+DOT_GRAPH_MAX_NODES    = 15\r
+\r
+# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the \r
+# graphs generated by dot. A depth value of 3 means that only nodes reachable \r
+# from the root by following a path via at most 3 edges will be shown. Nodes \r
+# that lay further from the root node will be omitted. Note that setting this \r
+# option to 1 or 2 may greatly reduce the computation time needed for large \r
+# code bases. Also note that the size of a graph can be further restricted by \r
+# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.\r
+\r
+MAX_DOT_GRAPH_DEPTH    = 2\r
+\r
+# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent \r
+# background. This is disabled by default, because dot on Windows does not \r
+# seem to support this out of the box. Warning: Depending on the platform used, \r
+# enabling this option may lead to badly anti-aliased labels on the edges of \r
+# a graph (i.e. they become hard to read).\r
+\r
+DOT_TRANSPARENT        = YES\r
+\r
+# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output \r
+# files in one run (i.e. multiple -o and -T options on the command line). This \r
+# makes dot run faster, but since only newer versions of dot (>1.8.10) \r
+# support this, this feature is disabled by default.\r
+\r
+DOT_MULTI_TARGETS      = NO\r
+\r
+# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will \r
+# generate a legend page explaining the meaning of the various boxes and \r
+# arrows in the dot generated graphs.\r
+\r
+GENERATE_LEGEND        = YES\r
+\r
+# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will \r
+# remove the intermediate dot files that are used to generate \r
+# the various graphs.\r
+\r
+DOT_CLEANUP            = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration::additions related to the search engine   \r
+#---------------------------------------------------------------------------\r
+\r
+# The SEARCHENGINE tag specifies whether or not a search engine should be \r
+# used. If set to NO the values of all tags below this one will be ignored.\r
+\r
+SEARCHENGINE           = NO\r
diff --git a/Demos/Device/LowLevel/CDC/LUFA CDC.inf b/Demos/Device/LowLevel/CDC/LUFA CDC.inf
new file mode 100644 (file)
index 0000000..d9d9ed6
--- /dev/null
@@ -0,0 +1,55 @@
+;       Windows LUFA CDC Setup File\r
+; Copyright (c) 2000 Microsoft Corporation\r
+\r
+[Version] \r
+Signature="$Windows NT$" \r
+Class=Ports\r
+ClassGuid={4D36E978-E325-11CE-BFC1-08002BE10318} \r
+Provider=%COMPANY% \r
+LayoutFile=layout.inf\r
+DriverVer=06/06/2006,1.0.0.0\r
+\r
+[Manufacturer] \r
+%MFGNAME% = ManufName\r
+\r
+[DestinationDirs] \r
+DefaultDestDir=12 \r
+\r
+[ManufName] \r
+%Modem3% = Modem3, USB\VID_03EB&PID_2044\r
+\r
+;------------------------------------------------------------------------------\r
+;  Windows 2000/XP Sections\r
+;------------------------------------------------------------------------------\r
+\r
+[Modem3.nt]\r
+CopyFiles=USBModemCopyFileSection\r
+AddReg=Modem3.nt.AddReg \r
+\r
+[USBModemCopyFileSection]\r
+usbser.sys,,,0x20\r
+\r
+[Modem3.nt.AddReg] \r
+HKR,,DevLoader,,*ntkern \r
+HKR,,NTMPDriver,,usbser.sys \r
+HKR,,EnumPropPages32,,"MsPorts.dll,SerialPortPropPageProvider" \r
+\r
+[Modem3.nt.Services] \r
+AddService=usbser, 0x00000002, DriverService\r
+\r
+[DriverService] \r
+DisplayName=%SERVICE%\r
+ServiceType=1\r
+StartType=3\r
+ErrorControl=1\r
+ServiceBinary=%12%\usbser.sys \r
+\r
+;------------------------------------------------------------------------------\r
+;  String Definitions\r
+;------------------------------------------------------------------------------\r
+\r
+[Strings] \r
+COMPANY="LUFA Library"\r
+MFGNAME="Dean Camera"\r
+Modem3="USB Virtual Serial Port" \r
+SERVICE="USB Virtual Serial Port CDC Driver"
\ No newline at end of file
diff --git a/Demos/Device/LowLevel/CDC/makefile b/Demos/Device/LowLevel/CDC/makefile
new file mode 100644 (file)
index 0000000..bc22be5
--- /dev/null
@@ -0,0 +1,734 @@
+# Hey Emacs, this is a -*- makefile -*-\r
+#----------------------------------------------------------------------------\r
+# WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al.\r
+#  >> Modified for use with the LUFA project. <<\r
+#\r
+# Released to the Public Domain\r
+#\r
+# Additional material for this makefile was written by:\r
+# Peter Fleury\r
+# Tim Henigan\r
+# Colin O'Flynn\r
+# Reiner Patommel\r
+# Markus Pfaff\r
+# Sander Pool\r
+# Frederik Rouleau\r
+# Carlos Lamas\r
+# Dean Camera\r
+# Opendous Inc.\r
+# Denver Gingerich\r
+#\r
+#----------------------------------------------------------------------------\r
+# On command line:\r
+#\r
+# make all = Make software.\r
+#\r
+# make clean = Clean out built project files.\r
+#\r
+# make coff = Convert ELF to AVR COFF.\r
+#\r
+# make extcoff = Convert ELF to AVR Extended COFF.\r
+#\r
+# make program = Download the hex file to the device, using avrdude.\r
+#                Please customize the avrdude settings below first!\r
+#\r
+# make dfu = Download the hex file to the device, using dfu-programmer (must\r
+#            have dfu-programmer installed).\r
+#\r
+# make flip = Download the hex file to the device, using Atmel FLIP (must\r
+#             have Atmel FLIP installed).\r
+#\r
+# make dfu-ee = Download the eeprom file to the device, using dfu-programmer\r
+#               (must have dfu-programmer installed).\r
+#\r
+# make flip-ee = Download the eeprom file to the device, using Atmel FLIP\r
+#                (must have Atmel FLIP installed).\r
+#\r
+# make doxygen = Generate DoxyGen documentation for the project (must have\r
+#                DoxyGen installed)\r
+#\r
+# make debug = Start either simulavr or avarice as specified for debugging, \r
+#              with avr-gdb or avr-insight as the front end for debugging.\r
+#\r
+# make filename.s = Just compile filename.c into the assembler code only.\r
+#\r
+# make filename.i = Create a preprocessed source file for use in submitting\r
+#                   bug reports to the GCC project.\r
+#\r
+# To rebuild project do "make clean" then "make all".\r
+#----------------------------------------------------------------------------\r
+\r
+\r
+# MCU name\r
+MCU = at90usb1287\r
+\r
+\r
+# Target board (see library "Board Types" documentation, USER or blank for projects not requiring\r
+# LUFA board drivers). If USER is selected, put custom board drivers in a directory called \r
+# "Board" inside the application directory.\r
+BOARD  = USBKEY\r
+\r
+\r
+# Processor frequency.\r
+#     This will define a symbol, F_CPU, in all source code files equal to the \r
+#     processor frequency. You can then use this symbol in your source code to \r
+#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done\r
+#     automatically to create a 32-bit value in your source code.\r
+#     Typical values are:\r
+#         F_CPU =  1000000\r
+#         F_CPU =  1843200\r
+#         F_CPU =  2000000\r
+#         F_CPU =  3686400\r
+#         F_CPU =  4000000\r
+#         F_CPU =  7372800\r
+#         F_CPU =  8000000\r
+#         F_CPU = 11059200\r
+#         F_CPU = 14745600\r
+#         F_CPU = 16000000\r
+#         F_CPU = 18432000\r
+#         F_CPU = 20000000\r
+F_CPU = 8000000\r
+\r
+\r
+# Input clock frequency.\r
+#     This will define a symbol, F_CLOCK, in all source code files equal to the \r
+#     input clock frequency (before any prescaling is performed). This value may\r
+#     differ from F_CPU if prescaling is used on the latter, and is required as the\r
+#     raw input clock is fed directly to the PLL sections of the AVR for high speed\r
+#     clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'\r
+#     at the end, this will be done automatically to create a 32-bit value in your\r
+#     source code.\r
+#\r
+#     If no clock division is performed on the input clock inside the AVR (via the\r
+#     CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.\r
+F_CLOCK = 8000000\r
+\r
+\r
+# Output format. (can be srec, ihex, binary)\r
+FORMAT = ihex\r
+\r
+\r
+# Target file name (without extension).\r
+TARGET = CDC\r
+\r
+\r
+# Object files directory\r
+#     To put object files in current directory, use a dot (.), do NOT make\r
+#     this an empty or blank macro!\r
+OBJDIR = .\r
+\r
+\r
+# Path to the LUFA library\r
+LUFA_PATH = ../../..\r
+\r
+\r
+# List C source files here. (C dependencies are automatically generated.)\r
+SRC = $(TARGET).c                                                 \\r
+         Descriptors.c                                               \\r
+         $(LUFA_PATH)/LUFA/Scheduler/Scheduler.c                     \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/DevChapter9.c        \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Endpoint.c           \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Host.c               \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/HostChapter9.c       \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/LowLevel.c           \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Pipe.c               \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/Events.c            \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBInterrupt.c      \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBTask.c           \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/ConfigDescriptor.c  \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/Class/HIDParser.c             \\r
+\r
+\r
+# List C++ source files here. (C dependencies are automatically generated.)\r
+CPPSRC = \r
+\r
+\r
+# List Assembler source files here.\r
+#     Make them always end in a capital .S.  Files ending in a lowercase .s\r
+#     will not be considered source files but generated files (assembler\r
+#     output from the compiler), and will be deleted upon "make clean"!\r
+#     Even though the DOS/Win* filesystem matches both .s and .S the same,\r
+#     it will preserve the spelling of the filenames, and gcc itself does\r
+#     care about how the name is spelled on its command-line.\r
+ASRC =\r
+\r
+\r
+# Optimization level, can be [0, 1, 2, 3, s]. \r
+#     0 = turn off optimization. s = optimize for size.\r
+#     (Note: 3 is not always the best optimization level. See avr-libc FAQ.)\r
+OPT = s\r
+\r
+\r
+# Debugging format.\r
+#     Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs.\r
+#     AVR Studio 4.10 requires dwarf-2.\r
+#     AVR [Extended] COFF format requires stabs, plus an avr-objcopy run.\r
+DEBUG = dwarf-2\r
+\r
+\r
+# List any extra directories to look for include files here.\r
+#     Each directory must be seperated by a space.\r
+#     Use forward slashes for directory separators.\r
+#     For a directory that has spaces, enclose it in quotes.\r
+EXTRAINCDIRS = $(LUFA_PATH)/\r
+\r
+\r
+# Compiler flag to set the C Standard level.\r
+#     c89   = "ANSI" C\r
+#     gnu89 = c89 plus GCC extensions\r
+#     c99   = ISO C99 standard (not yet fully implemented)\r
+#     gnu99 = c99 plus GCC extensions\r
+CSTANDARD = -std=gnu99\r
+\r
+\r
+# Place -D or -U options here for C sources\r
+CDEFS  = -DF_CPU=$(F_CPU)UL -DF_CLOCK=$(F_CLOCK)UL -DBOARD=BOARD_$(BOARD)\r
+CDEFS += -DUSE_NONSTANDARD_DESCRIPTOR_NAMES -DNO_STREAM_CALLBACKS -DUSB_DEVICE_ONLY\r
+CDEFS += -DFIXED_CONTROL_ENDPOINT_SIZE=8 -DUSE_SINGLE_DEVICE_CONFIGURATION\r
+CDEFS += -DUSE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)"\r
+\r
+\r
+# Place -D or -U options here for ASM sources\r
+ADEFS = -DF_CPU=$(F_CPU)\r
+\r
+\r
+# Place -D or -U options here for C++ sources\r
+CPPDEFS = -DF_CPU=$(F_CPU)UL\r
+#CPPDEFS += -D__STDC_LIMIT_MACROS\r
+#CPPDEFS += -D__STDC_CONSTANT_MACROS\r
+\r
+\r
+\r
+#---------------- Compiler Options C ----------------\r
+#  -g*:          generate debugging information\r
+#  -O*:          optimization level\r
+#  -f...:        tuning, see GCC manual and avr-libc documentation\r
+#  -Wall...:     warning level\r
+#  -Wa,...:      tell GCC to pass this to the assembler.\r
+#    -adhlns...: create assembler listing\r
+CFLAGS = -g$(DEBUG)\r
+CFLAGS += $(CDEFS)\r
+CFLAGS += -O$(OPT)\r
+CFLAGS += -funsigned-char\r
+CFLAGS += -funsigned-bitfields\r
+CFLAGS += -ffunction-sections\r
+CFLAGS += -fpack-struct\r
+CFLAGS += -fshort-enums\r
+CFLAGS += -finline-limit=20\r
+CFLAGS += -Wall\r
+CFLAGS += -Wstrict-prototypes\r
+CFLAGS += -Wundef\r
+#CFLAGS += -fno-unit-at-a-time\r
+#CFLAGS += -Wunreachable-code\r
+#CFLAGS += -Wsign-compare\r
+CFLAGS += -Wa,-adhlns=$(<:%.c=$(OBJDIR)/%.lst)\r
+CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))\r
+CFLAGS += $(CSTANDARD)\r
+\r
+\r
+#---------------- Compiler Options C++ ----------------\r
+#  -g*:          generate debugging information\r
+#  -O*:          optimization level\r
+#  -f...:        tuning, see GCC manual and avr-libc documentation\r
+#  -Wall...:     warning level\r
+#  -Wa,...:      tell GCC to pass this to the assembler.\r
+#    -adhlns...: create assembler listing\r
+CPPFLAGS = -g$(DEBUG)\r
+CPPFLAGS += $(CPPDEFS)\r
+CPPFLAGS += -O$(OPT)\r
+CPPFLAGS += -funsigned-char\r
+CPPFLAGS += -funsigned-bitfields\r
+CPPFLAGS += -fpack-struct\r
+CPPFLAGS += -fshort-enums\r
+CPPFLAGS += -fno-exceptions\r
+CPPFLAGS += -Wall\r
+CFLAGS += -Wundef\r
+#CPPFLAGS += -mshort-calls\r
+#CPPFLAGS += -fno-unit-at-a-time\r
+#CPPFLAGS += -Wstrict-prototypes\r
+#CPPFLAGS += -Wunreachable-code\r
+#CPPFLAGS += -Wsign-compare\r
+CPPFLAGS += -Wa,-adhlns=$(<:%.cpp=$(OBJDIR)/%.lst)\r
+CPPFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))\r
+#CPPFLAGS += $(CSTANDARD)\r
+\r
+\r
+#---------------- Assembler Options ----------------\r
+#  -Wa,...:   tell GCC to pass this to the assembler.\r
+#  -adhlns:   create listing\r
+#  -gstabs:   have the assembler create line number information; note that\r
+#             for use in COFF files, additional information about filenames\r
+#             and function names needs to be present in the assembler source\r
+#             files -- see avr-libc docs [FIXME: not yet described there]\r
+#  -listing-cont-lines: Sets the maximum number of continuation lines of hex \r
+#       dump that will be displayed for a given single line of source input.\r
+ASFLAGS = $(ADEFS) -Wa,-adhlns=$(<:%.S=$(OBJDIR)/%.lst),-gstabs,--listing-cont-lines=100\r
+\r
+\r
+#---------------- Library Options ----------------\r
+# Minimalistic printf version\r
+PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min\r
+\r
+# Floating point printf version (requires MATH_LIB = -lm below)\r
+PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt\r
+\r
+# If this is left blank, then it will use the Standard printf version.\r
+PRINTF_LIB = \r
+#PRINTF_LIB = $(PRINTF_LIB_MIN)\r
+#PRINTF_LIB = $(PRINTF_LIB_FLOAT)\r
+\r
+\r
+# Minimalistic scanf version\r
+SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min\r
+\r
+# Floating point + %[ scanf version (requires MATH_LIB = -lm below)\r
+SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt\r
+\r
+# If this is left blank, then it will use the Standard scanf version.\r
+SCANF_LIB = \r
+#SCANF_LIB = $(SCANF_LIB_MIN)\r
+#SCANF_LIB = $(SCANF_LIB_FLOAT)\r
+\r
+\r
+MATH_LIB = -lm\r
+\r
+\r
+# List any extra directories to look for libraries here.\r
+#     Each directory must be seperated by a space.\r
+#     Use forward slashes for directory separators.\r
+#     For a directory that has spaces, enclose it in quotes.\r
+EXTRALIBDIRS = \r
+\r
+\r
+\r
+#---------------- External Memory Options ----------------\r
+\r
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),\r
+# used for variables (.data/.bss) and heap (malloc()).\r
+#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff\r
+\r
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),\r
+# only used for heap (malloc()).\r
+#EXTMEMOPTS = -Wl,--section-start,.data=0x801100,--defsym=__heap_end=0x80ffff\r
+\r
+EXTMEMOPTS =\r
+\r
+\r
+\r
+#---------------- Linker Options ----------------\r
+#  -Wl,...:     tell GCC to pass this to linker.\r
+#    -Map:      create map file\r
+#    --cref:    add cross reference to  map file\r
+LDFLAGS = -Wl,-Map=$(TARGET).map,--cref\r
+LDFLAGS += -Wl,--relax \r
+LDFLAGS += -Wl,--gc-sections\r
+LDFLAGS += $(EXTMEMOPTS)\r
+LDFLAGS += $(patsubst %,-L%,$(EXTRALIBDIRS))\r
+LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)\r
+#LDFLAGS += -T linker_script.x\r
+\r
+\r
+\r
+#---------------- Programming Options (avrdude) ----------------\r
+\r
+# Programming hardware: alf avr910 avrisp bascom bsd \r
+# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500\r
+#\r
+# Type: avrdude -c ?\r
+# to get a full listing.\r
+#\r
+AVRDUDE_PROGRAMMER = jtagmkII\r
+\r
+# com1 = serial port. Use lpt1 to connect to parallel port.\r
+AVRDUDE_PORT = usb\r
+\r
+AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex\r
+#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep\r
+\r
+\r
+# Uncomment the following if you want avrdude's erase cycle counter.\r
+# Note that this counter needs to be initialized first using -Yn,\r
+# see avrdude manual.\r
+#AVRDUDE_ERASE_COUNTER = -y\r
+\r
+# Uncomment the following if you do /not/ wish a verification to be\r
+# performed after programming the device.\r
+#AVRDUDE_NO_VERIFY = -V\r
+\r
+# Increase verbosity level.  Please use this when submitting bug\r
+# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude> \r
+# to submit bug reports.\r
+#AVRDUDE_VERBOSE = -v -v\r
+\r
+AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)\r
+AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY)\r
+AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE)\r
+AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER)\r
+\r
+\r
+\r
+#---------------- Debugging Options ----------------\r
+\r
+# For simulavr only - target MCU frequency.\r
+DEBUG_MFREQ = $(F_CPU)\r
+\r
+# Set the DEBUG_UI to either gdb or insight.\r
+# DEBUG_UI = gdb\r
+DEBUG_UI = insight\r
+\r
+# Set the debugging back-end to either avarice, simulavr.\r
+DEBUG_BACKEND = avarice\r
+#DEBUG_BACKEND = simulavr\r
+\r
+# GDB Init Filename.\r
+GDBINIT_FILE = __avr_gdbinit\r
+\r
+# When using avarice settings for the JTAG\r
+JTAG_DEV = /dev/com1\r
+\r
+# Debugging port used to communicate between GDB / avarice / simulavr.\r
+DEBUG_PORT = 4242\r
+\r
+# Debugging host used to communicate between GDB / avarice / simulavr, normally\r
+#     just set to localhost unless doing some sort of crazy debugging when \r
+#     avarice is running on a different computer.\r
+DEBUG_HOST = localhost\r
+\r
+\r
+\r
+#============================================================================\r
+\r
+\r
+# Define programs and commands.\r
+SHELL = sh\r
+CC = avr-gcc\r
+OBJCOPY = avr-objcopy\r
+OBJDUMP = avr-objdump\r
+SIZE = avr-size\r
+AR = avr-ar rcs\r
+NM = avr-nm\r
+AVRDUDE = avrdude\r
+REMOVE = rm -f\r
+REMOVEDIR = rm -rf\r
+COPY = cp\r
+WINSHELL = cmd\r
+\r
+# Define Messages\r
+# English\r
+MSG_ERRORS_NONE = Errors: none\r
+MSG_BEGIN = -------- begin --------\r
+MSG_END = --------  end  --------\r
+MSG_SIZE_BEFORE = Size before: \r
+MSG_SIZE_AFTER = Size after:\r
+MSG_COFF = Converting to AVR COFF:\r
+MSG_EXTENDED_COFF = Converting to AVR Extended COFF:\r
+MSG_FLASH = Creating load file for Flash:\r
+MSG_EEPROM = Creating load file for EEPROM:\r
+MSG_EXTENDED_LISTING = Creating Extended Listing:\r
+MSG_SYMBOL_TABLE = Creating Symbol Table:\r
+MSG_LINKING = Linking:\r
+MSG_COMPILING = Compiling C:\r
+MSG_COMPILING_CPP = Compiling C++:\r
+MSG_ASSEMBLING = Assembling:\r
+MSG_CLEANING = Cleaning project:\r
+MSG_CREATING_LIBRARY = Creating library:\r
+\r
+\r
+\r
+\r
+# Define all object files.\r
+OBJ = $(SRC:%.c=$(OBJDIR)/%.o) $(CPPSRC:%.cpp=$(OBJDIR)/%.o) $(ASRC:%.S=$(OBJDIR)/%.o) \r
+\r
+# Define all listing files.\r
+LST = $(SRC:%.c=$(OBJDIR)/%.lst) $(CPPSRC:%.cpp=$(OBJDIR)/%.lst) $(ASRC:%.S=$(OBJDIR)/%.lst) \r
+\r
+\r
+# Compiler flags to generate dependency files.\r
+GENDEPFLAGS = -MMD -MP -MF .dep/$(@F).d\r
+\r
+\r
+# Combine all necessary flags and optional flags.\r
+# Add target processor to flags.\r
+ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS)\r
+ALL_CPPFLAGS = -mmcu=$(MCU) -I. -x c++ $(CPPFLAGS) $(GENDEPFLAGS)\r
+ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)\r
+\r
+\r
+\r
+\r
+\r
+# Default target.\r
+all: begin gccversion sizebefore build checkhooks checklibmode checkboard sizeafter end\r
+\r
+# Change the build target to build a HEX file or a library.\r
+build: elf hex eep lss sym\r
+#build: lib\r
+\r
+\r
+elf: $(TARGET).elf\r
+hex: $(TARGET).hex\r
+eep: $(TARGET).eep\r
+lss: $(TARGET).lss\r
+sym: $(TARGET).sym\r
+LIBNAME=lib$(TARGET).a\r
+lib: $(LIBNAME)\r
+\r
+\r
+\r
+# Eye candy.\r
+# AVR Studio 3.x does not check make's exit code but relies on\r
+# the following magic strings to be generated by the compile job.\r
+begin:\r
+       @echo\r
+       @echo $(MSG_BEGIN)\r
+\r
+end:\r
+       @echo $(MSG_END)\r
+       @echo\r
+\r
+\r
+# Display size of file.\r
+HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex\r
+ELFSIZE = $(SIZE) $(MCU_FLAG) $(FORMAT_FLAG) $(TARGET).elf\r
+MCU_FLAG = $(shell $(SIZE) --help | grep -- --mcu > /dev/null && echo --mcu=$(MCU) )\r
+FORMAT_FLAG = $(shell $(SIZE) --help | grep -- --format=.*avr > /dev/null && echo --format=avr )\r
+\r
+sizebefore:\r
+       @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \\r
+       2>/dev/null; echo; fi\r
+\r
+sizeafter:\r
+       @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \\r
+       2>/dev/null; echo; fi\r
+\r
+checkhooks: build\r
+       @echo\r
+       @echo ------- Unhooked LUFA Events -------\r
+       @$(shell) (grep -s '^EVENT_.*LUFA/.*\\.o' $(TARGET).map | \\r
+                  cut -d' ' -f1 | cut -d'_' -f2- | grep ".*") || \\r
+                          echo "(None)"\r
+       @echo ------------------------------------\r
+\r
+checklibmode:\r
+       @echo\r
+       @echo ----------- Library Mode -----------\r
+       @$(shell) ($(CC) $(ALL_CFLAGS) -E -dM - < /dev/null \\r
+                 | grep 'USB_\(DEVICE\|HOST\)_ONLY' | cut -d' ' -f2 | grep ".*") \\r
+                 || echo "No specific mode (both device and host mode allowable)."\r
+       @echo ------------------------------------\r
+\r
+checkboard:\r
+       @echo\r
+       @echo ---------- Selected Board ----------\r
+       @echo Selected board model is $(BOARD).\r
+       @echo ------------------------------------\r
+       \r
+# Display compiler version information.\r
+gccversion : \r
+       @$(CC) --version\r
+\r
+\r
+\r
+# Program the device.  \r
+program: $(TARGET).hex $(TARGET).eep\r
+       $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)\r
+\r
+flip: $(TARGET).hex\r
+       batchisp -hardware usb -device $(MCU) -operation erase f\r
+       batchisp -hardware usb -device $(MCU) -operation loadbuffer $(TARGET).hex program\r
+       batchisp -hardware usb -device $(MCU) -operation start reset 0\r
+\r
+dfu: $(TARGET).hex\r
+       dfu-programmer $(MCU) erase\r
+       dfu-programmer $(MCU) flash --debug 1 $(TARGET).hex\r
+       dfu-programmer $(MCU) reset\r
+\r
+flip-ee: $(TARGET).hex $(TARGET).eep\r
+       copy $(TARGET).eep $(TARGET)eep.hex\r
+       batchisp -hardware usb -device $(MCU) -operation memory EEPROM erase\r
+       batchisp -hardware usb -device $(MCU) -operation memory EEPROM loadbuffer $(TARGET)eep.hex program\r
+       batchisp -hardware usb -device $(MCU) -operation start reset 0\r
+\r
+dfu-ee: $(TARGET).hex $(TARGET).eep\r
+       dfu-programmer $(MCU) flash-eeprom --debug 1 --suppress-bootloader-mem $(TARGET).eep\r
+       dfu-programmer $(MCU) reset\r
+\r
+\r
+# Generate avr-gdb config/init file which does the following:\r
+#     define the reset signal, load the target file, connect to target, and set \r
+#     a breakpoint at main().\r
+gdb-config: \r
+       @$(REMOVE) $(GDBINIT_FILE)\r
+       @echo define reset >> $(GDBINIT_FILE)\r
+       @echo SIGNAL SIGHUP >> $(GDBINIT_FILE)\r
+       @echo end >> $(GDBINIT_FILE)\r
+       @echo file $(TARGET).elf >> $(GDBINIT_FILE)\r
+       @echo target remote $(DEBUG_HOST):$(DEBUG_PORT)  >> $(GDBINIT_FILE)\r
+ifeq ($(DEBUG_BACKEND),simulavr)\r
+       @echo load  >> $(GDBINIT_FILE)\r
+endif\r
+       @echo break main >> $(GDBINIT_FILE)\r
+\r
+debug: gdb-config $(TARGET).elf\r
+ifeq ($(DEBUG_BACKEND), avarice)\r
+       @echo Starting AVaRICE - Press enter when "waiting to connect" message displays.\r
+       @$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \\r
+       $(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT)\r
+       @$(WINSHELL) /c pause\r
+\r
+else\r
+       @$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \\r
+       $(DEBUG_MFREQ) --port $(DEBUG_PORT)\r
+endif\r
+       @$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE)\r
+\r
+\r
+\r
+\r
+# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.\r
+COFFCONVERT = $(OBJCOPY) --debugging\r
+COFFCONVERT += --change-section-address .data-0x800000\r
+COFFCONVERT += --change-section-address .bss-0x800000\r
+COFFCONVERT += --change-section-address .noinit-0x800000\r
+COFFCONVERT += --change-section-address .eeprom-0x810000\r
+\r
+\r
+\r
+coff: $(TARGET).elf\r
+       @echo\r
+       @echo $(MSG_COFF) $(TARGET).cof\r
+       $(COFFCONVERT) -O coff-avr $< $(TARGET).cof\r
+\r
+\r
+extcoff: $(TARGET).elf\r
+       @echo\r
+       @echo $(MSG_EXTENDED_COFF) $(TARGET).cof\r
+       $(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof\r
+\r
+\r
+\r
+# Create final output files (.hex, .eep) from ELF output file.\r
+%.hex: %.elf\r
+       @echo\r
+       @echo $(MSG_FLASH) $@\r
+       $(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@\r
+\r
+%.eep: %.elf\r
+       @echo\r
+       @echo $(MSG_EEPROM) $@\r
+       -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \\r
+       --change-section-lma .eeprom=0 --no-change-warnings -O $(FORMAT) $< $@ || exit 0\r
+\r
+# Create extended listing file from ELF output file.\r
+%.lss: %.elf\r
+       @echo\r
+       @echo $(MSG_EXTENDED_LISTING) $@\r
+       $(OBJDUMP) -h -z -S $< > $@\r
+\r
+# Create a symbol table from ELF output file.\r
+%.sym: %.elf\r
+       @echo\r
+       @echo $(MSG_SYMBOL_TABLE) $@\r
+       $(NM) -n $< > $@\r
+\r
+\r
+\r
+# Create library from object files.\r
+.SECONDARY : $(TARGET).a\r
+.PRECIOUS : $(OBJ)\r
+%.a: $(OBJ)\r
+       @echo\r
+       @echo $(MSG_CREATING_LIBRARY) $@\r
+       $(AR) $@ $(OBJ)\r
+\r
+\r
+# Link: create ELF output file from object files.\r
+.SECONDARY : $(TARGET).elf\r
+.PRECIOUS : $(OBJ)\r
+%.elf: $(OBJ)\r
+       @echo\r
+       @echo $(MSG_LINKING) $@\r
+       $(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)\r
+\r
+\r
+# Compile: create object files from C source files.\r
+$(OBJDIR)/%.o : %.c\r
+       @echo\r
+       @echo $(MSG_COMPILING) $<\r
+       $(CC) -c $(ALL_CFLAGS) $< -o $@ \r
+\r
+\r
+# Compile: create object files from C++ source files.\r
+$(OBJDIR)/%.o : %.cpp\r
+       @echo\r
+       @echo $(MSG_COMPILING_CPP) $<\r
+       $(CC) -c $(ALL_CPPFLAGS) $< -o $@ \r
+\r
+\r
+# Compile: create assembler files from C source files.\r
+%.s : %.c\r
+       $(CC) -S $(ALL_CFLAGS) $< -o $@\r
+\r
+\r
+# Compile: create assembler files from C++ source files.\r
+%.s : %.cpp\r
+       $(CC) -S $(ALL_CPPFLAGS) $< -o $@\r
+\r
+\r
+# Assemble: create object files from assembler source files.\r
+$(OBJDIR)/%.o : %.S\r
+       @echo\r
+       @echo $(MSG_ASSEMBLING) $<\r
+       $(CC) -c $(ALL_ASFLAGS) $< -o $@\r
+\r
+\r
+# Create preprocessed source for use in sending a bug report.\r
+%.i : %.c\r
+       $(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ \r
+       \r
+\r
+# Target: clean project.\r
+clean: begin clean_list clean_binary end\r
+\r
+clean_binary:\r
+       $(REMOVE) $(TARGET).hex\r
+       \r
+clean_list:\r
+       @echo $(MSG_CLEANING)\r
+       $(REMOVE) $(TARGET).eep\r
+       $(REMOVE) $(TARGET)eep.hex\r
+       $(REMOVE) $(TARGET).cof\r
+       $(REMOVE) $(TARGET).elf\r
+       $(REMOVE) $(TARGET).map\r
+       $(REMOVE) $(TARGET).sym\r
+       $(REMOVE) $(TARGET).lss\r
+       $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.o)\r
+       $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.lst)\r
+       $(REMOVE) $(SRC:.c=.s)\r
+       $(REMOVE) $(SRC:.c=.d)\r
+       $(REMOVE) $(SRC:.c=.i)\r
+       $(REMOVEDIR) .dep\r
+\r
+\r
+doxygen:\r
+       @echo Generating Project Documentation...\r
+       @doxygen Doxygen.conf\r
+       @echo Documentation Generation Complete.\r
+\r
+clean_doxygen:\r
+       rm -rf Documentation\r
+\r
+# Create object files directory\r
+$(shell mkdir $(OBJDIR) 2>/dev/null)\r
+\r
+\r
+# Include the dependency files.\r
+-include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)\r
+\r
+\r
+# Listing of phony targets.\r
+.PHONY : all checkhooks checklibmode checkboard   \\r
+begin finish end sizebefore sizeafter gccversion  \\r
+build elf hex eep lss sym coff extcoff clean      \\r
+clean_list clean_binary program debug gdb-config  \\r
+doxygen dfu flip flip-ee dfu-ee
\ No newline at end of file
diff --git a/Demos/Device/LowLevel/DualCDC/Descriptors.c b/Demos/Device/LowLevel/DualCDC/Descriptors.c
new file mode 100644 (file)
index 0000000..64aed7d
--- /dev/null
@@ -0,0 +1,385 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  USB Device Descriptors, for library use when in USB device mode. Descriptors are special \r
+ *  computer-readable structures which the host requests upon device enumeration, to determine\r
+ *  the device's capabilities and functions.  \r
+ */\r
+\r
+#include "Descriptors.h"\r
+\r
+/** Device descriptor structure. This descriptor, located in FLASH memory, describes the overall\r
+ *  device characteristics, including the supported USB version, control endpoint size and the\r
+ *  number of device configurations. The descriptor is read out by the USB host when the enumeration\r
+ *  process begins.\r
+ */\r
+USB_Descriptor_Device_t PROGMEM DeviceDescriptor =\r
+{\r
+       .Header                 = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device},\r
+               \r
+       .USBSpecification       = VERSION_BCD(01.10),\r
+       .Class                  = 0xEF,\r
+       .SubClass               = 0x02,\r
+       .Protocol               = 0x01,\r
+                               \r
+       .Endpoint0Size          = FIXED_CONTROL_ENDPOINT_SIZE,\r
+               \r
+       .VendorID               = 0x03EB,\r
+       .ProductID              = 0x204E,\r
+       .ReleaseNumber          = 0x0000,\r
+               \r
+       .ManufacturerStrIndex   = 0x01,\r
+       .ProductStrIndex        = 0x02,\r
+       .SerialNumStrIndex      = NO_DESCRIPTOR,\r
+               \r
+       .NumberOfConfigurations = 1\r
+};\r
+\r
+/** Configuration descriptor structure. This descriptor, located in FLASH memory, describes the usage\r
+ *  of the device in one of its supported configurations, including information about any device interfaces\r
+ *  and endpoints. The descriptor is read out by the USB host during the enumeration process when selecting\r
+ *  a configuration so that the host may correctly communicate with the USB device.\r
+ */\r
+USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =\r
+{\r
+       .Config = \r
+               {\r
+                       .Header                 = {.Size = sizeof(USB_Descriptor_Configuration_Header_t), .Type = DTYPE_Configuration},\r
+\r
+                       .TotalConfigurationSize = sizeof(USB_Descriptor_Configuration_t),\r
+                       .TotalInterfaces        = 4,\r
+                               \r
+                       .ConfigurationNumber    = 1,\r
+                       .ConfigurationStrIndex  = NO_DESCRIPTOR,\r
+                               \r
+                       .ConfigAttributes       = (USB_CONFIG_ATTR_BUSPOWERED | USB_CONFIG_ATTR_SELFPOWERED),\r
+                       \r
+                       .MaxPowerConsumption    = USB_CONFIG_POWER_MA(100)\r
+               },\r
+               \r
+       .IAD1 = \r
+               {\r
+                       .Header                 = {.Size = sizeof(USB_Descriptor_Interface_Association_t), .Type = DTYPE_InterfaceAssociation},\r
+\r
+                       .FirstInterfaceIndex    = 0,\r
+                       .TotalInterfaces        = 2,\r
+\r
+                       .Class                  = 0x02,\r
+                       .SubClass               = 0x02,\r
+                       .Protocol               = 0x01,\r
+\r
+                       .IADStrIndex            = NO_DESCRIPTOR\r
+               },\r
+\r
+       .CDC1_CCI_Interface = \r
+               {\r
+                       .Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},\r
+\r
+                       .InterfaceNumber        = 0,\r
+                       .AlternateSetting       = 0,\r
+                       \r
+                       .TotalEndpoints         = 1,\r
+                               \r
+                       .Class                  = 0x02,\r
+                       .SubClass               = 0x02,\r
+                       .Protocol               = 0x01,\r
+                               \r
+                       .InterfaceStrIndex      = NO_DESCRIPTOR\r
+               },\r
+\r
+       .CDC1_Functional_IntHeader = \r
+               {\r
+                       .Header                 = {.Size = sizeof(CDC_FUNCTIONAL_DESCRIPTOR(2)), .Type = 0x24},\r
+                       .SubType                = 0x00,\r
+                       \r
+                       .Data                   = {0x01, 0x10}\r
+               },\r
+\r
+       .CDC1_Functional_CallManagement = \r
+               {\r
+                       .Header                 = {.Size = sizeof(CDC_FUNCTIONAL_DESCRIPTOR(2)), .Type = 0x24},\r
+                       .SubType                = 0x01,\r
+                       \r
+                       .Data                   = {0x03, 0x01}\r
+               },\r
+\r
+       .CDC1_Functional_AbstractControlManagement = \r
+               {\r
+                       .Header                 = {.Size = sizeof(CDC_FUNCTIONAL_DESCRIPTOR(1)), .Type = 0x24},\r
+                       .SubType                = 0x02,\r
+                       \r
+                       .Data                   = {0x06}\r
+               },\r
+               \r
+       .CDC1_Functional_Union = \r
+               {\r
+                       .Header                 = {.Size = sizeof(CDC_FUNCTIONAL_DESCRIPTOR(2)), .Type = 0x24},\r
+                       .SubType                = 0x06,\r
+                       \r
+                       .Data                   = {0x00, 0x01}\r
+               },\r
+\r
+       .CDC1_ManagementEndpoint = \r
+               {\r
+                       .Header                 = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},\r
+                                                                                \r
+                       .EndpointAddress        = (ENDPOINT_DESCRIPTOR_DIR_IN | CDC1_NOTIFICATION_EPNUM),\r
+                       .Attributes             = EP_TYPE_INTERRUPT,\r
+                       .EndpointSize           = CDC_NOTIFICATION_EPSIZE,\r
+                       .PollingIntervalMS      = 0xFF\r
+               },\r
+\r
+       .CDC1_DCI_Interface = \r
+               {\r
+                       .Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},\r
+\r
+                       .InterfaceNumber        = 1,\r
+                       .AlternateSetting       = 0,\r
+                       \r
+                       .TotalEndpoints         = 2,\r
+                               \r
+                       .Class                  = 0x0A,\r
+                       .SubClass               = 0x00,\r
+                       .Protocol               = 0x00,\r
+                               \r
+                       .InterfaceStrIndex      = NO_DESCRIPTOR\r
+               },\r
+\r
+       .CDC1_DataOutEndpoint = \r
+               {\r
+                       .Header                 = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},\r
+                                                                                \r
+                       .EndpointAddress        = (ENDPOINT_DESCRIPTOR_DIR_OUT | CDC1_RX_EPNUM),\r
+                       .Attributes             = EP_TYPE_BULK,\r
+                       .EndpointSize           = CDC_TXRX_EPSIZE,\r
+                       .PollingIntervalMS      = 0x00\r
+               },\r
+               \r
+       .CDC1_DataInEndpoint = \r
+               {\r
+                       .Header                 = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},\r
+                                                                                \r
+                       .EndpointAddress        = (ENDPOINT_DESCRIPTOR_DIR_IN | CDC1_TX_EPNUM),\r
+                       .Attributes             = EP_TYPE_BULK,\r
+                       .EndpointSize           = CDC_TXRX_EPSIZE,\r
+                       .PollingIntervalMS      = 0x00\r
+               },\r
+\r
+       .IAD2 = \r
+               {\r
+                       .Header                 = {.Size = sizeof(USB_Descriptor_Interface_Association_t), .Type = DTYPE_InterfaceAssociation},\r
+\r
+                       .FirstInterfaceIndex    = 2,\r
+                       .TotalInterfaces        = 2,\r
+\r
+                       .Class                  = 0x02,\r
+                       .SubClass               = 0x02,\r
+                       .Protocol               = 0x01,\r
+\r
+                       .IADStrIndex            = NO_DESCRIPTOR\r
+               },\r
+\r
+       .CDC2_CCI_Interface = \r
+               {\r
+                       .Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},\r
+\r
+                       .InterfaceNumber        = 2,\r
+                       .AlternateSetting       = 0,\r
+                       \r
+                       .TotalEndpoints         = 1,\r
+                               \r
+                       .Class                  = 0x02,\r
+                       .SubClass               = 0x02,\r
+                       .Protocol               = 0x01,\r
+                               \r
+                       .InterfaceStrIndex      = NO_DESCRIPTOR\r
+               },\r
+\r
+       .CDC2_Functional_IntHeader = \r
+               {\r
+                       .Header                 = {.Size = sizeof(CDC_FUNCTIONAL_DESCRIPTOR(2)), .Type = 0x24},\r
+                       .SubType                = 0x00,\r
+                       \r
+                       .Data                   = {0x01, 0x10}\r
+               },\r
+\r
+       .CDC2_Functional_CallManagement = \r
+               {\r
+                       .Header                 = {.Size = sizeof(CDC_FUNCTIONAL_DESCRIPTOR(2)), .Type = 0x24},\r
+                       .SubType                = 0x01,\r
+                       \r
+                       .Data                   = {0x03, 0x03}\r
+               },\r
+\r
+       .CDC2_Functional_AbstractControlManagement = \r
+               {\r
+                       .Header                 = {.Size = sizeof(CDC_FUNCTIONAL_DESCRIPTOR(1)), .Type = 0x24},\r
+                       .SubType                = 0x02,\r
+                       \r
+                       .Data                   = {0x06}\r
+               },\r
+               \r
+       .CDC2_Functional_Union = \r
+               {\r
+                       .Header                 = {.Size = sizeof(CDC_FUNCTIONAL_DESCRIPTOR(2)), .Type = 0x24},\r
+                       .SubType                = 0x06,\r
+                       \r
+                       .Data                   = {0x02, 0x03}\r
+               },\r
+\r
+       .CDC2_ManagementEndpoint = \r
+               {\r
+                       .Header                 = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},\r
+                                                                                \r
+                       .EndpointAddress        = (ENDPOINT_DESCRIPTOR_DIR_IN | CDC2_NOTIFICATION_EPNUM),\r
+                       .Attributes             = EP_TYPE_INTERRUPT,\r
+                       .EndpointSize           = CDC_NOTIFICATION_EPSIZE,\r
+                       .PollingIntervalMS      = 0xFF\r
+               },\r
+\r
+       .CDC2_DCI_Interface = \r
+               {\r
+                       .Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},\r
+\r
+                       .InterfaceNumber        = 3,\r
+                       .AlternateSetting       = 0,\r
+                       \r
+                       .TotalEndpoints         = 2,\r
+                               \r
+                       .Class                  = 0x0A,\r
+                       .SubClass               = 0x00,\r
+                       .Protocol               = 0x00,\r
+                               \r
+                       .InterfaceStrIndex      = NO_DESCRIPTOR\r
+               },\r
+\r
+       .CDC2_DataOutEndpoint = \r
+               {\r
+                       .Header                 = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},\r
+                                                                                \r
+                       .EndpointAddress        = (ENDPOINT_DESCRIPTOR_DIR_OUT | CDC2_RX_EPNUM),\r
+                       .Attributes             = EP_TYPE_BULK,\r
+                       .EndpointSize           = CDC_TXRX_EPSIZE,\r
+                       .PollingIntervalMS      = 0x00\r
+               },\r
+               \r
+       .CDC2_DataInEndpoint = \r
+               {\r
+                       .Header                 = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},\r
+                                                                                \r
+                       .EndpointAddress        = (ENDPOINT_DESCRIPTOR_DIR_IN | CDC2_TX_EPNUM),\r
+                       .Attributes             = EP_TYPE_BULK,\r
+                       .EndpointSize           = CDC_TXRX_EPSIZE,\r
+                       .PollingIntervalMS      = 0x00\r
+               }\r
+};\r
+\r
+/** Language descriptor structure. This descriptor, located in FLASH memory, is returned when the host requests\r
+ *  the string descriptor with index 0 (the first index). It is actually an array of 16-bit integers, which indicate\r
+ *  via the language ID table available at USB.org what languages the device supports for its string descriptors.\r
+ */\r
+USB_Descriptor_String_t PROGMEM LanguageString =\r
+{\r
+       .Header                 = {.Size = USB_STRING_LEN(1), .Type = DTYPE_String},\r
+               \r
+       .UnicodeString          = {LANGUAGE_ID_ENG}\r
+};\r
+\r
+/** Manufacturer descriptor string. This is a Unicode string containing the manufacturer's details in human readable\r
+ *  form, and is read out upon request by the host when the appropriate string ID is requested, listed in the Device\r
+ *  Descriptor.\r
+ */\r
+USB_Descriptor_String_t PROGMEM ManufacturerString =\r
+{\r
+       .Header                 = {.Size = USB_STRING_LEN(11), .Type = DTYPE_String},\r
+               \r
+       .UnicodeString          = L"Dean Camera"\r
+};\r
+\r
+/** Product descriptor string. This is a Unicode string containing the product's details in human readable form,\r
+ *  and is read out upon request by the host when the appropriate string ID is requested, listed in the Device\r
+ *  Descriptor.\r
+ */\r
+USB_Descriptor_String_t PROGMEM ProductString =\r
+{\r
+       .Header                 = {.Size = USB_STRING_LEN(13), .Type = DTYPE_String},\r
+               \r
+       .UnicodeString          = L"LUFA Dual CDC Demo"\r
+};\r
+\r
+/** This function is called by the library when in device mode, and must be overridden (see library "USB Descriptors"\r
+ *  documentation) by the application code so that the address and size of a requested descriptor can be given\r
+ *  to the USB library. When the device receives a Get Descriptor request on the control endpoint, this function\r
+ *  is called so that the descriptor details can be passed back and the appropriate descriptor sent back to the\r
+ *  USB host.\r
+ */\r
+uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
+{\r
+       const uint8_t  DescriptorType   = (wValue >> 8);\r
+       const uint8_t  DescriptorNumber = (wValue & 0xFF);\r
+\r
+       void*    Address = NULL;\r
+       uint16_t Size    = NO_DESCRIPTOR;\r
+\r
+       switch (DescriptorType)\r
+       {\r
+               case DTYPE_Device:\r
+                       Address = (void*)&DeviceDescriptor;\r
+                       Size    = sizeof(USB_Descriptor_Device_t);\r
+                       break;\r
+               case DTYPE_Configuration: \r
+                       Address = (void*)&ConfigurationDescriptor;\r
+                       Size    = sizeof(USB_Descriptor_Configuration_t);\r
+                       break;\r
+               case DTYPE_String: \r
+                       switch (DescriptorNumber)\r
+                       {\r
+                               case 0x00: \r
+                                       Address = (void*)&LanguageString;\r
+                                       Size    = pgm_read_byte(&LanguageString.Header.Size);\r
+                                       break;\r
+                               case 0x01: \r
+                                       Address = (void*)&ManufacturerString;\r
+                                       Size    = pgm_read_byte(&ManufacturerString.Header.Size);\r
+                                       break;\r
+                               case 0x02: \r
+                                       Address = (void*)&ProductString;\r
+                                       Size    = pgm_read_byte(&ProductString.Header.Size);\r
+                                       break;\r
+                       }\r
+                       \r
+                       break;\r
+       }\r
+       \r
+       *DescriptorAddress = Address;   \r
+       return Size;\r
+}\r
diff --git a/Demos/Device/LowLevel/DualCDC/Descriptors.h b/Demos/Device/LowLevel/DualCDC/Descriptors.h
new file mode 100644 (file)
index 0000000..2c2311b
--- /dev/null
@@ -0,0 +1,118 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  Header file for Descriptors.c.\r
+ */\r
\r
+#ifndef _DESCRIPTORS_H_\r
+#define _DESCRIPTORS_H_\r
+\r
+       /* Includes: */\r
+               #include <LUFA/Drivers/USB/USB.h>\r
+\r
+               #include <avr/pgmspace.h>\r
+\r
+       /* Macros: */\r
+               /** Macro to define a CDC class-specific functional descriptor. CDC functional descriptors have a\r
+                *  uniform structure but variable sized data payloads, thus cannot be represented accurately by\r
+                *  a single typedef struct. A macro is used instead so that functional descriptors can be created\r
+                *  easily by specifying the size of the payload. This allows sizeof() to work correctly.\r
+                *\r
+                *  \param DataSize  Size in bytes of the CDC functional descriptor's data payload\r
+                */\r
+               #define CDC_FUNCTIONAL_DESCRIPTOR(DataSize)        \\r
+                    struct                                        \\r
+                    {                                             \\r
+                         USB_Descriptor_Header_t Header;          \\r
+                             uint8_t                 SubType;         \\r
+                         uint8_t                 Data[DataSize];  \\r
+                    }\r
+\r
+               /** Endpoint number of the first CDC interface's device-to-host notification IN endpoint. */\r
+               #define CDC1_NOTIFICATION_EPNUM        3\r
+\r
+               /** Endpoint number of the first CDC interface's device-to-host data IN endpoint. */\r
+               #define CDC1_TX_EPNUM                  1        \r
+\r
+               /** Endpoint number of the first CDC interface's host-to-device data OUT endpoint. */\r
+               #define CDC1_RX_EPNUM                  2        \r
+\r
+               /** Endpoint number of the second CDC interface's device-to-host notification IN endpoint. */\r
+               #define CDC2_NOTIFICATION_EPNUM        4\r
+\r
+               /** Endpoint number of the second CDC interface's device-to-host data IN endpoint. */\r
+               #define CDC2_TX_EPNUM                  5        \r
+\r
+               /** Endpoint number of the second CDC interface's host-to-device data OUT endpoint. */\r
+               #define CDC2_RX_EPNUM                  6        \r
+\r
+               /** Size in bytes of the CDC device-to-host notification IN endpoints. */\r
+               #define CDC_NOTIFICATION_EPSIZE        8\r
+\r
+               /** Size in bytes of the CDC data IN and OUT endpoints. */\r
+               #define CDC_TXRX_EPSIZE                16       \r
+\r
+       /* Type Defines: */\r
+               /** Type define for the device configuration descriptor structure. This must be defined in the\r
+                *  application code, as the configuration descriptor contains several sub-descriptors which\r
+                *  vary between devices, and which describe the device's usage to the host.\r
+                */\r
+               typedef struct\r
+               {\r
+                       USB_Descriptor_Configuration_Header_t    Config;\r
+                       USB_Descriptor_Interface_Association_t   IAD1;\r
+                       USB_Descriptor_Interface_t               CDC1_CCI_Interface;\r
+                       CDC_FUNCTIONAL_DESCRIPTOR(2)             CDC1_Functional_IntHeader;\r
+                       CDC_FUNCTIONAL_DESCRIPTOR(2)             CDC1_Functional_CallManagement;\r
+                       CDC_FUNCTIONAL_DESCRIPTOR(1)             CDC1_Functional_AbstractControlManagement;\r
+                       CDC_FUNCTIONAL_DESCRIPTOR(2)             CDC1_Functional_Union;\r
+                       USB_Descriptor_Endpoint_t                CDC1_ManagementEndpoint;\r
+                       USB_Descriptor_Interface_t               CDC1_DCI_Interface;\r
+                       USB_Descriptor_Endpoint_t                CDC1_DataOutEndpoint;\r
+                       USB_Descriptor_Endpoint_t                CDC1_DataInEndpoint;\r
+                       USB_Descriptor_Interface_Association_t   IAD2;\r
+                       USB_Descriptor_Interface_t               CDC2_CCI_Interface;\r
+                       CDC_FUNCTIONAL_DESCRIPTOR(2)             CDC2_Functional_IntHeader;\r
+                       CDC_FUNCTIONAL_DESCRIPTOR(2)             CDC2_Functional_CallManagement;\r
+                       CDC_FUNCTIONAL_DESCRIPTOR(1)             CDC2_Functional_AbstractControlManagement;\r
+                       CDC_FUNCTIONAL_DESCRIPTOR(2)             CDC2_Functional_Union;\r
+                       USB_Descriptor_Endpoint_t                CDC2_ManagementEndpoint;\r
+                       USB_Descriptor_Interface_t               CDC2_DCI_Interface;\r
+                       USB_Descriptor_Endpoint_t                CDC2_DataOutEndpoint;\r
+                       USB_Descriptor_Endpoint_t                CDC2_DataInEndpoint;\r
+               } USB_Descriptor_Configuration_t;\r
+\r
+       /* Function Prototypes: */\r
+               uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
+                                                                                       ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);\r
+\r
+#endif\r
diff --git a/Demos/Device/LowLevel/DualCDC/Doxygen.conf b/Demos/Device/LowLevel/DualCDC/Doxygen.conf
new file mode 100644 (file)
index 0000000..7b3b741
--- /dev/null
@@ -0,0 +1,1485 @@
+# Doxyfile 1.5.7.1\r
+\r
+# This file describes the settings to be used by the documentation system\r
+# doxygen (www.doxygen.org) for a project\r
+#\r
+# All text after a hash (#) is considered a comment and will be ignored\r
+# The format is:\r
+#       TAG = value [value, ...]\r
+# For lists items can also be appended using:\r
+#       TAG += value [value, ...]\r
+# Values that contain spaces should be placed between quotes (" ")\r
+\r
+#---------------------------------------------------------------------------\r
+# Project related configuration options\r
+#---------------------------------------------------------------------------\r
+\r
+# This tag specifies the encoding used for all characters in the config file \r
+# that follow. The default is UTF-8 which is also the encoding used for all \r
+# text before the first occurrence of this tag. Doxygen uses libiconv (or the \r
+# iconv built into libc) for the transcoding. See \r
+# http://www.gnu.org/software/libiconv for the list of possible encodings.\r
+\r
+DOXYFILE_ENCODING      = UTF-8\r
+\r
+# The PROJECT_NAME tag is a single word (or a sequence of words surrounded \r
+# by quotes) that should identify the project.\r
+\r
+PROJECT_NAME           = "LUFA Library - Dual CDC Device Demo"\r
+\r
+# The PROJECT_NUMBER tag can be used to enter a project or revision number. \r
+# This could be handy for archiving the generated documentation or \r
+# if some version control system is used.\r
+\r
+PROJECT_NUMBER         = 0.0.0\r
+\r
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) \r
+# base path where the generated documentation will be put. \r
+# If a relative path is entered, it will be relative to the location \r
+# where doxygen was started. If left blank the current directory will be used.\r
+\r
+OUTPUT_DIRECTORY       = ./Documentation/\r
+\r
+# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create \r
+# 4096 sub-directories (in 2 levels) under the output directory of each output \r
+# format and will distribute the generated files over these directories. \r
+# Enabling this option can be useful when feeding doxygen a huge amount of \r
+# source files, where putting all generated files in the same directory would \r
+# otherwise cause performance problems for the file system.\r
+\r
+CREATE_SUBDIRS         = YES\r
+\r
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all \r
+# documentation generated by doxygen is written. Doxygen will use this \r
+# information to generate all constant output in the proper language. \r
+# The default language is English, other supported languages are: \r
+# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, \r
+# Croatian, Czech, Danish, Dutch, Farsi, Finnish, French, German, Greek, \r
+# Hungarian, Italian, Japanese, Japanese-en (Japanese with English messages), \r
+# Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, Polish, \r
+# Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, Slovene, \r
+# Spanish, Swedish, and Ukrainian.\r
+\r
+OUTPUT_LANGUAGE        = English\r
+\r
+# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will \r
+# include brief member descriptions after the members that are listed in \r
+# the file and class documentation (similar to JavaDoc). \r
+# Set to NO to disable this.\r
+\r
+BRIEF_MEMBER_DESC      = YES\r
+\r
+# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend \r
+# the brief description of a member or function before the detailed description. \r
+# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the \r
+# brief descriptions will be completely suppressed.\r
+\r
+REPEAT_BRIEF           = YES\r
+\r
+# This tag implements a quasi-intelligent brief description abbreviator \r
+# that is used to form the text in various listings. Each string \r
+# in this list, if found as the leading text of the brief description, will be \r
+# stripped from the text and the result after processing the whole list, is \r
+# used as the annotated text. Otherwise, the brief description is used as-is. \r
+# If left blank, the following values are used ("$name" is automatically \r
+# replaced with the name of the entity): "The $name class" "The $name widget" \r
+# "The $name file" "is" "provides" "specifies" "contains" \r
+# "represents" "a" "an" "the"\r
+\r
+ABBREVIATE_BRIEF       = "The $name class" \\r
+                         "The $name widget" \\r
+                         "The $name file" \\r
+                         is \\r
+                         provides \\r
+                         specifies \\r
+                         contains \\r
+                         represents \\r
+                         a \\r
+                         an \\r
+                         the\r
+\r
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then \r
+# Doxygen will generate a detailed section even if there is only a brief \r
+# description.\r
+\r
+ALWAYS_DETAILED_SEC    = NO\r
+\r
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all \r
+# inherited members of a class in the documentation of that class as if those \r
+# members were ordinary class members. Constructors, destructors and assignment \r
+# operators of the base classes will not be shown.\r
+\r
+INLINE_INHERITED_MEMB  = NO\r
+\r
+# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full \r
+# path before files name in the file list and in the header files. If set \r
+# to NO the shortest path that makes the file name unique will be used.\r
+\r
+FULL_PATH_NAMES        = YES\r
+\r
+# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag \r
+# can be used to strip a user-defined part of the path. Stripping is \r
+# only done if one of the specified strings matches the left-hand part of \r
+# the path. The tag can be used to show relative paths in the file list. \r
+# If left blank the directory from which doxygen is run is used as the \r
+# path to strip.\r
+\r
+STRIP_FROM_PATH        = \r
+\r
+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of \r
+# the path mentioned in the documentation of a class, which tells \r
+# the reader which header file to include in order to use a class. \r
+# If left blank only the name of the header file containing the class \r
+# definition is used. Otherwise one should specify the include paths that \r
+# are normally passed to the compiler using the -I flag.\r
+\r
+STRIP_FROM_INC_PATH    = \r
+\r
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter \r
+# (but less readable) file names. This can be useful is your file systems \r
+# doesn't support long names like on DOS, Mac, or CD-ROM.\r
+\r
+SHORT_NAMES            = YES\r
+\r
+# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen \r
+# will interpret the first line (until the first dot) of a JavaDoc-style \r
+# comment as the brief description. If set to NO, the JavaDoc \r
+# comments will behave just like regular Qt-style comments \r
+# (thus requiring an explicit @brief command for a brief description.)\r
+\r
+JAVADOC_AUTOBRIEF      = NO\r
+\r
+# If the QT_AUTOBRIEF tag is set to YES then Doxygen will \r
+# interpret the first line (until the first dot) of a Qt-style \r
+# comment as the brief description. If set to NO, the comments \r
+# will behave just like regular Qt-style comments (thus requiring \r
+# an explicit \brief command for a brief description.)\r
+\r
+QT_AUTOBRIEF           = NO\r
+\r
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen \r
+# treat a multi-line C++ special comment block (i.e. a block of //! or /// \r
+# comments) as a brief description. This used to be the default behaviour. \r
+# The new default is to treat a multi-line C++ comment block as a detailed \r
+# description. Set this tag to YES if you prefer the old behaviour instead.\r
+\r
+MULTILINE_CPP_IS_BRIEF = NO\r
+\r
+# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented \r
+# member inherits the documentation from any documented member that it \r
+# re-implements.\r
+\r
+INHERIT_DOCS           = YES\r
+\r
+# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce \r
+# a new page for each member. If set to NO, the documentation of a member will \r
+# be part of the file/class/namespace that contains it.\r
+\r
+SEPARATE_MEMBER_PAGES  = NO\r
+\r
+# The TAB_SIZE tag can be used to set the number of spaces in a tab. \r
+# Doxygen uses this value to replace tabs by spaces in code fragments.\r
+\r
+TAB_SIZE               = 4\r
+\r
+# This tag can be used to specify a number of aliases that acts \r
+# as commands in the documentation. An alias has the form "name=value". \r
+# For example adding "sideeffect=\par Side Effects:\n" will allow you to \r
+# put the command \sideeffect (or @sideeffect) in the documentation, which \r
+# will result in a user-defined paragraph with heading "Side Effects:". \r
+# You can put \n's in the value part of an alias to insert newlines.\r
+\r
+ALIASES                = \r
+\r
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C \r
+# sources only. Doxygen will then generate output that is more tailored for C. \r
+# For instance, some of the names that are used will be different. The list \r
+# of all members will be omitted, etc.\r
+\r
+OPTIMIZE_OUTPUT_FOR_C  = YES\r
+\r
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java \r
+# sources only. Doxygen will then generate output that is more tailored for \r
+# Java. For instance, namespaces will be presented as packages, qualified \r
+# scopes will look different, etc.\r
+\r
+OPTIMIZE_OUTPUT_JAVA   = NO\r
+\r
+# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran \r
+# sources only. Doxygen will then generate output that is more tailored for \r
+# Fortran.\r
+\r
+OPTIMIZE_FOR_FORTRAN   = NO\r
+\r
+# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL \r
+# sources. Doxygen will then generate output that is tailored for \r
+# VHDL.\r
+\r
+OPTIMIZE_OUTPUT_VHDL   = NO\r
+\r
+# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want \r
+# to include (a tag file for) the STL sources as input, then you should \r
+# set this tag to YES in order to let doxygen match functions declarations and \r
+# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. \r
+# func(std::string) {}). This also make the inheritance and collaboration \r
+# diagrams that involve STL classes more complete and accurate.\r
+\r
+BUILTIN_STL_SUPPORT    = NO\r
+\r
+# If you use Microsoft's C++/CLI language, you should set this option to YES to\r
+# enable parsing support.\r
+\r
+CPP_CLI_SUPPORT        = NO\r
+\r
+# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. \r
+# Doxygen will parse them like normal C++ but will assume all classes use public \r
+# instead of private inheritance when no explicit protection keyword is present.\r
+\r
+SIP_SUPPORT            = NO\r
+\r
+# For Microsoft's IDL there are propget and propput attributes to indicate getter \r
+# and setter methods for a property. Setting this option to YES (the default) \r
+# will make doxygen to replace the get and set methods by a property in the \r
+# documentation. This will only work if the methods are indeed getting or \r
+# setting a simple type. If this is not the case, or you want to show the \r
+# methods anyway, you should set this option to NO.\r
+\r
+IDL_PROPERTY_SUPPORT   = YES\r
+\r
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC \r
+# tag is set to YES, then doxygen will reuse the documentation of the first \r
+# member in the group (if any) for the other members of the group. By default \r
+# all members of a group must be documented explicitly.\r
+\r
+DISTRIBUTE_GROUP_DOC   = NO\r
+\r
+# Set the SUBGROUPING tag to YES (the default) to allow class member groups of \r
+# the same type (for instance a group of public functions) to be put as a \r
+# subgroup of that type (e.g. under the Public Functions section). Set it to \r
+# NO to prevent subgrouping. Alternatively, this can be done per class using \r
+# the \nosubgrouping command.\r
+\r
+SUBGROUPING            = YES\r
+\r
+# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum \r
+# is documented as struct, union, or enum with the name of the typedef. So \r
+# typedef struct TypeS {} TypeT, will appear in the documentation as a struct \r
+# with name TypeT. When disabled the typedef will appear as a member of a file, \r
+# namespace, or class. And the struct will be named TypeS. This can typically \r
+# be useful for C code in case the coding convention dictates that all compound \r
+# types are typedef'ed and only the typedef is referenced, never the tag name.\r
+\r
+TYPEDEF_HIDES_STRUCT   = NO\r
+\r
+# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to \r
+# determine which symbols to keep in memory and which to flush to disk.\r
+# When the cache is full, less often used symbols will be written to disk.\r
+# For small to medium size projects (<1000 input files) the default value is \r
+# probably good enough. For larger projects a too small cache size can cause \r
+# doxygen to be busy swapping symbols to and from disk most of the time \r
+# causing a significant performance penality. \r
+# If the system has enough physical memory increasing the cache will improve the \r
+# performance by keeping more symbols in memory. Note that the value works on \r
+# a logarithmic scale so increasing the size by one will rougly double the \r
+# memory usage. The cache size is given by this formula: \r
+# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, \r
+# corresponding to a cache size of 2^16 = 65536 symbols\r
+\r
+SYMBOL_CACHE_SIZE      = 0\r
+\r
+#---------------------------------------------------------------------------\r
+# Build related configuration options\r
+#---------------------------------------------------------------------------\r
+\r
+# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in \r
+# documentation are documented, even if no documentation was available. \r
+# Private class members and static file members will be hidden unless \r
+# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES\r
+\r
+EXTRACT_ALL            = YES\r
+\r
+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class \r
+# will be included in the documentation.\r
+\r
+EXTRACT_PRIVATE        = YES\r
+\r
+# If the EXTRACT_STATIC tag is set to YES all static members of a file \r
+# will be included in the documentation.\r
+\r
+EXTRACT_STATIC         = YES\r
+\r
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) \r
+# defined locally in source files will be included in the documentation. \r
+# If set to NO only classes defined in header files are included.\r
+\r
+EXTRACT_LOCAL_CLASSES  = YES\r
+\r
+# This flag is only useful for Objective-C code. When set to YES local \r
+# methods, which are defined in the implementation section but not in \r
+# the interface are included in the documentation. \r
+# If set to NO (the default) only methods in the interface are included.\r
+\r
+EXTRACT_LOCAL_METHODS  = NO\r
+\r
+# If this flag is set to YES, the members of anonymous namespaces will be \r
+# extracted and appear in the documentation as a namespace called \r
+# 'anonymous_namespace{file}', where file will be replaced with the base \r
+# name of the file that contains the anonymous namespace. By default \r
+# anonymous namespace are hidden.\r
+\r
+EXTRACT_ANON_NSPACES   = NO\r
+\r
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all \r
+# undocumented members of documented classes, files or namespaces. \r
+# If set to NO (the default) these members will be included in the \r
+# various overviews, but no documentation section is generated. \r
+# This option has no effect if EXTRACT_ALL is enabled.\r
+\r
+HIDE_UNDOC_MEMBERS     = NO\r
+\r
+# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all \r
+# undocumented classes that are normally visible in the class hierarchy. \r
+# If set to NO (the default) these classes will be included in the various \r
+# overviews. This option has no effect if EXTRACT_ALL is enabled.\r
+\r
+HIDE_UNDOC_CLASSES     = NO\r
+\r
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all \r
+# friend (class|struct|union) declarations. \r
+# If set to NO (the default) these declarations will be included in the \r
+# documentation.\r
+\r
+HIDE_FRIEND_COMPOUNDS  = NO\r
+\r
+# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any \r
+# documentation blocks found inside the body of a function. \r
+# If set to NO (the default) these blocks will be appended to the \r
+# function's detailed documentation block.\r
+\r
+HIDE_IN_BODY_DOCS      = NO\r
+\r
+# The INTERNAL_DOCS tag determines if documentation \r
+# that is typed after a \internal command is included. If the tag is set \r
+# to NO (the default) then the documentation will be excluded. \r
+# Set it to YES to include the internal documentation.\r
+\r
+INTERNAL_DOCS          = NO\r
+\r
+# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate \r
+# file names in lower-case letters. If set to YES upper-case letters are also \r
+# allowed. This is useful if you have classes or files whose names only differ \r
+# in case and if your file system supports case sensitive file names. Windows \r
+# and Mac users are advised to set this option to NO.\r
+\r
+CASE_SENSE_NAMES       = NO\r
+\r
+# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen \r
+# will show members with their full class and namespace scopes in the \r
+# documentation. If set to YES the scope will be hidden.\r
+\r
+HIDE_SCOPE_NAMES       = NO\r
+\r
+# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen \r
+# will put a list of the files that are included by a file in the documentation \r
+# of that file.\r
+\r
+SHOW_INCLUDE_FILES     = YES\r
+\r
+# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] \r
+# is inserted in the documentation for inline members.\r
+\r
+INLINE_INFO            = YES\r
+\r
+# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen \r
+# will sort the (detailed) documentation of file and class members \r
+# alphabetically by member name. If set to NO the members will appear in \r
+# declaration order.\r
+\r
+SORT_MEMBER_DOCS       = YES\r
+\r
+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the \r
+# brief documentation of file, namespace and class members alphabetically \r
+# by member name. If set to NO (the default) the members will appear in \r
+# declaration order.\r
+\r
+SORT_BRIEF_DOCS        = NO\r
+\r
+# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the \r
+# hierarchy of group names into alphabetical order. If set to NO (the default) \r
+# the group names will appear in their defined order.\r
+\r
+SORT_GROUP_NAMES       = NO\r
+\r
+# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be \r
+# sorted by fully-qualified names, including namespaces. If set to \r
+# NO (the default), the class list will be sorted only by class name, \r
+# not including the namespace part. \r
+# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.\r
+# Note: This option applies only to the class list, not to the \r
+# alphabetical list.\r
+\r
+SORT_BY_SCOPE_NAME     = NO\r
+\r
+# The GENERATE_TODOLIST tag can be used to enable (YES) or \r
+# disable (NO) the todo list. This list is created by putting \todo \r
+# commands in the documentation.\r
+\r
+GENERATE_TODOLIST      = NO\r
+\r
+# The GENERATE_TESTLIST tag can be used to enable (YES) or \r
+# disable (NO) the test list. This list is created by putting \test \r
+# commands in the documentation.\r
+\r
+GENERATE_TESTLIST      = NO\r
+\r
+# The GENERATE_BUGLIST tag can be used to enable (YES) or \r
+# disable (NO) the bug list. This list is created by putting \bug \r
+# commands in the documentation.\r
+\r
+GENERATE_BUGLIST       = NO\r
+\r
+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or \r
+# disable (NO) the deprecated list. This list is created by putting \r
+# \deprecated commands in the documentation.\r
+\r
+GENERATE_DEPRECATEDLIST= YES\r
+\r
+# The ENABLED_SECTIONS tag can be used to enable conditional \r
+# documentation sections, marked by \if sectionname ... \endif.\r
+\r
+ENABLED_SECTIONS       = \r
+\r
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines \r
+# the initial value of a variable or define consists of for it to appear in \r
+# the documentation. If the initializer consists of more lines than specified \r
+# here it will be hidden. Use a value of 0 to hide initializers completely. \r
+# The appearance of the initializer of individual variables and defines in the \r
+# documentation can be controlled using \showinitializer or \hideinitializer \r
+# command in the documentation regardless of this setting.\r
+\r
+MAX_INITIALIZER_LINES  = 30\r
+\r
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated \r
+# at the bottom of the documentation of classes and structs. If set to YES the \r
+# list will mention the files that were used to generate the documentation.\r
+\r
+SHOW_USED_FILES        = YES\r
+\r
+# If the sources in your project are distributed over multiple directories \r
+# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy \r
+# in the documentation. The default is NO.\r
+\r
+SHOW_DIRECTORIES       = YES\r
+\r
+# Set the SHOW_FILES tag to NO to disable the generation of the Files page.\r
+# This will remove the Files entry from the Quick Index and from the \r
+# Folder Tree View (if specified). The default is YES.\r
+\r
+SHOW_FILES             = YES\r
+\r
+# Set the SHOW_NAMESPACES tag to NO to disable the generation of the \r
+# Namespaces page.  This will remove the Namespaces entry from the Quick Index\r
+# and from the Folder Tree View (if specified). The default is YES.\r
+\r
+SHOW_NAMESPACES        = YES\r
+\r
+# The FILE_VERSION_FILTER tag can be used to specify a program or script that \r
+# doxygen should invoke to get the current version for each file (typically from \r
+# the version control system). Doxygen will invoke the program by executing (via \r
+# popen()) the command <command> <input-file>, where <command> is the value of \r
+# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file \r
+# provided by doxygen. Whatever the program writes to standard output \r
+# is used as the file version. See the manual for examples.\r
+\r
+FILE_VERSION_FILTER    = \r
+\r
+# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by \r
+# doxygen. The layout file controls the global structure of the generated output files \r
+# in an output format independent way. The create the layout file that represents \r
+# doxygen's defaults, run doxygen with the -l option. You can optionally specify a \r
+# file name after the option, if omitted DoxygenLayout.xml will be used as the name \r
+# of the layout file.\r
+\r
+LAYOUT_FILE            = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to warning and progress messages\r
+#---------------------------------------------------------------------------\r
+\r
+# The QUIET tag can be used to turn on/off the messages that are generated \r
+# by doxygen. Possible values are YES and NO. If left blank NO is used.\r
+\r
+QUIET                  = YES\r
+\r
+# The WARNINGS tag can be used to turn on/off the warning messages that are \r
+# generated by doxygen. Possible values are YES and NO. If left blank \r
+# NO is used.\r
+\r
+WARNINGS               = YES\r
+\r
+# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings \r
+# for undocumented members. If EXTRACT_ALL is set to YES then this flag will \r
+# automatically be disabled.\r
+\r
+WARN_IF_UNDOCUMENTED   = YES\r
+\r
+# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for \r
+# potential errors in the documentation, such as not documenting some \r
+# parameters in a documented function, or documenting parameters that \r
+# don't exist or using markup commands wrongly.\r
+\r
+WARN_IF_DOC_ERROR      = YES\r
+\r
+# This WARN_NO_PARAMDOC option can be abled to get warnings for \r
+# functions that are documented, but have no documentation for their parameters \r
+# or return value. If set to NO (the default) doxygen will only warn about \r
+# wrong or incomplete parameter documentation, but not about the absence of \r
+# documentation.\r
+\r
+WARN_NO_PARAMDOC       = YES\r
+\r
+# The WARN_FORMAT tag determines the format of the warning messages that \r
+# doxygen can produce. The string should contain the $file, $line, and $text \r
+# tags, which will be replaced by the file and line number from which the \r
+# warning originated and the warning text. Optionally the format may contain \r
+# $version, which will be replaced by the version of the file (if it could \r
+# be obtained via FILE_VERSION_FILTER)\r
+\r
+WARN_FORMAT            = "$file:$line: $text"\r
+\r
+# The WARN_LOGFILE tag can be used to specify a file to which warning \r
+# and error messages should be written. If left blank the output is written \r
+# to stderr.\r
+\r
+WARN_LOGFILE           = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the input files\r
+#---------------------------------------------------------------------------\r
+\r
+# The INPUT tag can be used to specify the files and/or directories that contain \r
+# documented source files. You may enter file names like "myfile.cpp" or \r
+# directories like "/usr/src/myproject". Separate the files or directories \r
+# with spaces.\r
+\r
+INPUT                  = ./\r
+\r
+# This tag can be used to specify the character encoding of the source files \r
+# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is \r
+# also the default input encoding. Doxygen uses libiconv (or the iconv built \r
+# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for \r
+# the list of possible encodings.\r
+\r
+INPUT_ENCODING         = UTF-8\r
+\r
+# If the value of the INPUT tag contains directories, you can use the \r
+# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \r
+# and *.h) to filter out the source-files in the directories. If left \r
+# blank the following patterns are tested: \r
+# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx \r
+# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90\r
+\r
+FILE_PATTERNS          = *.h \\r
+                         *.c \\r
+                                                *.txt\r
+\r
+# The RECURSIVE tag can be used to turn specify whether or not subdirectories \r
+# should be searched for input files as well. Possible values are YES and NO. \r
+# If left blank NO is used.\r
+\r
+RECURSIVE              = YES\r
+\r
+# The EXCLUDE tag can be used to specify files and/or directories that should \r
+# excluded from the INPUT source files. This way you can easily exclude a \r
+# subdirectory from a directory tree whose root is specified with the INPUT tag.\r
+\r
+EXCLUDE                = \r
+\r
+# The EXCLUDE_SYMLINKS tag can be used select whether or not files or \r
+# directories that are symbolic links (a Unix filesystem feature) are excluded \r
+# from the input.\r
+\r
+EXCLUDE_SYMLINKS       = NO\r
+\r
+# If the value of the INPUT tag contains directories, you can use the \r
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude \r
+# certain files from those directories. Note that the wildcards are matched \r
+# against the file with absolute path, so to exclude all test directories \r
+# for example use the pattern */test/*\r
+\r
+EXCLUDE_PATTERNS       = */LowLevel/USBMode.h\r
+\r
+# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names \r
+# (namespaces, classes, functions, etc.) that should be excluded from the \r
+# output. The symbol name can be a fully qualified name, a word, or if the \r
+# wildcard * is used, a substring. Examples: ANamespace, AClass, \r
+# AClass::ANamespace, ANamespace::*Test\r
+\r
+EXCLUDE_SYMBOLS        = __*\r
+\r
+# The EXAMPLE_PATH tag can be used to specify one or more files or \r
+# directories that contain example code fragments that are included (see \r
+# the \include command).\r
+\r
+EXAMPLE_PATH           = \r
+\r
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the \r
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \r
+# and *.h) to filter out the source-files in the directories. If left \r
+# blank all files are included.\r
+\r
+EXAMPLE_PATTERNS       = *\r
+\r
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be \r
+# searched for input files to be used with the \include or \dontinclude \r
+# commands irrespective of the value of the RECURSIVE tag. \r
+# Possible values are YES and NO. If left blank NO is used.\r
+\r
+EXAMPLE_RECURSIVE      = NO\r
+\r
+# The IMAGE_PATH tag can be used to specify one or more files or \r
+# directories that contain image that are included in the documentation (see \r
+# the \image command).\r
+\r
+IMAGE_PATH             = \r
+\r
+# The INPUT_FILTER tag can be used to specify a program that doxygen should \r
+# invoke to filter for each input file. Doxygen will invoke the filter program \r
+# by executing (via popen()) the command <filter> <input-file>, where <filter> \r
+# is the value of the INPUT_FILTER tag, and <input-file> is the name of an \r
+# input file. Doxygen will then use the output that the filter program writes \r
+# to standard output.  If FILTER_PATTERNS is specified, this tag will be \r
+# ignored.\r
+\r
+INPUT_FILTER           = \r
+\r
+# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern \r
+# basis.  Doxygen will compare the file name with each pattern and apply the \r
+# filter if there is a match.  The filters are a list of the form: \r
+# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further \r
+# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER \r
+# is applied to all files.\r
+\r
+FILTER_PATTERNS        = \r
+\r
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using \r
+# INPUT_FILTER) will be used to filter the input files when producing source \r
+# files to browse (i.e. when SOURCE_BROWSER is set to YES).\r
+\r
+FILTER_SOURCE_FILES    = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to source browsing\r
+#---------------------------------------------------------------------------\r
+\r
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will \r
+# be generated. Documented entities will be cross-referenced with these sources. \r
+# Note: To get rid of all source code in the generated output, make sure also \r
+# VERBATIM_HEADERS is set to NO.\r
+\r
+SOURCE_BROWSER         = NO\r
+\r
+# Setting the INLINE_SOURCES tag to YES will include the body \r
+# of functions and classes directly in the documentation.\r
+\r
+INLINE_SOURCES         = NO\r
+\r
+# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct \r
+# doxygen to hide any special comment blocks from generated source code \r
+# fragments. Normal C and C++ comments will always remain visible.\r
+\r
+STRIP_CODE_COMMENTS    = YES\r
+\r
+# If the REFERENCED_BY_RELATION tag is set to YES \r
+# then for each documented function all documented \r
+# functions referencing it will be listed.\r
+\r
+REFERENCED_BY_RELATION = NO\r
+\r
+# If the REFERENCES_RELATION tag is set to YES \r
+# then for each documented function all documented entities \r
+# called/used by that function will be listed.\r
+\r
+REFERENCES_RELATION    = NO\r
+\r
+# If the REFERENCES_LINK_SOURCE tag is set to YES (the default)\r
+# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from\r
+# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will\r
+# link to the source code.  Otherwise they will link to the documentstion.\r
+\r
+REFERENCES_LINK_SOURCE = NO\r
+\r
+# If the USE_HTAGS tag is set to YES then the references to source code \r
+# will point to the HTML generated by the htags(1) tool instead of doxygen \r
+# built-in source browser. The htags tool is part of GNU's global source \r
+# tagging system (see http://www.gnu.org/software/global/global.html). You \r
+# will need version 4.8.6 or higher.\r
+\r
+USE_HTAGS              = NO\r
+\r
+# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen \r
+# will generate a verbatim copy of the header file for each class for \r
+# which an include is specified. Set to NO to disable this.\r
+\r
+VERBATIM_HEADERS       = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the alphabetical class index\r
+#---------------------------------------------------------------------------\r
+\r
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index \r
+# of all compounds will be generated. Enable this if the project \r
+# contains a lot of classes, structs, unions or interfaces.\r
+\r
+ALPHABETICAL_INDEX     = YES\r
+\r
+# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then \r
+# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns \r
+# in which this list will be split (can be a number in the range [1..20])\r
+\r
+COLS_IN_ALPHA_INDEX    = 5\r
+\r
+# In case all classes in a project start with a common prefix, all \r
+# classes will be put under the same header in the alphabetical index. \r
+# The IGNORE_PREFIX tag can be used to specify one or more prefixes that \r
+# should be ignored while generating the index headers.\r
+\r
+IGNORE_PREFIX          = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the HTML output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_HTML tag is set to YES (the default) Doxygen will \r
+# generate HTML output.\r
+\r
+GENERATE_HTML          = YES\r
+\r
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `html' will be used as the default path.\r
+\r
+HTML_OUTPUT            = html\r
+\r
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for \r
+# each generated HTML page (for example: .htm,.php,.asp). If it is left blank \r
+# doxygen will generate files with .html extension.\r
+\r
+HTML_FILE_EXTENSION    = .html\r
+\r
+# The HTML_HEADER tag can be used to specify a personal HTML header for \r
+# each generated HTML page. If it is left blank doxygen will generate a \r
+# standard header.\r
+\r
+HTML_HEADER            = \r
+\r
+# The HTML_FOOTER tag can be used to specify a personal HTML footer for \r
+# each generated HTML page. If it is left blank doxygen will generate a \r
+# standard footer.\r
+\r
+HTML_FOOTER            = \r
+\r
+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading \r
+# style sheet that is used by each HTML page. It can be used to \r
+# fine-tune the look of the HTML output. If the tag is left blank doxygen \r
+# will generate a default style sheet. Note that doxygen will try to copy \r
+# the style sheet file to the HTML output directory, so don't put your own \r
+# stylesheet in the HTML output directory as well, or it will be erased!\r
+\r
+HTML_STYLESHEET        = \r
+\r
+# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, \r
+# files or namespaces will be aligned in HTML using tables. If set to \r
+# NO a bullet list will be used.\r
+\r
+HTML_ALIGN_MEMBERS     = YES\r
+\r
+# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML \r
+# documentation will contain sections that can be hidden and shown after the \r
+# page has loaded. For this to work a browser that supports \r
+# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox \r
+# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari).\r
+\r
+HTML_DYNAMIC_SECTIONS  = YES\r
+\r
+# If the GENERATE_DOCSET tag is set to YES, additional index files \r
+# will be generated that can be used as input for Apple's Xcode 3 \r
+# integrated development environment, introduced with OSX 10.5 (Leopard). \r
+# To create a documentation set, doxygen will generate a Makefile in the \r
+# HTML output directory. Running make will produce the docset in that \r
+# directory and running "make install" will install the docset in \r
+# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find \r
+# it at startup. \r
+# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information.\r
+\r
+GENERATE_DOCSET        = NO\r
+\r
+# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the \r
+# feed. A documentation feed provides an umbrella under which multiple \r
+# documentation sets from a single provider (such as a company or product suite) \r
+# can be grouped.\r
+\r
+DOCSET_FEEDNAME        = "Doxygen generated docs"\r
+\r
+# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that \r
+# should uniquely identify the documentation set bundle. This should be a \r
+# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen \r
+# will append .docset to the name.\r
+\r
+DOCSET_BUNDLE_ID       = org.doxygen.Project\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, additional index files \r
+# will be generated that can be used as input for tools like the \r
+# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) \r
+# of the generated HTML documentation.\r
+\r
+GENERATE_HTMLHELP      = NO\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can \r
+# be used to specify the file name of the resulting .chm file. You \r
+# can add a path in front of the file if the result should not be \r
+# written to the html output directory.\r
+\r
+CHM_FILE               = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can \r
+# be used to specify the location (absolute path including file name) of \r
+# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run \r
+# the HTML help compiler on the generated index.hhp.\r
+\r
+HHC_LOCATION           = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag \r
+# controls if a separate .chi index file is generated (YES) or that \r
+# it should be included in the master .chm file (NO).\r
+\r
+GENERATE_CHI           = NO\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING\r
+# is used to encode HtmlHelp index (hhk), content (hhc) and project file\r
+# content.\r
+\r
+CHM_INDEX_ENCODING     = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag \r
+# controls whether a binary table of contents is generated (YES) or a \r
+# normal table of contents (NO) in the .chm file.\r
+\r
+BINARY_TOC             = NO\r
+\r
+# The TOC_EXPAND flag can be set to YES to add extra items for group members \r
+# to the contents of the HTML help documentation and to the tree view.\r
+\r
+TOC_EXPAND             = YES\r
+\r
+# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER \r
+# are set, an additional index file will be generated that can be used as input for \r
+# Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated \r
+# HTML documentation.\r
+\r
+GENERATE_QHP           = NO\r
+\r
+# If the QHG_LOCATION tag is specified, the QCH_FILE tag can \r
+# be used to specify the file name of the resulting .qch file. \r
+# The path specified is relative to the HTML output folder.\r
+\r
+QCH_FILE               = \r
+\r
+# The QHP_NAMESPACE tag specifies the namespace to use when generating \r
+# Qt Help Project output. For more information please see \r
+# <a href="http://doc.trolltech.com/qthelpproject.html#namespace">Qt Help Project / Namespace</a>.\r
+\r
+QHP_NAMESPACE          = org.doxygen.Project\r
+\r
+# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating \r
+# Qt Help Project output. For more information please see \r
+# <a href="http://doc.trolltech.com/qthelpproject.html#virtual-folders">Qt Help Project / Virtual Folders</a>.\r
+\r
+QHP_VIRTUAL_FOLDER     = doc\r
+\r
+# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can \r
+# be used to specify the location of Qt's qhelpgenerator. \r
+# If non-empty doxygen will try to run qhelpgenerator on the generated \r
+# .qhp file .\r
+\r
+QHG_LOCATION           = \r
+\r
+# The DISABLE_INDEX tag can be used to turn on/off the condensed index at \r
+# top of each HTML page. The value NO (the default) enables the index and \r
+# the value YES disables it.\r
+\r
+DISABLE_INDEX          = NO\r
+\r
+# This tag can be used to set the number of enum values (range [1..20]) \r
+# that doxygen will group on one line in the generated HTML documentation.\r
+\r
+ENUM_VALUES_PER_LINE   = 1\r
+\r
+# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index\r
+# structure should be generated to display hierarchical information.\r
+# If the tag value is set to FRAME, a side panel will be generated\r
+# containing a tree-like index structure (just like the one that \r
+# is generated for HTML Help). For this to work a browser that supports \r
+# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, \r
+# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are \r
+# probably better off using the HTML help feature. Other possible values \r
+# for this tag are: HIERARCHIES, which will generate the Groups, Directories,\r
+# and Class Hierarchy pages using a tree view instead of an ordered list;\r
+# ALL, which combines the behavior of FRAME and HIERARCHIES; and NONE, which\r
+# disables this behavior completely. For backwards compatibility with previous\r
+# releases of Doxygen, the values YES and NO are equivalent to FRAME and NONE\r
+# respectively.\r
+\r
+GENERATE_TREEVIEW      = YES\r
+\r
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be \r
+# used to set the initial width (in pixels) of the frame in which the tree \r
+# is shown.\r
+\r
+TREEVIEW_WIDTH         = 250\r
+\r
+# Use this tag to change the font size of Latex formulas included \r
+# as images in the HTML documentation. The default is 10. Note that \r
+# when you change the font size after a successful doxygen run you need \r
+# to manually remove any form_*.png images from the HTML output directory \r
+# to force them to be regenerated.\r
+\r
+FORMULA_FONTSIZE       = 10\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the LaTeX output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will \r
+# generate Latex output.\r
+\r
+GENERATE_LATEX         = NO\r
+\r
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `latex' will be used as the default path.\r
+\r
+LATEX_OUTPUT           = latex\r
+\r
+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be \r
+# invoked. If left blank `latex' will be used as the default command name.\r
+\r
+LATEX_CMD_NAME         = latex\r
+\r
+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to \r
+# generate index for LaTeX. If left blank `makeindex' will be used as the \r
+# default command name.\r
+\r
+MAKEINDEX_CMD_NAME     = makeindex\r
+\r
+# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact \r
+# LaTeX documents. This may be useful for small projects and may help to \r
+# save some trees in general.\r
+\r
+COMPACT_LATEX          = NO\r
+\r
+# The PAPER_TYPE tag can be used to set the paper type that is used \r
+# by the printer. Possible values are: a4, a4wide, letter, legal and \r
+# executive. If left blank a4wide will be used.\r
+\r
+PAPER_TYPE             = a4wide\r
+\r
+# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX \r
+# packages that should be included in the LaTeX output.\r
+\r
+EXTRA_PACKAGES         = \r
+\r
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for \r
+# the generated latex document. The header should contain everything until \r
+# the first chapter. If it is left blank doxygen will generate a \r
+# standard header. Notice: only use this tag if you know what you are doing!\r
+\r
+LATEX_HEADER           = \r
+\r
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated \r
+# is prepared for conversion to pdf (using ps2pdf). The pdf file will \r
+# contain links (just like the HTML output) instead of page references \r
+# This makes the output suitable for online browsing using a pdf viewer.\r
+\r
+PDF_HYPERLINKS         = YES\r
+\r
+# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of \r
+# plain latex in the generated Makefile. Set this option to YES to get a \r
+# higher quality PDF documentation.\r
+\r
+USE_PDFLATEX           = YES\r
+\r
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. \r
+# command to the generated LaTeX files. This will instruct LaTeX to keep \r
+# running if errors occur, instead of asking the user for help. \r
+# This option is also used when generating formulas in HTML.\r
+\r
+LATEX_BATCHMODE        = NO\r
+\r
+# If LATEX_HIDE_INDICES is set to YES then doxygen will not \r
+# include the index chapters (such as File Index, Compound Index, etc.) \r
+# in the output.\r
+\r
+LATEX_HIDE_INDICES     = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the RTF output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output \r
+# The RTF output is optimized for Word 97 and may not look very pretty with \r
+# other RTF readers or editors.\r
+\r
+GENERATE_RTF           = NO\r
+\r
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `rtf' will be used as the default path.\r
+\r
+RTF_OUTPUT             = rtf\r
+\r
+# If the COMPACT_RTF tag is set to YES Doxygen generates more compact \r
+# RTF documents. This may be useful for small projects and may help to \r
+# save some trees in general.\r
+\r
+COMPACT_RTF            = NO\r
+\r
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated \r
+# will contain hyperlink fields. The RTF file will \r
+# contain links (just like the HTML output) instead of page references. \r
+# This makes the output suitable for online browsing using WORD or other \r
+# programs which support those fields. \r
+# Note: wordpad (write) and others do not support links.\r
+\r
+RTF_HYPERLINKS         = NO\r
+\r
+# Load stylesheet definitions from file. Syntax is similar to doxygen's \r
+# config file, i.e. a series of assignments. You only have to provide \r
+# replacements, missing definitions are set to their default value.\r
+\r
+RTF_STYLESHEET_FILE    = \r
+\r
+# Set optional variables used in the generation of an rtf document. \r
+# Syntax is similar to doxygen's config file.\r
+\r
+RTF_EXTENSIONS_FILE    = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the man page output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_MAN tag is set to YES (the default) Doxygen will \r
+# generate man pages\r
+\r
+GENERATE_MAN           = NO\r
+\r
+# The MAN_OUTPUT tag is used to specify where the man pages will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `man' will be used as the default path.\r
+\r
+MAN_OUTPUT             = man\r
+\r
+# The MAN_EXTENSION tag determines the extension that is added to \r
+# the generated man pages (default is the subroutine's section .3)\r
+\r
+MAN_EXTENSION          = .3\r
+\r
+# If the MAN_LINKS tag is set to YES and Doxygen generates man output, \r
+# then it will generate one additional man file for each entity \r
+# documented in the real man page(s). These additional files \r
+# only source the real man page, but without them the man command \r
+# would be unable to find the correct page. The default is NO.\r
+\r
+MAN_LINKS              = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the XML output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_XML tag is set to YES Doxygen will \r
+# generate an XML file that captures the structure of \r
+# the code including all documentation.\r
+\r
+GENERATE_XML           = NO\r
+\r
+# The XML_OUTPUT tag is used to specify where the XML pages will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `xml' will be used as the default path.\r
+\r
+XML_OUTPUT             = xml\r
+\r
+# The XML_SCHEMA tag can be used to specify an XML schema, \r
+# which can be used by a validating XML parser to check the \r
+# syntax of the XML files.\r
+\r
+XML_SCHEMA             = \r
+\r
+# The XML_DTD tag can be used to specify an XML DTD, \r
+# which can be used by a validating XML parser to check the \r
+# syntax of the XML files.\r
+\r
+XML_DTD                = \r
+\r
+# If the XML_PROGRAMLISTING tag is set to YES Doxygen will \r
+# dump the program listings (including syntax highlighting \r
+# and cross-referencing information) to the XML output. Note that \r
+# enabling this will significantly increase the size of the XML output.\r
+\r
+XML_PROGRAMLISTING     = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options for the AutoGen Definitions output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will \r
+# generate an AutoGen Definitions (see autogen.sf.net) file \r
+# that captures the structure of the code including all \r
+# documentation. Note that this feature is still experimental \r
+# and incomplete at the moment.\r
+\r
+GENERATE_AUTOGEN_DEF   = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the Perl module output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_PERLMOD tag is set to YES Doxygen will \r
+# generate a Perl module file that captures the structure of \r
+# the code including all documentation. Note that this \r
+# feature is still experimental and incomplete at the \r
+# moment.\r
+\r
+GENERATE_PERLMOD       = NO\r
+\r
+# If the PERLMOD_LATEX tag is set to YES Doxygen will generate \r
+# the necessary Makefile rules, Perl scripts and LaTeX code to be able \r
+# to generate PDF and DVI output from the Perl module output.\r
+\r
+PERLMOD_LATEX          = NO\r
+\r
+# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be \r
+# nicely formatted so it can be parsed by a human reader.  This is useful \r
+# if you want to understand what is going on.  On the other hand, if this \r
+# tag is set to NO the size of the Perl module output will be much smaller \r
+# and Perl will parse it just the same.\r
+\r
+PERLMOD_PRETTY         = YES\r
+\r
+# The names of the make variables in the generated doxyrules.make file \r
+# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. \r
+# This is useful so different doxyrules.make files included by the same \r
+# Makefile don't overwrite each other's variables.\r
+\r
+PERLMOD_MAKEVAR_PREFIX = \r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration options related to the preprocessor   \r
+#---------------------------------------------------------------------------\r
+\r
+# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will \r
+# evaluate all C-preprocessor directives found in the sources and include \r
+# files.\r
+\r
+ENABLE_PREPROCESSING   = YES\r
+\r
+# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro \r
+# names in the source code. If set to NO (the default) only conditional \r
+# compilation will be performed. Macro expansion can be done in a controlled \r
+# way by setting EXPAND_ONLY_PREDEF to YES.\r
+\r
+MACRO_EXPANSION        = YES\r
+\r
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES \r
+# then the macro expansion is limited to the macros specified with the \r
+# PREDEFINED and EXPAND_AS_DEFINED tags.\r
+\r
+EXPAND_ONLY_PREDEF     = YES\r
+\r
+# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files \r
+# in the INCLUDE_PATH (see below) will be search if a #include is found.\r
+\r
+SEARCH_INCLUDES        = YES\r
+\r
+# The INCLUDE_PATH tag can be used to specify one or more directories that \r
+# contain include files that are not input files but should be processed by \r
+# the preprocessor.\r
+\r
+INCLUDE_PATH           = \r
+\r
+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard \r
+# patterns (like *.h and *.hpp) to filter out the header-files in the \r
+# directories. If left blank, the patterns specified with FILE_PATTERNS will \r
+# be used.\r
+\r
+INCLUDE_FILE_PATTERNS  = \r
+\r
+# The PREDEFINED tag can be used to specify one or more macro names that \r
+# are defined before the preprocessor is started (similar to the -D option of \r
+# gcc). The argument of the tag is a list of macros of the form: name \r
+# or name=definition (no spaces). If the definition and the = are \r
+# omitted =1 is assumed. To prevent a macro definition from being \r
+# undefined via #undef or recursively expanded use the := operator \r
+# instead of the = operator.\r
+\r
+PREDEFINED             = __DOXYGEN__\r
+\r
+# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then \r
+# this tag can be used to specify a list of macro names that should be expanded. \r
+# The macro definition that is found in the sources will be used. \r
+# Use the PREDEFINED tag if you want to use a different macro definition.\r
+\r
+EXPAND_AS_DEFINED      = BUTTLOADTAG\r
+\r
+# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then \r
+# doxygen's preprocessor will remove all function-like macros that are alone \r
+# on a line, have an all uppercase name, and do not end with a semicolon. Such \r
+# function macros are typically used for boiler-plate code, and will confuse \r
+# the parser if not removed.\r
+\r
+SKIP_FUNCTION_MACROS   = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration::additions related to external references   \r
+#---------------------------------------------------------------------------\r
+\r
+# The TAGFILES option can be used to specify one or more tagfiles. \r
+# Optionally an initial location of the external documentation \r
+# can be added for each tagfile. The format of a tag file without \r
+# this location is as follows: \r
+#   TAGFILES = file1 file2 ... \r
+# Adding location for the tag files is done as follows: \r
+#   TAGFILES = file1=loc1 "file2 = loc2" ... \r
+# where "loc1" and "loc2" can be relative or absolute paths or \r
+# URLs. If a location is present for each tag, the installdox tool \r
+# does not have to be run to correct the links.\r
+# Note that each tag file must have a unique name\r
+# (where the name does NOT include the path)\r
+# If a tag file is not located in the directory in which doxygen \r
+# is run, you must also specify the path to the tagfile here.\r
+\r
+TAGFILES               = \r
+\r
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create \r
+# a tag file that is based on the input files it reads.\r
+\r
+GENERATE_TAGFILE       = \r
+\r
+# If the ALLEXTERNALS tag is set to YES all external classes will be listed \r
+# in the class index. If set to NO only the inherited external classes \r
+# will be listed.\r
+\r
+ALLEXTERNALS           = NO\r
+\r
+# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed \r
+# in the modules index. If set to NO, only the current project's groups will \r
+# be listed.\r
+\r
+EXTERNAL_GROUPS        = YES\r
+\r
+# The PERL_PATH should be the absolute path and name of the perl script \r
+# interpreter (i.e. the result of `which perl').\r
+\r
+PERL_PATH              = /usr/bin/perl\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration options related to the dot tool   \r
+#---------------------------------------------------------------------------\r
+\r
+# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will \r
+# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base \r
+# or super classes. Setting the tag to NO turns the diagrams off. Note that \r
+# this option is superseded by the HAVE_DOT option below. This is only a \r
+# fallback. It is recommended to install and use dot, since it yields more \r
+# powerful graphs.\r
+\r
+CLASS_DIAGRAMS         = NO\r
+\r
+# You can define message sequence charts within doxygen comments using the \msc \r
+# command. Doxygen will then run the mscgen tool (see \r
+# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the \r
+# documentation. The MSCGEN_PATH tag allows you to specify the directory where \r
+# the mscgen tool resides. If left empty the tool is assumed to be found in the \r
+# default search path.\r
+\r
+MSCGEN_PATH            = \r
+\r
+# If set to YES, the inheritance and collaboration graphs will hide \r
+# inheritance and usage relations if the target is undocumented \r
+# or is not a class.\r
+\r
+HIDE_UNDOC_RELATIONS   = YES\r
+\r
+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is \r
+# available from the path. This tool is part of Graphviz, a graph visualization \r
+# toolkit from AT&T and Lucent Bell Labs. The other options in this section \r
+# have no effect if this option is set to NO (the default)\r
+\r
+HAVE_DOT               = NO\r
+\r
+# By default doxygen will write a font called FreeSans.ttf to the output \r
+# directory and reference it in all dot files that doxygen generates. This \r
+# font does not include all possible unicode characters however, so when you need \r
+# these (or just want a differently looking font) you can specify the font name \r
+# using DOT_FONTNAME. You need need to make sure dot is able to find the font, \r
+# which can be done by putting it in a standard location or by setting the \r
+# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory \r
+# containing the font.\r
+\r
+DOT_FONTNAME           = FreeSans\r
+\r
+# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. \r
+# The default size is 10pt.\r
+\r
+DOT_FONTSIZE           = 10\r
+\r
+# By default doxygen will tell dot to use the output directory to look for the \r
+# FreeSans.ttf font (which doxygen will put there itself). If you specify a \r
+# different font using DOT_FONTNAME you can set the path where dot \r
+# can find it using this tag.\r
+\r
+DOT_FONTPATH           = \r
+\r
+# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for each documented class showing the direct and \r
+# indirect inheritance relations. Setting this tag to YES will force the \r
+# the CLASS_DIAGRAMS tag to NO.\r
+\r
+CLASS_GRAPH            = NO\r
+\r
+# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for each documented class showing the direct and \r
+# indirect implementation dependencies (inheritance, containment, and \r
+# class references variables) of the class with other documented classes.\r
+\r
+COLLABORATION_GRAPH    = NO\r
+\r
+# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for groups, showing the direct groups dependencies\r
+\r
+GROUP_GRAPHS           = NO\r
+\r
+# If the UML_LOOK tag is set to YES doxygen will generate inheritance and \r
+# collaboration diagrams in a style similar to the OMG's Unified Modeling \r
+# Language.\r
+\r
+UML_LOOK               = NO\r
+\r
+# If set to YES, the inheritance and collaboration graphs will show the \r
+# relations between templates and their instances.\r
+\r
+TEMPLATE_RELATIONS     = NO\r
+\r
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT \r
+# tags are set to YES then doxygen will generate a graph for each documented \r
+# file showing the direct and indirect include dependencies of the file with \r
+# other documented files.\r
+\r
+INCLUDE_GRAPH          = NO\r
+\r
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and \r
+# HAVE_DOT tags are set to YES then doxygen will generate a graph for each \r
+# documented header file showing the documented files that directly or \r
+# indirectly include this file.\r
+\r
+INCLUDED_BY_GRAPH      = NO\r
+\r
+# If the CALL_GRAPH and HAVE_DOT options are set to YES then \r
+# doxygen will generate a call dependency graph for every global function \r
+# or class method. Note that enabling this option will significantly increase \r
+# the time of a run. So in most cases it will be better to enable call graphs \r
+# for selected functions only using the \callgraph command.\r
+\r
+CALL_GRAPH             = NO\r
+\r
+# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then \r
+# doxygen will generate a caller dependency graph for every global function \r
+# or class method. Note that enabling this option will significantly increase \r
+# the time of a run. So in most cases it will be better to enable caller \r
+# graphs for selected functions only using the \callergraph command.\r
+\r
+CALLER_GRAPH           = NO\r
+\r
+# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen \r
+# will graphical hierarchy of all classes instead of a textual one.\r
+\r
+GRAPHICAL_HIERARCHY    = NO\r
+\r
+# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES \r
+# then doxygen will show the dependencies a directory has on other directories \r
+# in a graphical way. The dependency relations are determined by the #include\r
+# relations between the files in the directories.\r
+\r
+DIRECTORY_GRAPH        = NO\r
+\r
+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images \r
+# generated by dot. Possible values are png, jpg, or gif\r
+# If left blank png will be used.\r
+\r
+DOT_IMAGE_FORMAT       = png\r
+\r
+# The tag DOT_PATH can be used to specify the path where the dot tool can be \r
+# found. If left blank, it is assumed the dot tool can be found in the path.\r
+\r
+DOT_PATH               = "C:/Program Files/Graphviz2.18/bin"\r
+\r
+# The DOTFILE_DIRS tag can be used to specify one or more directories that \r
+# contain dot files that are included in the documentation (see the \r
+# \dotfile command).\r
+\r
+DOTFILE_DIRS           = \r
+\r
+# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of \r
+# nodes that will be shown in the graph. If the number of nodes in a graph \r
+# becomes larger than this value, doxygen will truncate the graph, which is \r
+# visualized by representing a node as a red box. Note that doxygen if the \r
+# number of direct children of the root node in a graph is already larger than \r
+# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note \r
+# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.\r
+\r
+DOT_GRAPH_MAX_NODES    = 15\r
+\r
+# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the \r
+# graphs generated by dot. A depth value of 3 means that only nodes reachable \r
+# from the root by following a path via at most 3 edges will be shown. Nodes \r
+# that lay further from the root node will be omitted. Note that setting this \r
+# option to 1 or 2 may greatly reduce the computation time needed for large \r
+# code bases. Also note that the size of a graph can be further restricted by \r
+# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.\r
+\r
+MAX_DOT_GRAPH_DEPTH    = 2\r
+\r
+# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent \r
+# background. This is disabled by default, because dot on Windows does not \r
+# seem to support this out of the box. Warning: Depending on the platform used, \r
+# enabling this option may lead to badly anti-aliased labels on the edges of \r
+# a graph (i.e. they become hard to read).\r
+\r
+DOT_TRANSPARENT        = YES\r
+\r
+# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output \r
+# files in one run (i.e. multiple -o and -T options on the command line). This \r
+# makes dot run faster, but since only newer versions of dot (>1.8.10) \r
+# support this, this feature is disabled by default.\r
+\r
+DOT_MULTI_TARGETS      = NO\r
+\r
+# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will \r
+# generate a legend page explaining the meaning of the various boxes and \r
+# arrows in the dot generated graphs.\r
+\r
+GENERATE_LEGEND        = YES\r
+\r
+# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will \r
+# remove the intermediate dot files that are used to generate \r
+# the various graphs.\r
+\r
+DOT_CLEANUP            = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration::additions related to the search engine   \r
+#---------------------------------------------------------------------------\r
+\r
+# The SEARCHENGINE tag specifies whether or not a search engine should be \r
+# used. If set to NO the values of all tags below this one will be ignored.\r
+\r
+SEARCHENGINE           = NO\r
diff --git a/Demos/Device/LowLevel/DualCDC/DualCDC.aps b/Demos/Device/LowLevel/DualCDC/DualCDC.aps
new file mode 100644 (file)
index 0000000..276e743
--- /dev/null
@@ -0,0 +1 @@
+<AVRStudio><MANAGEMENT><ProjectName>DualCDC</ProjectName><Created>30-Sep-2008 14:06:03</Created><LastEdit>30-Sep-2008 14:06:18</LastEdit><ICON>241</ICON><ProjectType>0</ProjectType><Created>30-Sep-2008 14:06:03</Created><Version>4</Version><Build>4, 14, 0, 589</Build><ProjectTypeName>AVR GCC</ProjectTypeName></MANAGEMENT><CODE_CREATION><ObjectFile></ObjectFile><EntryFile></EntryFile><SaveFolder>C:\Users\Dean\Documents\Electronics\Projects\WORK\MyUSBWORK\Demos\DualCDC\</SaveFolder></CODE_CREATION><DEBUG_TARGET><CURRENT_TARGET></CURRENT_TARGET><CURRENT_PART></CURRENT_PART><BREAKPOINTS></BREAKPOINTS><IO_EXPAND><HIDE>false</HIDE></IO_EXPAND><REGISTERNAMES><Register>R00</Register><Register>R01</Register><Register>R02</Register><Register>R03</Register><Register>R04</Register><Register>R05</Register><Register>R06</Register><Register>R07</Register><Register>R08</Register><Register>R09</Register><Register>R10</Register><Register>R11</Register><Register>R12</Register><Register>R13</Register><Register>R14</Register><Register>R15</Register><Register>R16</Register><Register>R17</Register><Register>R18</Register><Register>R19</Register><Register>R20</Register><Register>R21</Register><Register>R22</Register><Register>R23</Register><Register>R24</Register><Register>R25</Register><Register>R26</Register><Register>R27</Register><Register>R28</Register><Register>R29</Register><Register>R30</Register><Register>R31</Register></REGISTERNAMES><COM>Auto</COM><COMType>0</COMType><WATCHNUM>0</WATCHNUM><WATCHNAMES><Pane0></Pane0><Pane1></Pane1><Pane2></Pane2><Pane3></Pane3></WATCHNAMES><BreakOnTrcaeFull>0</BreakOnTrcaeFull></DEBUG_TARGET><Debugger><Triggers></Triggers></Debugger><AVRGCCPLUGIN><FILES><SOURCEFILE>Descriptors.c</SOURCEFILE><SOURCEFILE>DualCDC.c</SOURCEFILE><HEADERFILE>Descriptors.h</HEADERFILE><HEADERFILE>DualCDC.h</HEADERFILE><OTHERFILE>makefile</OTHERFILE></FILES><CONFIGS><CONFIG><NAME>default</NAME><USESEXTERNALMAKEFILE>YES</USESEXTERNALMAKEFILE><EXTERNALMAKEFILE>makefile</EXTERNALMAKEFILE><PART>atmega128</PART><HEX>1</HEX><LIST>1</LIST><MAP>1</MAP><OUTPUTFILENAME>DualCDC.elf</OUTPUTFILENAME><OUTPUTDIR>default\</OUTPUTDIR><ISDIRTY>1</ISDIRTY><OPTIONS/><INCDIRS/><LIBDIRS/><LIBS/><LINKOBJECTS/><OPTIONSFORALL>-Wall -gdwarf-2 -std=gnu99 -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums</OPTIONSFORALL><LINKEROPTIONS></LINKEROPTIONS><SEGMENTS/></CONFIG></CONFIGS><LASTCONFIG>default</LASTCONFIG><USES_WINAVR>1</USES_WINAVR><GCC_LOC>C:\WinAVR-20080512\bin\avr-gcc.exe</GCC_LOC><MAKE_LOC>C:\WinAVR-20080512\utils\bin\make.exe</MAKE_LOC></AVRGCCPLUGIN><IOView><usergroups/><sort sorted="0" column="0" ordername="0" orderaddress="0" ordergroup="0"/></IOView><Files></Files><Events><Bookmarks></Bookmarks></Events><Trace><Filters></Filters></Trace></AVRStudio>\r
diff --git a/Demos/Device/LowLevel/DualCDC/DualCDC.c b/Demos/Device/LowLevel/DualCDC/DualCDC.c
new file mode 100644 (file)
index 0000000..34d772f
--- /dev/null
@@ -0,0 +1,357 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  Main source file for the DualCDC demo. This file contains the main tasks of the demo and\r
+ *  is responsible for the initial application hardware configuration.\r
+ */\r
\r
+#include "DualCDC.h"\r
+\r
+/* Scheduler Task List */\r
+TASK_LIST\r
+{\r
+       { .Task = USB_USBTask          , .TaskStatus = TASK_STOP },\r
+       { .Task = CDC1_Task            , .TaskStatus = TASK_STOP },\r
+       { .Task = CDC2_Task            , .TaskStatus = TASK_STOP },\r
+};\r
+\r
+/* Globals: */\r
+/** Contains the current baud rate and other settings of the first virtual serial port. While this demo does not use\r
+ *  the physical USART and thus does not use these settings, they must still be retained and returned to the host\r
+ *  upon request or the host will assume the device is non-functional.\r
+ *\r
+ *  These values are set by the host via a class-specific request, however they are not required to be used accurately.\r
+ *  It is possible to completely ignore these value or use other settings as the host is completely unaware of the physical\r
+ *  serial link characteristics and instead sends and receives data in endpoint streams.\r
+ */\r
+CDC_Line_Coding_t LineCoding1 = { .BaudRateBPS = 9600,\r
+                                  .CharFormat  = OneStopBit,\r
+                                  .ParityType  = Parity_None,\r
+                                  .DataBits    = 8            };\r
+\r
+/** Contains the current baud rate and other settings of the second virtual serial port. While this demo does not use\r
+ *  the physical USART and thus does not use these settings, they must still be retained and returned to the host\r
+ *  upon request or the host will assume the device is non-functional.\r
+ *\r
+ *  These values are set by the host via a class-specific request, however they are not required to be used accurately.\r
+ *  It is possible to completely ignore these value or use other settings as the host is completely unaware of the physical\r
+ *  serial link characteristics and instead sends and receives data in endpoint streams.\r
+ */\r
+CDC_Line_Coding_t LineCoding2 = { .BaudRateBPS = 9600,\r
+                                  .CharFormat  = OneStopBit,\r
+                                  .ParityType  = Parity_None,\r
+                                  .DataBits    = 8            };\r
+                                                                 \r
+/** String to print through the first virtual serial port when the joystick is pressed upwards. */\r
+char JoystickUpString[]      = "Joystick Up\r\n";\r
+\r
+/** String to print through the first virtual serial port when the joystick is pressed downward. */\r
+char JoystickDownString[]    = "Joystick Down\r\n";\r
+\r
+/** String to print through the first virtual serial port when the joystick is pressed left. */\r
+char JoystickLeftString[]    = "Joystick Left\r\n";\r
+\r
+/** String to print through the first virtual serial port when the joystick is pressed right. */\r
+char JoystickRightString[]   = "Joystick Right\r\n";\r
+\r
+/** String to print through the first virtual serial port when the joystick is pressed inwards. */\r
+char JoystickPressedString[] = "Joystick Pressed\r\n";\r
+\r
+/** Main program entry point. This routine configures the hardware required by the application, then\r
+ *  starts the scheduler to run the application tasks.\r
+ */\r
+int main(void)\r
+{\r
+       /* Disable watchdog if enabled by bootloader/fuses */\r
+       MCUSR &= ~(1 << WDRF);\r
+       wdt_disable();\r
+\r
+       /* Disable clock division */\r
+       clock_prescale_set(clock_div_1);\r
+\r
+       /* Hardware Initialization */\r
+       Joystick_Init();\r
+       LEDs_Init();\r
+       \r
+       /* Indicate USB not ready */\r
+       UpdateStatus(Status_USBNotReady);\r
+       \r
+       /* Initialize Scheduler so that it can be used */\r
+       Scheduler_Init();\r
+\r
+       /* Initialize USB Subsystem */\r
+       USB_Init();\r
+\r
+       /* Scheduling - routine never returns, so put this last in the main function */\r
+       Scheduler_Start();\r
+}\r
+\r
+/** Event handler for the USB_Connect event. This indicates that the device is enumerating via the status LEDs and\r
+ *  starts the library USB task to begin the enumeration and USB management process.\r
+ */\r
+void EVENT_USB_Connect(void)\r
+{\r
+       /* Start USB management task */\r
+       Scheduler_SetTaskMode(USB_USBTask, TASK_RUN);\r
+\r
+       /* Indicate USB enumerating */\r
+       UpdateStatus(Status_USBEnumerating);\r
+}\r
+\r
+/** Event handler for the USB_Disconnect event. This indicates that the device is no longer connected to a host via\r
+ *  the status LEDs and stops the USB management and CDC management tasks.\r
+ */\r
+void EVENT_USB_Disconnect(void)\r
+{\r
+       /* Stop running CDC and USB management tasks */\r
+       Scheduler_SetTaskMode(CDC1_Task, TASK_STOP);\r
+       Scheduler_SetTaskMode(CDC2_Task, TASK_STOP);\r
+       Scheduler_SetTaskMode(USB_USBTask, TASK_STOP);\r
+\r
+       /* Indicate USB not ready */\r
+       UpdateStatus(Status_USBNotReady);\r
+}\r
+\r
+/** Event handler for the USB_ConfigurationChanged event. This is fired when the host set the current configuration\r
+ *  of the USB device after enumeration - the device endpoints are configured and the CDC management tasks are started.\r
+ */\r
+void EVENT_USB_ConfigurationChanged(void)\r
+{\r
+       /* Setup CDC Notification, Rx and Tx Endpoints for the first CDC */\r
+       Endpoint_ConfigureEndpoint(CDC1_NOTIFICATION_EPNUM, EP_TYPE_INTERRUPT,\r
+                                      ENDPOINT_DIR_IN, CDC_NOTIFICATION_EPSIZE,\r
+                                  ENDPOINT_BANK_SINGLE);\r
+\r
+       Endpoint_ConfigureEndpoint(CDC1_TX_EPNUM, EP_TYPE_BULK,\r
+                                      ENDPOINT_DIR_IN, CDC_TXRX_EPSIZE,\r
+                                  ENDPOINT_BANK_SINGLE);\r
+\r
+       Endpoint_ConfigureEndpoint(CDC1_RX_EPNUM, EP_TYPE_BULK,\r
+                                      ENDPOINT_DIR_OUT, CDC_TXRX_EPSIZE,\r
+                                  ENDPOINT_BANK_SINGLE);\r
+\r
+       /* Setup CDC Notification, Rx and Tx Endpoints for the second CDC */\r
+       Endpoint_ConfigureEndpoint(CDC2_NOTIFICATION_EPNUM, EP_TYPE_INTERRUPT,\r
+                                      ENDPOINT_DIR_IN, CDC_NOTIFICATION_EPSIZE,\r
+                                  ENDPOINT_BANK_SINGLE);\r
+\r
+       Endpoint_ConfigureEndpoint(CDC2_TX_EPNUM, EP_TYPE_BULK,\r
+                                      ENDPOINT_DIR_IN, CDC_TXRX_EPSIZE,\r
+                                  ENDPOINT_BANK_SINGLE);\r
+\r
+       Endpoint_ConfigureEndpoint(CDC2_RX_EPNUM, EP_TYPE_BULK,\r
+                                      ENDPOINT_DIR_OUT, CDC_TXRX_EPSIZE,\r
+                                  ENDPOINT_BANK_SINGLE);\r
+                                                          \r
+       /* Indicate USB connected and ready */\r
+       UpdateStatus(Status_USBReady);\r
+       \r
+       /* Start CDC tasks */\r
+       Scheduler_SetTaskMode(CDC1_Task, TASK_RUN);\r
+       Scheduler_SetTaskMode(CDC2_Task, TASK_RUN);\r
+}\r
+\r
+/** Event handler for the USB_UnhandledControlPacket event. This is used to catch standard and class specific\r
+ *  control requests that are not handled internally by the USB library (including the CDC control commands,\r
+ *  which are all issued via the control endpoint), so that they can be handled appropriately for the application.\r
+ */\r
+void EVENT_USB_UnhandledControlPacket(void)\r
+{\r
+       /* Determine which interface's Line Coding data is being set from the wIndex parameter */\r
+       uint8_t* LineCodingData = (USB_ControlRequest.wIndex == 0) ? (uint8_t*)&LineCoding1 : (uint8_t*)&LineCoding2;\r
+\r
+       /* Process CDC specific control requests */\r
+       switch (USB_ControlRequest.bRequest)\r
+       {\r
+               case REQ_GetLineEncoding:\r
+                       if (USB_ControlRequest.bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_INTERFACE))\r
+                       {       \r
+                               /* Acknowledge the SETUP packet, ready for data transfer */\r
+                               Endpoint_ClearSETUP();\r
+\r
+                               /* Write the line coding data to the control endpoint */\r
+                               Endpoint_Write_Control_Stream_LE(LineCodingData, sizeof(CDC_Line_Coding_t));\r
+                               \r
+                               /* Finalize the stream transfer to send the last packet or clear the host abort */\r
+                               Endpoint_ClearOUT();\r
+                       }\r
+                       \r
+                       break;\r
+               case REQ_SetLineEncoding:\r
+                       if (USB_ControlRequest.bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE))\r
+                       {\r
+                               /* Acknowledge the SETUP packet, ready for data transfer */\r
+                               Endpoint_ClearSETUP();\r
+\r
+                               /* Read the line coding data in from the host into the global struct */\r
+                               Endpoint_Read_Control_Stream_LE(LineCodingData, sizeof(CDC_Line_Coding_t));\r
+\r
+                               /* Finalize the stream transfer to clear the last packet from the host */\r
+                               Endpoint_ClearIN();\r
+                       }\r
+       \r
+                       break;\r
+               case REQ_SetControlLineState:\r
+                       if (USB_ControlRequest.bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE))\r
+                       {\r
+                               /* Acknowledge the SETUP packet, ready for data transfer */\r
+                               Endpoint_ClearSETUP();\r
+                               \r
+                               /* Acknowledge status stage */\r
+                               while (!(Endpoint_IsINReady()));\r
+                               Endpoint_ClearIN();\r
+                       }\r
+       \r
+                       break;\r
+       }\r
+}\r
+\r
+/** Function to manage status updates to the user. This is done via LEDs on the given board, if available, but may be changed to\r
+ *  log to a serial port, or anything else that is suitable for status updates.\r
+ *\r
+ *  \param CurrentStatus  Current status of the system, from the DualCDC_StatusCodes_t enum\r
+ */\r
+void UpdateStatus(uint8_t CurrentStatus)\r
+{\r
+       uint8_t LEDMask = LEDS_NO_LEDS;\r
+       \r
+       /* Set the LED mask to the appropriate LED mask based on the given status code */\r
+       switch (CurrentStatus)\r
+       {\r
+               case Status_USBNotReady:\r
+                       LEDMask = (LEDS_LED1);\r
+                       break;\r
+               case Status_USBEnumerating:\r
+                       LEDMask = (LEDS_LED1 | LEDS_LED2);\r
+                       break;\r
+               case Status_USBReady:\r
+                       LEDMask = (LEDS_LED2 | LEDS_LED4);\r
+                       break;\r
+       }\r
+       \r
+       /* Set the board LEDs to the new LED mask */\r
+       LEDs_SetAllLEDs(LEDMask);\r
+}\r
+\r
+/** Function to manage CDC data transmission and reception to and from the host for the first CDC interface, which sends joystick\r
+ *  movements to the host as ASCII strings.\r
+ */\r
+TASK(CDC1_Task)\r
+{\r
+       char*       ReportString    = NULL;\r
+       uint8_t     JoyStatus_LCL   = Joystick_GetStatus();\r
+       static bool ActionSent      = false;\r
+\r
+       /* Determine if a joystick action has occurred */\r
+       if (JoyStatus_LCL & JOY_UP)\r
+         ReportString = JoystickUpString;\r
+       else if (JoyStatus_LCL & JOY_DOWN)\r
+         ReportString = JoystickDownString;\r
+       else if (JoyStatus_LCL & JOY_LEFT)\r
+         ReportString = JoystickLeftString;\r
+       else if (JoyStatus_LCL & JOY_RIGHT)\r
+         ReportString = JoystickRightString;\r
+       else if (JoyStatus_LCL & JOY_PRESS)\r
+         ReportString = JoystickPressedString;\r
+\r
+       /* Flag management - Only allow one string to be sent per action */\r
+       if (ReportString == NULL)\r
+       {\r
+               ActionSent = false;\r
+       }\r
+       else if (ActionSent == false)\r
+       {\r
+               ActionSent = true;\r
+               \r
+               /* Select the Serial Tx Endpoint */\r
+               Endpoint_SelectEndpoint(CDC1_TX_EPNUM);\r
+\r
+               /* Write the String to the Endpoint */\r
+               Endpoint_Write_Stream_LE(ReportString, strlen(ReportString));\r
+               \r
+               /* Finalize the stream transfer to send the last packet */\r
+               Endpoint_ClearIN();\r
+\r
+               /* Wait until the endpoint is ready for another packet */\r
+               while (!(Endpoint_IsINReady()));\r
+               \r
+               /* Send an empty packet to ensure that the host does not buffer data sent to it */\r
+               Endpoint_ClearIN();\r
+       }\r
+\r
+       /* Select the Serial Rx Endpoint */\r
+       Endpoint_SelectEndpoint(CDC1_RX_EPNUM);\r
+       \r
+       /* Throw away any received data from the host */\r
+       if (Endpoint_IsOUTReceived())\r
+         Endpoint_ClearOUT();\r
+}\r
+\r
+/** Function to manage CDC data transmission and reception to and from the host for the second CDC interface, which echoes back\r
+ *  all data sent to it from the host.\r
+ */\r
+TASK(CDC2_Task)\r
+{\r
+       /* Select the Serial Rx Endpoint */\r
+       Endpoint_SelectEndpoint(CDC2_RX_EPNUM);\r
+       \r
+       /* Check to see if any data has been received */\r
+       if (Endpoint_IsOUTReceived())\r
+       {\r
+               /* Create a temp buffer big enough to hold the incoming endpoint packet */\r
+               uint8_t  Buffer[Endpoint_BytesInEndpoint()];\r
+               \r
+               /* Remember how large the incoming packet is */\r
+               uint16_t DataLength = Endpoint_BytesInEndpoint();\r
+       \r
+               /* Read in the incoming packet into the buffer */\r
+               Endpoint_Read_Stream_LE(&Buffer, DataLength);\r
+\r
+               /* Finalize the stream transfer to send the last packet */\r
+               Endpoint_ClearOUT();\r
+\r
+               /* Select the Serial Tx Endpoint */\r
+               Endpoint_SelectEndpoint(CDC2_TX_EPNUM);\r
+               \r
+               /* Write the received data to the endpoint */\r
+               Endpoint_Write_Stream_LE(&Buffer, DataLength);\r
+\r
+               /* Finalize the stream transfer to send the last packet */\r
+               Endpoint_ClearIN();\r
+\r
+               /* Wait until the endpoint is ready for the next packet */\r
+               while (!(Endpoint_IsINReady()));\r
+\r
+               /* Send an empty packet to prevent host buffering */\r
+               Endpoint_ClearIN();\r
+       }\r
+}\r
diff --git a/Demos/Device/LowLevel/DualCDC/DualCDC.h b/Demos/Device/LowLevel/DualCDC/DualCDC.h
new file mode 100644 (file)
index 0000000..117af60
--- /dev/null
@@ -0,0 +1,118 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  Header file for DualCDC.c.\r
+ */\r
+\r
+#ifndef _DUAL_CDC_H_\r
+#define _DUAL_CDC_H_\r
+\r
+       /* Includes: */\r
+               #include <avr/io.h>\r
+               #include <avr/wdt.h>\r
+               #include <avr/power.h>\r
+               #include <string.h>\r
+\r
+               #include "Descriptors.h"\r
+\r
+               #include <LUFA/Version.h>                        // Library Version Information\r
+               #include <LUFA/Drivers/USB/USB.h>                // USB Functionality\r
+               #include <LUFA/Drivers/Board/Joystick.h>         // Joystick driver\r
+               #include <LUFA/Drivers/Board/LEDs.h>             // LEDs driver\r
+               #include <LUFA/Scheduler/Scheduler.h>            // Simple scheduler for task management\r
+\r
+       /* Macros: */\r
+               /** CDC Class specific request to get the current virtual serial port configuration settings. */\r
+               #define REQ_GetLineEncoding          0x21\r
+\r
+               /** CDC Class specific request to set the current virtual serial port configuration settings. */\r
+               #define REQ_SetLineEncoding          0x20\r
+\r
+               /** CDC Class specific request to set the current virtual serial port handshake line states. */\r
+               #define REQ_SetControlLineState      0x22\r
+\r
+       /* Type Defines: */\r
+               /** Type define for the virtual serial port line encoding settings, for storing the current USART configuration\r
+                *  as set by the host via a class specific request.\r
+                */\r
+               typedef struct\r
+               {\r
+                       uint32_t BaudRateBPS; /**< Baud rate of the virtual serial port, in bits per second */\r
+                       uint8_t  CharFormat; /**< Character format of the virtual serial port, a value from the\r
+                                             *   CDCDevice_CDC_LineCodingFormats_t enum\r
+                                             */\r
+                       uint8_t  ParityType; /**< Parity setting of the virtual serial port, a value from the\r
+                                             *   CDCDevice_LineCodingParity_t enum\r
+                                             */\r
+                       uint8_t  DataBits; /**< Bits of data per character of the virtual serial port */\r
+               } CDC_Line_Coding_t;\r
+               \r
+       /* Enums: */\r
+               /** Enum for the possible line encoding formats of a virtual serial port. */\r
+               enum CDCDevice_CDC_LineCodingFormats_t\r
+               {\r
+                       OneStopBit          = 0, /**< Each frame contains one stop bit */\r
+                       OneAndAHalfStopBits = 1, /**< Each frame contains one and a half stop bits */\r
+                       TwoStopBits         = 2, /**< Each frame contains two stop bits */\r
+               };\r
+               \r
+               /** Enum for the possible line encoding parity settings of a virtual serial port. */\r
+               enum CDCDevice_LineCodingParity_t\r
+               {\r
+                       Parity_None         = 0, /**< No parity bit mode on each frame */\r
+                       Parity_Odd          = 1, /**< Odd parity bit mode on each frame */\r
+                       Parity_Even         = 2, /**< Even parity bit mode on each frame */\r
+                       Parity_Mark         = 3, /**< Mark parity bit mode on each frame */\r
+                       Parity_Space        = 4, /**< Space parity bit mode on each frame */\r
+               };\r
+\r
+               /** Enum for the possible status codes for passing to the UpdateStatus() function. */\r
+               enum DualCDC_StatusCodes_t\r
+               {\r
+                       Status_USBNotReady    = 0, /**< USB is not ready (disconnected from a USB host) */\r
+                       Status_USBEnumerating = 1, /**< USB interface is enumerating */\r
+                       Status_USBReady       = 2, /**< USB interface is connected and ready */\r
+               };\r
+\r
+       /* Tasks: */\r
+               TASK(CDC1_Task);\r
+               TASK(CDC2_Task);\r
+\r
+       /* Function Prototypes: */\r
+               void EVENT_USB_Connect(void);\r
+               void EVENT_USB_Disconnect(void);\r
+               void EVENT_USB_ConfigurationChanged(void);\r
+               void EVENT_USB_UnhandledControlPacket(void);\r
+\r
+               void UpdateStatus(uint8_t CurrentStatus);\r
+               \r
+#endif\r
diff --git a/Demos/Device/LowLevel/DualCDC/DualCDC.txt b/Demos/Device/LowLevel/DualCDC/DualCDC.txt
new file mode 100644 (file)
index 0000000..6e08602
--- /dev/null
@@ -0,0 +1,75 @@
+/** \file\r
+ *\r
+ *  This file contains special DoxyGen information for the generation of the main page and other special\r
+ *  documentation pages. It is not a project source file.\r
+ */\r
\r
+/** \mainpage Dual Communications Device Class Device (Dual Virtual Serial Port)\r
+ *\r
+ *  \section SSec_Info USB Information:\r
+ *\r
+ *  The following table gives a rundown of the USB utilization of this demo.\r
+ *\r
+ *  <table>\r
+ *   <tr>\r
+ *    <td><b>USB Mode:</b></td>\r
+ *    <td>Device</td>\r
+ *   </tr>\r
+ *   <tr>\r
+ *    <td><b>USB Class:</b></td>\r
+ *    <td>Miscellaneous Device Class</td>\r
+ *    <td>( Sub-Interface: Communications Device Class (CDC) )</td>\r
+ *   </tr>\r
+ *   <tr> \r
+ *    <td><b>USB Subclass:</b></td>\r
+ *    <td>Common Class</td> \r
+ *    <td>( Sub-Interface: Abstract Control Model (ACM) )</td>\r
+ *   </tr>\r
+ *   <tr>\r
+ *    <td><b>Relevant Standards:</b></td>\r
+ *    <td>USBIF Interface Association Descriptor ECN</td>\r
+ *    <td>USBIF CDC Class Standard</td>\r
+ *   </tr>\r
+ *   <tr>\r
+ *    <td><b>Usable Speeds:</b></td>\r
+ *    <td>Full Speed Mode</td>\r
+ *   </tr>\r
+ *  </table>\r
+ *\r
+ *  \section SSec_Description Project Description: \r
+ *\r
+ *  Dual Communications Device Class demonstration application.\r
+ *  This gives a simple reference application for implementing\r
+ *  a compound device with dual CDC functions acting as a pair\r
+ *  of virtual serial ports. This demo uses Interface Association\r
+ *  Descriptors to link together the pair of related CDC\r
+ *  descriptors for each virtual serial port, which may not be\r
+ *  supported in all OSes - Windows Vista is supported, as is\r
+ *  XP (although the latter may need a hotfix to function).\r
+ *  \r
+ *  Joystick actions are transmitted to the host as strings\r
+ *  through the first serial port. The device does not respond to\r
+ *  serial data sent from the host in the first serial port.\r
+ *  \r
+ *  The second serial port echoes back data sent from the host.\r
+ *  \r
+ *  After running this demo for the first time on a new computer,\r
+ *  you will need to supply the .INF file located in this demo\r
+ *  project's directory as the device's driver when running under\r
+ *  Windows. This will enable Windows to use its inbuilt CDC drivers,\r
+ *  negating the need for custom drivers for the device. Other\r
+ *  Operating Systems should automatically use their own inbuilt\r
+ *  CDC-ACM drivers.\r
+ *\r
+ *  \section SSec_Options Project Options\r
+ *\r
+ *  The following defines can be found in this demo, which can control the demo behaviour when defined, or changed in value.\r
+ *\r
+ *  <table>\r
+ *   <tr>\r
+ *    <td>\r
+ *     None\r
+ *    </td>\r
+ *   </tr>\r
+ *  </table>\r
+ */
\ No newline at end of file
diff --git a/Demos/Device/LowLevel/DualCDC/LUFA DualCDC.inf b/Demos/Device/LowLevel/DualCDC/LUFA DualCDC.inf
new file mode 100644 (file)
index 0000000..10ba560
--- /dev/null
@@ -0,0 +1,56 @@
+;       Windows LUFA Dual CDC Setup File\r
+; Copyright (c) 2000 Microsoft Corporation\r
+\r
+[Version] \r
+Signature="$Windows NT$" \r
+Class=Ports\r
+ClassGuid={4D36E978-E325-11CE-BFC1-08002BE10318} \r
+Provider=%COMPANY% \r
+LayoutFile=layout.inf\r
+DriverVer=06/06/2006,1.0.0.0\r
+\r
+[Manufacturer] \r
+%MFGNAME% = ManufName\r
+\r
+[DestinationDirs] \r
+DefaultDestDir=12 \r
+\r
+[ManufName] \r
+%Modem3% = Modem3, USB\VID_03EB&PID_204E&MI_00\r
+%Modem3% = Modem3, USB\VID_03EB&PID_204E&MI_02\r
+\r
+;------------------------------------------------------------------------------\r
+;  Windows 2000/XP Sections\r
+;------------------------------------------------------------------------------\r
+\r
+[Modem3.nt]\r
+CopyFiles=USBModemCopyFileSection\r
+AddReg=Modem3.nt.AddReg \r
+\r
+[USBModemCopyFileSection]\r
+usbser.sys,,,0x20\r
+\r
+[Modem3.nt.AddReg] \r
+HKR,,DevLoader,,*ntkern \r
+HKR,,NTMPDriver,,usbser.sys \r
+HKR,,EnumPropPages32,,"MsPorts.dll,SerialPortPropPageProvider" \r
+\r
+[Modem3.nt.Services] \r
+AddService=usbser, 0x00000002, DriverService\r
+\r
+[DriverService] \r
+DisplayName=%SERVICE%\r
+ServiceType=1\r
+StartType=3\r
+ErrorControl=1\r
+ServiceBinary=%12%\usbser.sys \r
+\r
+;------------------------------------------------------------------------------\r
+;  String Definitions\r
+;------------------------------------------------------------------------------\r
+\r
+[Strings] \r
+COMPANY="LUFA Library"\r
+MFGNAME="Dean Camera"\r
+Modem3="USB Virtual Serial Port" \r
+SERVICE="USB Virtual Serial Port CDC Driver"
\ No newline at end of file
diff --git a/Demos/Device/LowLevel/DualCDC/makefile b/Demos/Device/LowLevel/DualCDC/makefile
new file mode 100644 (file)
index 0000000..06d0e18
--- /dev/null
@@ -0,0 +1,734 @@
+# Hey Emacs, this is a -*- makefile -*-\r
+#----------------------------------------------------------------------------\r
+# WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al.\r
+#  >> Modified for use with the LUFA project. <<\r
+#\r
+# Released to the Public Domain\r
+#\r
+# Additional material for this makefile was written by:\r
+# Peter Fleury\r
+# Tim Henigan\r
+# Colin O'Flynn\r
+# Reiner Patommel\r
+# Markus Pfaff\r
+# Sander Pool\r
+# Frederik Rouleau\r
+# Carlos Lamas\r
+# Dean Camera\r
+# Opendous Inc.\r
+# Denver Gingerich\r
+#\r
+#----------------------------------------------------------------------------\r
+# On command line:\r
+#\r
+# make all = Make software.\r
+#\r
+# make clean = Clean out built project files.\r
+#\r
+# make coff = Convert ELF to AVR COFF.\r
+#\r
+# make extcoff = Convert ELF to AVR Extended COFF.\r
+#\r
+# make program = Download the hex file to the device, using avrdude.\r
+#                Please customize the avrdude settings below first!\r
+#\r
+# make dfu = Download the hex file to the device, using dfu-programmer (must\r
+#            have dfu-programmer installed).\r
+#\r
+# make flip = Download the hex file to the device, using Atmel FLIP (must\r
+#             have Atmel FLIP installed).\r
+#\r
+# make dfu-ee = Download the eeprom file to the device, using dfu-programmer\r
+#               (must have dfu-programmer installed).\r
+#\r
+# make flip-ee = Download the eeprom file to the device, using Atmel FLIP\r
+#                (must have Atmel FLIP installed).\r
+#\r
+# make doxygen = Generate DoxyGen documentation for the project (must have\r
+#                DoxyGen installed)\r
+#\r
+# make debug = Start either simulavr or avarice as specified for debugging, \r
+#              with avr-gdb or avr-insight as the front end for debugging.\r
+#\r
+# make filename.s = Just compile filename.c into the assembler code only.\r
+#\r
+# make filename.i = Create a preprocessed source file for use in submitting\r
+#                   bug reports to the GCC project.\r
+#\r
+# To rebuild project do "make clean" then "make all".\r
+#----------------------------------------------------------------------------\r
+\r
+\r
+# MCU name\r
+MCU = at90usb1287\r
+\r
+\r
+# Target board (see library "Board Types" documentation, USER or blank for projects not requiring\r
+# LUFA board drivers). If USER is selected, put custom board drivers in a directory called \r
+# "Board" inside the application directory.\r
+BOARD  = USBKEY\r
+\r
+\r
+# Processor frequency.\r
+#     This will define a symbol, F_CPU, in all source code files equal to the \r
+#     processor frequency. You can then use this symbol in your source code to \r
+#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done\r
+#     automatically to create a 32-bit value in your source code.\r
+#     Typical values are:\r
+#         F_CPU =  1000000\r
+#         F_CPU =  1843200\r
+#         F_CPU =  2000000\r
+#         F_CPU =  3686400\r
+#         F_CPU =  4000000\r
+#         F_CPU =  7372800\r
+#         F_CPU =  8000000\r
+#         F_CPU = 11059200\r
+#         F_CPU = 14745600\r
+#         F_CPU = 16000000\r
+#         F_CPU = 18432000\r
+#         F_CPU = 20000000\r
+F_CPU = 8000000\r
+\r
+\r
+# Input clock frequency.\r
+#     This will define a symbol, F_CLOCK, in all source code files equal to the \r
+#     input clock frequency (before any prescaling is performed). This value may\r
+#     differ from F_CPU if prescaling is used on the latter, and is required as the\r
+#     raw input clock is fed directly to the PLL sections of the AVR for high speed\r
+#     clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'\r
+#     at the end, this will be done automatically to create a 32-bit value in your\r
+#     source code.\r
+#\r
+#     If no clock division is performed on the input clock inside the AVR (via the\r
+#     CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.\r
+F_CLOCK = 8000000\r
+\r
+\r
+# Output format. (can be srec, ihex, binary)\r
+FORMAT = ihex\r
+\r
+\r
+# Target file name (without extension).\r
+TARGET = DualCDC\r
+\r
+\r
+# Object files directory\r
+#     To put object files in current directory, use a dot (.), do NOT make\r
+#     this an empty or blank macro!\r
+OBJDIR = .\r
+\r
+\r
+# Path to the LUFA library\r
+LUFA_PATH = ../../..\r
+\r
+\r
+# List C source files here. (C dependencies are automatically generated.)\r
+SRC = $(TARGET).c                                                 \\r
+         Descriptors.c                                               \\r
+         $(LUFA_PATH)/LUFA/Scheduler/Scheduler.c                     \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/DevChapter9.c        \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Endpoint.c           \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Host.c               \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/HostChapter9.c       \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/LowLevel.c           \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Pipe.c               \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/Events.c            \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBInterrupt.c      \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBTask.c           \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/ConfigDescriptor.c  \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/Class/HIDParser.c             \\r
+\r
+\r
+# List C++ source files here. (C dependencies are automatically generated.)\r
+CPPSRC = \r
+\r
+\r
+# List Assembler source files here.\r
+#     Make them always end in a capital .S.  Files ending in a lowercase .s\r
+#     will not be considered source files but generated files (assembler\r
+#     output from the compiler), and will be deleted upon "make clean"!\r
+#     Even though the DOS/Win* filesystem matches both .s and .S the same,\r
+#     it will preserve the spelling of the filenames, and gcc itself does\r
+#     care about how the name is spelled on its command-line.\r
+ASRC =\r
+\r
+\r
+# Optimization level, can be [0, 1, 2, 3, s]. \r
+#     0 = turn off optimization. s = optimize for size.\r
+#     (Note: 3 is not always the best optimization level. See avr-libc FAQ.)\r
+OPT = s\r
+\r
+\r
+# Debugging format.\r
+#     Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs.\r
+#     AVR Studio 4.10 requires dwarf-2.\r
+#     AVR [Extended] COFF format requires stabs, plus an avr-objcopy run.\r
+DEBUG = dwarf-2\r
+\r
+\r
+# List any extra directories to look for include files here.\r
+#     Each directory must be seperated by a space.\r
+#     Use forward slashes for directory separators.\r
+#     For a directory that has spaces, enclose it in quotes.\r
+EXTRAINCDIRS = $(LUFA_PATH)/\r
+\r
+\r
+# Compiler flag to set the C Standard level.\r
+#     c89   = "ANSI" C\r
+#     gnu89 = c89 plus GCC extensions\r
+#     c99   = ISO C99 standard (not yet fully implemented)\r
+#     gnu99 = c99 plus GCC extensions\r
+CSTANDARD = -std=gnu99\r
+\r
+\r
+# Place -D or -U options here for C sources\r
+CDEFS  = -DF_CPU=$(F_CPU)UL -DF_CLOCK=$(F_CLOCK)UL -DBOARD=BOARD_$(BOARD)\r
+CDEFS += -DUSE_NONSTANDARD_DESCRIPTOR_NAMES -DNO_STREAM_CALLBACKS -DUSB_DEVICE_ONLY\r
+CDEFS += -DFIXED_CONTROL_ENDPOINT_SIZE=8 -DUSE_SINGLE_DEVICE_CONFIGURATION\r
+CDEFS += -DUSE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)"\r
+\r
+\r
+# Place -D or -U options here for ASM sources\r
+ADEFS = -DF_CPU=$(F_CPU)\r
+\r
+\r
+# Place -D or -U options here for C++ sources\r
+CPPDEFS = -DF_CPU=$(F_CPU)UL\r
+#CPPDEFS += -D__STDC_LIMIT_MACROS\r
+#CPPDEFS += -D__STDC_CONSTANT_MACROS\r
+\r
+\r
+\r
+#---------------- Compiler Options C ----------------\r
+#  -g*:          generate debugging information\r
+#  -O*:          optimization level\r
+#  -f...:        tuning, see GCC manual and avr-libc documentation\r
+#  -Wall...:     warning level\r
+#  -Wa,...:      tell GCC to pass this to the assembler.\r
+#    -adhlns...: create assembler listing\r
+CFLAGS = -g$(DEBUG)\r
+CFLAGS += $(CDEFS)\r
+CFLAGS += -O$(OPT)\r
+CFLAGS += -funsigned-char\r
+CFLAGS += -funsigned-bitfields\r
+CFLAGS += -ffunction-sections\r
+CFLAGS += -fpack-struct\r
+CFLAGS += -fshort-enums\r
+CFLAGS += -finline-limit=20\r
+CFLAGS += -Wall\r
+CFLAGS += -Wstrict-prototypes\r
+CFLAGS += -Wundef\r
+#CFLAGS += -fno-unit-at-a-time\r
+#CFLAGS += -Wunreachable-code\r
+#CFLAGS += -Wsign-compare\r
+CFLAGS += -Wa,-adhlns=$(<:%.c=$(OBJDIR)/%.lst)\r
+CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))\r
+CFLAGS += $(CSTANDARD)\r
+\r
+\r
+#---------------- Compiler Options C++ ----------------\r
+#  -g*:          generate debugging information\r
+#  -O*:          optimization level\r
+#  -f...:        tuning, see GCC manual and avr-libc documentation\r
+#  -Wall...:     warning level\r
+#  -Wa,...:      tell GCC to pass this to the assembler.\r
+#    -adhlns...: create assembler listing\r
+CPPFLAGS = -g$(DEBUG)\r
+CPPFLAGS += $(CPPDEFS)\r
+CPPFLAGS += -O$(OPT)\r
+CPPFLAGS += -funsigned-char\r
+CPPFLAGS += -funsigned-bitfields\r
+CPPFLAGS += -fpack-struct\r
+CPPFLAGS += -fshort-enums\r
+CPPFLAGS += -fno-exceptions\r
+CPPFLAGS += -Wall\r
+CFLAGS += -Wundef\r
+#CPPFLAGS += -mshort-calls\r
+#CPPFLAGS += -fno-unit-at-a-time\r
+#CPPFLAGS += -Wstrict-prototypes\r
+#CPPFLAGS += -Wunreachable-code\r
+#CPPFLAGS += -Wsign-compare\r
+CPPFLAGS += -Wa,-adhlns=$(<:%.cpp=$(OBJDIR)/%.lst)\r
+CPPFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))\r
+#CPPFLAGS += $(CSTANDARD)\r
+\r
+\r
+#---------------- Assembler Options ----------------\r
+#  -Wa,...:   tell GCC to pass this to the assembler.\r
+#  -adhlns:   create listing\r
+#  -gstabs:   have the assembler create line number information; note that\r
+#             for use in COFF files, additional information about filenames\r
+#             and function names needs to be present in the assembler source\r
+#             files -- see avr-libc docs [FIXME: not yet described there]\r
+#  -listing-cont-lines: Sets the maximum number of continuation lines of hex \r
+#       dump that will be displayed for a given single line of source input.\r
+ASFLAGS = $(ADEFS) -Wa,-adhlns=$(<:%.S=$(OBJDIR)/%.lst),-gstabs,--listing-cont-lines=100\r
+\r
+\r
+#---------------- Library Options ----------------\r
+# Minimalistic printf version\r
+PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min\r
+\r
+# Floating point printf version (requires MATH_LIB = -lm below)\r
+PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt\r
+\r
+# If this is left blank, then it will use the Standard printf version.\r
+PRINTF_LIB = \r
+#PRINTF_LIB = $(PRINTF_LIB_MIN)\r
+#PRINTF_LIB = $(PRINTF_LIB_FLOAT)\r
+\r
+\r
+# Minimalistic scanf version\r
+SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min\r
+\r
+# Floating point + %[ scanf version (requires MATH_LIB = -lm below)\r
+SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt\r
+\r
+# If this is left blank, then it will use the Standard scanf version.\r
+SCANF_LIB = \r
+#SCANF_LIB = $(SCANF_LIB_MIN)\r
+#SCANF_LIB = $(SCANF_LIB_FLOAT)\r
+\r
+\r
+MATH_LIB = -lm\r
+\r
+\r
+# List any extra directories to look for libraries here.\r
+#     Each directory must be seperated by a space.\r
+#     Use forward slashes for directory separators.\r
+#     For a directory that has spaces, enclose it in quotes.\r
+EXTRALIBDIRS = \r
+\r
+\r
+\r
+#---------------- External Memory Options ----------------\r
+\r
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),\r
+# used for variables (.data/.bss) and heap (malloc()).\r
+#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff\r
+\r
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),\r
+# only used for heap (malloc()).\r
+#EXTMEMOPTS = -Wl,--section-start,.data=0x801100,--defsym=__heap_end=0x80ffff\r
+\r
+EXTMEMOPTS =\r
+\r
+\r
+\r
+#---------------- Linker Options ----------------\r
+#  -Wl,...:     tell GCC to pass this to linker.\r
+#    -Map:      create map file\r
+#    --cref:    add cross reference to  map file\r
+LDFLAGS = -Wl,-Map=$(TARGET).map,--cref\r
+LDFLAGS += -Wl,--relax \r
+LDFLAGS += -Wl,--gc-sections\r
+LDFLAGS += $(EXTMEMOPTS)\r
+LDFLAGS += $(patsubst %,-L%,$(EXTRALIBDIRS))\r
+LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)\r
+#LDFLAGS += -T linker_script.x\r
+\r
+\r
+\r
+#---------------- Programming Options (avrdude) ----------------\r
+\r
+# Programming hardware: alf avr910 avrisp bascom bsd \r
+# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500\r
+#\r
+# Type: avrdude -c ?\r
+# to get a full listing.\r
+#\r
+AVRDUDE_PROGRAMMER = jtagmkII\r
+\r
+# com1 = serial port. Use lpt1 to connect to parallel port.\r
+AVRDUDE_PORT = usb\r
+\r
+AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex\r
+#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep\r
+\r
+\r
+# Uncomment the following if you want avrdude's erase cycle counter.\r
+# Note that this counter needs to be initialized first using -Yn,\r
+# see avrdude manual.\r
+#AVRDUDE_ERASE_COUNTER = -y\r
+\r
+# Uncomment the following if you do /not/ wish a verification to be\r
+# performed after programming the device.\r
+#AVRDUDE_NO_VERIFY = -V\r
+\r
+# Increase verbosity level.  Please use this when submitting bug\r
+# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude> \r
+# to submit bug reports.\r
+#AVRDUDE_VERBOSE = -v -v\r
+\r
+AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)\r
+AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY)\r
+AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE)\r
+AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER)\r
+\r
+\r
+\r
+#---------------- Debugging Options ----------------\r
+\r
+# For simulavr only - target MCU frequency.\r
+DEBUG_MFREQ = $(F_CPU)\r
+\r
+# Set the DEBUG_UI to either gdb or insight.\r
+# DEBUG_UI = gdb\r
+DEBUG_UI = insight\r
+\r
+# Set the debugging back-end to either avarice, simulavr.\r
+DEBUG_BACKEND = avarice\r
+#DEBUG_BACKEND = simulavr\r
+\r
+# GDB Init Filename.\r
+GDBINIT_FILE = __avr_gdbinit\r
+\r
+# When using avarice settings for the JTAG\r
+JTAG_DEV = /dev/com1\r
+\r
+# Debugging port used to communicate between GDB / avarice / simulavr.\r
+DEBUG_PORT = 4242\r
+\r
+# Debugging host used to communicate between GDB / avarice / simulavr, normally\r
+#     just set to localhost unless doing some sort of crazy debugging when \r
+#     avarice is running on a different computer.\r
+DEBUG_HOST = localhost\r
+\r
+\r
+\r
+#============================================================================\r
+\r
+\r
+# Define programs and commands.\r
+SHELL = sh\r
+CC = avr-gcc\r
+OBJCOPY = avr-objcopy\r
+OBJDUMP = avr-objdump\r
+SIZE = avr-size\r
+AR = avr-ar rcs\r
+NM = avr-nm\r
+AVRDUDE = avrdude\r
+REMOVE = rm -f\r
+REMOVEDIR = rm -rf\r
+COPY = cp\r
+WINSHELL = cmd\r
+\r
+# Define Messages\r
+# English\r
+MSG_ERRORS_NONE = Errors: none\r
+MSG_BEGIN = -------- begin --------\r
+MSG_END = --------  end  --------\r
+MSG_SIZE_BEFORE = Size before: \r
+MSG_SIZE_AFTER = Size after:\r
+MSG_COFF = Converting to AVR COFF:\r
+MSG_EXTENDED_COFF = Converting to AVR Extended COFF:\r
+MSG_FLASH = Creating load file for Flash:\r
+MSG_EEPROM = Creating load file for EEPROM:\r
+MSG_EXTENDED_LISTING = Creating Extended Listing:\r
+MSG_SYMBOL_TABLE = Creating Symbol Table:\r
+MSG_LINKING = Linking:\r
+MSG_COMPILING = Compiling C:\r
+MSG_COMPILING_CPP = Compiling C++:\r
+MSG_ASSEMBLING = Assembling:\r
+MSG_CLEANING = Cleaning project:\r
+MSG_CREATING_LIBRARY = Creating library:\r
+\r
+\r
+\r
+\r
+# Define all object files.\r
+OBJ = $(SRC:%.c=$(OBJDIR)/%.o) $(CPPSRC:%.cpp=$(OBJDIR)/%.o) $(ASRC:%.S=$(OBJDIR)/%.o) \r
+\r
+# Define all listing files.\r
+LST = $(SRC:%.c=$(OBJDIR)/%.lst) $(CPPSRC:%.cpp=$(OBJDIR)/%.lst) $(ASRC:%.S=$(OBJDIR)/%.lst) \r
+\r
+\r
+# Compiler flags to generate dependency files.\r
+GENDEPFLAGS = -MMD -MP -MF .dep/$(@F).d\r
+\r
+\r
+# Combine all necessary flags and optional flags.\r
+# Add target processor to flags.\r
+ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS)\r
+ALL_CPPFLAGS = -mmcu=$(MCU) -I. -x c++ $(CPPFLAGS) $(GENDEPFLAGS)\r
+ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)\r
+\r
+\r
+\r
+\r
+\r
+# Default target.\r
+all: begin gccversion sizebefore build checkhooks checklibmode checkboard sizeafter end\r
+\r
+# Change the build target to build a HEX file or a library.\r
+build: elf hex eep lss sym\r
+#build: lib\r
+\r
+\r
+elf: $(TARGET).elf\r
+hex: $(TARGET).hex\r
+eep: $(TARGET).eep\r
+lss: $(TARGET).lss\r
+sym: $(TARGET).sym\r
+LIBNAME=lib$(TARGET).a\r
+lib: $(LIBNAME)\r
+\r
+\r
+\r
+# Eye candy.\r
+# AVR Studio 3.x does not check make's exit code but relies on\r
+# the following magic strings to be generated by the compile job.\r
+begin:\r
+       @echo\r
+       @echo $(MSG_BEGIN)\r
+\r
+end:\r
+       @echo $(MSG_END)\r
+       @echo\r
+\r
+\r
+# Display size of file.\r
+HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex\r
+ELFSIZE = $(SIZE) $(MCU_FLAG) $(FORMAT_FLAG) $(TARGET).elf\r
+MCU_FLAG = $(shell $(SIZE) --help | grep -- --mcu > /dev/null && echo --mcu=$(MCU) )\r
+FORMAT_FLAG = $(shell $(SIZE) --help | grep -- --format=.*avr > /dev/null && echo --format=avr )\r
+\r
+sizebefore:\r
+       @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \\r
+       2>/dev/null; echo; fi\r
+\r
+sizeafter:\r
+       @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \\r
+       2>/dev/null; echo; fi\r
+\r
+checkhooks: build\r
+       @echo\r
+       @echo ------- Unhooked LUFA Events -------\r
+       @$(shell) (grep -s '^EVENT_.*LUFA/.*\\.o' $(TARGET).map | \\r
+                  cut -d' ' -f1 | cut -d'_' -f2- | grep ".*") || \\r
+                          echo "(None)"\r
+       @echo ------------------------------------\r
+\r
+checklibmode:\r
+       @echo\r
+       @echo ----------- Library Mode -----------\r
+       @$(shell) ($(CC) $(ALL_CFLAGS) -E -dM - < /dev/null \\r
+                 | grep 'USB_\(DEVICE\|HOST\)_ONLY' | cut -d' ' -f2 | grep ".*") \\r
+                 || echo "No specific mode (both device and host mode allowable)."\r
+       @echo ------------------------------------\r
+\r
+checkboard:\r
+       @echo\r
+       @echo ---------- Selected Board ----------\r
+       @echo Selected board model is $(BOARD).\r
+       @echo ------------------------------------\r
+       \r
+# Display compiler version information.\r
+gccversion : \r
+       @$(CC) --version\r
+\r
+\r
+\r
+# Program the device.  \r
+program: $(TARGET).hex $(TARGET).eep\r
+       $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)\r
+\r
+flip: $(TARGET).hex\r
+       batchisp -hardware usb -device $(MCU) -operation erase f\r
+       batchisp -hardware usb -device $(MCU) -operation loadbuffer $(TARGET).hex program\r
+       batchisp -hardware usb -device $(MCU) -operation start reset 0\r
+\r
+dfu: $(TARGET).hex\r
+       dfu-programmer $(MCU) erase\r
+       dfu-programmer $(MCU) flash --debug 1 $(TARGET).hex\r
+       dfu-programmer $(MCU) reset\r
+\r
+flip-ee: $(TARGET).hex $(TARGET).eep\r
+       copy $(TARGET).eep $(TARGET)eep.hex\r
+       batchisp -hardware usb -device $(MCU) -operation memory EEPROM erase\r
+       batchisp -hardware usb -device $(MCU) -operation memory EEPROM loadbuffer $(TARGET)eep.hex program\r
+       batchisp -hardware usb -device $(MCU) -operation start reset 0\r
+\r
+dfu-ee: $(TARGET).hex $(TARGET).eep\r
+       dfu-programmer $(MCU) flash-eeprom --debug 1 --suppress-bootloader-mem $(TARGET).eep\r
+       dfu-programmer $(MCU) reset\r
+\r
+\r
+# Generate avr-gdb config/init file which does the following:\r
+#     define the reset signal, load the target file, connect to target, and set \r
+#     a breakpoint at main().\r
+gdb-config: \r
+       @$(REMOVE) $(GDBINIT_FILE)\r
+       @echo define reset >> $(GDBINIT_FILE)\r
+       @echo SIGNAL SIGHUP >> $(GDBINIT_FILE)\r
+       @echo end >> $(GDBINIT_FILE)\r
+       @echo file $(TARGET).elf >> $(GDBINIT_FILE)\r
+       @echo target remote $(DEBUG_HOST):$(DEBUG_PORT)  >> $(GDBINIT_FILE)\r
+ifeq ($(DEBUG_BACKEND),simulavr)\r
+       @echo load  >> $(GDBINIT_FILE)\r
+endif\r
+       @echo break main >> $(GDBINIT_FILE)\r
+\r
+debug: gdb-config $(TARGET).elf\r
+ifeq ($(DEBUG_BACKEND), avarice)\r
+       @echo Starting AVaRICE - Press enter when "waiting to connect" message displays.\r
+       @$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \\r
+       $(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT)\r
+       @$(WINSHELL) /c pause\r
+\r
+else\r
+       @$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \\r
+       $(DEBUG_MFREQ) --port $(DEBUG_PORT)\r
+endif\r
+       @$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE)\r
+\r
+\r
+\r
+\r
+# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.\r
+COFFCONVERT = $(OBJCOPY) --debugging\r
+COFFCONVERT += --change-section-address .data-0x800000\r
+COFFCONVERT += --change-section-address .bss-0x800000\r
+COFFCONVERT += --change-section-address .noinit-0x800000\r
+COFFCONVERT += --change-section-address .eeprom-0x810000\r
+\r
+\r
+\r
+coff: $(TARGET).elf\r
+       @echo\r
+       @echo $(MSG_COFF) $(TARGET).cof\r
+       $(COFFCONVERT) -O coff-avr $< $(TARGET).cof\r
+\r
+\r
+extcoff: $(TARGET).elf\r
+       @echo\r
+       @echo $(MSG_EXTENDED_COFF) $(TARGET).cof\r
+       $(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof\r
+\r
+\r
+\r
+# Create final output files (.hex, .eep) from ELF output file.\r
+%.hex: %.elf\r
+       @echo\r
+       @echo $(MSG_FLASH) $@\r
+       $(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@\r
+\r
+%.eep: %.elf\r
+       @echo\r
+       @echo $(MSG_EEPROM) $@\r
+       -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \\r
+       --change-section-lma .eeprom=0 --no-change-warnings -O $(FORMAT) $< $@ || exit 0\r
+\r
+# Create extended listing file from ELF output file.\r
+%.lss: %.elf\r
+       @echo\r
+       @echo $(MSG_EXTENDED_LISTING) $@\r
+       $(OBJDUMP) -h -z -S $< > $@\r
+\r
+# Create a symbol table from ELF output file.\r
+%.sym: %.elf\r
+       @echo\r
+       @echo $(MSG_SYMBOL_TABLE) $@\r
+       $(NM) -n $< > $@\r
+\r
+\r
+\r
+# Create library from object files.\r
+.SECONDARY : $(TARGET).a\r
+.PRECIOUS : $(OBJ)\r
+%.a: $(OBJ)\r
+       @echo\r
+       @echo $(MSG_CREATING_LIBRARY) $@\r
+       $(AR) $@ $(OBJ)\r
+\r
+\r
+# Link: create ELF output file from object files.\r
+.SECONDARY : $(TARGET).elf\r
+.PRECIOUS : $(OBJ)\r
+%.elf: $(OBJ)\r
+       @echo\r
+       @echo $(MSG_LINKING) $@\r
+       $(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)\r
+\r
+\r
+# Compile: create object files from C source files.\r
+$(OBJDIR)/%.o : %.c\r
+       @echo\r
+       @echo $(MSG_COMPILING) $<\r
+       $(CC) -c $(ALL_CFLAGS) $< -o $@ \r
+\r
+\r
+# Compile: create object files from C++ source files.\r
+$(OBJDIR)/%.o : %.cpp\r
+       @echo\r
+       @echo $(MSG_COMPILING_CPP) $<\r
+       $(CC) -c $(ALL_CPPFLAGS) $< -o $@ \r
+\r
+\r
+# Compile: create assembler files from C source files.\r
+%.s : %.c\r
+       $(CC) -S $(ALL_CFLAGS) $< -o $@\r
+\r
+\r
+# Compile: create assembler files from C++ source files.\r
+%.s : %.cpp\r
+       $(CC) -S $(ALL_CPPFLAGS) $< -o $@\r
+\r
+\r
+# Assemble: create object files from assembler source files.\r
+$(OBJDIR)/%.o : %.S\r
+       @echo\r
+       @echo $(MSG_ASSEMBLING) $<\r
+       $(CC) -c $(ALL_ASFLAGS) $< -o $@\r
+\r
+\r
+# Create preprocessed source for use in sending a bug report.\r
+%.i : %.c\r
+       $(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ \r
+       \r
+\r
+# Target: clean project.\r
+clean: begin clean_list clean_binary end\r
+\r
+clean_binary:\r
+       $(REMOVE) $(TARGET).hex\r
+       \r
+clean_list:\r
+       @echo $(MSG_CLEANING)\r
+       $(REMOVE) $(TARGET).eep\r
+       $(REMOVE) $(TARGET)eep.hex\r
+       $(REMOVE) $(TARGET).cof\r
+       $(REMOVE) $(TARGET).elf\r
+       $(REMOVE) $(TARGET).map\r
+       $(REMOVE) $(TARGET).sym\r
+       $(REMOVE) $(TARGET).lss\r
+       $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.o)\r
+       $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.lst)\r
+       $(REMOVE) $(SRC:.c=.s)\r
+       $(REMOVE) $(SRC:.c=.d)\r
+       $(REMOVE) $(SRC:.c=.i)\r
+       $(REMOVEDIR) .dep\r
+\r
+\r
+doxygen:\r
+       @echo Generating Project Documentation...\r
+       @doxygen Doxygen.conf\r
+       @echo Documentation Generation Complete.\r
+\r
+clean_doxygen:\r
+       rm -rf Documentation\r
+\r
+# Create object files directory\r
+$(shell mkdir $(OBJDIR) 2>/dev/null)\r
+\r
+\r
+# Include the dependency files.\r
+-include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)\r
+\r
+\r
+# Listing of phony targets.\r
+.PHONY : all checkhooks checklibmode checkboard   \\r
+begin finish end sizebefore sizeafter gccversion  \\r
+build elf hex eep lss sym coff extcoff clean      \\r
+clean_list clean_binary program debug gdb-config  \\r
+doxygen dfu flip flip-ee dfu-ee
\ No newline at end of file
diff --git a/Demos/Device/LowLevel/GenericHID/Descriptors.c b/Demos/Device/LowLevel/GenericHID/Descriptors.c
new file mode 100644 (file)
index 0000000..ca1a110
--- /dev/null
@@ -0,0 +1,250 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  USB Device Descriptors, for library use when in USB device mode. Descriptors are special \r
+ *  computer-readable structures which the host requests upon device enumeration, to determine\r
+ *  the device's capabilities and functions.  \r
+ */\r
+\r
+#include "Descriptors.h"\r
+\r
+/** HID class report descriptor. This is a special descriptor constructed with values from the\r
+ *  USBIF HID class specification to describe the reports and capabilities of the HID device. This\r
+ *  descriptor is parsed by the host and its contents used to determine what data (and in what encoding)\r
+ *  the device will send, and what it may be sent back from the host. Refer to the HID specification for\r
+ *  more details on HID report descriptors.\r
+ */\r
+USB_Descriptor_HIDReport_Datatype_t PROGMEM GenericReport[] =\r
+{\r
+       0x06, 0x9c, 0xff,     /* Usage Page (Vendor Defined)                     */\r
+       0x09, 0x01,           /* Usage (Vendor Defined)                          */\r
+       0xa1, 0x01,           /* Collection (Vendor Defined)                     */\r
+       0x09, 0x02,           /*   Usage (Vendor Defined)                        */\r
+       0x75, 0x08,           /*   Report Size (8)                               */\r
+       0x95, GENERIC_REPORT_SIZE, /*   Report Count (GENERIC_REPORT_SIZE)       */\r
+       0x15, 0x00,           /*   Logical Minimum (0)                           */\r
+       0x25, 0xff,           /*   Logical Maximum (255)                         */\r
+       0x81, 0x02,           /*   Input (Data, Variable, Absolute)              */\r
+       0x09, 0x03,           /*   Usage (Vendor Defined)                        */\r
+       0x75, 0x08,           /*   Report Size (8)                               */\r
+       0x95, GENERIC_REPORT_SIZE, /*   Report Count (GENERIC_REPORT_SIZE)       */\r
+       0x15, 0x00,           /*   Logical Minimum (0)                           */\r
+       0x25, 0xff,           /*   Logical Maximum (255)                         */\r
+       0x91, 0x02,           /*   Output (Data, Variable, Absolute)             */\r
+       0xc0                  /* End Collection                                  */\r
+};\r
+\r
+/** Device descriptor structure. This descriptor, located in FLASH memory, describes the overall\r
+ *  device characteristics, including the supported USB version, control endpoint size and the\r
+ *  number of device configurations. The descriptor is read out by the USB host when the enumeration\r
+ *  process begins.\r
+ */\r
+USB_Descriptor_Device_t PROGMEM DeviceDescriptor =\r
+{\r
+       .Header                 = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device},\r
+               \r
+       .USBSpecification       = VERSION_BCD(01.10),\r
+       .Class                  = 0x00,\r
+       .SubClass               = 0x00,\r
+       .Protocol               = 0x00,\r
+                               \r
+       .Endpoint0Size          = FIXED_CONTROL_ENDPOINT_SIZE,\r
+               \r
+       .VendorID               = 0x03EB,\r
+       .ProductID              = 0x204F,\r
+       .ReleaseNumber          = 0x0000,\r
+               \r
+       .ManufacturerStrIndex   = 0x01,\r
+       .ProductStrIndex        = 0x02,\r
+       .SerialNumStrIndex      = NO_DESCRIPTOR,\r
+               \r
+       .NumberOfConfigurations = 1\r
+};\r
+\r
+/** Configuration descriptor structure. This descriptor, located in FLASH memory, describes the usage\r
+ *  of the device in one of its supported configurations, including information about any device interfaces\r
+ *  and endpoints. The descriptor is read out by the USB host during the enumeration process when selecting\r
+ *  a configuration so that the host may correctly communicate with the USB device.\r
+ */\r
+USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =\r
+{\r
+       .Config = \r
+               {\r
+                       .Header                 = {.Size = sizeof(USB_Descriptor_Configuration_Header_t), .Type = DTYPE_Configuration},\r
+\r
+                       .TotalConfigurationSize = sizeof(USB_Descriptor_Configuration_t),\r
+                       .TotalInterfaces        = 1,\r
+                               \r
+                       .ConfigurationNumber    = 1,\r
+                       .ConfigurationStrIndex  = NO_DESCRIPTOR,\r
+                               \r
+                       .ConfigAttributes       = (USB_CONFIG_ATTR_BUSPOWERED | USB_CONFIG_ATTR_SELFPOWERED),\r
+                       \r
+                       .MaxPowerConsumption    = USB_CONFIG_POWER_MA(100)\r
+               },\r
+               \r
+       .Interface = \r
+               {\r
+                       .Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},\r
+\r
+                       .InterfaceNumber        = 0x00,\r
+                       .AlternateSetting       = 0x00,\r
+                       \r
+                       .TotalEndpoints         = 2,\r
+                               \r
+                       .Class                  = 0x03,\r
+                       .SubClass               = 0x00,\r
+                       .Protocol               = 0x00,\r
+                               \r
+                       .InterfaceStrIndex      = NO_DESCRIPTOR\r
+               },\r
+\r
+       .GenericHID = \r
+               {\r
+                       .Header                 = {.Size = sizeof(USB_Descriptor_HID_t), .Type = DTYPE_HID},\r
+                                                                        \r
+                       .HIDSpec                = VERSION_BCD(01.11),\r
+                       .CountryCode            = 0x00,\r
+                       .TotalReportDescriptors = 1,\r
+                       .HIDReportType          = DTYPE_Report,\r
+                       .HIDReportLength        = sizeof(GenericReport)\r
+               },\r
+\r
+       .GenericINEndpoint = \r
+               {\r
+                       .Header                 = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},\r
+                                                                                \r
+                       .EndpointAddress        = (ENDPOINT_DESCRIPTOR_DIR_IN | GENERIC_IN_EPNUM),\r
+                       .Attributes             = EP_TYPE_INTERRUPT,\r
+                       .EndpointSize           = GENERIC_EPSIZE,\r
+                       .PollingIntervalMS      = 0x02\r
+               },\r
+\r
+       .GenericOUTEndpoint = \r
+               {\r
+                       .Header                 = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},\r
+                                                                                \r
+                       .EndpointAddress        = (ENDPOINT_DESCRIPTOR_DIR_OUT | GENERIC_OUT_EPNUM),\r
+                       .Attributes             = EP_TYPE_INTERRUPT,\r
+                       .EndpointSize           = GENERIC_EPSIZE,\r
+                       .PollingIntervalMS      = 0x02\r
+               }\r
+};\r
+\r
+/** Language descriptor structure. This descriptor, located in FLASH memory, is returned when the host requests\r
+ *  the string descriptor with index 0 (the first index). It is actually an array of 16-bit integers, which indicate\r
+ *  via the language ID table available at USB.org what languages the device supports for its string descriptors.\r
+ */\r
+USB_Descriptor_String_t PROGMEM LanguageString =\r
+{\r
+       .Header                 = {.Size = USB_STRING_LEN(1), .Type = DTYPE_String},\r
+               \r
+       .UnicodeString          = {LANGUAGE_ID_ENG}\r
+};\r
+\r
+/** Manufacturer descriptor string. This is a Unicode string containing the manufacturer's details in human readable\r
+ *  form, and is read out upon request by the host when the appropriate string ID is requested, listed in the Device\r
+ *  Descriptor.\r
+ */\r
+USB_Descriptor_String_t PROGMEM ManufacturerString =\r
+{\r
+       .Header                 = {.Size = USB_STRING_LEN(11), .Type = DTYPE_String},\r
+               \r
+       .UnicodeString          = L"Dean Camera"\r
+};\r
+\r
+/** Product descriptor string. This is a Unicode string containing the product's details in human readable form,\r
+ *  and is read out upon request by the host when the appropriate string ID is requested, listed in the Device\r
+ *  Descriptor.\r
+ */\r
+USB_Descriptor_String_t PROGMEM ProductString =\r
+{\r
+       .Header                 = {.Size = USB_STRING_LEN(21), .Type = DTYPE_String},\r
+               \r
+       .UnicodeString          = L"LUFA Generic HID Demo"\r
+};\r
+\r
+/** This function is called by the library when in device mode, and must be overridden (see library "USB Descriptors"\r
+ *  documentation) by the application code so that the address and size of a requested descriptor can be given\r
+ *  to the USB library. When the device receives a Get Descriptor request on the control endpoint, this function\r
+ *  is called so that the descriptor details can be passed back and the appropriate descriptor sent back to the\r
+ *  USB host.\r
+ */\r
+uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
+{\r
+       const uint8_t  DescriptorType   = (wValue >> 8);\r
+       const uint8_t  DescriptorNumber = (wValue & 0xFF);\r
+\r
+       void*    Address = NULL;\r
+       uint16_t Size    = NO_DESCRIPTOR;\r
+\r
+       switch (DescriptorType)\r
+       {\r
+               case DTYPE_Device:\r
+                       Address = (void*)&DeviceDescriptor;\r
+                       Size    = sizeof(USB_Descriptor_Device_t);\r
+                       break;\r
+               case DTYPE_Configuration: \r
+                       Address = (void*)&ConfigurationDescriptor;\r
+                       Size    = sizeof(USB_Descriptor_Configuration_t);\r
+                       break;\r
+               case DTYPE_String: \r
+                       switch (DescriptorNumber)\r
+                       {\r
+                               case 0x00: \r
+                                       Address = (void*)&LanguageString;\r
+                                       Size    = pgm_read_byte(&LanguageString.Header.Size);\r
+                                       break;\r
+                               case 0x01: \r
+                                       Address = (void*)&ManufacturerString;\r
+                                       Size    = pgm_read_byte(&ManufacturerString.Header.Size);\r
+                                       break;\r
+                               case 0x02: \r
+                                       Address = (void*)&ProductString;\r
+                                       Size    = pgm_read_byte(&ProductString.Header.Size);\r
+                                       break;\r
+                       }\r
+                       \r
+                       break;\r
+               case DTYPE_HID: \r
+                       Address = (void*)&ConfigurationDescriptor.GenericHID;\r
+                       Size    = sizeof(USB_Descriptor_HID_t);\r
+                       break;\r
+               case DTYPE_Report: \r
+                       Address = (void*)&GenericReport;\r
+                       Size    = sizeof(GenericReport);\r
+                       break;\r
+       }\r
+       \r
+       *DescriptorAddress = Address;\r
+       return Size;\r
+}\r
diff --git a/Demos/Device/LowLevel/GenericHID/Descriptors.h b/Demos/Device/LowLevel/GenericHID/Descriptors.h
new file mode 100644 (file)
index 0000000..0236870
--- /dev/null
@@ -0,0 +1,100 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  Header file for Descriptors.c.\r
+ */\r
\r
+#ifndef _DESCRIPTORS_H_\r
+#define _DESCRIPTORS_H_\r
+\r
+       /* Includes: */\r
+               #include <LUFA/Drivers/USB/USB.h>\r
+\r
+               #include <avr/pgmspace.h>\r
+\r
+       /* Type Defines: */\r
+               /** Type define for the HID class specific HID descriptor, to describe the HID device's specifications. Refer to the HID\r
+                *  specification for details on the structure elements.\r
+                */\r
+               typedef struct\r
+               {\r
+                       USB_Descriptor_Header_t               Header;\r
+                               \r
+                       uint16_t                              HIDSpec;\r
+                       uint8_t                               CountryCode;\r
+               \r
+                       uint8_t                               TotalReportDescriptors;\r
+\r
+                       uint8_t                               HIDReportType;\r
+                       uint16_t                              HIDReportLength;\r
+               } USB_Descriptor_HID_t;\r
+\r
+               /** Type define for the data type used to store HID report descriptor elements. */\r
+               typedef uint8_t USB_Descriptor_HIDReport_Datatype_t;\r
+\r
+               /** Type define for the device configuration descriptor structure. This must be defined in the\r
+                *  application code, as the configuration descriptor contains several sub-descriptors which\r
+                *  vary between devices, and which describe the device's usage to the host.\r
+                */\r
+               typedef struct\r
+               {\r
+                       USB_Descriptor_Configuration_Header_t Config;\r
+                       USB_Descriptor_Interface_t            Interface;\r
+                       USB_Descriptor_HID_t                  GenericHID;\r
+               USB_Descriptor_Endpoint_t             GenericINEndpoint;\r
+               USB_Descriptor_Endpoint_t             GenericOUTEndpoint;\r
+               } USB_Descriptor_Configuration_t;\r
+                                       \r
+       /* Macros: */\r
+               /** Endpoint number of the Generic HID reporting IN endpoint. */\r
+               #define GENERIC_IN_EPNUM          1\r
+\r
+               /** Endpoint number of the Generic HID reporting OUT endpoint. */\r
+               #define GENERIC_OUT_EPNUM         2\r
+\r
+               /** Size in bytes of the Generic HID reporting endpoint. */\r
+               #define GENERIC_EPSIZE            8\r
+               \r
+               /** Size in bytes of the Generic HID reports (including report ID byte). */\r
+               #define GENERIC_REPORT_SIZE       8\r
+\r
+               /** Descriptor header type value, to indicate a HID class HID descriptor. */\r
+               #define DTYPE_HID                 0x21\r
+               \r
+               /** Descriptor header type value, to indicate a HID class HID report descriptor. */\r
+               #define DTYPE_Report              0x22\r
+\r
+       /* Function Prototypes: */\r
+               uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
+                                                                                       ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);\r
+\r
+#endif\r
diff --git a/Demos/Device/LowLevel/GenericHID/Doxygen.conf b/Demos/Device/LowLevel/GenericHID/Doxygen.conf
new file mode 100644 (file)
index 0000000..dea5d4f
--- /dev/null
@@ -0,0 +1,1485 @@
+# Doxyfile 1.5.7.1\r
+\r
+# This file describes the settings to be used by the documentation system\r
+# doxygen (www.doxygen.org) for a project\r
+#\r
+# All text after a hash (#) is considered a comment and will be ignored\r
+# The format is:\r
+#       TAG = value [value, ...]\r
+# For lists items can also be appended using:\r
+#       TAG += value [value, ...]\r
+# Values that contain spaces should be placed between quotes (" ")\r
+\r
+#---------------------------------------------------------------------------\r
+# Project related configuration options\r
+#---------------------------------------------------------------------------\r
+\r
+# This tag specifies the encoding used for all characters in the config file \r
+# that follow. The default is UTF-8 which is also the encoding used for all \r
+# text before the first occurrence of this tag. Doxygen uses libiconv (or the \r
+# iconv built into libc) for the transcoding. See \r
+# http://www.gnu.org/software/libiconv for the list of possible encodings.\r
+\r
+DOXYFILE_ENCODING      = UTF-8\r
+\r
+# The PROJECT_NAME tag is a single word (or a sequence of words surrounded \r
+# by quotes) that should identify the project.\r
+\r
+PROJECT_NAME           = "LUFA Library - Generic HID Device Demo"\r
+\r
+# The PROJECT_NUMBER tag can be used to enter a project or revision number. \r
+# This could be handy for archiving the generated documentation or \r
+# if some version control system is used.\r
+\r
+PROJECT_NUMBER         = 0.0.0\r
+\r
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) \r
+# base path where the generated documentation will be put. \r
+# If a relative path is entered, it will be relative to the location \r
+# where doxygen was started. If left blank the current directory will be used.\r
+\r
+OUTPUT_DIRECTORY       = ./Documentation/\r
+\r
+# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create \r
+# 4096 sub-directories (in 2 levels) under the output directory of each output \r
+# format and will distribute the generated files over these directories. \r
+# Enabling this option can be useful when feeding doxygen a huge amount of \r
+# source files, where putting all generated files in the same directory would \r
+# otherwise cause performance problems for the file system.\r
+\r
+CREATE_SUBDIRS         = YES\r
+\r
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all \r
+# documentation generated by doxygen is written. Doxygen will use this \r
+# information to generate all constant output in the proper language. \r
+# The default language is English, other supported languages are: \r
+# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, \r
+# Croatian, Czech, Danish, Dutch, Farsi, Finnish, French, German, Greek, \r
+# Hungarian, Italian, Japanese, Japanese-en (Japanese with English messages), \r
+# Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, Polish, \r
+# Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, Slovene, \r
+# Spanish, Swedish, and Ukrainian.\r
+\r
+OUTPUT_LANGUAGE        = English\r
+\r
+# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will \r
+# include brief member descriptions after the members that are listed in \r
+# the file and class documentation (similar to JavaDoc). \r
+# Set to NO to disable this.\r
+\r
+BRIEF_MEMBER_DESC      = YES\r
+\r
+# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend \r
+# the brief description of a member or function before the detailed description. \r
+# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the \r
+# brief descriptions will be completely suppressed.\r
+\r
+REPEAT_BRIEF           = YES\r
+\r
+# This tag implements a quasi-intelligent brief description abbreviator \r
+# that is used to form the text in various listings. Each string \r
+# in this list, if found as the leading text of the brief description, will be \r
+# stripped from the text and the result after processing the whole list, is \r
+# used as the annotated text. Otherwise, the brief description is used as-is. \r
+# If left blank, the following values are used ("$name" is automatically \r
+# replaced with the name of the entity): "The $name class" "The $name widget" \r
+# "The $name file" "is" "provides" "specifies" "contains" \r
+# "represents" "a" "an" "the"\r
+\r
+ABBREVIATE_BRIEF       = "The $name class" \\r
+                         "The $name widget" \\r
+                         "The $name file" \\r
+                         is \\r
+                         provides \\r
+                         specifies \\r
+                         contains \\r
+                         represents \\r
+                         a \\r
+                         an \\r
+                         the\r
+\r
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then \r
+# Doxygen will generate a detailed section even if there is only a brief \r
+# description.\r
+\r
+ALWAYS_DETAILED_SEC    = NO\r
+\r
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all \r
+# inherited members of a class in the documentation of that class as if those \r
+# members were ordinary class members. Constructors, destructors and assignment \r
+# operators of the base classes will not be shown.\r
+\r
+INLINE_INHERITED_MEMB  = NO\r
+\r
+# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full \r
+# path before files name in the file list and in the header files. If set \r
+# to NO the shortest path that makes the file name unique will be used.\r
+\r
+FULL_PATH_NAMES        = YES\r
+\r
+# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag \r
+# can be used to strip a user-defined part of the path. Stripping is \r
+# only done if one of the specified strings matches the left-hand part of \r
+# the path. The tag can be used to show relative paths in the file list. \r
+# If left blank the directory from which doxygen is run is used as the \r
+# path to strip.\r
+\r
+STRIP_FROM_PATH        = \r
+\r
+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of \r
+# the path mentioned in the documentation of a class, which tells \r
+# the reader which header file to include in order to use a class. \r
+# If left blank only the name of the header file containing the class \r
+# definition is used. Otherwise one should specify the include paths that \r
+# are normally passed to the compiler using the -I flag.\r
+\r
+STRIP_FROM_INC_PATH    = \r
+\r
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter \r
+# (but less readable) file names. This can be useful is your file systems \r
+# doesn't support long names like on DOS, Mac, or CD-ROM.\r
+\r
+SHORT_NAMES            = YES\r
+\r
+# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen \r
+# will interpret the first line (until the first dot) of a JavaDoc-style \r
+# comment as the brief description. If set to NO, the JavaDoc \r
+# comments will behave just like regular Qt-style comments \r
+# (thus requiring an explicit @brief command for a brief description.)\r
+\r
+JAVADOC_AUTOBRIEF      = NO\r
+\r
+# If the QT_AUTOBRIEF tag is set to YES then Doxygen will \r
+# interpret the first line (until the first dot) of a Qt-style \r
+# comment as the brief description. If set to NO, the comments \r
+# will behave just like regular Qt-style comments (thus requiring \r
+# an explicit \brief command for a brief description.)\r
+\r
+QT_AUTOBRIEF           = NO\r
+\r
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen \r
+# treat a multi-line C++ special comment block (i.e. a block of //! or /// \r
+# comments) as a brief description. This used to be the default behaviour. \r
+# The new default is to treat a multi-line C++ comment block as a detailed \r
+# description. Set this tag to YES if you prefer the old behaviour instead.\r
+\r
+MULTILINE_CPP_IS_BRIEF = NO\r
+\r
+# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented \r
+# member inherits the documentation from any documented member that it \r
+# re-implements.\r
+\r
+INHERIT_DOCS           = YES\r
+\r
+# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce \r
+# a new page for each member. If set to NO, the documentation of a member will \r
+# be part of the file/class/namespace that contains it.\r
+\r
+SEPARATE_MEMBER_PAGES  = NO\r
+\r
+# The TAB_SIZE tag can be used to set the number of spaces in a tab. \r
+# Doxygen uses this value to replace tabs by spaces in code fragments.\r
+\r
+TAB_SIZE               = 4\r
+\r
+# This tag can be used to specify a number of aliases that acts \r
+# as commands in the documentation. An alias has the form "name=value". \r
+# For example adding "sideeffect=\par Side Effects:\n" will allow you to \r
+# put the command \sideeffect (or @sideeffect) in the documentation, which \r
+# will result in a user-defined paragraph with heading "Side Effects:". \r
+# You can put \n's in the value part of an alias to insert newlines.\r
+\r
+ALIASES                = \r
+\r
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C \r
+# sources only. Doxygen will then generate output that is more tailored for C. \r
+# For instance, some of the names that are used will be different. The list \r
+# of all members will be omitted, etc.\r
+\r
+OPTIMIZE_OUTPUT_FOR_C  = YES\r
+\r
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java \r
+# sources only. Doxygen will then generate output that is more tailored for \r
+# Java. For instance, namespaces will be presented as packages, qualified \r
+# scopes will look different, etc.\r
+\r
+OPTIMIZE_OUTPUT_JAVA   = NO\r
+\r
+# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran \r
+# sources only. Doxygen will then generate output that is more tailored for \r
+# Fortran.\r
+\r
+OPTIMIZE_FOR_FORTRAN   = NO\r
+\r
+# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL \r
+# sources. Doxygen will then generate output that is tailored for \r
+# VHDL.\r
+\r
+OPTIMIZE_OUTPUT_VHDL   = NO\r
+\r
+# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want \r
+# to include (a tag file for) the STL sources as input, then you should \r
+# set this tag to YES in order to let doxygen match functions declarations and \r
+# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. \r
+# func(std::string) {}). This also make the inheritance and collaboration \r
+# diagrams that involve STL classes more complete and accurate.\r
+\r
+BUILTIN_STL_SUPPORT    = NO\r
+\r
+# If you use Microsoft's C++/CLI language, you should set this option to YES to\r
+# enable parsing support.\r
+\r
+CPP_CLI_SUPPORT        = NO\r
+\r
+# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. \r
+# Doxygen will parse them like normal C++ but will assume all classes use public \r
+# instead of private inheritance when no explicit protection keyword is present.\r
+\r
+SIP_SUPPORT            = NO\r
+\r
+# For Microsoft's IDL there are propget and propput attributes to indicate getter \r
+# and setter methods for a property. Setting this option to YES (the default) \r
+# will make doxygen to replace the get and set methods by a property in the \r
+# documentation. This will only work if the methods are indeed getting or \r
+# setting a simple type. If this is not the case, or you want to show the \r
+# methods anyway, you should set this option to NO.\r
+\r
+IDL_PROPERTY_SUPPORT   = YES\r
+\r
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC \r
+# tag is set to YES, then doxygen will reuse the documentation of the first \r
+# member in the group (if any) for the other members of the group. By default \r
+# all members of a group must be documented explicitly.\r
+\r
+DISTRIBUTE_GROUP_DOC   = NO\r
+\r
+# Set the SUBGROUPING tag to YES (the default) to allow class member groups of \r
+# the same type (for instance a group of public functions) to be put as a \r
+# subgroup of that type (e.g. under the Public Functions section). Set it to \r
+# NO to prevent subgrouping. Alternatively, this can be done per class using \r
+# the \nosubgrouping command.\r
+\r
+SUBGROUPING            = YES\r
+\r
+# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum \r
+# is documented as struct, union, or enum with the name of the typedef. So \r
+# typedef struct TypeS {} TypeT, will appear in the documentation as a struct \r
+# with name TypeT. When disabled the typedef will appear as a member of a file, \r
+# namespace, or class. And the struct will be named TypeS. This can typically \r
+# be useful for C code in case the coding convention dictates that all compound \r
+# types are typedef'ed and only the typedef is referenced, never the tag name.\r
+\r
+TYPEDEF_HIDES_STRUCT   = NO\r
+\r
+# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to \r
+# determine which symbols to keep in memory and which to flush to disk.\r
+# When the cache is full, less often used symbols will be written to disk.\r
+# For small to medium size projects (<1000 input files) the default value is \r
+# probably good enough. For larger projects a too small cache size can cause \r
+# doxygen to be busy swapping symbols to and from disk most of the time \r
+# causing a significant performance penality. \r
+# If the system has enough physical memory increasing the cache will improve the \r
+# performance by keeping more symbols in memory. Note that the value works on \r
+# a logarithmic scale so increasing the size by one will rougly double the \r
+# memory usage. The cache size is given by this formula: \r
+# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, \r
+# corresponding to a cache size of 2^16 = 65536 symbols\r
+\r
+SYMBOL_CACHE_SIZE      = 0\r
+\r
+#---------------------------------------------------------------------------\r
+# Build related configuration options\r
+#---------------------------------------------------------------------------\r
+\r
+# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in \r
+# documentation are documented, even if no documentation was available. \r
+# Private class members and static file members will be hidden unless \r
+# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES\r
+\r
+EXTRACT_ALL            = YES\r
+\r
+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class \r
+# will be included in the documentation.\r
+\r
+EXTRACT_PRIVATE        = YES\r
+\r
+# If the EXTRACT_STATIC tag is set to YES all static members of a file \r
+# will be included in the documentation.\r
+\r
+EXTRACT_STATIC         = YES\r
+\r
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) \r
+# defined locally in source files will be included in the documentation. \r
+# If set to NO only classes defined in header files are included.\r
+\r
+EXTRACT_LOCAL_CLASSES  = YES\r
+\r
+# This flag is only useful for Objective-C code. When set to YES local \r
+# methods, which are defined in the implementation section but not in \r
+# the interface are included in the documentation. \r
+# If set to NO (the default) only methods in the interface are included.\r
+\r
+EXTRACT_LOCAL_METHODS  = NO\r
+\r
+# If this flag is set to YES, the members of anonymous namespaces will be \r
+# extracted and appear in the documentation as a namespace called \r
+# 'anonymous_namespace{file}', where file will be replaced with the base \r
+# name of the file that contains the anonymous namespace. By default \r
+# anonymous namespace are hidden.\r
+\r
+EXTRACT_ANON_NSPACES   = NO\r
+\r
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all \r
+# undocumented members of documented classes, files or namespaces. \r
+# If set to NO (the default) these members will be included in the \r
+# various overviews, but no documentation section is generated. \r
+# This option has no effect if EXTRACT_ALL is enabled.\r
+\r
+HIDE_UNDOC_MEMBERS     = NO\r
+\r
+# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all \r
+# undocumented classes that are normally visible in the class hierarchy. \r
+# If set to NO (the default) these classes will be included in the various \r
+# overviews. This option has no effect if EXTRACT_ALL is enabled.\r
+\r
+HIDE_UNDOC_CLASSES     = NO\r
+\r
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all \r
+# friend (class|struct|union) declarations. \r
+# If set to NO (the default) these declarations will be included in the \r
+# documentation.\r
+\r
+HIDE_FRIEND_COMPOUNDS  = NO\r
+\r
+# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any \r
+# documentation blocks found inside the body of a function. \r
+# If set to NO (the default) these blocks will be appended to the \r
+# function's detailed documentation block.\r
+\r
+HIDE_IN_BODY_DOCS      = NO\r
+\r
+# The INTERNAL_DOCS tag determines if documentation \r
+# that is typed after a \internal command is included. If the tag is set \r
+# to NO (the default) then the documentation will be excluded. \r
+# Set it to YES to include the internal documentation.\r
+\r
+INTERNAL_DOCS          = NO\r
+\r
+# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate \r
+# file names in lower-case letters. If set to YES upper-case letters are also \r
+# allowed. This is useful if you have classes or files whose names only differ \r
+# in case and if your file system supports case sensitive file names. Windows \r
+# and Mac users are advised to set this option to NO.\r
+\r
+CASE_SENSE_NAMES       = NO\r
+\r
+# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen \r
+# will show members with their full class and namespace scopes in the \r
+# documentation. If set to YES the scope will be hidden.\r
+\r
+HIDE_SCOPE_NAMES       = NO\r
+\r
+# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen \r
+# will put a list of the files that are included by a file in the documentation \r
+# of that file.\r
+\r
+SHOW_INCLUDE_FILES     = YES\r
+\r
+# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] \r
+# is inserted in the documentation for inline members.\r
+\r
+INLINE_INFO            = YES\r
+\r
+# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen \r
+# will sort the (detailed) documentation of file and class members \r
+# alphabetically by member name. If set to NO the members will appear in \r
+# declaration order.\r
+\r
+SORT_MEMBER_DOCS       = YES\r
+\r
+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the \r
+# brief documentation of file, namespace and class members alphabetically \r
+# by member name. If set to NO (the default) the members will appear in \r
+# declaration order.\r
+\r
+SORT_BRIEF_DOCS        = NO\r
+\r
+# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the \r
+# hierarchy of group names into alphabetical order. If set to NO (the default) \r
+# the group names will appear in their defined order.\r
+\r
+SORT_GROUP_NAMES       = NO\r
+\r
+# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be \r
+# sorted by fully-qualified names, including namespaces. If set to \r
+# NO (the default), the class list will be sorted only by class name, \r
+# not including the namespace part. \r
+# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.\r
+# Note: This option applies only to the class list, not to the \r
+# alphabetical list.\r
+\r
+SORT_BY_SCOPE_NAME     = NO\r
+\r
+# The GENERATE_TODOLIST tag can be used to enable (YES) or \r
+# disable (NO) the todo list. This list is created by putting \todo \r
+# commands in the documentation.\r
+\r
+GENERATE_TODOLIST      = NO\r
+\r
+# The GENERATE_TESTLIST tag can be used to enable (YES) or \r
+# disable (NO) the test list. This list is created by putting \test \r
+# commands in the documentation.\r
+\r
+GENERATE_TESTLIST      = NO\r
+\r
+# The GENERATE_BUGLIST tag can be used to enable (YES) or \r
+# disable (NO) the bug list. This list is created by putting \bug \r
+# commands in the documentation.\r
+\r
+GENERATE_BUGLIST       = NO\r
+\r
+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or \r
+# disable (NO) the deprecated list. This list is created by putting \r
+# \deprecated commands in the documentation.\r
+\r
+GENERATE_DEPRECATEDLIST= YES\r
+\r
+# The ENABLED_SECTIONS tag can be used to enable conditional \r
+# documentation sections, marked by \if sectionname ... \endif.\r
+\r
+ENABLED_SECTIONS       = \r
+\r
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines \r
+# the initial value of a variable or define consists of for it to appear in \r
+# the documentation. If the initializer consists of more lines than specified \r
+# here it will be hidden. Use a value of 0 to hide initializers completely. \r
+# The appearance of the initializer of individual variables and defines in the \r
+# documentation can be controlled using \showinitializer or \hideinitializer \r
+# command in the documentation regardless of this setting.\r
+\r
+MAX_INITIALIZER_LINES  = 30\r
+\r
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated \r
+# at the bottom of the documentation of classes and structs. If set to YES the \r
+# list will mention the files that were used to generate the documentation.\r
+\r
+SHOW_USED_FILES        = YES\r
+\r
+# If the sources in your project are distributed over multiple directories \r
+# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy \r
+# in the documentation. The default is NO.\r
+\r
+SHOW_DIRECTORIES       = YES\r
+\r
+# Set the SHOW_FILES tag to NO to disable the generation of the Files page.\r
+# This will remove the Files entry from the Quick Index and from the \r
+# Folder Tree View (if specified). The default is YES.\r
+\r
+SHOW_FILES             = YES\r
+\r
+# Set the SHOW_NAMESPACES tag to NO to disable the generation of the \r
+# Namespaces page.  This will remove the Namespaces entry from the Quick Index\r
+# and from the Folder Tree View (if specified). The default is YES.\r
+\r
+SHOW_NAMESPACES        = YES\r
+\r
+# The FILE_VERSION_FILTER tag can be used to specify a program or script that \r
+# doxygen should invoke to get the current version for each file (typically from \r
+# the version control system). Doxygen will invoke the program by executing (via \r
+# popen()) the command <command> <input-file>, where <command> is the value of \r
+# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file \r
+# provided by doxygen. Whatever the program writes to standard output \r
+# is used as the file version. See the manual for examples.\r
+\r
+FILE_VERSION_FILTER    = \r
+\r
+# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by \r
+# doxygen. The layout file controls the global structure of the generated output files \r
+# in an output format independent way. The create the layout file that represents \r
+# doxygen's defaults, run doxygen with the -l option. You can optionally specify a \r
+# file name after the option, if omitted DoxygenLayout.xml will be used as the name \r
+# of the layout file.\r
+\r
+LAYOUT_FILE            = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to warning and progress messages\r
+#---------------------------------------------------------------------------\r
+\r
+# The QUIET tag can be used to turn on/off the messages that are generated \r
+# by doxygen. Possible values are YES and NO. If left blank NO is used.\r
+\r
+QUIET                  = YES\r
+\r
+# The WARNINGS tag can be used to turn on/off the warning messages that are \r
+# generated by doxygen. Possible values are YES and NO. If left blank \r
+# NO is used.\r
+\r
+WARNINGS               = YES\r
+\r
+# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings \r
+# for undocumented members. If EXTRACT_ALL is set to YES then this flag will \r
+# automatically be disabled.\r
+\r
+WARN_IF_UNDOCUMENTED   = YES\r
+\r
+# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for \r
+# potential errors in the documentation, such as not documenting some \r
+# parameters in a documented function, or documenting parameters that \r
+# don't exist or using markup commands wrongly.\r
+\r
+WARN_IF_DOC_ERROR      = YES\r
+\r
+# This WARN_NO_PARAMDOC option can be abled to get warnings for \r
+# functions that are documented, but have no documentation for their parameters \r
+# or return value. If set to NO (the default) doxygen will only warn about \r
+# wrong or incomplete parameter documentation, but not about the absence of \r
+# documentation.\r
+\r
+WARN_NO_PARAMDOC       = YES\r
+\r
+# The WARN_FORMAT tag determines the format of the warning messages that \r
+# doxygen can produce. The string should contain the $file, $line, and $text \r
+# tags, which will be replaced by the file and line number from which the \r
+# warning originated and the warning text. Optionally the format may contain \r
+# $version, which will be replaced by the version of the file (if it could \r
+# be obtained via FILE_VERSION_FILTER)\r
+\r
+WARN_FORMAT            = "$file:$line: $text"\r
+\r
+# The WARN_LOGFILE tag can be used to specify a file to which warning \r
+# and error messages should be written. If left blank the output is written \r
+# to stderr.\r
+\r
+WARN_LOGFILE           = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the input files\r
+#---------------------------------------------------------------------------\r
+\r
+# The INPUT tag can be used to specify the files and/or directories that contain \r
+# documented source files. You may enter file names like "myfile.cpp" or \r
+# directories like "/usr/src/myproject". Separate the files or directories \r
+# with spaces.\r
+\r
+INPUT                  = ./\r
+\r
+# This tag can be used to specify the character encoding of the source files \r
+# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is \r
+# also the default input encoding. Doxygen uses libiconv (or the iconv built \r
+# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for \r
+# the list of possible encodings.\r
+\r
+INPUT_ENCODING         = UTF-8\r
+\r
+# If the value of the INPUT tag contains directories, you can use the \r
+# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \r
+# and *.h) to filter out the source-files in the directories. If left \r
+# blank the following patterns are tested: \r
+# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx \r
+# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90\r
+\r
+FILE_PATTERNS          = *.h \\r
+                         *.c \\r
+                                                *.txt\r
+\r
+# The RECURSIVE tag can be used to turn specify whether or not subdirectories \r
+# should be searched for input files as well. Possible values are YES and NO. \r
+# If left blank NO is used.\r
+\r
+RECURSIVE              = YES\r
+\r
+# The EXCLUDE tag can be used to specify files and/or directories that should \r
+# excluded from the INPUT source files. This way you can easily exclude a \r
+# subdirectory from a directory tree whose root is specified with the INPUT tag.\r
+\r
+EXCLUDE                = \r
+\r
+# The EXCLUDE_SYMLINKS tag can be used select whether or not files or \r
+# directories that are symbolic links (a Unix filesystem feature) are excluded \r
+# from the input.\r
+\r
+EXCLUDE_SYMLINKS       = NO\r
+\r
+# If the value of the INPUT tag contains directories, you can use the \r
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude \r
+# certain files from those directories. Note that the wildcards are matched \r
+# against the file with absolute path, so to exclude all test directories \r
+# for example use the pattern */test/*\r
+\r
+EXCLUDE_PATTERNS       = */LowLevel/USBMode.h\r
+\r
+# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names \r
+# (namespaces, classes, functions, etc.) that should be excluded from the \r
+# output. The symbol name can be a fully qualified name, a word, or if the \r
+# wildcard * is used, a substring. Examples: ANamespace, AClass, \r
+# AClass::ANamespace, ANamespace::*Test\r
+\r
+EXCLUDE_SYMBOLS        = __*\r
+\r
+# The EXAMPLE_PATH tag can be used to specify one or more files or \r
+# directories that contain example code fragments that are included (see \r
+# the \include command).\r
+\r
+EXAMPLE_PATH           = \r
+\r
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the \r
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \r
+# and *.h) to filter out the source-files in the directories. If left \r
+# blank all files are included.\r
+\r
+EXAMPLE_PATTERNS       = *\r
+\r
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be \r
+# searched for input files to be used with the \include or \dontinclude \r
+# commands irrespective of the value of the RECURSIVE tag. \r
+# Possible values are YES and NO. If left blank NO is used.\r
+\r
+EXAMPLE_RECURSIVE      = NO\r
+\r
+# The IMAGE_PATH tag can be used to specify one or more files or \r
+# directories that contain image that are included in the documentation (see \r
+# the \image command).\r
+\r
+IMAGE_PATH             = \r
+\r
+# The INPUT_FILTER tag can be used to specify a program that doxygen should \r
+# invoke to filter for each input file. Doxygen will invoke the filter program \r
+# by executing (via popen()) the command <filter> <input-file>, where <filter> \r
+# is the value of the INPUT_FILTER tag, and <input-file> is the name of an \r
+# input file. Doxygen will then use the output that the filter program writes \r
+# to standard output.  If FILTER_PATTERNS is specified, this tag will be \r
+# ignored.\r
+\r
+INPUT_FILTER           = \r
+\r
+# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern \r
+# basis.  Doxygen will compare the file name with each pattern and apply the \r
+# filter if there is a match.  The filters are a list of the form: \r
+# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further \r
+# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER \r
+# is applied to all files.\r
+\r
+FILTER_PATTERNS        = \r
+\r
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using \r
+# INPUT_FILTER) will be used to filter the input files when producing source \r
+# files to browse (i.e. when SOURCE_BROWSER is set to YES).\r
+\r
+FILTER_SOURCE_FILES    = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to source browsing\r
+#---------------------------------------------------------------------------\r
+\r
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will \r
+# be generated. Documented entities will be cross-referenced with these sources. \r
+# Note: To get rid of all source code in the generated output, make sure also \r
+# VERBATIM_HEADERS is set to NO.\r
+\r
+SOURCE_BROWSER         = NO\r
+\r
+# Setting the INLINE_SOURCES tag to YES will include the body \r
+# of functions and classes directly in the documentation.\r
+\r
+INLINE_SOURCES         = NO\r
+\r
+# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct \r
+# doxygen to hide any special comment blocks from generated source code \r
+# fragments. Normal C and C++ comments will always remain visible.\r
+\r
+STRIP_CODE_COMMENTS    = YES\r
+\r
+# If the REFERENCED_BY_RELATION tag is set to YES \r
+# then for each documented function all documented \r
+# functions referencing it will be listed.\r
+\r
+REFERENCED_BY_RELATION = NO\r
+\r
+# If the REFERENCES_RELATION tag is set to YES \r
+# then for each documented function all documented entities \r
+# called/used by that function will be listed.\r
+\r
+REFERENCES_RELATION    = NO\r
+\r
+# If the REFERENCES_LINK_SOURCE tag is set to YES (the default)\r
+# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from\r
+# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will\r
+# link to the source code.  Otherwise they will link to the documentstion.\r
+\r
+REFERENCES_LINK_SOURCE = NO\r
+\r
+# If the USE_HTAGS tag is set to YES then the references to source code \r
+# will point to the HTML generated by the htags(1) tool instead of doxygen \r
+# built-in source browser. The htags tool is part of GNU's global source \r
+# tagging system (see http://www.gnu.org/software/global/global.html). You \r
+# will need version 4.8.6 or higher.\r
+\r
+USE_HTAGS              = NO\r
+\r
+# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen \r
+# will generate a verbatim copy of the header file for each class for \r
+# which an include is specified. Set to NO to disable this.\r
+\r
+VERBATIM_HEADERS       = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the alphabetical class index\r
+#---------------------------------------------------------------------------\r
+\r
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index \r
+# of all compounds will be generated. Enable this if the project \r
+# contains a lot of classes, structs, unions or interfaces.\r
+\r
+ALPHABETICAL_INDEX     = YES\r
+\r
+# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then \r
+# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns \r
+# in which this list will be split (can be a number in the range [1..20])\r
+\r
+COLS_IN_ALPHA_INDEX    = 5\r
+\r
+# In case all classes in a project start with a common prefix, all \r
+# classes will be put under the same header in the alphabetical index. \r
+# The IGNORE_PREFIX tag can be used to specify one or more prefixes that \r
+# should be ignored while generating the index headers.\r
+\r
+IGNORE_PREFIX          = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the HTML output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_HTML tag is set to YES (the default) Doxygen will \r
+# generate HTML output.\r
+\r
+GENERATE_HTML          = YES\r
+\r
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `html' will be used as the default path.\r
+\r
+HTML_OUTPUT            = html\r
+\r
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for \r
+# each generated HTML page (for example: .htm,.php,.asp). If it is left blank \r
+# doxygen will generate files with .html extension.\r
+\r
+HTML_FILE_EXTENSION    = .html\r
+\r
+# The HTML_HEADER tag can be used to specify a personal HTML header for \r
+# each generated HTML page. If it is left blank doxygen will generate a \r
+# standard header.\r
+\r
+HTML_HEADER            = \r
+\r
+# The HTML_FOOTER tag can be used to specify a personal HTML footer for \r
+# each generated HTML page. If it is left blank doxygen will generate a \r
+# standard footer.\r
+\r
+HTML_FOOTER            = \r
+\r
+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading \r
+# style sheet that is used by each HTML page. It can be used to \r
+# fine-tune the look of the HTML output. If the tag is left blank doxygen \r
+# will generate a default style sheet. Note that doxygen will try to copy \r
+# the style sheet file to the HTML output directory, so don't put your own \r
+# stylesheet in the HTML output directory as well, or it will be erased!\r
+\r
+HTML_STYLESHEET        = \r
+\r
+# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, \r
+# files or namespaces will be aligned in HTML using tables. If set to \r
+# NO a bullet list will be used.\r
+\r
+HTML_ALIGN_MEMBERS     = YES\r
+\r
+# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML \r
+# documentation will contain sections that can be hidden and shown after the \r
+# page has loaded. For this to work a browser that supports \r
+# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox \r
+# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari).\r
+\r
+HTML_DYNAMIC_SECTIONS  = YES\r
+\r
+# If the GENERATE_DOCSET tag is set to YES, additional index files \r
+# will be generated that can be used as input for Apple's Xcode 3 \r
+# integrated development environment, introduced with OSX 10.5 (Leopard). \r
+# To create a documentation set, doxygen will generate a Makefile in the \r
+# HTML output directory. Running make will produce the docset in that \r
+# directory and running "make install" will install the docset in \r
+# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find \r
+# it at startup. \r
+# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information.\r
+\r
+GENERATE_DOCSET        = NO\r
+\r
+# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the \r
+# feed. A documentation feed provides an umbrella under which multiple \r
+# documentation sets from a single provider (such as a company or product suite) \r
+# can be grouped.\r
+\r
+DOCSET_FEEDNAME        = "Doxygen generated docs"\r
+\r
+# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that \r
+# should uniquely identify the documentation set bundle. This should be a \r
+# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen \r
+# will append .docset to the name.\r
+\r
+DOCSET_BUNDLE_ID       = org.doxygen.Project\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, additional index files \r
+# will be generated that can be used as input for tools like the \r
+# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) \r
+# of the generated HTML documentation.\r
+\r
+GENERATE_HTMLHELP      = NO\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can \r
+# be used to specify the file name of the resulting .chm file. You \r
+# can add a path in front of the file if the result should not be \r
+# written to the html output directory.\r
+\r
+CHM_FILE               = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can \r
+# be used to specify the location (absolute path including file name) of \r
+# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run \r
+# the HTML help compiler on the generated index.hhp.\r
+\r
+HHC_LOCATION           = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag \r
+# controls if a separate .chi index file is generated (YES) or that \r
+# it should be included in the master .chm file (NO).\r
+\r
+GENERATE_CHI           = NO\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING\r
+# is used to encode HtmlHelp index (hhk), content (hhc) and project file\r
+# content.\r
+\r
+CHM_INDEX_ENCODING     = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag \r
+# controls whether a binary table of contents is generated (YES) or a \r
+# normal table of contents (NO) in the .chm file.\r
+\r
+BINARY_TOC             = NO\r
+\r
+# The TOC_EXPAND flag can be set to YES to add extra items for group members \r
+# to the contents of the HTML help documentation and to the tree view.\r
+\r
+TOC_EXPAND             = YES\r
+\r
+# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER \r
+# are set, an additional index file will be generated that can be used as input for \r
+# Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated \r
+# HTML documentation.\r
+\r
+GENERATE_QHP           = NO\r
+\r
+# If the QHG_LOCATION tag is specified, the QCH_FILE tag can \r
+# be used to specify the file name of the resulting .qch file. \r
+# The path specified is relative to the HTML output folder.\r
+\r
+QCH_FILE               = \r
+\r
+# The QHP_NAMESPACE tag specifies the namespace to use when generating \r
+# Qt Help Project output. For more information please see \r
+# <a href="http://doc.trolltech.com/qthelpproject.html#namespace">Qt Help Project / Namespace</a>.\r
+\r
+QHP_NAMESPACE          = org.doxygen.Project\r
+\r
+# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating \r
+# Qt Help Project output. For more information please see \r
+# <a href="http://doc.trolltech.com/qthelpproject.html#virtual-folders">Qt Help Project / Virtual Folders</a>.\r
+\r
+QHP_VIRTUAL_FOLDER     = doc\r
+\r
+# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can \r
+# be used to specify the location of Qt's qhelpgenerator. \r
+# If non-empty doxygen will try to run qhelpgenerator on the generated \r
+# .qhp file .\r
+\r
+QHG_LOCATION           = \r
+\r
+# The DISABLE_INDEX tag can be used to turn on/off the condensed index at \r
+# top of each HTML page. The value NO (the default) enables the index and \r
+# the value YES disables it.\r
+\r
+DISABLE_INDEX          = NO\r
+\r
+# This tag can be used to set the number of enum values (range [1..20]) \r
+# that doxygen will group on one line in the generated HTML documentation.\r
+\r
+ENUM_VALUES_PER_LINE   = 1\r
+\r
+# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index\r
+# structure should be generated to display hierarchical information.\r
+# If the tag value is set to FRAME, a side panel will be generated\r
+# containing a tree-like index structure (just like the one that \r
+# is generated for HTML Help). For this to work a browser that supports \r
+# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, \r
+# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are \r
+# probably better off using the HTML help feature. Other possible values \r
+# for this tag are: HIERARCHIES, which will generate the Groups, Directories,\r
+# and Class Hierarchy pages using a tree view instead of an ordered list;\r
+# ALL, which combines the behavior of FRAME and HIERARCHIES; and NONE, which\r
+# disables this behavior completely. For backwards compatibility with previous\r
+# releases of Doxygen, the values YES and NO are equivalent to FRAME and NONE\r
+# respectively.\r
+\r
+GENERATE_TREEVIEW      = YES\r
+\r
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be \r
+# used to set the initial width (in pixels) of the frame in which the tree \r
+# is shown.\r
+\r
+TREEVIEW_WIDTH         = 250\r
+\r
+# Use this tag to change the font size of Latex formulas included \r
+# as images in the HTML documentation. The default is 10. Note that \r
+# when you change the font size after a successful doxygen run you need \r
+# to manually remove any form_*.png images from the HTML output directory \r
+# to force them to be regenerated.\r
+\r
+FORMULA_FONTSIZE       = 10\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the LaTeX output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will \r
+# generate Latex output.\r
+\r
+GENERATE_LATEX         = NO\r
+\r
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `latex' will be used as the default path.\r
+\r
+LATEX_OUTPUT           = latex\r
+\r
+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be \r
+# invoked. If left blank `latex' will be used as the default command name.\r
+\r
+LATEX_CMD_NAME         = latex\r
+\r
+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to \r
+# generate index for LaTeX. If left blank `makeindex' will be used as the \r
+# default command name.\r
+\r
+MAKEINDEX_CMD_NAME     = makeindex\r
+\r
+# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact \r
+# LaTeX documents. This may be useful for small projects and may help to \r
+# save some trees in general.\r
+\r
+COMPACT_LATEX          = NO\r
+\r
+# The PAPER_TYPE tag can be used to set the paper type that is used \r
+# by the printer. Possible values are: a4, a4wide, letter, legal and \r
+# executive. If left blank a4wide will be used.\r
+\r
+PAPER_TYPE             = a4wide\r
+\r
+# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX \r
+# packages that should be included in the LaTeX output.\r
+\r
+EXTRA_PACKAGES         = \r
+\r
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for \r
+# the generated latex document. The header should contain everything until \r
+# the first chapter. If it is left blank doxygen will generate a \r
+# standard header. Notice: only use this tag if you know what you are doing!\r
+\r
+LATEX_HEADER           = \r
+\r
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated \r
+# is prepared for conversion to pdf (using ps2pdf). The pdf file will \r
+# contain links (just like the HTML output) instead of page references \r
+# This makes the output suitable for online browsing using a pdf viewer.\r
+\r
+PDF_HYPERLINKS         = YES\r
+\r
+# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of \r
+# plain latex in the generated Makefile. Set this option to YES to get a \r
+# higher quality PDF documentation.\r
+\r
+USE_PDFLATEX           = YES\r
+\r
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. \r
+# command to the generated LaTeX files. This will instruct LaTeX to keep \r
+# running if errors occur, instead of asking the user for help. \r
+# This option is also used when generating formulas in HTML.\r
+\r
+LATEX_BATCHMODE        = NO\r
+\r
+# If LATEX_HIDE_INDICES is set to YES then doxygen will not \r
+# include the index chapters (such as File Index, Compound Index, etc.) \r
+# in the output.\r
+\r
+LATEX_HIDE_INDICES     = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the RTF output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output \r
+# The RTF output is optimized for Word 97 and may not look very pretty with \r
+# other RTF readers or editors.\r
+\r
+GENERATE_RTF           = NO\r
+\r
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `rtf' will be used as the default path.\r
+\r
+RTF_OUTPUT             = rtf\r
+\r
+# If the COMPACT_RTF tag is set to YES Doxygen generates more compact \r
+# RTF documents. This may be useful for small projects and may help to \r
+# save some trees in general.\r
+\r
+COMPACT_RTF            = NO\r
+\r
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated \r
+# will contain hyperlink fields. The RTF file will \r
+# contain links (just like the HTML output) instead of page references. \r
+# This makes the output suitable for online browsing using WORD or other \r
+# programs which support those fields. \r
+# Note: wordpad (write) and others do not support links.\r
+\r
+RTF_HYPERLINKS         = NO\r
+\r
+# Load stylesheet definitions from file. Syntax is similar to doxygen's \r
+# config file, i.e. a series of assignments. You only have to provide \r
+# replacements, missing definitions are set to their default value.\r
+\r
+RTF_STYLESHEET_FILE    = \r
+\r
+# Set optional variables used in the generation of an rtf document. \r
+# Syntax is similar to doxygen's config file.\r
+\r
+RTF_EXTENSIONS_FILE    = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the man page output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_MAN tag is set to YES (the default) Doxygen will \r
+# generate man pages\r
+\r
+GENERATE_MAN           = NO\r
+\r
+# The MAN_OUTPUT tag is used to specify where the man pages will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `man' will be used as the default path.\r
+\r
+MAN_OUTPUT             = man\r
+\r
+# The MAN_EXTENSION tag determines the extension that is added to \r
+# the generated man pages (default is the subroutine's section .3)\r
+\r
+MAN_EXTENSION          = .3\r
+\r
+# If the MAN_LINKS tag is set to YES and Doxygen generates man output, \r
+# then it will generate one additional man file for each entity \r
+# documented in the real man page(s). These additional files \r
+# only source the real man page, but without them the man command \r
+# would be unable to find the correct page. The default is NO.\r
+\r
+MAN_LINKS              = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the XML output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_XML tag is set to YES Doxygen will \r
+# generate an XML file that captures the structure of \r
+# the code including all documentation.\r
+\r
+GENERATE_XML           = NO\r
+\r
+# The XML_OUTPUT tag is used to specify where the XML pages will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `xml' will be used as the default path.\r
+\r
+XML_OUTPUT             = xml\r
+\r
+# The XML_SCHEMA tag can be used to specify an XML schema, \r
+# which can be used by a validating XML parser to check the \r
+# syntax of the XML files.\r
+\r
+XML_SCHEMA             = \r
+\r
+# The XML_DTD tag can be used to specify an XML DTD, \r
+# which can be used by a validating XML parser to check the \r
+# syntax of the XML files.\r
+\r
+XML_DTD                = \r
+\r
+# If the XML_PROGRAMLISTING tag is set to YES Doxygen will \r
+# dump the program listings (including syntax highlighting \r
+# and cross-referencing information) to the XML output. Note that \r
+# enabling this will significantly increase the size of the XML output.\r
+\r
+XML_PROGRAMLISTING     = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options for the AutoGen Definitions output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will \r
+# generate an AutoGen Definitions (see autogen.sf.net) file \r
+# that captures the structure of the code including all \r
+# documentation. Note that this feature is still experimental \r
+# and incomplete at the moment.\r
+\r
+GENERATE_AUTOGEN_DEF   = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the Perl module output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_PERLMOD tag is set to YES Doxygen will \r
+# generate a Perl module file that captures the structure of \r
+# the code including all documentation. Note that this \r
+# feature is still experimental and incomplete at the \r
+# moment.\r
+\r
+GENERATE_PERLMOD       = NO\r
+\r
+# If the PERLMOD_LATEX tag is set to YES Doxygen will generate \r
+# the necessary Makefile rules, Perl scripts and LaTeX code to be able \r
+# to generate PDF and DVI output from the Perl module output.\r
+\r
+PERLMOD_LATEX          = NO\r
+\r
+# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be \r
+# nicely formatted so it can be parsed by a human reader.  This is useful \r
+# if you want to understand what is going on.  On the other hand, if this \r
+# tag is set to NO the size of the Perl module output will be much smaller \r
+# and Perl will parse it just the same.\r
+\r
+PERLMOD_PRETTY         = YES\r
+\r
+# The names of the make variables in the generated doxyrules.make file \r
+# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. \r
+# This is useful so different doxyrules.make files included by the same \r
+# Makefile don't overwrite each other's variables.\r
+\r
+PERLMOD_MAKEVAR_PREFIX = \r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration options related to the preprocessor   \r
+#---------------------------------------------------------------------------\r
+\r
+# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will \r
+# evaluate all C-preprocessor directives found in the sources and include \r
+# files.\r
+\r
+ENABLE_PREPROCESSING   = YES\r
+\r
+# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro \r
+# names in the source code. If set to NO (the default) only conditional \r
+# compilation will be performed. Macro expansion can be done in a controlled \r
+# way by setting EXPAND_ONLY_PREDEF to YES.\r
+\r
+MACRO_EXPANSION        = YES\r
+\r
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES \r
+# then the macro expansion is limited to the macros specified with the \r
+# PREDEFINED and EXPAND_AS_DEFINED tags.\r
+\r
+EXPAND_ONLY_PREDEF     = YES\r
+\r
+# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files \r
+# in the INCLUDE_PATH (see below) will be search if a #include is found.\r
+\r
+SEARCH_INCLUDES        = YES\r
+\r
+# The INCLUDE_PATH tag can be used to specify one or more directories that \r
+# contain include files that are not input files but should be processed by \r
+# the preprocessor.\r
+\r
+INCLUDE_PATH           = \r
+\r
+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard \r
+# patterns (like *.h and *.hpp) to filter out the header-files in the \r
+# directories. If left blank, the patterns specified with FILE_PATTERNS will \r
+# be used.\r
+\r
+INCLUDE_FILE_PATTERNS  = \r
+\r
+# The PREDEFINED tag can be used to specify one or more macro names that \r
+# are defined before the preprocessor is started (similar to the -D option of \r
+# gcc). The argument of the tag is a list of macros of the form: name \r
+# or name=definition (no spaces). If the definition and the = are \r
+# omitted =1 is assumed. To prevent a macro definition from being \r
+# undefined via #undef or recursively expanded use the := operator \r
+# instead of the = operator.\r
+\r
+PREDEFINED             = __DOXYGEN__\r
+\r
+# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then \r
+# this tag can be used to specify a list of macro names that should be expanded. \r
+# The macro definition that is found in the sources will be used. \r
+# Use the PREDEFINED tag if you want to use a different macro definition.\r
+\r
+EXPAND_AS_DEFINED      = BUTTLOADTAG\r
+\r
+# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then \r
+# doxygen's preprocessor will remove all function-like macros that are alone \r
+# on a line, have an all uppercase name, and do not end with a semicolon. Such \r
+# function macros are typically used for boiler-plate code, and will confuse \r
+# the parser if not removed.\r
+\r
+SKIP_FUNCTION_MACROS   = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration::additions related to external references   \r
+#---------------------------------------------------------------------------\r
+\r
+# The TAGFILES option can be used to specify one or more tagfiles. \r
+# Optionally an initial location of the external documentation \r
+# can be added for each tagfile. The format of a tag file without \r
+# this location is as follows: \r
+#   TAGFILES = file1 file2 ... \r
+# Adding location for the tag files is done as follows: \r
+#   TAGFILES = file1=loc1 "file2 = loc2" ... \r
+# where "loc1" and "loc2" can be relative or absolute paths or \r
+# URLs. If a location is present for each tag, the installdox tool \r
+# does not have to be run to correct the links.\r
+# Note that each tag file must have a unique name\r
+# (where the name does NOT include the path)\r
+# If a tag file is not located in the directory in which doxygen \r
+# is run, you must also specify the path to the tagfile here.\r
+\r
+TAGFILES               = \r
+\r
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create \r
+# a tag file that is based on the input files it reads.\r
+\r
+GENERATE_TAGFILE       = \r
+\r
+# If the ALLEXTERNALS tag is set to YES all external classes will be listed \r
+# in the class index. If set to NO only the inherited external classes \r
+# will be listed.\r
+\r
+ALLEXTERNALS           = NO\r
+\r
+# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed \r
+# in the modules index. If set to NO, only the current project's groups will \r
+# be listed.\r
+\r
+EXTERNAL_GROUPS        = YES\r
+\r
+# The PERL_PATH should be the absolute path and name of the perl script \r
+# interpreter (i.e. the result of `which perl').\r
+\r
+PERL_PATH              = /usr/bin/perl\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration options related to the dot tool   \r
+#---------------------------------------------------------------------------\r
+\r
+# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will \r
+# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base \r
+# or super classes. Setting the tag to NO turns the diagrams off. Note that \r
+# this option is superseded by the HAVE_DOT option below. This is only a \r
+# fallback. It is recommended to install and use dot, since it yields more \r
+# powerful graphs.\r
+\r
+CLASS_DIAGRAMS         = NO\r
+\r
+# You can define message sequence charts within doxygen comments using the \msc \r
+# command. Doxygen will then run the mscgen tool (see \r
+# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the \r
+# documentation. The MSCGEN_PATH tag allows you to specify the directory where \r
+# the mscgen tool resides. If left empty the tool is assumed to be found in the \r
+# default search path.\r
+\r
+MSCGEN_PATH            = \r
+\r
+# If set to YES, the inheritance and collaboration graphs will hide \r
+# inheritance and usage relations if the target is undocumented \r
+# or is not a class.\r
+\r
+HIDE_UNDOC_RELATIONS   = YES\r
+\r
+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is \r
+# available from the path. This tool is part of Graphviz, a graph visualization \r
+# toolkit from AT&T and Lucent Bell Labs. The other options in this section \r
+# have no effect if this option is set to NO (the default)\r
+\r
+HAVE_DOT               = NO\r
+\r
+# By default doxygen will write a font called FreeSans.ttf to the output \r
+# directory and reference it in all dot files that doxygen generates. This \r
+# font does not include all possible unicode characters however, so when you need \r
+# these (or just want a differently looking font) you can specify the font name \r
+# using DOT_FONTNAME. You need need to make sure dot is able to find the font, \r
+# which can be done by putting it in a standard location or by setting the \r
+# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory \r
+# containing the font.\r
+\r
+DOT_FONTNAME           = FreeSans\r
+\r
+# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. \r
+# The default size is 10pt.\r
+\r
+DOT_FONTSIZE           = 10\r
+\r
+# By default doxygen will tell dot to use the output directory to look for the \r
+# FreeSans.ttf font (which doxygen will put there itself). If you specify a \r
+# different font using DOT_FONTNAME you can set the path where dot \r
+# can find it using this tag.\r
+\r
+DOT_FONTPATH           = \r
+\r
+# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for each documented class showing the direct and \r
+# indirect inheritance relations. Setting this tag to YES will force the \r
+# the CLASS_DIAGRAMS tag to NO.\r
+\r
+CLASS_GRAPH            = NO\r
+\r
+# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for each documented class showing the direct and \r
+# indirect implementation dependencies (inheritance, containment, and \r
+# class references variables) of the class with other documented classes.\r
+\r
+COLLABORATION_GRAPH    = NO\r
+\r
+# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for groups, showing the direct groups dependencies\r
+\r
+GROUP_GRAPHS           = NO\r
+\r
+# If the UML_LOOK tag is set to YES doxygen will generate inheritance and \r
+# collaboration diagrams in a style similar to the OMG's Unified Modeling \r
+# Language.\r
+\r
+UML_LOOK               = NO\r
+\r
+# If set to YES, the inheritance and collaboration graphs will show the \r
+# relations between templates and their instances.\r
+\r
+TEMPLATE_RELATIONS     = NO\r
+\r
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT \r
+# tags are set to YES then doxygen will generate a graph for each documented \r
+# file showing the direct and indirect include dependencies of the file with \r
+# other documented files.\r
+\r
+INCLUDE_GRAPH          = NO\r
+\r
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and \r
+# HAVE_DOT tags are set to YES then doxygen will generate a graph for each \r
+# documented header file showing the documented files that directly or \r
+# indirectly include this file.\r
+\r
+INCLUDED_BY_GRAPH      = NO\r
+\r
+# If the CALL_GRAPH and HAVE_DOT options are set to YES then \r
+# doxygen will generate a call dependency graph for every global function \r
+# or class method. Note that enabling this option will significantly increase \r
+# the time of a run. So in most cases it will be better to enable call graphs \r
+# for selected functions only using the \callgraph command.\r
+\r
+CALL_GRAPH             = NO\r
+\r
+# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then \r
+# doxygen will generate a caller dependency graph for every global function \r
+# or class method. Note that enabling this option will significantly increase \r
+# the time of a run. So in most cases it will be better to enable caller \r
+# graphs for selected functions only using the \callergraph command.\r
+\r
+CALLER_GRAPH           = NO\r
+\r
+# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen \r
+# will graphical hierarchy of all classes instead of a textual one.\r
+\r
+GRAPHICAL_HIERARCHY    = NO\r
+\r
+# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES \r
+# then doxygen will show the dependencies a directory has on other directories \r
+# in a graphical way. The dependency relations are determined by the #include\r
+# relations between the files in the directories.\r
+\r
+DIRECTORY_GRAPH        = NO\r
+\r
+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images \r
+# generated by dot. Possible values are png, jpg, or gif\r
+# If left blank png will be used.\r
+\r
+DOT_IMAGE_FORMAT       = png\r
+\r
+# The tag DOT_PATH can be used to specify the path where the dot tool can be \r
+# found. If left blank, it is assumed the dot tool can be found in the path.\r
+\r
+DOT_PATH               = "C:/Program Files/Graphviz2.18/bin"\r
+\r
+# The DOTFILE_DIRS tag can be used to specify one or more directories that \r
+# contain dot files that are included in the documentation (see the \r
+# \dotfile command).\r
+\r
+DOTFILE_DIRS           = \r
+\r
+# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of \r
+# nodes that will be shown in the graph. If the number of nodes in a graph \r
+# becomes larger than this value, doxygen will truncate the graph, which is \r
+# visualized by representing a node as a red box. Note that doxygen if the \r
+# number of direct children of the root node in a graph is already larger than \r
+# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note \r
+# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.\r
+\r
+DOT_GRAPH_MAX_NODES    = 15\r
+\r
+# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the \r
+# graphs generated by dot. A depth value of 3 means that only nodes reachable \r
+# from the root by following a path via at most 3 edges will be shown. Nodes \r
+# that lay further from the root node will be omitted. Note that setting this \r
+# option to 1 or 2 may greatly reduce the computation time needed for large \r
+# code bases. Also note that the size of a graph can be further restricted by \r
+# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.\r
+\r
+MAX_DOT_GRAPH_DEPTH    = 2\r
+\r
+# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent \r
+# background. This is disabled by default, because dot on Windows does not \r
+# seem to support this out of the box. Warning: Depending on the platform used, \r
+# enabling this option may lead to badly anti-aliased labels on the edges of \r
+# a graph (i.e. they become hard to read).\r
+\r
+DOT_TRANSPARENT        = YES\r
+\r
+# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output \r
+# files in one run (i.e. multiple -o and -T options on the command line). This \r
+# makes dot run faster, but since only newer versions of dot (>1.8.10) \r
+# support this, this feature is disabled by default.\r
+\r
+DOT_MULTI_TARGETS      = NO\r
+\r
+# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will \r
+# generate a legend page explaining the meaning of the various boxes and \r
+# arrows in the dot generated graphs.\r
+\r
+GENERATE_LEGEND        = YES\r
+\r
+# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will \r
+# remove the intermediate dot files that are used to generate \r
+# the various graphs.\r
+\r
+DOT_CLEANUP            = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration::additions related to the search engine   \r
+#---------------------------------------------------------------------------\r
+\r
+# The SEARCHENGINE tag specifies whether or not a search engine should be \r
+# used. If set to NO the values of all tags below this one will be ignored.\r
+\r
+SEARCHENGINE           = NO\r
diff --git a/Demos/Device/LowLevel/GenericHID/GenericHID.aps b/Demos/Device/LowLevel/GenericHID/GenericHID.aps
new file mode 100644 (file)
index 0000000..ec824c7
--- /dev/null
@@ -0,0 +1 @@
+<AVRStudio><MANAGEMENT><ProjectName>GenericHID</ProjectName><Created>29-Mar-2009 23:19:24</Created><LastEdit>29-Mar-2009 23:19:40</LastEdit><ICON>241</ICON><ProjectType>0</ProjectType><Created>29-Mar-2009 23:19:24</Created><Version>4</Version><Build>4, 16, 0, 626</Build><ProjectTypeName>AVR GCC</ProjectTypeName></MANAGEMENT><CODE_CREATION><ObjectFile></ObjectFile><EntryFile></EntryFile><SaveFolder>C:\Users\Dean\Documents\Electronics\Projects\WORK\LUFAWORK\Demos\Device\GenericHID\</SaveFolder></CODE_CREATION><DEBUG_TARGET><CURRENT_TARGET>JTAGICE mkII</CURRENT_TARGET><CURRENT_PART>AT90USB1287.xml</CURRENT_PART><BREAKPOINTS></BREAKPOINTS><IO_EXPAND><HIDE>false</HIDE></IO_EXPAND><REGISTERNAMES><Register>R00</Register><Register>R01</Register><Register>R02</Register><Register>R03</Register><Register>R04</Register><Register>R05</Register><Register>R06</Register><Register>R07</Register><Register>R08</Register><Register>R09</Register><Register>R10</Register><Register>R11</Register><Register>R12</Register><Register>R13</Register><Register>R14</Register><Register>R15</Register><Register>R16</Register><Register>R17</Register><Register>R18</Register><Register>R19</Register><Register>R20</Register><Register>R21</Register><Register>R22</Register><Register>R23</Register><Register>R24</Register><Register>R25</Register><Register>R26</Register><Register>R27</Register><Register>R28</Register><Register>R29</Register><Register>R30</Register><Register>R31</Register></REGISTERNAMES><COM>Auto</COM><COMType>0</COMType><WATCHNUM>0</WATCHNUM><WATCHNAMES><Pane0></Pane0><Pane1></Pane1><Pane2></Pane2><Pane3></Pane3></WATCHNAMES><BreakOnTrcaeFull>0</BreakOnTrcaeFull></DEBUG_TARGET><Debugger><Triggers></Triggers></Debugger><AVRGCCPLUGIN><FILES><SOURCEFILE>Descriptors.c</SOURCEFILE><SOURCEFILE>GenericHID.c</SOURCEFILE><HEADERFILE>Descriptors.h</HEADERFILE><HEADERFILE>GenericHID.h</HEADERFILE><OTHERFILE>makefile</OTHERFILE></FILES><CONFIGS><CONFIG><NAME>default</NAME><USESEXTERNALMAKEFILE>YES</USESEXTERNALMAKEFILE><EXTERNALMAKEFILE>makefile</EXTERNALMAKEFILE><PART>at90usb1287</PART><HEX>1</HEX><LIST>1</LIST><MAP>1</MAP><OUTPUTFILENAME>GenericHID.elf</OUTPUTFILENAME><OUTPUTDIR>default\</OUTPUTDIR><ISDIRTY>1</ISDIRTY><OPTIONS/><INCDIRS/><LIBDIRS/><LIBS/><LINKOBJECTS/><OPTIONSFORALL>-Wall -gdwarf-2 -std=gnu99 -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums</OPTIONSFORALL><LINKEROPTIONS></LINKEROPTIONS><SEGMENTS/></CONFIG></CONFIGS><LASTCONFIG>default</LASTCONFIG><USES_WINAVR>1</USES_WINAVR><GCC_LOC>C:\WinAVR-20090313\bin\avr-gcc.exe</GCC_LOC><MAKE_LOC>C:\WinAVR-20090313\utils\bin\make.exe</MAKE_LOC></AVRGCCPLUGIN><IOView><usergroups/><sort sorted="0" column="0" ordername="0" orderaddress="0" ordergroup="0"/></IOView><Files></Files><Events><Bookmarks></Bookmarks></Events><Trace><Filters></Filters></Trace></AVRStudio>\r
diff --git a/Demos/Device/LowLevel/GenericHID/GenericHID.c b/Demos/Device/LowLevel/GenericHID/GenericHID.c
new file mode 100644 (file)
index 0000000..058d269
--- /dev/null
@@ -0,0 +1,280 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  Main source file for the GenericHID demo. This file contains the main tasks of the demo and\r
+ *  is responsible for the initial application hardware configuration.\r
+ */\r
+\r
+#include "GenericHID.h"\r
+\r
+/* Scheduler Task List */\r
+TASK_LIST\r
+{\r
+       { .Task = USB_USBTask          , .TaskStatus = TASK_STOP },\r
+       { .Task = USB_HID_Report       , .TaskStatus = TASK_STOP },\r
+};\r
+\r
+/** Static buffer to hold the last received report from the host, so that it can be echoed back in the next sent report */\r
+static uint8_t LastReceived[GENERIC_REPORT_SIZE];\r
+\r
+\r
+/** Main program entry point. This routine configures the hardware required by the application, then\r
+ *  starts the scheduler to run the USB management task.\r
+ */\r
+int main(void)\r
+{\r
+       /* Disable watchdog if enabled by bootloader/fuses */\r
+       MCUSR &= ~(1 << WDRF);\r
+       wdt_disable();\r
+\r
+       /* Disable clock division */\r
+       clock_prescale_set(clock_div_1);\r
+\r
+       /* Hardware Initialization */\r
+       LEDs_Init();\r
+\r
+       /* Indicate USB not ready */\r
+       UpdateStatus(Status_USBNotReady);\r
+\r
+       /* Initialize Scheduler so that it can be used */\r
+       Scheduler_Init();\r
+\r
+       /* Initialize USB Subsystem */\r
+       USB_Init();\r
+       \r
+       /* Scheduling - routine never returns, so put this last in the main function */\r
+       Scheduler_Start();\r
+}\r
+\r
+/** Event handler for the USB_Connect event. This indicates that the device is enumerating via the status LEDs and\r
+ *  starts the library USB task to begin the enumeration and USB management process.\r
+ */\r
+void EVENT_USB_Connect(void)\r
+{\r
+       /* Start USB management task */\r
+       Scheduler_SetTaskMode(USB_USBTask, TASK_RUN);\r
+\r
+       /* Indicate USB enumerating */\r
+       UpdateStatus(Status_USBEnumerating);\r
+}\r
+\r
+/** Event handler for the USB_Disconnect event. This indicates that the device is no longer connected to a host via\r
+ *  the status LEDs and stops the USB management task.\r
+ */\r
+void EVENT_USB_Disconnect(void)\r
+{\r
+       /* Stop running HID reporting and USB management tasks */\r
+       Scheduler_SetTaskMode(USB_HID_Report, TASK_STOP);\r
+       Scheduler_SetTaskMode(USB_USBTask, TASK_STOP);\r
+\r
+       /* Indicate USB not ready */\r
+       UpdateStatus(Status_USBNotReady);\r
+}\r
+\r
+/** Event handler for the USB_ConfigurationChanged event. This is fired when the host sets the current configuration\r
+ *  of the USB device after enumeration, and configures the generic HID device endpoints.\r
+ */\r
+void EVENT_USB_ConfigurationChanged(void)\r
+{\r
+       /* Setup Generic IN Report Endpoint */\r
+       Endpoint_ConfigureEndpoint(GENERIC_IN_EPNUM, EP_TYPE_INTERRUPT,\r
+                                      ENDPOINT_DIR_IN, GENERIC_EPSIZE,\r
+                                  ENDPOINT_BANK_SINGLE);\r
+\r
+       /* Setup Generic OUT Report Endpoint */\r
+       Endpoint_ConfigureEndpoint(GENERIC_OUT_EPNUM, EP_TYPE_INTERRUPT,\r
+                                      ENDPOINT_DIR_OUT, GENERIC_EPSIZE,\r
+                                  ENDPOINT_BANK_SINGLE);\r
+\r
+       /* Indicate USB connected and ready */\r
+       UpdateStatus(Status_USBReady);\r
+}\r
+\r
+/** Event handler for the USB_UnhandledControlPacket event. This is used to catch standard and class specific\r
+ *  control requests that are not handled internally by the USB library (including the HID commands, which are\r
+ *  all issued via the control endpoint), so that they can be handled appropriately for the application.\r
+ */\r
+void EVENT_USB_UnhandledControlPacket(void)\r
+{\r
+       /* Handle HID Class specific requests */\r
+       switch (USB_ControlRequest.bRequest)\r
+       {\r
+               case REQ_GetReport:\r
+                       if (USB_ControlRequest.bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_INTERFACE))\r
+                       {\r
+                               uint8_t GenericData[GENERIC_REPORT_SIZE];\r
+\r
+                               Endpoint_ClearSETUP();\r
+       \r
+                               CreateGenericHIDReport(GenericData);\r
+\r
+                               /* Write the report data to the control endpoint */\r
+                               Endpoint_Write_Control_Stream_LE(&GenericData, sizeof(GenericData));\r
+\r
+                               /* Finalize the stream transfer to send the last packet or clear the host abort */\r
+                               Endpoint_ClearOUT();\r
+                       }\r
+               \r
+                       break;\r
+               case REQ_SetReport:\r
+                       if (USB_ControlRequest.bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE))\r
+                       {\r
+                               uint8_t GenericData[GENERIC_REPORT_SIZE];\r
+\r
+                               Endpoint_ClearSETUP();\r
+                               \r
+                               /* Wait until the generic report has been sent by the host */\r
+                               while (!(Endpoint_IsOUTReceived()));\r
+\r
+                               Endpoint_Read_Control_Stream_LE(&GenericData, sizeof(GenericData));\r
+\r
+                               ProcessGenericHIDReport(GenericData);\r
+                       \r
+                               /* Clear the endpoint data */\r
+                               Endpoint_ClearOUT();\r
+\r
+                               /* Wait until the host is ready to receive the request confirmation */\r
+                               while (!(Endpoint_IsINReady()));\r
+                               \r
+                               /* Handshake the request by sending an empty IN packet */\r
+                               Endpoint_ClearIN();\r
+                       }\r
+                       \r
+                       break;\r
+       }\r
+}\r
+\r
+/** Function to manage status updates to the user. This is done via LEDs on the given board, if available, but may be changed to\r
+ *  log to a serial port, or anything else that is suitable for status updates.\r
+ *\r
+ *  \param CurrentStatus  Current status of the system, from the GenericHID_StatusCodes_t enum\r
+ */\r
+void UpdateStatus(uint8_t CurrentStatus)\r
+{\r
+       uint8_t LEDMask = LEDS_NO_LEDS;\r
+       \r
+       /* Set the LED mask to the appropriate LED mask based on the given status code */\r
+       switch (CurrentStatus)\r
+       {\r
+               case Status_USBNotReady:\r
+                       LEDMask = (LEDS_LED1);\r
+                       break;\r
+               case Status_USBEnumerating:\r
+                       LEDMask = (LEDS_LED1 | LEDS_LED2);\r
+                       break;\r
+               case Status_USBReady:\r
+                       LEDMask = (LEDS_LED2 | LEDS_LED4);\r
+                       break;\r
+       }\r
+       \r
+       /* Set the board LEDs to the new LED mask */\r
+       LEDs_SetAllLEDs(LEDMask);\r
+}\r
+\r
+/** Function to process the lest received report from the host.\r
+ *\r
+ *  \param DataArray  Pointer to a buffer where the last report data is stored\r
+ */\r
+void ProcessGenericHIDReport(uint8_t* DataArray)\r
+{\r
+       /*\r
+               This is where you need to process the reports being sent from the host to the device.\r
+               DataArray is an array holding the last report from the host. This function is called\r
+               each time the host has sent a report to the device.\r
+       */\r
+       \r
+       for (uint8_t i = 0; i < GENERIC_REPORT_SIZE; i++)\r
+         LastReceived[i] = DataArray[i];\r
+}\r
+\r
+/** Function to create the next report to send back to the host at the next reporting interval.\r
+ *\r
+ *  \param DataArray  Pointer to a buffer where the next report data should be stored\r
+ */\r
+void CreateGenericHIDReport(uint8_t* DataArray)\r
+{\r
+       /*\r
+               This is where you need to create reports to be sent to the host from the device. This\r
+               function is called each time the host is ready to accept a new report. DataArray is \r
+               an array to hold the report to the host.\r
+       */\r
+\r
+       for (uint8_t i = 0; i < GENERIC_REPORT_SIZE; i++)\r
+         DataArray[i] = LastReceived[i];\r
+}\r
+\r
+TASK(USB_HID_Report)\r
+{\r
+       /* Check if the USB system is connected to a host */\r
+       if (USB_IsConnected)\r
+       {\r
+               Endpoint_SelectEndpoint(GENERIC_OUT_EPNUM);\r
+               \r
+               /* Check to see if a packet has been sent from the host */\r
+               if (Endpoint_IsOUTReceived())\r
+               {\r
+                       /* Check to see if the packet contains data */\r
+                       if (Endpoint_IsReadWriteAllowed())\r
+                       {\r
+                               /* Create a temporary buffer to hold the read in report from the host */\r
+                               uint8_t GenericData[GENERIC_REPORT_SIZE];\r
+                               \r
+                               /* Read Generic Report Data */\r
+                               Endpoint_Read_Stream_LE(&GenericData, sizeof(GenericData));\r
+                               \r
+                               /* Process Generic Report Data */\r
+                               ProcessGenericHIDReport(GenericData);\r
+                       }\r
+\r
+                       /* Finalize the stream transfer to send the last packet */\r
+                       Endpoint_ClearOUT();\r
+               }       \r
+\r
+               Endpoint_SelectEndpoint(GENERIC_IN_EPNUM);\r
+               \r
+               /* Check to see if the host is ready to accept another packet */\r
+               if (Endpoint_IsINReady())\r
+               {\r
+                       /* Create a temporary buffer to hold the report to send to the host */\r
+                       uint8_t GenericData[GENERIC_REPORT_SIZE];\r
+                       \r
+                       /* Create Generic Report Data */\r
+                       CreateGenericHIDReport(GenericData);\r
+\r
+                       /* Write Generic Report Data */\r
+                       Endpoint_Write_Stream_LE(&GenericData, sizeof(GenericData));\r
+\r
+                       /* Finalize the stream transfer to send the last packet */\r
+                       Endpoint_ClearIN();\r
+               }\r
+       }\r
+}\r
diff --git a/Demos/Device/LowLevel/GenericHID/GenericHID.h b/Demos/Device/LowLevel/GenericHID/GenericHID.h
new file mode 100644 (file)
index 0000000..30354b7
--- /dev/null
@@ -0,0 +1,83 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  Header file for GenericHID.c.\r
+ */\r
\r
+#ifndef _GENERICHID_H_\r
+#define _GENERICHID_H_\r
+\r
+       /* Includes: */\r
+               #include <avr/io.h>\r
+               #include <avr/wdt.h>\r
+               #include <avr/power.h>\r
+               #include <avr/interrupt.h>\r
+               #include <stdbool.h>\r
+               #include <string.h>\r
+               \r
+               #include "Descriptors.h"\r
+\r
+               #include <LUFA/Version.h>                    // Library Version Information\r
+               #include <LUFA/Scheduler/Scheduler.h>        // Simple scheduler for task management\r
+               #include <LUFA/Drivers/USB/USB.h>            // USB Functionality\r
+               #include <LUFA/Drivers/Board/LEDs.h>         // LEDs driver\r
+                       \r
+       /* Macros: */\r
+               /** HID Class specific request to get the next HID report from the device. */\r
+               #define REQ_GetReport      0x01\r
+\r
+               /** HID Class specific request to send the next HID report to the device. */\r
+               #define REQ_SetReport      0x09\r
+\r
+       /* Enums: */\r
+               /** Enum for the possible status codes for passing to the UpdateStatus() function. */\r
+               enum GenericHID_StatusCodes_t\r
+               {\r
+                       Status_USBNotReady    = 0, /**< USB is not ready (disconnected from a USB host) */\r
+                       Status_USBEnumerating = 1, /**< USB interface is enumerating */\r
+                       Status_USBReady       = 2, /**< USB interface is connected and ready */\r
+               };\r
+\r
+       /* Task Definitions: */\r
+               TASK(USB_HID_Report);\r
+\r
+       /* Function Prototypes: */\r
+               void EVENT_USB_Connect(void);\r
+               void EVENT_USB_Disconnect(void);\r
+               void EVENT_USB_ConfigurationChanged(void);\r
+               void EVENT_USB_UnhandledControlPacket(void);\r
+\r
+               void UpdateStatus(uint8_t CurrentStatus);\r
+               void ProcessGenericHIDReport(uint8_t* DataArray);\r
+               void CreateGenericHIDReport(uint8_t* DataArray);\r
+               \r
+#endif\r
diff --git a/Demos/Device/LowLevel/GenericHID/GenericHID.txt b/Demos/Device/LowLevel/GenericHID/GenericHID.txt
new file mode 100644 (file)
index 0000000..a40b78b
--- /dev/null
@@ -0,0 +1,64 @@
+/** \file\r
+ *\r
+ *  This file contains special DoxyGen information for the generation of the main page and other special\r
+ *  documentation pages. It is not a project source file.\r
+ */\r
\r
+/** \mainpage Generic HID Device\r
+ *\r
+ *  \section SSec_Info USB Information:\r
+ *\r
+ *  The following table gives a rundown of the USB utilization of this demo.\r
+ *\r
+ *  <table>\r
+ *   <tr>\r
+ *    <td><b>USB Mode:</b></td>\r
+ *    <td>Device</td>\r
+ *   </tr>\r
+ *   <tr>\r
+ *    <td><b>USB Class:</b></td>\r
+ *    <td>Human Interface Device (HID)</td>\r
+ *   </tr>\r
+ *   <tr> \r
+ *    <td><b>USB Subclass:</b></td>\r
+ *    <td>N/A</td>\r
+ *   </tr>\r
+ *   <tr>\r
+ *    <td><b>Relevant Standards:</b></td>\r
+ *    <td>USBIF HID Specification, USBIF HID Usage Tables</td>\r
+ *   </tr>\r
+ *   <tr>\r
+ *    <td><b>Usable Speeds:</b></td>\r
+ *    <td>Low Speed Mode, Full Speed Mode</td>\r
+ *   </tr>\r
+ *  </table>\r
+ *\r
+ *  \section SSec_Description Project Description: \r
+ *\r
+ *  Generic HID device demonstration application. This gives a simple reference application\r
+ *  for implementing a generic HID device, using the basic USB HID drivers in all modern\r
+ *  OSes (i.e. no special drivers required). It accepts and sends up to 255 byte reports to\r
+ *  and from a USB Host, and by default transmits the last sent report back to the host.\r
+ *  \r
+ *  On start-up the system will automatically enumerate and function as a vendor HID device.\r
+ *  When controlled by a custom HID class application, reports can be sent and received by\r
+ *  both the standard data endpoint and control request methods defined in the HID specification.\r
+ *\r
+ *  \section SSec_Options Project Options\r
+ *  \r
+ *  The following defines can be found in this demo, which can control the demo behaviour when defined, or changed in value.\r
+ *\r
+ *  <table>\r
+ *   <tr>\r
+ *    <td><b>Define Name:</b></td>\r
+ *    <td><b>Location:</b></td>\r
+ *    <td><b>Description:</b></td>\r
+ *   </tr>\r
+ *   <tr>\r
+ *    <td>GENERIC_REPORT_SIZE</td>\r
+ *    <td>Descriptors.h</td>\r
+ *    <td>This token defines the size of the device reports, both sent and received. The value must be an\r
+ *        integer ranging from 1 to 255.</td>\r
+ *   </tr>\r
+ *  </table>\r
+ */\r
diff --git a/Demos/Device/LowLevel/GenericHID/makefile b/Demos/Device/LowLevel/GenericHID/makefile
new file mode 100644 (file)
index 0000000..9c6c891
--- /dev/null
@@ -0,0 +1,733 @@
+# Hey Emacs, this is a -*- makefile -*-\r
+#----------------------------------------------------------------------------\r
+# WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al.\r
+#  >> Modified for use with the LUFA project. <<\r
+#\r
+# Released to the Public Domain\r
+#\r
+# Additional material for this makefile was written by:\r
+# Peter Fleury\r
+# Tim Henigan\r
+# Colin O'Flynn\r
+# Reiner Patommel\r
+# Markus Pfaff\r
+# Sander Pool\r
+# Frederik Rouleau\r
+# Carlos Lamas\r
+# Dean Camera\r
+# Opendous Inc.\r
+# Denver Gingerich\r
+#\r
+#----------------------------------------------------------------------------\r
+# On command line:\r
+#\r
+# make all = Make software.\r
+#\r
+# make clean = Clean out built project files.\r
+#\r
+# make coff = Convert ELF to AVR COFF.\r
+#\r
+# make extcoff = Convert ELF to AVR Extended COFF.\r
+#\r
+# make program = Download the hex file to the device, using avrdude.\r
+#                Please customize the avrdude settings below first!\r
+#\r
+# make dfu = Download the hex file to the device, using dfu-programmer (must\r
+#            have dfu-programmer installed).\r
+#\r
+# make flip = Download the hex file to the device, using Atmel FLIP (must\r
+#             have Atmel FLIP installed).\r
+#\r
+# make dfu-ee = Download the eeprom file to the device, using dfu-programmer\r
+#               (must have dfu-programmer installed).\r
+#\r
+# make flip-ee = Download the eeprom file to the device, using Atmel FLIP\r
+#                (must have Atmel FLIP installed).\r
+#\r
+# make doxygen = Generate DoxyGen documentation for the project (must have\r
+#                DoxyGen installed)\r
+#\r
+# make debug = Start either simulavr or avarice as specified for debugging, \r
+#              with avr-gdb or avr-insight as the front end for debugging.\r
+#\r
+# make filename.s = Just compile filename.c into the assembler code only.\r
+#\r
+# make filename.i = Create a preprocessed source file for use in submitting\r
+#                   bug reports to the GCC project.\r
+#\r
+# To rebuild project do "make clean" then "make all".\r
+#----------------------------------------------------------------------------\r
+\r
+\r
+# MCU name\r
+MCU = at90usb1287\r
+\r
+\r
+# Target board (see library "Board Types" documentation, USER or blank for projects not requiring\r
+# LUFA board drivers). If USER is selected, put custom board drivers in a directory called \r
+# "Board" inside the application directory.\r
+BOARD  = USBKEY\r
+\r
+\r
+# Processor frequency.\r
+#     This will define a symbol, F_CPU, in all source code files equal to the \r
+#     processor frequency. You can then use this symbol in your source code to \r
+#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done\r
+#     automatically to create a 32-bit value in your source code.\r
+#     Typical values are:\r
+#         F_CPU =  1000000\r
+#         F_CPU =  1843200\r
+#         F_CPU =  2000000\r
+#         F_CPU =  3686400\r
+#         F_CPU =  4000000\r
+#         F_CPU =  7372800\r
+#         F_CPU =  8000000\r
+#         F_CPU = 11059200\r
+#         F_CPU = 14745600\r
+#         F_CPU = 16000000\r
+#         F_CPU = 18432000\r
+#         F_CPU = 20000000\r
+F_CPU = 8000000\r
+\r
+\r
+# Input clock frequency.\r
+#     This will define a symbol, F_CLOCK, in all source code files equal to the \r
+#     input clock frequency (before any prescaling is performed). This value may\r
+#     differ from F_CPU if prescaling is used on the latter, and is required as the\r
+#     raw input clock is fed directly to the PLL sections of the AVR for high speed\r
+#     clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'\r
+#     at the end, this will be done automatically to create a 32-bit value in your\r
+#     source code.\r
+#\r
+#     If no clock division is performed on the input clock inside the AVR (via the\r
+#     CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.\r
+F_CLOCK = 8000000\r
+\r
+\r
+# Output format. (can be srec, ihex, binary)\r
+FORMAT = ihex\r
+\r
+\r
+# Target file name (without extension).\r
+TARGET = GenericHID\r
+\r
+\r
+# Object files directory\r
+#     To put object files in current directory, use a dot (.), do NOT make\r
+#     this an empty or blank macro!\r
+OBJDIR = .\r
+\r
+\r
+# Path to the LUFA library\r
+LUFA_PATH = ../../..\r
+\r
+\r
+# List C source files here. (C dependencies are automatically generated.)\r
+SRC = $(TARGET).c                                                 \\r
+         Descriptors.c                                               \\r
+         $(LUFA_PATH)/LUFA/Scheduler/Scheduler.c                     \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/DevChapter9.c        \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Endpoint.c           \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Host.c               \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/HostChapter9.c       \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/LowLevel.c           \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Pipe.c               \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/Events.c            \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBInterrupt.c      \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBTask.c           \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/ConfigDescriptor.c  \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/Class/HIDParser.c             \\r
+\r
+\r
+# List C++ source files here. (C dependencies are automatically generated.)\r
+CPPSRC = \r
+\r
+\r
+# List Assembler source files here.\r
+#     Make them always end in a capital .S.  Files ending in a lowercase .s\r
+#     will not be considered source files but generated files (assembler\r
+#     output from the compiler), and will be deleted upon "make clean"!\r
+#     Even though the DOS/Win* filesystem matches both .s and .S the same,\r
+#     it will preserve the spelling of the filenames, and gcc itself does\r
+#     care about how the name is spelled on its command-line.\r
+ASRC =\r
+\r
+\r
+# Optimization level, can be [0, 1, 2, 3, s]. \r
+#     0 = turn off optimization. s = optimize for size.\r
+#     (Note: 3 is not always the best optimization level. See avr-libc FAQ.)\r
+OPT = s\r
+\r
+\r
+# Debugging format.\r
+#     Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs.\r
+#     AVR Studio 4.10 requires dwarf-2.\r
+#     AVR [Extended] COFF format requires stabs, plus an avr-objcopy run.\r
+DEBUG = dwarf-2\r
+\r
+\r
+# List any extra directories to look for include files here.\r
+#     Each directory must be seperated by a space.\r
+#     Use forward slashes for directory separators.\r
+#     For a directory that has spaces, enclose it in quotes.\r
+EXTRAINCDIRS = $(LUFA_PATH)/\r
+\r
+\r
+# Compiler flag to set the C Standard level.\r
+#     c89   = "ANSI" C\r
+#     gnu89 = c89 plus GCC extensions\r
+#     c99   = ISO C99 standard (not yet fully implemented)\r
+#     gnu99 = c99 plus GCC extensions\r
+CSTANDARD = -std=gnu99\r
+\r
+\r
+# Place -D or -U options here for C sources\r
+CDEFS  = -DF_CPU=$(F_CPU)UL -DF_CLOCK=$(F_CLOCK)UL -DBOARD=BOARD_$(BOARD)\r
+CDEFS += -DUSE_NONSTANDARD_DESCRIPTOR_NAMES -DNO_STREAM_CALLBACKS -DUSB_DEVICE_ONLY\r
+CDEFS += -DFIXED_CONTROL_ENDPOINT_SIZE=8 -DUSE_SINGLE_DEVICE_CONFIGURATION\r
+CDEFS += -DUSE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)"\r
+\r
+# Place -D or -U options here for ASM sources\r
+ADEFS = -DF_CPU=$(F_CPU)\r
+\r
+\r
+# Place -D or -U options here for C++ sources\r
+CPPDEFS = -DF_CPU=$(F_CPU)UL\r
+#CPPDEFS += -D__STDC_LIMIT_MACROS\r
+#CPPDEFS += -D__STDC_CONSTANT_MACROS\r
+\r
+\r
+\r
+#---------------- Compiler Options C ----------------\r
+#  -g*:          generate debugging information\r
+#  -O*:          optimization level\r
+#  -f...:        tuning, see GCC manual and avr-libc documentation\r
+#  -Wall...:     warning level\r
+#  -Wa,...:      tell GCC to pass this to the assembler.\r
+#    -adhlns...: create assembler listing\r
+CFLAGS = -g$(DEBUG)\r
+CFLAGS += $(CDEFS)\r
+CFLAGS += -O$(OPT)\r
+CFLAGS += -funsigned-char\r
+CFLAGS += -funsigned-bitfields\r
+CFLAGS += -ffunction-sections\r
+CFLAGS += -fpack-struct\r
+CFLAGS += -fshort-enums\r
+CFLAGS += -finline-limit=20\r
+CFLAGS += -Wall\r
+CFLAGS += -Wstrict-prototypes\r
+CFLAGS += -Wundef\r
+#CFLAGS += -fno-unit-at-a-time\r
+#CFLAGS += -Wunreachable-code\r
+#CFLAGS += -Wsign-compare\r
+CFLAGS += -Wa,-adhlns=$(<:%.c=$(OBJDIR)/%.lst)\r
+CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))\r
+CFLAGS += $(CSTANDARD)\r
+\r
+\r
+#---------------- Compiler Options C++ ----------------\r
+#  -g*:          generate debugging information\r
+#  -O*:          optimization level\r
+#  -f...:        tuning, see GCC manual and avr-libc documentation\r
+#  -Wall...:     warning level\r
+#  -Wa,...:      tell GCC to pass this to the assembler.\r
+#    -adhlns...: create assembler listing\r
+CPPFLAGS = -g$(DEBUG)\r
+CPPFLAGS += $(CPPDEFS)\r
+CPPFLAGS += -O$(OPT)\r
+CPPFLAGS += -funsigned-char\r
+CPPFLAGS += -funsigned-bitfields\r
+CPPFLAGS += -fpack-struct\r
+CPPFLAGS += -fshort-enums\r
+CPPFLAGS += -fno-exceptions\r
+CPPFLAGS += -Wall\r
+CFLAGS += -Wundef\r
+#CPPFLAGS += -mshort-calls\r
+#CPPFLAGS += -fno-unit-at-a-time\r
+#CPPFLAGS += -Wstrict-prototypes\r
+#CPPFLAGS += -Wunreachable-code\r
+#CPPFLAGS += -Wsign-compare\r
+CPPFLAGS += -Wa,-adhlns=$(<:%.cpp=$(OBJDIR)/%.lst)\r
+CPPFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))\r
+#CPPFLAGS += $(CSTANDARD)\r
+\r
+\r
+#---------------- Assembler Options ----------------\r
+#  -Wa,...:   tell GCC to pass this to the assembler.\r
+#  -adhlns:   create listing\r
+#  -gstabs:   have the assembler create line number information; note that\r
+#             for use in COFF files, additional information about filenames\r
+#             and function names needs to be present in the assembler source\r
+#             files -- see avr-libc docs [FIXME: not yet described there]\r
+#  -listing-cont-lines: Sets the maximum number of continuation lines of hex \r
+#       dump that will be displayed for a given single line of source input.\r
+ASFLAGS = $(ADEFS) -Wa,-adhlns=$(<:%.S=$(OBJDIR)/%.lst),-gstabs,--listing-cont-lines=100\r
+\r
+\r
+#---------------- Library Options ----------------\r
+# Minimalistic printf version\r
+PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min\r
+\r
+# Floating point printf version (requires MATH_LIB = -lm below)\r
+PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt\r
+\r
+# If this is left blank, then it will use the Standard printf version.\r
+PRINTF_LIB = \r
+#PRINTF_LIB = $(PRINTF_LIB_MIN)\r
+#PRINTF_LIB = $(PRINTF_LIB_FLOAT)\r
+\r
+\r
+# Minimalistic scanf version\r
+SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min\r
+\r
+# Floating point + %[ scanf version (requires MATH_LIB = -lm below)\r
+SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt\r
+\r
+# If this is left blank, then it will use the Standard scanf version.\r
+SCANF_LIB = \r
+#SCANF_LIB = $(SCANF_LIB_MIN)\r
+#SCANF_LIB = $(SCANF_LIB_FLOAT)\r
+\r
+\r
+MATH_LIB = -lm\r
+\r
+\r
+# List any extra directories to look for libraries here.\r
+#     Each directory must be seperated by a space.\r
+#     Use forward slashes for directory separators.\r
+#     For a directory that has spaces, enclose it in quotes.\r
+EXTRALIBDIRS = \r
+\r
+\r
+\r
+#---------------- External Memory Options ----------------\r
+\r
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),\r
+# used for variables (.data/.bss) and heap (malloc()).\r
+#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff\r
+\r
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),\r
+# only used for heap (malloc()).\r
+#EXTMEMOPTS = -Wl,--section-start,.data=0x801100,--defsym=__heap_end=0x80ffff\r
+\r
+EXTMEMOPTS =\r
+\r
+\r
+\r
+#---------------- Linker Options ----------------\r
+#  -Wl,...:     tell GCC to pass this to linker.\r
+#    -Map:      create map file\r
+#    --cref:    add cross reference to  map file\r
+LDFLAGS = -Wl,-Map=$(TARGET).map,--cref\r
+LDFLAGS += -Wl,--relax \r
+LDFLAGS += -Wl,--gc-sections\r
+LDFLAGS += $(EXTMEMOPTS)\r
+LDFLAGS += $(patsubst %,-L%,$(EXTRALIBDIRS))\r
+LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)\r
+#LDFLAGS += -T linker_script.x\r
+\r
+\r
+\r
+#---------------- Programming Options (avrdude) ----------------\r
+\r
+# Programming hardware: alf avr910 avrisp bascom bsd \r
+# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500\r
+#\r
+# Type: avrdude -c ?\r
+# to get a full listing.\r
+#\r
+AVRDUDE_PROGRAMMER = jtagmkII\r
+\r
+# com1 = serial port. Use lpt1 to connect to parallel port.\r
+AVRDUDE_PORT = usb\r
+\r
+AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex\r
+#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep\r
+\r
+\r
+# Uncomment the following if you want avrdude's erase cycle counter.\r
+# Note that this counter needs to be initialized first using -Yn,\r
+# see avrdude manual.\r
+#AVRDUDE_ERASE_COUNTER = -y\r
+\r
+# Uncomment the following if you do /not/ wish a verification to be\r
+# performed after programming the device.\r
+#AVRDUDE_NO_VERIFY = -V\r
+\r
+# Increase verbosity level.  Please use this when submitting bug\r
+# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude> \r
+# to submit bug reports.\r
+#AVRDUDE_VERBOSE = -v -v\r
+\r
+AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)\r
+AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY)\r
+AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE)\r
+AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER)\r
+\r
+\r
+\r
+#---------------- Debugging Options ----------------\r
+\r
+# For simulavr only - target MCU frequency.\r
+DEBUG_MFREQ = $(F_CPU)\r
+\r
+# Set the DEBUG_UI to either gdb or insight.\r
+# DEBUG_UI = gdb\r
+DEBUG_UI = insight\r
+\r
+# Set the debugging back-end to either avarice, simulavr.\r
+DEBUG_BACKEND = avarice\r
+#DEBUG_BACKEND = simulavr\r
+\r
+# GDB Init Filename.\r
+GDBINIT_FILE = __avr_gdbinit\r
+\r
+# When using avarice settings for the JTAG\r
+JTAG_DEV = /dev/com1\r
+\r
+# Debugging port used to communicate between GDB / avarice / simulavr.\r
+DEBUG_PORT = 4242\r
+\r
+# Debugging host used to communicate between GDB / avarice / simulavr, normally\r
+#     just set to localhost unless doing some sort of crazy debugging when \r
+#     avarice is running on a different computer.\r
+DEBUG_HOST = localhost\r
+\r
+\r
+\r
+#============================================================================\r
+\r
+\r
+# Define programs and commands.\r
+SHELL = sh\r
+CC = avr-gcc\r
+OBJCOPY = avr-objcopy\r
+OBJDUMP = avr-objdump\r
+SIZE = avr-size\r
+AR = avr-ar rcs\r
+NM = avr-nm\r
+AVRDUDE = avrdude\r
+REMOVE = rm -f\r
+REMOVEDIR = rm -rf\r
+COPY = cp\r
+WINSHELL = cmd\r
+\r
+# Define Messages\r
+# English\r
+MSG_ERRORS_NONE = Errors: none\r
+MSG_BEGIN = -------- begin --------\r
+MSG_END = --------  end  --------\r
+MSG_SIZE_BEFORE = Size before: \r
+MSG_SIZE_AFTER = Size after:\r
+MSG_COFF = Converting to AVR COFF:\r
+MSG_EXTENDED_COFF = Converting to AVR Extended COFF:\r
+MSG_FLASH = Creating load file for Flash:\r
+MSG_EEPROM = Creating load file for EEPROM:\r
+MSG_EXTENDED_LISTING = Creating Extended Listing:\r
+MSG_SYMBOL_TABLE = Creating Symbol Table:\r
+MSG_LINKING = Linking:\r
+MSG_COMPILING = Compiling C:\r
+MSG_COMPILING_CPP = Compiling C++:\r
+MSG_ASSEMBLING = Assembling:\r
+MSG_CLEANING = Cleaning project:\r
+MSG_CREATING_LIBRARY = Creating library:\r
+\r
+\r
+\r
+\r
+# Define all object files.\r
+OBJ = $(SRC:%.c=$(OBJDIR)/%.o) $(CPPSRC:%.cpp=$(OBJDIR)/%.o) $(ASRC:%.S=$(OBJDIR)/%.o) \r
+\r
+# Define all listing files.\r
+LST = $(SRC:%.c=$(OBJDIR)/%.lst) $(CPPSRC:%.cpp=$(OBJDIR)/%.lst) $(ASRC:%.S=$(OBJDIR)/%.lst) \r
+\r
+\r
+# Compiler flags to generate dependency files.\r
+GENDEPFLAGS = -MMD -MP -MF .dep/$(@F).d\r
+\r
+\r
+# Combine all necessary flags and optional flags.\r
+# Add target processor to flags.\r
+ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS)\r
+ALL_CPPFLAGS = -mmcu=$(MCU) -I. -x c++ $(CPPFLAGS) $(GENDEPFLAGS)\r
+ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)\r
+\r
+\r
+\r
+\r
+\r
+# Default target.\r
+all: begin gccversion sizebefore build checkhooks checklibmode checkboard sizeafter end\r
+\r
+# Change the build target to build a HEX file or a library.\r
+build: elf hex eep lss sym\r
+#build: lib\r
+\r
+\r
+elf: $(TARGET).elf\r
+hex: $(TARGET).hex\r
+eep: $(TARGET).eep\r
+lss: $(TARGET).lss\r
+sym: $(TARGET).sym\r
+LIBNAME=lib$(TARGET).a\r
+lib: $(LIBNAME)\r
+\r
+\r
+\r
+# Eye candy.\r
+# AVR Studio 3.x does not check make's exit code but relies on\r
+# the following magic strings to be generated by the compile job.\r
+begin:\r
+       @echo\r
+       @echo $(MSG_BEGIN)\r
+\r
+end:\r
+       @echo $(MSG_END)\r
+       @echo\r
+\r
+\r
+# Display size of file.\r
+HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex\r
+ELFSIZE = $(SIZE) $(MCU_FLAG) $(FORMAT_FLAG) $(TARGET).elf\r
+MCU_FLAG = $(shell $(SIZE) --help | grep -- --mcu > /dev/null && echo --mcu=$(MCU) )\r
+FORMAT_FLAG = $(shell $(SIZE) --help | grep -- --format=.*avr > /dev/null && echo --format=avr )\r
+\r
+sizebefore:\r
+       @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \\r
+       2>/dev/null; echo; fi\r
+\r
+sizeafter:\r
+       @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \\r
+       2>/dev/null; echo; fi\r
+\r
+checkhooks: build\r
+       @echo\r
+       @echo ------- Unhooked LUFA Events -------\r
+       @$(shell) (grep -s '^EVENT_.*LUFA/.*\\.o' $(TARGET).map | \\r
+                  cut -d' ' -f1 | cut -d'_' -f2- | grep ".*") || \\r
+                          echo "(None)"\r
+       @echo ------------------------------------\r
+\r
+checklibmode:\r
+       @echo\r
+       @echo ----------- Library Mode -----------\r
+       @$(shell) ($(CC) $(ALL_CFLAGS) -E -dM - < /dev/null \\r
+                 | grep 'USB_\(DEVICE\|HOST\)_ONLY' | cut -d' ' -f2 | grep ".*") \\r
+                 || echo "No specific mode (both device and host mode allowable)."\r
+       @echo ------------------------------------\r
+\r
+checkboard:\r
+       @echo\r
+       @echo ---------- Selected Board ----------\r
+       @echo Selected board model is $(BOARD).\r
+       @echo ------------------------------------\r
+       \r
+# Display compiler version information.\r
+gccversion : \r
+       @$(CC) --version\r
+\r
+\r
+\r
+# Program the device.  \r
+program: $(TARGET).hex $(TARGET).eep\r
+       $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)\r
+\r
+flip: $(TARGET).hex\r
+       batchisp -hardware usb -device $(MCU) -operation erase f\r
+       batchisp -hardware usb -device $(MCU) -operation loadbuffer $(TARGET).hex program\r
+       batchisp -hardware usb -device $(MCU) -operation start reset 0\r
+\r
+dfu: $(TARGET).hex\r
+       dfu-programmer $(MCU) erase\r
+       dfu-programmer $(MCU) flash --debug 1 $(TARGET).hex\r
+       dfu-programmer $(MCU) reset\r
+\r
+flip-ee: $(TARGET).hex $(TARGET).eep\r
+       copy $(TARGET).eep $(TARGET)eep.hex\r
+       batchisp -hardware usb -device $(MCU) -operation memory EEPROM erase\r
+       batchisp -hardware usb -device $(MCU) -operation memory EEPROM loadbuffer $(TARGET)eep.hex program\r
+       batchisp -hardware usb -device $(MCU) -operation start reset 0\r
+\r
+dfu-ee: $(TARGET).hex $(TARGET).eep\r
+       dfu-programmer $(MCU) flash-eeprom --debug 1 --suppress-bootloader-mem $(TARGET).eep\r
+       dfu-programmer $(MCU) reset\r
+\r
+\r
+# Generate avr-gdb config/init file which does the following:\r
+#     define the reset signal, load the target file, connect to target, and set \r
+#     a breakpoint at main().\r
+gdb-config: \r
+       @$(REMOVE) $(GDBINIT_FILE)\r
+       @echo define reset >> $(GDBINIT_FILE)\r
+       @echo SIGNAL SIGHUP >> $(GDBINIT_FILE)\r
+       @echo end >> $(GDBINIT_FILE)\r
+       @echo file $(TARGET).elf >> $(GDBINIT_FILE)\r
+       @echo target remote $(DEBUG_HOST):$(DEBUG_PORT)  >> $(GDBINIT_FILE)\r
+ifeq ($(DEBUG_BACKEND),simulavr)\r
+       @echo load  >> $(GDBINIT_FILE)\r
+endif\r
+       @echo break main >> $(GDBINIT_FILE)\r
+\r
+debug: gdb-config $(TARGET).elf\r
+ifeq ($(DEBUG_BACKEND), avarice)\r
+       @echo Starting AVaRICE - Press enter when "waiting to connect" message displays.\r
+       @$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \\r
+       $(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT)\r
+       @$(WINSHELL) /c pause\r
+\r
+else\r
+       @$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \\r
+       $(DEBUG_MFREQ) --port $(DEBUG_PORT)\r
+endif\r
+       @$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE)\r
+\r
+\r
+\r
+\r
+# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.\r
+COFFCONVERT = $(OBJCOPY) --debugging\r
+COFFCONVERT += --change-section-address .data-0x800000\r
+COFFCONVERT += --change-section-address .bss-0x800000\r
+COFFCONVERT += --change-section-address .noinit-0x800000\r
+COFFCONVERT += --change-section-address .eeprom-0x810000\r
+\r
+\r
+\r
+coff: $(TARGET).elf\r
+       @echo\r
+       @echo $(MSG_COFF) $(TARGET).cof\r
+       $(COFFCONVERT) -O coff-avr $< $(TARGET).cof\r
+\r
+\r
+extcoff: $(TARGET).elf\r
+       @echo\r
+       @echo $(MSG_EXTENDED_COFF) $(TARGET).cof\r
+       $(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof\r
+\r
+\r
+\r
+# Create final output files (.hex, .eep) from ELF output file.\r
+%.hex: %.elf\r
+       @echo\r
+       @echo $(MSG_FLASH) $@\r
+       $(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@\r
+\r
+%.eep: %.elf\r
+       @echo\r
+       @echo $(MSG_EEPROM) $@\r
+       -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \\r
+       --change-section-lma .eeprom=0 --no-change-warnings -O $(FORMAT) $< $@ || exit 0\r
+\r
+# Create extended listing file from ELF output file.\r
+%.lss: %.elf\r
+       @echo\r
+       @echo $(MSG_EXTENDED_LISTING) $@\r
+       $(OBJDUMP) -h -z -S $< > $@\r
+\r
+# Create a symbol table from ELF output file.\r
+%.sym: %.elf\r
+       @echo\r
+       @echo $(MSG_SYMBOL_TABLE) $@\r
+       $(NM) -n $< > $@\r
+\r
+\r
+\r
+# Create library from object files.\r
+.SECONDARY : $(TARGET).a\r
+.PRECIOUS : $(OBJ)\r
+%.a: $(OBJ)\r
+       @echo\r
+       @echo $(MSG_CREATING_LIBRARY) $@\r
+       $(AR) $@ $(OBJ)\r
+\r
+\r
+# Link: create ELF output file from object files.\r
+.SECONDARY : $(TARGET).elf\r
+.PRECIOUS : $(OBJ)\r
+%.elf: $(OBJ)\r
+       @echo\r
+       @echo $(MSG_LINKING) $@\r
+       $(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)\r
+\r
+\r
+# Compile: create object files from C source files.\r
+$(OBJDIR)/%.o : %.c\r
+       @echo\r
+       @echo $(MSG_COMPILING) $<\r
+       $(CC) -c $(ALL_CFLAGS) $< -o $@ \r
+\r
+\r
+# Compile: create object files from C++ source files.\r
+$(OBJDIR)/%.o : %.cpp\r
+       @echo\r
+       @echo $(MSG_COMPILING_CPP) $<\r
+       $(CC) -c $(ALL_CPPFLAGS) $< -o $@ \r
+\r
+\r
+# Compile: create assembler files from C source files.\r
+%.s : %.c\r
+       $(CC) -S $(ALL_CFLAGS) $< -o $@\r
+\r
+\r
+# Compile: create assembler files from C++ source files.\r
+%.s : %.cpp\r
+       $(CC) -S $(ALL_CPPFLAGS) $< -o $@\r
+\r
+\r
+# Assemble: create object files from assembler source files.\r
+$(OBJDIR)/%.o : %.S\r
+       @echo\r
+       @echo $(MSG_ASSEMBLING) $<\r
+       $(CC) -c $(ALL_ASFLAGS) $< -o $@\r
+\r
+\r
+# Create preprocessed source for use in sending a bug report.\r
+%.i : %.c\r
+       $(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ \r
+       \r
+\r
+# Target: clean project.\r
+clean: begin clean_list clean_binary end\r
+\r
+clean_binary:\r
+       $(REMOVE) $(TARGET).hex\r
+       \r
+clean_list:\r
+       @echo $(MSG_CLEANING)\r
+       $(REMOVE) $(TARGET).eep\r
+       $(REMOVE) $(TARGET)eep.hex\r
+       $(REMOVE) $(TARGET).cof\r
+       $(REMOVE) $(TARGET).elf\r
+       $(REMOVE) $(TARGET).map\r
+       $(REMOVE) $(TARGET).sym\r
+       $(REMOVE) $(TARGET).lss\r
+       $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.o)\r
+       $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.lst)\r
+       $(REMOVE) $(SRC:.c=.s)\r
+       $(REMOVE) $(SRC:.c=.d)\r
+       $(REMOVE) $(SRC:.c=.i)\r
+       $(REMOVEDIR) .dep\r
+\r
+\r
+doxygen:\r
+       @echo Generating Project Documentation...\r
+       @doxygen Doxygen.conf\r
+       @echo Documentation Generation Complete.\r
+\r
+clean_doxygen:\r
+       rm -rf Documentation\r
+\r
+# Create object files directory\r
+$(shell mkdir $(OBJDIR) 2>/dev/null)\r
+\r
+\r
+# Include the dependency files.\r
+-include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)\r
+\r
+\r
+# Listing of phony targets.\r
+.PHONY : all checkhooks checklibmode checkboard   \\r
+begin finish end sizebefore sizeafter gccversion  \\r
+build elf hex eep lss sym coff extcoff clean      \\r
+clean_list clean_binary program debug gdb-config  \\r
+doxygen dfu flip flip-ee dfu-ee
\ No newline at end of file
diff --git a/Demos/Device/LowLevel/Joystick/Descriptors.c b/Demos/Device/LowLevel/Joystick/Descriptors.c
new file mode 100644 (file)
index 0000000..bd7be65
--- /dev/null
@@ -0,0 +1,250 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  USB Device Descriptors, for library use when in USB device mode. Descriptors are special \r
+ *  computer-readable structures which the host requests upon device enumeration, to determine\r
+ *  the device's capabilities and functions.  \r
+ */\r
+\r
+#include "Descriptors.h"\r
+\r
+/** HID class report descriptor. This is a special descriptor constructed with values from the\r
+ *  USBIF HID class specification to describe the reports and capabilities of the HID device. This\r
+ *  descriptor is parsed by the host and its contents used to determine what data (and in what encoding)\r
+ *  the device will send, and what it may be sent back from the host. Refer to the HID specification for\r
+ *  more details on HID report descriptors.\r
+ */\r
+USB_Descriptor_HIDReport_Datatype_t PROGMEM JoystickReport[] =\r
+{\r
+       0x05, 0x01,          /* Usage Page (Generic Desktop)                       */\r
+       0x09, 0x04,          /* Usage (Joystick)                                   */\r
+       0xa1, 0x01,          /* Collection (Application)                           */\r
+       0x09, 0x01,          /*   Usage (Pointer)                                  */\r
+       0xa1, 0x00,          /*   Collection (Physical)                            */\r
+       0x05, 0x01,          /*     Usage Page (Generic Desktop)                   */\r
+       0x09, 0x30,          /*     Usage (X)                                      */\r
+       0x09, 0x31,          /*     Usage (Y)                                      */\r
+       0x15, 0x9c,          /*     Logical Minimum (-100)                         */\r
+       0x25, 0x64,          /*     Logical Maximum (100)                          */\r
+       0x75, 0x08,          /*     Report Size (8)                                */\r
+       0x95, 0x02,          /*     Report Count (2)                               */\r
+       0x81, 0x82,          /*     Input (Data, Variable, Absolute, Volatile)     */\r
+       0x05, 0x09,          /*     Usage Page (Button)                            */\r
+       0x09, 0x02,          /*     Usage (Button 2)                               */\r
+       0x09, 0x01,          /*     Usage (Button 1)                               */\r
+       0x15, 0x00,          /*     Logical Minimum (0)                            */\r
+       0x25, 0x01,          /*     Logical Maximum (1)                            */\r
+       0x75, 0x01,          /*     Report Size (1)                                */\r
+       0x95, 0x02,          /*     Report Count (2)                               */\r
+       0x81, 0x02,          /*     Input (Data, Variable, Absolute)               */\r
+       0x75, 0x06,          /*     Report Size (6)                                */\r
+       0x95, 0x01,          /*     Report Count (1)                               */\r
+       0x81, 0x01,          /*     Input (Constant)                               */\r
+       0xc0,                /*   End Collection                                   */\r
+       0xc0                 /* End Collection                                     */\r
+};\r
+\r
+/** Device descriptor structure. This descriptor, located in FLASH memory, describes the overall\r
+ *  device characteristics, including the supported USB version, control endpoint size and the\r
+ *  number of device configurations. The descriptor is read out by the USB host when the enumeration\r
+ *  process begins.\r
+ */\r
+USB_Descriptor_Device_t PROGMEM DeviceDescriptor =\r
+{\r
+       .Header                 = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device},\r
+               \r
+       .USBSpecification       = VERSION_BCD(01.10),\r
+       .Class                  = 0x00,\r
+       .SubClass               = 0x00,\r
+       .Protocol               = 0x00,\r
+                               \r
+       .Endpoint0Size          = FIXED_CONTROL_ENDPOINT_SIZE,\r
+               \r
+       .VendorID               = 0x03EB,\r
+       .ProductID              = 0x2043,\r
+       .ReleaseNumber          = 0x0000,\r
+               \r
+       .ManufacturerStrIndex   = 0x01,\r
+       .ProductStrIndex        = 0x02,\r
+       .SerialNumStrIndex      = NO_DESCRIPTOR,\r
+               \r
+       .NumberOfConfigurations = 1\r
+};\r
+\r
+/** Configuration descriptor structure. This descriptor, located in FLASH memory, describes the usage\r
+ *  of the device in one of its supported configurations, including information about any device interfaces\r
+ *  and endpoints. The descriptor is read out by the USB host during the enumeration process when selecting\r
+ *  a configuration so that the host may correctly communicate with the USB device.\r
+ */\r
+USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =\r
+{\r
+       .Config = \r
+               {\r
+                       .Header                 = {.Size = sizeof(USB_Descriptor_Configuration_Header_t), .Type = DTYPE_Configuration},\r
+\r
+                       .TotalConfigurationSize = sizeof(USB_Descriptor_Configuration_t),\r
+                       .TotalInterfaces        = 1,\r
+                               \r
+                       .ConfigurationNumber    = 1,\r
+                       .ConfigurationStrIndex  = NO_DESCRIPTOR,\r
+                               \r
+                       .ConfigAttributes       = (USB_CONFIG_ATTR_BUSPOWERED | USB_CONFIG_ATTR_SELFPOWERED),\r
+                       \r
+                       .MaxPowerConsumption    = USB_CONFIG_POWER_MA(100)\r
+               },\r
+               \r
+       .Interface = \r
+               {\r
+                       .Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},\r
+\r
+                       .InterfaceNumber        = 0x00,\r
+                       .AlternateSetting       = 0x00,\r
+                       \r
+                       .TotalEndpoints         = 1,\r
+                               \r
+                       .Class                  = 0x03,\r
+                       .SubClass               = 0x00,\r
+                       .Protocol               = 0x00,\r
+                               \r
+                       .InterfaceStrIndex      = NO_DESCRIPTOR\r
+               },\r
+\r
+       .JoystickHID = \r
+               {\r
+                       .Header                 = {.Size = sizeof(USB_Descriptor_HID_t), .Type = DTYPE_HID},\r
+                                                                        \r
+                       .HIDSpec                = VERSION_BCD(01.11),\r
+                       .CountryCode            = 0x00,\r
+                       .TotalReportDescriptors = 1,\r
+                       .HIDReportType          = DTYPE_Report,\r
+                       .HIDReportLength        = sizeof(JoystickReport)\r
+               },\r
+\r
+       .JoystickEndpoint = \r
+               {\r
+                       .Header                 = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},\r
+                                                                                \r
+                       .EndpointAddress        = (ENDPOINT_DESCRIPTOR_DIR_IN | JOYSTICK_EPNUM),\r
+                       .Attributes             = EP_TYPE_INTERRUPT,\r
+                       .EndpointSize           = JOYSTICK_EPSIZE,\r
+                       .PollingIntervalMS      = 0x02\r
+               }       \r
+};\r
+\r
+/** Language descriptor structure. This descriptor, located in FLASH memory, is returned when the host requests\r
+ *  the string descriptor with index 0 (the first index). It is actually an array of 16-bit integers, which indicate\r
+ *  via the language ID table available at USB.org what languages the device supports for its string descriptors.\r
+ */\r
+USB_Descriptor_String_t PROGMEM LanguageString =\r
+{\r
+       .Header                 = {.Size = USB_STRING_LEN(1), .Type = DTYPE_String},\r
+               \r
+       .UnicodeString          = {LANGUAGE_ID_ENG}\r
+};\r
+\r
+/** Manufacturer descriptor string. This is a Unicode string containing the manufacturer's details in human readable\r
+ *  form, and is read out upon request by the host when the appropriate string ID is requested, listed in the Device\r
+ *  Descriptor.\r
+ */\r
+USB_Descriptor_String_t PROGMEM ManufacturerString =\r
+{\r
+       .Header                 = {.Size = USB_STRING_LEN(11), .Type = DTYPE_String},\r
+               \r
+       .UnicodeString          = L"Dean Camera"\r
+};\r
+\r
+/** Product descriptor string. This is a Unicode string containing the product's details in human readable form,\r
+ *  and is read out upon request by the host when the appropriate string ID is requested, listed in the Device\r
+ *  Descriptor.\r
+ */\r
+USB_Descriptor_String_t PROGMEM ProductString =\r
+{\r
+       .Header                 = {.Size = USB_STRING_LEN(18), .Type = DTYPE_String},\r
+               \r
+       .UnicodeString          = L"LUFA Joystick Demo"\r
+};\r
+\r
+/** This function is called by the library when in device mode, and must be overridden (see library "USB Descriptors"\r
+ *  documentation) by the application code so that the address and size of a requested descriptor can be given\r
+ *  to the USB library. When the device receives a Get Descriptor request on the control endpoint, this function\r
+ *  is called so that the descriptor details can be passed back and the appropriate descriptor sent back to the\r
+ *  USB host.\r
+ */\r
+uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
+{\r
+       const uint8_t  DescriptorType   = (wValue >> 8);\r
+       const uint8_t  DescriptorNumber = (wValue & 0xFF);\r
+\r
+       void*    Address = NULL;\r
+       uint16_t Size    = NO_DESCRIPTOR;\r
+\r
+       switch (DescriptorType)\r
+       {\r
+               case DTYPE_Device:\r
+                       Address = (void*)&DeviceDescriptor;\r
+                       Size    = sizeof(USB_Descriptor_Device_t);\r
+                       break;\r
+               case DTYPE_Configuration: \r
+                       Address = (void*)&ConfigurationDescriptor;\r
+                       Size    = sizeof(USB_Descriptor_Configuration_t);\r
+                       break;\r
+               case DTYPE_String: \r
+                       switch (DescriptorNumber)\r
+                       {\r
+                               case 0x00: \r
+                                       Address = (void*)&LanguageString;\r
+                                       Size    = pgm_read_byte(&LanguageString.Header.Size);\r
+                                       break;\r
+                               case 0x01: \r
+                                       Address = (void*)&ManufacturerString;\r
+                                       Size    = pgm_read_byte(&ManufacturerString.Header.Size);\r
+                                       break;\r
+                               case 0x02: \r
+                                       Address = (void*)&ProductString;\r
+                                       Size    = pgm_read_byte(&ProductString.Header.Size);\r
+                                       break;\r
+                       }\r
+                       \r
+                       break;\r
+               case DTYPE_HID: \r
+                       Address = (void*)&ConfigurationDescriptor.JoystickHID;\r
+                       Size    = sizeof(USB_Descriptor_HID_t);\r
+                       break;\r
+               case DTYPE_Report: \r
+                       Address = (void*)&JoystickReport;\r
+                       Size    = sizeof(JoystickReport);\r
+                       break;\r
+       }\r
+       \r
+       *DescriptorAddress = Address;\r
+       return Size;\r
+}\r
diff --git a/Demos/Device/LowLevel/Joystick/Descriptors.h b/Demos/Device/LowLevel/Joystick/Descriptors.h
new file mode 100644 (file)
index 0000000..6121295
--- /dev/null
@@ -0,0 +1,93 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  Header file for Descriptors.c.\r
+ */\r
\r
+#ifndef _DESCRIPTORS_H_\r
+#define _DESCRIPTORS_H_\r
+\r
+       /* Includes: */\r
+               #include <LUFA/Drivers/USB/USB.h>\r
+\r
+               #include <avr/pgmspace.h>\r
+\r
+       /* Type Defines: */\r
+               /** Type define for the HID class specific HID descriptor, to describe the HID device's specifications. Refer to the HID\r
+                *  specification for details on the structure elements.\r
+                */\r
+               typedef struct\r
+               {\r
+                       USB_Descriptor_Header_t               Header;\r
+                               \r
+                       uint16_t                              HIDSpec;\r
+                       uint8_t                               CountryCode;\r
+               \r
+                       uint8_t                               TotalReportDescriptors;\r
+\r
+                       uint8_t                               HIDReportType;\r
+                       uint16_t                              HIDReportLength;\r
+               } USB_Descriptor_HID_t;\r
+\r
+               /** Type define for the data type used to store HID report descriptor elements. */\r
+               typedef uint8_t USB_Descriptor_HIDReport_Datatype_t;\r
+\r
+               /** Type define for the device configuration descriptor structure. This must be defined in the\r
+                *  application code, as the configuration descriptor contains several sub-descriptors which\r
+                *  vary between devices, and which describe the device's usage to the host.\r
+                */\r
+               typedef struct\r
+               {\r
+                       USB_Descriptor_Configuration_Header_t Config;\r
+                       USB_Descriptor_Interface_t            Interface;\r
+                       USB_Descriptor_HID_t                  JoystickHID;\r
+               USB_Descriptor_Endpoint_t             JoystickEndpoint;\r
+               } USB_Descriptor_Configuration_t;\r
+                                       \r
+       /* Macros: */\r
+               /** Endpoint number of the Joystick HID reporting IN endpoint. */\r
+               #define JOYSTICK_EPNUM               1\r
+\r
+               /** Size in bytes of the Joystick HID reporting IN endpoint. */\r
+               #define JOYSTICK_EPSIZE              8\r
+\r
+               /** Descriptor header type value, to indicate a HID class HID descriptor. */\r
+               #define DTYPE_HID                 0x21\r
+               \r
+               /** Descriptor header type value, to indicate a HID class HID report descriptor. */\r
+               #define DTYPE_Report              0x22\r
+\r
+       /* Function Prototypes: */\r
+               uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
+                                                                                       ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);\r
+\r
+#endif\r
diff --git a/Demos/Device/LowLevel/Joystick/Doxygen.conf b/Demos/Device/LowLevel/Joystick/Doxygen.conf
new file mode 100644 (file)
index 0000000..2af5ce6
--- /dev/null
@@ -0,0 +1,1485 @@
+# Doxyfile 1.5.7.1\r
+\r
+# This file describes the settings to be used by the documentation system\r
+# doxygen (www.doxygen.org) for a project\r
+#\r
+# All text after a hash (#) is considered a comment and will be ignored\r
+# The format is:\r
+#       TAG = value [value, ...]\r
+# For lists items can also be appended using:\r
+#       TAG += value [value, ...]\r
+# Values that contain spaces should be placed between quotes (" ")\r
+\r
+#---------------------------------------------------------------------------\r
+# Project related configuration options\r
+#---------------------------------------------------------------------------\r
+\r
+# This tag specifies the encoding used for all characters in the config file \r
+# that follow. The default is UTF-8 which is also the encoding used for all \r
+# text before the first occurrence of this tag. Doxygen uses libiconv (or the \r
+# iconv built into libc) for the transcoding. See \r
+# http://www.gnu.org/software/libiconv for the list of possible encodings.\r
+\r
+DOXYFILE_ENCODING      = UTF-8\r
+\r
+# The PROJECT_NAME tag is a single word (or a sequence of words surrounded \r
+# by quotes) that should identify the project.\r
+\r
+PROJECT_NAME           = "LUFA Library - Joystick Device Demo"\r
+\r
+# The PROJECT_NUMBER tag can be used to enter a project or revision number. \r
+# This could be handy for archiving the generated documentation or \r
+# if some version control system is used.\r
+\r
+PROJECT_NUMBER         = 0.0.0\r
+\r
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) \r
+# base path where the generated documentation will be put. \r
+# If a relative path is entered, it will be relative to the location \r
+# where doxygen was started. If left blank the current directory will be used.\r
+\r
+OUTPUT_DIRECTORY       = ./Documentation/\r
+\r
+# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create \r
+# 4096 sub-directories (in 2 levels) under the output directory of each output \r
+# format and will distribute the generated files over these directories. \r
+# Enabling this option can be useful when feeding doxygen a huge amount of \r
+# source files, where putting all generated files in the same directory would \r
+# otherwise cause performance problems for the file system.\r
+\r
+CREATE_SUBDIRS         = YES\r
+\r
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all \r
+# documentation generated by doxygen is written. Doxygen will use this \r
+# information to generate all constant output in the proper language. \r
+# The default language is English, other supported languages are: \r
+# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, \r
+# Croatian, Czech, Danish, Dutch, Farsi, Finnish, French, German, Greek, \r
+# Hungarian, Italian, Japanese, Japanese-en (Japanese with English messages), \r
+# Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, Polish, \r
+# Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, Slovene, \r
+# Spanish, Swedish, and Ukrainian.\r
+\r
+OUTPUT_LANGUAGE        = English\r
+\r
+# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will \r
+# include brief member descriptions after the members that are listed in \r
+# the file and class documentation (similar to JavaDoc). \r
+# Set to NO to disable this.\r
+\r
+BRIEF_MEMBER_DESC      = YES\r
+\r
+# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend \r
+# the brief description of a member or function before the detailed description. \r
+# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the \r
+# brief descriptions will be completely suppressed.\r
+\r
+REPEAT_BRIEF           = YES\r
+\r
+# This tag implements a quasi-intelligent brief description abbreviator \r
+# that is used to form the text in various listings. Each string \r
+# in this list, if found as the leading text of the brief description, will be \r
+# stripped from the text and the result after processing the whole list, is \r
+# used as the annotated text. Otherwise, the brief description is used as-is. \r
+# If left blank, the following values are used ("$name" is automatically \r
+# replaced with the name of the entity): "The $name class" "The $name widget" \r
+# "The $name file" "is" "provides" "specifies" "contains" \r
+# "represents" "a" "an" "the"\r
+\r
+ABBREVIATE_BRIEF       = "The $name class" \\r
+                         "The $name widget" \\r
+                         "The $name file" \\r
+                         is \\r
+                         provides \\r
+                         specifies \\r
+                         contains \\r
+                         represents \\r
+                         a \\r
+                         an \\r
+                         the\r
+\r
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then \r
+# Doxygen will generate a detailed section even if there is only a brief \r
+# description.\r
+\r
+ALWAYS_DETAILED_SEC    = NO\r
+\r
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all \r
+# inherited members of a class in the documentation of that class as if those \r
+# members were ordinary class members. Constructors, destructors and assignment \r
+# operators of the base classes will not be shown.\r
+\r
+INLINE_INHERITED_MEMB  = NO\r
+\r
+# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full \r
+# path before files name in the file list and in the header files. If set \r
+# to NO the shortest path that makes the file name unique will be used.\r
+\r
+FULL_PATH_NAMES        = YES\r
+\r
+# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag \r
+# can be used to strip a user-defined part of the path. Stripping is \r
+# only done if one of the specified strings matches the left-hand part of \r
+# the path. The tag can be used to show relative paths in the file list. \r
+# If left blank the directory from which doxygen is run is used as the \r
+# path to strip.\r
+\r
+STRIP_FROM_PATH        = \r
+\r
+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of \r
+# the path mentioned in the documentation of a class, which tells \r
+# the reader which header file to include in order to use a class. \r
+# If left blank only the name of the header file containing the class \r
+# definition is used. Otherwise one should specify the include paths that \r
+# are normally passed to the compiler using the -I flag.\r
+\r
+STRIP_FROM_INC_PATH    = \r
+\r
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter \r
+# (but less readable) file names. This can be useful is your file systems \r
+# doesn't support long names like on DOS, Mac, or CD-ROM.\r
+\r
+SHORT_NAMES            = YES\r
+\r
+# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen \r
+# will interpret the first line (until the first dot) of a JavaDoc-style \r
+# comment as the brief description. If set to NO, the JavaDoc \r
+# comments will behave just like regular Qt-style comments \r
+# (thus requiring an explicit @brief command for a brief description.)\r
+\r
+JAVADOC_AUTOBRIEF      = NO\r
+\r
+# If the QT_AUTOBRIEF tag is set to YES then Doxygen will \r
+# interpret the first line (until the first dot) of a Qt-style \r
+# comment as the brief description. If set to NO, the comments \r
+# will behave just like regular Qt-style comments (thus requiring \r
+# an explicit \brief command for a brief description.)\r
+\r
+QT_AUTOBRIEF           = NO\r
+\r
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen \r
+# treat a multi-line C++ special comment block (i.e. a block of //! or /// \r
+# comments) as a brief description. This used to be the default behaviour. \r
+# The new default is to treat a multi-line C++ comment block as a detailed \r
+# description. Set this tag to YES if you prefer the old behaviour instead.\r
+\r
+MULTILINE_CPP_IS_BRIEF = NO\r
+\r
+# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented \r
+# member inherits the documentation from any documented member that it \r
+# re-implements.\r
+\r
+INHERIT_DOCS           = YES\r
+\r
+# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce \r
+# a new page for each member. If set to NO, the documentation of a member will \r
+# be part of the file/class/namespace that contains it.\r
+\r
+SEPARATE_MEMBER_PAGES  = NO\r
+\r
+# The TAB_SIZE tag can be used to set the number of spaces in a tab. \r
+# Doxygen uses this value to replace tabs by spaces in code fragments.\r
+\r
+TAB_SIZE               = 4\r
+\r
+# This tag can be used to specify a number of aliases that acts \r
+# as commands in the documentation. An alias has the form "name=value". \r
+# For example adding "sideeffect=\par Side Effects:\n" will allow you to \r
+# put the command \sideeffect (or @sideeffect) in the documentation, which \r
+# will result in a user-defined paragraph with heading "Side Effects:". \r
+# You can put \n's in the value part of an alias to insert newlines.\r
+\r
+ALIASES                = \r
+\r
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C \r
+# sources only. Doxygen will then generate output that is more tailored for C. \r
+# For instance, some of the names that are used will be different. The list \r
+# of all members will be omitted, etc.\r
+\r
+OPTIMIZE_OUTPUT_FOR_C  = YES\r
+\r
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java \r
+# sources only. Doxygen will then generate output that is more tailored for \r
+# Java. For instance, namespaces will be presented as packages, qualified \r
+# scopes will look different, etc.\r
+\r
+OPTIMIZE_OUTPUT_JAVA   = NO\r
+\r
+# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran \r
+# sources only. Doxygen will then generate output that is more tailored for \r
+# Fortran.\r
+\r
+OPTIMIZE_FOR_FORTRAN   = NO\r
+\r
+# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL \r
+# sources. Doxygen will then generate output that is tailored for \r
+# VHDL.\r
+\r
+OPTIMIZE_OUTPUT_VHDL   = NO\r
+\r
+# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want \r
+# to include (a tag file for) the STL sources as input, then you should \r
+# set this tag to YES in order to let doxygen match functions declarations and \r
+# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. \r
+# func(std::string) {}). This also make the inheritance and collaboration \r
+# diagrams that involve STL classes more complete and accurate.\r
+\r
+BUILTIN_STL_SUPPORT    = NO\r
+\r
+# If you use Microsoft's C++/CLI language, you should set this option to YES to\r
+# enable parsing support.\r
+\r
+CPP_CLI_SUPPORT        = NO\r
+\r
+# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. \r
+# Doxygen will parse them like normal C++ but will assume all classes use public \r
+# instead of private inheritance when no explicit protection keyword is present.\r
+\r
+SIP_SUPPORT            = NO\r
+\r
+# For Microsoft's IDL there are propget and propput attributes to indicate getter \r
+# and setter methods for a property. Setting this option to YES (the default) \r
+# will make doxygen to replace the get and set methods by a property in the \r
+# documentation. This will only work if the methods are indeed getting or \r
+# setting a simple type. If this is not the case, or you want to show the \r
+# methods anyway, you should set this option to NO.\r
+\r
+IDL_PROPERTY_SUPPORT   = YES\r
+\r
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC \r
+# tag is set to YES, then doxygen will reuse the documentation of the first \r
+# member in the group (if any) for the other members of the group. By default \r
+# all members of a group must be documented explicitly.\r
+\r
+DISTRIBUTE_GROUP_DOC   = NO\r
+\r
+# Set the SUBGROUPING tag to YES (the default) to allow class member groups of \r
+# the same type (for instance a group of public functions) to be put as a \r
+# subgroup of that type (e.g. under the Public Functions section). Set it to \r
+# NO to prevent subgrouping. Alternatively, this can be done per class using \r
+# the \nosubgrouping command.\r
+\r
+SUBGROUPING            = YES\r
+\r
+# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum \r
+# is documented as struct, union, or enum with the name of the typedef. So \r
+# typedef struct TypeS {} TypeT, will appear in the documentation as a struct \r
+# with name TypeT. When disabled the typedef will appear as a member of a file, \r
+# namespace, or class. And the struct will be named TypeS. This can typically \r
+# be useful for C code in case the coding convention dictates that all compound \r
+# types are typedef'ed and only the typedef is referenced, never the tag name.\r
+\r
+TYPEDEF_HIDES_STRUCT   = NO\r
+\r
+# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to \r
+# determine which symbols to keep in memory and which to flush to disk.\r
+# When the cache is full, less often used symbols will be written to disk.\r
+# For small to medium size projects (<1000 input files) the default value is \r
+# probably good enough. For larger projects a too small cache size can cause \r
+# doxygen to be busy swapping symbols to and from disk most of the time \r
+# causing a significant performance penality. \r
+# If the system has enough physical memory increasing the cache will improve the \r
+# performance by keeping more symbols in memory. Note that the value works on \r
+# a logarithmic scale so increasing the size by one will rougly double the \r
+# memory usage. The cache size is given by this formula: \r
+# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, \r
+# corresponding to a cache size of 2^16 = 65536 symbols\r
+\r
+SYMBOL_CACHE_SIZE      = 0\r
+\r
+#---------------------------------------------------------------------------\r
+# Build related configuration options\r
+#---------------------------------------------------------------------------\r
+\r
+# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in \r
+# documentation are documented, even if no documentation was available. \r
+# Private class members and static file members will be hidden unless \r
+# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES\r
+\r
+EXTRACT_ALL            = YES\r
+\r
+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class \r
+# will be included in the documentation.\r
+\r
+EXTRACT_PRIVATE        = YES\r
+\r
+# If the EXTRACT_STATIC tag is set to YES all static members of a file \r
+# will be included in the documentation.\r
+\r
+EXTRACT_STATIC         = YES\r
+\r
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) \r
+# defined locally in source files will be included in the documentation. \r
+# If set to NO only classes defined in header files are included.\r
+\r
+EXTRACT_LOCAL_CLASSES  = YES\r
+\r
+# This flag is only useful for Objective-C code. When set to YES local \r
+# methods, which are defined in the implementation section but not in \r
+# the interface are included in the documentation. \r
+# If set to NO (the default) only methods in the interface are included.\r
+\r
+EXTRACT_LOCAL_METHODS  = NO\r
+\r
+# If this flag is set to YES, the members of anonymous namespaces will be \r
+# extracted and appear in the documentation as a namespace called \r
+# 'anonymous_namespace{file}', where file will be replaced with the base \r
+# name of the file that contains the anonymous namespace. By default \r
+# anonymous namespace are hidden.\r
+\r
+EXTRACT_ANON_NSPACES   = NO\r
+\r
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all \r
+# undocumented members of documented classes, files or namespaces. \r
+# If set to NO (the default) these members will be included in the \r
+# various overviews, but no documentation section is generated. \r
+# This option has no effect if EXTRACT_ALL is enabled.\r
+\r
+HIDE_UNDOC_MEMBERS     = NO\r
+\r
+# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all \r
+# undocumented classes that are normally visible in the class hierarchy. \r
+# If set to NO (the default) these classes will be included in the various \r
+# overviews. This option has no effect if EXTRACT_ALL is enabled.\r
+\r
+HIDE_UNDOC_CLASSES     = NO\r
+\r
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all \r
+# friend (class|struct|union) declarations. \r
+# If set to NO (the default) these declarations will be included in the \r
+# documentation.\r
+\r
+HIDE_FRIEND_COMPOUNDS  = NO\r
+\r
+# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any \r
+# documentation blocks found inside the body of a function. \r
+# If set to NO (the default) these blocks will be appended to the \r
+# function's detailed documentation block.\r
+\r
+HIDE_IN_BODY_DOCS      = NO\r
+\r
+# The INTERNAL_DOCS tag determines if documentation \r
+# that is typed after a \internal command is included. If the tag is set \r
+# to NO (the default) then the documentation will be excluded. \r
+# Set it to YES to include the internal documentation.\r
+\r
+INTERNAL_DOCS          = NO\r
+\r
+# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate \r
+# file names in lower-case letters. If set to YES upper-case letters are also \r
+# allowed. This is useful if you have classes or files whose names only differ \r
+# in case and if your file system supports case sensitive file names. Windows \r
+# and Mac users are advised to set this option to NO.\r
+\r
+CASE_SENSE_NAMES       = NO\r
+\r
+# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen \r
+# will show members with their full class and namespace scopes in the \r
+# documentation. If set to YES the scope will be hidden.\r
+\r
+HIDE_SCOPE_NAMES       = NO\r
+\r
+# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen \r
+# will put a list of the files that are included by a file in the documentation \r
+# of that file.\r
+\r
+SHOW_INCLUDE_FILES     = YES\r
+\r
+# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] \r
+# is inserted in the documentation for inline members.\r
+\r
+INLINE_INFO            = YES\r
+\r
+# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen \r
+# will sort the (detailed) documentation of file and class members \r
+# alphabetically by member name. If set to NO the members will appear in \r
+# declaration order.\r
+\r
+SORT_MEMBER_DOCS       = YES\r
+\r
+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the \r
+# brief documentation of file, namespace and class members alphabetically \r
+# by member name. If set to NO (the default) the members will appear in \r
+# declaration order.\r
+\r
+SORT_BRIEF_DOCS        = NO\r
+\r
+# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the \r
+# hierarchy of group names into alphabetical order. If set to NO (the default) \r
+# the group names will appear in their defined order.\r
+\r
+SORT_GROUP_NAMES       = NO\r
+\r
+# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be \r
+# sorted by fully-qualified names, including namespaces. If set to \r
+# NO (the default), the class list will be sorted only by class name, \r
+# not including the namespace part. \r
+# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.\r
+# Note: This option applies only to the class list, not to the \r
+# alphabetical list.\r
+\r
+SORT_BY_SCOPE_NAME     = NO\r
+\r
+# The GENERATE_TODOLIST tag can be used to enable (YES) or \r
+# disable (NO) the todo list. This list is created by putting \todo \r
+# commands in the documentation.\r
+\r
+GENERATE_TODOLIST      = NO\r
+\r
+# The GENERATE_TESTLIST tag can be used to enable (YES) or \r
+# disable (NO) the test list. This list is created by putting \test \r
+# commands in the documentation.\r
+\r
+GENERATE_TESTLIST      = NO\r
+\r
+# The GENERATE_BUGLIST tag can be used to enable (YES) or \r
+# disable (NO) the bug list. This list is created by putting \bug \r
+# commands in the documentation.\r
+\r
+GENERATE_BUGLIST       = NO\r
+\r
+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or \r
+# disable (NO) the deprecated list. This list is created by putting \r
+# \deprecated commands in the documentation.\r
+\r
+GENERATE_DEPRECATEDLIST= YES\r
+\r
+# The ENABLED_SECTIONS tag can be used to enable conditional \r
+# documentation sections, marked by \if sectionname ... \endif.\r
+\r
+ENABLED_SECTIONS       = \r
+\r
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines \r
+# the initial value of a variable or define consists of for it to appear in \r
+# the documentation. If the initializer consists of more lines than specified \r
+# here it will be hidden. Use a value of 0 to hide initializers completely. \r
+# The appearance of the initializer of individual variables and defines in the \r
+# documentation can be controlled using \showinitializer or \hideinitializer \r
+# command in the documentation regardless of this setting.\r
+\r
+MAX_INITIALIZER_LINES  = 30\r
+\r
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated \r
+# at the bottom of the documentation of classes and structs. If set to YES the \r
+# list will mention the files that were used to generate the documentation.\r
+\r
+SHOW_USED_FILES        = YES\r
+\r
+# If the sources in your project are distributed over multiple directories \r
+# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy \r
+# in the documentation. The default is NO.\r
+\r
+SHOW_DIRECTORIES       = YES\r
+\r
+# Set the SHOW_FILES tag to NO to disable the generation of the Files page.\r
+# This will remove the Files entry from the Quick Index and from the \r
+# Folder Tree View (if specified). The default is YES.\r
+\r
+SHOW_FILES             = YES\r
+\r
+# Set the SHOW_NAMESPACES tag to NO to disable the generation of the \r
+# Namespaces page.  This will remove the Namespaces entry from the Quick Index\r
+# and from the Folder Tree View (if specified). The default is YES.\r
+\r
+SHOW_NAMESPACES        = YES\r
+\r
+# The FILE_VERSION_FILTER tag can be used to specify a program or script that \r
+# doxygen should invoke to get the current version for each file (typically from \r
+# the version control system). Doxygen will invoke the program by executing (via \r
+# popen()) the command <command> <input-file>, where <command> is the value of \r
+# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file \r
+# provided by doxygen. Whatever the program writes to standard output \r
+# is used as the file version. See the manual for examples.\r
+\r
+FILE_VERSION_FILTER    = \r
+\r
+# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by \r
+# doxygen. The layout file controls the global structure of the generated output files \r
+# in an output format independent way. The create the layout file that represents \r
+# doxygen's defaults, run doxygen with the -l option. You can optionally specify a \r
+# file name after the option, if omitted DoxygenLayout.xml will be used as the name \r
+# of the layout file.\r
+\r
+LAYOUT_FILE            = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to warning and progress messages\r
+#---------------------------------------------------------------------------\r
+\r
+# The QUIET tag can be used to turn on/off the messages that are generated \r
+# by doxygen. Possible values are YES and NO. If left blank NO is used.\r
+\r
+QUIET                  = YES\r
+\r
+# The WARNINGS tag can be used to turn on/off the warning messages that are \r
+# generated by doxygen. Possible values are YES and NO. If left blank \r
+# NO is used.\r
+\r
+WARNINGS               = YES\r
+\r
+# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings \r
+# for undocumented members. If EXTRACT_ALL is set to YES then this flag will \r
+# automatically be disabled.\r
+\r
+WARN_IF_UNDOCUMENTED   = YES\r
+\r
+# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for \r
+# potential errors in the documentation, such as not documenting some \r
+# parameters in a documented function, or documenting parameters that \r
+# don't exist or using markup commands wrongly.\r
+\r
+WARN_IF_DOC_ERROR      = YES\r
+\r
+# This WARN_NO_PARAMDOC option can be abled to get warnings for \r
+# functions that are documented, but have no documentation for their parameters \r
+# or return value. If set to NO (the default) doxygen will only warn about \r
+# wrong or incomplete parameter documentation, but not about the absence of \r
+# documentation.\r
+\r
+WARN_NO_PARAMDOC       = YES\r
+\r
+# The WARN_FORMAT tag determines the format of the warning messages that \r
+# doxygen can produce. The string should contain the $file, $line, and $text \r
+# tags, which will be replaced by the file and line number from which the \r
+# warning originated and the warning text. Optionally the format may contain \r
+# $version, which will be replaced by the version of the file (if it could \r
+# be obtained via FILE_VERSION_FILTER)\r
+\r
+WARN_FORMAT            = "$file:$line: $text"\r
+\r
+# The WARN_LOGFILE tag can be used to specify a file to which warning \r
+# and error messages should be written. If left blank the output is written \r
+# to stderr.\r
+\r
+WARN_LOGFILE           = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the input files\r
+#---------------------------------------------------------------------------\r
+\r
+# The INPUT tag can be used to specify the files and/or directories that contain \r
+# documented source files. You may enter file names like "myfile.cpp" or \r
+# directories like "/usr/src/myproject". Separate the files or directories \r
+# with spaces.\r
+\r
+INPUT                  = ./\r
+\r
+# This tag can be used to specify the character encoding of the source files \r
+# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is \r
+# also the default input encoding. Doxygen uses libiconv (or the iconv built \r
+# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for \r
+# the list of possible encodings.\r
+\r
+INPUT_ENCODING         = UTF-8\r
+\r
+# If the value of the INPUT tag contains directories, you can use the \r
+# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \r
+# and *.h) to filter out the source-files in the directories. If left \r
+# blank the following patterns are tested: \r
+# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx \r
+# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90\r
+\r
+FILE_PATTERNS          = *.h \\r
+                         *.c \\r
+                                                *.txt\r
+\r
+# The RECURSIVE tag can be used to turn specify whether or not subdirectories \r
+# should be searched for input files as well. Possible values are YES and NO. \r
+# If left blank NO is used.\r
+\r
+RECURSIVE              = YES\r
+\r
+# The EXCLUDE tag can be used to specify files and/or directories that should \r
+# excluded from the INPUT source files. This way you can easily exclude a \r
+# subdirectory from a directory tree whose root is specified with the INPUT tag.\r
+\r
+EXCLUDE                = \r
+\r
+# The EXCLUDE_SYMLINKS tag can be used select whether or not files or \r
+# directories that are symbolic links (a Unix filesystem feature) are excluded \r
+# from the input.\r
+\r
+EXCLUDE_SYMLINKS       = NO\r
+\r
+# If the value of the INPUT tag contains directories, you can use the \r
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude \r
+# certain files from those directories. Note that the wildcards are matched \r
+# against the file with absolute path, so to exclude all test directories \r
+# for example use the pattern */test/*\r
+\r
+EXCLUDE_PATTERNS       = */LowLevel/USBMode.h\r
+\r
+# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names \r
+# (namespaces, classes, functions, etc.) that should be excluded from the \r
+# output. The symbol name can be a fully qualified name, a word, or if the \r
+# wildcard * is used, a substring. Examples: ANamespace, AClass, \r
+# AClass::ANamespace, ANamespace::*Test\r
+\r
+EXCLUDE_SYMBOLS        = __*\r
+\r
+# The EXAMPLE_PATH tag can be used to specify one or more files or \r
+# directories that contain example code fragments that are included (see \r
+# the \include command).\r
+\r
+EXAMPLE_PATH           = \r
+\r
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the \r
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \r
+# and *.h) to filter out the source-files in the directories. If left \r
+# blank all files are included.\r
+\r
+EXAMPLE_PATTERNS       = *\r
+\r
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be \r
+# searched for input files to be used with the \include or \dontinclude \r
+# commands irrespective of the value of the RECURSIVE tag. \r
+# Possible values are YES and NO. If left blank NO is used.\r
+\r
+EXAMPLE_RECURSIVE      = NO\r
+\r
+# The IMAGE_PATH tag can be used to specify one or more files or \r
+# directories that contain image that are included in the documentation (see \r
+# the \image command).\r
+\r
+IMAGE_PATH             = \r
+\r
+# The INPUT_FILTER tag can be used to specify a program that doxygen should \r
+# invoke to filter for each input file. Doxygen will invoke the filter program \r
+# by executing (via popen()) the command <filter> <input-file>, where <filter> \r
+# is the value of the INPUT_FILTER tag, and <input-file> is the name of an \r
+# input file. Doxygen will then use the output that the filter program writes \r
+# to standard output.  If FILTER_PATTERNS is specified, this tag will be \r
+# ignored.\r
+\r
+INPUT_FILTER           = \r
+\r
+# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern \r
+# basis.  Doxygen will compare the file name with each pattern and apply the \r
+# filter if there is a match.  The filters are a list of the form: \r
+# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further \r
+# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER \r
+# is applied to all files.\r
+\r
+FILTER_PATTERNS        = \r
+\r
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using \r
+# INPUT_FILTER) will be used to filter the input files when producing source \r
+# files to browse (i.e. when SOURCE_BROWSER is set to YES).\r
+\r
+FILTER_SOURCE_FILES    = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to source browsing\r
+#---------------------------------------------------------------------------\r
+\r
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will \r
+# be generated. Documented entities will be cross-referenced with these sources. \r
+# Note: To get rid of all source code in the generated output, make sure also \r
+# VERBATIM_HEADERS is set to NO.\r
+\r
+SOURCE_BROWSER         = NO\r
+\r
+# Setting the INLINE_SOURCES tag to YES will include the body \r
+# of functions and classes directly in the documentation.\r
+\r
+INLINE_SOURCES         = NO\r
+\r
+# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct \r
+# doxygen to hide any special comment blocks from generated source code \r
+# fragments. Normal C and C++ comments will always remain visible.\r
+\r
+STRIP_CODE_COMMENTS    = YES\r
+\r
+# If the REFERENCED_BY_RELATION tag is set to YES \r
+# then for each documented function all documented \r
+# functions referencing it will be listed.\r
+\r
+REFERENCED_BY_RELATION = NO\r
+\r
+# If the REFERENCES_RELATION tag is set to YES \r
+# then for each documented function all documented entities \r
+# called/used by that function will be listed.\r
+\r
+REFERENCES_RELATION    = NO\r
+\r
+# If the REFERENCES_LINK_SOURCE tag is set to YES (the default)\r
+# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from\r
+# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will\r
+# link to the source code.  Otherwise they will link to the documentstion.\r
+\r
+REFERENCES_LINK_SOURCE = NO\r
+\r
+# If the USE_HTAGS tag is set to YES then the references to source code \r
+# will point to the HTML generated by the htags(1) tool instead of doxygen \r
+# built-in source browser. The htags tool is part of GNU's global source \r
+# tagging system (see http://www.gnu.org/software/global/global.html). You \r
+# will need version 4.8.6 or higher.\r
+\r
+USE_HTAGS              = NO\r
+\r
+# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen \r
+# will generate a verbatim copy of the header file for each class for \r
+# which an include is specified. Set to NO to disable this.\r
+\r
+VERBATIM_HEADERS       = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the alphabetical class index\r
+#---------------------------------------------------------------------------\r
+\r
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index \r
+# of all compounds will be generated. Enable this if the project \r
+# contains a lot of classes, structs, unions or interfaces.\r
+\r
+ALPHABETICAL_INDEX     = YES\r
+\r
+# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then \r
+# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns \r
+# in which this list will be split (can be a number in the range [1..20])\r
+\r
+COLS_IN_ALPHA_INDEX    = 5\r
+\r
+# In case all classes in a project start with a common prefix, all \r
+# classes will be put under the same header in the alphabetical index. \r
+# The IGNORE_PREFIX tag can be used to specify one or more prefixes that \r
+# should be ignored while generating the index headers.\r
+\r
+IGNORE_PREFIX          = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the HTML output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_HTML tag is set to YES (the default) Doxygen will \r
+# generate HTML output.\r
+\r
+GENERATE_HTML          = YES\r
+\r
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `html' will be used as the default path.\r
+\r
+HTML_OUTPUT            = html\r
+\r
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for \r
+# each generated HTML page (for example: .htm,.php,.asp). If it is left blank \r
+# doxygen will generate files with .html extension.\r
+\r
+HTML_FILE_EXTENSION    = .html\r
+\r
+# The HTML_HEADER tag can be used to specify a personal HTML header for \r
+# each generated HTML page. If it is left blank doxygen will generate a \r
+# standard header.\r
+\r
+HTML_HEADER            = \r
+\r
+# The HTML_FOOTER tag can be used to specify a personal HTML footer for \r
+# each generated HTML page. If it is left blank doxygen will generate a \r
+# standard footer.\r
+\r
+HTML_FOOTER            = \r
+\r
+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading \r
+# style sheet that is used by each HTML page. It can be used to \r
+# fine-tune the look of the HTML output. If the tag is left blank doxygen \r
+# will generate a default style sheet. Note that doxygen will try to copy \r
+# the style sheet file to the HTML output directory, so don't put your own \r
+# stylesheet in the HTML output directory as well, or it will be erased!\r
+\r
+HTML_STYLESHEET        = \r
+\r
+# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, \r
+# files or namespaces will be aligned in HTML using tables. If set to \r
+# NO a bullet list will be used.\r
+\r
+HTML_ALIGN_MEMBERS     = YES\r
+\r
+# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML \r
+# documentation will contain sections that can be hidden and shown after the \r
+# page has loaded. For this to work a browser that supports \r
+# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox \r
+# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari).\r
+\r
+HTML_DYNAMIC_SECTIONS  = YES\r
+\r
+# If the GENERATE_DOCSET tag is set to YES, additional index files \r
+# will be generated that can be used as input for Apple's Xcode 3 \r
+# integrated development environment, introduced with OSX 10.5 (Leopard). \r
+# To create a documentation set, doxygen will generate a Makefile in the \r
+# HTML output directory. Running make will produce the docset in that \r
+# directory and running "make install" will install the docset in \r
+# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find \r
+# it at startup. \r
+# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information.\r
+\r
+GENERATE_DOCSET        = NO\r
+\r
+# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the \r
+# feed. A documentation feed provides an umbrella under which multiple \r
+# documentation sets from a single provider (such as a company or product suite) \r
+# can be grouped.\r
+\r
+DOCSET_FEEDNAME        = "Doxygen generated docs"\r
+\r
+# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that \r
+# should uniquely identify the documentation set bundle. This should be a \r
+# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen \r
+# will append .docset to the name.\r
+\r
+DOCSET_BUNDLE_ID       = org.doxygen.Project\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, additional index files \r
+# will be generated that can be used as input for tools like the \r
+# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) \r
+# of the generated HTML documentation.\r
+\r
+GENERATE_HTMLHELP      = NO\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can \r
+# be used to specify the file name of the resulting .chm file. You \r
+# can add a path in front of the file if the result should not be \r
+# written to the html output directory.\r
+\r
+CHM_FILE               = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can \r
+# be used to specify the location (absolute path including file name) of \r
+# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run \r
+# the HTML help compiler on the generated index.hhp.\r
+\r
+HHC_LOCATION           = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag \r
+# controls if a separate .chi index file is generated (YES) or that \r
+# it should be included in the master .chm file (NO).\r
+\r
+GENERATE_CHI           = NO\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING\r
+# is used to encode HtmlHelp index (hhk), content (hhc) and project file\r
+# content.\r
+\r
+CHM_INDEX_ENCODING     = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag \r
+# controls whether a binary table of contents is generated (YES) or a \r
+# normal table of contents (NO) in the .chm file.\r
+\r
+BINARY_TOC             = NO\r
+\r
+# The TOC_EXPAND flag can be set to YES to add extra items for group members \r
+# to the contents of the HTML help documentation and to the tree view.\r
+\r
+TOC_EXPAND             = YES\r
+\r
+# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER \r
+# are set, an additional index file will be generated that can be used as input for \r
+# Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated \r
+# HTML documentation.\r
+\r
+GENERATE_QHP           = NO\r
+\r
+# If the QHG_LOCATION tag is specified, the QCH_FILE tag can \r
+# be used to specify the file name of the resulting .qch file. \r
+# The path specified is relative to the HTML output folder.\r
+\r
+QCH_FILE               = \r
+\r
+# The QHP_NAMESPACE tag specifies the namespace to use when generating \r
+# Qt Help Project output. For more information please see \r
+# <a href="http://doc.trolltech.com/qthelpproject.html#namespace">Qt Help Project / Namespace</a>.\r
+\r
+QHP_NAMESPACE          = org.doxygen.Project\r
+\r
+# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating \r
+# Qt Help Project output. For more information please see \r
+# <a href="http://doc.trolltech.com/qthelpproject.html#virtual-folders">Qt Help Project / Virtual Folders</a>.\r
+\r
+QHP_VIRTUAL_FOLDER     = doc\r
+\r
+# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can \r
+# be used to specify the location of Qt's qhelpgenerator. \r
+# If non-empty doxygen will try to run qhelpgenerator on the generated \r
+# .qhp file .\r
+\r
+QHG_LOCATION           = \r
+\r
+# The DISABLE_INDEX tag can be used to turn on/off the condensed index at \r
+# top of each HTML page. The value NO (the default) enables the index and \r
+# the value YES disables it.\r
+\r
+DISABLE_INDEX          = NO\r
+\r
+# This tag can be used to set the number of enum values (range [1..20]) \r
+# that doxygen will group on one line in the generated HTML documentation.\r
+\r
+ENUM_VALUES_PER_LINE   = 1\r
+\r
+# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index\r
+# structure should be generated to display hierarchical information.\r
+# If the tag value is set to FRAME, a side panel will be generated\r
+# containing a tree-like index structure (just like the one that \r
+# is generated for HTML Help). For this to work a browser that supports \r
+# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, \r
+# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are \r
+# probably better off using the HTML help feature. Other possible values \r
+# for this tag are: HIERARCHIES, which will generate the Groups, Directories,\r
+# and Class Hierarchy pages using a tree view instead of an ordered list;\r
+# ALL, which combines the behavior of FRAME and HIERARCHIES; and NONE, which\r
+# disables this behavior completely. For backwards compatibility with previous\r
+# releases of Doxygen, the values YES and NO are equivalent to FRAME and NONE\r
+# respectively.\r
+\r
+GENERATE_TREEVIEW      = YES\r
+\r
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be \r
+# used to set the initial width (in pixels) of the frame in which the tree \r
+# is shown.\r
+\r
+TREEVIEW_WIDTH         = 250\r
+\r
+# Use this tag to change the font size of Latex formulas included \r
+# as images in the HTML documentation. The default is 10. Note that \r
+# when you change the font size after a successful doxygen run you need \r
+# to manually remove any form_*.png images from the HTML output directory \r
+# to force them to be regenerated.\r
+\r
+FORMULA_FONTSIZE       = 10\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the LaTeX output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will \r
+# generate Latex output.\r
+\r
+GENERATE_LATEX         = NO\r
+\r
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `latex' will be used as the default path.\r
+\r
+LATEX_OUTPUT           = latex\r
+\r
+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be \r
+# invoked. If left blank `latex' will be used as the default command name.\r
+\r
+LATEX_CMD_NAME         = latex\r
+\r
+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to \r
+# generate index for LaTeX. If left blank `makeindex' will be used as the \r
+# default command name.\r
+\r
+MAKEINDEX_CMD_NAME     = makeindex\r
+\r
+# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact \r
+# LaTeX documents. This may be useful for small projects and may help to \r
+# save some trees in general.\r
+\r
+COMPACT_LATEX          = NO\r
+\r
+# The PAPER_TYPE tag can be used to set the paper type that is used \r
+# by the printer. Possible values are: a4, a4wide, letter, legal and \r
+# executive. If left blank a4wide will be used.\r
+\r
+PAPER_TYPE             = a4wide\r
+\r
+# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX \r
+# packages that should be included in the LaTeX output.\r
+\r
+EXTRA_PACKAGES         = \r
+\r
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for \r
+# the generated latex document. The header should contain everything until \r
+# the first chapter. If it is left blank doxygen will generate a \r
+# standard header. Notice: only use this tag if you know what you are doing!\r
+\r
+LATEX_HEADER           = \r
+\r
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated \r
+# is prepared for conversion to pdf (using ps2pdf). The pdf file will \r
+# contain links (just like the HTML output) instead of page references \r
+# This makes the output suitable for online browsing using a pdf viewer.\r
+\r
+PDF_HYPERLINKS         = YES\r
+\r
+# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of \r
+# plain latex in the generated Makefile. Set this option to YES to get a \r
+# higher quality PDF documentation.\r
+\r
+USE_PDFLATEX           = YES\r
+\r
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. \r
+# command to the generated LaTeX files. This will instruct LaTeX to keep \r
+# running if errors occur, instead of asking the user for help. \r
+# This option is also used when generating formulas in HTML.\r
+\r
+LATEX_BATCHMODE        = NO\r
+\r
+# If LATEX_HIDE_INDICES is set to YES then doxygen will not \r
+# include the index chapters (such as File Index, Compound Index, etc.) \r
+# in the output.\r
+\r
+LATEX_HIDE_INDICES     = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the RTF output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output \r
+# The RTF output is optimized for Word 97 and may not look very pretty with \r
+# other RTF readers or editors.\r
+\r
+GENERATE_RTF           = NO\r
+\r
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `rtf' will be used as the default path.\r
+\r
+RTF_OUTPUT             = rtf\r
+\r
+# If the COMPACT_RTF tag is set to YES Doxygen generates more compact \r
+# RTF documents. This may be useful for small projects and may help to \r
+# save some trees in general.\r
+\r
+COMPACT_RTF            = NO\r
+\r
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated \r
+# will contain hyperlink fields. The RTF file will \r
+# contain links (just like the HTML output) instead of page references. \r
+# This makes the output suitable for online browsing using WORD or other \r
+# programs which support those fields. \r
+# Note: wordpad (write) and others do not support links.\r
+\r
+RTF_HYPERLINKS         = NO\r
+\r
+# Load stylesheet definitions from file. Syntax is similar to doxygen's \r
+# config file, i.e. a series of assignments. You only have to provide \r
+# replacements, missing definitions are set to their default value.\r
+\r
+RTF_STYLESHEET_FILE    = \r
+\r
+# Set optional variables used in the generation of an rtf document. \r
+# Syntax is similar to doxygen's config file.\r
+\r
+RTF_EXTENSIONS_FILE    = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the man page output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_MAN tag is set to YES (the default) Doxygen will \r
+# generate man pages\r
+\r
+GENERATE_MAN           = NO\r
+\r
+# The MAN_OUTPUT tag is used to specify where the man pages will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `man' will be used as the default path.\r
+\r
+MAN_OUTPUT             = man\r
+\r
+# The MAN_EXTENSION tag determines the extension that is added to \r
+# the generated man pages (default is the subroutine's section .3)\r
+\r
+MAN_EXTENSION          = .3\r
+\r
+# If the MAN_LINKS tag is set to YES and Doxygen generates man output, \r
+# then it will generate one additional man file for each entity \r
+# documented in the real man page(s). These additional files \r
+# only source the real man page, but without them the man command \r
+# would be unable to find the correct page. The default is NO.\r
+\r
+MAN_LINKS              = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the XML output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_XML tag is set to YES Doxygen will \r
+# generate an XML file that captures the structure of \r
+# the code including all documentation.\r
+\r
+GENERATE_XML           = NO\r
+\r
+# The XML_OUTPUT tag is used to specify where the XML pages will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `xml' will be used as the default path.\r
+\r
+XML_OUTPUT             = xml\r
+\r
+# The XML_SCHEMA tag can be used to specify an XML schema, \r
+# which can be used by a validating XML parser to check the \r
+# syntax of the XML files.\r
+\r
+XML_SCHEMA             = \r
+\r
+# The XML_DTD tag can be used to specify an XML DTD, \r
+# which can be used by a validating XML parser to check the \r
+# syntax of the XML files.\r
+\r
+XML_DTD                = \r
+\r
+# If the XML_PROGRAMLISTING tag is set to YES Doxygen will \r
+# dump the program listings (including syntax highlighting \r
+# and cross-referencing information) to the XML output. Note that \r
+# enabling this will significantly increase the size of the XML output.\r
+\r
+XML_PROGRAMLISTING     = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options for the AutoGen Definitions output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will \r
+# generate an AutoGen Definitions (see autogen.sf.net) file \r
+# that captures the structure of the code including all \r
+# documentation. Note that this feature is still experimental \r
+# and incomplete at the moment.\r
+\r
+GENERATE_AUTOGEN_DEF   = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the Perl module output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_PERLMOD tag is set to YES Doxygen will \r
+# generate a Perl module file that captures the structure of \r
+# the code including all documentation. Note that this \r
+# feature is still experimental and incomplete at the \r
+# moment.\r
+\r
+GENERATE_PERLMOD       = NO\r
+\r
+# If the PERLMOD_LATEX tag is set to YES Doxygen will generate \r
+# the necessary Makefile rules, Perl scripts and LaTeX code to be able \r
+# to generate PDF and DVI output from the Perl module output.\r
+\r
+PERLMOD_LATEX          = NO\r
+\r
+# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be \r
+# nicely formatted so it can be parsed by a human reader.  This is useful \r
+# if you want to understand what is going on.  On the other hand, if this \r
+# tag is set to NO the size of the Perl module output will be much smaller \r
+# and Perl will parse it just the same.\r
+\r
+PERLMOD_PRETTY         = YES\r
+\r
+# The names of the make variables in the generated doxyrules.make file \r
+# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. \r
+# This is useful so different doxyrules.make files included by the same \r
+# Makefile don't overwrite each other's variables.\r
+\r
+PERLMOD_MAKEVAR_PREFIX = \r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration options related to the preprocessor   \r
+#---------------------------------------------------------------------------\r
+\r
+# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will \r
+# evaluate all C-preprocessor directives found in the sources and include \r
+# files.\r
+\r
+ENABLE_PREPROCESSING   = YES\r
+\r
+# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro \r
+# names in the source code. If set to NO (the default) only conditional \r
+# compilation will be performed. Macro expansion can be done in a controlled \r
+# way by setting EXPAND_ONLY_PREDEF to YES.\r
+\r
+MACRO_EXPANSION        = YES\r
+\r
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES \r
+# then the macro expansion is limited to the macros specified with the \r
+# PREDEFINED and EXPAND_AS_DEFINED tags.\r
+\r
+EXPAND_ONLY_PREDEF     = YES\r
+\r
+# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files \r
+# in the INCLUDE_PATH (see below) will be search if a #include is found.\r
+\r
+SEARCH_INCLUDES        = YES\r
+\r
+# The INCLUDE_PATH tag can be used to specify one or more directories that \r
+# contain include files that are not input files but should be processed by \r
+# the preprocessor.\r
+\r
+INCLUDE_PATH           = \r
+\r
+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard \r
+# patterns (like *.h and *.hpp) to filter out the header-files in the \r
+# directories. If left blank, the patterns specified with FILE_PATTERNS will \r
+# be used.\r
+\r
+INCLUDE_FILE_PATTERNS  = \r
+\r
+# The PREDEFINED tag can be used to specify one or more macro names that \r
+# are defined before the preprocessor is started (similar to the -D option of \r
+# gcc). The argument of the tag is a list of macros of the form: name \r
+# or name=definition (no spaces). If the definition and the = are \r
+# omitted =1 is assumed. To prevent a macro definition from being \r
+# undefined via #undef or recursively expanded use the := operator \r
+# instead of the = operator.\r
+\r
+PREDEFINED             = __DOXYGEN__\r
+\r
+# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then \r
+# this tag can be used to specify a list of macro names that should be expanded. \r
+# The macro definition that is found in the sources will be used. \r
+# Use the PREDEFINED tag if you want to use a different macro definition.\r
+\r
+EXPAND_AS_DEFINED      = BUTTLOADTAG\r
+\r
+# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then \r
+# doxygen's preprocessor will remove all function-like macros that are alone \r
+# on a line, have an all uppercase name, and do not end with a semicolon. Such \r
+# function macros are typically used for boiler-plate code, and will confuse \r
+# the parser if not removed.\r
+\r
+SKIP_FUNCTION_MACROS   = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration::additions related to external references   \r
+#---------------------------------------------------------------------------\r
+\r
+# The TAGFILES option can be used to specify one or more tagfiles. \r
+# Optionally an initial location of the external documentation \r
+# can be added for each tagfile. The format of a tag file without \r
+# this location is as follows: \r
+#   TAGFILES = file1 file2 ... \r
+# Adding location for the tag files is done as follows: \r
+#   TAGFILES = file1=loc1 "file2 = loc2" ... \r
+# where "loc1" and "loc2" can be relative or absolute paths or \r
+# URLs. If a location is present for each tag, the installdox tool \r
+# does not have to be run to correct the links.\r
+# Note that each tag file must have a unique name\r
+# (where the name does NOT include the path)\r
+# If a tag file is not located in the directory in which doxygen \r
+# is run, you must also specify the path to the tagfile here.\r
+\r
+TAGFILES               = \r
+\r
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create \r
+# a tag file that is based on the input files it reads.\r
+\r
+GENERATE_TAGFILE       = \r
+\r
+# If the ALLEXTERNALS tag is set to YES all external classes will be listed \r
+# in the class index. If set to NO only the inherited external classes \r
+# will be listed.\r
+\r
+ALLEXTERNALS           = NO\r
+\r
+# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed \r
+# in the modules index. If set to NO, only the current project's groups will \r
+# be listed.\r
+\r
+EXTERNAL_GROUPS        = YES\r
+\r
+# The PERL_PATH should be the absolute path and name of the perl script \r
+# interpreter (i.e. the result of `which perl').\r
+\r
+PERL_PATH              = /usr/bin/perl\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration options related to the dot tool   \r
+#---------------------------------------------------------------------------\r
+\r
+# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will \r
+# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base \r
+# or super classes. Setting the tag to NO turns the diagrams off. Note that \r
+# this option is superseded by the HAVE_DOT option below. This is only a \r
+# fallback. It is recommended to install and use dot, since it yields more \r
+# powerful graphs.\r
+\r
+CLASS_DIAGRAMS         = NO\r
+\r
+# You can define message sequence charts within doxygen comments using the \msc \r
+# command. Doxygen will then run the mscgen tool (see \r
+# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the \r
+# documentation. The MSCGEN_PATH tag allows you to specify the directory where \r
+# the mscgen tool resides. If left empty the tool is assumed to be found in the \r
+# default search path.\r
+\r
+MSCGEN_PATH            = \r
+\r
+# If set to YES, the inheritance and collaboration graphs will hide \r
+# inheritance and usage relations if the target is undocumented \r
+# or is not a class.\r
+\r
+HIDE_UNDOC_RELATIONS   = YES\r
+\r
+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is \r
+# available from the path. This tool is part of Graphviz, a graph visualization \r
+# toolkit from AT&T and Lucent Bell Labs. The other options in this section \r
+# have no effect if this option is set to NO (the default)\r
+\r
+HAVE_DOT               = NO\r
+\r
+# By default doxygen will write a font called FreeSans.ttf to the output \r
+# directory and reference it in all dot files that doxygen generates. This \r
+# font does not include all possible unicode characters however, so when you need \r
+# these (or just want a differently looking font) you can specify the font name \r
+# using DOT_FONTNAME. You need need to make sure dot is able to find the font, \r
+# which can be done by putting it in a standard location or by setting the \r
+# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory \r
+# containing the font.\r
+\r
+DOT_FONTNAME           = FreeSans\r
+\r
+# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. \r
+# The default size is 10pt.\r
+\r
+DOT_FONTSIZE           = 10\r
+\r
+# By default doxygen will tell dot to use the output directory to look for the \r
+# FreeSans.ttf font (which doxygen will put there itself). If you specify a \r
+# different font using DOT_FONTNAME you can set the path where dot \r
+# can find it using this tag.\r
+\r
+DOT_FONTPATH           = \r
+\r
+# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for each documented class showing the direct and \r
+# indirect inheritance relations. Setting this tag to YES will force the \r
+# the CLASS_DIAGRAMS tag to NO.\r
+\r
+CLASS_GRAPH            = NO\r
+\r
+# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for each documented class showing the direct and \r
+# indirect implementation dependencies (inheritance, containment, and \r
+# class references variables) of the class with other documented classes.\r
+\r
+COLLABORATION_GRAPH    = NO\r
+\r
+# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for groups, showing the direct groups dependencies\r
+\r
+GROUP_GRAPHS           = NO\r
+\r
+# If the UML_LOOK tag is set to YES doxygen will generate inheritance and \r
+# collaboration diagrams in a style similar to the OMG's Unified Modeling \r
+# Language.\r
+\r
+UML_LOOK               = NO\r
+\r
+# If set to YES, the inheritance and collaboration graphs will show the \r
+# relations between templates and their instances.\r
+\r
+TEMPLATE_RELATIONS     = NO\r
+\r
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT \r
+# tags are set to YES then doxygen will generate a graph for each documented \r
+# file showing the direct and indirect include dependencies of the file with \r
+# other documented files.\r
+\r
+INCLUDE_GRAPH          = NO\r
+\r
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and \r
+# HAVE_DOT tags are set to YES then doxygen will generate a graph for each \r
+# documented header file showing the documented files that directly or \r
+# indirectly include this file.\r
+\r
+INCLUDED_BY_GRAPH      = NO\r
+\r
+# If the CALL_GRAPH and HAVE_DOT options are set to YES then \r
+# doxygen will generate a call dependency graph for every global function \r
+# or class method. Note that enabling this option will significantly increase \r
+# the time of a run. So in most cases it will be better to enable call graphs \r
+# for selected functions only using the \callgraph command.\r
+\r
+CALL_GRAPH             = NO\r
+\r
+# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then \r
+# doxygen will generate a caller dependency graph for every global function \r
+# or class method. Note that enabling this option will significantly increase \r
+# the time of a run. So in most cases it will be better to enable caller \r
+# graphs for selected functions only using the \callergraph command.\r
+\r
+CALLER_GRAPH           = NO\r
+\r
+# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen \r
+# will graphical hierarchy of all classes instead of a textual one.\r
+\r
+GRAPHICAL_HIERARCHY    = NO\r
+\r
+# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES \r
+# then doxygen will show the dependencies a directory has on other directories \r
+# in a graphical way. The dependency relations are determined by the #include\r
+# relations between the files in the directories.\r
+\r
+DIRECTORY_GRAPH        = NO\r
+\r
+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images \r
+# generated by dot. Possible values are png, jpg, or gif\r
+# If left blank png will be used.\r
+\r
+DOT_IMAGE_FORMAT       = png\r
+\r
+# The tag DOT_PATH can be used to specify the path where the dot tool can be \r
+# found. If left blank, it is assumed the dot tool can be found in the path.\r
+\r
+DOT_PATH               = "C:/Program Files/Graphviz2.18/bin"\r
+\r
+# The DOTFILE_DIRS tag can be used to specify one or more directories that \r
+# contain dot files that are included in the documentation (see the \r
+# \dotfile command).\r
+\r
+DOTFILE_DIRS           = \r
+\r
+# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of \r
+# nodes that will be shown in the graph. If the number of nodes in a graph \r
+# becomes larger than this value, doxygen will truncate the graph, which is \r
+# visualized by representing a node as a red box. Note that doxygen if the \r
+# number of direct children of the root node in a graph is already larger than \r
+# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note \r
+# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.\r
+\r
+DOT_GRAPH_MAX_NODES    = 15\r
+\r
+# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the \r
+# graphs generated by dot. A depth value of 3 means that only nodes reachable \r
+# from the root by following a path via at most 3 edges will be shown. Nodes \r
+# that lay further from the root node will be omitted. Note that setting this \r
+# option to 1 or 2 may greatly reduce the computation time needed for large \r
+# code bases. Also note that the size of a graph can be further restricted by \r
+# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.\r
+\r
+MAX_DOT_GRAPH_DEPTH    = 2\r
+\r
+# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent \r
+# background. This is disabled by default, because dot on Windows does not \r
+# seem to support this out of the box. Warning: Depending on the platform used, \r
+# enabling this option may lead to badly anti-aliased labels on the edges of \r
+# a graph (i.e. they become hard to read).\r
+\r
+DOT_TRANSPARENT        = YES\r
+\r
+# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output \r
+# files in one run (i.e. multiple -o and -T options on the command line). This \r
+# makes dot run faster, but since only newer versions of dot (>1.8.10) \r
+# support this, this feature is disabled by default.\r
+\r
+DOT_MULTI_TARGETS      = NO\r
+\r
+# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will \r
+# generate a legend page explaining the meaning of the various boxes and \r
+# arrows in the dot generated graphs.\r
+\r
+GENERATE_LEGEND        = YES\r
+\r
+# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will \r
+# remove the intermediate dot files that are used to generate \r
+# the various graphs.\r
+\r
+DOT_CLEANUP            = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration::additions related to the search engine   \r
+#---------------------------------------------------------------------------\r
+\r
+# The SEARCHENGINE tag specifies whether or not a search engine should be \r
+# used. If set to NO the values of all tags below this one will be ignored.\r
+\r
+SEARCHENGINE           = NO\r
diff --git a/Demos/Device/LowLevel/Joystick/Joystick.aps b/Demos/Device/LowLevel/Joystick/Joystick.aps
new file mode 100644 (file)
index 0000000..245245d
--- /dev/null
@@ -0,0 +1 @@
+<AVRStudio><MANAGEMENT><ProjectName>Joystick</ProjectName><Created>30-Sep-2008 14:06:38</Created><LastEdit>30-Sep-2008 14:07:27</LastEdit><ICON>241</ICON><ProjectType>0</ProjectType><Created>30-Sep-2008 14:06:38</Created><Version>4</Version><Build>4, 14, 0, 589</Build><ProjectTypeName>AVR GCC</ProjectTypeName></MANAGEMENT><CODE_CREATION><ObjectFile></ObjectFile><EntryFile></EntryFile><SaveFolder>C:\Users\Dean\Documents\Electronics\Projects\WORK\MyUSBWORK\Demos\Joystick\</SaveFolder></CODE_CREATION><DEBUG_TARGET><CURRENT_TARGET>JTAGICE mkII</CURRENT_TARGET><CURRENT_PART>AT90USB1287.xml</CURRENT_PART><BREAKPOINTS></BREAKPOINTS><IO_EXPAND><HIDE>false</HIDE></IO_EXPAND><REGISTERNAMES><Register>R00</Register><Register>R01</Register><Register>R02</Register><Register>R03</Register><Register>R04</Register><Register>R05</Register><Register>R06</Register><Register>R07</Register><Register>R08</Register><Register>R09</Register><Register>R10</Register><Register>R11</Register><Register>R12</Register><Register>R13</Register><Register>R14</Register><Register>R15</Register><Register>R16</Register><Register>R17</Register><Register>R18</Register><Register>R19</Register><Register>R20</Register><Register>R21</Register><Register>R22</Register><Register>R23</Register><Register>R24</Register><Register>R25</Register><Register>R26</Register><Register>R27</Register><Register>R28</Register><Register>R29</Register><Register>R30</Register><Register>R31</Register></REGISTERNAMES><COM>Auto</COM><COMType>0</COMType><WATCHNUM>0</WATCHNUM><WATCHNAMES><Pane0></Pane0><Pane1></Pane1><Pane2></Pane2><Pane3></Pane3></WATCHNAMES><BreakOnTrcaeFull>0</BreakOnTrcaeFull></DEBUG_TARGET><Debugger><Triggers></Triggers></Debugger><AVRGCCPLUGIN><FILES><SOURCEFILE>Descriptors.c</SOURCEFILE><SOURCEFILE>Joystick.c</SOURCEFILE><HEADERFILE>Descriptors.h</HEADERFILE><HEADERFILE>Joystick.h</HEADERFILE><OTHERFILE>makefile</OTHERFILE></FILES><CONFIGS><CONFIG><NAME>default</NAME><USESEXTERNALMAKEFILE>YES</USESEXTERNALMAKEFILE><EXTERNALMAKEFILE>makefile</EXTERNALMAKEFILE><PART>at90usb1287</PART><HEX>1</HEX><LIST>1</LIST><MAP>1</MAP><OUTPUTFILENAME>Joystick.elf</OUTPUTFILENAME><OUTPUTDIR>default\</OUTPUTDIR><ISDIRTY>1</ISDIRTY><OPTIONS/><INCDIRS/><LIBDIRS/><LIBS/><LINKOBJECTS/><OPTIONSFORALL>-Wall -gdwarf-2 -std=gnu99 -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums</OPTIONSFORALL><LINKEROPTIONS></LINKEROPTIONS><SEGMENTS/></CONFIG></CONFIGS><LASTCONFIG>default</LASTCONFIG><USES_WINAVR>1</USES_WINAVR><GCC_LOC>C:\WinAVR-20080512\bin\avr-gcc.exe</GCC_LOC><MAKE_LOC>C:\WinAVR-20080512\utils\bin\make.exe</MAKE_LOC></AVRGCCPLUGIN><IOView><usergroups/><sort sorted="0" column="0" ordername="0" orderaddress="0" ordergroup="0"/></IOView><Files></Files><Events><Bookmarks></Bookmarks></Events><Trace><Filters></Filters></Trace></AVRStudio>\r
diff --git a/Demos/Device/LowLevel/Joystick/Joystick.c b/Demos/Device/LowLevel/Joystick/Joystick.c
new file mode 100644 (file)
index 0000000..8c50a2c
--- /dev/null
@@ -0,0 +1,246 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  Main source file for the Joystick demo. This file contains the main tasks of the demo and\r
+ *  is responsible for the initial application hardware configuration.\r
+ */\r
+\r
+#include "Joystick.h"\r
+\r
+/* Scheduler Task List */\r
+TASK_LIST\r
+{\r
+       { .Task = USB_USBTask          , .TaskStatus = TASK_STOP },\r
+       { .Task = USB_Joystick_Report  , .TaskStatus = TASK_STOP },\r
+};\r
+\r
+/** Main program entry point. This routine configures the hardware required by the application, then\r
+ *  starts the scheduler to run the application tasks.\r
+ */\r
+int main(void)\r
+{\r
+       /* Disable watchdog if enabled by bootloader/fuses */\r
+       MCUSR &= ~(1 << WDRF);\r
+       wdt_disable();\r
+\r
+       /* Disable clock division */\r
+       clock_prescale_set(clock_div_1);\r
+\r
+       /* Hardware Initialization */\r
+       Joystick_Init();\r
+       LEDs_Init();\r
+       Buttons_Init();\r
+       \r
+       /* Indicate USB not ready */\r
+       UpdateStatus(Status_USBNotReady);\r
+       \r
+       /* Initialize Scheduler so that it can be used */\r
+       Scheduler_Init();\r
+\r
+       /* Initialize USB Subsystem */\r
+       USB_Init();\r
+\r
+       /* Scheduling - routine never returns, so put this last in the main function */\r
+       Scheduler_Start();\r
+}\r
+\r
+/** Event handler for the USB_Connect event. This indicates that the device is enumerating via the status LEDs and\r
+ *  starts the library USB task to begin the enumeration and USB management process.\r
+ */\r
+void EVENT_USB_Connect(void)\r
+{\r
+       /* Start USB management task */\r
+       Scheduler_SetTaskMode(USB_USBTask, TASK_RUN);\r
+\r
+       /* Indicate USB enumerating */\r
+       UpdateStatus(Status_USBEnumerating);\r
+}\r
+\r
+/** Event handler for the USB_Disconnect event. This indicates that the device is no longer connected to a host via\r
+ *  the status LEDs and stops the USB management and joystick reporting tasks.\r
+ */\r
+void EVENT_USB_Disconnect(void)\r
+{\r
+       /* Stop running joystick reporting and USB management tasks */\r
+       Scheduler_SetTaskMode(USB_Joystick_Report, TASK_STOP);\r
+       Scheduler_SetTaskMode(USB_USBTask, TASK_STOP);\r
+\r
+       /* Indicate USB not ready */\r
+       UpdateStatus(Status_USBNotReady);\r
+}\r
+\r
+/** Event handler for the USB_ConfigurationChanged event. This is fired when the host set the current configuration\r
+ *  of the USB device after enumeration - the device endpoints are configured and the joystick reporting task started.\r
+ */ \r
+void EVENT_USB_ConfigurationChanged(void)\r
+{\r
+       /* Setup Joystick Report Endpoint */\r
+       Endpoint_ConfigureEndpoint(JOYSTICK_EPNUM, EP_TYPE_INTERRUPT,\r
+                                      ENDPOINT_DIR_IN, JOYSTICK_EPSIZE,\r
+                                  ENDPOINT_BANK_SINGLE);\r
+\r
+       /* Indicate USB connected and ready */\r
+       UpdateStatus(Status_USBReady);\r
+\r
+       /* Start joystick reporting task */\r
+       Scheduler_SetTaskMode(USB_Joystick_Report, TASK_RUN);\r
+}\r
+\r
+/** Event handler for the USB_UnhandledControlPacket event. This is used to catch standard and class specific\r
+ *  control requests that are not handled internally by the USB library (including the HID commands, which are\r
+ *  all issued via the control endpoint), so that they can be handled appropriately for the application.\r
+ */\r
+void EVENT_USB_UnhandledControlPacket(void)\r
+{\r
+       /* Handle HID Class specific requests */\r
+       switch (USB_ControlRequest.bRequest)\r
+       {\r
+               case REQ_GetReport:\r
+                       if (USB_ControlRequest.bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_INTERFACE))\r
+                       {\r
+                               USB_JoystickReport_Data_t JoystickReportData;\r
+                               \r
+                               Endpoint_ClearSETUP();\r
+\r
+                               /* Create the next HID report to send to the host */                            \r
+                               GetNextReport(&JoystickReportData);\r
+                                       \r
+                               /* Write the report data to the control endpoint */\r
+                               Endpoint_Write_Control_Stream_LE(&JoystickReportData, sizeof(JoystickReportData));\r
+                               \r
+                               /* Finalize the stream transfer to send the last packet or clear the host abort */\r
+                               Endpoint_ClearOUT();\r
+                       }\r
+               \r
+                       break;\r
+       }\r
+}\r
+\r
+/** Fills the given HID report data structure with the next HID report to send to the host.\r
+ *\r
+ *  \param ReportData  Pointer to a HID report data structure to be filled\r
+ *\r
+ *  \return Boolean true if the new report differs from the last report, false otherwise\r
+ */\r
+bool GetNextReport(USB_JoystickReport_Data_t* ReportData)\r
+{\r
+       static uint8_t PrevJoyStatus    = 0;\r
+       static uint8_t PrevButtonStatus = 0;\r
+       uint8_t        JoyStatus_LCL    = Joystick_GetStatus();\r
+       uint8_t        ButtonStatus_LCL = Buttons_GetStatus();\r
+       bool           InputChanged     = false;\r
+\r
+       /* Clear the report contents */\r
+       memset(ReportData, 0, sizeof(USB_JoystickReport_Data_t));\r
+\r
+       if (JoyStatus_LCL & JOY_UP)\r
+         ReportData->Y = -100;\r
+       else if (JoyStatus_LCL & JOY_DOWN)\r
+         ReportData->Y =  100;\r
+\r
+       if (JoyStatus_LCL & JOY_RIGHT)\r
+         ReportData->X =  100;\r
+       else if (JoyStatus_LCL & JOY_LEFT)\r
+         ReportData->X = -100;\r
+\r
+       if (JoyStatus_LCL & JOY_PRESS)\r
+         ReportData->Button  = (1 << 1);\r
+         \r
+       if (ButtonStatus_LCL & BUTTONS_BUTTON1)\r
+         ReportData->Button |= (1 << 0);\r
+         \r
+       /* Check if the new report is different to the previous report */\r
+       InputChanged = (uint8_t)(PrevJoyStatus ^ JoyStatus_LCL) | (uint8_t)(PrevButtonStatus ^ ButtonStatus_LCL);\r
+\r
+       /* Save the current joystick status for later comparison */\r
+       PrevJoyStatus    = JoyStatus_LCL;\r
+       PrevButtonStatus = ButtonStatus_LCL;\r
+\r
+       /* Return whether the new report is different to the previous report or not */\r
+       return InputChanged;\r
+}\r
+\r
+/** Function to manage status updates to the user. This is done via LEDs on the given board, if available, but may be changed to\r
+ *  log to a serial port, or anything else that is suitable for status updates.\r
+ *\r
+ *  \param CurrentStatus  Current status of the system, from the Joystick_StatusCodes_t enum\r
+ */\r
+void UpdateStatus(uint8_t CurrentStatus)\r
+{\r
+       uint8_t LEDMask = LEDS_NO_LEDS;\r
+       \r
+       /* Set the LED mask to the appropriate LED mask based on the given status code */\r
+       switch (CurrentStatus)\r
+       {\r
+               case Status_USBNotReady:\r
+                       LEDMask = (LEDS_LED1);\r
+                       break;\r
+               case Status_USBEnumerating:\r
+                       LEDMask = (LEDS_LED1 | LEDS_LED2);\r
+                       break;\r
+               case Status_USBReady:\r
+                       LEDMask = (LEDS_LED2 | LEDS_LED4);\r
+                       break;\r
+       }\r
+       \r
+       /* Set the board LEDs to the new LED mask */\r
+       LEDs_SetAllLEDs(LEDMask);\r
+}\r
+\r
+/** Function to manage HID report generation and transmission to the host. */\r
+TASK(USB_Joystick_Report)\r
+{\r
+       /* Check if the USB System is connected to a Host */\r
+       if (USB_IsConnected)\r
+       {\r
+               /* Select the Joystick Report Endpoint */\r
+               Endpoint_SelectEndpoint(JOYSTICK_EPNUM);\r
+\r
+               /* Check to see if the host is ready for another packet */\r
+               if (Endpoint_IsINReady())\r
+               {\r
+                       USB_JoystickReport_Data_t JoystickReportData;\r
+                       \r
+                       /* Create the next HID report to send to the host */\r
+                       GetNextReport(&JoystickReportData);\r
+               \r
+                       /* Write Joystick Report Data */\r
+                       Endpoint_Write_Stream_LE(&JoystickReportData, sizeof(JoystickReportData));\r
+\r
+                       /* Finalize the stream transfer to send the last packet */\r
+                       Endpoint_ClearIN();\r
+                       \r
+                       /* Clear the report data afterwards */\r
+                       memset(&JoystickReportData, 0, sizeof(JoystickReportData));\r
+               }\r
+       }\r
+}\r
diff --git a/Demos/Device/LowLevel/Joystick/Joystick.h b/Demos/Device/LowLevel/Joystick/Joystick.h
new file mode 100644 (file)
index 0000000..9763cad
--- /dev/null
@@ -0,0 +1,90 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  Header file for Joystick.c.\r
+ */\r
\r
+#ifndef _JOYSTICK_H_\r
+#define _JOYSTICK_H_\r
+\r
+       /* Includes: */\r
+               #include <avr/io.h>\r
+               #include <avr/wdt.h>\r
+               #include <avr/power.h>\r
+               #include <string.h>\r
+\r
+               #include "Descriptors.h"\r
+\r
+               #include <LUFA/Version.h>                    // Library Version Information\r
+               #include <LUFA/Drivers/USB/USB.h>            // USB Functionality\r
+               #include <LUFA/Drivers/Board/Joystick.h>     // Joystick driver\r
+               #include <LUFA/Drivers/Board/LEDs.h>         // LEDs driver\r
+               #include <LUFA/Drivers/Board/Buttons.h>      // Board Buttons driver\r
+               #include <LUFA/Scheduler/Scheduler.h>        // Simple scheduler for task management\r
+               \r
+       /* Task Definitions: */\r
+               TASK(USB_Joystick_Report);\r
+\r
+       /* Macros: */\r
+               /** HID Class specific request to get the next HID report from the device. */\r
+               #define REQ_GetReport   0x01\r
+\r
+       /* Type Defines: */\r
+               /** Type define for the joystick HID report structure, for creating and sending HID reports to the host PC.\r
+                *  This mirrors the layout described to the host in the HID report descriptor, in Descriptors.c.\r
+                */\r
+               typedef struct\r
+               {\r
+                       int8_t  X; /**< Current absolute joystick X position, as a signed 8-bit integer */\r
+                       int8_t  Y; /**< Current absolute joystick Y position, as a signed 8-bit integer */\r
+                       uint8_t Button; /**< Bit mask of the currently pressed joystick buttons */\r
+               } USB_JoystickReport_Data_t;\r
+                       \r
+       /* Enums: */\r
+               /** Enum for the possible status codes for passing to the UpdateStatus() function. */\r
+               enum Joystick_StatusCodes_t\r
+               {\r
+                       Status_USBNotReady    = 0, /**< USB is not ready (disconnected from a USB host) */\r
+                       Status_USBEnumerating = 1, /**< USB interface is enumerating */\r
+                       Status_USBReady       = 2, /**< USB interface is connected and ready */\r
+               };\r
+\r
+       /* Function Prototypes: */\r
+               void EVENT_USB_Connect(void);\r
+               void EVENT_USB_Disconnect(void);\r
+               void EVENT_USB_ConfigurationChanged(void);\r
+               void EVENT_USB_UnhandledControlPacket(void);\r
+\r
+               bool GetNextReport(USB_JoystickReport_Data_t* ReportData);\r
+               void UpdateStatus(uint8_t CurrentStatus);\r
+\r
+#endif\r
diff --git a/Demos/Device/LowLevel/Joystick/Joystick.txt b/Demos/Device/LowLevel/Joystick/Joystick.txt
new file mode 100644 (file)
index 0000000..7d47ae9
--- /dev/null
@@ -0,0 +1,62 @@
+/** \file\r
+ *\r
+ *  This file contains special DoxyGen information for the generation of the main page and other special\r
+ *  documentation pages. It is not a project source file.\r
+ */\r
\r
+/** \mainpage Joystick Device Demo\r
+ *\r
+ *  \section SSec_Info USB Information:\r
+ *\r
+ *  The following table gives a rundown of the USB utilization of this demo.\r
+ *\r
+ *  <table>\r
+ *   <tr>\r
+ *    <td><b>USB Mode:</b></td>\r
+ *    <td>Device</td>\r
+ *   </tr>\r
+ *   <tr>\r
+ *    <td><b>USB Class:</b></td>\r
+ *    <td>Human Interface Device (HID)</td>\r
+ *   </tr>\r
+ *   <tr> \r
+ *    <td><b>USB Subclass:</b></td>\r
+ *    <td>N/A</td>\r
+ *   </tr>\r
+ *   <tr>\r
+ *    <td><b>Relevant Standards:</b></td>\r
+ *    <td>USBIF HID Specification, USBIF HID Usage Tables</td>\r
+ *   </tr>\r
+ *   <tr>\r
+ *    <td><b>Usable Speeds:</b></td>\r
+ *    <td>Low Speed Mode, Full Speed Mode</td>\r
+ *   </tr>\r
+ *  </table>\r
+ *\r
+ *  \section SSec_Description Project Description: \r
+ *\r
+ *  Joystick demonstration application. This gives a simple reference\r
+ *  application for implementing a USB Keyboard device, for USB Joysticks\r
+ *  using the standard Keyboard HID profile.\r
+ *  \r
+ *  This device will show up as a generic joystick device, with two buttons.\r
+ *  Pressing the joystick inwards is the first button, and the HWB button\r
+ *  is the second.\r
+ *  \r
+ *  Moving the joystick on the selected board moves the joystick location on\r
+ *  the host computer.\r
+ *  \r
+ *  Currently only single interface joysticks are supported.\r
+ *\r
+ *  \section SSec_Options Project Options\r
+ *\r
+ *  The following defines can be found in this demo, which can control the demo behaviour when defined, or changed in value.\r
+ *\r
+ *  <table>\r
+ *   <tr>\r
+ *    <td>\r
+ *     None\r
+ *    </td>\r
+ *   </tr>\r
+ *  </table>\r
+ */
\ No newline at end of file
diff --git a/Demos/Device/LowLevel/Joystick/makefile b/Demos/Device/LowLevel/Joystick/makefile
new file mode 100644 (file)
index 0000000..aaf69e8
--- /dev/null
@@ -0,0 +1,734 @@
+# Hey Emacs, this is a -*- makefile -*-\r
+#----------------------------------------------------------------------------\r
+# WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al.\r
+#  >> Modified for use with the LUFA project. <<\r
+#\r
+# Released to the Public Domain\r
+#\r
+# Additional material for this makefile was written by:\r
+# Peter Fleury\r
+# Tim Henigan\r
+# Colin O'Flynn\r
+# Reiner Patommel\r
+# Markus Pfaff\r
+# Sander Pool\r
+# Frederik Rouleau\r
+# Carlos Lamas\r
+# Dean Camera\r
+# Opendous Inc.\r
+# Denver Gingerich\r
+#\r
+#----------------------------------------------------------------------------\r
+# On command line:\r
+#\r
+# make all = Make software.\r
+#\r
+# make clean = Clean out built project files.\r
+#\r
+# make coff = Convert ELF to AVR COFF.\r
+#\r
+# make extcoff = Convert ELF to AVR Extended COFF.\r
+#\r
+# make program = Download the hex file to the device, using avrdude.\r
+#                Please customize the avrdude settings below first!\r
+#\r
+# make dfu = Download the hex file to the device, using dfu-programmer (must\r
+#            have dfu-programmer installed).\r
+#\r
+# make flip = Download the hex file to the device, using Atmel FLIP (must\r
+#             have Atmel FLIP installed).\r
+#\r
+# make dfu-ee = Download the eeprom file to the device, using dfu-programmer\r
+#               (must have dfu-programmer installed).\r
+#\r
+# make flip-ee = Download the eeprom file to the device, using Atmel FLIP\r
+#                (must have Atmel FLIP installed).\r
+#\r
+# make doxygen = Generate DoxyGen documentation for the project (must have\r
+#                DoxyGen installed)\r
+#\r
+# make debug = Start either simulavr or avarice as specified for debugging, \r
+#              with avr-gdb or avr-insight as the front end for debugging.\r
+#\r
+# make filename.s = Just compile filename.c into the assembler code only.\r
+#\r
+# make filename.i = Create a preprocessed source file for use in submitting\r
+#                   bug reports to the GCC project.\r
+#\r
+# To rebuild project do "make clean" then "make all".\r
+#----------------------------------------------------------------------------\r
+\r
+\r
+# MCU name\r
+MCU = at90usb1287\r
+\r
+\r
+# Target board (see library "Board Types" documentation, USER or blank for projects not requiring\r
+# LUFA board drivers). If USER is selected, put custom board drivers in a directory called \r
+# "Board" inside the application directory.\r
+BOARD  = USBKEY\r
+\r
+\r
+# Processor frequency.\r
+#     This will define a symbol, F_CPU, in all source code files equal to the \r
+#     processor frequency. You can then use this symbol in your source code to \r
+#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done\r
+#     automatically to create a 32-bit value in your source code.\r
+#     Typical values are:\r
+#         F_CPU =  1000000\r
+#         F_CPU =  1843200\r
+#         F_CPU =  2000000\r
+#         F_CPU =  3686400\r
+#         F_CPU =  4000000\r
+#         F_CPU =  7372800\r
+#         F_CPU =  8000000\r
+#         F_CPU = 11059200\r
+#         F_CPU = 14745600\r
+#         F_CPU = 16000000\r
+#         F_CPU = 18432000\r
+#         F_CPU = 20000000\r
+F_CPU = 8000000\r
+\r
+\r
+# Input clock frequency.\r
+#     This will define a symbol, F_CLOCK, in all source code files equal to the \r
+#     input clock frequency (before any prescaling is performed). This value may\r
+#     differ from F_CPU if prescaling is used on the latter, and is required as the\r
+#     raw input clock is fed directly to the PLL sections of the AVR for high speed\r
+#     clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'\r
+#     at the end, this will be done automatically to create a 32-bit value in your\r
+#     source code.\r
+#\r
+#     If no clock division is performed on the input clock inside the AVR (via the\r
+#     CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.\r
+F_CLOCK = 8000000\r
+\r
+\r
+# Output format. (can be srec, ihex, binary)\r
+FORMAT = ihex\r
+\r
+\r
+# Target file name (without extension).\r
+TARGET = Joystick\r
+\r
+\r
+# Object files directory\r
+#     To put object files in current directory, use a dot (.), do NOT make\r
+#     this an empty or blank macro!\r
+OBJDIR = .\r
+\r
+\r
+# Path to the LUFA library\r
+LUFA_PATH = ../../..\r
+\r
+\r
+# List C source files here. (C dependencies are automatically generated.)\r
+SRC = $(TARGET).c                                                 \\r
+         Descriptors.c                                               \\r
+         $(LUFA_PATH)/LUFA/Scheduler/Scheduler.c                     \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/DevChapter9.c        \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Endpoint.c           \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Host.c               \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/HostChapter9.c       \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/LowLevel.c           \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Pipe.c               \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/Events.c            \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBInterrupt.c      \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBTask.c           \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/ConfigDescriptor.c  \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/Class/HIDParser.c             \\r
+\r
+\r
+# List C++ source files here. (C dependencies are automatically generated.)\r
+CPPSRC = \r
+\r
+\r
+# List Assembler source files here.\r
+#     Make them always end in a capital .S.  Files ending in a lowercase .s\r
+#     will not be considered source files but generated files (assembler\r
+#     output from the compiler), and will be deleted upon "make clean"!\r
+#     Even though the DOS/Win* filesystem matches both .s and .S the same,\r
+#     it will preserve the spelling of the filenames, and gcc itself does\r
+#     care about how the name is spelled on its command-line.\r
+ASRC =\r
+\r
+\r
+# Optimization level, can be [0, 1, 2, 3, s]. \r
+#     0 = turn off optimization. s = optimize for size.\r
+#     (Note: 3 is not always the best optimization level. See avr-libc FAQ.)\r
+OPT = s\r
+\r
+\r
+# Debugging format.\r
+#     Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs.\r
+#     AVR Studio 4.10 requires dwarf-2.\r
+#     AVR [Extended] COFF format requires stabs, plus an avr-objcopy run.\r
+DEBUG = dwarf-2\r
+\r
+\r
+# List any extra directories to look for include files here.\r
+#     Each directory must be seperated by a space.\r
+#     Use forward slashes for directory separators.\r
+#     For a directory that has spaces, enclose it in quotes.\r
+EXTRAINCDIRS = $(LUFA_PATH)/\r
+\r
+\r
+# Compiler flag to set the C Standard level.\r
+#     c89   = "ANSI" C\r
+#     gnu89 = c89 plus GCC extensions\r
+#     c99   = ISO C99 standard (not yet fully implemented)\r
+#     gnu99 = c99 plus GCC extensions\r
+CSTANDARD = -std=gnu99\r
+\r
+\r
+# Place -D or -U options here for C sources\r
+CDEFS  = -DF_CPU=$(F_CPU)UL -DF_CLOCK=$(F_CLOCK)UL -DBOARD=BOARD_$(BOARD)\r
+CDEFS += -DUSE_NONSTANDARD_DESCRIPTOR_NAMES -DNO_STREAM_CALLBACKS -DUSB_DEVICE_ONLY\r
+CDEFS += -DFIXED_CONTROL_ENDPOINT_SIZE=8 -DUSE_SINGLE_DEVICE_CONFIGURATION\r
+CDEFS += -DUSE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)"\r
+\r
+\r
+# Place -D or -U options here for ASM sources\r
+ADEFS = -DF_CPU=$(F_CPU)\r
+\r
+\r
+# Place -D or -U options here for C++ sources\r
+CPPDEFS = -DF_CPU=$(F_CPU)UL\r
+#CPPDEFS += -D__STDC_LIMIT_MACROS\r
+#CPPDEFS += -D__STDC_CONSTANT_MACROS\r
+\r
+\r
+\r
+#---------------- Compiler Options C ----------------\r
+#  -g*:          generate debugging information\r
+#  -O*:          optimization level\r
+#  -f...:        tuning, see GCC manual and avr-libc documentation\r
+#  -Wall...:     warning level\r
+#  -Wa,...:      tell GCC to pass this to the assembler.\r
+#    -adhlns...: create assembler listing\r
+CFLAGS = -g$(DEBUG)\r
+CFLAGS += $(CDEFS)\r
+CFLAGS += -O$(OPT)\r
+CFLAGS += -funsigned-char\r
+CFLAGS += -funsigned-bitfields\r
+CFLAGS += -ffunction-sections\r
+CFLAGS += -fpack-struct\r
+CFLAGS += -fshort-enums\r
+CFLAGS += -finline-limit=20\r
+CFLAGS += -Wall\r
+CFLAGS += -Wstrict-prototypes\r
+CFLAGS += -Wundef\r
+#CFLAGS += -fno-unit-at-a-time\r
+#CFLAGS += -Wunreachable-code\r
+#CFLAGS += -Wsign-compare\r
+CFLAGS += -Wa,-adhlns=$(<:%.c=$(OBJDIR)/%.lst)\r
+CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))\r
+CFLAGS += $(CSTANDARD)\r
+\r
+\r
+#---------------- Compiler Options C++ ----------------\r
+#  -g*:          generate debugging information\r
+#  -O*:          optimization level\r
+#  -f...:        tuning, see GCC manual and avr-libc documentation\r
+#  -Wall...:     warning level\r
+#  -Wa,...:      tell GCC to pass this to the assembler.\r
+#    -adhlns...: create assembler listing\r
+CPPFLAGS = -g$(DEBUG)\r
+CPPFLAGS += $(CPPDEFS)\r
+CPPFLAGS += -O$(OPT)\r
+CPPFLAGS += -funsigned-char\r
+CPPFLAGS += -funsigned-bitfields\r
+CPPFLAGS += -fpack-struct\r
+CPPFLAGS += -fshort-enums\r
+CPPFLAGS += -fno-exceptions\r
+CPPFLAGS += -Wall\r
+CFLAGS += -Wundef\r
+#CPPFLAGS += -mshort-calls\r
+#CPPFLAGS += -fno-unit-at-a-time\r
+#CPPFLAGS += -Wstrict-prototypes\r
+#CPPFLAGS += -Wunreachable-code\r
+#CPPFLAGS += -Wsign-compare\r
+CPPFLAGS += -Wa,-adhlns=$(<:%.cpp=$(OBJDIR)/%.lst)\r
+CPPFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))\r
+#CPPFLAGS += $(CSTANDARD)\r
+\r
+\r
+#---------------- Assembler Options ----------------\r
+#  -Wa,...:   tell GCC to pass this to the assembler.\r
+#  -adhlns:   create listing\r
+#  -gstabs:   have the assembler create line number information; note that\r
+#             for use in COFF files, additional information about filenames\r
+#             and function names needs to be present in the assembler source\r
+#             files -- see avr-libc docs [FIXME: not yet described there]\r
+#  -listing-cont-lines: Sets the maximum number of continuation lines of hex \r
+#       dump that will be displayed for a given single line of source input.\r
+ASFLAGS = $(ADEFS) -Wa,-adhlns=$(<:%.S=$(OBJDIR)/%.lst),-gstabs,--listing-cont-lines=100\r
+\r
+\r
+#---------------- Library Options ----------------\r
+# Minimalistic printf version\r
+PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min\r
+\r
+# Floating point printf version (requires MATH_LIB = -lm below)\r
+PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt\r
+\r
+# If this is left blank, then it will use the Standard printf version.\r
+PRINTF_LIB = \r
+#PRINTF_LIB = $(PRINTF_LIB_MIN)\r
+#PRINTF_LIB = $(PRINTF_LIB_FLOAT)\r
+\r
+\r
+# Minimalistic scanf version\r
+SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min\r
+\r
+# Floating point + %[ scanf version (requires MATH_LIB = -lm below)\r
+SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt\r
+\r
+# If this is left blank, then it will use the Standard scanf version.\r
+SCANF_LIB = \r
+#SCANF_LIB = $(SCANF_LIB_MIN)\r
+#SCANF_LIB = $(SCANF_LIB_FLOAT)\r
+\r
+\r
+MATH_LIB = -lm\r
+\r
+\r
+# List any extra directories to look for libraries here.\r
+#     Each directory must be seperated by a space.\r
+#     Use forward slashes for directory separators.\r
+#     For a directory that has spaces, enclose it in quotes.\r
+EXTRALIBDIRS = \r
+\r
+\r
+\r
+#---------------- External Memory Options ----------------\r
+\r
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),\r
+# used for variables (.data/.bss) and heap (malloc()).\r
+#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff\r
+\r
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),\r
+# only used for heap (malloc()).\r
+#EXTMEMOPTS = -Wl,--section-start,.data=0x801100,--defsym=__heap_end=0x80ffff\r
+\r
+EXTMEMOPTS =\r
+\r
+\r
+\r
+#---------------- Linker Options ----------------\r
+#  -Wl,...:     tell GCC to pass this to linker.\r
+#    -Map:      create map file\r
+#    --cref:    add cross reference to  map file\r
+LDFLAGS = -Wl,-Map=$(TARGET).map,--cref\r
+LDFLAGS += -Wl,--relax \r
+LDFLAGS += -Wl,--gc-sections\r
+LDFLAGS += $(EXTMEMOPTS)\r
+LDFLAGS += $(patsubst %,-L%,$(EXTRALIBDIRS))\r
+LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)\r
+#LDFLAGS += -T linker_script.x\r
+\r
+\r
+\r
+#---------------- Programming Options (avrdude) ----------------\r
+\r
+# Programming hardware: alf avr910 avrisp bascom bsd \r
+# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500\r
+#\r
+# Type: avrdude -c ?\r
+# to get a full listing.\r
+#\r
+AVRDUDE_PROGRAMMER = jtagmkII\r
+\r
+# com1 = serial port. Use lpt1 to connect to parallel port.\r
+AVRDUDE_PORT = usb\r
+\r
+AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex\r
+#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep\r
+\r
+\r
+# Uncomment the following if you want avrdude's erase cycle counter.\r
+# Note that this counter needs to be initialized first using -Yn,\r
+# see avrdude manual.\r
+#AVRDUDE_ERASE_COUNTER = -y\r
+\r
+# Uncomment the following if you do /not/ wish a verification to be\r
+# performed after programming the device.\r
+#AVRDUDE_NO_VERIFY = -V\r
+\r
+# Increase verbosity level.  Please use this when submitting bug\r
+# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude> \r
+# to submit bug reports.\r
+#AVRDUDE_VERBOSE = -v -v\r
+\r
+AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)\r
+AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY)\r
+AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE)\r
+AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER)\r
+\r
+\r
+\r
+#---------------- Debugging Options ----------------\r
+\r
+# For simulavr only - target MCU frequency.\r
+DEBUG_MFREQ = $(F_CPU)\r
+\r
+# Set the DEBUG_UI to either gdb or insight.\r
+# DEBUG_UI = gdb\r
+DEBUG_UI = insight\r
+\r
+# Set the debugging back-end to either avarice, simulavr.\r
+DEBUG_BACKEND = avarice\r
+#DEBUG_BACKEND = simulavr\r
+\r
+# GDB Init Filename.\r
+GDBINIT_FILE = __avr_gdbinit\r
+\r
+# When using avarice settings for the JTAG\r
+JTAG_DEV = /dev/com1\r
+\r
+# Debugging port used to communicate between GDB / avarice / simulavr.\r
+DEBUG_PORT = 4242\r
+\r
+# Debugging host used to communicate between GDB / avarice / simulavr, normally\r
+#     just set to localhost unless doing some sort of crazy debugging when \r
+#     avarice is running on a different computer.\r
+DEBUG_HOST = localhost\r
+\r
+\r
+\r
+#============================================================================\r
+\r
+\r
+# Define programs and commands.\r
+SHELL = sh\r
+CC = avr-gcc\r
+OBJCOPY = avr-objcopy\r
+OBJDUMP = avr-objdump\r
+SIZE = avr-size\r
+AR = avr-ar rcs\r
+NM = avr-nm\r
+AVRDUDE = avrdude\r
+REMOVE = rm -f\r
+REMOVEDIR = rm -rf\r
+COPY = cp\r
+WINSHELL = cmd\r
+\r
+# Define Messages\r
+# English\r
+MSG_ERRORS_NONE = Errors: none\r
+MSG_BEGIN = -------- begin --------\r
+MSG_END = --------  end  --------\r
+MSG_SIZE_BEFORE = Size before: \r
+MSG_SIZE_AFTER = Size after:\r
+MSG_COFF = Converting to AVR COFF:\r
+MSG_EXTENDED_COFF = Converting to AVR Extended COFF:\r
+MSG_FLASH = Creating load file for Flash:\r
+MSG_EEPROM = Creating load file for EEPROM:\r
+MSG_EXTENDED_LISTING = Creating Extended Listing:\r
+MSG_SYMBOL_TABLE = Creating Symbol Table:\r
+MSG_LINKING = Linking:\r
+MSG_COMPILING = Compiling C:\r
+MSG_COMPILING_CPP = Compiling C++:\r
+MSG_ASSEMBLING = Assembling:\r
+MSG_CLEANING = Cleaning project:\r
+MSG_CREATING_LIBRARY = Creating library:\r
+\r
+\r
+\r
+\r
+# Define all object files.\r
+OBJ = $(SRC:%.c=$(OBJDIR)/%.o) $(CPPSRC:%.cpp=$(OBJDIR)/%.o) $(ASRC:%.S=$(OBJDIR)/%.o) \r
+\r
+# Define all listing files.\r
+LST = $(SRC:%.c=$(OBJDIR)/%.lst) $(CPPSRC:%.cpp=$(OBJDIR)/%.lst) $(ASRC:%.S=$(OBJDIR)/%.lst) \r
+\r
+\r
+# Compiler flags to generate dependency files.\r
+GENDEPFLAGS = -MMD -MP -MF .dep/$(@F).d\r
+\r
+\r
+# Combine all necessary flags and optional flags.\r
+# Add target processor to flags.\r
+ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS)\r
+ALL_CPPFLAGS = -mmcu=$(MCU) -I. -x c++ $(CPPFLAGS) $(GENDEPFLAGS)\r
+ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)\r
+\r
+\r
+\r
+\r
+\r
+# Default target.\r
+all: begin gccversion sizebefore build checkhooks checklibmode checkboard sizeafter end\r
+\r
+# Change the build target to build a HEX file or a library.\r
+build: elf hex eep lss sym\r
+#build: lib\r
+\r
+\r
+elf: $(TARGET).elf\r
+hex: $(TARGET).hex\r
+eep: $(TARGET).eep\r
+lss: $(TARGET).lss\r
+sym: $(TARGET).sym\r
+LIBNAME=lib$(TARGET).a\r
+lib: $(LIBNAME)\r
+\r
+\r
+\r
+# Eye candy.\r
+# AVR Studio 3.x does not check make's exit code but relies on\r
+# the following magic strings to be generated by the compile job.\r
+begin:\r
+       @echo\r
+       @echo $(MSG_BEGIN)\r
+\r
+end:\r
+       @echo $(MSG_END)\r
+       @echo\r
+\r
+\r
+# Display size of file.\r
+HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex\r
+ELFSIZE = $(SIZE) $(MCU_FLAG) $(FORMAT_FLAG) $(TARGET).elf\r
+MCU_FLAG = $(shell $(SIZE) --help | grep -- --mcu > /dev/null && echo --mcu=$(MCU) )\r
+FORMAT_FLAG = $(shell $(SIZE) --help | grep -- --format=.*avr > /dev/null && echo --format=avr )\r
+\r
+sizebefore:\r
+       @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \\r
+       2>/dev/null; echo; fi\r
+\r
+sizeafter:\r
+       @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \\r
+       2>/dev/null; echo; fi\r
+\r
+checkhooks: build\r
+       @echo\r
+       @echo ------- Unhooked LUFA Events -------\r
+       @$(shell) (grep -s '^EVENT_.*LUFA/.*\\.o' $(TARGET).map | \\r
+                  cut -d' ' -f1 | cut -d'_' -f2- | grep ".*") || \\r
+                          echo "(None)"\r
+       @echo ------------------------------------\r
+\r
+checklibmode:\r
+       @echo\r
+       @echo ----------- Library Mode -----------\r
+       @$(shell) ($(CC) $(ALL_CFLAGS) -E -dM - < /dev/null \\r
+                 | grep 'USB_\(DEVICE\|HOST\)_ONLY' | cut -d' ' -f2 | grep ".*") \\r
+                 || echo "No specific mode (both device and host mode allowable)."\r
+       @echo ------------------------------------\r
+\r
+checkboard:\r
+       @echo\r
+       @echo ---------- Selected Board ----------\r
+       @echo Selected board model is $(BOARD).\r
+       @echo ------------------------------------\r
+       \r
+# Display compiler version information.\r
+gccversion : \r
+       @$(CC) --version\r
+\r
+\r
+\r
+# Program the device.  \r
+program: $(TARGET).hex $(TARGET).eep\r
+       $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)\r
+\r
+flip: $(TARGET).hex\r
+       batchisp -hardware usb -device $(MCU) -operation erase f\r
+       batchisp -hardware usb -device $(MCU) -operation loadbuffer $(TARGET).hex program\r
+       batchisp -hardware usb -device $(MCU) -operation start reset 0\r
+\r
+dfu: $(TARGET).hex\r
+       dfu-programmer $(MCU) erase\r
+       dfu-programmer $(MCU) flash --debug 1 $(TARGET).hex\r
+       dfu-programmer $(MCU) reset\r
+\r
+flip-ee: $(TARGET).hex $(TARGET).eep\r
+       copy $(TARGET).eep $(TARGET)eep.hex\r
+       batchisp -hardware usb -device $(MCU) -operation memory EEPROM erase\r
+       batchisp -hardware usb -device $(MCU) -operation memory EEPROM loadbuffer $(TARGET)eep.hex program\r
+       batchisp -hardware usb -device $(MCU) -operation start reset 0\r
+\r
+dfu-ee: $(TARGET).hex $(TARGET).eep\r
+       dfu-programmer $(MCU) flash-eeprom --debug 1 --suppress-bootloader-mem $(TARGET).eep\r
+       dfu-programmer $(MCU) reset\r
+\r
+\r
+# Generate avr-gdb config/init file which does the following:\r
+#     define the reset signal, load the target file, connect to target, and set \r
+#     a breakpoint at main().\r
+gdb-config: \r
+       @$(REMOVE) $(GDBINIT_FILE)\r
+       @echo define reset >> $(GDBINIT_FILE)\r
+       @echo SIGNAL SIGHUP >> $(GDBINIT_FILE)\r
+       @echo end >> $(GDBINIT_FILE)\r
+       @echo file $(TARGET).elf >> $(GDBINIT_FILE)\r
+       @echo target remote $(DEBUG_HOST):$(DEBUG_PORT)  >> $(GDBINIT_FILE)\r
+ifeq ($(DEBUG_BACKEND),simulavr)\r
+       @echo load  >> $(GDBINIT_FILE)\r
+endif\r
+       @echo break main >> $(GDBINIT_FILE)\r
+\r
+debug: gdb-config $(TARGET).elf\r
+ifeq ($(DEBUG_BACKEND), avarice)\r
+       @echo Starting AVaRICE - Press enter when "waiting to connect" message displays.\r
+       @$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \\r
+       $(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT)\r
+       @$(WINSHELL) /c pause\r
+\r
+else\r
+       @$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \\r
+       $(DEBUG_MFREQ) --port $(DEBUG_PORT)\r
+endif\r
+       @$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE)\r
+\r
+\r
+\r
+\r
+# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.\r
+COFFCONVERT = $(OBJCOPY) --debugging\r
+COFFCONVERT += --change-section-address .data-0x800000\r
+COFFCONVERT += --change-section-address .bss-0x800000\r
+COFFCONVERT += --change-section-address .noinit-0x800000\r
+COFFCONVERT += --change-section-address .eeprom-0x810000\r
+\r
+\r
+\r
+coff: $(TARGET).elf\r
+       @echo\r
+       @echo $(MSG_COFF) $(TARGET).cof\r
+       $(COFFCONVERT) -O coff-avr $< $(TARGET).cof\r
+\r
+\r
+extcoff: $(TARGET).elf\r
+       @echo\r
+       @echo $(MSG_EXTENDED_COFF) $(TARGET).cof\r
+       $(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof\r
+\r
+\r
+\r
+# Create final output files (.hex, .eep) from ELF output file.\r
+%.hex: %.elf\r
+       @echo\r
+       @echo $(MSG_FLASH) $@\r
+       $(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@\r
+\r
+%.eep: %.elf\r
+       @echo\r
+       @echo $(MSG_EEPROM) $@\r
+       -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \\r
+       --change-section-lma .eeprom=0 --no-change-warnings -O $(FORMAT) $< $@ || exit 0\r
+\r
+# Create extended listing file from ELF output file.\r
+%.lss: %.elf\r
+       @echo\r
+       @echo $(MSG_EXTENDED_LISTING) $@\r
+       $(OBJDUMP) -h -z -S $< > $@\r
+\r
+# Create a symbol table from ELF output file.\r
+%.sym: %.elf\r
+       @echo\r
+       @echo $(MSG_SYMBOL_TABLE) $@\r
+       $(NM) -n $< > $@\r
+\r
+\r
+\r
+# Create library from object files.\r
+.SECONDARY : $(TARGET).a\r
+.PRECIOUS : $(OBJ)\r
+%.a: $(OBJ)\r
+       @echo\r
+       @echo $(MSG_CREATING_LIBRARY) $@\r
+       $(AR) $@ $(OBJ)\r
+\r
+\r
+# Link: create ELF output file from object files.\r
+.SECONDARY : $(TARGET).elf\r
+.PRECIOUS : $(OBJ)\r
+%.elf: $(OBJ)\r
+       @echo\r
+       @echo $(MSG_LINKING) $@\r
+       $(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)\r
+\r
+\r
+# Compile: create object files from C source files.\r
+$(OBJDIR)/%.o : %.c\r
+       @echo\r
+       @echo $(MSG_COMPILING) $<\r
+       $(CC) -c $(ALL_CFLAGS) $< -o $@ \r
+\r
+\r
+# Compile: create object files from C++ source files.\r
+$(OBJDIR)/%.o : %.cpp\r
+       @echo\r
+       @echo $(MSG_COMPILING_CPP) $<\r
+       $(CC) -c $(ALL_CPPFLAGS) $< -o $@ \r
+\r
+\r
+# Compile: create assembler files from C source files.\r
+%.s : %.c\r
+       $(CC) -S $(ALL_CFLAGS) $< -o $@\r
+\r
+\r
+# Compile: create assembler files from C++ source files.\r
+%.s : %.cpp\r
+       $(CC) -S $(ALL_CPPFLAGS) $< -o $@\r
+\r
+\r
+# Assemble: create object files from assembler source files.\r
+$(OBJDIR)/%.o : %.S\r
+       @echo\r
+       @echo $(MSG_ASSEMBLING) $<\r
+       $(CC) -c $(ALL_ASFLAGS) $< -o $@\r
+\r
+\r
+# Create preprocessed source for use in sending a bug report.\r
+%.i : %.c\r
+       $(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ \r
+       \r
+\r
+# Target: clean project.\r
+clean: begin clean_list clean_binary end\r
+\r
+clean_binary:\r
+       $(REMOVE) $(TARGET).hex\r
+       \r
+clean_list:\r
+       @echo $(MSG_CLEANING)\r
+       $(REMOVE) $(TARGET).eep\r
+       $(REMOVE) $(TARGET)eep.hex\r
+       $(REMOVE) $(TARGET).cof\r
+       $(REMOVE) $(TARGET).elf\r
+       $(REMOVE) $(TARGET).map\r
+       $(REMOVE) $(TARGET).sym\r
+       $(REMOVE) $(TARGET).lss\r
+       $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.o)\r
+       $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.lst)\r
+       $(REMOVE) $(SRC:.c=.s)\r
+       $(REMOVE) $(SRC:.c=.d)\r
+       $(REMOVE) $(SRC:.c=.i)\r
+       $(REMOVEDIR) .dep\r
+\r
+\r
+doxygen:\r
+       @echo Generating Project Documentation...\r
+       @doxygen Doxygen.conf\r
+       @echo Documentation Generation Complete.\r
+\r
+clean_doxygen:\r
+       rm -rf Documentation\r
+\r
+# Create object files directory\r
+$(shell mkdir $(OBJDIR) 2>/dev/null)\r
+\r
+\r
+# Include the dependency files.\r
+-include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)\r
+\r
+\r
+# Listing of phony targets.\r
+.PHONY : all checkhooks checklibmode checkboard   \\r
+begin finish end sizebefore sizeafter gccversion  \\r
+build elf hex eep lss sym coff extcoff clean      \\r
+clean_list clean_binary program debug gdb-config  \\r
+doxygen dfu flip flip-ee dfu-ee
\ No newline at end of file
diff --git a/Demos/Device/LowLevel/Keyboard/Descriptors.c b/Demos/Device/LowLevel/Keyboard/Descriptors.c
new file mode 100644 (file)
index 0000000..ddd19fc
--- /dev/null
@@ -0,0 +1,267 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Denver Gingerich (denver [at] ossguy [dot] com)\r
+      Based on code by Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+         \r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  USB Device Descriptors, for library use when in USB device mode. Descriptors are special \r
+ *  computer-readable structures which the host requests upon device enumeration, to determine\r
+ *  the device's capabilities and functions.  \r
+ */\r
+\r
+#include "Descriptors.h"\r
+\r
+/** HID class report descriptor. This is a special descriptor constructed with values from the\r
+ *  USBIF HID class specification to describe the reports and capabilities of the HID device. This\r
+ *  descriptor is parsed by the host and its contents used to determine what data (and in what encoding)\r
+ *  the device will send, and what it may be sent back from the host. Refer to the HID specification for\r
+ *  more details on HID report descriptors.\r
+ */\r
+USB_Descriptor_HIDReport_Datatype_t PROGMEM KeyboardReport[] =\r
+{\r
+       0x05, 0x01,          /* Usage Page (Generic Desktop)                    */\r
+       0x09, 0x06,          /* Usage (Keyboard)                                */\r
+       0xa1, 0x01,          /* Collection (Application)                        */\r
+       0x75, 0x01,          /*   Report Size (1)                               */\r
+       0x95, 0x08,          /*   Report Count (8)                              */\r
+       0x05, 0x07,          /*   Usage Page (Key Codes)                        */\r
+       0x19, 0xe0,          /*   Usage Minimum (Keyboard LeftControl)          */\r
+       0x29, 0xe7,          /*   Usage Maximum (Keyboard Right GUI)            */\r
+       0x15, 0x00,          /*   Logical Minimum (0)                           */\r
+       0x25, 0x01,          /*   Logical Maximum (1)                           */\r
+       0x81, 0x02,          /*   Input (Data, Variable, Absolute)              */\r
+       0x95, 0x01,          /*   Report Count (1)                              */\r
+       0x75, 0x08,          /*   Report Size (8)                               */\r
+       0x81, 0x03,          /*   Input (Const, Variable, Absolute)             */\r
+       0x95, 0x05,          /*   Report Count (5)                              */\r
+       0x75, 0x01,          /*   Report Size (1)                               */\r
+       0x05, 0x08,          /*   Usage Page (LEDs)                             */\r
+       0x19, 0x01,          /*   Usage Minimum (Num Lock)                      */\r
+       0x29, 0x05,          /*   Usage Maximum (Kana)                          */\r
+       0x91, 0x02,          /*   Output (Data, Variable, Absolute)             */\r
+       0x95, 0x01,          /*   Report Count (1)                              */\r
+       0x75, 0x03,          /*   Report Size (3)                               */\r
+       0x91, 0x03,          /*   Output (Const, Variable, Absolute)            */\r
+       0x95, 0x06,          /*   Report Count (6)                              */\r
+       0x75, 0x08,          /*   Report Size (8)                               */\r
+       0x15, 0x00,          /*   Logical Minimum (0)                           */\r
+       0x25, 0x65,          /*   Logical Maximum (101)                         */\r
+       0x05, 0x07,          /*   Usage Page (Keyboard)                         */\r
+       0x19, 0x00,          /*   Usage Minimum (Reserved (no event indicated)) */\r
+       0x29, 0x65,          /*   Usage Maximum (Keyboard Application)          */\r
+       0x81, 0x00,          /*   Input (Data, Array, Absolute)                 */\r
+       0xc0                 /* End Collection                                  */\r
+};\r
+\r
+/** Device descriptor structure. This descriptor, located in FLASH memory, describes the overall\r
+ *  device characteristics, including the supported USB version, control endpoint size and the\r
+ *  number of device configurations. The descriptor is read out by the USB host when the enumeration\r
+ *  process begins.\r
+ */\r
+USB_Descriptor_Device_t PROGMEM DeviceDescriptor =\r
+{\r
+       .Header                 = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device},\r
+               \r
+       .USBSpecification       = VERSION_BCD(01.10),\r
+       .Class                  = 0x00,\r
+       .SubClass               = 0x00,\r
+       .Protocol               = 0x00,\r
+                               \r
+       .Endpoint0Size          = FIXED_CONTROL_ENDPOINT_SIZE,\r
+               \r
+       .VendorID               = 0x03EB,\r
+       .ProductID              = 0x2042,\r
+       .ReleaseNumber          = 0x0000,\r
+               \r
+       .ManufacturerStrIndex   = 0x01,\r
+       .ProductStrIndex        = 0x02,\r
+       .SerialNumStrIndex      = NO_DESCRIPTOR,\r
+               \r
+       .NumberOfConfigurations = 1\r
+};\r
+\r
+/** Configuration descriptor structure. This descriptor, located in FLASH memory, describes the usage\r
+ *  of the device in one of its supported configurations, including information about any device interfaces\r
+ *  and endpoints. The descriptor is read out by the USB host during the enumeration process when selecting\r
+ *  a configuration so that the host may correctly communicate with the USB device.\r
+ */\r
+USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =\r
+{\r
+       .Config = \r
+               {\r
+                       .Header                 = {.Size = sizeof(USB_Descriptor_Configuration_Header_t), .Type = DTYPE_Configuration},\r
+\r
+                       .TotalConfigurationSize = sizeof(USB_Descriptor_Configuration_t),\r
+                       .TotalInterfaces        = 1,\r
+                               \r
+                       .ConfigurationNumber    = 1,\r
+                       .ConfigurationStrIndex  = NO_DESCRIPTOR,\r
+                               \r
+                       .ConfigAttributes       = (USB_CONFIG_ATTR_BUSPOWERED | USB_CONFIG_ATTR_SELFPOWERED),\r
+                       \r
+                       .MaxPowerConsumption    = USB_CONFIG_POWER_MA(100)\r
+               },\r
+               \r
+       .Interface = \r
+               {\r
+                       .Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},\r
+\r
+                       .InterfaceNumber        = 0x00,\r
+                       .AlternateSetting       = 0x00,\r
+                       \r
+                       .TotalEndpoints         = 2,\r
+                               \r
+                       .Class                  = 0x03,\r
+                       .SubClass               = 0x01,\r
+                       .Protocol               = 0x01,\r
+                               \r
+                       .InterfaceStrIndex      = NO_DESCRIPTOR\r
+               },\r
+\r
+       .KeyboardHID = \r
+               {  \r
+                       .Header                 = {.Size = sizeof(USB_Descriptor_HID_t), .Type = DTYPE_HID},\r
+                       \r
+                       .HIDSpec                = VERSION_BCD(01.11),\r
+                       .CountryCode            = 0x00,\r
+                       .TotalReportDescriptors = 1,\r
+                       .HIDReportType          = DTYPE_Report,\r
+                       .HIDReportLength        = sizeof(KeyboardReport)\r
+               },\r
+               \r
+       .KeyboardEndpoint = \r
+               {\r
+                       .Header                 = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},\r
+\r
+                       .EndpointAddress        = (ENDPOINT_DESCRIPTOR_DIR_IN | KEYBOARD_EPNUM),\r
+                       .Attributes             = EP_TYPE_INTERRUPT,\r
+                       .EndpointSize           = KEYBOARD_EPSIZE,\r
+                       .PollingIntervalMS      = 0x04\r
+               },\r
+\r
+       .KeyboardLEDsEndpoint = \r
+               {\r
+                       .Header                 = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},\r
+\r
+                       .EndpointAddress        = (ENDPOINT_DESCRIPTOR_DIR_OUT | KEYBOARD_LEDS_EPNUM),\r
+                       .Attributes             = EP_TYPE_INTERRUPT,\r
+                       .EndpointSize           = KEYBOARD_EPSIZE,\r
+                       .PollingIntervalMS      = 0x04\r
+               }\r
+};\r
+\r
+/** Language descriptor structure. This descriptor, located in FLASH memory, is returned when the host requests\r
+ *  the string descriptor with index 0 (the first index). It is actually an array of 16-bit integers, which indicate\r
+ *  via the language ID table available at USB.org what languages the device supports for its string descriptors.\r
+ */\r
+USB_Descriptor_String_t PROGMEM LanguageString =\r
+{\r
+       .Header                 = {.Size = USB_STRING_LEN(1), .Type = DTYPE_String},\r
+               \r
+       .UnicodeString          = {LANGUAGE_ID_ENG}\r
+};\r
+\r
+/** Manufacturer descriptor string. This is a Unicode string containing the manufacturer's details in human readable\r
+ *  form, and is read out upon request by the host when the appropriate string ID is requested, listed in the Device\r
+ *  Descriptor.\r
+ */\r
+USB_Descriptor_String_t PROGMEM ManufacturerString =\r
+{\r
+       .Header                 = {.Size = USB_STRING_LEN(16), .Type = DTYPE_String},\r
+               \r
+       .UnicodeString          = L"Denver Gingerich"\r
+};\r
+\r
+/** Product descriptor string. This is a Unicode string containing the product's details in human readable form,\r
+ *  and is read out upon request by the host when the appropriate string ID is requested, listed in the Device\r
+ *  Descriptor.\r
+ */\r
+USB_Descriptor_String_t PROGMEM ProductString =\r
+{\r
+       .Header                 = {.Size = USB_STRING_LEN(18), .Type = DTYPE_String},\r
+               \r
+       .UnicodeString          = L"LUFA Keyboard Demo"\r
+};\r
+\r
+/** This function is called by the library when in device mode, and must be overridden (see library "USB Descriptors"\r
+ *  documentation) by the application code so that the address and size of a requested descriptor can be given\r
+ *  to the USB library. When the device receives a Get Descriptor request on the control endpoint, this function\r
+ *  is called so that the descriptor details can be passed back and the appropriate descriptor sent back to the\r
+ *  USB host.\r
+ */\r
+uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
+{\r
+       const uint8_t  DescriptorType   = (wValue >> 8);\r
+       const uint8_t  DescriptorNumber = (wValue & 0xFF);\r
+\r
+       void*    Address = NULL;\r
+       uint16_t Size    = NO_DESCRIPTOR;\r
+\r
+       switch (DescriptorType)\r
+       {\r
+               case DTYPE_Device: \r
+                       Address = (void*)&DeviceDescriptor;\r
+                       Size    = sizeof(USB_Descriptor_Device_t);\r
+                       break;\r
+               case DTYPE_Configuration: \r
+                       Address = (void*)&ConfigurationDescriptor;\r
+                       Size    = sizeof(USB_Descriptor_Configuration_t);\r
+                       break;\r
+               case DTYPE_String: \r
+                       switch (DescriptorNumber)\r
+                       {\r
+                               case 0x00: \r
+                                       Address = (void*)&LanguageString;\r
+                                       Size    = pgm_read_byte(&LanguageString.Header.Size);\r
+                                       break;\r
+                               case 0x01: \r
+                                       Address = (void*)&ManufacturerString;\r
+                                       Size    = pgm_read_byte(&ManufacturerString.Header.Size);\r
+                                       break;\r
+                               case 0x02: \r
+                                       Address = (void*)&ProductString;\r
+                                       Size    = pgm_read_byte(&ProductString.Header.Size);\r
+                                       break;\r
+                       }\r
+                       \r
+                       break;\r
+               case DTYPE_HID: \r
+                       Address = (void*)&ConfigurationDescriptor.KeyboardHID;\r
+                       Size    = sizeof(USB_Descriptor_HID_t);\r
+                       break;\r
+               case DTYPE_Report: \r
+                       Address = (void*)&KeyboardReport;\r
+                       Size    = sizeof(KeyboardReport);\r
+                       break;\r
+       }\r
+       \r
+       *DescriptorAddress = Address;\r
+       return Size;\r
+}\r
diff --git a/Demos/Device/LowLevel/Keyboard/Descriptors.h b/Demos/Device/LowLevel/Keyboard/Descriptors.h
new file mode 100644 (file)
index 0000000..92eb7b8
--- /dev/null
@@ -0,0 +1,98 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Denver Gingerich (denver [at] ossguy [dot] com)\r
+      Based on code by Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+         \r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  Header file for Descriptors.c.\r
+ */\r
+\r
+#ifndef _DESCRIPTORS_H_\r
+#define _DESCRIPTORS_H_\r
+\r
+       /* Includes: */\r
+               #include <LUFA/Drivers/USB/USB.h>\r
+\r
+               #include <avr/pgmspace.h>\r
+\r
+       /* Type Defines: */\r
+               /** Type define for the HID class specific HID descriptor, to describe the HID device's specifications. Refer to the HID\r
+                *  specification for details on the structure elements.\r
+                */     \r
+               typedef struct\r
+               {\r
+                       USB_Descriptor_Header_t Header;\r
+                               \r
+                       uint16_t                HIDSpec;\r
+                       uint8_t                 CountryCode;\r
+               \r
+                       uint8_t                 TotalReportDescriptors;\r
+\r
+                       uint8_t                 HIDReportType;\r
+                       uint16_t                HIDReportLength;\r
+               } USB_Descriptor_HID_t;\r
+               \r
+               /** Type define for the data type used to store HID report descriptor elements. */\r
+               typedef uint8_t USB_Descriptor_HIDReport_Datatype_t;\r
+\r
+               /** Type define for the device configuration descriptor structure. This must be defined in the\r
+                *  application code, as the configuration descriptor contains several sub-descriptors which\r
+                *  vary between devices, and which describe the device's usage to the host.\r
+                */\r
+               typedef struct\r
+               {\r
+                       USB_Descriptor_Configuration_Header_t Config;\r
+                       USB_Descriptor_Interface_t            Interface;\r
+                       USB_Descriptor_HID_t                  KeyboardHID;\r
+               USB_Descriptor_Endpoint_t             KeyboardEndpoint;\r
+               USB_Descriptor_Endpoint_t             KeyboardLEDsEndpoint;\r
+               } USB_Descriptor_Configuration_t;\r
+                                       \r
+       /* Macros: */\r
+               /** Endpoint number of the Keyboard HID reporting IN endpoint. */\r
+               #define KEYBOARD_EPNUM               1\r
+\r
+               /** Endpoint number of the Keyboard HID reporting OUT endpoint. */\r
+               #define KEYBOARD_LEDS_EPNUM          2\r
+               \r
+               /** Size in bytes of the Keyboard HID reporting IN and OUT endpoints. */                \r
+               #define KEYBOARD_EPSIZE              8\r
+\r
+               /** Descriptor header type value, to indicate a HID class HID descriptor. */\r
+               #define DTYPE_HID                 0x21\r
+               \r
+               /** Descriptor header type value, to indicate a HID class HID report descriptor. */\r
+               #define DTYPE_Report              0x22\r
+\r
+       /* Function Prototypes: */\r
+               uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
+                                                                                       ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);\r
+\r
+#endif\r
diff --git a/Demos/Device/LowLevel/Keyboard/Doxygen.conf b/Demos/Device/LowLevel/Keyboard/Doxygen.conf
new file mode 100644 (file)
index 0000000..79a300a
--- /dev/null
@@ -0,0 +1,1485 @@
+# Doxyfile 1.5.7.1\r
+\r
+# This file describes the settings to be used by the documentation system\r
+# doxygen (www.doxygen.org) for a project\r
+#\r
+# All text after a hash (#) is considered a comment and will be ignored\r
+# The format is:\r
+#       TAG = value [value, ...]\r
+# For lists items can also be appended using:\r
+#       TAG += value [value, ...]\r
+# Values that contain spaces should be placed between quotes (" ")\r
+\r
+#---------------------------------------------------------------------------\r
+# Project related configuration options\r
+#---------------------------------------------------------------------------\r
+\r
+# This tag specifies the encoding used for all characters in the config file \r
+# that follow. The default is UTF-8 which is also the encoding used for all \r
+# text before the first occurrence of this tag. Doxygen uses libiconv (or the \r
+# iconv built into libc) for the transcoding. See \r
+# http://www.gnu.org/software/libiconv for the list of possible encodings.\r
+\r
+DOXYFILE_ENCODING      = UTF-8\r
+\r
+# The PROJECT_NAME tag is a single word (or a sequence of words surrounded \r
+# by quotes) that should identify the project.\r
+\r
+PROJECT_NAME           = "LUFA Library - Keyboard Device Demo"\r
+\r
+# The PROJECT_NUMBER tag can be used to enter a project or revision number. \r
+# This could be handy for archiving the generated documentation or \r
+# if some version control system is used.\r
+\r
+PROJECT_NUMBER         = 0.0.0\r
+\r
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) \r
+# base path where the generated documentation will be put. \r
+# If a relative path is entered, it will be relative to the location \r
+# where doxygen was started. If left blank the current directory will be used.\r
+\r
+OUTPUT_DIRECTORY       = ./Documentation/\r
+\r
+# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create \r
+# 4096 sub-directories (in 2 levels) under the output directory of each output \r
+# format and will distribute the generated files over these directories. \r
+# Enabling this option can be useful when feeding doxygen a huge amount of \r
+# source files, where putting all generated files in the same directory would \r
+# otherwise cause performance problems for the file system.\r
+\r
+CREATE_SUBDIRS         = YES\r
+\r
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all \r
+# documentation generated by doxygen is written. Doxygen will use this \r
+# information to generate all constant output in the proper language. \r
+# The default language is English, other supported languages are: \r
+# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, \r
+# Croatian, Czech, Danish, Dutch, Farsi, Finnish, French, German, Greek, \r
+# Hungarian, Italian, Japanese, Japanese-en (Japanese with English messages), \r
+# Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, Polish, \r
+# Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, Slovene, \r
+# Spanish, Swedish, and Ukrainian.\r
+\r
+OUTPUT_LANGUAGE        = English\r
+\r
+# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will \r
+# include brief member descriptions after the members that are listed in \r
+# the file and class documentation (similar to JavaDoc). \r
+# Set to NO to disable this.\r
+\r
+BRIEF_MEMBER_DESC      = YES\r
+\r
+# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend \r
+# the brief description of a member or function before the detailed description. \r
+# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the \r
+# brief descriptions will be completely suppressed.\r
+\r
+REPEAT_BRIEF           = YES\r
+\r
+# This tag implements a quasi-intelligent brief description abbreviator \r
+# that is used to form the text in various listings. Each string \r
+# in this list, if found as the leading text of the brief description, will be \r
+# stripped from the text and the result after processing the whole list, is \r
+# used as the annotated text. Otherwise, the brief description is used as-is. \r
+# If left blank, the following values are used ("$name" is automatically \r
+# replaced with the name of the entity): "The $name class" "The $name widget" \r
+# "The $name file" "is" "provides" "specifies" "contains" \r
+# "represents" "a" "an" "the"\r
+\r
+ABBREVIATE_BRIEF       = "The $name class" \\r
+                         "The $name widget" \\r
+                         "The $name file" \\r
+                         is \\r
+                         provides \\r
+                         specifies \\r
+                         contains \\r
+                         represents \\r
+                         a \\r
+                         an \\r
+                         the\r
+\r
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then \r
+# Doxygen will generate a detailed section even if there is only a brief \r
+# description.\r
+\r
+ALWAYS_DETAILED_SEC    = NO\r
+\r
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all \r
+# inherited members of a class in the documentation of that class as if those \r
+# members were ordinary class members. Constructors, destructors and assignment \r
+# operators of the base classes will not be shown.\r
+\r
+INLINE_INHERITED_MEMB  = NO\r
+\r
+# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full \r
+# path before files name in the file list and in the header files. If set \r
+# to NO the shortest path that makes the file name unique will be used.\r
+\r
+FULL_PATH_NAMES        = YES\r
+\r
+# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag \r
+# can be used to strip a user-defined part of the path. Stripping is \r
+# only done if one of the specified strings matches the left-hand part of \r
+# the path. The tag can be used to show relative paths in the file list. \r
+# If left blank the directory from which doxygen is run is used as the \r
+# path to strip.\r
+\r
+STRIP_FROM_PATH        = \r
+\r
+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of \r
+# the path mentioned in the documentation of a class, which tells \r
+# the reader which header file to include in order to use a class. \r
+# If left blank only the name of the header file containing the class \r
+# definition is used. Otherwise one should specify the include paths that \r
+# are normally passed to the compiler using the -I flag.\r
+\r
+STRIP_FROM_INC_PATH    = \r
+\r
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter \r
+# (but less readable) file names. This can be useful is your file systems \r
+# doesn't support long names like on DOS, Mac, or CD-ROM.\r
+\r
+SHORT_NAMES            = YES\r
+\r
+# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen \r
+# will interpret the first line (until the first dot) of a JavaDoc-style \r
+# comment as the brief description. If set to NO, the JavaDoc \r
+# comments will behave just like regular Qt-style comments \r
+# (thus requiring an explicit @brief command for a brief description.)\r
+\r
+JAVADOC_AUTOBRIEF      = NO\r
+\r
+# If the QT_AUTOBRIEF tag is set to YES then Doxygen will \r
+# interpret the first line (until the first dot) of a Qt-style \r
+# comment as the brief description. If set to NO, the comments \r
+# will behave just like regular Qt-style comments (thus requiring \r
+# an explicit \brief command for a brief description.)\r
+\r
+QT_AUTOBRIEF           = NO\r
+\r
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen \r
+# treat a multi-line C++ special comment block (i.e. a block of //! or /// \r
+# comments) as a brief description. This used to be the default behaviour. \r
+# The new default is to treat a multi-line C++ comment block as a detailed \r
+# description. Set this tag to YES if you prefer the old behaviour instead.\r
+\r
+MULTILINE_CPP_IS_BRIEF = NO\r
+\r
+# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented \r
+# member inherits the documentation from any documented member that it \r
+# re-implements.\r
+\r
+INHERIT_DOCS           = YES\r
+\r
+# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce \r
+# a new page for each member. If set to NO, the documentation of a member will \r
+# be part of the file/class/namespace that contains it.\r
+\r
+SEPARATE_MEMBER_PAGES  = NO\r
+\r
+# The TAB_SIZE tag can be used to set the number of spaces in a tab. \r
+# Doxygen uses this value to replace tabs by spaces in code fragments.\r
+\r
+TAB_SIZE               = 4\r
+\r
+# This tag can be used to specify a number of aliases that acts \r
+# as commands in the documentation. An alias has the form "name=value". \r
+# For example adding "sideeffect=\par Side Effects:\n" will allow you to \r
+# put the command \sideeffect (or @sideeffect) in the documentation, which \r
+# will result in a user-defined paragraph with heading "Side Effects:". \r
+# You can put \n's in the value part of an alias to insert newlines.\r
+\r
+ALIASES                = \r
+\r
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C \r
+# sources only. Doxygen will then generate output that is more tailored for C. \r
+# For instance, some of the names that are used will be different. The list \r
+# of all members will be omitted, etc.\r
+\r
+OPTIMIZE_OUTPUT_FOR_C  = YES\r
+\r
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java \r
+# sources only. Doxygen will then generate output that is more tailored for \r
+# Java. For instance, namespaces will be presented as packages, qualified \r
+# scopes will look different, etc.\r
+\r
+OPTIMIZE_OUTPUT_JAVA   = NO\r
+\r
+# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran \r
+# sources only. Doxygen will then generate output that is more tailored for \r
+# Fortran.\r
+\r
+OPTIMIZE_FOR_FORTRAN   = NO\r
+\r
+# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL \r
+# sources. Doxygen will then generate output that is tailored for \r
+# VHDL.\r
+\r
+OPTIMIZE_OUTPUT_VHDL   = NO\r
+\r
+# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want \r
+# to include (a tag file for) the STL sources as input, then you should \r
+# set this tag to YES in order to let doxygen match functions declarations and \r
+# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. \r
+# func(std::string) {}). This also make the inheritance and collaboration \r
+# diagrams that involve STL classes more complete and accurate.\r
+\r
+BUILTIN_STL_SUPPORT    = NO\r
+\r
+# If you use Microsoft's C++/CLI language, you should set this option to YES to\r
+# enable parsing support.\r
+\r
+CPP_CLI_SUPPORT        = NO\r
+\r
+# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. \r
+# Doxygen will parse them like normal C++ but will assume all classes use public \r
+# instead of private inheritance when no explicit protection keyword is present.\r
+\r
+SIP_SUPPORT            = NO\r
+\r
+# For Microsoft's IDL there are propget and propput attributes to indicate getter \r
+# and setter methods for a property. Setting this option to YES (the default) \r
+# will make doxygen to replace the get and set methods by a property in the \r
+# documentation. This will only work if the methods are indeed getting or \r
+# setting a simple type. If this is not the case, or you want to show the \r
+# methods anyway, you should set this option to NO.\r
+\r
+IDL_PROPERTY_SUPPORT   = YES\r
+\r
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC \r
+# tag is set to YES, then doxygen will reuse the documentation of the first \r
+# member in the group (if any) for the other members of the group. By default \r
+# all members of a group must be documented explicitly.\r
+\r
+DISTRIBUTE_GROUP_DOC   = NO\r
+\r
+# Set the SUBGROUPING tag to YES (the default) to allow class member groups of \r
+# the same type (for instance a group of public functions) to be put as a \r
+# subgroup of that type (e.g. under the Public Functions section). Set it to \r
+# NO to prevent subgrouping. Alternatively, this can be done per class using \r
+# the \nosubgrouping command.\r
+\r
+SUBGROUPING            = YES\r
+\r
+# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum \r
+# is documented as struct, union, or enum with the name of the typedef. So \r
+# typedef struct TypeS {} TypeT, will appear in the documentation as a struct \r
+# with name TypeT. When disabled the typedef will appear as a member of a file, \r
+# namespace, or class. And the struct will be named TypeS. This can typically \r
+# be useful for C code in case the coding convention dictates that all compound \r
+# types are typedef'ed and only the typedef is referenced, never the tag name.\r
+\r
+TYPEDEF_HIDES_STRUCT   = NO\r
+\r
+# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to \r
+# determine which symbols to keep in memory and which to flush to disk.\r
+# When the cache is full, less often used symbols will be written to disk.\r
+# For small to medium size projects (<1000 input files) the default value is \r
+# probably good enough. For larger projects a too small cache size can cause \r
+# doxygen to be busy swapping symbols to and from disk most of the time \r
+# causing a significant performance penality. \r
+# If the system has enough physical memory increasing the cache will improve the \r
+# performance by keeping more symbols in memory. Note that the value works on \r
+# a logarithmic scale so increasing the size by one will rougly double the \r
+# memory usage. The cache size is given by this formula: \r
+# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, \r
+# corresponding to a cache size of 2^16 = 65536 symbols\r
+\r
+SYMBOL_CACHE_SIZE      = 0\r
+\r
+#---------------------------------------------------------------------------\r
+# Build related configuration options\r
+#---------------------------------------------------------------------------\r
+\r
+# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in \r
+# documentation are documented, even if no documentation was available. \r
+# Private class members and static file members will be hidden unless \r
+# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES\r
+\r
+EXTRACT_ALL            = YES\r
+\r
+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class \r
+# will be included in the documentation.\r
+\r
+EXTRACT_PRIVATE        = YES\r
+\r
+# If the EXTRACT_STATIC tag is set to YES all static members of a file \r
+# will be included in the documentation.\r
+\r
+EXTRACT_STATIC         = YES\r
+\r
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) \r
+# defined locally in source files will be included in the documentation. \r
+# If set to NO only classes defined in header files are included.\r
+\r
+EXTRACT_LOCAL_CLASSES  = YES\r
+\r
+# This flag is only useful for Objective-C code. When set to YES local \r
+# methods, which are defined in the implementation section but not in \r
+# the interface are included in the documentation. \r
+# If set to NO (the default) only methods in the interface are included.\r
+\r
+EXTRACT_LOCAL_METHODS  = NO\r
+\r
+# If this flag is set to YES, the members of anonymous namespaces will be \r
+# extracted and appear in the documentation as a namespace called \r
+# 'anonymous_namespace{file}', where file will be replaced with the base \r
+# name of the file that contains the anonymous namespace. By default \r
+# anonymous namespace are hidden.\r
+\r
+EXTRACT_ANON_NSPACES   = NO\r
+\r
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all \r
+# undocumented members of documented classes, files or namespaces. \r
+# If set to NO (the default) these members will be included in the \r
+# various overviews, but no documentation section is generated. \r
+# This option has no effect if EXTRACT_ALL is enabled.\r
+\r
+HIDE_UNDOC_MEMBERS     = NO\r
+\r
+# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all \r
+# undocumented classes that are normally visible in the class hierarchy. \r
+# If set to NO (the default) these classes will be included in the various \r
+# overviews. This option has no effect if EXTRACT_ALL is enabled.\r
+\r
+HIDE_UNDOC_CLASSES     = NO\r
+\r
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all \r
+# friend (class|struct|union) declarations. \r
+# If set to NO (the default) these declarations will be included in the \r
+# documentation.\r
+\r
+HIDE_FRIEND_COMPOUNDS  = NO\r
+\r
+# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any \r
+# documentation blocks found inside the body of a function. \r
+# If set to NO (the default) these blocks will be appended to the \r
+# function's detailed documentation block.\r
+\r
+HIDE_IN_BODY_DOCS      = NO\r
+\r
+# The INTERNAL_DOCS tag determines if documentation \r
+# that is typed after a \internal command is included. If the tag is set \r
+# to NO (the default) then the documentation will be excluded. \r
+# Set it to YES to include the internal documentation.\r
+\r
+INTERNAL_DOCS          = NO\r
+\r
+# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate \r
+# file names in lower-case letters. If set to YES upper-case letters are also \r
+# allowed. This is useful if you have classes or files whose names only differ \r
+# in case and if your file system supports case sensitive file names. Windows \r
+# and Mac users are advised to set this option to NO.\r
+\r
+CASE_SENSE_NAMES       = NO\r
+\r
+# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen \r
+# will show members with their full class and namespace scopes in the \r
+# documentation. If set to YES the scope will be hidden.\r
+\r
+HIDE_SCOPE_NAMES       = NO\r
+\r
+# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen \r
+# will put a list of the files that are included by a file in the documentation \r
+# of that file.\r
+\r
+SHOW_INCLUDE_FILES     = YES\r
+\r
+# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] \r
+# is inserted in the documentation for inline members.\r
+\r
+INLINE_INFO            = YES\r
+\r
+# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen \r
+# will sort the (detailed) documentation of file and class members \r
+# alphabetically by member name. If set to NO the members will appear in \r
+# declaration order.\r
+\r
+SORT_MEMBER_DOCS       = YES\r
+\r
+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the \r
+# brief documentation of file, namespace and class members alphabetically \r
+# by member name. If set to NO (the default) the members will appear in \r
+# declaration order.\r
+\r
+SORT_BRIEF_DOCS        = NO\r
+\r
+# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the \r
+# hierarchy of group names into alphabetical order. If set to NO (the default) \r
+# the group names will appear in their defined order.\r
+\r
+SORT_GROUP_NAMES       = NO\r
+\r
+# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be \r
+# sorted by fully-qualified names, including namespaces. If set to \r
+# NO (the default), the class list will be sorted only by class name, \r
+# not including the namespace part. \r
+# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.\r
+# Note: This option applies only to the class list, not to the \r
+# alphabetical list.\r
+\r
+SORT_BY_SCOPE_NAME     = NO\r
+\r
+# The GENERATE_TODOLIST tag can be used to enable (YES) or \r
+# disable (NO) the todo list. This list is created by putting \todo \r
+# commands in the documentation.\r
+\r
+GENERATE_TODOLIST      = NO\r
+\r
+# The GENERATE_TESTLIST tag can be used to enable (YES) or \r
+# disable (NO) the test list. This list is created by putting \test \r
+# commands in the documentation.\r
+\r
+GENERATE_TESTLIST      = NO\r
+\r
+# The GENERATE_BUGLIST tag can be used to enable (YES) or \r
+# disable (NO) the bug list. This list is created by putting \bug \r
+# commands in the documentation.\r
+\r
+GENERATE_BUGLIST       = NO\r
+\r
+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or \r
+# disable (NO) the deprecated list. This list is created by putting \r
+# \deprecated commands in the documentation.\r
+\r
+GENERATE_DEPRECATEDLIST= YES\r
+\r
+# The ENABLED_SECTIONS tag can be used to enable conditional \r
+# documentation sections, marked by \if sectionname ... \endif.\r
+\r
+ENABLED_SECTIONS       = \r
+\r
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines \r
+# the initial value of a variable or define consists of for it to appear in \r
+# the documentation. If the initializer consists of more lines than specified \r
+# here it will be hidden. Use a value of 0 to hide initializers completely. \r
+# The appearance of the initializer of individual variables and defines in the \r
+# documentation can be controlled using \showinitializer or \hideinitializer \r
+# command in the documentation regardless of this setting.\r
+\r
+MAX_INITIALIZER_LINES  = 30\r
+\r
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated \r
+# at the bottom of the documentation of classes and structs. If set to YES the \r
+# list will mention the files that were used to generate the documentation.\r
+\r
+SHOW_USED_FILES        = YES\r
+\r
+# If the sources in your project are distributed over multiple directories \r
+# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy \r
+# in the documentation. The default is NO.\r
+\r
+SHOW_DIRECTORIES       = YES\r
+\r
+# Set the SHOW_FILES tag to NO to disable the generation of the Files page.\r
+# This will remove the Files entry from the Quick Index and from the \r
+# Folder Tree View (if specified). The default is YES.\r
+\r
+SHOW_FILES             = YES\r
+\r
+# Set the SHOW_NAMESPACES tag to NO to disable the generation of the \r
+# Namespaces page.  This will remove the Namespaces entry from the Quick Index\r
+# and from the Folder Tree View (if specified). The default is YES.\r
+\r
+SHOW_NAMESPACES        = YES\r
+\r
+# The FILE_VERSION_FILTER tag can be used to specify a program or script that \r
+# doxygen should invoke to get the current version for each file (typically from \r
+# the version control system). Doxygen will invoke the program by executing (via \r
+# popen()) the command <command> <input-file>, where <command> is the value of \r
+# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file \r
+# provided by doxygen. Whatever the program writes to standard output \r
+# is used as the file version. See the manual for examples.\r
+\r
+FILE_VERSION_FILTER    = \r
+\r
+# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by \r
+# doxygen. The layout file controls the global structure of the generated output files \r
+# in an output format independent way. The create the layout file that represents \r
+# doxygen's defaults, run doxygen with the -l option. You can optionally specify a \r
+# file name after the option, if omitted DoxygenLayout.xml will be used as the name \r
+# of the layout file.\r
+\r
+LAYOUT_FILE            = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to warning and progress messages\r
+#---------------------------------------------------------------------------\r
+\r
+# The QUIET tag can be used to turn on/off the messages that are generated \r
+# by doxygen. Possible values are YES and NO. If left blank NO is used.\r
+\r
+QUIET                  = YES\r
+\r
+# The WARNINGS tag can be used to turn on/off the warning messages that are \r
+# generated by doxygen. Possible values are YES and NO. If left blank \r
+# NO is used.\r
+\r
+WARNINGS               = YES\r
+\r
+# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings \r
+# for undocumented members. If EXTRACT_ALL is set to YES then this flag will \r
+# automatically be disabled.\r
+\r
+WARN_IF_UNDOCUMENTED   = YES\r
+\r
+# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for \r
+# potential errors in the documentation, such as not documenting some \r
+# parameters in a documented function, or documenting parameters that \r
+# don't exist or using markup commands wrongly.\r
+\r
+WARN_IF_DOC_ERROR      = YES\r
+\r
+# This WARN_NO_PARAMDOC option can be abled to get warnings for \r
+# functions that are documented, but have no documentation for their parameters \r
+# or return value. If set to NO (the default) doxygen will only warn about \r
+# wrong or incomplete parameter documentation, but not about the absence of \r
+# documentation.\r
+\r
+WARN_NO_PARAMDOC       = YES\r
+\r
+# The WARN_FORMAT tag determines the format of the warning messages that \r
+# doxygen can produce. The string should contain the $file, $line, and $text \r
+# tags, which will be replaced by the file and line number from which the \r
+# warning originated and the warning text. Optionally the format may contain \r
+# $version, which will be replaced by the version of the file (if it could \r
+# be obtained via FILE_VERSION_FILTER)\r
+\r
+WARN_FORMAT            = "$file:$line: $text"\r
+\r
+# The WARN_LOGFILE tag can be used to specify a file to which warning \r
+# and error messages should be written. If left blank the output is written \r
+# to stderr.\r
+\r
+WARN_LOGFILE           = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the input files\r
+#---------------------------------------------------------------------------\r
+\r
+# The INPUT tag can be used to specify the files and/or directories that contain \r
+# documented source files. You may enter file names like "myfile.cpp" or \r
+# directories like "/usr/src/myproject". Separate the files or directories \r
+# with spaces.\r
+\r
+INPUT                  = ./\r
+\r
+# This tag can be used to specify the character encoding of the source files \r
+# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is \r
+# also the default input encoding. Doxygen uses libiconv (or the iconv built \r
+# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for \r
+# the list of possible encodings.\r
+\r
+INPUT_ENCODING         = UTF-8\r
+\r
+# If the value of the INPUT tag contains directories, you can use the \r
+# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \r
+# and *.h) to filter out the source-files in the directories. If left \r
+# blank the following patterns are tested: \r
+# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx \r
+# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90\r
+\r
+FILE_PATTERNS          = *.h \\r
+                         *.c \\r
+                                                *.txt\r
+\r
+# The RECURSIVE tag can be used to turn specify whether or not subdirectories \r
+# should be searched for input files as well. Possible values are YES and NO. \r
+# If left blank NO is used.\r
+\r
+RECURSIVE              = YES\r
+\r
+# The EXCLUDE tag can be used to specify files and/or directories that should \r
+# excluded from the INPUT source files. This way you can easily exclude a \r
+# subdirectory from a directory tree whose root is specified with the INPUT tag.\r
+\r
+EXCLUDE                = \r
+\r
+# The EXCLUDE_SYMLINKS tag can be used select whether or not files or \r
+# directories that are symbolic links (a Unix filesystem feature) are excluded \r
+# from the input.\r
+\r
+EXCLUDE_SYMLINKS       = NO\r
+\r
+# If the value of the INPUT tag contains directories, you can use the \r
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude \r
+# certain files from those directories. Note that the wildcards are matched \r
+# against the file with absolute path, so to exclude all test directories \r
+# for example use the pattern */test/*\r
+\r
+EXCLUDE_PATTERNS       = */LowLevel/USBMode.h\r
+\r
+# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names \r
+# (namespaces, classes, functions, etc.) that should be excluded from the \r
+# output. The symbol name can be a fully qualified name, a word, or if the \r
+# wildcard * is used, a substring. Examples: ANamespace, AClass, \r
+# AClass::ANamespace, ANamespace::*Test\r
+\r
+EXCLUDE_SYMBOLS        = __*\r
+\r
+# The EXAMPLE_PATH tag can be used to specify one or more files or \r
+# directories that contain example code fragments that are included (see \r
+# the \include command).\r
+\r
+EXAMPLE_PATH           = \r
+\r
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the \r
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \r
+# and *.h) to filter out the source-files in the directories. If left \r
+# blank all files are included.\r
+\r
+EXAMPLE_PATTERNS       = *\r
+\r
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be \r
+# searched for input files to be used with the \include or \dontinclude \r
+# commands irrespective of the value of the RECURSIVE tag. \r
+# Possible values are YES and NO. If left blank NO is used.\r
+\r
+EXAMPLE_RECURSIVE      = NO\r
+\r
+# The IMAGE_PATH tag can be used to specify one or more files or \r
+# directories that contain image that are included in the documentation (see \r
+# the \image command).\r
+\r
+IMAGE_PATH             = \r
+\r
+# The INPUT_FILTER tag can be used to specify a program that doxygen should \r
+# invoke to filter for each input file. Doxygen will invoke the filter program \r
+# by executing (via popen()) the command <filter> <input-file>, where <filter> \r
+# is the value of the INPUT_FILTER tag, and <input-file> is the name of an \r
+# input file. Doxygen will then use the output that the filter program writes \r
+# to standard output.  If FILTER_PATTERNS is specified, this tag will be \r
+# ignored.\r
+\r
+INPUT_FILTER           = \r
+\r
+# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern \r
+# basis.  Doxygen will compare the file name with each pattern and apply the \r
+# filter if there is a match.  The filters are a list of the form: \r
+# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further \r
+# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER \r
+# is applied to all files.\r
+\r
+FILTER_PATTERNS        = \r
+\r
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using \r
+# INPUT_FILTER) will be used to filter the input files when producing source \r
+# files to browse (i.e. when SOURCE_BROWSER is set to YES).\r
+\r
+FILTER_SOURCE_FILES    = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to source browsing\r
+#---------------------------------------------------------------------------\r
+\r
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will \r
+# be generated. Documented entities will be cross-referenced with these sources. \r
+# Note: To get rid of all source code in the generated output, make sure also \r
+# VERBATIM_HEADERS is set to NO.\r
+\r
+SOURCE_BROWSER         = NO\r
+\r
+# Setting the INLINE_SOURCES tag to YES will include the body \r
+# of functions and classes directly in the documentation.\r
+\r
+INLINE_SOURCES         = NO\r
+\r
+# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct \r
+# doxygen to hide any special comment blocks from generated source code \r
+# fragments. Normal C and C++ comments will always remain visible.\r
+\r
+STRIP_CODE_COMMENTS    = YES\r
+\r
+# If the REFERENCED_BY_RELATION tag is set to YES \r
+# then for each documented function all documented \r
+# functions referencing it will be listed.\r
+\r
+REFERENCED_BY_RELATION = NO\r
+\r
+# If the REFERENCES_RELATION tag is set to YES \r
+# then for each documented function all documented entities \r
+# called/used by that function will be listed.\r
+\r
+REFERENCES_RELATION    = NO\r
+\r
+# If the REFERENCES_LINK_SOURCE tag is set to YES (the default)\r
+# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from\r
+# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will\r
+# link to the source code.  Otherwise they will link to the documentstion.\r
+\r
+REFERENCES_LINK_SOURCE = NO\r
+\r
+# If the USE_HTAGS tag is set to YES then the references to source code \r
+# will point to the HTML generated by the htags(1) tool instead of doxygen \r
+# built-in source browser. The htags tool is part of GNU's global source \r
+# tagging system (see http://www.gnu.org/software/global/global.html). You \r
+# will need version 4.8.6 or higher.\r
+\r
+USE_HTAGS              = NO\r
+\r
+# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen \r
+# will generate a verbatim copy of the header file for each class for \r
+# which an include is specified. Set to NO to disable this.\r
+\r
+VERBATIM_HEADERS       = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the alphabetical class index\r
+#---------------------------------------------------------------------------\r
+\r
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index \r
+# of all compounds will be generated. Enable this if the project \r
+# contains a lot of classes, structs, unions or interfaces.\r
+\r
+ALPHABETICAL_INDEX     = YES\r
+\r
+# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then \r
+# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns \r
+# in which this list will be split (can be a number in the range [1..20])\r
+\r
+COLS_IN_ALPHA_INDEX    = 5\r
+\r
+# In case all classes in a project start with a common prefix, all \r
+# classes will be put under the same header in the alphabetical index. \r
+# The IGNORE_PREFIX tag can be used to specify one or more prefixes that \r
+# should be ignored while generating the index headers.\r
+\r
+IGNORE_PREFIX          = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the HTML output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_HTML tag is set to YES (the default) Doxygen will \r
+# generate HTML output.\r
+\r
+GENERATE_HTML          = YES\r
+\r
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `html' will be used as the default path.\r
+\r
+HTML_OUTPUT            = html\r
+\r
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for \r
+# each generated HTML page (for example: .htm,.php,.asp). If it is left blank \r
+# doxygen will generate files with .html extension.\r
+\r
+HTML_FILE_EXTENSION    = .html\r
+\r
+# The HTML_HEADER tag can be used to specify a personal HTML header for \r
+# each generated HTML page. If it is left blank doxygen will generate a \r
+# standard header.\r
+\r
+HTML_HEADER            = \r
+\r
+# The HTML_FOOTER tag can be used to specify a personal HTML footer for \r
+# each generated HTML page. If it is left blank doxygen will generate a \r
+# standard footer.\r
+\r
+HTML_FOOTER            = \r
+\r
+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading \r
+# style sheet that is used by each HTML page. It can be used to \r
+# fine-tune the look of the HTML output. If the tag is left blank doxygen \r
+# will generate a default style sheet. Note that doxygen will try to copy \r
+# the style sheet file to the HTML output directory, so don't put your own \r
+# stylesheet in the HTML output directory as well, or it will be erased!\r
+\r
+HTML_STYLESHEET        = \r
+\r
+# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, \r
+# files or namespaces will be aligned in HTML using tables. If set to \r
+# NO a bullet list will be used.\r
+\r
+HTML_ALIGN_MEMBERS     = YES\r
+\r
+# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML \r
+# documentation will contain sections that can be hidden and shown after the \r
+# page has loaded. For this to work a browser that supports \r
+# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox \r
+# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari).\r
+\r
+HTML_DYNAMIC_SECTIONS  = YES\r
+\r
+# If the GENERATE_DOCSET tag is set to YES, additional index files \r
+# will be generated that can be used as input for Apple's Xcode 3 \r
+# integrated development environment, introduced with OSX 10.5 (Leopard). \r
+# To create a documentation set, doxygen will generate a Makefile in the \r
+# HTML output directory. Running make will produce the docset in that \r
+# directory and running "make install" will install the docset in \r
+# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find \r
+# it at startup. \r
+# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information.\r
+\r
+GENERATE_DOCSET        = NO\r
+\r
+# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the \r
+# feed. A documentation feed provides an umbrella under which multiple \r
+# documentation sets from a single provider (such as a company or product suite) \r
+# can be grouped.\r
+\r
+DOCSET_FEEDNAME        = "Doxygen generated docs"\r
+\r
+# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that \r
+# should uniquely identify the documentation set bundle. This should be a \r
+# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen \r
+# will append .docset to the name.\r
+\r
+DOCSET_BUNDLE_ID       = org.doxygen.Project\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, additional index files \r
+# will be generated that can be used as input for tools like the \r
+# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) \r
+# of the generated HTML documentation.\r
+\r
+GENERATE_HTMLHELP      = NO\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can \r
+# be used to specify the file name of the resulting .chm file. You \r
+# can add a path in front of the file if the result should not be \r
+# written to the html output directory.\r
+\r
+CHM_FILE               = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can \r
+# be used to specify the location (absolute path including file name) of \r
+# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run \r
+# the HTML help compiler on the generated index.hhp.\r
+\r
+HHC_LOCATION           = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag \r
+# controls if a separate .chi index file is generated (YES) or that \r
+# it should be included in the master .chm file (NO).\r
+\r
+GENERATE_CHI           = NO\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING\r
+# is used to encode HtmlHelp index (hhk), content (hhc) and project file\r
+# content.\r
+\r
+CHM_INDEX_ENCODING     = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag \r
+# controls whether a binary table of contents is generated (YES) or a \r
+# normal table of contents (NO) in the .chm file.\r
+\r
+BINARY_TOC             = NO\r
+\r
+# The TOC_EXPAND flag can be set to YES to add extra items for group members \r
+# to the contents of the HTML help documentation and to the tree view.\r
+\r
+TOC_EXPAND             = YES\r
+\r
+# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER \r
+# are set, an additional index file will be generated that can be used as input for \r
+# Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated \r
+# HTML documentation.\r
+\r
+GENERATE_QHP           = NO\r
+\r
+# If the QHG_LOCATION tag is specified, the QCH_FILE tag can \r
+# be used to specify the file name of the resulting .qch file. \r
+# The path specified is relative to the HTML output folder.\r
+\r
+QCH_FILE               = \r
+\r
+# The QHP_NAMESPACE tag specifies the namespace to use when generating \r
+# Qt Help Project output. For more information please see \r
+# <a href="http://doc.trolltech.com/qthelpproject.html#namespace">Qt Help Project / Namespace</a>.\r
+\r
+QHP_NAMESPACE          = org.doxygen.Project\r
+\r
+# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating \r
+# Qt Help Project output. For more information please see \r
+# <a href="http://doc.trolltech.com/qthelpproject.html#virtual-folders">Qt Help Project / Virtual Folders</a>.\r
+\r
+QHP_VIRTUAL_FOLDER     = doc\r
+\r
+# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can \r
+# be used to specify the location of Qt's qhelpgenerator. \r
+# If non-empty doxygen will try to run qhelpgenerator on the generated \r
+# .qhp file .\r
+\r
+QHG_LOCATION           = \r
+\r
+# The DISABLE_INDEX tag can be used to turn on/off the condensed index at \r
+# top of each HTML page. The value NO (the default) enables the index and \r
+# the value YES disables it.\r
+\r
+DISABLE_INDEX          = NO\r
+\r
+# This tag can be used to set the number of enum values (range [1..20]) \r
+# that doxygen will group on one line in the generated HTML documentation.\r
+\r
+ENUM_VALUES_PER_LINE   = 1\r
+\r
+# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index\r
+# structure should be generated to display hierarchical information.\r
+# If the tag value is set to FRAME, a side panel will be generated\r
+# containing a tree-like index structure (just like the one that \r
+# is generated for HTML Help). For this to work a browser that supports \r
+# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, \r
+# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are \r
+# probably better off using the HTML help feature. Other possible values \r
+# for this tag are: HIERARCHIES, which will generate the Groups, Directories,\r
+# and Class Hierarchy pages using a tree view instead of an ordered list;\r
+# ALL, which combines the behavior of FRAME and HIERARCHIES; and NONE, which\r
+# disables this behavior completely. For backwards compatibility with previous\r
+# releases of Doxygen, the values YES and NO are equivalent to FRAME and NONE\r
+# respectively.\r
+\r
+GENERATE_TREEVIEW      = YES\r
+\r
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be \r
+# used to set the initial width (in pixels) of the frame in which the tree \r
+# is shown.\r
+\r
+TREEVIEW_WIDTH         = 250\r
+\r
+# Use this tag to change the font size of Latex formulas included \r
+# as images in the HTML documentation. The default is 10. Note that \r
+# when you change the font size after a successful doxygen run you need \r
+# to manually remove any form_*.png images from the HTML output directory \r
+# to force them to be regenerated.\r
+\r
+FORMULA_FONTSIZE       = 10\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the LaTeX output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will \r
+# generate Latex output.\r
+\r
+GENERATE_LATEX         = NO\r
+\r
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `latex' will be used as the default path.\r
+\r
+LATEX_OUTPUT           = latex\r
+\r
+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be \r
+# invoked. If left blank `latex' will be used as the default command name.\r
+\r
+LATEX_CMD_NAME         = latex\r
+\r
+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to \r
+# generate index for LaTeX. If left blank `makeindex' will be used as the \r
+# default command name.\r
+\r
+MAKEINDEX_CMD_NAME     = makeindex\r
+\r
+# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact \r
+# LaTeX documents. This may be useful for small projects and may help to \r
+# save some trees in general.\r
+\r
+COMPACT_LATEX          = NO\r
+\r
+# The PAPER_TYPE tag can be used to set the paper type that is used \r
+# by the printer. Possible values are: a4, a4wide, letter, legal and \r
+# executive. If left blank a4wide will be used.\r
+\r
+PAPER_TYPE             = a4wide\r
+\r
+# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX \r
+# packages that should be included in the LaTeX output.\r
+\r
+EXTRA_PACKAGES         = \r
+\r
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for \r
+# the generated latex document. The header should contain everything until \r
+# the first chapter. If it is left blank doxygen will generate a \r
+# standard header. Notice: only use this tag if you know what you are doing!\r
+\r
+LATEX_HEADER           = \r
+\r
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated \r
+# is prepared for conversion to pdf (using ps2pdf). The pdf file will \r
+# contain links (just like the HTML output) instead of page references \r
+# This makes the output suitable for online browsing using a pdf viewer.\r
+\r
+PDF_HYPERLINKS         = YES\r
+\r
+# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of \r
+# plain latex in the generated Makefile. Set this option to YES to get a \r
+# higher quality PDF documentation.\r
+\r
+USE_PDFLATEX           = YES\r
+\r
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. \r
+# command to the generated LaTeX files. This will instruct LaTeX to keep \r
+# running if errors occur, instead of asking the user for help. \r
+# This option is also used when generating formulas in HTML.\r
+\r
+LATEX_BATCHMODE        = NO\r
+\r
+# If LATEX_HIDE_INDICES is set to YES then doxygen will not \r
+# include the index chapters (such as File Index, Compound Index, etc.) \r
+# in the output.\r
+\r
+LATEX_HIDE_INDICES     = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the RTF output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output \r
+# The RTF output is optimized for Word 97 and may not look very pretty with \r
+# other RTF readers or editors.\r
+\r
+GENERATE_RTF           = NO\r
+\r
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `rtf' will be used as the default path.\r
+\r
+RTF_OUTPUT             = rtf\r
+\r
+# If the COMPACT_RTF tag is set to YES Doxygen generates more compact \r
+# RTF documents. This may be useful for small projects and may help to \r
+# save some trees in general.\r
+\r
+COMPACT_RTF            = NO\r
+\r
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated \r
+# will contain hyperlink fields. The RTF file will \r
+# contain links (just like the HTML output) instead of page references. \r
+# This makes the output suitable for online browsing using WORD or other \r
+# programs which support those fields. \r
+# Note: wordpad (write) and others do not support links.\r
+\r
+RTF_HYPERLINKS         = NO\r
+\r
+# Load stylesheet definitions from file. Syntax is similar to doxygen's \r
+# config file, i.e. a series of assignments. You only have to provide \r
+# replacements, missing definitions are set to their default value.\r
+\r
+RTF_STYLESHEET_FILE    = \r
+\r
+# Set optional variables used in the generation of an rtf document. \r
+# Syntax is similar to doxygen's config file.\r
+\r
+RTF_EXTENSIONS_FILE    = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the man page output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_MAN tag is set to YES (the default) Doxygen will \r
+# generate man pages\r
+\r
+GENERATE_MAN           = NO\r
+\r
+# The MAN_OUTPUT tag is used to specify where the man pages will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `man' will be used as the default path.\r
+\r
+MAN_OUTPUT             = man\r
+\r
+# The MAN_EXTENSION tag determines the extension that is added to \r
+# the generated man pages (default is the subroutine's section .3)\r
+\r
+MAN_EXTENSION          = .3\r
+\r
+# If the MAN_LINKS tag is set to YES and Doxygen generates man output, \r
+# then it will generate one additional man file for each entity \r
+# documented in the real man page(s). These additional files \r
+# only source the real man page, but without them the man command \r
+# would be unable to find the correct page. The default is NO.\r
+\r
+MAN_LINKS              = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the XML output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_XML tag is set to YES Doxygen will \r
+# generate an XML file that captures the structure of \r
+# the code including all documentation.\r
+\r
+GENERATE_XML           = NO\r
+\r
+# The XML_OUTPUT tag is used to specify where the XML pages will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `xml' will be used as the default path.\r
+\r
+XML_OUTPUT             = xml\r
+\r
+# The XML_SCHEMA tag can be used to specify an XML schema, \r
+# which can be used by a validating XML parser to check the \r
+# syntax of the XML files.\r
+\r
+XML_SCHEMA             = \r
+\r
+# The XML_DTD tag can be used to specify an XML DTD, \r
+# which can be used by a validating XML parser to check the \r
+# syntax of the XML files.\r
+\r
+XML_DTD                = \r
+\r
+# If the XML_PROGRAMLISTING tag is set to YES Doxygen will \r
+# dump the program listings (including syntax highlighting \r
+# and cross-referencing information) to the XML output. Note that \r
+# enabling this will significantly increase the size of the XML output.\r
+\r
+XML_PROGRAMLISTING     = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options for the AutoGen Definitions output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will \r
+# generate an AutoGen Definitions (see autogen.sf.net) file \r
+# that captures the structure of the code including all \r
+# documentation. Note that this feature is still experimental \r
+# and incomplete at the moment.\r
+\r
+GENERATE_AUTOGEN_DEF   = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the Perl module output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_PERLMOD tag is set to YES Doxygen will \r
+# generate a Perl module file that captures the structure of \r
+# the code including all documentation. Note that this \r
+# feature is still experimental and incomplete at the \r
+# moment.\r
+\r
+GENERATE_PERLMOD       = NO\r
+\r
+# If the PERLMOD_LATEX tag is set to YES Doxygen will generate \r
+# the necessary Makefile rules, Perl scripts and LaTeX code to be able \r
+# to generate PDF and DVI output from the Perl module output.\r
+\r
+PERLMOD_LATEX          = NO\r
+\r
+# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be \r
+# nicely formatted so it can be parsed by a human reader.  This is useful \r
+# if you want to understand what is going on.  On the other hand, if this \r
+# tag is set to NO the size of the Perl module output will be much smaller \r
+# and Perl will parse it just the same.\r
+\r
+PERLMOD_PRETTY         = YES\r
+\r
+# The names of the make variables in the generated doxyrules.make file \r
+# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. \r
+# This is useful so different doxyrules.make files included by the same \r
+# Makefile don't overwrite each other's variables.\r
+\r
+PERLMOD_MAKEVAR_PREFIX = \r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration options related to the preprocessor   \r
+#---------------------------------------------------------------------------\r
+\r
+# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will \r
+# evaluate all C-preprocessor directives found in the sources and include \r
+# files.\r
+\r
+ENABLE_PREPROCESSING   = YES\r
+\r
+# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro \r
+# names in the source code. If set to NO (the default) only conditional \r
+# compilation will be performed. Macro expansion can be done in a controlled \r
+# way by setting EXPAND_ONLY_PREDEF to YES.\r
+\r
+MACRO_EXPANSION        = YES\r
+\r
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES \r
+# then the macro expansion is limited to the macros specified with the \r
+# PREDEFINED and EXPAND_AS_DEFINED tags.\r
+\r
+EXPAND_ONLY_PREDEF     = YES\r
+\r
+# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files \r
+# in the INCLUDE_PATH (see below) will be search if a #include is found.\r
+\r
+SEARCH_INCLUDES        = YES\r
+\r
+# The INCLUDE_PATH tag can be used to specify one or more directories that \r
+# contain include files that are not input files but should be processed by \r
+# the preprocessor.\r
+\r
+INCLUDE_PATH           = \r
+\r
+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard \r
+# patterns (like *.h and *.hpp) to filter out the header-files in the \r
+# directories. If left blank, the patterns specified with FILE_PATTERNS will \r
+# be used.\r
+\r
+INCLUDE_FILE_PATTERNS  = \r
+\r
+# The PREDEFINED tag can be used to specify one or more macro names that \r
+# are defined before the preprocessor is started (similar to the -D option of \r
+# gcc). The argument of the tag is a list of macros of the form: name \r
+# or name=definition (no spaces). If the definition and the = are \r
+# omitted =1 is assumed. To prevent a macro definition from being \r
+# undefined via #undef or recursively expanded use the := operator \r
+# instead of the = operator.\r
+\r
+PREDEFINED             = __DOXYGEN__\r
+\r
+# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then \r
+# this tag can be used to specify a list of macro names that should be expanded. \r
+# The macro definition that is found in the sources will be used. \r
+# Use the PREDEFINED tag if you want to use a different macro definition.\r
+\r
+EXPAND_AS_DEFINED      = BUTTLOADTAG\r
+\r
+# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then \r
+# doxygen's preprocessor will remove all function-like macros that are alone \r
+# on a line, have an all uppercase name, and do not end with a semicolon. Such \r
+# function macros are typically used for boiler-plate code, and will confuse \r
+# the parser if not removed.\r
+\r
+SKIP_FUNCTION_MACROS   = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration::additions related to external references   \r
+#---------------------------------------------------------------------------\r
+\r
+# The TAGFILES option can be used to specify one or more tagfiles. \r
+# Optionally an initial location of the external documentation \r
+# can be added for each tagfile. The format of a tag file without \r
+# this location is as follows: \r
+#   TAGFILES = file1 file2 ... \r
+# Adding location for the tag files is done as follows: \r
+#   TAGFILES = file1=loc1 "file2 = loc2" ... \r
+# where "loc1" and "loc2" can be relative or absolute paths or \r
+# URLs. If a location is present for each tag, the installdox tool \r
+# does not have to be run to correct the links.\r
+# Note that each tag file must have a unique name\r
+# (where the name does NOT include the path)\r
+# If a tag file is not located in the directory in which doxygen \r
+# is run, you must also specify the path to the tagfile here.\r
+\r
+TAGFILES               = \r
+\r
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create \r
+# a tag file that is based on the input files it reads.\r
+\r
+GENERATE_TAGFILE       = \r
+\r
+# If the ALLEXTERNALS tag is set to YES all external classes will be listed \r
+# in the class index. If set to NO only the inherited external classes \r
+# will be listed.\r
+\r
+ALLEXTERNALS           = NO\r
+\r
+# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed \r
+# in the modules index. If set to NO, only the current project's groups will \r
+# be listed.\r
+\r
+EXTERNAL_GROUPS        = YES\r
+\r
+# The PERL_PATH should be the absolute path and name of the perl script \r
+# interpreter (i.e. the result of `which perl').\r
+\r
+PERL_PATH              = /usr/bin/perl\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration options related to the dot tool   \r
+#---------------------------------------------------------------------------\r
+\r
+# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will \r
+# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base \r
+# or super classes. Setting the tag to NO turns the diagrams off. Note that \r
+# this option is superseded by the HAVE_DOT option below. This is only a \r
+# fallback. It is recommended to install and use dot, since it yields more \r
+# powerful graphs.\r
+\r
+CLASS_DIAGRAMS         = NO\r
+\r
+# You can define message sequence charts within doxygen comments using the \msc \r
+# command. Doxygen will then run the mscgen tool (see \r
+# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the \r
+# documentation. The MSCGEN_PATH tag allows you to specify the directory where \r
+# the mscgen tool resides. If left empty the tool is assumed to be found in the \r
+# default search path.\r
+\r
+MSCGEN_PATH            = \r
+\r
+# If set to YES, the inheritance and collaboration graphs will hide \r
+# inheritance and usage relations if the target is undocumented \r
+# or is not a class.\r
+\r
+HIDE_UNDOC_RELATIONS   = YES\r
+\r
+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is \r
+# available from the path. This tool is part of Graphviz, a graph visualization \r
+# toolkit from AT&T and Lucent Bell Labs. The other options in this section \r
+# have no effect if this option is set to NO (the default)\r
+\r
+HAVE_DOT               = NO\r
+\r
+# By default doxygen will write a font called FreeSans.ttf to the output \r
+# directory and reference it in all dot files that doxygen generates. This \r
+# font does not include all possible unicode characters however, so when you need \r
+# these (or just want a differently looking font) you can specify the font name \r
+# using DOT_FONTNAME. You need need to make sure dot is able to find the font, \r
+# which can be done by putting it in a standard location or by setting the \r
+# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory \r
+# containing the font.\r
+\r
+DOT_FONTNAME           = FreeSans\r
+\r
+# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. \r
+# The default size is 10pt.\r
+\r
+DOT_FONTSIZE           = 10\r
+\r
+# By default doxygen will tell dot to use the output directory to look for the \r
+# FreeSans.ttf font (which doxygen will put there itself). If you specify a \r
+# different font using DOT_FONTNAME you can set the path where dot \r
+# can find it using this tag.\r
+\r
+DOT_FONTPATH           = \r
+\r
+# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for each documented class showing the direct and \r
+# indirect inheritance relations. Setting this tag to YES will force the \r
+# the CLASS_DIAGRAMS tag to NO.\r
+\r
+CLASS_GRAPH            = NO\r
+\r
+# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for each documented class showing the direct and \r
+# indirect implementation dependencies (inheritance, containment, and \r
+# class references variables) of the class with other documented classes.\r
+\r
+COLLABORATION_GRAPH    = NO\r
+\r
+# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for groups, showing the direct groups dependencies\r
+\r
+GROUP_GRAPHS           = NO\r
+\r
+# If the UML_LOOK tag is set to YES doxygen will generate inheritance and \r
+# collaboration diagrams in a style similar to the OMG's Unified Modeling \r
+# Language.\r
+\r
+UML_LOOK               = NO\r
+\r
+# If set to YES, the inheritance and collaboration graphs will show the \r
+# relations between templates and their instances.\r
+\r
+TEMPLATE_RELATIONS     = NO\r
+\r
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT \r
+# tags are set to YES then doxygen will generate a graph for each documented \r
+# file showing the direct and indirect include dependencies of the file with \r
+# other documented files.\r
+\r
+INCLUDE_GRAPH          = NO\r
+\r
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and \r
+# HAVE_DOT tags are set to YES then doxygen will generate a graph for each \r
+# documented header file showing the documented files that directly or \r
+# indirectly include this file.\r
+\r
+INCLUDED_BY_GRAPH      = NO\r
+\r
+# If the CALL_GRAPH and HAVE_DOT options are set to YES then \r
+# doxygen will generate a call dependency graph for every global function \r
+# or class method. Note that enabling this option will significantly increase \r
+# the time of a run. So in most cases it will be better to enable call graphs \r
+# for selected functions only using the \callgraph command.\r
+\r
+CALL_GRAPH             = NO\r
+\r
+# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then \r
+# doxygen will generate a caller dependency graph for every global function \r
+# or class method. Note that enabling this option will significantly increase \r
+# the time of a run. So in most cases it will be better to enable caller \r
+# graphs for selected functions only using the \callergraph command.\r
+\r
+CALLER_GRAPH           = NO\r
+\r
+# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen \r
+# will graphical hierarchy of all classes instead of a textual one.\r
+\r
+GRAPHICAL_HIERARCHY    = NO\r
+\r
+# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES \r
+# then doxygen will show the dependencies a directory has on other directories \r
+# in a graphical way. The dependency relations are determined by the #include\r
+# relations between the files in the directories.\r
+\r
+DIRECTORY_GRAPH        = NO\r
+\r
+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images \r
+# generated by dot. Possible values are png, jpg, or gif\r
+# If left blank png will be used.\r
+\r
+DOT_IMAGE_FORMAT       = png\r
+\r
+# The tag DOT_PATH can be used to specify the path where the dot tool can be \r
+# found. If left blank, it is assumed the dot tool can be found in the path.\r
+\r
+DOT_PATH               = "C:/Program Files/Graphviz2.18/bin"\r
+\r
+# The DOTFILE_DIRS tag can be used to specify one or more directories that \r
+# contain dot files that are included in the documentation (see the \r
+# \dotfile command).\r
+\r
+DOTFILE_DIRS           = \r
+\r
+# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of \r
+# nodes that will be shown in the graph. If the number of nodes in a graph \r
+# becomes larger than this value, doxygen will truncate the graph, which is \r
+# visualized by representing a node as a red box. Note that doxygen if the \r
+# number of direct children of the root node in a graph is already larger than \r
+# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note \r
+# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.\r
+\r
+DOT_GRAPH_MAX_NODES    = 15\r
+\r
+# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the \r
+# graphs generated by dot. A depth value of 3 means that only nodes reachable \r
+# from the root by following a path via at most 3 edges will be shown. Nodes \r
+# that lay further from the root node will be omitted. Note that setting this \r
+# option to 1 or 2 may greatly reduce the computation time needed for large \r
+# code bases. Also note that the size of a graph can be further restricted by \r
+# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.\r
+\r
+MAX_DOT_GRAPH_DEPTH    = 2\r
+\r
+# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent \r
+# background. This is disabled by default, because dot on Windows does not \r
+# seem to support this out of the box. Warning: Depending on the platform used, \r
+# enabling this option may lead to badly anti-aliased labels on the edges of \r
+# a graph (i.e. they become hard to read).\r
+\r
+DOT_TRANSPARENT        = YES\r
+\r
+# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output \r
+# files in one run (i.e. multiple -o and -T options on the command line). This \r
+# makes dot run faster, but since only newer versions of dot (>1.8.10) \r
+# support this, this feature is disabled by default.\r
+\r
+DOT_MULTI_TARGETS      = NO\r
+\r
+# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will \r
+# generate a legend page explaining the meaning of the various boxes and \r
+# arrows in the dot generated graphs.\r
+\r
+GENERATE_LEGEND        = YES\r
+\r
+# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will \r
+# remove the intermediate dot files that are used to generate \r
+# the various graphs.\r
+\r
+DOT_CLEANUP            = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration::additions related to the search engine   \r
+#---------------------------------------------------------------------------\r
+\r
+# The SEARCHENGINE tag specifies whether or not a search engine should be \r
+# used. If set to NO the values of all tags below this one will be ignored.\r
+\r
+SEARCHENGINE           = NO\r
diff --git a/Demos/Device/LowLevel/Keyboard/Keyboard.aps b/Demos/Device/LowLevel/Keyboard/Keyboard.aps
new file mode 100644 (file)
index 0000000..541c175
--- /dev/null
@@ -0,0 +1 @@
+<AVRStudio><MANAGEMENT><ProjectName>Keyboard</ProjectName><Created>30-Sep-2008 13:59:29</Created><LastEdit>30-Sep-2008 14:00:25</LastEdit><ICON>241</ICON><ProjectType>0</ProjectType><Created>30-Sep-2008 13:59:29</Created><Version>4</Version><Build>4, 14, 0, 589</Build><ProjectTypeName>AVR GCC</ProjectTypeName></MANAGEMENT><CODE_CREATION><ObjectFile>Keyboard.elf</ObjectFile><EntryFile></EntryFile><SaveFolder>C:\Users\Dean\Documents\Electronics\Projects\WORK\MyUSBWORK\Demos\Keyboard\</SaveFolder></CODE_CREATION><DEBUG_TARGET><CURRENT_TARGET>JTAGICE mkII</CURRENT_TARGET><CURRENT_PART>AT90USB1287.xml</CURRENT_PART><BREAKPOINTS></BREAKPOINTS><IO_EXPAND><HIDE>false</HIDE></IO_EXPAND><REGISTERNAMES><Register>R00</Register><Register>R01</Register><Register>R02</Register><Register>R03</Register><Register>R04</Register><Register>R05</Register><Register>R06</Register><Register>R07</Register><Register>R08</Register><Register>R09</Register><Register>R10</Register><Register>R11</Register><Register>R12</Register><Register>R13</Register><Register>R14</Register><Register>R15</Register><Register>R16</Register><Register>R17</Register><Register>R18</Register><Register>R19</Register><Register>R20</Register><Register>R21</Register><Register>R22</Register><Register>R23</Register><Register>R24</Register><Register>R25</Register><Register>R26</Register><Register>R27</Register><Register>R28</Register><Register>R29</Register><Register>R30</Register><Register>R31</Register></REGISTERNAMES><COM>Auto</COM><COMType>0</COMType><WATCHNUM>0</WATCHNUM><WATCHNAMES><Pane0></Pane0><Pane1></Pane1><Pane2></Pane2><Pane3></Pane3></WATCHNAMES><BreakOnTrcaeFull>0</BreakOnTrcaeFull></DEBUG_TARGET><Debugger><Triggers></Triggers></Debugger><AVRGCCPLUGIN><FILES><SOURCEFILE>Descriptors.c</SOURCEFILE><SOURCEFILE>Keyboard.c</SOURCEFILE><HEADERFILE>Descriptors.h</HEADERFILE><HEADERFILE>Keyboard.h</HEADERFILE><OTHERFILE>makefile</OTHERFILE></FILES><CONFIGS><CONFIG><NAME>default</NAME><USESEXTERNALMAKEFILE>YES</USESEXTERNALMAKEFILE><EXTERNALMAKEFILE>makefile</EXTERNALMAKEFILE><PART>at90usb1287</PART><HEX>1</HEX><LIST>1</LIST><MAP>1</MAP><OUTPUTFILENAME>Keyboard.elf</OUTPUTFILENAME><OUTPUTDIR>default\</OUTPUTDIR><ISDIRTY>1</ISDIRTY><OPTIONS/><INCDIRS/><LIBDIRS/><LIBS/><LINKOBJECTS/><OPTIONSFORALL>-Wall -gdwarf-2 -std=gnu99 -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums</OPTIONSFORALL><LINKEROPTIONS></LINKEROPTIONS><SEGMENTS/></CONFIG></CONFIGS><LASTCONFIG>default</LASTCONFIG><USES_WINAVR>1</USES_WINAVR><GCC_LOC>C:\WinAVR-20080512\bin\avr-gcc.exe</GCC_LOC><MAKE_LOC>C:\WinAVR-20080512\utils\bin\make.exe</MAKE_LOC></AVRGCCPLUGIN><IOView><usergroups/><sort sorted="0" column="0" ordername="0" orderaddress="0" ordergroup="0"/></IOView><Files><File00000><FileId>00000</FileId><FileName>makefile</FileName><Status>1</Status></File00000></Files><Events><Bookmarks></Bookmarks></Events><Trace><Filters></Filters></Trace></AVRStudio>\r
diff --git a/Demos/Device/LowLevel/Keyboard/Keyboard.c b/Demos/Device/LowLevel/Keyboard/Keyboard.c
new file mode 100644 (file)
index 0000000..6abd193
--- /dev/null
@@ -0,0 +1,424 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Denver Gingerich (denver [at] ossguy [dot] com)\r
+      Based on code by Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  Main source file for the Keyboard demo. This file contains the main tasks of the demo and\r
+ *  is responsible for the initial application hardware configuration.\r
+ */\r
\r
+#include "Keyboard.h"\r
+\r
+/* Scheduler Task List */\r
+TASK_LIST\r
+{\r
+       { .Task = USB_USBTask          , .TaskStatus = TASK_STOP },     \r
+       { .Task = USB_Keyboard_Report  , .TaskStatus = TASK_STOP },\r
+};\r
+\r
+/* Global Variables */\r
+/** Indicates what report mode the host has requested, true for normal HID reporting mode, false for special boot\r
+ *  protocol reporting mode.\r
+ */\r
+bool UsingReportProtocol = true;\r
+\r
+/** Current Idle period. This is set by the host via a Set Idle HID class request to silence the device's reports\r
+ *  for either the entire idle duration, or until the report status changes (e.g. the user presses a key).\r
+ */\r
+uint16_t IdleCount = 500;\r
+\r
+/** Current Idle period remaining. When the IdleCount value is set, this tracks the remaining number of idle\r
+ *  milliseconds. This is separate to the IdleCount timer and is incremented and compared as the host may request \r
+ *  the current idle period via a Get Idle HID class request, thus its value must be preserved.\r
+ */\r
+uint16_t IdleMSRemaining = 0;\r
+\r
+\r
+/** Main program entry point. This routine configures the hardware required by the application, then\r
+ *  starts the scheduler to run the USB management task.\r
+ */\r
+int main(void)\r
+{\r
+       /* Disable watchdog if enabled by bootloader/fuses */\r
+       MCUSR &= ~(1 << WDRF);\r
+       wdt_disable();\r
+\r
+       /* Disable clock division */\r
+       clock_prescale_set(clock_div_1);\r
+\r
+       /* Hardware Initialization */\r
+       Joystick_Init();\r
+       LEDs_Init();\r
+       \r
+       /* Millisecond timer initialization, with output compare interrupt enabled for the idle timing */\r
+       OCR0A  = 0x7D;\r
+       TCCR0A = (1 << WGM01);\r
+       TCCR0B = ((1 << CS01) | (1 << CS00));\r
+       TIMSK0 = (1 << OCIE0A);\r
+\r
+       /* Indicate USB not ready */\r
+       UpdateStatus(Status_USBNotReady);\r
+\r
+       /* Initialize Scheduler so that it can be used */\r
+       Scheduler_Init();\r
+\r
+       /* Initialize USB Subsystem */\r
+       USB_Init();\r
+       \r
+       /* Scheduling - routine never returns, so put this last in the main function */\r
+       Scheduler_Start();\r
+}\r
+\r
+/** Event handler for the USB_Connect event. This indicates that the device is enumerating via the status LEDs and\r
+ *  starts the library USB task to begin the enumeration and USB management process.\r
+ */\r
+void EVENT_USB_Connect(void)\r
+{\r
+       /* Start USB management task */\r
+       Scheduler_SetTaskMode(USB_USBTask, TASK_RUN);\r
+\r
+       /* Indicate USB enumerating */\r
+       UpdateStatus(Status_USBEnumerating);\r
+\r
+       /* Default to report protocol on connect */\r
+       UsingReportProtocol = true;\r
+}\r
+\r
+/** Event handler for the USB_Disconnect event. This indicates that the device is no longer connected to a host via\r
+ *  the status LEDs.\r
+ */\r
+void EVENT_USB_Disconnect(void)\r
+{\r
+       /* Stop running keyboard reporting and USB management tasks */\r
+       Scheduler_SetTaskMode(USB_Keyboard_Report, TASK_STOP);\r
+       Scheduler_SetTaskMode(USB_USBTask, TASK_STOP);\r
+       \r
+       /* Indicate USB not ready */\r
+       UpdateStatus(Status_USBNotReady);\r
+}\r
+\r
+/** Event handler for the USB_ConfigurationChanged event. This is fired when the host sets the current configuration\r
+ *  of the USB device after enumeration, and configures the keyboard device endpoints.\r
+ */\r
+void EVENT_USB_ConfigurationChanged(void)\r
+{\r
+       /* Setup Keyboard Keycode Report Endpoint */\r
+       Endpoint_ConfigureEndpoint(KEYBOARD_EPNUM, EP_TYPE_INTERRUPT,\r
+                                      ENDPOINT_DIR_IN, KEYBOARD_EPSIZE,\r
+                                  ENDPOINT_BANK_SINGLE);\r
+\r
+       /* Setup Keyboard LED Report Endpoint */\r
+       Endpoint_ConfigureEndpoint(KEYBOARD_LEDS_EPNUM, EP_TYPE_INTERRUPT,\r
+                                      ENDPOINT_DIR_OUT, KEYBOARD_EPSIZE,\r
+                                  ENDPOINT_BANK_SINGLE);\r
+\r
+       /* Indicate USB connected and ready */\r
+       UpdateStatus(Status_USBReady);\r
+\r
+       /* Start running keyboard reporting task */\r
+       Scheduler_SetTaskMode(USB_Keyboard_Report, TASK_RUN);\r
+}\r
+\r
+/** Event handler for the USB_UnhandledControlPacket event. This is used to catch standard and class specific\r
+ *  control requests that are not handled internally by the USB library (including the HID commands, which are\r
+ *  all issued via the control endpoint), so that they can be handled appropriately for the application.\r
+ */\r
+void EVENT_USB_UnhandledControlPacket(void)\r
+{\r
+       /* Handle HID Class specific requests */\r
+       switch (USB_ControlRequest.bRequest)\r
+       {\r
+               case REQ_GetReport:\r
+                       if (USB_ControlRequest.bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_INTERFACE))\r
+                       {\r
+                               USB_KeyboardReport_Data_t KeyboardReportData;\r
+\r
+                               Endpoint_ClearSETUP();\r
+       \r
+                               /* Create the next keyboard report for transmission to the host */\r
+                               CreateKeyboardReport(&KeyboardReportData);\r
+\r
+                               /* Write the report data to the control endpoint */\r
+                               Endpoint_Write_Control_Stream_LE(&KeyboardReportData, sizeof(KeyboardReportData));\r
+                               \r
+                               /* Finalize the stream transfer to send the last packet or clear the host abort */\r
+                               Endpoint_ClearOUT();\r
+                       }\r
+               \r
+                       break;\r
+               case REQ_SetReport:\r
+                       if (USB_ControlRequest.bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE))\r
+                       {\r
+                               Endpoint_ClearSETUP();\r
+                               \r
+                               /* Wait until the LED report has been sent by the host */\r
+                               while (!(Endpoint_IsOUTReceived()));\r
+\r
+                               /* Read in the LED report from the host */\r
+                               uint8_t LEDStatus = Endpoint_Read_Byte();\r
+\r
+                               /* Process the incoming LED report */\r
+                               ProcessLEDReport(LEDStatus);\r
+                       \r
+                               /* Clear the endpoint data */\r
+                               Endpoint_ClearOUT();\r
+\r
+                               /* Acknowledge status stage */\r
+                               while (!(Endpoint_IsINReady()));\r
+                               Endpoint_ClearIN();\r
+                       }\r
+                       \r
+                       break;\r
+               case REQ_GetProtocol:\r
+                       if (USB_ControlRequest.bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_INTERFACE))\r
+                       {\r
+                               Endpoint_ClearSETUP();\r
+                               \r
+                               /* Write the current protocol flag to the host */\r
+                               Endpoint_Write_Byte(UsingReportProtocol);\r
+                               \r
+                               /* Send the flag to the host */\r
+                               Endpoint_ClearIN();\r
+\r
+                               /* Acknowledge status stage */\r
+                               while (!(Endpoint_IsOUTReceived()));\r
+                               Endpoint_ClearOUT();\r
+                       }\r
+                       \r
+                       break;\r
+               case REQ_SetProtocol:\r
+                       if (USB_ControlRequest.bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE))\r
+                       {\r
+                               Endpoint_ClearSETUP();\r
+\r
+                               /* Set or clear the flag depending on what the host indicates that the current Protocol should be */\r
+                               UsingReportProtocol = (USB_ControlRequest.wValue != 0);\r
+\r
+                               /* Acknowledge status stage */\r
+                               while (!(Endpoint_IsINReady()));\r
+                               Endpoint_ClearIN();\r
+                       }\r
+                       \r
+                       break;\r
+               case REQ_SetIdle:\r
+                       if (USB_ControlRequest.bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE))\r
+                       {\r
+                               Endpoint_ClearSETUP();\r
+                               \r
+                               /* Get idle period in MSB */\r
+                               IdleCount = (USB_ControlRequest.wValue >> 8);\r
+                               \r
+                               /* Acknowledge status stage */\r
+                               while (!(Endpoint_IsINReady()));\r
+                               Endpoint_ClearIN();\r
+                       }\r
+                       \r
+                       break;\r
+               case REQ_GetIdle:\r
+                       if (USB_ControlRequest.bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_INTERFACE))\r
+                       {               \r
+                               Endpoint_ClearSETUP();\r
+                               \r
+                               /* Write the current idle duration to the host */\r
+                               Endpoint_Write_Byte(IdleCount);\r
+                               \r
+                               /* Send the flag to the host */\r
+                               Endpoint_ClearIN();\r
+\r
+                               /* Acknowledge status stage */\r
+                               while (!(Endpoint_IsOUTReceived()));\r
+                               Endpoint_ClearOUT();\r
+                       }\r
+\r
+                       break;\r
+       }\r
+}\r
+\r
+/** ISR for the timer 0 compare vector. This ISR fires once each millisecond, and increments the\r
+ *  scheduler elapsed idle period counter when the host has set an idle period.\r
+ */\r
+ISR(TIMER0_COMPA_vect, ISR_BLOCK)\r
+{\r
+       /* One millisecond has elapsed, decrement the idle time remaining counter if it has not already elapsed */\r
+       if (IdleMSRemaining)\r
+         IdleMSRemaining--;\r
+}\r
+\r
+/** Fills the given HID report data structure with the next HID report to send to the host.\r
+ *\r
+ *  \param ReportData  Pointer to a HID report data structure to be filled\r
+ */\r
+void CreateKeyboardReport(USB_KeyboardReport_Data_t* ReportData)\r
+{\r
+       uint8_t JoyStatus_LCL = Joystick_GetStatus();\r
+\r
+       /* Clear the report contents */\r
+       memset(ReportData, 0, sizeof(USB_KeyboardReport_Data_t));\r
+\r
+       if (JoyStatus_LCL & JOY_UP)\r
+         ReportData->KeyCode[0] = 0x04; // A\r
+       else if (JoyStatus_LCL & JOY_DOWN)\r
+         ReportData->KeyCode[0] = 0x05; // B\r
+\r
+       if (JoyStatus_LCL & JOY_LEFT)\r
+         ReportData->KeyCode[0] = 0x06; // C\r
+       else if (JoyStatus_LCL & JOY_RIGHT)\r
+         ReportData->KeyCode[0] = 0x07; // D\r
+\r
+       if (JoyStatus_LCL & JOY_PRESS)\r
+         ReportData->KeyCode[0] = 0x08; // E\r
+}\r
+\r
+/** Processes a received LED report, and updates the board LEDs states to match.\r
+ *\r
+ *  \param LEDReport  LED status report from the host\r
+ */\r
+void ProcessLEDReport(uint8_t LEDReport)\r
+{\r
+       uint8_t LEDMask = LEDS_LED2;\r
+       \r
+       if (LEDReport & 0x01) // NUM Lock\r
+         LEDMask |= LEDS_LED1;\r
+       \r
+       if (LEDReport & 0x02) // CAPS Lock\r
+         LEDMask |= LEDS_LED3;\r
+\r
+       if (LEDReport & 0x04) // SCROLL Lock\r
+         LEDMask |= LEDS_LED4;\r
+\r
+       /* Set the status LEDs to the current Keyboard LED status */\r
+       LEDs_SetAllLEDs(LEDMask);\r
+}\r
+\r
+/** Sends the next HID report to the host, via the keyboard data endpoint. */\r
+void SendNextReport(void)\r
+{\r
+       static USB_KeyboardReport_Data_t PrevKeyboardReportData;\r
+       USB_KeyboardReport_Data_t        KeyboardReportData;\r
+       bool                             SendReport = true;\r
+       \r
+       /* Create the next keyboard report for transmission to the host */\r
+       CreateKeyboardReport(&KeyboardReportData);\r
+       \r
+       /* Check to see if the report data has changed - if so a report MUST be sent */\r
+       SendReport = (memcmp(&PrevKeyboardReportData, &KeyboardReportData, sizeof(USB_KeyboardReport_Data_t)) != 0);\r
+       \r
+       /* Save the current report data for later comparison to check for changes */\r
+       PrevKeyboardReportData = KeyboardReportData;\r
+       \r
+       /* Check if the idle period is set and has elapsed */\r
+       if ((IdleCount != HID_IDLE_CHANGESONLY) && (!(IdleMSRemaining)))\r
+       {\r
+               /* Reset the idle time remaining counter, must multiply by 4 to get the duration in milliseconds */\r
+               IdleMSRemaining = (IdleCount << 2);\r
+               \r
+               /* Idle period is set and has elapsed, must send a report to the host */\r
+               SendReport = true;\r
+       }\r
+       \r
+       /* Select the Keyboard Report Endpoint */\r
+       Endpoint_SelectEndpoint(KEYBOARD_EPNUM);\r
+\r
+       /* Check if Keyboard Endpoint Ready for Read/Write and if we should send a new report */\r
+       if (Endpoint_IsReadWriteAllowed() && SendReport)\r
+       {\r
+               /* Write Keyboard Report Data */\r
+               Endpoint_Write_Stream_LE(&KeyboardReportData, sizeof(KeyboardReportData));\r
+               \r
+               /* Finalize the stream transfer to send the last packet */\r
+               Endpoint_ClearIN();\r
+       }\r
+}\r
+\r
+/** Reads the next LED status report from the host from the LED data endpoint, if one has been sent. */\r
+void ReceiveNextReport(void)\r
+{\r
+       /* Select the Keyboard LED Report Endpoint */\r
+       Endpoint_SelectEndpoint(KEYBOARD_LEDS_EPNUM);\r
+\r
+       /* Check if Keyboard LED Endpoint contains a packet */\r
+       if (Endpoint_IsOUTReceived())\r
+       {\r
+               /* Check to see if the packet contains data */\r
+               if (Endpoint_IsReadWriteAllowed())\r
+               {\r
+                       /* Read in the LED report from the host */\r
+                       uint8_t LEDReport = Endpoint_Read_Byte();\r
+\r
+                       /* Process the read LED report from the host */\r
+                       ProcessLEDReport(LEDReport);\r
+               }\r
+\r
+               /* Handshake the OUT Endpoint - clear endpoint and ready for next report */\r
+               Endpoint_ClearOUT();\r
+       }\r
+}\r
+\r
+/** Function to manage status updates to the user. This is done via LEDs on the given board, if available, but may be changed to\r
+ *  log to a serial port, or anything else that is suitable for status updates.\r
+ *\r
+ *  \param CurrentStatus  Current status of the system, from the Keyboard_StatusCodes_t enum\r
+ */\r
+void UpdateStatus(uint8_t CurrentStatus)\r
+{\r
+       uint8_t LEDMask = LEDS_NO_LEDS;\r
+       \r
+       /* Set the LED mask to the appropriate LED mask based on the given status code */\r
+       switch (CurrentStatus)\r
+       {\r
+               case Status_USBNotReady:\r
+                       LEDMask = (LEDS_LED1);\r
+                       break;\r
+               case Status_USBEnumerating:\r
+                       LEDMask = (LEDS_LED1 | LEDS_LED2);\r
+                       break;\r
+               case Status_USBReady:\r
+                       LEDMask = (LEDS_LED2 | LEDS_LED4);\r
+                       break;\r
+       }\r
+       \r
+       /* Set the board LEDs to the new LED mask */\r
+       LEDs_SetAllLEDs(LEDMask);\r
+}\r
+\r
+/** Function to manage HID report generation and transmission to the host, when in report mode. */\r
+TASK(USB_Keyboard_Report)\r
+{\r
+       /* Check if the USB system is connected to a host */\r
+       if (USB_IsConnected)\r
+       {\r
+               /* Send the next keypress report to the host */\r
+               SendNextReport();\r
+               \r
+               /* Process the LED report sent from the host */\r
+               ReceiveNextReport();\r
+       }\r
+}\r
diff --git a/Demos/Device/LowLevel/Keyboard/Keyboard.h b/Demos/Device/LowLevel/Keyboard/Keyboard.h
new file mode 100644 (file)
index 0000000..c4ed6e0
--- /dev/null
@@ -0,0 +1,113 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Denver Gingerich (denver [at] ossguy [dot] com)\r
+      Based on code by Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  Header file for Keyboard.c.\r
+ */\r
+\r
+#ifndef _KEYBOARD_H_\r
+#define _KEYBOARD_H_\r
+\r
+       /* Includes: */\r
+               #include <avr/io.h>\r
+               #include <avr/wdt.h>\r
+               #include <avr/interrupt.h>\r
+               #include <avr/power.h>\r
+               #include <stdbool.h>\r
+               #include <string.h>\r
+\r
+               #include "Descriptors.h"\r
+\r
+               #include <LUFA/Version.h>                    // Library Version Information\r
+               #include <LUFA/Scheduler/Scheduler.h>        // Simple scheduler for task management\r
+               #include <LUFA/Drivers/USB/USB.h>            // USB Functionality\r
+               #include <LUFA/Drivers/Board/Joystick.h>     // Joystick driver\r
+               #include <LUFA/Drivers/Board/LEDs.h>         // LEDs driver\r
+\r
+       /* Macros: */\r
+               /** Idle period indicating that reports should be sent only when the inputs have changed */\r
+               #define HID_IDLE_CHANGESONLY   0\r
+\r
+               /** HID Class specific request to get the next HID report from the device. */\r
+               #define REQ_GetReport          0x01\r
+\r
+               /** HID Class specific request to get the idle timeout period of the device. */\r
+               #define REQ_GetIdle            0x02\r
+\r
+               /** HID Class specific request to send the next HID report to the device. */\r
+               #define REQ_SetReport          0x09\r
+\r
+               /** HID Class specific request to set the idle timeout period of the device. */\r
+               #define REQ_SetIdle            0x0A\r
+\r
+               /** HID Class specific request to get the current HID protocol in use, either report or boot. */\r
+               #define REQ_GetProtocol        0x03\r
+\r
+               /** HID Class specific request to set the current HID protocol in use, either report or boot. */\r
+               #define REQ_SetProtocol        0x0B\r
+               \r
+       /* Task Definitions: */\r
+               TASK(USB_Keyboard_Report);\r
+\r
+       /* Type Defines: */\r
+               /** Type define for the keyboard HID report structure, for creating and sending HID reports to the host PC.\r
+                *  This mirrors the layout described to the host in the HID report descriptor, in Descriptors.c.\r
+                */\r
+               typedef struct\r
+               {\r
+                       uint8_t Modifier; /**< Modifier mask byte, containing a mask of modifier keys set (such as shift or CTRL) */\r
+                       uint8_t Reserved; /**< Reserved, always set as 0x00 */\r
+                       uint8_t KeyCode[6]; /**< Array of up to six simultaneous key codes of pressed keys */\r
+               } USB_KeyboardReport_Data_t;\r
+                       \r
+       /* Enums: */\r
+               /** Enum for the possible status codes for passing to the UpdateStatus() function. */\r
+               enum Keyboard_StatusCodes_t\r
+               {\r
+                       Status_USBNotReady    = 0, /**< USB is not ready (disconnected from a USB host) */\r
+                       Status_USBEnumerating = 1, /**< USB interface is enumerating */\r
+                       Status_USBReady       = 2, /**< USB interface is connected and ready */\r
+               };\r
+               \r
+       /* Function Prototypes: */\r
+               void EVENT_USB_Connect(void);\r
+               void EVENT_USB_Disconnect(void);\r
+               void EVENT_USB_ConfigurationChanged(void);\r
+               void EVENT_USB_UnhandledControlPacket(void);\r
+\r
+               void CreateKeyboardReport(USB_KeyboardReport_Data_t* ReportData);\r
+               void ProcessLEDReport(uint8_t LEDReport);\r
+               void SendNextReport(void);\r
+               void ReceiveNextReport(void);\r
+               void UpdateStatus(uint8_t CurrentStatus);\r
+\r
+#endif\r
diff --git a/Demos/Device/LowLevel/Keyboard/Keyboard.txt b/Demos/Device/LowLevel/Keyboard/Keyboard.txt
new file mode 100644 (file)
index 0000000..3fc9bee
--- /dev/null
@@ -0,0 +1,60 @@
+/** \file\r
+ *\r
+ *  This file contains special DoxyGen information for the generation of the main page and other special\r
+ *  documentation pages. It is not a project source file.\r
+ */\r
\r
+/** \mainpage Keyboard Device Demo\r
+ *\r
+ *  \section SSec_Info USB Information:\r
+ *\r
+ *  The following table gives a rundown of the USB utilization of this demo.\r
+ *\r
+ *  <table>\r
+ *   <tr>\r
+ *    <td><b>USB Mode:</b></td>\r
+ *    <td>Device</td>\r
+ *   </tr>\r
+ *   <tr>\r
+ *    <td><b>USB Class:</b></td>\r
+ *    <td>Human Interface Device (HID)</td>\r
+ *   </tr>\r
+ *   <tr> \r
+ *    <td><b>USB Subclass:</b></td>\r
+ *    <td>N/A</td>\r
+ *   </tr>\r
+ *   <tr>\r
+ *    <td><b>Relevant Standards:</b></td>\r
+ *    <td>USBIF HID Specification, USBIF HID Usage Tables</td>\r
+ *   </tr>\r
+ *   <tr>\r
+ *    <td><b>Usable Speeds:</b></td>\r
+ *    <td>Low Speed Mode, Full Speed Mode</td>\r
+ *   </tr>\r
+ *  </table>\r
+ *\r
+ *  \section SSec_Description Project Description:\r
+ *\r
+ *  Keyboard demonstration application. This gives a simple reference application\r
+ *  for implementing a USB Keyboard using the basic USB HID drivers in all modern\r
+ *  OSes (i.e. no special drivers required). It is boot protocol compatible, and thus\r
+ *  works under compatible BIOS as if it was a native keyboard (e.g. PS/2).\r
+ *  \r
+ *  On start-up the system will automatically enumerate and function\r
+ *  as a keyboard when the USB connection to a host is present. To use\r
+ *  the keyboard example, manipulate the joystick to send the letters\r
+ *  a, b, c, d and e. See the USB HID documentation for more information\r
+ *  on sending keyboard event and key presses.\r
+ *\r
+ *  \section SSec_Options Project Options\r
+ *  \r
+ *  The following defines can be found in this demo, which can control the demo behaviour when defined, or changed in value.\r
+ *\r
+ *  <table>\r
+ *   <tr>\r
+ *    <td>\r
+ *     None\r
+ *    </td>\r
+ *   </tr>\r
+ *  </table>\r
+ */\r
diff --git a/Demos/Device/LowLevel/Keyboard/makefile b/Demos/Device/LowLevel/Keyboard/makefile
new file mode 100644 (file)
index 0000000..88e4de0
--- /dev/null
@@ -0,0 +1,733 @@
+# Hey Emacs, this is a -*- makefile -*-\r
+#----------------------------------------------------------------------------\r
+# WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al.\r
+#  >> Modified for use with the LUFA project. <<\r
+#\r
+# Released to the Public Domain\r
+#\r
+# Additional material for this makefile was written by:\r
+# Peter Fleury\r
+# Tim Henigan\r
+# Colin O'Flynn\r
+# Reiner Patommel\r
+# Markus Pfaff\r
+# Sander Pool\r
+# Frederik Rouleau\r
+# Carlos Lamas\r
+# Dean Camera\r
+# Opendous Inc.\r
+# Denver Gingerich\r
+#\r
+#----------------------------------------------------------------------------\r
+# On command line:\r
+#\r
+# make all = Make software.\r
+#\r
+# make clean = Clean out built project files.\r
+#\r
+# make coff = Convert ELF to AVR COFF.\r
+#\r
+# make extcoff = Convert ELF to AVR Extended COFF.\r
+#\r
+# make program = Download the hex file to the device, using avrdude.\r
+#                Please customize the avrdude settings below first!\r
+#\r
+# make dfu = Download the hex file to the device, using dfu-programmer (must\r
+#            have dfu-programmer installed).\r
+#\r
+# make flip = Download the hex file to the device, using Atmel FLIP (must\r
+#             have Atmel FLIP installed).\r
+#\r
+# make dfu-ee = Download the eeprom file to the device, using dfu-programmer\r
+#               (must have dfu-programmer installed).\r
+#\r
+# make flip-ee = Download the eeprom file to the device, using Atmel FLIP\r
+#                (must have Atmel FLIP installed).\r
+#\r
+# make doxygen = Generate DoxyGen documentation for the project (must have\r
+#                DoxyGen installed)\r
+#\r
+# make debug = Start either simulavr or avarice as specified for debugging, \r
+#              with avr-gdb or avr-insight as the front end for debugging.\r
+#\r
+# make filename.s = Just compile filename.c into the assembler code only.\r
+#\r
+# make filename.i = Create a preprocessed source file for use in submitting\r
+#                   bug reports to the GCC project.\r
+#\r
+# To rebuild project do "make clean" then "make all".\r
+#----------------------------------------------------------------------------\r
+\r
+\r
+# MCU name\r
+MCU = at90usb1287\r
+\r
+\r
+# Target board (see library "Board Types" documentation, USER or blank for projects not requiring\r
+# LUFA board drivers). If USER is selected, put custom board drivers in a directory called \r
+# "Board" inside the application directory.\r
+BOARD  = USBKEY\r
+\r
+\r
+# Processor frequency.\r
+#     This will define a symbol, F_CPU, in all source code files equal to the \r
+#     processor frequency. You can then use this symbol in your source code to \r
+#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done\r
+#     automatically to create a 32-bit value in your source code.\r
+#     Typical values are:\r
+#         F_CPU =  1000000\r
+#         F_CPU =  1843200\r
+#         F_CPU =  2000000\r
+#         F_CPU =  3686400\r
+#         F_CPU =  4000000\r
+#         F_CPU =  7372800\r
+#         F_CPU =  8000000\r
+#         F_CPU = 11059200\r
+#         F_CPU = 14745600\r
+#         F_CPU = 16000000\r
+#         F_CPU = 18432000\r
+#         F_CPU = 20000000\r
+F_CPU = 8000000\r
+\r
+\r
+# Input clock frequency.\r
+#     This will define a symbol, F_CLOCK, in all source code files equal to the \r
+#     input clock frequency (before any prescaling is performed). This value may\r
+#     differ from F_CPU if prescaling is used on the latter, and is required as the\r
+#     raw input clock is fed directly to the PLL sections of the AVR for high speed\r
+#     clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'\r
+#     at the end, this will be done automatically to create a 32-bit value in your\r
+#     source code.\r
+#\r
+#     If no clock division is performed on the input clock inside the AVR (via the\r
+#     CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.\r
+F_CLOCK = 8000000\r
+\r
+\r
+# Output format. (can be srec, ihex, binary)\r
+FORMAT = ihex\r
+\r
+\r
+# Target file name (without extension).\r
+TARGET = Keyboard\r
+\r
+\r
+# Object files directory\r
+#     To put object files in current directory, use a dot (.), do NOT make\r
+#     this an empty or blank macro!\r
+OBJDIR = .\r
+\r
+\r
+# Path to the LUFA library\r
+LUFA_PATH = ../../..\r
+\r
+\r
+# List C source files here. (C dependencies are automatically generated.)\r
+SRC = $(TARGET).c                                                 \\r
+         Descriptors.c                                               \\r
+         $(LUFA_PATH)/LUFA/Scheduler/Scheduler.c                     \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/DevChapter9.c        \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Endpoint.c           \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Host.c               \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/HostChapter9.c       \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/LowLevel.c           \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Pipe.c               \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/Events.c            \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBInterrupt.c      \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBTask.c           \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/ConfigDescriptor.c  \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/Class/HIDParser.c             \\r
+\r
+\r
+# List C++ source files here. (C dependencies are automatically generated.)\r
+CPPSRC = \r
+\r
+\r
+# List Assembler source files here.\r
+#     Make them always end in a capital .S.  Files ending in a lowercase .s\r
+#     will not be considered source files but generated files (assembler\r
+#     output from the compiler), and will be deleted upon "make clean"!\r
+#     Even though the DOS/Win* filesystem matches both .s and .S the same,\r
+#     it will preserve the spelling of the filenames, and gcc itself does\r
+#     care about how the name is spelled on its command-line.\r
+ASRC =\r
+\r
+\r
+# Optimization level, can be [0, 1, 2, 3, s]. \r
+#     0 = turn off optimization. s = optimize for size.\r
+#     (Note: 3 is not always the best optimization level. See avr-libc FAQ.)\r
+OPT = s\r
+\r
+\r
+# Debugging format.\r
+#     Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs.\r
+#     AVR Studio 4.10 requires dwarf-2.\r
+#     AVR [Extended] COFF format requires stabs, plus an avr-objcopy run.\r
+DEBUG = dwarf-2\r
+\r
+\r
+# List any extra directories to look for include files here.\r
+#     Each directory must be seperated by a space.\r
+#     Use forward slashes for directory separators.\r
+#     For a directory that has spaces, enclose it in quotes.\r
+EXTRAINCDIRS = $(LUFA_PATH)/\r
+\r
+\r
+# Compiler flag to set the C Standard level.\r
+#     c89   = "ANSI" C\r
+#     gnu89 = c89 plus GCC extensions\r
+#     c99   = ISO C99 standard (not yet fully implemented)\r
+#     gnu99 = c99 plus GCC extensions\r
+CSTANDARD = -std=gnu99\r
+\r
+\r
+# Place -D or -U options here for C sources\r
+CDEFS  = -DF_CPU=$(F_CPU)UL -DF_CLOCK=$(F_CLOCK)UL -DBOARD=BOARD_$(BOARD)\r
+CDEFS += -DUSE_NONSTANDARD_DESCRIPTOR_NAMES -DNO_STREAM_CALLBACKS -DUSB_DEVICE_ONLY\r
+CDEFS += -DFIXED_CONTROL_ENDPOINT_SIZE=8 -DUSE_SINGLE_DEVICE_CONFIGURATION\r
+CDEFS += -DUSE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)"\r
+\r
+# Place -D or -U options here for ASM sources\r
+ADEFS = -DF_CPU=$(F_CPU)\r
+\r
+\r
+# Place -D or -U options here for C++ sources\r
+CPPDEFS = -DF_CPU=$(F_CPU)UL\r
+#CPPDEFS += -D__STDC_LIMIT_MACROS\r
+#CPPDEFS += -D__STDC_CONSTANT_MACROS\r
+\r
+\r
+\r
+#---------------- Compiler Options C ----------------\r
+#  -g*:          generate debugging information\r
+#  -O*:          optimization level\r
+#  -f...:        tuning, see GCC manual and avr-libc documentation\r
+#  -Wall...:     warning level\r
+#  -Wa,...:      tell GCC to pass this to the assembler.\r
+#    -adhlns...: create assembler listing\r
+CFLAGS = -g$(DEBUG)\r
+CFLAGS += $(CDEFS)\r
+CFLAGS += -O$(OPT)\r
+CFLAGS += -funsigned-char\r
+CFLAGS += -funsigned-bitfields\r
+CFLAGS += -ffunction-sections\r
+CFLAGS += -fpack-struct\r
+CFLAGS += -fshort-enums\r
+CFLAGS += -finline-limit=20\r
+CFLAGS += -Wall\r
+CFLAGS += -Wstrict-prototypes\r
+CFLAGS += -Wundef\r
+#CFLAGS += -fno-unit-at-a-time\r
+#CFLAGS += -Wunreachable-code\r
+#CFLAGS += -Wsign-compare\r
+CFLAGS += -Wa,-adhlns=$(<:%.c=$(OBJDIR)/%.lst)\r
+CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))\r
+CFLAGS += $(CSTANDARD)\r
+\r
+\r
+#---------------- Compiler Options C++ ----------------\r
+#  -g*:          generate debugging information\r
+#  -O*:          optimization level\r
+#  -f...:        tuning, see GCC manual and avr-libc documentation\r
+#  -Wall...:     warning level\r
+#  -Wa,...:      tell GCC to pass this to the assembler.\r
+#    -adhlns...: create assembler listing\r
+CPPFLAGS = -g$(DEBUG)\r
+CPPFLAGS += $(CPPDEFS)\r
+CPPFLAGS += -O$(OPT)\r
+CPPFLAGS += -funsigned-char\r
+CPPFLAGS += -funsigned-bitfields\r
+CPPFLAGS += -fpack-struct\r
+CPPFLAGS += -fshort-enums\r
+CPPFLAGS += -fno-exceptions\r
+CPPFLAGS += -Wall\r
+CFLAGS += -Wundef\r
+#CPPFLAGS += -mshort-calls\r
+#CPPFLAGS += -fno-unit-at-a-time\r
+#CPPFLAGS += -Wstrict-prototypes\r
+#CPPFLAGS += -Wunreachable-code\r
+#CPPFLAGS += -Wsign-compare\r
+CPPFLAGS += -Wa,-adhlns=$(<:%.cpp=$(OBJDIR)/%.lst)\r
+CPPFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))\r
+#CPPFLAGS += $(CSTANDARD)\r
+\r
+\r
+#---------------- Assembler Options ----------------\r
+#  -Wa,...:   tell GCC to pass this to the assembler.\r
+#  -adhlns:   create listing\r
+#  -gstabs:   have the assembler create line number information; note that\r
+#             for use in COFF files, additional information about filenames\r
+#             and function names needs to be present in the assembler source\r
+#             files -- see avr-libc docs [FIXME: not yet described there]\r
+#  -listing-cont-lines: Sets the maximum number of continuation lines of hex \r
+#       dump that will be displayed for a given single line of source input.\r
+ASFLAGS = $(ADEFS) -Wa,-adhlns=$(<:%.S=$(OBJDIR)/%.lst),-gstabs,--listing-cont-lines=100\r
+\r
+\r
+#---------------- Library Options ----------------\r
+# Minimalistic printf version\r
+PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min\r
+\r
+# Floating point printf version (requires MATH_LIB = -lm below)\r
+PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt\r
+\r
+# If this is left blank, then it will use the Standard printf version.\r
+PRINTF_LIB = \r
+#PRINTF_LIB = $(PRINTF_LIB_MIN)\r
+#PRINTF_LIB = $(PRINTF_LIB_FLOAT)\r
+\r
+\r
+# Minimalistic scanf version\r
+SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min\r
+\r
+# Floating point + %[ scanf version (requires MATH_LIB = -lm below)\r
+SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt\r
+\r
+# If this is left blank, then it will use the Standard scanf version.\r
+SCANF_LIB = \r
+#SCANF_LIB = $(SCANF_LIB_MIN)\r
+#SCANF_LIB = $(SCANF_LIB_FLOAT)\r
+\r
+\r
+MATH_LIB = -lm\r
+\r
+\r
+# List any extra directories to look for libraries here.\r
+#     Each directory must be seperated by a space.\r
+#     Use forward slashes for directory separators.\r
+#     For a directory that has spaces, enclose it in quotes.\r
+EXTRALIBDIRS = \r
+\r
+\r
+\r
+#---------------- External Memory Options ----------------\r
+\r
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),\r
+# used for variables (.data/.bss) and heap (malloc()).\r
+#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff\r
+\r
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),\r
+# only used for heap (malloc()).\r
+#EXTMEMOPTS = -Wl,--section-start,.data=0x801100,--defsym=__heap_end=0x80ffff\r
+\r
+EXTMEMOPTS =\r
+\r
+\r
+\r
+#---------------- Linker Options ----------------\r
+#  -Wl,...:     tell GCC to pass this to linker.\r
+#    -Map:      create map file\r
+#    --cref:    add cross reference to  map file\r
+LDFLAGS = -Wl,-Map=$(TARGET).map,--cref\r
+LDFLAGS += -Wl,--relax \r
+LDFLAGS += -Wl,--gc-sections\r
+LDFLAGS += $(EXTMEMOPTS)\r
+LDFLAGS += $(patsubst %,-L%,$(EXTRALIBDIRS))\r
+LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)\r
+#LDFLAGS += -T linker_script.x\r
+\r
+\r
+\r
+#---------------- Programming Options (avrdude) ----------------\r
+\r
+# Programming hardware: alf avr910 avrisp bascom bsd \r
+# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500\r
+#\r
+# Type: avrdude -c ?\r
+# to get a full listing.\r
+#\r
+AVRDUDE_PROGRAMMER = jtagmkII\r
+\r
+# com1 = serial port. Use lpt1 to connect to parallel port.\r
+AVRDUDE_PORT = usb\r
+\r
+AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex\r
+#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep\r
+\r
+\r
+# Uncomment the following if you want avrdude's erase cycle counter.\r
+# Note that this counter needs to be initialized first using -Yn,\r
+# see avrdude manual.\r
+#AVRDUDE_ERASE_COUNTER = -y\r
+\r
+# Uncomment the following if you do /not/ wish a verification to be\r
+# performed after programming the device.\r
+#AVRDUDE_NO_VERIFY = -V\r
+\r
+# Increase verbosity level.  Please use this when submitting bug\r
+# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude> \r
+# to submit bug reports.\r
+#AVRDUDE_VERBOSE = -v -v\r
+\r
+AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)\r
+AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY)\r
+AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE)\r
+AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER)\r
+\r
+\r
+\r
+#---------------- Debugging Options ----------------\r
+\r
+# For simulavr only - target MCU frequency.\r
+DEBUG_MFREQ = $(F_CPU)\r
+\r
+# Set the DEBUG_UI to either gdb or insight.\r
+# DEBUG_UI = gdb\r
+DEBUG_UI = insight\r
+\r
+# Set the debugging back-end to either avarice, simulavr.\r
+DEBUG_BACKEND = avarice\r
+#DEBUG_BACKEND = simulavr\r
+\r
+# GDB Init Filename.\r
+GDBINIT_FILE = __avr_gdbinit\r
+\r
+# When using avarice settings for the JTAG\r
+JTAG_DEV = /dev/com1\r
+\r
+# Debugging port used to communicate between GDB / avarice / simulavr.\r
+DEBUG_PORT = 4242\r
+\r
+# Debugging host used to communicate between GDB / avarice / simulavr, normally\r
+#     just set to localhost unless doing some sort of crazy debugging when \r
+#     avarice is running on a different computer.\r
+DEBUG_HOST = localhost\r
+\r
+\r
+\r
+#============================================================================\r
+\r
+\r
+# Define programs and commands.\r
+SHELL = sh\r
+CC = avr-gcc\r
+OBJCOPY = avr-objcopy\r
+OBJDUMP = avr-objdump\r
+SIZE = avr-size\r
+AR = avr-ar rcs\r
+NM = avr-nm\r
+AVRDUDE = avrdude\r
+REMOVE = rm -f\r
+REMOVEDIR = rm -rf\r
+COPY = cp\r
+WINSHELL = cmd\r
+\r
+# Define Messages\r
+# English\r
+MSG_ERRORS_NONE = Errors: none\r
+MSG_BEGIN = -------- begin --------\r
+MSG_END = --------  end  --------\r
+MSG_SIZE_BEFORE = Size before: \r
+MSG_SIZE_AFTER = Size after:\r
+MSG_COFF = Converting to AVR COFF:\r
+MSG_EXTENDED_COFF = Converting to AVR Extended COFF:\r
+MSG_FLASH = Creating load file for Flash:\r
+MSG_EEPROM = Creating load file for EEPROM:\r
+MSG_EXTENDED_LISTING = Creating Extended Listing:\r
+MSG_SYMBOL_TABLE = Creating Symbol Table:\r
+MSG_LINKING = Linking:\r
+MSG_COMPILING = Compiling C:\r
+MSG_COMPILING_CPP = Compiling C++:\r
+MSG_ASSEMBLING = Assembling:\r
+MSG_CLEANING = Cleaning project:\r
+MSG_CREATING_LIBRARY = Creating library:\r
+\r
+\r
+\r
+\r
+# Define all object files.\r
+OBJ = $(SRC:%.c=$(OBJDIR)/%.o) $(CPPSRC:%.cpp=$(OBJDIR)/%.o) $(ASRC:%.S=$(OBJDIR)/%.o) \r
+\r
+# Define all listing files.\r
+LST = $(SRC:%.c=$(OBJDIR)/%.lst) $(CPPSRC:%.cpp=$(OBJDIR)/%.lst) $(ASRC:%.S=$(OBJDIR)/%.lst) \r
+\r
+\r
+# Compiler flags to generate dependency files.\r
+GENDEPFLAGS = -MMD -MP -MF .dep/$(@F).d\r
+\r
+\r
+# Combine all necessary flags and optional flags.\r
+# Add target processor to flags.\r
+ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS)\r
+ALL_CPPFLAGS = -mmcu=$(MCU) -I. -x c++ $(CPPFLAGS) $(GENDEPFLAGS)\r
+ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)\r
+\r
+\r
+\r
+\r
+\r
+# Default target.\r
+all: begin gccversion sizebefore build checkhooks checklibmode checkboard sizeafter end\r
+\r
+# Change the build target to build a HEX file or a library.\r
+build: elf hex eep lss sym\r
+#build: lib\r
+\r
+\r
+elf: $(TARGET).elf\r
+hex: $(TARGET).hex\r
+eep: $(TARGET).eep\r
+lss: $(TARGET).lss\r
+sym: $(TARGET).sym\r
+LIBNAME=lib$(TARGET).a\r
+lib: $(LIBNAME)\r
+\r
+\r
+\r
+# Eye candy.\r
+# AVR Studio 3.x does not check make's exit code but relies on\r
+# the following magic strings to be generated by the compile job.\r
+begin:\r
+       @echo\r
+       @echo $(MSG_BEGIN)\r
+\r
+end:\r
+       @echo $(MSG_END)\r
+       @echo\r
+\r
+\r
+# Display size of file.\r
+HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex\r
+ELFSIZE = $(SIZE) $(MCU_FLAG) $(FORMAT_FLAG) $(TARGET).elf\r
+MCU_FLAG = $(shell $(SIZE) --help | grep -- --mcu > /dev/null && echo --mcu=$(MCU) )\r
+FORMAT_FLAG = $(shell $(SIZE) --help | grep -- --format=.*avr > /dev/null && echo --format=avr )\r
+\r
+sizebefore:\r
+       @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \\r
+       2>/dev/null; echo; fi\r
+\r
+sizeafter:\r
+       @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \\r
+       2>/dev/null; echo; fi\r
+\r
+checkhooks: build\r
+       @echo\r
+       @echo ------- Unhooked LUFA Events -------\r
+       @$(shell) (grep -s '^EVENT_.*LUFA/.*\\.o' $(TARGET).map | \\r
+                  cut -d' ' -f1 | cut -d'_' -f2- | grep ".*") || \\r
+                          echo "(None)"\r
+       @echo ------------------------------------\r
+\r
+checklibmode:\r
+       @echo\r
+       @echo ----------- Library Mode -----------\r
+       @$(shell) ($(CC) $(ALL_CFLAGS) -E -dM - < /dev/null \\r
+                 | grep 'USB_\(DEVICE\|HOST\)_ONLY' | cut -d' ' -f2 | grep ".*") \\r
+                 || echo "No specific mode (both device and host mode allowable)."\r
+       @echo ------------------------------------\r
+\r
+checkboard:\r
+       @echo\r
+       @echo ---------- Selected Board ----------\r
+       @echo Selected board model is $(BOARD).\r
+       @echo ------------------------------------\r
+       \r
+# Display compiler version information.\r
+gccversion : \r
+       @$(CC) --version\r
+\r
+\r
+\r
+# Program the device.  \r
+program: $(TARGET).hex $(TARGET).eep\r
+       $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)\r
+\r
+flip: $(TARGET).hex\r
+       batchisp -hardware usb -device $(MCU) -operation erase f\r
+       batchisp -hardware usb -device $(MCU) -operation loadbuffer $(TARGET).hex program\r
+       batchisp -hardware usb -device $(MCU) -operation start reset 0\r
+\r
+dfu: $(TARGET).hex\r
+       dfu-programmer $(MCU) erase\r
+       dfu-programmer $(MCU) flash --debug 1 $(TARGET).hex\r
+       dfu-programmer $(MCU) reset\r
+\r
+flip-ee: $(TARGET).hex $(TARGET).eep\r
+       copy $(TARGET).eep $(TARGET)eep.hex\r
+       batchisp -hardware usb -device $(MCU) -operation memory EEPROM erase\r
+       batchisp -hardware usb -device $(MCU) -operation memory EEPROM loadbuffer $(TARGET)eep.hex program\r
+       batchisp -hardware usb -device $(MCU) -operation start reset 0\r
+\r
+dfu-ee: $(TARGET).hex $(TARGET).eep\r
+       dfu-programmer $(MCU) flash-eeprom --debug 1 --suppress-bootloader-mem $(TARGET).eep\r
+       dfu-programmer $(MCU) reset\r
+\r
+\r
+# Generate avr-gdb config/init file which does the following:\r
+#     define the reset signal, load the target file, connect to target, and set \r
+#     a breakpoint at main().\r
+gdb-config: \r
+       @$(REMOVE) $(GDBINIT_FILE)\r
+       @echo define reset >> $(GDBINIT_FILE)\r
+       @echo SIGNAL SIGHUP >> $(GDBINIT_FILE)\r
+       @echo end >> $(GDBINIT_FILE)\r
+       @echo file $(TARGET).elf >> $(GDBINIT_FILE)\r
+       @echo target remote $(DEBUG_HOST):$(DEBUG_PORT)  >> $(GDBINIT_FILE)\r
+ifeq ($(DEBUG_BACKEND),simulavr)\r
+       @echo load  >> $(GDBINIT_FILE)\r
+endif\r
+       @echo break main >> $(GDBINIT_FILE)\r
+\r
+debug: gdb-config $(TARGET).elf\r
+ifeq ($(DEBUG_BACKEND), avarice)\r
+       @echo Starting AVaRICE - Press enter when "waiting to connect" message displays.\r
+       @$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \\r
+       $(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT)\r
+       @$(WINSHELL) /c pause\r
+\r
+else\r
+       @$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \\r
+       $(DEBUG_MFREQ) --port $(DEBUG_PORT)\r
+endif\r
+       @$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE)\r
+\r
+\r
+\r
+\r
+# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.\r
+COFFCONVERT = $(OBJCOPY) --debugging\r
+COFFCONVERT += --change-section-address .data-0x800000\r
+COFFCONVERT += --change-section-address .bss-0x800000\r
+COFFCONVERT += --change-section-address .noinit-0x800000\r
+COFFCONVERT += --change-section-address .eeprom-0x810000\r
+\r
+\r
+\r
+coff: $(TARGET).elf\r
+       @echo\r
+       @echo $(MSG_COFF) $(TARGET).cof\r
+       $(COFFCONVERT) -O coff-avr $< $(TARGET).cof\r
+\r
+\r
+extcoff: $(TARGET).elf\r
+       @echo\r
+       @echo $(MSG_EXTENDED_COFF) $(TARGET).cof\r
+       $(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof\r
+\r
+\r
+\r
+# Create final output files (.hex, .eep) from ELF output file.\r
+%.hex: %.elf\r
+       @echo\r
+       @echo $(MSG_FLASH) $@\r
+       $(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@\r
+\r
+%.eep: %.elf\r
+       @echo\r
+       @echo $(MSG_EEPROM) $@\r
+       -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \\r
+       --change-section-lma .eeprom=0 --no-change-warnings -O $(FORMAT) $< $@ || exit 0\r
+\r
+# Create extended listing file from ELF output file.\r
+%.lss: %.elf\r
+       @echo\r
+       @echo $(MSG_EXTENDED_LISTING) $@\r
+       $(OBJDUMP) -h -z -S $< > $@\r
+\r
+# Create a symbol table from ELF output file.\r
+%.sym: %.elf\r
+       @echo\r
+       @echo $(MSG_SYMBOL_TABLE) $@\r
+       $(NM) -n $< > $@\r
+\r
+\r
+\r
+# Create library from object files.\r
+.SECONDARY : $(TARGET).a\r
+.PRECIOUS : $(OBJ)\r
+%.a: $(OBJ)\r
+       @echo\r
+       @echo $(MSG_CREATING_LIBRARY) $@\r
+       $(AR) $@ $(OBJ)\r
+\r
+\r
+# Link: create ELF output file from object files.\r
+.SECONDARY : $(TARGET).elf\r
+.PRECIOUS : $(OBJ)\r
+%.elf: $(OBJ)\r
+       @echo\r
+       @echo $(MSG_LINKING) $@\r
+       $(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)\r
+\r
+\r
+# Compile: create object files from C source files.\r
+$(OBJDIR)/%.o : %.c\r
+       @echo\r
+       @echo $(MSG_COMPILING) $<\r
+       $(CC) -c $(ALL_CFLAGS) $< -o $@ \r
+\r
+\r
+# Compile: create object files from C++ source files.\r
+$(OBJDIR)/%.o : %.cpp\r
+       @echo\r
+       @echo $(MSG_COMPILING_CPP) $<\r
+       $(CC) -c $(ALL_CPPFLAGS) $< -o $@ \r
+\r
+\r
+# Compile: create assembler files from C source files.\r
+%.s : %.c\r
+       $(CC) -S $(ALL_CFLAGS) $< -o $@\r
+\r
+\r
+# Compile: create assembler files from C++ source files.\r
+%.s : %.cpp\r
+       $(CC) -S $(ALL_CPPFLAGS) $< -o $@\r
+\r
+\r
+# Assemble: create object files from assembler source files.\r
+$(OBJDIR)/%.o : %.S\r
+       @echo\r
+       @echo $(MSG_ASSEMBLING) $<\r
+       $(CC) -c $(ALL_ASFLAGS) $< -o $@\r
+\r
+\r
+# Create preprocessed source for use in sending a bug report.\r
+%.i : %.c\r
+       $(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ \r
+       \r
+\r
+# Target: clean project.\r
+clean: begin clean_list clean_binary end\r
+\r
+clean_binary:\r
+       $(REMOVE) $(TARGET).hex\r
+       \r
+clean_list:\r
+       @echo $(MSG_CLEANING)\r
+       $(REMOVE) $(TARGET).eep\r
+       $(REMOVE) $(TARGET)eep.hex\r
+       $(REMOVE) $(TARGET).cof\r
+       $(REMOVE) $(TARGET).elf\r
+       $(REMOVE) $(TARGET).map\r
+       $(REMOVE) $(TARGET).sym\r
+       $(REMOVE) $(TARGET).lss\r
+       $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.o)\r
+       $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.lst)\r
+       $(REMOVE) $(SRC:.c=.s)\r
+       $(REMOVE) $(SRC:.c=.d)\r
+       $(REMOVE) $(SRC:.c=.i)\r
+       $(REMOVEDIR) .dep\r
+\r
+\r
+doxygen:\r
+       @echo Generating Project Documentation...\r
+       @doxygen Doxygen.conf\r
+       @echo Documentation Generation Complete.\r
+\r
+clean_doxygen:\r
+       rm -rf Documentation\r
+\r
+# Create object files directory\r
+$(shell mkdir $(OBJDIR) 2>/dev/null)\r
+\r
+\r
+# Include the dependency files.\r
+-include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)\r
+\r
+\r
+# Listing of phony targets.\r
+.PHONY : all checkhooks checklibmode checkboard   \\r
+begin finish end sizebefore sizeafter gccversion  \\r
+build elf hex eep lss sym coff extcoff clean      \\r
+clean_list clean_binary program debug gdb-config  \\r
+doxygen dfu flip flip-ee dfu-ee
\ No newline at end of file
diff --git a/Demos/Device/LowLevel/KeyboardMouse/Descriptors.c b/Demos/Device/LowLevel/KeyboardMouse/Descriptors.c
new file mode 100644 (file)
index 0000000..145708d
--- /dev/null
@@ -0,0 +1,354 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+  Copyright 2009  Denver Gingerich (denver [at] ossguy [dot] com)\r
+  \r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  USB Device Descriptors, for library use when in USB device mode. Descriptors are special \r
+ *  computer-readable structures which the host requests upon device enumeration, to determine\r
+ *  the device's capabilities and functions.  \r
+ */\r
+\r
+#include "Descriptors.h"\r
+\r
+/** HID class report descriptor. This is a special descriptor constructed with values from the\r
+ *  USBIF HID class specification to describe the reports and capabilities of the HID device. This\r
+ *  descriptor is parsed by the host and its contents used to determine what data (and in what encoding)\r
+ *  the device will send, and what it may be sent back from the host. Refer to the HID specification for\r
+ *  more details on HID report descriptors.\r
+ *\r
+ *  This descriptor describes the mouse HID interface's report structure.\r
+ */\r
+USB_Descriptor_HIDReport_Datatype_t PROGMEM MouseReport[] =\r
+{\r
+       0x05, 0x01,          /* Usage Page (Generic Desktop)                    */\r
+       0x09, 0x02,          /* Usage (Mouse)                                   */\r
+       0xA1, 0x01,          /* Collection (Application)                        */\r
+       0x09, 0x01,          /*   Usage (Pointer)                               */\r
+       0xA1, 0x00,          /*   Collection (Physical)                         */\r
+       0x95, 0x03,          /*     Report Count (3)                            */\r
+       0x75, 0x01,          /*     Report Size (1)                             */\r
+       0x05, 0x09,          /*     Usage Page (Button)                         */\r
+       0x19, 0x01,          /*     Usage Minimum (Button 1)                    */\r
+       0x29, 0x03,          /*     Usage Maximum (Button 3)                    */\r
+       0x15, 0x00,          /*     Logical Minimum (0)                         */\r
+       0x25, 0x01,          /*     Logical Maximum (1)                         */\r
+       0x81, 0x02,          /*     Input (Data, Variable, Absolute)            */\r
+       0x95, 0x01,          /*     Report Count (1)                            */\r
+       0x75, 0x05,          /*     Report Size (5)                             */\r
+       0x81, 0x01,          /*     Input (Constant)                            */\r
+       0x75, 0x08,          /*     Report Size (8)                             */\r
+       0x95, 0x02,          /*     Report Count (2)                            */\r
+       0x05, 0x01,          /*     Usage Page (Generic Desktop Control)        */\r
+       0x09, 0x30,          /*     Usage X                                     */\r
+       0x09, 0x31,          /*     Usage Y                                     */\r
+       0x15, 0x81,          /*     Logical Minimum (-127)                      */\r
+       0x25, 0x7F,          /*     Logical Maximum (127)                       */\r
+       0x81, 0x06,          /*     Input (Data, Variable, Relative)            */\r
+       0xC0,                /*   End Collection                                */\r
+       0xC0,                /* End Collection                                  */\r
+};\r
+\r
+/** Same as the MouseReport structure, but defines the keyboard HID interface's report structure. */\r
+USB_Descriptor_HIDReport_Datatype_t PROGMEM KeyboardReport[] =\r
+{\r
+       0x05, 0x01,          /* Usage Page (Generic Desktop)                    */\r
+       0x09, 0x06,          /* Usage (Keyboard)                                */\r
+       0xa1, 0x01,          /* Collection (Application)                        */\r
+       0x75, 0x01,          /*   Report Size (1)                               */\r
+       0x95, 0x08,          /*   Report Count (8)                              */\r
+       0x05, 0x07,          /*   Usage Page (Key Codes)                        */\r
+       0x19, 0xe0,          /*   Usage Minimum (Keyboard LeftControl)          */\r
+       0x29, 0xe7,          /*   Usage Maximum (Keyboard Right GUI)            */\r
+       0x15, 0x00,          /*   Logical Minimum (0)                           */\r
+       0x25, 0x01,          /*   Logical Maximum (1)                           */\r
+       0x81, 0x02,          /*   Input (Data, Variable, Absolute)              */\r
+       0x95, 0x01,          /*   Report Count (1)                              */\r
+       0x75, 0x08,          /*   Report Size (8)                               */\r
+       0x81, 0x03,          /*   Input (Const, Variable, Absolute)             */\r
+       0x95, 0x05,          /*   Report Count (5)                              */\r
+       0x75, 0x01,          /*   Report Size (1)                               */\r
+       0x05, 0x08,          /*   Usage Page (LEDs)                             */\r
+       0x19, 0x01,          /*   Usage Minimum (Num Lock)                      */\r
+       0x29, 0x05,          /*   Usage Maximum (Kana)                          */\r
+       0x91, 0x02,          /*   Output (Data, Variable, Absolute)             */\r
+       0x95, 0x01,          /*   Report Count (1)                              */\r
+       0x75, 0x03,          /*   Report Size (3)                               */\r
+       0x91, 0x03,          /*   Output (Const, Variable, Absolute)            */\r
+       0x95, 0x06,          /*   Report Count (6)                              */\r
+       0x75, 0x08,          /*   Report Size (8)                               */\r
+       0x15, 0x00,          /*   Logical Minimum (0)                           */\r
+       0x25, 0x65,          /*   Logical Maximum (101)                         */\r
+       0x05, 0x07,          /*   Usage Page (Keyboard)                         */\r
+       0x19, 0x00,          /*   Usage Minimum (Reserved (no event indicated)) */\r
+       0x29, 0x65,          /*   Usage Maximum (Keyboard Application)          */\r
+       0x81, 0x00,          /*   Input (Data, Array, Absolute)                 */\r
+       0xC0                 /* End Collection                                  */\r
+};\r
+\r
+/** Device descriptor structure. This descriptor, located in FLASH memory, describes the overall\r
+ *  device characteristics, including the supported USB version, control endpoint size and the\r
+ *  number of device configurations. The descriptor is read out by the USB host when the enumeration\r
+ *  process begins.\r
+ */\r
+USB_Descriptor_Device_t PROGMEM DeviceDescriptor =\r
+{\r
+       .Header                 = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device},\r
+               \r
+       .USBSpecification       = VERSION_BCD(01.10),\r
+       .Class                  = 0x00,\r
+       .SubClass               = 0x00,\r
+       .Protocol               = 0x00,\r
+                               \r
+       .Endpoint0Size          = FIXED_CONTROL_ENDPOINT_SIZE,\r
+               \r
+       .VendorID               = 0x03EB,\r
+       .ProductID              = 0x204D,\r
+       .ReleaseNumber          = 0x0000,\r
+               \r
+       .ManufacturerStrIndex   = 0x01,\r
+       .ProductStrIndex        = 0x02,\r
+       .SerialNumStrIndex      = NO_DESCRIPTOR,\r
+               \r
+       .NumberOfConfigurations = 1\r
+};\r
+\r
+/** Configuration descriptor structure. This descriptor, located in FLASH memory, describes the usage\r
+ *  of the device in one of its supported configurations, including information about any device interfaces\r
+ *  and endpoints. The descriptor is read out by the USB host during the enumeration process when selecting\r
+ *  a configuration so that the host may correctly communicate with the USB device.\r
+ */\r
+USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =\r
+{\r
+       .Config = \r
+               {\r
+                       .Header                 = {.Size = sizeof(USB_Descriptor_Configuration_Header_t), .Type = DTYPE_Configuration},\r
+\r
+                       .TotalConfigurationSize = sizeof(USB_Descriptor_Configuration_t),\r
+                       .TotalInterfaces        = 2,\r
+                               \r
+                       .ConfigurationNumber    = 1,\r
+                       .ConfigurationStrIndex  = NO_DESCRIPTOR,\r
+                               \r
+                       .ConfigAttributes       = (USB_CONFIG_ATTR_BUSPOWERED | USB_CONFIG_ATTR_SELFPOWERED),\r
+                       \r
+                       .MaxPowerConsumption    = USB_CONFIG_POWER_MA(100)\r
+               },\r
+               \r
+       .KeyboardInterface = \r
+               {\r
+                       .Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},\r
+\r
+                       .InterfaceNumber        = 0x00,\r
+                       .AlternateSetting       = 0x00,\r
+                       \r
+                       .TotalEndpoints         = 2,\r
+                               \r
+                       .Class                  = 0x03,\r
+                       .SubClass               = 0x01,\r
+                       .Protocol               = 0x01,\r
+                               \r
+                       .InterfaceStrIndex      = NO_DESCRIPTOR\r
+               },\r
+\r
+       .KeyboardHID = \r
+               {  \r
+                       .Header                 = {.Size = sizeof(USB_Descriptor_HID_t), .Type = DTYPE_HID},\r
+                       \r
+                       .HIDSpec                = VERSION_BCD(01.11),\r
+                       .CountryCode            = 0x00,\r
+                       .TotalReportDescriptors = 1,\r
+                       .HIDReportType          = DTYPE_Report,\r
+                       .HIDReportLength        = sizeof(KeyboardReport)\r
+               },\r
+               \r
+       .KeyboardInEndpoint = \r
+               {\r
+                       .Header                 = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},\r
+\r
+                       .EndpointAddress        = (ENDPOINT_DESCRIPTOR_DIR_IN | KEYBOARD_IN_EPNUM),\r
+                       .Attributes             = EP_TYPE_INTERRUPT,\r
+                       .EndpointSize           = HID_EPSIZE,\r
+                       .PollingIntervalMS      = 0x02\r
+               },\r
+\r
+       .KeyboardOutEndpoint = \r
+               {\r
+                       .Header                 = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},\r
+\r
+                       .EndpointAddress        = (ENDPOINT_DESCRIPTOR_DIR_OUT | KEYBOARD_OUT_EPNUM),\r
+                       .Attributes             = EP_TYPE_INTERRUPT,\r
+                       .EndpointSize           = HID_EPSIZE,\r
+                       .PollingIntervalMS      = 0x02\r
+               },\r
+\r
+       .MouseInterface = \r
+               {\r
+                       .Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},\r
+\r
+                       .InterfaceNumber        = 0x01,\r
+                       .AlternateSetting       = 0x00,\r
+                       \r
+                       .TotalEndpoints         = 1,\r
+                               \r
+                       .Class                  = 0x03,\r
+                       .SubClass               = 0x01,\r
+                       .Protocol               = 0x02,\r
+                               \r
+                       .InterfaceStrIndex      = NO_DESCRIPTOR\r
+               },\r
+\r
+       .MouseHID = \r
+               {  \r
+                       .Header                 = {.Size = sizeof(USB_Descriptor_HID_t), .Type = DTYPE_HID},\r
+                       \r
+                       .HIDSpec                = VERSION_BCD(01.11),\r
+                       .CountryCode            = 0x00,\r
+                       .TotalReportDescriptors = 1,\r
+                       .HIDReportType          = DTYPE_Report,\r
+                       .HIDReportLength        = sizeof(MouseReport)\r
+               },\r
+               \r
+       .MouseInEndpoint = \r
+               {\r
+                       .Header                 = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},\r
+\r
+                       .EndpointAddress        = (ENDPOINT_DESCRIPTOR_DIR_IN | MOUSE_IN_EPNUM),\r
+                       .Attributes             = EP_TYPE_INTERRUPT,\r
+                       .EndpointSize           = HID_EPSIZE,\r
+                       .PollingIntervalMS      = 0x02\r
+               }\r
+};\r
+\r
+/** Language descriptor structure. This descriptor, located in FLASH memory, is returned when the host requests\r
+ *  the string descriptor with index 0 (the first index). It is actually an array of 16-bit integers, which indicate\r
+ *  via the language ID table available at USB.org what languages the device supports for its string descriptors.\r
+ */\r
+USB_Descriptor_String_t PROGMEM LanguageString =\r
+{\r
+       .Header                 = {.Size = USB_STRING_LEN(1), .Type = DTYPE_String},\r
+               \r
+       .UnicodeString          = {LANGUAGE_ID_ENG}\r
+};\r
+\r
+/** Manufacturer descriptor string. This is a Unicode string containing the manufacturer's details in human readable\r
+ *  form, and is read out upon request by the host when the appropriate string ID is requested, listed in the Device\r
+ *  Descriptor.\r
+ */\r
+USB_Descriptor_String_t PROGMEM ManufacturerString =\r
+{\r
+       .Header                 = {.Size = USB_STRING_LEN(11), .Type = DTYPE_String},\r
+               \r
+       .UnicodeString          = L"Dean Camera"\r
+};\r
+\r
+/** Product descriptor string. This is a Unicode string containing the product's details in human readable form,\r
+ *  and is read out upon request by the host when the appropriate string ID is requested, listed in the Device\r
+ *  Descriptor.\r
+ */\r
+USB_Descriptor_String_t PROGMEM ProductString =\r
+{\r
+       .Header                 = {.Size = USB_STRING_LEN(28), .Type = DTYPE_String},\r
+               \r
+       .UnicodeString          = L"LUFA Mouse and Keyboard Demo"\r
+};\r
+\r
+/** This function is called by the library when in device mode, and must be overridden (see library "USB Descriptors"\r
+ *  documentation) by the application code so that the address and size of a requested descriptor can be given\r
+ *  to the USB library. When the device receives a Get Descriptor request on the control endpoint, this function\r
+ *  is called so that the descriptor details can be passed back and the appropriate descriptor sent back to the\r
+ *  USB host.\r
+ */\r
+uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
+{\r
+       const uint8_t  DescriptorType   = (wValue >> 8);\r
+       const uint8_t  DescriptorNumber = (wValue & 0xFF);\r
+\r
+       void*    Address = NULL;\r
+       uint16_t Size    = NO_DESCRIPTOR;\r
+\r
+       switch (DescriptorType)\r
+       {\r
+               case DTYPE_Device: \r
+                       Address = (void*)&DeviceDescriptor;\r
+                       Size    = sizeof(USB_Descriptor_Device_t);\r
+                       break;\r
+               case DTYPE_Configuration: \r
+                       Address = (void*)&ConfigurationDescriptor;\r
+                       Size    = sizeof(USB_Descriptor_Configuration_t);\r
+                       break;\r
+               case DTYPE_String: \r
+                       switch (DescriptorNumber)\r
+                       {\r
+                               case 0x00: \r
+                                       Address = (void*)&LanguageString;\r
+                                       Size    = pgm_read_byte(&LanguageString.Header.Size);\r
+                                       break;\r
+                               case 0x01: \r
+                                       Address = (void*)&ManufacturerString;\r
+                                       Size    = pgm_read_byte(&ManufacturerString.Header.Size);\r
+                                       break;\r
+                               case 0x02: \r
+                                       Address = (void*)&ProductString;\r
+                                       Size    = pgm_read_byte(&ProductString.Header.Size);\r
+                                       break;\r
+                       }\r
+                       \r
+                       break;\r
+               case DTYPE_HID: \r
+                       if (!(wIndex))\r
+                       {\r
+                               Address = (void*)&ConfigurationDescriptor.KeyboardHID;\r
+                               Size    = sizeof(USB_Descriptor_HID_t);\r
+                       }\r
+                       else\r
+                       {\r
+                               Address = (void*)&ConfigurationDescriptor.MouseHID;\r
+                               Size    = sizeof(USB_Descriptor_HID_t);                 \r
+                       }\r
+                       break;\r
+               case DTYPE_Report: \r
+                       if (!(wIndex))\r
+                       {\r
+                               Address = (void*)&KeyboardReport;\r
+                               Size    = sizeof(KeyboardReport);\r
+                       }\r
+                       else\r
+                       {                       \r
+                               Address = (void*)&MouseReport;\r
+                               Size    = sizeof(MouseReport);\r
+                       }\r
+                       \r
+                       break;\r
+       }\r
+       \r
+       *DescriptorAddress = Address;\r
+       return Size;\r
+}\r
diff --git a/Demos/Device/LowLevel/KeyboardMouse/Descriptors.h b/Demos/Device/LowLevel/KeyboardMouse/Descriptors.h
new file mode 100644 (file)
index 0000000..43c345a
--- /dev/null
@@ -0,0 +1,104 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+  Copyright 2009  Denver Gingerich (denver [at] ossguy [dot] com)\r
+  \r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  Header file for Descriptors.c.\r
+ */\r
\r
+#ifndef _DESCRIPTORS_H_\r
+#define _DESCRIPTORS_H_\r
+\r
+       /* Includes: */\r
+               #include <LUFA/Drivers/USB/USB.h>\r
+\r
+               #include <avr/pgmspace.h>\r
+\r
+       /* Type Defines: */\r
+               /** Type define for the HID class specific HID descriptor, to describe the HID device's specifications. Refer to the HID\r
+                *  specification for details on the structure elements.\r
+                */\r
+               typedef struct\r
+               {\r
+                       USB_Descriptor_Header_t               Header;\r
+                               \r
+                       uint16_t                              HIDSpec;\r
+                       uint8_t                               CountryCode;\r
+               \r
+                       uint8_t                               TotalReportDescriptors;\r
+\r
+                       uint8_t                               HIDReportType;\r
+                       uint16_t                              HIDReportLength;\r
+               } USB_Descriptor_HID_t;\r
+\r
+               /** Type define for the data type used to store HID report descriptor elements. */\r
+               typedef uint8_t USB_Descriptor_HIDReport_Datatype_t;\r
+\r
+               /** Type define for the device configuration descriptor structure. This must be defined in the\r
+                *  application code, as the configuration descriptor contains several sub-descriptors which\r
+                *  vary between devices, and which describe the device's usage to the host.\r
+                */\r
+               typedef struct\r
+               {\r
+                       USB_Descriptor_Configuration_Header_t Config;\r
+                       USB_Descriptor_Interface_t            KeyboardInterface;\r
+                       USB_Descriptor_HID_t                  KeyboardHID;\r
+               USB_Descriptor_Endpoint_t             KeyboardInEndpoint;\r
+               USB_Descriptor_Endpoint_t             KeyboardOutEndpoint;\r
+                       USB_Descriptor_Interface_t            MouseInterface;\r
+                       USB_Descriptor_HID_t                  MouseHID;\r
+               USB_Descriptor_Endpoint_t             MouseInEndpoint;\r
+               } USB_Descriptor_Configuration_t;\r
+                                       \r
+       /* Macros: */\r
+               /** Endpoint number of the Keyboard HID reporting IN endpoint. */\r
+               #define KEYBOARD_IN_EPNUM         1\r
+\r
+               /** Endpoint number of the Keyboard HID reporting OUT endpoint. */\r
+               #define KEYBOARD_OUT_EPNUM        2\r
+\r
+               /** Endpoint number of the Mouse HID reporting IN endpoint. */\r
+               #define MOUSE_IN_EPNUM            3\r
+\r
+               /** Size in bytes of each of the HID reporting IN and OUT endpoints. */\r
+               #define HID_EPSIZE                8\r
+\r
+               /** Descriptor header type value, to indicate a HID class HID descriptor. */\r
+               #define DTYPE_HID                 0x21\r
+               \r
+               /** Descriptor header type value, to indicate a HID class HID report descriptor. */\r
+               #define DTYPE_Report              0x22\r
+\r
+       /* Function Prototypes: */\r
+               uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
+                                                                                       ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);\r
+\r
+#endif\r
diff --git a/Demos/Device/LowLevel/KeyboardMouse/Doxygen.conf b/Demos/Device/LowLevel/KeyboardMouse/Doxygen.conf
new file mode 100644 (file)
index 0000000..1291685
--- /dev/null
@@ -0,0 +1,1485 @@
+# Doxyfile 1.5.7.1\r
+\r
+# This file describes the settings to be used by the documentation system\r
+# doxygen (www.doxygen.org) for a project\r
+#\r
+# All text after a hash (#) is considered a comment and will be ignored\r
+# The format is:\r
+#       TAG = value [value, ...]\r
+# For lists items can also be appended using:\r
+#       TAG += value [value, ...]\r
+# Values that contain spaces should be placed between quotes (" ")\r
+\r
+#---------------------------------------------------------------------------\r
+# Project related configuration options\r
+#---------------------------------------------------------------------------\r
+\r
+# This tag specifies the encoding used for all characters in the config file \r
+# that follow. The default is UTF-8 which is also the encoding used for all \r
+# text before the first occurrence of this tag. Doxygen uses libiconv (or the \r
+# iconv built into libc) for the transcoding. See \r
+# http://www.gnu.org/software/libiconv for the list of possible encodings.\r
+\r
+DOXYFILE_ENCODING      = UTF-8\r
+\r
+# The PROJECT_NAME tag is a single word (or a sequence of words surrounded \r
+# by quotes) that should identify the project.\r
+\r
+PROJECT_NAME           = "LUFA Library - Combined Keyboard/Mouse Device Demo"\r
+\r
+# The PROJECT_NUMBER tag can be used to enter a project or revision number. \r
+# This could be handy for archiving the generated documentation or \r
+# if some version control system is used.\r
+\r
+PROJECT_NUMBER         = 0.0.0\r
+\r
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) \r
+# base path where the generated documentation will be put. \r
+# If a relative path is entered, it will be relative to the location \r
+# where doxygen was started. If left blank the current directory will be used.\r
+\r
+OUTPUT_DIRECTORY       = ./Documentation/\r
+\r
+# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create \r
+# 4096 sub-directories (in 2 levels) under the output directory of each output \r
+# format and will distribute the generated files over these directories. \r
+# Enabling this option can be useful when feeding doxygen a huge amount of \r
+# source files, where putting all generated files in the same directory would \r
+# otherwise cause performance problems for the file system.\r
+\r
+CREATE_SUBDIRS         = YES\r
+\r
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all \r
+# documentation generated by doxygen is written. Doxygen will use this \r
+# information to generate all constant output in the proper language. \r
+# The default language is English, other supported languages are: \r
+# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, \r
+# Croatian, Czech, Danish, Dutch, Farsi, Finnish, French, German, Greek, \r
+# Hungarian, Italian, Japanese, Japanese-en (Japanese with English messages), \r
+# Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, Polish, \r
+# Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, Slovene, \r
+# Spanish, Swedish, and Ukrainian.\r
+\r
+OUTPUT_LANGUAGE        = English\r
+\r
+# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will \r
+# include brief member descriptions after the members that are listed in \r
+# the file and class documentation (similar to JavaDoc). \r
+# Set to NO to disable this.\r
+\r
+BRIEF_MEMBER_DESC      = YES\r
+\r
+# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend \r
+# the brief description of a member or function before the detailed description. \r
+# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the \r
+# brief descriptions will be completely suppressed.\r
+\r
+REPEAT_BRIEF           = YES\r
+\r
+# This tag implements a quasi-intelligent brief description abbreviator \r
+# that is used to form the text in various listings. Each string \r
+# in this list, if found as the leading text of the brief description, will be \r
+# stripped from the text and the result after processing the whole list, is \r
+# used as the annotated text. Otherwise, the brief description is used as-is. \r
+# If left blank, the following values are used ("$name" is automatically \r
+# replaced with the name of the entity): "The $name class" "The $name widget" \r
+# "The $name file" "is" "provides" "specifies" "contains" \r
+# "represents" "a" "an" "the"\r
+\r
+ABBREVIATE_BRIEF       = "The $name class" \\r
+                         "The $name widget" \\r
+                         "The $name file" \\r
+                         is \\r
+                         provides \\r
+                         specifies \\r
+                         contains \\r
+                         represents \\r
+                         a \\r
+                         an \\r
+                         the\r
+\r
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then \r
+# Doxygen will generate a detailed section even if there is only a brief \r
+# description.\r
+\r
+ALWAYS_DETAILED_SEC    = NO\r
+\r
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all \r
+# inherited members of a class in the documentation of that class as if those \r
+# members were ordinary class members. Constructors, destructors and assignment \r
+# operators of the base classes will not be shown.\r
+\r
+INLINE_INHERITED_MEMB  = NO\r
+\r
+# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full \r
+# path before files name in the file list and in the header files. If set \r
+# to NO the shortest path that makes the file name unique will be used.\r
+\r
+FULL_PATH_NAMES        = YES\r
+\r
+# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag \r
+# can be used to strip a user-defined part of the path. Stripping is \r
+# only done if one of the specified strings matches the left-hand part of \r
+# the path. The tag can be used to show relative paths in the file list. \r
+# If left blank the directory from which doxygen is run is used as the \r
+# path to strip.\r
+\r
+STRIP_FROM_PATH        = \r
+\r
+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of \r
+# the path mentioned in the documentation of a class, which tells \r
+# the reader which header file to include in order to use a class. \r
+# If left blank only the name of the header file containing the class \r
+# definition is used. Otherwise one should specify the include paths that \r
+# are normally passed to the compiler using the -I flag.\r
+\r
+STRIP_FROM_INC_PATH    = \r
+\r
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter \r
+# (but less readable) file names. This can be useful is your file systems \r
+# doesn't support long names like on DOS, Mac, or CD-ROM.\r
+\r
+SHORT_NAMES            = YES\r
+\r
+# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen \r
+# will interpret the first line (until the first dot) of a JavaDoc-style \r
+# comment as the brief description. If set to NO, the JavaDoc \r
+# comments will behave just like regular Qt-style comments \r
+# (thus requiring an explicit @brief command for a brief description.)\r
+\r
+JAVADOC_AUTOBRIEF      = NO\r
+\r
+# If the QT_AUTOBRIEF tag is set to YES then Doxygen will \r
+# interpret the first line (until the first dot) of a Qt-style \r
+# comment as the brief description. If set to NO, the comments \r
+# will behave just like regular Qt-style comments (thus requiring \r
+# an explicit \brief command for a brief description.)\r
+\r
+QT_AUTOBRIEF           = NO\r
+\r
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen \r
+# treat a multi-line C++ special comment block (i.e. a block of //! or /// \r
+# comments) as a brief description. This used to be the default behaviour. \r
+# The new default is to treat a multi-line C++ comment block as a detailed \r
+# description. Set this tag to YES if you prefer the old behaviour instead.\r
+\r
+MULTILINE_CPP_IS_BRIEF = NO\r
+\r
+# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented \r
+# member inherits the documentation from any documented member that it \r
+# re-implements.\r
+\r
+INHERIT_DOCS           = YES\r
+\r
+# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce \r
+# a new page for each member. If set to NO, the documentation of a member will \r
+# be part of the file/class/namespace that contains it.\r
+\r
+SEPARATE_MEMBER_PAGES  = NO\r
+\r
+# The TAB_SIZE tag can be used to set the number of spaces in a tab. \r
+# Doxygen uses this value to replace tabs by spaces in code fragments.\r
+\r
+TAB_SIZE               = 4\r
+\r
+# This tag can be used to specify a number of aliases that acts \r
+# as commands in the documentation. An alias has the form "name=value". \r
+# For example adding "sideeffect=\par Side Effects:\n" will allow you to \r
+# put the command \sideeffect (or @sideeffect) in the documentation, which \r
+# will result in a user-defined paragraph with heading "Side Effects:". \r
+# You can put \n's in the value part of an alias to insert newlines.\r
+\r
+ALIASES                = \r
+\r
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C \r
+# sources only. Doxygen will then generate output that is more tailored for C. \r
+# For instance, some of the names that are used will be different. The list \r
+# of all members will be omitted, etc.\r
+\r
+OPTIMIZE_OUTPUT_FOR_C  = YES\r
+\r
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java \r
+# sources only. Doxygen will then generate output that is more tailored for \r
+# Java. For instance, namespaces will be presented as packages, qualified \r
+# scopes will look different, etc.\r
+\r
+OPTIMIZE_OUTPUT_JAVA   = NO\r
+\r
+# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran \r
+# sources only. Doxygen will then generate output that is more tailored for \r
+# Fortran.\r
+\r
+OPTIMIZE_FOR_FORTRAN   = NO\r
+\r
+# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL \r
+# sources. Doxygen will then generate output that is tailored for \r
+# VHDL.\r
+\r
+OPTIMIZE_OUTPUT_VHDL   = NO\r
+\r
+# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want \r
+# to include (a tag file for) the STL sources as input, then you should \r
+# set this tag to YES in order to let doxygen match functions declarations and \r
+# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. \r
+# func(std::string) {}). This also make the inheritance and collaboration \r
+# diagrams that involve STL classes more complete and accurate.\r
+\r
+BUILTIN_STL_SUPPORT    = NO\r
+\r
+# If you use Microsoft's C++/CLI language, you should set this option to YES to\r
+# enable parsing support.\r
+\r
+CPP_CLI_SUPPORT        = NO\r
+\r
+# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. \r
+# Doxygen will parse them like normal C++ but will assume all classes use public \r
+# instead of private inheritance when no explicit protection keyword is present.\r
+\r
+SIP_SUPPORT            = NO\r
+\r
+# For Microsoft's IDL there are propget and propput attributes to indicate getter \r
+# and setter methods for a property. Setting this option to YES (the default) \r
+# will make doxygen to replace the get and set methods by a property in the \r
+# documentation. This will only work if the methods are indeed getting or \r
+# setting a simple type. If this is not the case, or you want to show the \r
+# methods anyway, you should set this option to NO.\r
+\r
+IDL_PROPERTY_SUPPORT   = YES\r
+\r
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC \r
+# tag is set to YES, then doxygen will reuse the documentation of the first \r
+# member in the group (if any) for the other members of the group. By default \r
+# all members of a group must be documented explicitly.\r
+\r
+DISTRIBUTE_GROUP_DOC   = NO\r
+\r
+# Set the SUBGROUPING tag to YES (the default) to allow class member groups of \r
+# the same type (for instance a group of public functions) to be put as a \r
+# subgroup of that type (e.g. under the Public Functions section). Set it to \r
+# NO to prevent subgrouping. Alternatively, this can be done per class using \r
+# the \nosubgrouping command.\r
+\r
+SUBGROUPING            = YES\r
+\r
+# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum \r
+# is documented as struct, union, or enum with the name of the typedef. So \r
+# typedef struct TypeS {} TypeT, will appear in the documentation as a struct \r
+# with name TypeT. When disabled the typedef will appear as a member of a file, \r
+# namespace, or class. And the struct will be named TypeS. This can typically \r
+# be useful for C code in case the coding convention dictates that all compound \r
+# types are typedef'ed and only the typedef is referenced, never the tag name.\r
+\r
+TYPEDEF_HIDES_STRUCT   = NO\r
+\r
+# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to \r
+# determine which symbols to keep in memory and which to flush to disk.\r
+# When the cache is full, less often used symbols will be written to disk.\r
+# For small to medium size projects (<1000 input files) the default value is \r
+# probably good enough. For larger projects a too small cache size can cause \r
+# doxygen to be busy swapping symbols to and from disk most of the time \r
+# causing a significant performance penality. \r
+# If the system has enough physical memory increasing the cache will improve the \r
+# performance by keeping more symbols in memory. Note that the value works on \r
+# a logarithmic scale so increasing the size by one will rougly double the \r
+# memory usage. The cache size is given by this formula: \r
+# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, \r
+# corresponding to a cache size of 2^16 = 65536 symbols\r
+\r
+SYMBOL_CACHE_SIZE      = 0\r
+\r
+#---------------------------------------------------------------------------\r
+# Build related configuration options\r
+#---------------------------------------------------------------------------\r
+\r
+# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in \r
+# documentation are documented, even if no documentation was available. \r
+# Private class members and static file members will be hidden unless \r
+# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES\r
+\r
+EXTRACT_ALL            = YES\r
+\r
+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class \r
+# will be included in the documentation.\r
+\r
+EXTRACT_PRIVATE        = YES\r
+\r
+# If the EXTRACT_STATIC tag is set to YES all static members of a file \r
+# will be included in the documentation.\r
+\r
+EXTRACT_STATIC         = YES\r
+\r
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) \r
+# defined locally in source files will be included in the documentation. \r
+# If set to NO only classes defined in header files are included.\r
+\r
+EXTRACT_LOCAL_CLASSES  = YES\r
+\r
+# This flag is only useful for Objective-C code. When set to YES local \r
+# methods, which are defined in the implementation section but not in \r
+# the interface are included in the documentation. \r
+# If set to NO (the default) only methods in the interface are included.\r
+\r
+EXTRACT_LOCAL_METHODS  = NO\r
+\r
+# If this flag is set to YES, the members of anonymous namespaces will be \r
+# extracted and appear in the documentation as a namespace called \r
+# 'anonymous_namespace{file}', where file will be replaced with the base \r
+# name of the file that contains the anonymous namespace. By default \r
+# anonymous namespace are hidden.\r
+\r
+EXTRACT_ANON_NSPACES   = NO\r
+\r
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all \r
+# undocumented members of documented classes, files or namespaces. \r
+# If set to NO (the default) these members will be included in the \r
+# various overviews, but no documentation section is generated. \r
+# This option has no effect if EXTRACT_ALL is enabled.\r
+\r
+HIDE_UNDOC_MEMBERS     = NO\r
+\r
+# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all \r
+# undocumented classes that are normally visible in the class hierarchy. \r
+# If set to NO (the default) these classes will be included in the various \r
+# overviews. This option has no effect if EXTRACT_ALL is enabled.\r
+\r
+HIDE_UNDOC_CLASSES     = NO\r
+\r
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all \r
+# friend (class|struct|union) declarations. \r
+# If set to NO (the default) these declarations will be included in the \r
+# documentation.\r
+\r
+HIDE_FRIEND_COMPOUNDS  = NO\r
+\r
+# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any \r
+# documentation blocks found inside the body of a function. \r
+# If set to NO (the default) these blocks will be appended to the \r
+# function's detailed documentation block.\r
+\r
+HIDE_IN_BODY_DOCS      = NO\r
+\r
+# The INTERNAL_DOCS tag determines if documentation \r
+# that is typed after a \internal command is included. If the tag is set \r
+# to NO (the default) then the documentation will be excluded. \r
+# Set it to YES to include the internal documentation.\r
+\r
+INTERNAL_DOCS          = NO\r
+\r
+# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate \r
+# file names in lower-case letters. If set to YES upper-case letters are also \r
+# allowed. This is useful if you have classes or files whose names only differ \r
+# in case and if your file system supports case sensitive file names. Windows \r
+# and Mac users are advised to set this option to NO.\r
+\r
+CASE_SENSE_NAMES       = NO\r
+\r
+# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen \r
+# will show members with their full class and namespace scopes in the \r
+# documentation. If set to YES the scope will be hidden.\r
+\r
+HIDE_SCOPE_NAMES       = NO\r
+\r
+# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen \r
+# will put a list of the files that are included by a file in the documentation \r
+# of that file.\r
+\r
+SHOW_INCLUDE_FILES     = YES\r
+\r
+# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] \r
+# is inserted in the documentation for inline members.\r
+\r
+INLINE_INFO            = YES\r
+\r
+# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen \r
+# will sort the (detailed) documentation of file and class members \r
+# alphabetically by member name. If set to NO the members will appear in \r
+# declaration order.\r
+\r
+SORT_MEMBER_DOCS       = YES\r
+\r
+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the \r
+# brief documentation of file, namespace and class members alphabetically \r
+# by member name. If set to NO (the default) the members will appear in \r
+# declaration order.\r
+\r
+SORT_BRIEF_DOCS        = NO\r
+\r
+# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the \r
+# hierarchy of group names into alphabetical order. If set to NO (the default) \r
+# the group names will appear in their defined order.\r
+\r
+SORT_GROUP_NAMES       = NO\r
+\r
+# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be \r
+# sorted by fully-qualified names, including namespaces. If set to \r
+# NO (the default), the class list will be sorted only by class name, \r
+# not including the namespace part. \r
+# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.\r
+# Note: This option applies only to the class list, not to the \r
+# alphabetical list.\r
+\r
+SORT_BY_SCOPE_NAME     = NO\r
+\r
+# The GENERATE_TODOLIST tag can be used to enable (YES) or \r
+# disable (NO) the todo list. This list is created by putting \todo \r
+# commands in the documentation.\r
+\r
+GENERATE_TODOLIST      = NO\r
+\r
+# The GENERATE_TESTLIST tag can be used to enable (YES) or \r
+# disable (NO) the test list. This list is created by putting \test \r
+# commands in the documentation.\r
+\r
+GENERATE_TESTLIST      = NO\r
+\r
+# The GENERATE_BUGLIST tag can be used to enable (YES) or \r
+# disable (NO) the bug list. This list is created by putting \bug \r
+# commands in the documentation.\r
+\r
+GENERATE_BUGLIST       = NO\r
+\r
+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or \r
+# disable (NO) the deprecated list. This list is created by putting \r
+# \deprecated commands in the documentation.\r
+\r
+GENERATE_DEPRECATEDLIST= YES\r
+\r
+# The ENABLED_SECTIONS tag can be used to enable conditional \r
+# documentation sections, marked by \if sectionname ... \endif.\r
+\r
+ENABLED_SECTIONS       = \r
+\r
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines \r
+# the initial value of a variable or define consists of for it to appear in \r
+# the documentation. If the initializer consists of more lines than specified \r
+# here it will be hidden. Use a value of 0 to hide initializers completely. \r
+# The appearance of the initializer of individual variables and defines in the \r
+# documentation can be controlled using \showinitializer or \hideinitializer \r
+# command in the documentation regardless of this setting.\r
+\r
+MAX_INITIALIZER_LINES  = 30\r
+\r
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated \r
+# at the bottom of the documentation of classes and structs. If set to YES the \r
+# list will mention the files that were used to generate the documentation.\r
+\r
+SHOW_USED_FILES        = YES\r
+\r
+# If the sources in your project are distributed over multiple directories \r
+# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy \r
+# in the documentation. The default is NO.\r
+\r
+SHOW_DIRECTORIES       = YES\r
+\r
+# Set the SHOW_FILES tag to NO to disable the generation of the Files page.\r
+# This will remove the Files entry from the Quick Index and from the \r
+# Folder Tree View (if specified). The default is YES.\r
+\r
+SHOW_FILES             = YES\r
+\r
+# Set the SHOW_NAMESPACES tag to NO to disable the generation of the \r
+# Namespaces page.  This will remove the Namespaces entry from the Quick Index\r
+# and from the Folder Tree View (if specified). The default is YES.\r
+\r
+SHOW_NAMESPACES        = YES\r
+\r
+# The FILE_VERSION_FILTER tag can be used to specify a program or script that \r
+# doxygen should invoke to get the current version for each file (typically from \r
+# the version control system). Doxygen will invoke the program by executing (via \r
+# popen()) the command <command> <input-file>, where <command> is the value of \r
+# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file \r
+# provided by doxygen. Whatever the program writes to standard output \r
+# is used as the file version. See the manual for examples.\r
+\r
+FILE_VERSION_FILTER    = \r
+\r
+# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by \r
+# doxygen. The layout file controls the global structure of the generated output files \r
+# in an output format independent way. The create the layout file that represents \r
+# doxygen's defaults, run doxygen with the -l option. You can optionally specify a \r
+# file name after the option, if omitted DoxygenLayout.xml will be used as the name \r
+# of the layout file.\r
+\r
+LAYOUT_FILE            = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to warning and progress messages\r
+#---------------------------------------------------------------------------\r
+\r
+# The QUIET tag can be used to turn on/off the messages that are generated \r
+# by doxygen. Possible values are YES and NO. If left blank NO is used.\r
+\r
+QUIET                  = YES\r
+\r
+# The WARNINGS tag can be used to turn on/off the warning messages that are \r
+# generated by doxygen. Possible values are YES and NO. If left blank \r
+# NO is used.\r
+\r
+WARNINGS               = YES\r
+\r
+# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings \r
+# for undocumented members. If EXTRACT_ALL is set to YES then this flag will \r
+# automatically be disabled.\r
+\r
+WARN_IF_UNDOCUMENTED   = YES\r
+\r
+# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for \r
+# potential errors in the documentation, such as not documenting some \r
+# parameters in a documented function, or documenting parameters that \r
+# don't exist or using markup commands wrongly.\r
+\r
+WARN_IF_DOC_ERROR      = YES\r
+\r
+# This WARN_NO_PARAMDOC option can be abled to get warnings for \r
+# functions that are documented, but have no documentation for their parameters \r
+# or return value. If set to NO (the default) doxygen will only warn about \r
+# wrong or incomplete parameter documentation, but not about the absence of \r
+# documentation.\r
+\r
+WARN_NO_PARAMDOC       = YES\r
+\r
+# The WARN_FORMAT tag determines the format of the warning messages that \r
+# doxygen can produce. The string should contain the $file, $line, and $text \r
+# tags, which will be replaced by the file and line number from which the \r
+# warning originated and the warning text. Optionally the format may contain \r
+# $version, which will be replaced by the version of the file (if it could \r
+# be obtained via FILE_VERSION_FILTER)\r
+\r
+WARN_FORMAT            = "$file:$line: $text"\r
+\r
+# The WARN_LOGFILE tag can be used to specify a file to which warning \r
+# and error messages should be written. If left blank the output is written \r
+# to stderr.\r
+\r
+WARN_LOGFILE           = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the input files\r
+#---------------------------------------------------------------------------\r
+\r
+# The INPUT tag can be used to specify the files and/or directories that contain \r
+# documented source files. You may enter file names like "myfile.cpp" or \r
+# directories like "/usr/src/myproject". Separate the files or directories \r
+# with spaces.\r
+\r
+INPUT                  = ./\r
+\r
+# This tag can be used to specify the character encoding of the source files \r
+# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is \r
+# also the default input encoding. Doxygen uses libiconv (or the iconv built \r
+# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for \r
+# the list of possible encodings.\r
+\r
+INPUT_ENCODING         = UTF-8\r
+\r
+# If the value of the INPUT tag contains directories, you can use the \r
+# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \r
+# and *.h) to filter out the source-files in the directories. If left \r
+# blank the following patterns are tested: \r
+# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx \r
+# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90\r
+\r
+FILE_PATTERNS          = *.h \\r
+                         *.c \\r
+                                                *.txt\r
+\r
+# The RECURSIVE tag can be used to turn specify whether or not subdirectories \r
+# should be searched for input files as well. Possible values are YES and NO. \r
+# If left blank NO is used.\r
+\r
+RECURSIVE              = YES\r
+\r
+# The EXCLUDE tag can be used to specify files and/or directories that should \r
+# excluded from the INPUT source files. This way you can easily exclude a \r
+# subdirectory from a directory tree whose root is specified with the INPUT tag.\r
+\r
+EXCLUDE                = \r
+\r
+# The EXCLUDE_SYMLINKS tag can be used select whether or not files or \r
+# directories that are symbolic links (a Unix filesystem feature) are excluded \r
+# from the input.\r
+\r
+EXCLUDE_SYMLINKS       = NO\r
+\r
+# If the value of the INPUT tag contains directories, you can use the \r
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude \r
+# certain files from those directories. Note that the wildcards are matched \r
+# against the file with absolute path, so to exclude all test directories \r
+# for example use the pattern */test/*\r
+\r
+EXCLUDE_PATTERNS       = */LowLevel/USBMode.h\r
+\r
+# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names \r
+# (namespaces, classes, functions, etc.) that should be excluded from the \r
+# output. The symbol name can be a fully qualified name, a word, or if the \r
+# wildcard * is used, a substring. Examples: ANamespace, AClass, \r
+# AClass::ANamespace, ANamespace::*Test\r
+\r
+EXCLUDE_SYMBOLS        = __*\r
+\r
+# The EXAMPLE_PATH tag can be used to specify one or more files or \r
+# directories that contain example code fragments that are included (see \r
+# the \include command).\r
+\r
+EXAMPLE_PATH           = \r
+\r
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the \r
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \r
+# and *.h) to filter out the source-files in the directories. If left \r
+# blank all files are included.\r
+\r
+EXAMPLE_PATTERNS       = *\r
+\r
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be \r
+# searched for input files to be used with the \include or \dontinclude \r
+# commands irrespective of the value of the RECURSIVE tag. \r
+# Possible values are YES and NO. If left blank NO is used.\r
+\r
+EXAMPLE_RECURSIVE      = NO\r
+\r
+# The IMAGE_PATH tag can be used to specify one or more files or \r
+# directories that contain image that are included in the documentation (see \r
+# the \image command).\r
+\r
+IMAGE_PATH             = \r
+\r
+# The INPUT_FILTER tag can be used to specify a program that doxygen should \r
+# invoke to filter for each input file. Doxygen will invoke the filter program \r
+# by executing (via popen()) the command <filter> <input-file>, where <filter> \r
+# is the value of the INPUT_FILTER tag, and <input-file> is the name of an \r
+# input file. Doxygen will then use the output that the filter program writes \r
+# to standard output.  If FILTER_PATTERNS is specified, this tag will be \r
+# ignored.\r
+\r
+INPUT_FILTER           = \r
+\r
+# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern \r
+# basis.  Doxygen will compare the file name with each pattern and apply the \r
+# filter if there is a match.  The filters are a list of the form: \r
+# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further \r
+# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER \r
+# is applied to all files.\r
+\r
+FILTER_PATTERNS        = \r
+\r
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using \r
+# INPUT_FILTER) will be used to filter the input files when producing source \r
+# files to browse (i.e. when SOURCE_BROWSER is set to YES).\r
+\r
+FILTER_SOURCE_FILES    = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to source browsing\r
+#---------------------------------------------------------------------------\r
+\r
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will \r
+# be generated. Documented entities will be cross-referenced with these sources. \r
+# Note: To get rid of all source code in the generated output, make sure also \r
+# VERBATIM_HEADERS is set to NO.\r
+\r
+SOURCE_BROWSER         = NO\r
+\r
+# Setting the INLINE_SOURCES tag to YES will include the body \r
+# of functions and classes directly in the documentation.\r
+\r
+INLINE_SOURCES         = NO\r
+\r
+# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct \r
+# doxygen to hide any special comment blocks from generated source code \r
+# fragments. Normal C and C++ comments will always remain visible.\r
+\r
+STRIP_CODE_COMMENTS    = YES\r
+\r
+# If the REFERENCED_BY_RELATION tag is set to YES \r
+# then for each documented function all documented \r
+# functions referencing it will be listed.\r
+\r
+REFERENCED_BY_RELATION = NO\r
+\r
+# If the REFERENCES_RELATION tag is set to YES \r
+# then for each documented function all documented entities \r
+# called/used by that function will be listed.\r
+\r
+REFERENCES_RELATION    = NO\r
+\r
+# If the REFERENCES_LINK_SOURCE tag is set to YES (the default)\r
+# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from\r
+# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will\r
+# link to the source code.  Otherwise they will link to the documentstion.\r
+\r
+REFERENCES_LINK_SOURCE = NO\r
+\r
+# If the USE_HTAGS tag is set to YES then the references to source code \r
+# will point to the HTML generated by the htags(1) tool instead of doxygen \r
+# built-in source browser. The htags tool is part of GNU's global source \r
+# tagging system (see http://www.gnu.org/software/global/global.html). You \r
+# will need version 4.8.6 or higher.\r
+\r
+USE_HTAGS              = NO\r
+\r
+# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen \r
+# will generate a verbatim copy of the header file for each class for \r
+# which an include is specified. Set to NO to disable this.\r
+\r
+VERBATIM_HEADERS       = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the alphabetical class index\r
+#---------------------------------------------------------------------------\r
+\r
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index \r
+# of all compounds will be generated. Enable this if the project \r
+# contains a lot of classes, structs, unions or interfaces.\r
+\r
+ALPHABETICAL_INDEX     = YES\r
+\r
+# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then \r
+# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns \r
+# in which this list will be split (can be a number in the range [1..20])\r
+\r
+COLS_IN_ALPHA_INDEX    = 5\r
+\r
+# In case all classes in a project start with a common prefix, all \r
+# classes will be put under the same header in the alphabetical index. \r
+# The IGNORE_PREFIX tag can be used to specify one or more prefixes that \r
+# should be ignored while generating the index headers.\r
+\r
+IGNORE_PREFIX          = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the HTML output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_HTML tag is set to YES (the default) Doxygen will \r
+# generate HTML output.\r
+\r
+GENERATE_HTML          = YES\r
+\r
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `html' will be used as the default path.\r
+\r
+HTML_OUTPUT            = html\r
+\r
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for \r
+# each generated HTML page (for example: .htm,.php,.asp). If it is left blank \r
+# doxygen will generate files with .html extension.\r
+\r
+HTML_FILE_EXTENSION    = .html\r
+\r
+# The HTML_HEADER tag can be used to specify a personal HTML header for \r
+# each generated HTML page. If it is left blank doxygen will generate a \r
+# standard header.\r
+\r
+HTML_HEADER            = \r
+\r
+# The HTML_FOOTER tag can be used to specify a personal HTML footer for \r
+# each generated HTML page. If it is left blank doxygen will generate a \r
+# standard footer.\r
+\r
+HTML_FOOTER            = \r
+\r
+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading \r
+# style sheet that is used by each HTML page. It can be used to \r
+# fine-tune the look of the HTML output. If the tag is left blank doxygen \r
+# will generate a default style sheet. Note that doxygen will try to copy \r
+# the style sheet file to the HTML output directory, so don't put your own \r
+# stylesheet in the HTML output directory as well, or it will be erased!\r
+\r
+HTML_STYLESHEET        = \r
+\r
+# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, \r
+# files or namespaces will be aligned in HTML using tables. If set to \r
+# NO a bullet list will be used.\r
+\r
+HTML_ALIGN_MEMBERS     = YES\r
+\r
+# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML \r
+# documentation will contain sections that can be hidden and shown after the \r
+# page has loaded. For this to work a browser that supports \r
+# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox \r
+# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari).\r
+\r
+HTML_DYNAMIC_SECTIONS  = YES\r
+\r
+# If the GENERATE_DOCSET tag is set to YES, additional index files \r
+# will be generated that can be used as input for Apple's Xcode 3 \r
+# integrated development environment, introduced with OSX 10.5 (Leopard). \r
+# To create a documentation set, doxygen will generate a Makefile in the \r
+# HTML output directory. Running make will produce the docset in that \r
+# directory and running "make install" will install the docset in \r
+# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find \r
+# it at startup. \r
+# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information.\r
+\r
+GENERATE_DOCSET        = NO\r
+\r
+# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the \r
+# feed. A documentation feed provides an umbrella under which multiple \r
+# documentation sets from a single provider (such as a company or product suite) \r
+# can be grouped.\r
+\r
+DOCSET_FEEDNAME        = "Doxygen generated docs"\r
+\r
+# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that \r
+# should uniquely identify the documentation set bundle. This should be a \r
+# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen \r
+# will append .docset to the name.\r
+\r
+DOCSET_BUNDLE_ID       = org.doxygen.Project\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, additional index files \r
+# will be generated that can be used as input for tools like the \r
+# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) \r
+# of the generated HTML documentation.\r
+\r
+GENERATE_HTMLHELP      = NO\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can \r
+# be used to specify the file name of the resulting .chm file. You \r
+# can add a path in front of the file if the result should not be \r
+# written to the html output directory.\r
+\r
+CHM_FILE               = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can \r
+# be used to specify the location (absolute path including file name) of \r
+# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run \r
+# the HTML help compiler on the generated index.hhp.\r
+\r
+HHC_LOCATION           = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag \r
+# controls if a separate .chi index file is generated (YES) or that \r
+# it should be included in the master .chm file (NO).\r
+\r
+GENERATE_CHI           = NO\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING\r
+# is used to encode HtmlHelp index (hhk), content (hhc) and project file\r
+# content.\r
+\r
+CHM_INDEX_ENCODING     = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag \r
+# controls whether a binary table of contents is generated (YES) or a \r
+# normal table of contents (NO) in the .chm file.\r
+\r
+BINARY_TOC             = NO\r
+\r
+# The TOC_EXPAND flag can be set to YES to add extra items for group members \r
+# to the contents of the HTML help documentation and to the tree view.\r
+\r
+TOC_EXPAND             = YES\r
+\r
+# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER \r
+# are set, an additional index file will be generated that can be used as input for \r
+# Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated \r
+# HTML documentation.\r
+\r
+GENERATE_QHP           = NO\r
+\r
+# If the QHG_LOCATION tag is specified, the QCH_FILE tag can \r
+# be used to specify the file name of the resulting .qch file. \r
+# The path specified is relative to the HTML output folder.\r
+\r
+QCH_FILE               = \r
+\r
+# The QHP_NAMESPACE tag specifies the namespace to use when generating \r
+# Qt Help Project output. For more information please see \r
+# <a href="http://doc.trolltech.com/qthelpproject.html#namespace">Qt Help Project / Namespace</a>.\r
+\r
+QHP_NAMESPACE          = org.doxygen.Project\r
+\r
+# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating \r
+# Qt Help Project output. For more information please see \r
+# <a href="http://doc.trolltech.com/qthelpproject.html#virtual-folders">Qt Help Project / Virtual Folders</a>.\r
+\r
+QHP_VIRTUAL_FOLDER     = doc\r
+\r
+# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can \r
+# be used to specify the location of Qt's qhelpgenerator. \r
+# If non-empty doxygen will try to run qhelpgenerator on the generated \r
+# .qhp file .\r
+\r
+QHG_LOCATION           = \r
+\r
+# The DISABLE_INDEX tag can be used to turn on/off the condensed index at \r
+# top of each HTML page. The value NO (the default) enables the index and \r
+# the value YES disables it.\r
+\r
+DISABLE_INDEX          = NO\r
+\r
+# This tag can be used to set the number of enum values (range [1..20]) \r
+# that doxygen will group on one line in the generated HTML documentation.\r
+\r
+ENUM_VALUES_PER_LINE   = 1\r
+\r
+# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index\r
+# structure should be generated to display hierarchical information.\r
+# If the tag value is set to FRAME, a side panel will be generated\r
+# containing a tree-like index structure (just like the one that \r
+# is generated for HTML Help). For this to work a browser that supports \r
+# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, \r
+# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are \r
+# probably better off using the HTML help feature. Other possible values \r
+# for this tag are: HIERARCHIES, which will generate the Groups, Directories,\r
+# and Class Hierarchy pages using a tree view instead of an ordered list;\r
+# ALL, which combines the behavior of FRAME and HIERARCHIES; and NONE, which\r
+# disables this behavior completely. For backwards compatibility with previous\r
+# releases of Doxygen, the values YES and NO are equivalent to FRAME and NONE\r
+# respectively.\r
+\r
+GENERATE_TREEVIEW      = YES\r
+\r
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be \r
+# used to set the initial width (in pixels) of the frame in which the tree \r
+# is shown.\r
+\r
+TREEVIEW_WIDTH         = 250\r
+\r
+# Use this tag to change the font size of Latex formulas included \r
+# as images in the HTML documentation. The default is 10. Note that \r
+# when you change the font size after a successful doxygen run you need \r
+# to manually remove any form_*.png images from the HTML output directory \r
+# to force them to be regenerated.\r
+\r
+FORMULA_FONTSIZE       = 10\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the LaTeX output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will \r
+# generate Latex output.\r
+\r
+GENERATE_LATEX         = NO\r
+\r
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `latex' will be used as the default path.\r
+\r
+LATEX_OUTPUT           = latex\r
+\r
+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be \r
+# invoked. If left blank `latex' will be used as the default command name.\r
+\r
+LATEX_CMD_NAME         = latex\r
+\r
+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to \r
+# generate index for LaTeX. If left blank `makeindex' will be used as the \r
+# default command name.\r
+\r
+MAKEINDEX_CMD_NAME     = makeindex\r
+\r
+# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact \r
+# LaTeX documents. This may be useful for small projects and may help to \r
+# save some trees in general.\r
+\r
+COMPACT_LATEX          = NO\r
+\r
+# The PAPER_TYPE tag can be used to set the paper type that is used \r
+# by the printer. Possible values are: a4, a4wide, letter, legal and \r
+# executive. If left blank a4wide will be used.\r
+\r
+PAPER_TYPE             = a4wide\r
+\r
+# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX \r
+# packages that should be included in the LaTeX output.\r
+\r
+EXTRA_PACKAGES         = \r
+\r
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for \r
+# the generated latex document. The header should contain everything until \r
+# the first chapter. If it is left blank doxygen will generate a \r
+# standard header. Notice: only use this tag if you know what you are doing!\r
+\r
+LATEX_HEADER           = \r
+\r
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated \r
+# is prepared for conversion to pdf (using ps2pdf). The pdf file will \r
+# contain links (just like the HTML output) instead of page references \r
+# This makes the output suitable for online browsing using a pdf viewer.\r
+\r
+PDF_HYPERLINKS         = YES\r
+\r
+# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of \r
+# plain latex in the generated Makefile. Set this option to YES to get a \r
+# higher quality PDF documentation.\r
+\r
+USE_PDFLATEX           = YES\r
+\r
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. \r
+# command to the generated LaTeX files. This will instruct LaTeX to keep \r
+# running if errors occur, instead of asking the user for help. \r
+# This option is also used when generating formulas in HTML.\r
+\r
+LATEX_BATCHMODE        = NO\r
+\r
+# If LATEX_HIDE_INDICES is set to YES then doxygen will not \r
+# include the index chapters (such as File Index, Compound Index, etc.) \r
+# in the output.\r
+\r
+LATEX_HIDE_INDICES     = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the RTF output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output \r
+# The RTF output is optimized for Word 97 and may not look very pretty with \r
+# other RTF readers or editors.\r
+\r
+GENERATE_RTF           = NO\r
+\r
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `rtf' will be used as the default path.\r
+\r
+RTF_OUTPUT             = rtf\r
+\r
+# If the COMPACT_RTF tag is set to YES Doxygen generates more compact \r
+# RTF documents. This may be useful for small projects and may help to \r
+# save some trees in general.\r
+\r
+COMPACT_RTF            = NO\r
+\r
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated \r
+# will contain hyperlink fields. The RTF file will \r
+# contain links (just like the HTML output) instead of page references. \r
+# This makes the output suitable for online browsing using WORD or other \r
+# programs which support those fields. \r
+# Note: wordpad (write) and others do not support links.\r
+\r
+RTF_HYPERLINKS         = NO\r
+\r
+# Load stylesheet definitions from file. Syntax is similar to doxygen's \r
+# config file, i.e. a series of assignments. You only have to provide \r
+# replacements, missing definitions are set to their default value.\r
+\r
+RTF_STYLESHEET_FILE    = \r
+\r
+# Set optional variables used in the generation of an rtf document. \r
+# Syntax is similar to doxygen's config file.\r
+\r
+RTF_EXTENSIONS_FILE    = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the man page output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_MAN tag is set to YES (the default) Doxygen will \r
+# generate man pages\r
+\r
+GENERATE_MAN           = NO\r
+\r
+# The MAN_OUTPUT tag is used to specify where the man pages will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `man' will be used as the default path.\r
+\r
+MAN_OUTPUT             = man\r
+\r
+# The MAN_EXTENSION tag determines the extension that is added to \r
+# the generated man pages (default is the subroutine's section .3)\r
+\r
+MAN_EXTENSION          = .3\r
+\r
+# If the MAN_LINKS tag is set to YES and Doxygen generates man output, \r
+# then it will generate one additional man file for each entity \r
+# documented in the real man page(s). These additional files \r
+# only source the real man page, but without them the man command \r
+# would be unable to find the correct page. The default is NO.\r
+\r
+MAN_LINKS              = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the XML output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_XML tag is set to YES Doxygen will \r
+# generate an XML file that captures the structure of \r
+# the code including all documentation.\r
+\r
+GENERATE_XML           = NO\r
+\r
+# The XML_OUTPUT tag is used to specify where the XML pages will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `xml' will be used as the default path.\r
+\r
+XML_OUTPUT             = xml\r
+\r
+# The XML_SCHEMA tag can be used to specify an XML schema, \r
+# which can be used by a validating XML parser to check the \r
+# syntax of the XML files.\r
+\r
+XML_SCHEMA             = \r
+\r
+# The XML_DTD tag can be used to specify an XML DTD, \r
+# which can be used by a validating XML parser to check the \r
+# syntax of the XML files.\r
+\r
+XML_DTD                = \r
+\r
+# If the XML_PROGRAMLISTING tag is set to YES Doxygen will \r
+# dump the program listings (including syntax highlighting \r
+# and cross-referencing information) to the XML output. Note that \r
+# enabling this will significantly increase the size of the XML output.\r
+\r
+XML_PROGRAMLISTING     = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options for the AutoGen Definitions output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will \r
+# generate an AutoGen Definitions (see autogen.sf.net) file \r
+# that captures the structure of the code including all \r
+# documentation. Note that this feature is still experimental \r
+# and incomplete at the moment.\r
+\r
+GENERATE_AUTOGEN_DEF   = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the Perl module output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_PERLMOD tag is set to YES Doxygen will \r
+# generate a Perl module file that captures the structure of \r
+# the code including all documentation. Note that this \r
+# feature is still experimental and incomplete at the \r
+# moment.\r
+\r
+GENERATE_PERLMOD       = NO\r
+\r
+# If the PERLMOD_LATEX tag is set to YES Doxygen will generate \r
+# the necessary Makefile rules, Perl scripts and LaTeX code to be able \r
+# to generate PDF and DVI output from the Perl module output.\r
+\r
+PERLMOD_LATEX          = NO\r
+\r
+# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be \r
+# nicely formatted so it can be parsed by a human reader.  This is useful \r
+# if you want to understand what is going on.  On the other hand, if this \r
+# tag is set to NO the size of the Perl module output will be much smaller \r
+# and Perl will parse it just the same.\r
+\r
+PERLMOD_PRETTY         = YES\r
+\r
+# The names of the make variables in the generated doxyrules.make file \r
+# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. \r
+# This is useful so different doxyrules.make files included by the same \r
+# Makefile don't overwrite each other's variables.\r
+\r
+PERLMOD_MAKEVAR_PREFIX = \r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration options related to the preprocessor   \r
+#---------------------------------------------------------------------------\r
+\r
+# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will \r
+# evaluate all C-preprocessor directives found in the sources and include \r
+# files.\r
+\r
+ENABLE_PREPROCESSING   = YES\r
+\r
+# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro \r
+# names in the source code. If set to NO (the default) only conditional \r
+# compilation will be performed. Macro expansion can be done in a controlled \r
+# way by setting EXPAND_ONLY_PREDEF to YES.\r
+\r
+MACRO_EXPANSION        = YES\r
+\r
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES \r
+# then the macro expansion is limited to the macros specified with the \r
+# PREDEFINED and EXPAND_AS_DEFINED tags.\r
+\r
+EXPAND_ONLY_PREDEF     = YES\r
+\r
+# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files \r
+# in the INCLUDE_PATH (see below) will be search if a #include is found.\r
+\r
+SEARCH_INCLUDES        = YES\r
+\r
+# The INCLUDE_PATH tag can be used to specify one or more directories that \r
+# contain include files that are not input files but should be processed by \r
+# the preprocessor.\r
+\r
+INCLUDE_PATH           = \r
+\r
+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard \r
+# patterns (like *.h and *.hpp) to filter out the header-files in the \r
+# directories. If left blank, the patterns specified with FILE_PATTERNS will \r
+# be used.\r
+\r
+INCLUDE_FILE_PATTERNS  = \r
+\r
+# The PREDEFINED tag can be used to specify one or more macro names that \r
+# are defined before the preprocessor is started (similar to the -D option of \r
+# gcc). The argument of the tag is a list of macros of the form: name \r
+# or name=definition (no spaces). If the definition and the = are \r
+# omitted =1 is assumed. To prevent a macro definition from being \r
+# undefined via #undef or recursively expanded use the := operator \r
+# instead of the = operator.\r
+\r
+PREDEFINED             = __DOXYGEN__\r
+\r
+# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then \r
+# this tag can be used to specify a list of macro names that should be expanded. \r
+# The macro definition that is found in the sources will be used. \r
+# Use the PREDEFINED tag if you want to use a different macro definition.\r
+\r
+EXPAND_AS_DEFINED      = BUTTLOADTAG\r
+\r
+# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then \r
+# doxygen's preprocessor will remove all function-like macros that are alone \r
+# on a line, have an all uppercase name, and do not end with a semicolon. Such \r
+# function macros are typically used for boiler-plate code, and will confuse \r
+# the parser if not removed.\r
+\r
+SKIP_FUNCTION_MACROS   = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration::additions related to external references   \r
+#---------------------------------------------------------------------------\r
+\r
+# The TAGFILES option can be used to specify one or more tagfiles. \r
+# Optionally an initial location of the external documentation \r
+# can be added for each tagfile. The format of a tag file without \r
+# this location is as follows: \r
+#   TAGFILES = file1 file2 ... \r
+# Adding location for the tag files is done as follows: \r
+#   TAGFILES = file1=loc1 "file2 = loc2" ... \r
+# where "loc1" and "loc2" can be relative or absolute paths or \r
+# URLs. If a location is present for each tag, the installdox tool \r
+# does not have to be run to correct the links.\r
+# Note that each tag file must have a unique name\r
+# (where the name does NOT include the path)\r
+# If a tag file is not located in the directory in which doxygen \r
+# is run, you must also specify the path to the tagfile here.\r
+\r
+TAGFILES               = \r
+\r
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create \r
+# a tag file that is based on the input files it reads.\r
+\r
+GENERATE_TAGFILE       = \r
+\r
+# If the ALLEXTERNALS tag is set to YES all external classes will be listed \r
+# in the class index. If set to NO only the inherited external classes \r
+# will be listed.\r
+\r
+ALLEXTERNALS           = NO\r
+\r
+# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed \r
+# in the modules index. If set to NO, only the current project's groups will \r
+# be listed.\r
+\r
+EXTERNAL_GROUPS        = YES\r
+\r
+# The PERL_PATH should be the absolute path and name of the perl script \r
+# interpreter (i.e. the result of `which perl').\r
+\r
+PERL_PATH              = /usr/bin/perl\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration options related to the dot tool   \r
+#---------------------------------------------------------------------------\r
+\r
+# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will \r
+# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base \r
+# or super classes. Setting the tag to NO turns the diagrams off. Note that \r
+# this option is superseded by the HAVE_DOT option below. This is only a \r
+# fallback. It is recommended to install and use dot, since it yields more \r
+# powerful graphs.\r
+\r
+CLASS_DIAGRAMS         = NO\r
+\r
+# You can define message sequence charts within doxygen comments using the \msc \r
+# command. Doxygen will then run the mscgen tool (see \r
+# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the \r
+# documentation. The MSCGEN_PATH tag allows you to specify the directory where \r
+# the mscgen tool resides. If left empty the tool is assumed to be found in the \r
+# default search path.\r
+\r
+MSCGEN_PATH            = \r
+\r
+# If set to YES, the inheritance and collaboration graphs will hide \r
+# inheritance and usage relations if the target is undocumented \r
+# or is not a class.\r
+\r
+HIDE_UNDOC_RELATIONS   = YES\r
+\r
+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is \r
+# available from the path. This tool is part of Graphviz, a graph visualization \r
+# toolkit from AT&T and Lucent Bell Labs. The other options in this section \r
+# have no effect if this option is set to NO (the default)\r
+\r
+HAVE_DOT               = NO\r
+\r
+# By default doxygen will write a font called FreeSans.ttf to the output \r
+# directory and reference it in all dot files that doxygen generates. This \r
+# font does not include all possible unicode characters however, so when you need \r
+# these (or just want a differently looking font) you can specify the font name \r
+# using DOT_FONTNAME. You need need to make sure dot is able to find the font, \r
+# which can be done by putting it in a standard location or by setting the \r
+# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory \r
+# containing the font.\r
+\r
+DOT_FONTNAME           = FreeSans\r
+\r
+# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. \r
+# The default size is 10pt.\r
+\r
+DOT_FONTSIZE           = 10\r
+\r
+# By default doxygen will tell dot to use the output directory to look for the \r
+# FreeSans.ttf font (which doxygen will put there itself). If you specify a \r
+# different font using DOT_FONTNAME you can set the path where dot \r
+# can find it using this tag.\r
+\r
+DOT_FONTPATH           = \r
+\r
+# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for each documented class showing the direct and \r
+# indirect inheritance relations. Setting this tag to YES will force the \r
+# the CLASS_DIAGRAMS tag to NO.\r
+\r
+CLASS_GRAPH            = NO\r
+\r
+# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for each documented class showing the direct and \r
+# indirect implementation dependencies (inheritance, containment, and \r
+# class references variables) of the class with other documented classes.\r
+\r
+COLLABORATION_GRAPH    = NO\r
+\r
+# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for groups, showing the direct groups dependencies\r
+\r
+GROUP_GRAPHS           = NO\r
+\r
+# If the UML_LOOK tag is set to YES doxygen will generate inheritance and \r
+# collaboration diagrams in a style similar to the OMG's Unified Modeling \r
+# Language.\r
+\r
+UML_LOOK               = NO\r
+\r
+# If set to YES, the inheritance and collaboration graphs will show the \r
+# relations between templates and their instances.\r
+\r
+TEMPLATE_RELATIONS     = NO\r
+\r
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT \r
+# tags are set to YES then doxygen will generate a graph for each documented \r
+# file showing the direct and indirect include dependencies of the file with \r
+# other documented files.\r
+\r
+INCLUDE_GRAPH          = NO\r
+\r
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and \r
+# HAVE_DOT tags are set to YES then doxygen will generate a graph for each \r
+# documented header file showing the documented files that directly or \r
+# indirectly include this file.\r
+\r
+INCLUDED_BY_GRAPH      = NO\r
+\r
+# If the CALL_GRAPH and HAVE_DOT options are set to YES then \r
+# doxygen will generate a call dependency graph for every global function \r
+# or class method. Note that enabling this option will significantly increase \r
+# the time of a run. So in most cases it will be better to enable call graphs \r
+# for selected functions only using the \callgraph command.\r
+\r
+CALL_GRAPH             = NO\r
+\r
+# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then \r
+# doxygen will generate a caller dependency graph for every global function \r
+# or class method. Note that enabling this option will significantly increase \r
+# the time of a run. So in most cases it will be better to enable caller \r
+# graphs for selected functions only using the \callergraph command.\r
+\r
+CALLER_GRAPH           = NO\r
+\r
+# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen \r
+# will graphical hierarchy of all classes instead of a textual one.\r
+\r
+GRAPHICAL_HIERARCHY    = NO\r
+\r
+# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES \r
+# then doxygen will show the dependencies a directory has on other directories \r
+# in a graphical way. The dependency relations are determined by the #include\r
+# relations between the files in the directories.\r
+\r
+DIRECTORY_GRAPH        = NO\r
+\r
+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images \r
+# generated by dot. Possible values are png, jpg, or gif\r
+# If left blank png will be used.\r
+\r
+DOT_IMAGE_FORMAT       = png\r
+\r
+# The tag DOT_PATH can be used to specify the path where the dot tool can be \r
+# found. If left blank, it is assumed the dot tool can be found in the path.\r
+\r
+DOT_PATH               = "C:/Program Files/Graphviz2.18/bin"\r
+\r
+# The DOTFILE_DIRS tag can be used to specify one or more directories that \r
+# contain dot files that are included in the documentation (see the \r
+# \dotfile command).\r
+\r
+DOTFILE_DIRS           = \r
+\r
+# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of \r
+# nodes that will be shown in the graph. If the number of nodes in a graph \r
+# becomes larger than this value, doxygen will truncate the graph, which is \r
+# visualized by representing a node as a red box. Note that doxygen if the \r
+# number of direct children of the root node in a graph is already larger than \r
+# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note \r
+# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.\r
+\r
+DOT_GRAPH_MAX_NODES    = 15\r
+\r
+# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the \r
+# graphs generated by dot. A depth value of 3 means that only nodes reachable \r
+# from the root by following a path via at most 3 edges will be shown. Nodes \r
+# that lay further from the root node will be omitted. Note that setting this \r
+# option to 1 or 2 may greatly reduce the computation time needed for large \r
+# code bases. Also note that the size of a graph can be further restricted by \r
+# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.\r
+\r
+MAX_DOT_GRAPH_DEPTH    = 2\r
+\r
+# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent \r
+# background. This is disabled by default, because dot on Windows does not \r
+# seem to support this out of the box. Warning: Depending on the platform used, \r
+# enabling this option may lead to badly anti-aliased labels on the edges of \r
+# a graph (i.e. they become hard to read).\r
+\r
+DOT_TRANSPARENT        = YES\r
+\r
+# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output \r
+# files in one run (i.e. multiple -o and -T options on the command line). This \r
+# makes dot run faster, but since only newer versions of dot (>1.8.10) \r
+# support this, this feature is disabled by default.\r
+\r
+DOT_MULTI_TARGETS      = NO\r
+\r
+# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will \r
+# generate a legend page explaining the meaning of the various boxes and \r
+# arrows in the dot generated graphs.\r
+\r
+GENERATE_LEGEND        = YES\r
+\r
+# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will \r
+# remove the intermediate dot files that are used to generate \r
+# the various graphs.\r
+\r
+DOT_CLEANUP            = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration::additions related to the search engine   \r
+#---------------------------------------------------------------------------\r
+\r
+# The SEARCHENGINE tag specifies whether or not a search engine should be \r
+# used. If set to NO the values of all tags below this one will be ignored.\r
+\r
+SEARCHENGINE           = NO\r
diff --git a/Demos/Device/LowLevel/KeyboardMouse/KeyboardMouse.aps b/Demos/Device/LowLevel/KeyboardMouse/KeyboardMouse.aps
new file mode 100644 (file)
index 0000000..eb54f1d
--- /dev/null
@@ -0,0 +1 @@
+<AVRStudio><MANAGEMENT><ProjectName>KeyboardMouse</ProjectName><Created>30-Sep-2008 14:11:00</Created><LastEdit>30-Sep-2008 14:11:17</LastEdit><ICON>241</ICON><ProjectType>0</ProjectType><Created>30-Sep-2008 14:11:00</Created><Version>4</Version><Build>4, 14, 0, 589</Build><ProjectTypeName>AVR GCC</ProjectTypeName></MANAGEMENT><CODE_CREATION><ObjectFile></ObjectFile><EntryFile></EntryFile><SaveFolder>C:\Users\Dean\Documents\Electronics\Projects\WORK\MyUSBWORK\Demos\KeyboardMouse\</SaveFolder></CODE_CREATION><DEBUG_TARGET><CURRENT_TARGET>JTAGICE mkII</CURRENT_TARGET><CURRENT_PART>AT90USB1287.xml</CURRENT_PART><BREAKPOINTS></BREAKPOINTS><IO_EXPAND><HIDE>false</HIDE></IO_EXPAND><REGISTERNAMES><Register>R00</Register><Register>R01</Register><Register>R02</Register><Register>R03</Register><Register>R04</Register><Register>R05</Register><Register>R06</Register><Register>R07</Register><Register>R08</Register><Register>R09</Register><Register>R10</Register><Register>R11</Register><Register>R12</Register><Register>R13</Register><Register>R14</Register><Register>R15</Register><Register>R16</Register><Register>R17</Register><Register>R18</Register><Register>R19</Register><Register>R20</Register><Register>R21</Register><Register>R22</Register><Register>R23</Register><Register>R24</Register><Register>R25</Register><Register>R26</Register><Register>R27</Register><Register>R28</Register><Register>R29</Register><Register>R30</Register><Register>R31</Register></REGISTERNAMES><COM>Auto</COM><COMType>0</COMType><WATCHNUM>0</WATCHNUM><WATCHNAMES><Pane0></Pane0><Pane1></Pane1><Pane2></Pane2><Pane3></Pane3></WATCHNAMES><BreakOnTrcaeFull>0</BreakOnTrcaeFull></DEBUG_TARGET><Debugger><Triggers></Triggers></Debugger><AVRGCCPLUGIN><FILES><SOURCEFILE>Descriptors.c</SOURCEFILE><SOURCEFILE>KeyboardMouse.c</SOURCEFILE><HEADERFILE>Descriptors.h</HEADERFILE><HEADERFILE>KeyboardMouse.h</HEADERFILE><OTHERFILE>makefile</OTHERFILE></FILES><CONFIGS><CONFIG><NAME>default</NAME><USESEXTERNALMAKEFILE>YES</USESEXTERNALMAKEFILE><EXTERNALMAKEFILE>makefile</EXTERNALMAKEFILE><PART>at90usb1287</PART><HEX>1</HEX><LIST>1</LIST><MAP>1</MAP><OUTPUTFILENAME>KeyboardMouse.elf</OUTPUTFILENAME><OUTPUTDIR>default\</OUTPUTDIR><ISDIRTY>1</ISDIRTY><OPTIONS/><INCDIRS/><LIBDIRS/><LIBS/><LINKOBJECTS/><OPTIONSFORALL>-Wall -gdwarf-2 -std=gnu99 -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums</OPTIONSFORALL><LINKEROPTIONS></LINKEROPTIONS><SEGMENTS/></CONFIG></CONFIGS><LASTCONFIG>default</LASTCONFIG><USES_WINAVR>1</USES_WINAVR><GCC_LOC>C:\WinAVR-20080512\bin\avr-gcc.exe</GCC_LOC><MAKE_LOC>C:\WinAVR-20080512\utils\bin\make.exe</MAKE_LOC></AVRGCCPLUGIN><IOView><usergroups/><sort sorted="0" column="0" ordername="0" orderaddress="0" ordergroup="0"/></IOView><Files></Files><Events><Bookmarks></Bookmarks></Events><Trace><Filters></Filters></Trace></AVRStudio>\r
diff --git a/Demos/Device/LowLevel/KeyboardMouse/KeyboardMouse.c b/Demos/Device/LowLevel/KeyboardMouse/KeyboardMouse.c
new file mode 100644 (file)
index 0000000..25d633e
--- /dev/null
@@ -0,0 +1,350 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+  Copyright 2009  Denver Gingerich (denver [at] ossguy [dot] com)\r
+         \r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  Main source file for the KeyboardMouse demo. This file contains the main tasks of the demo and\r
+ *  is responsible for the initial application hardware configuration.\r
+ */\r
\r
+#include "KeyboardMouse.h"\r
+\r
+/* Scheduler Task List */\r
+TASK_LIST\r
+{\r
+       { .Task = USB_USBTask               , .TaskStatus = TASK_STOP },\r
+       { .Task = USB_Mouse                 , .TaskStatus = TASK_RUN  },\r
+       { .Task = USB_Keyboard              , .TaskStatus = TASK_RUN  },\r
+};\r
+\r
+/* Global Variables */\r
+/** Global structure to hold the current keyboard interface HID report, for transmission to the host */\r
+USB_KeyboardReport_Data_t KeyboardReportData;\r
+\r
+/** Global structure to hold the current mouse interface HID report, for transmission to the host */\r
+USB_MouseReport_Data_t    MouseReportData;\r
+\r
+/** Main program entry point. This routine configures the hardware required by the application, then\r
+ *  starts the scheduler to run the USB management task.\r
+ */\r
+int main(void)\r
+{\r
+       /* Disable watchdog if enabled by bootloader/fuses */\r
+       MCUSR &= ~(1 << WDRF);\r
+       wdt_disable();\r
+\r
+       /* Disable clock division */\r
+       clock_prescale_set(clock_div_1);\r
+\r
+       /* Hardware Initialization */\r
+       Joystick_Init();\r
+       LEDs_Init();\r
+       \r
+       /* Indicate USB not ready */\r
+       UpdateStatus(Status_USBNotReady);\r
+       \r
+       /* Initialize Scheduler so that it can be used */\r
+       Scheduler_Init();\r
+\r
+       /* Initialize USB Subsystem */\r
+       USB_Init();\r
+       \r
+       /* Scheduling - routine never returns, so put this last in the main function */\r
+       Scheduler_Start();\r
+}\r
+\r
+/** Event handler for the USB_Connect event. This indicates that the device is enumerating via the status LEDs and\r
+ *  starts the library USB task to begin the enumeration and USB management process.\r
+ */\r
+void EVENT_USB_Connect(void)\r
+{\r
+       /* Start USB management task */\r
+       Scheduler_SetTaskMode(USB_USBTask, TASK_RUN);\r
+\r
+       /* Indicate USB enumerating */\r
+       UpdateStatus(Status_USBEnumerating);\r
+}\r
+\r
+/** Event handler for the USB_Disconnect event. This indicates that the device is no longer connected to a host via\r
+ *  the status LEDs and stops the USB management task.\r
+ */\r
+void EVENT_USB_Disconnect(void)\r
+{\r
+       /* Stop running HID reporting and USB management tasks */\r
+       Scheduler_SetTaskMode(USB_USBTask, TASK_STOP);\r
+\r
+       /* Indicate USB not ready */\r
+       UpdateStatus(Status_USBNotReady);\r
+}\r
+\r
+/** Event handler for the USB_ConfigurationChanged event. This is fired when the host sets the current configuration\r
+ *  of the USB device after enumeration, and configures the keyboard and mouse device endpoints.\r
+ */\r
+void EVENT_USB_ConfigurationChanged(void)\r
+{\r
+       /* Setup Keyboard Report Endpoint */\r
+       Endpoint_ConfigureEndpoint(KEYBOARD_IN_EPNUM, EP_TYPE_INTERRUPT,\r
+                                      ENDPOINT_DIR_IN, HID_EPSIZE,\r
+                                  ENDPOINT_BANK_SINGLE);\r
+\r
+       /* Setup Keyboard LED Report Endpoint */\r
+       Endpoint_ConfigureEndpoint(KEYBOARD_OUT_EPNUM, EP_TYPE_INTERRUPT,\r
+                                      ENDPOINT_DIR_OUT, HID_EPSIZE,\r
+                                  ENDPOINT_BANK_SINGLE);\r
+\r
+       /* Setup Mouse Report Endpoint */\r
+       Endpoint_ConfigureEndpoint(MOUSE_IN_EPNUM, EP_TYPE_INTERRUPT,\r
+                                      ENDPOINT_DIR_IN, HID_EPSIZE,\r
+                                  ENDPOINT_BANK_SINGLE);\r
+\r
+       /* Indicate USB connected and ready */\r
+       UpdateStatus(Status_USBReady);\r
+}\r
+\r
+/** Event handler for the USB_UnhandledControlPacket event. This is used to catch standard and class specific\r
+ *  control requests that are not handled internally by the USB library (including the HID commands, which are\r
+ *  all issued via the control endpoint), so that they can be handled appropriately for the application.\r
+ */\r
+void EVENT_USB_UnhandledControlPacket(void)\r
+{\r
+       uint8_t* ReportData;\r
+       uint8_t  ReportSize;\r
+\r
+       /* Handle HID Class specific requests */\r
+       switch (USB_ControlRequest.bRequest)\r
+       {\r
+               case REQ_GetReport:\r
+                       if (USB_ControlRequest.bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_INTERFACE))\r
+                       {\r
+                               Endpoint_ClearSETUP();\r
+       \r
+                               /* Determine if it is the mouse or the keyboard data that is being requested */\r
+                               if (!(USB_ControlRequest.wIndex))\r
+                               {\r
+                                       ReportData = (uint8_t*)&KeyboardReportData;\r
+                                       ReportSize = sizeof(KeyboardReportData);\r
+                               }\r
+                               else\r
+                               {\r
+                                       ReportData = (uint8_t*)&MouseReportData;\r
+                                       ReportSize = sizeof(MouseReportData);\r
+                               }\r
+\r
+                               /* Write the report data to the control endpoint */\r
+                               Endpoint_Write_Control_Stream_LE(ReportData, ReportSize);\r
+\r
+                               /* Clear the report data afterwards */\r
+                               memset(ReportData, 0, ReportSize);\r
+                               \r
+                               /* Finalize the stream transfer to send the last packet or clear the host abort */\r
+                               Endpoint_ClearOUT();\r
+                       }\r
+               \r
+                       break;\r
+               case REQ_SetReport:\r
+                       if (USB_ControlRequest.bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE))\r
+                       {\r
+                               Endpoint_ClearSETUP();\r
+                               \r
+                               /* Wait until the LED report has been sent by the host */\r
+                               while (!(Endpoint_IsOUTReceived()));\r
+\r
+                               /* Read in the LED report from the host */\r
+                               uint8_t LEDStatus = Endpoint_Read_Byte();\r
+                               uint8_t LEDMask   = LEDS_LED2;\r
+                               \r
+                               if (LEDStatus & 0x01) // NUM Lock\r
+                                 LEDMask |= LEDS_LED1;\r
+                               \r
+                               if (LEDStatus & 0x02) // CAPS Lock\r
+                                 LEDMask |= LEDS_LED3;\r
+\r
+                               if (LEDStatus & 0x04) // SCROLL Lock\r
+                                 LEDMask |= LEDS_LED4;\r
+\r
+                               /* Set the status LEDs to the current HID LED status */\r
+                               LEDs_SetAllLEDs(LEDMask);\r
+\r
+                               /* Clear the endpoint data */\r
+                               Endpoint_ClearOUT();\r
+\r
+                               /* Acknowledge status stage */\r
+                               while (!(Endpoint_IsINReady()));\r
+                               Endpoint_ClearIN();\r
+                       }\r
+                       \r
+                       break;\r
+       }\r
+}\r
+\r
+/** Function to manage status updates to the user. This is done via LEDs on the given board, if available, but may be changed to\r
+ *  log to a serial port, or anything else that is suitable for status updates.\r
+ *\r
+ *  \param CurrentStatus  Current status of the system, from the KeyboardMouse_StatusCodes_t enum\r
+ */\r
+void UpdateStatus(uint8_t CurrentStatus)\r
+{\r
+       uint8_t LEDMask = LEDS_NO_LEDS;\r
+       \r
+       /* Set the LED mask to the appropriate LED mask based on the given status code */\r
+       switch (CurrentStatus)\r
+       {\r
+               case Status_USBNotReady:\r
+                       LEDMask = (LEDS_LED1);\r
+                       break;\r
+               case Status_USBEnumerating:\r
+                       LEDMask = (LEDS_LED1 | LEDS_LED2);\r
+                       break;\r
+               case Status_USBReady:\r
+                       LEDMask = (LEDS_LED2 | LEDS_LED4);\r
+                       break;\r
+       }\r
+       \r
+       /* Set the board LEDs to the new LED mask */\r
+       LEDs_SetAllLEDs(LEDMask);\r
+}\r
+\r
+/** Keyboard task. This generates the next keyboard HID report for the host, and transmits it via the\r
+ *  keyboard IN endpoint when the host is ready for more data. Additionally, it processes host LED status\r
+ *  reports sent to the device via the keyboard OUT reporting endpoint.\r
+ */\r
+TASK(USB_Keyboard)\r
+{\r
+       uint8_t JoyStatus_LCL = Joystick_GetStatus();\r
+\r
+       /* Check if board button is not pressed, if so mouse mode enabled */\r
+       if (!(Buttons_GetStatus() & BUTTONS_BUTTON1))\r
+       {\r
+               if (JoyStatus_LCL & JOY_UP)\r
+                 KeyboardReportData.KeyCode[0] = 0x04; // A\r
+               else if (JoyStatus_LCL & JOY_DOWN)\r
+                 KeyboardReportData.KeyCode[0] = 0x05; // B\r
+\r
+               if (JoyStatus_LCL & JOY_LEFT)\r
+                 KeyboardReportData.KeyCode[0] = 0x06; // C\r
+               else if (JoyStatus_LCL & JOY_RIGHT)\r
+                 KeyboardReportData.KeyCode[0] = 0x07; // D\r
+\r
+               if (JoyStatus_LCL & JOY_PRESS)\r
+                 KeyboardReportData.KeyCode[0] = 0x08; // E\r
+       }\r
+       \r
+       /* Check if the USB system is connected to a host and report protocol mode is enabled */\r
+       if (USB_IsConnected)\r
+       {\r
+               /* Select the Keyboard Report Endpoint */\r
+               Endpoint_SelectEndpoint(KEYBOARD_IN_EPNUM);\r
+\r
+               /* Check if Keyboard Endpoint Ready for Read/Write */\r
+               if (Endpoint_IsReadWriteAllowed())\r
+               {\r
+                       /* Write Keyboard Report Data */\r
+                       Endpoint_Write_Stream_LE(&KeyboardReportData, sizeof(KeyboardReportData));\r
+\r
+                       /* Finalize the stream transfer to send the last packet */\r
+                       Endpoint_ClearIN();\r
+\r
+                       /* Clear the report data afterwards */\r
+                       memset(&KeyboardReportData, 0, sizeof(KeyboardReportData));\r
+               }\r
+\r
+               /* Select the Keyboard LED Report Endpoint */\r
+               Endpoint_SelectEndpoint(KEYBOARD_OUT_EPNUM);\r
+\r
+               /* Check if Keyboard LED Endpoint Ready for Read/Write */\r
+               if (Endpoint_IsReadWriteAllowed())\r
+               {               \r
+                       /* Read in the LED report from the host */\r
+                       uint8_t LEDStatus = Endpoint_Read_Byte();\r
+                       uint8_t LEDMask   = LEDS_LED2;\r
+                       \r
+                       if (LEDStatus & 0x01) // NUM Lock\r
+                         LEDMask |= LEDS_LED1;\r
+                       \r
+                       if (LEDStatus & 0x02) // CAPS Lock\r
+                         LEDMask |= LEDS_LED3;\r
+\r
+                       if (LEDStatus & 0x04) // SCROLL Lock\r
+                         LEDMask |= LEDS_LED4;\r
+\r
+                       /* Set the status LEDs to the current Keyboard LED status */\r
+                       LEDs_SetAllLEDs(LEDMask);\r
+\r
+                       /* Handshake the OUT Endpoint - clear endpoint and ready for next report */\r
+                       Endpoint_ClearOUT();\r
+               }\r
+       }\r
+}\r
+\r
+/** Mouse task. This generates the next mouse HID report for the host, and transmits it via the\r
+ *  mouse IN endpoint when the host is ready for more data.\r
+ */\r
+TASK(USB_Mouse)\r
+{\r
+       uint8_t JoyStatus_LCL = Joystick_GetStatus();\r
+\r
+       /* Check if board button is pressed, if so mouse mode enabled */\r
+       if (Buttons_GetStatus() & BUTTONS_BUTTON1)\r
+       {\r
+               if (JoyStatus_LCL & JOY_UP)\r
+                 MouseReportData.Y =  1;\r
+               else if (JoyStatus_LCL & JOY_DOWN)\r
+                 MouseReportData.Y = -1;\r
+\r
+               if (JoyStatus_LCL & JOY_RIGHT)\r
+                 MouseReportData.X =  1;\r
+               else if (JoyStatus_LCL & JOY_LEFT)\r
+                 MouseReportData.X = -1;\r
+\r
+               if (JoyStatus_LCL & JOY_PRESS)\r
+                 MouseReportData.Button  = (1 << 0);\r
+       }\r
+\r
+       /* Check if the USB system is connected to a host and report protocol mode is enabled */\r
+       if (USB_IsConnected)\r
+       {\r
+               /* Select the Mouse Report Endpoint */\r
+               Endpoint_SelectEndpoint(MOUSE_IN_EPNUM);\r
+\r
+               /* Check if Mouse Endpoint Ready for Read/Write */\r
+               if (Endpoint_IsReadWriteAllowed())\r
+               {\r
+                       /* Write Mouse Report Data */\r
+                       Endpoint_Write_Stream_LE(&MouseReportData, sizeof(MouseReportData));\r
+\r
+                       /* Finalize the stream transfer to send the last packet */\r
+                       Endpoint_ClearIN();\r
+\r
+                       /* Clear the report data afterwards */\r
+                       memset(&MouseReportData, 0, sizeof(MouseReportData));\r
+               }\r
+       }\r
+}\r
diff --git a/Demos/Device/LowLevel/KeyboardMouse/KeyboardMouse.h b/Demos/Device/LowLevel/KeyboardMouse/KeyboardMouse.h
new file mode 100644 (file)
index 0000000..e3f9434
--- /dev/null
@@ -0,0 +1,106 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+  Copyright 2009  Denver Gingerich (denver [at] ossguy [dot] com)\r
+  \r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+#ifndef _KEYBOARD_MOUSE_H_\r
+#define _KEYBOARD_MOUSE_H_\r
+\r
+       /* Includes: */\r
+               #include <avr/io.h>\r
+               #include <avr/wdt.h>\r
+               #include <avr/power.h>\r
+               #include <stdbool.h>\r
+               #include <string.h>\r
+\r
+               #include "Descriptors.h"\r
+\r
+               #include <LUFA/Version.h>                    // Library Version Information\r
+               #include <LUFA/Drivers/USB/USB.h>            // USB Functionality\r
+               #include <LUFA/Drivers/Board/Joystick.h>     // Joystick driver\r
+               #include <LUFA/Drivers/Board/LEDs.h>         // LEDs driver\r
+               #include <LUFA/Drivers/Board/Buttons.h>      // Board Buttons driver\r
+               #include <LUFA/Scheduler/Scheduler.h>        // Simple scheduler for task management\r
+               \r
+       /* Task Definitions: */\r
+               TASK(USB_Keyboard);\r
+               TASK(USB_Mouse);\r
+\r
+       /* Enums: */\r
+               /** Enum for the possible status codes for passing to the UpdateStatus() function. */\r
+               enum KeyboardMouse_StatusCodes_t\r
+               {\r
+                       Status_USBNotReady    = 0, /**< USB is not ready (disconnected from a USB host) */\r
+                       Status_USBEnumerating = 1, /**< USB interface is enumerating */\r
+                       Status_USBReady       = 2, /**< USB interface is connected and ready */\r
+               };\r
+               \r
+       /* Macros: */\r
+               /** HID Class specific request to get the next HID report from the device. */\r
+               #define REQ_GetReport      0x01\r
+\r
+               /** HID Class specific request to send the next HID report to the device. */\r
+               #define REQ_SetReport      0x09\r
+\r
+               /** HID Class specific request to get the current HID protocol in use, either report or boot. */\r
+               #define REQ_GetProtocol    0x03\r
+\r
+               /** HID Class specific request to set the current HID protocol in use, either report or boot. */\r
+               #define REQ_SetProtocol    0x0B\r
+               \r
+       /* Type Defines: */\r
+               /** Type define for the keyboard HID report structure, for creating and sending HID reports to the host PC.\r
+                *  This mirrors the layout described to the host in the HID report descriptor, in Descriptors.c.\r
+                */\r
+               typedef struct\r
+               {\r
+                       uint8_t Modifier; /**< Modifier mask byte, containing a mask of modifier keys set (such as shift or CTRL) */\r
+                       uint8_t Reserved; /**< Reserved, always set as 0x00 */\r
+                       uint8_t KeyCode[6]; /**< Array of up to six simultaneous key codes of pressed keys */\r
+               } USB_KeyboardReport_Data_t;\r
+\r
+               /** Type define for the mouse HID report structure, for creating and sending HID reports to the host PC.\r
+                *  This mirrors the layout described to the host in the HID report descriptor, in Descriptors.c.\r
+                */\r
+               typedef struct\r
+               {\r
+                       uint8_t Button; /**< Bit mask of the currently pressed mouse buttons */\r
+                       int8_t  X; /**< Current mouse delta X movement, as a signed 8-bit integer */\r
+                       int8_t  Y; /**< Current mouse delta Y movement, as a signed 8-bit integer */\r
+               } USB_MouseReport_Data_t;\r
+                       \r
+       /* Function Prototypes: */\r
+               void EVENT_USB_Connect(void);\r
+               void EVENT_USB_Disconnect(void);\r
+               void EVENT_USB_ConfigurationChanged(void);\r
+               void EVENT_USB_UnhandledControlPacket(void);\r
+\r
+               void UpdateStatus(uint8_t CurrentStatus);\r
+               \r
+#endif\r
diff --git a/Demos/Device/LowLevel/KeyboardMouse/KeyboardMouse.txt b/Demos/Device/LowLevel/KeyboardMouse/KeyboardMouse.txt
new file mode 100644 (file)
index 0000000..3e31057
--- /dev/null
@@ -0,0 +1,66 @@
+/** \file\r
+ *\r
+ *  This file contains special DoxyGen information for the generation of the main page and other special\r
+ *  documentation pages. It is not a project source file.\r
+ */\r
\r
+/** \mainpage Dual HID Keyboard and Mouse Device Demo\r
+ *\r
+ *  \section SSec_Info USB Information:\r
+ *\r
+ *  The following table gives a rundown of the USB utilization of this demo.\r
+ *\r
+ *  <table>\r
+ *   <tr>\r
+ *    <td><b>USB Mode:</b></td>\r
+ *    <td>Device</td>\r
+ *   </tr>\r
+ *   <tr>\r
+ *    <td><b>USB Class:</b></td>\r
+ *    <td>Human Interface Device (HID)</td>\r
+ *   </tr>\r
+ *   <tr> \r
+ *    <td><b>USB Subclass:</b></td>\r
+ *    <td>N/A</td>\r
+ *   </tr>\r
+ *   <tr>\r
+ *    <td><b>Relevant Standards:</b></td>\r
+ *    <td>USBIF HID Specification, USBIF HID Usage Tables</td>\r
+ *   </tr>\r
+ *   <tr>\r
+ *    <td><b>Usable Speeds:</b></td>\r
+ *    <td>Low Speed Mode, Full Speed Mode</td>\r
+ *   </tr>\r
+ *  </table>\r
+ *\r
+ *  \section SSec_Description Project Description: \r
+ *\r
+ *  Keyboard/Mouse demonstration application. This gives a simple reference\r
+ *  application for implementing a composite device containing both USB Keyboard\r
+ *  and USB Mouse functionality using the basic USB HID drivers in all modern OSes\r
+ *  (i.e. no special drivers required). This example uses two separate HID\r
+ *  interfaces for each function. It is boot protocol compatible, and thus works under\r
+ *  compatible BIOS as if it was a native keyboard and mouse (e.g. PS/2).\r
+ *  \r
+ *  On start-up the system will automatically enumerate and function\r
+ *  as a keyboard when the USB connection to a host is present and the HWB is not\r
+ *  pressed. When enabled, manipulate the joystick to send the letters\r
+ *  a, b, c, d and e. See the USB HID documentation for more information\r
+ *  on sending keyboard event and key presses.\r
+ *  \r
+ *  When the HWB is pressed, the mouse mode is enabled. When enabled, move the\r
+ *  joystick to move the pointer, and push the joystick inwards to simulate a\r
+ *  left-button click.\r
+ *\r
+ *  \section SSec_Options Project Options\r
+ *\r
+ *  The following defines can be found in this demo, which can control the demo behaviour when defined, or changed in value.\r
+ *\r
+ *  <table>\r
+ *   <tr>\r
+ *    <td>\r
+ *     None\r
+ *    </td>\r
+ *   </tr>\r
+ *  </table>\r
+ */\r
diff --git a/Demos/Device/LowLevel/KeyboardMouse/makefile b/Demos/Device/LowLevel/KeyboardMouse/makefile
new file mode 100644 (file)
index 0000000..c6b34d9
--- /dev/null
@@ -0,0 +1,734 @@
+# Hey Emacs, this is a -*- makefile -*-\r
+#----------------------------------------------------------------------------\r
+# WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al.\r
+#  >> Modified for use with the LUFA project. <<\r
+#\r
+# Released to the Public Domain\r
+#\r
+# Additional material for this makefile was written by:\r
+# Peter Fleury\r
+# Tim Henigan\r
+# Colin O'Flynn\r
+# Reiner Patommel\r
+# Markus Pfaff\r
+# Sander Pool\r
+# Frederik Rouleau\r
+# Carlos Lamas\r
+# Dean Camera\r
+# Opendous Inc.\r
+# Denver Gingerich\r
+#\r
+#----------------------------------------------------------------------------\r
+# On command line:\r
+#\r
+# make all = Make software.\r
+#\r
+# make clean = Clean out built project files.\r
+#\r
+# make coff = Convert ELF to AVR COFF.\r
+#\r
+# make extcoff = Convert ELF to AVR Extended COFF.\r
+#\r
+# make program = Download the hex file to the device, using avrdude.\r
+#                Please customize the avrdude settings below first!\r
+#\r
+# make dfu = Download the hex file to the device, using dfu-programmer (must\r
+#            have dfu-programmer installed).\r
+#\r
+# make flip = Download the hex file to the device, using Atmel FLIP (must\r
+#             have Atmel FLIP installed).\r
+#\r
+# make dfu-ee = Download the eeprom file to the device, using dfu-programmer\r
+#               (must have dfu-programmer installed).\r
+#\r
+# make flip-ee = Download the eeprom file to the device, using Atmel FLIP\r
+#                (must have Atmel FLIP installed).\r
+#\r
+# make doxygen = Generate DoxyGen documentation for the project (must have\r
+#                DoxyGen installed)\r
+#\r
+# make debug = Start either simulavr or avarice as specified for debugging, \r
+#              with avr-gdb or avr-insight as the front end for debugging.\r
+#\r
+# make filename.s = Just compile filename.c into the assembler code only.\r
+#\r
+# make filename.i = Create a preprocessed source file for use in submitting\r
+#                   bug reports to the GCC project.\r
+#\r
+# To rebuild project do "make clean" then "make all".\r
+#----------------------------------------------------------------------------\r
+\r
+\r
+# MCU name\r
+MCU = at90usb1287\r
+\r
+\r
+# Target board (see library "Board Types" documentation, USER or blank for projects not requiring\r
+# LUFA board drivers). If USER is selected, put custom board drivers in a directory called \r
+# "Board" inside the application directory.\r
+BOARD  = USBKEY\r
+\r
+\r
+# Processor frequency.\r
+#     This will define a symbol, F_CPU, in all source code files equal to the \r
+#     processor frequency. You can then use this symbol in your source code to \r
+#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done\r
+#     automatically to create a 32-bit value in your source code.\r
+#     Typical values are:\r
+#         F_CPU =  1000000\r
+#         F_CPU =  1843200\r
+#         F_CPU =  2000000\r
+#         F_CPU =  3686400\r
+#         F_CPU =  4000000\r
+#         F_CPU =  7372800\r
+#         F_CPU =  8000000\r
+#         F_CPU = 11059200\r
+#         F_CPU = 14745600\r
+#         F_CPU = 16000000\r
+#         F_CPU = 18432000\r
+#         F_CPU = 20000000\r
+F_CPU = 8000000\r
+\r
+\r
+# Input clock frequency.\r
+#     This will define a symbol, F_CLOCK, in all source code files equal to the \r
+#     input clock frequency (before any prescaling is performed). This value may\r
+#     differ from F_CPU if prescaling is used on the latter, and is required as the\r
+#     raw input clock is fed directly to the PLL sections of the AVR for high speed\r
+#     clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'\r
+#     at the end, this will be done automatically to create a 32-bit value in your\r
+#     source code.\r
+#\r
+#     If no clock division is performed on the input clock inside the AVR (via the\r
+#     CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.\r
+F_CLOCK = 8000000\r
+\r
+\r
+# Output format. (can be srec, ihex, binary)\r
+FORMAT = ihex\r
+\r
+\r
+# Target file name (without extension).\r
+TARGET = KeyboardMouse\r
+\r
+\r
+# Object files directory\r
+#     To put object files in current directory, use a dot (.), do NOT make\r
+#     this an empty or blank macro!\r
+OBJDIR = .\r
+\r
+\r
+# Path to the LUFA library\r
+LUFA_PATH = ../../..\r
+\r
+\r
+# List C source files here. (C dependencies are automatically generated.)\r
+SRC = $(TARGET).c                                                 \\r
+         Descriptors.c                                               \\r
+         $(LUFA_PATH)/LUFA/Scheduler/Scheduler.c                     \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/DevChapter9.c        \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Endpoint.c           \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Host.c               \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/HostChapter9.c       \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/LowLevel.c           \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Pipe.c               \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/Events.c            \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBInterrupt.c      \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBTask.c           \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/ConfigDescriptor.c  \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/Class/HIDParser.c             \\r
+\r
+\r
+# List C++ source files here. (C dependencies are automatically generated.)\r
+CPPSRC = \r
+\r
+\r
+# List Assembler source files here.\r
+#     Make them always end in a capital .S.  Files ending in a lowercase .s\r
+#     will not be considered source files but generated files (assembler\r
+#     output from the compiler), and will be deleted upon "make clean"!\r
+#     Even though the DOS/Win* filesystem matches both .s and .S the same,\r
+#     it will preserve the spelling of the filenames, and gcc itself does\r
+#     care about how the name is spelled on its command-line.\r
+ASRC =\r
+\r
+\r
+# Optimization level, can be [0, 1, 2, 3, s]. \r
+#     0 = turn off optimization. s = optimize for size.\r
+#     (Note: 3 is not always the best optimization level. See avr-libc FAQ.)\r
+OPT = s\r
+\r
+\r
+# Debugging format.\r
+#     Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs.\r
+#     AVR Studio 4.10 requires dwarf-2.\r
+#     AVR [Extended] COFF format requires stabs, plus an avr-objcopy run.\r
+DEBUG = dwarf-2\r
+\r
+\r
+# List any extra directories to look for include files here.\r
+#     Each directory must be seperated by a space.\r
+#     Use forward slashes for directory separators.\r
+#     For a directory that has spaces, enclose it in quotes.\r
+EXTRAINCDIRS = $(LUFA_PATH)/\r
+\r
+\r
+# Compiler flag to set the C Standard level.\r
+#     c89   = "ANSI" C\r
+#     gnu89 = c89 plus GCC extensions\r
+#     c99   = ISO C99 standard (not yet fully implemented)\r
+#     gnu99 = c99 plus GCC extensions\r
+CSTANDARD = -std=gnu99\r
+\r
+\r
+# Place -D or -U options here for C sources\r
+CDEFS  = -DF_CPU=$(F_CPU)UL -DF_CLOCK=$(F_CLOCK)UL -DBOARD=BOARD_$(BOARD)\r
+CDEFS += -DUSE_NONSTANDARD_DESCRIPTOR_NAMES -DNO_STREAM_CALLBACKS -DUSB_DEVICE_ONLY\r
+CDEFS += -DFIXED_CONTROL_ENDPOINT_SIZE=8 -DUSE_SINGLE_DEVICE_CONFIGURATION\r
+CDEFS += -DUSE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)"\r
+\r
+\r
+# Place -D or -U options here for ASM sources\r
+ADEFS = -DF_CPU=$(F_CPU)\r
+\r
+\r
+# Place -D or -U options here for C++ sources\r
+CPPDEFS = -DF_CPU=$(F_CPU)UL\r
+#CPPDEFS += -D__STDC_LIMIT_MACROS\r
+#CPPDEFS += -D__STDC_CONSTANT_MACROS\r
+\r
+\r
+\r
+#---------------- Compiler Options C ----------------\r
+#  -g*:          generate debugging information\r
+#  -O*:          optimization level\r
+#  -f...:        tuning, see GCC manual and avr-libc documentation\r
+#  -Wall...:     warning level\r
+#  -Wa,...:      tell GCC to pass this to the assembler.\r
+#    -adhlns...: create assembler listing\r
+CFLAGS = -g$(DEBUG)\r
+CFLAGS += $(CDEFS)\r
+CFLAGS += -O$(OPT)\r
+CFLAGS += -funsigned-char\r
+CFLAGS += -funsigned-bitfields\r
+CFLAGS += -ffunction-sections\r
+CFLAGS += -fpack-struct\r
+CFLAGS += -fshort-enums\r
+CFLAGS += -finline-limit=20\r
+CFLAGS += -Wall\r
+CFLAGS += -Wstrict-prototypes\r
+CFLAGS += -Wundef\r
+#CFLAGS += -fno-unit-at-a-time\r
+#CFLAGS += -Wunreachable-code\r
+#CFLAGS += -Wsign-compare\r
+CFLAGS += -Wa,-adhlns=$(<:%.c=$(OBJDIR)/%.lst)\r
+CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))\r
+CFLAGS += $(CSTANDARD)\r
+\r
+\r
+#---------------- Compiler Options C++ ----------------\r
+#  -g*:          generate debugging information\r
+#  -O*:          optimization level\r
+#  -f...:        tuning, see GCC manual and avr-libc documentation\r
+#  -Wall...:     warning level\r
+#  -Wa,...:      tell GCC to pass this to the assembler.\r
+#    -adhlns...: create assembler listing\r
+CPPFLAGS = -g$(DEBUG)\r
+CPPFLAGS += $(CPPDEFS)\r
+CPPFLAGS += -O$(OPT)\r
+CPPFLAGS += -funsigned-char\r
+CPPFLAGS += -funsigned-bitfields\r
+CPPFLAGS += -fpack-struct\r
+CPPFLAGS += -fshort-enums\r
+CPPFLAGS += -fno-exceptions\r
+CPPFLAGS += -Wall\r
+CFLAGS += -Wundef\r
+#CPPFLAGS += -mshort-calls\r
+#CPPFLAGS += -fno-unit-at-a-time\r
+#CPPFLAGS += -Wstrict-prototypes\r
+#CPPFLAGS += -Wunreachable-code\r
+#CPPFLAGS += -Wsign-compare\r
+CPPFLAGS += -Wa,-adhlns=$(<:%.cpp=$(OBJDIR)/%.lst)\r
+CPPFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))\r
+#CPPFLAGS += $(CSTANDARD)\r
+\r
+\r
+#---------------- Assembler Options ----------------\r
+#  -Wa,...:   tell GCC to pass this to the assembler.\r
+#  -adhlns:   create listing\r
+#  -gstabs:   have the assembler create line number information; note that\r
+#             for use in COFF files, additional information about filenames\r
+#             and function names needs to be present in the assembler source\r
+#             files -- see avr-libc docs [FIXME: not yet described there]\r
+#  -listing-cont-lines: Sets the maximum number of continuation lines of hex \r
+#       dump that will be displayed for a given single line of source input.\r
+ASFLAGS = $(ADEFS) -Wa,-adhlns=$(<:%.S=$(OBJDIR)/%.lst),-gstabs,--listing-cont-lines=100\r
+\r
+\r
+#---------------- Library Options ----------------\r
+# Minimalistic printf version\r
+PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min\r
+\r
+# Floating point printf version (requires MATH_LIB = -lm below)\r
+PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt\r
+\r
+# If this is left blank, then it will use the Standard printf version.\r
+PRINTF_LIB = \r
+#PRINTF_LIB = $(PRINTF_LIB_MIN)\r
+#PRINTF_LIB = $(PRINTF_LIB_FLOAT)\r
+\r
+\r
+# Minimalistic scanf version\r
+SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min\r
+\r
+# Floating point + %[ scanf version (requires MATH_LIB = -lm below)\r
+SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt\r
+\r
+# If this is left blank, then it will use the Standard scanf version.\r
+SCANF_LIB = \r
+#SCANF_LIB = $(SCANF_LIB_MIN)\r
+#SCANF_LIB = $(SCANF_LIB_FLOAT)\r
+\r
+\r
+MATH_LIB = -lm\r
+\r
+\r
+# List any extra directories to look for libraries here.\r
+#     Each directory must be seperated by a space.\r
+#     Use forward slashes for directory separators.\r
+#     For a directory that has spaces, enclose it in quotes.\r
+EXTRALIBDIRS = \r
+\r
+\r
+\r
+#---------------- External Memory Options ----------------\r
+\r
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),\r
+# used for variables (.data/.bss) and heap (malloc()).\r
+#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff\r
+\r
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),\r
+# only used for heap (malloc()).\r
+#EXTMEMOPTS = -Wl,--section-start,.data=0x801100,--defsym=__heap_end=0x80ffff\r
+\r
+EXTMEMOPTS =\r
+\r
+\r
+\r
+#---------------- Linker Options ----------------\r
+#  -Wl,...:     tell GCC to pass this to linker.\r
+#    -Map:      create map file\r
+#    --cref:    add cross reference to  map file\r
+LDFLAGS = -Wl,-Map=$(TARGET).map,--cref\r
+LDFLAGS += -Wl,--relax \r
+LDFLAGS += -Wl,--gc-sections\r
+LDFLAGS += $(EXTMEMOPTS)\r
+LDFLAGS += $(patsubst %,-L%,$(EXTRALIBDIRS))\r
+LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)\r
+#LDFLAGS += -T linker_script.x\r
+\r
+\r
+\r
+#---------------- Programming Options (avrdude) ----------------\r
+\r
+# Programming hardware: alf avr910 avrisp bascom bsd \r
+# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500\r
+#\r
+# Type: avrdude -c ?\r
+# to get a full listing.\r
+#\r
+AVRDUDE_PROGRAMMER = jtagmkII\r
+\r
+# com1 = serial port. Use lpt1 to connect to parallel port.\r
+AVRDUDE_PORT = usb\r
+\r
+AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex\r
+#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep\r
+\r
+\r
+# Uncomment the following if you want avrdude's erase cycle counter.\r
+# Note that this counter needs to be initialized first using -Yn,\r
+# see avrdude manual.\r
+#AVRDUDE_ERASE_COUNTER = -y\r
+\r
+# Uncomment the following if you do /not/ wish a verification to be\r
+# performed after programming the device.\r
+#AVRDUDE_NO_VERIFY = -V\r
+\r
+# Increase verbosity level.  Please use this when submitting bug\r
+# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude> \r
+# to submit bug reports.\r
+#AVRDUDE_VERBOSE = -v -v\r
+\r
+AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)\r
+AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY)\r
+AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE)\r
+AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER)\r
+\r
+\r
+\r
+#---------------- Debugging Options ----------------\r
+\r
+# For simulavr only - target MCU frequency.\r
+DEBUG_MFREQ = $(F_CPU)\r
+\r
+# Set the DEBUG_UI to either gdb or insight.\r
+# DEBUG_UI = gdb\r
+DEBUG_UI = insight\r
+\r
+# Set the debugging back-end to either avarice, simulavr.\r
+DEBUG_BACKEND = avarice\r
+#DEBUG_BACKEND = simulavr\r
+\r
+# GDB Init Filename.\r
+GDBINIT_FILE = __avr_gdbinit\r
+\r
+# When using avarice settings for the JTAG\r
+JTAG_DEV = /dev/com1\r
+\r
+# Debugging port used to communicate between GDB / avarice / simulavr.\r
+DEBUG_PORT = 4242\r
+\r
+# Debugging host used to communicate between GDB / avarice / simulavr, normally\r
+#     just set to localhost unless doing some sort of crazy debugging when \r
+#     avarice is running on a different computer.\r
+DEBUG_HOST = localhost\r
+\r
+\r
+\r
+#============================================================================\r
+\r
+\r
+# Define programs and commands.\r
+SHELL = sh\r
+CC = avr-gcc\r
+OBJCOPY = avr-objcopy\r
+OBJDUMP = avr-objdump\r
+SIZE = avr-size\r
+AR = avr-ar rcs\r
+NM = avr-nm\r
+AVRDUDE = avrdude\r
+REMOVE = rm -f\r
+REMOVEDIR = rm -rf\r
+COPY = cp\r
+WINSHELL = cmd\r
+\r
+# Define Messages\r
+# English\r
+MSG_ERRORS_NONE = Errors: none\r
+MSG_BEGIN = -------- begin --------\r
+MSG_END = --------  end  --------\r
+MSG_SIZE_BEFORE = Size before: \r
+MSG_SIZE_AFTER = Size after:\r
+MSG_COFF = Converting to AVR COFF:\r
+MSG_EXTENDED_COFF = Converting to AVR Extended COFF:\r
+MSG_FLASH = Creating load file for Flash:\r
+MSG_EEPROM = Creating load file for EEPROM:\r
+MSG_EXTENDED_LISTING = Creating Extended Listing:\r
+MSG_SYMBOL_TABLE = Creating Symbol Table:\r
+MSG_LINKING = Linking:\r
+MSG_COMPILING = Compiling C:\r
+MSG_COMPILING_CPP = Compiling C++:\r
+MSG_ASSEMBLING = Assembling:\r
+MSG_CLEANING = Cleaning project:\r
+MSG_CREATING_LIBRARY = Creating library:\r
+\r
+\r
+\r
+\r
+# Define all object files.\r
+OBJ = $(SRC:%.c=$(OBJDIR)/%.o) $(CPPSRC:%.cpp=$(OBJDIR)/%.o) $(ASRC:%.S=$(OBJDIR)/%.o) \r
+\r
+# Define all listing files.\r
+LST = $(SRC:%.c=$(OBJDIR)/%.lst) $(CPPSRC:%.cpp=$(OBJDIR)/%.lst) $(ASRC:%.S=$(OBJDIR)/%.lst) \r
+\r
+\r
+# Compiler flags to generate dependency files.\r
+GENDEPFLAGS = -MMD -MP -MF .dep/$(@F).d\r
+\r
+\r
+# Combine all necessary flags and optional flags.\r
+# Add target processor to flags.\r
+ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS)\r
+ALL_CPPFLAGS = -mmcu=$(MCU) -I. -x c++ $(CPPFLAGS) $(GENDEPFLAGS)\r
+ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)\r
+\r
+\r
+\r
+\r
+\r
+# Default target.\r
+all: begin gccversion sizebefore build checkhooks checklibmode checkboard sizeafter end\r
+\r
+# Change the build target to build a HEX file or a library.\r
+build: elf hex eep lss sym\r
+#build: lib\r
+\r
+\r
+elf: $(TARGET).elf\r
+hex: $(TARGET).hex\r
+eep: $(TARGET).eep\r
+lss: $(TARGET).lss\r
+sym: $(TARGET).sym\r
+LIBNAME=lib$(TARGET).a\r
+lib: $(LIBNAME)\r
+\r
+\r
+\r
+# Eye candy.\r
+# AVR Studio 3.x does not check make's exit code but relies on\r
+# the following magic strings to be generated by the compile job.\r
+begin:\r
+       @echo\r
+       @echo $(MSG_BEGIN)\r
+\r
+end:\r
+       @echo $(MSG_END)\r
+       @echo\r
+\r
+\r
+# Display size of file.\r
+HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex\r
+ELFSIZE = $(SIZE) $(MCU_FLAG) $(FORMAT_FLAG) $(TARGET).elf\r
+MCU_FLAG = $(shell $(SIZE) --help | grep -- --mcu > /dev/null && echo --mcu=$(MCU) )\r
+FORMAT_FLAG = $(shell $(SIZE) --help | grep -- --format=.*avr > /dev/null && echo --format=avr )\r
+\r
+sizebefore:\r
+       @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \\r
+       2>/dev/null; echo; fi\r
+\r
+sizeafter:\r
+       @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \\r
+       2>/dev/null; echo; fi\r
+\r
+checkhooks: build\r
+       @echo\r
+       @echo ------- Unhooked LUFA Events -------\r
+       @$(shell) (grep -s '^EVENT_.*LUFA/.*\\.o' $(TARGET).map | \\r
+                  cut -d' ' -f1 | cut -d'_' -f2- | grep ".*") || \\r
+                          echo "(None)"\r
+       @echo ------------------------------------\r
+\r
+checklibmode:\r
+       @echo\r
+       @echo ----------- Library Mode -----------\r
+       @$(shell) ($(CC) $(ALL_CFLAGS) -E -dM - < /dev/null \\r
+                 | grep 'USB_\(DEVICE\|HOST\)_ONLY' | cut -d' ' -f2 | grep ".*") \\r
+                 || echo "No specific mode (both device and host mode allowable)."\r
+       @echo ------------------------------------\r
+\r
+checkboard:\r
+       @echo\r
+       @echo ---------- Selected Board ----------\r
+       @echo Selected board model is $(BOARD).\r
+       @echo ------------------------------------\r
+       \r
+# Display compiler version information.\r
+gccversion : \r
+       @$(CC) --version\r
+\r
+\r
+\r
+# Program the device.  \r
+program: $(TARGET).hex $(TARGET).eep\r
+       $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)\r
+\r
+flip: $(TARGET).hex\r
+       batchisp -hardware usb -device $(MCU) -operation erase f\r
+       batchisp -hardware usb -device $(MCU) -operation loadbuffer $(TARGET).hex program\r
+       batchisp -hardware usb -device $(MCU) -operation start reset 0\r
+\r
+dfu: $(TARGET).hex\r
+       dfu-programmer $(MCU) erase\r
+       dfu-programmer $(MCU) flash --debug 1 $(TARGET).hex\r
+       dfu-programmer $(MCU) reset\r
+\r
+flip-ee: $(TARGET).hex $(TARGET).eep\r
+       copy $(TARGET).eep $(TARGET)eep.hex\r
+       batchisp -hardware usb -device $(MCU) -operation memory EEPROM erase\r
+       batchisp -hardware usb -device $(MCU) -operation memory EEPROM loadbuffer $(TARGET)eep.hex program\r
+       batchisp -hardware usb -device $(MCU) -operation start reset 0\r
+\r
+dfu-ee: $(TARGET).hex $(TARGET).eep\r
+       dfu-programmer $(MCU) flash-eeprom --debug 1 --suppress-bootloader-mem $(TARGET).eep\r
+       dfu-programmer $(MCU) reset\r
+\r
+\r
+# Generate avr-gdb config/init file which does the following:\r
+#     define the reset signal, load the target file, connect to target, and set \r
+#     a breakpoint at main().\r
+gdb-config: \r
+       @$(REMOVE) $(GDBINIT_FILE)\r
+       @echo define reset >> $(GDBINIT_FILE)\r
+       @echo SIGNAL SIGHUP >> $(GDBINIT_FILE)\r
+       @echo end >> $(GDBINIT_FILE)\r
+       @echo file $(TARGET).elf >> $(GDBINIT_FILE)\r
+       @echo target remote $(DEBUG_HOST):$(DEBUG_PORT)  >> $(GDBINIT_FILE)\r
+ifeq ($(DEBUG_BACKEND),simulavr)\r
+       @echo load  >> $(GDBINIT_FILE)\r
+endif\r
+       @echo break main >> $(GDBINIT_FILE)\r
+\r
+debug: gdb-config $(TARGET).elf\r
+ifeq ($(DEBUG_BACKEND), avarice)\r
+       @echo Starting AVaRICE - Press enter when "waiting to connect" message displays.\r
+       @$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \\r
+       $(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT)\r
+       @$(WINSHELL) /c pause\r
+\r
+else\r
+       @$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \\r
+       $(DEBUG_MFREQ) --port $(DEBUG_PORT)\r
+endif\r
+       @$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE)\r
+\r
+\r
+\r
+\r
+# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.\r
+COFFCONVERT = $(OBJCOPY) --debugging\r
+COFFCONVERT += --change-section-address .data-0x800000\r
+COFFCONVERT += --change-section-address .bss-0x800000\r
+COFFCONVERT += --change-section-address .noinit-0x800000\r
+COFFCONVERT += --change-section-address .eeprom-0x810000\r
+\r
+\r
+\r
+coff: $(TARGET).elf\r
+       @echo\r
+       @echo $(MSG_COFF) $(TARGET).cof\r
+       $(COFFCONVERT) -O coff-avr $< $(TARGET).cof\r
+\r
+\r
+extcoff: $(TARGET).elf\r
+       @echo\r
+       @echo $(MSG_EXTENDED_COFF) $(TARGET).cof\r
+       $(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof\r
+\r
+\r
+\r
+# Create final output files (.hex, .eep) from ELF output file.\r
+%.hex: %.elf\r
+       @echo\r
+       @echo $(MSG_FLASH) $@\r
+       $(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@\r
+\r
+%.eep: %.elf\r
+       @echo\r
+       @echo $(MSG_EEPROM) $@\r
+       -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \\r
+       --change-section-lma .eeprom=0 --no-change-warnings -O $(FORMAT) $< $@ || exit 0\r
+\r
+# Create extended listing file from ELF output file.\r
+%.lss: %.elf\r
+       @echo\r
+       @echo $(MSG_EXTENDED_LISTING) $@\r
+       $(OBJDUMP) -h -z -S $< > $@\r
+\r
+# Create a symbol table from ELF output file.\r
+%.sym: %.elf\r
+       @echo\r
+       @echo $(MSG_SYMBOL_TABLE) $@\r
+       $(NM) -n $< > $@\r
+\r
+\r
+\r
+# Create library from object files.\r
+.SECONDARY : $(TARGET).a\r
+.PRECIOUS : $(OBJ)\r
+%.a: $(OBJ)\r
+       @echo\r
+       @echo $(MSG_CREATING_LIBRARY) $@\r
+       $(AR) $@ $(OBJ)\r
+\r
+\r
+# Link: create ELF output file from object files.\r
+.SECONDARY : $(TARGET).elf\r
+.PRECIOUS : $(OBJ)\r
+%.elf: $(OBJ)\r
+       @echo\r
+       @echo $(MSG_LINKING) $@\r
+       $(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)\r
+\r
+\r
+# Compile: create object files from C source files.\r
+$(OBJDIR)/%.o : %.c\r
+       @echo\r
+       @echo $(MSG_COMPILING) $<\r
+       $(CC) -c $(ALL_CFLAGS) $< -o $@ \r
+\r
+\r
+# Compile: create object files from C++ source files.\r
+$(OBJDIR)/%.o : %.cpp\r
+       @echo\r
+       @echo $(MSG_COMPILING_CPP) $<\r
+       $(CC) -c $(ALL_CPPFLAGS) $< -o $@ \r
+\r
+\r
+# Compile: create assembler files from C source files.\r
+%.s : %.c\r
+       $(CC) -S $(ALL_CFLAGS) $< -o $@\r
+\r
+\r
+# Compile: create assembler files from C++ source files.\r
+%.s : %.cpp\r
+       $(CC) -S $(ALL_CPPFLAGS) $< -o $@\r
+\r
+\r
+# Assemble: create object files from assembler source files.\r
+$(OBJDIR)/%.o : %.S\r
+       @echo\r
+       @echo $(MSG_ASSEMBLING) $<\r
+       $(CC) -c $(ALL_ASFLAGS) $< -o $@\r
+\r
+\r
+# Create preprocessed source for use in sending a bug report.\r
+%.i : %.c\r
+       $(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ \r
+       \r
+\r
+# Target: clean project.\r
+clean: begin clean_list clean_binary end\r
+\r
+clean_binary:\r
+       $(REMOVE) $(TARGET).hex\r
+       \r
+clean_list:\r
+       @echo $(MSG_CLEANING)\r
+       $(REMOVE) $(TARGET).eep\r
+       $(REMOVE) $(TARGET)eep.hex\r
+       $(REMOVE) $(TARGET).cof\r
+       $(REMOVE) $(TARGET).elf\r
+       $(REMOVE) $(TARGET).map\r
+       $(REMOVE) $(TARGET).sym\r
+       $(REMOVE) $(TARGET).lss\r
+       $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.o)\r
+       $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.lst)\r
+       $(REMOVE) $(SRC:.c=.s)\r
+       $(REMOVE) $(SRC:.c=.d)\r
+       $(REMOVE) $(SRC:.c=.i)\r
+       $(REMOVEDIR) .dep\r
+\r
+\r
+doxygen:\r
+       @echo Generating Project Documentation...\r
+       @doxygen Doxygen.conf\r
+       @echo Documentation Generation Complete.\r
+\r
+clean_doxygen:\r
+       rm -rf Documentation\r
+\r
+# Create object files directory\r
+$(shell mkdir $(OBJDIR) 2>/dev/null)\r
+\r
+\r
+# Include the dependency files.\r
+-include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)\r
+\r
+\r
+# Listing of phony targets.\r
+.PHONY : all checkhooks checklibmode checkboard   \\r
+begin finish end sizebefore sizeafter gccversion  \\r
+build elf hex eep lss sym coff extcoff clean      \\r
+clean_list clean_binary program debug gdb-config  \\r
+doxygen dfu flip flip-ee dfu-ee
\ No newline at end of file
diff --git a/Demos/Device/LowLevel/MIDI/Descriptors.c b/Demos/Device/LowLevel/MIDI/Descriptors.c
new file mode 100644 (file)
index 0000000..2007858
--- /dev/null
@@ -0,0 +1,325 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  USB Device Descriptors, for library use when in USB device mode. Descriptors are special \r
+ *  computer-readable structures which the host requests upon device enumeration, to determine\r
+ *  the device's capabilities and functions.  \r
+ */\r
\r
+#include "Descriptors.h"\r
+\r
+/** Device descriptor structure. This descriptor, located in FLASH memory, describes the overall\r
+ *  device characteristics, including the supported USB version, control endpoint size and the\r
+ *  number of device configurations. The descriptor is read out by the USB host when the enumeration\r
+ *  process begins.\r
+ */\r
+USB_Descriptor_Device_t PROGMEM DeviceDescriptor =\r
+{\r
+       .Header                 = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device},\r
+               \r
+       .USBSpecification       = VERSION_BCD(01.10),\r
+       .Class                  = 0x00,\r
+       .SubClass               = 0x00,\r
+       .Protocol               = 0x00,\r
+                               \r
+       .Endpoint0Size          = FIXED_CONTROL_ENDPOINT_SIZE,\r
+               \r
+       .VendorID               = 0x03EB,\r
+       .ProductID              = 0x2048,\r
+       .ReleaseNumber          = 0x0000,\r
+               \r
+       .ManufacturerStrIndex   = 0x01,\r
+       .ProductStrIndex        = 0x02,\r
+       .SerialNumStrIndex      = NO_DESCRIPTOR,\r
+               \r
+       .NumberOfConfigurations = 1\r
+};\r
+\r
+/** Configuration descriptor structure. This descriptor, located in FLASH memory, describes the usage\r
+ *  of the device in one of its supported configurations, including information about any device interfaces\r
+ *  and endpoints. The descriptor is read out by the USB host during the enumeration process when selecting\r
+ *  a configuration so that the host may correctly communicate with the USB device.\r
+ */\r
+USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =\r
+{\r
+       .Config = \r
+               {\r
+                       .Header                   = {.Size = sizeof(USB_Descriptor_Configuration_Header_t), .Type = DTYPE_Configuration},\r
+\r
+                       .TotalConfigurationSize   = sizeof(USB_Descriptor_Configuration_t),\r
+                       .TotalInterfaces          = 2,\r
+\r
+                       .ConfigurationNumber      = 1,\r
+                       .ConfigurationStrIndex    = NO_DESCRIPTOR,\r
+                               \r
+                       .ConfigAttributes         = (USB_CONFIG_ATTR_BUSPOWERED | USB_CONFIG_ATTR_SELFPOWERED),\r
+                       \r
+                       .MaxPowerConsumption      = USB_CONFIG_POWER_MA(100)\r
+               },\r
+               \r
+       .AudioControlInterface = \r
+               {\r
+                       .Header                   = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},\r
+\r
+                       .InterfaceNumber          = 0,\r
+                       .AlternateSetting         = 0,\r
+                       \r
+                       .TotalEndpoints           = 0,\r
+                               \r
+                       .Class                    = 0x01,\r
+                       .SubClass                 = 0x01,\r
+                       .Protocol                 = 0x00,\r
+                               \r
+                       .InterfaceStrIndex        = NO_DESCRIPTOR                       \r
+               },\r
+       \r
+       .AudioControlInterface_SPC = \r
+               {\r
+                       .Header                   = {.Size = sizeof(USB_AudioInterface_AC_t), .Type = DTYPE_AudioInterface},\r
+                       .Subtype                  = DSUBTYPE_Header,\r
+                       \r
+                       .ACSpecification          = VERSION_BCD(01.00),\r
+                       .TotalLength              = sizeof(USB_AudioInterface_AC_t),\r
+                       \r
+                       .InCollection             = 1,\r
+                       .InterfaceNumbers         = {1},                        \r
+               },\r
+\r
+       .AudioStreamInterface = \r
+               {\r
+                       .Header                   = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},\r
+\r
+                       .InterfaceNumber          = 1,\r
+                       .AlternateSetting         = 0,\r
+                       \r
+                       .TotalEndpoints           = 2,\r
+                               \r
+                       .Class                    = 0x01,\r
+                       .SubClass                 = 0x03,\r
+                       .Protocol                 = 0x00,\r
+                               \r
+                       .InterfaceStrIndex        = NO_DESCRIPTOR\r
+               },\r
+               \r
+       .AudioStreamInterface_SPC = \r
+               {\r
+                       .Header                   = {.Size = sizeof(USB_AudioInterface_MIDI_AS_t), .Type = DTYPE_AudioInterface},\r
+                       .Subtype                  = DSUBTYPE_General,\r
+\r
+                       .AudioSpecification       = VERSION_BCD(01.00),\r
+                       \r
+                       .TotalLength              = (sizeof(USB_Descriptor_Configuration_t) - offsetof(USB_Descriptor_Configuration_t, AudioStreamInterface_SPC))\r
+               },\r
+\r
+       .MIDI_In_Jack_Emb = \r
+               {\r
+                       .Header                   = {.Size = sizeof(USB_MIDI_In_Jack_t), .Type = DTYPE_AudioInterface},\r
+                       .Subtype                  = DSUBTYPE_InputJack,\r
+                       \r
+                       .JackType                 = JACKTYPE_EMBEDDED,\r
+                       .JackID                   = 0x01,\r
+                       \r
+                       .JackStrIndex             = NO_DESCRIPTOR\r
+               },\r
+\r
+       .MIDI_In_Jack_Ext = \r
+               {\r
+                       .Header                   = {.Size = sizeof(USB_MIDI_In_Jack_t), .Type = DTYPE_AudioInterface},\r
+                       .Subtype                  = DSUBTYPE_InputJack,\r
+                       \r
+                       .JackType                 = JACKTYPE_EXTERNAL,\r
+                       .JackID                   = 0x02,\r
+                       \r
+                       .JackStrIndex             = NO_DESCRIPTOR\r
+               },\r
+               \r
+       .MIDI_Out_Jack_Emb = \r
+               {\r
+                       .Header                   = {.Size = sizeof(USB_MIDI_Out_Jack_t), .Type = DTYPE_AudioInterface},\r
+                       .Subtype                  = DSUBTYPE_OutputJack,\r
+                       \r
+                       .JackType                 = JACKTYPE_EMBEDDED,\r
+                       .JackID                   = 0x03,\r
+\r
+                       .NumberOfPins             = 1,\r
+                       .SourceJackID             = {0x02},\r
+                       .SourcePinID              = {0x01},\r
+                       \r
+                       .JackStrIndex             = NO_DESCRIPTOR\r
+               },\r
+\r
+       .MIDI_Out_Jack_Ext = \r
+               {\r
+                       .Header                   = {.Size = sizeof(USB_MIDI_Out_Jack_t), .Type = DTYPE_AudioInterface},\r
+                       .Subtype                  = DSUBTYPE_OutputJack,\r
+                       \r
+                       .JackType                 = JACKTYPE_EXTERNAL,\r
+                       .JackID                   = 0x04,\r
+\r
+                       .NumberOfPins             = 1,\r
+                       .SourceJackID             = {0x01},\r
+                       .SourcePinID              = {0x01},\r
+                       \r
+                       .JackStrIndex             = NO_DESCRIPTOR\r
+               },\r
+\r
+       .MIDI_In_Jack_Endpoint = \r
+               {\r
+                       .Endpoint = \r
+                               {\r
+                                       .Header              = {.Size = sizeof(USB_AudioStreamEndpoint_Std_t), .Type = DTYPE_Endpoint},\r
+\r
+                                       .EndpointAddress     = (ENDPOINT_DESCRIPTOR_DIR_OUT | MIDI_STREAM_OUT_EPNUM),\r
+                                       .Attributes          = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA),\r
+                                       .EndpointSize        = MIDI_STREAM_EPSIZE,\r
+                                       .PollingIntervalMS   = 0\r
+                               },\r
+                       \r
+                       .Refresh                  = 0,\r
+                       .SyncEndpointNumber       = 0\r
+               },\r
+               \r
+       .MIDI_In_Jack_Endpoint_SPC = \r
+               {\r
+                       .Header                   = {.Size = sizeof(USB_MIDI_Jack_Endpoint_t), .Type = DTYPE_AudioEndpoint},\r
+                       .Subtype                  = DSUBTYPE_General,\r
+\r
+                       .TotalEmbeddedJacks       = 0x01,\r
+                       .AssociatedJackID         = {0x01}\r
+               },\r
+\r
+       .MIDI_Out_Jack_Endpoint = \r
+               {\r
+                       .Endpoint = \r
+                               {\r
+                                       .Header              = {.Size = sizeof(USB_AudioStreamEndpoint_Std_t), .Type = DTYPE_Endpoint},\r
+\r
+                                       .EndpointAddress     = (ENDPOINT_DESCRIPTOR_DIR_IN | MIDI_STREAM_IN_EPNUM),\r
+                                       .Attributes          = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA),\r
+                                       .EndpointSize        = MIDI_STREAM_EPSIZE,\r
+                                       .PollingIntervalMS   = 0\r
+                               },\r
+                       \r
+                       .Refresh                  = 0,\r
+                       .SyncEndpointNumber       = 0\r
+               },\r
+               \r
+       .MIDI_Out_Jack_Endpoint_SPC = \r
+               {\r
+                       .Header                   = {.Size = sizeof(USB_MIDI_Jack_Endpoint_t), .Type = DTYPE_AudioEndpoint},\r
+                       .Subtype                  = DSUBTYPE_General,\r
+\r
+                       .TotalEmbeddedJacks       = 0x01,\r
+                       .AssociatedJackID         = {0x03}\r
+               }\r
+};\r
+\r
+/** Language descriptor structure. This descriptor, located in FLASH memory, is returned when the host requests\r
+ *  the string descriptor with index 0 (the first index). It is actually an array of 16-bit integers, which indicate\r
+ *  via the language ID table available at USB.org what languages the device supports for its string descriptors.\r
+ */\r
+USB_Descriptor_String_t PROGMEM LanguageString =\r
+{\r
+       .Header                 = {.Size = USB_STRING_LEN(1), .Type = DTYPE_String},\r
+               \r
+       .UnicodeString          = {LANGUAGE_ID_ENG}\r
+};\r
+\r
+/** Manufacturer descriptor string. This is a Unicode string containing the manufacturer's details in human readable\r
+ *  form, and is read out upon request by the host when the appropriate string ID is requested, listed in the Device\r
+ *  Descriptor.\r
+ */\r
+USB_Descriptor_String_t PROGMEM ManufacturerString =\r
+{\r
+       .Header                 = {.Size = USB_STRING_LEN(11), .Type = DTYPE_String},\r
+               \r
+       .UnicodeString          = L"Dean Camera"\r
+};\r
+\r
+/** Product descriptor string. This is a Unicode string containing the product's details in human readable form,\r
+ *  and is read out upon request by the host when the appropriate string ID is requested, listed in the Device\r
+ *  Descriptor.\r
+ */\r
+USB_Descriptor_String_t PROGMEM ProductString =\r
+{\r
+       .Header                 = {.Size = USB_STRING_LEN(14), .Type = DTYPE_String},\r
+               \r
+       .UnicodeString          = L"LUFA MIDI Demo"\r
+};\r
+\r
+/** This function is called by the library when in device mode, and must be overridden (see library "USB Descriptors"\r
+ *  documentation) by the application code so that the address and size of a requested descriptor can be given\r
+ *  to the USB library. When the device receives a Get Descriptor request on the control endpoint, this function\r
+ *  is called so that the descriptor details can be passed back and the appropriate descriptor sent back to the\r
+ *  USB host.\r
+ */\r
+uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
+{\r
+       const uint8_t  DescriptorType   = (wValue >> 8);\r
+       const uint8_t  DescriptorNumber = (wValue & 0xFF);\r
+\r
+       void*    Address = NULL;\r
+       uint16_t Size    = NO_DESCRIPTOR;\r
+\r
+       switch (DescriptorType)\r
+       {\r
+               case DTYPE_Device: \r
+                       Address = (void*)&DeviceDescriptor;\r
+                       Size    = sizeof(USB_Descriptor_Device_t);\r
+                       break;\r
+               case DTYPE_Configuration: \r
+                       Address = (void*)&ConfigurationDescriptor;\r
+                       Size    = sizeof(USB_Descriptor_Configuration_t);\r
+                       break;\r
+               case DTYPE_String: \r
+                       switch (DescriptorNumber)\r
+                       {\r
+                               case 0x00: \r
+                                       Address = (void*)&LanguageString;\r
+                                       Size    = pgm_read_byte(&LanguageString.Header.Size);\r
+                                       break;\r
+                               case 0x01: \r
+                                       Address = (void*)&ManufacturerString;\r
+                                       Size    = pgm_read_byte(&ManufacturerString.Header.Size);\r
+                                       break;\r
+                               case 0x02: \r
+                                       Address = (void*)&ProductString;\r
+                                       Size    = pgm_read_byte(&ProductString.Header.Size);\r
+                                       break;\r
+                       }\r
+                       \r
+                       break;\r
+       }\r
+       \r
+       *DescriptorAddress = Address;\r
+       return Size;\r
+}\r
diff --git a/Demos/Device/LowLevel/MIDI/Descriptors.h b/Demos/Device/LowLevel/MIDI/Descriptors.h
new file mode 100644 (file)
index 0000000..616acab
--- /dev/null
@@ -0,0 +1,189 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  Header file for Descriptors.c.\r
+ */\r
\r
+#ifndef _DESCRIPTORS_H_\r
+#define _DESCRIPTORS_H_\r
+\r
+       /* Includes: */\r
+               #include <LUFA/Drivers/USB/USB.h>\r
+\r
+               #include <avr/pgmspace.h>\r
+\r
+       /* Macros: */\r
+               /** Descriptor header constant to indicate a Audio class interface descriptor. */\r
+               #define DTYPE_AudioInterface        0x24\r
+\r
+               /** Descriptor header constant to indicate a Audio class endpoint descriptor. */\r
+               #define DTYPE_AudioEndpoint         0x25\r
+\r
+               /** Audio class descriptor subtype value for a Audio class specific header descriptor. */\r
+               #define DSUBTYPE_Header             0x01\r
+\r
+               /** Audio class descriptor subtype value for a Audio class specific MIDI input jack descriptor. */\r
+               #define DSUBTYPE_InputJack          0x02\r
+\r
+               /** Audio class descriptor subtype value for a Audio class specific MIDI output jack descriptor. */\r
+               #define DSUBTYPE_OutputJack         0x03\r
+\r
+               /** Audio class descriptor subtype value for a general Audio class specific descriptor. */\r
+               #define DSUBTYPE_General            0x01\r
+\r
+               /** Audio class descriptor jack type value for an embedded (logical) MIDI input or output jack. */\r
+               #define JACKTYPE_EMBEDDED           0x01\r
+\r
+               /** Audio class descriptor jack type value for an external (physical) MIDI input or output jack. */\r
+               #define JACKTYPE_EXTERNAL           0x02\r
+               \r
+               /** Endpoint number of the MIDI streaming data OUT endpoint, for host-to-device data transfers. */\r
+               #define MIDI_STREAM_OUT_EPNUM       1\r
+\r
+               /** Endpoint number of the MIDI streaming data IN endpoint, for device-to-host data transfers. */\r
+               #define MIDI_STREAM_IN_EPNUM        2\r
+\r
+               /** Endpoint size in bytes of the Audio isochronous streaming data IN and OUT endpoints. */\r
+               #define MIDI_STREAM_EPSIZE          64\r
+               \r
+       /* Type Defines: */\r
+               /** Type define for an Audio class specific interface descriptor. This follows a regular interface descriptor to\r
+                *  supply extra information about the audio device's layout to the host. See the USB Audio specification for more\r
+                *  details.\r
+                */\r
+               typedef struct\r
+               {\r
+                       USB_Descriptor_Header_t   Header; /**< Regular descriptor header containing the descriptor's type and length */\r
+                       uint8_t                   Subtype; /**< Sub type value used to distinguish between audio class specific descriptors */\r
+\r
+                       uint16_t                  ACSpecification; /** Binary coded decimal value, indicating the supported Audio Class specification version */\r
+                       uint16_t                  TotalLength; /** Total length of the Audio class specific control descriptors, including this descriptor */\r
+                       \r
+                       uint8_t                   InCollection; /** Total number of audio class interfaces within this device */\r
+                       uint8_t                   InterfaceNumbers[1]; /** Interface numbers of each audio interface */\r
+               } USB_AudioInterface_AC_t;\r
+               \r
+               /** Type define for an Audio class specific MIDI streaming interface descriptor. This indicates to the host\r
+                *  how MIDI the specification compliance of the device and the total length of the Audio class specific descriptors.\r
+                *  See the USB Audio specification for more details.\r
+                */\r
+               typedef struct\r
+               {\r
+                       USB_Descriptor_Header_t   Header; /**< Regular descriptor header containing the descriptor's type and length */\r
+                       uint8_t                   Subtype; /**< Sub type value used to distinguish between audio class specific descriptors */\r
+                       \r
+                       uint16_t                  AudioSpecification; /**< Binary coded decimal value, indicating the supported Audio Class specification version */\r
+                       uint16_t                  TotalLength; /**< Total length of the Audio class specific descriptors, including this descriptor */\r
+               } USB_AudioInterface_MIDI_AS_t;\r
+               \r
+               /** Type define for an Audio class specific endpoint descriptor. This contains a regular endpoint \r
+                *  descriptor with a few Audio-class specific extensions. See the USB Audio specification for more details.\r
+                */\r
+               typedef struct\r
+               {\r
+                       USB_Descriptor_Endpoint_t Endpoint; /**< Standard endpoint descriptor describing the audio endpoint */\r
+\r
+                       uint8_t                   Refresh; /**< Always set to zero */\r
+                       uint8_t                   SyncEndpointNumber; /**< Endpoint address to send synchronisation information to, if needed (zero otherwise) */\r
+               } USB_AudioStreamEndpoint_Std_t;\r
+\r
+               /** Type define for an Audio class specific MIDI IN jack. This gives information to the host on a MIDI input, either\r
+                *  a physical input jack, or a logical jack (receiving input data internally, or from the host via an endpoint).\r
+                */\r
+               typedef struct\r
+               {\r
+                       USB_Descriptor_Header_t   Header; /**< Regular descriptor header containing the descriptor's type and length */\r
+                       uint8_t                   Subtype; /**< Sub type value used to distinguish between audio class specific descriptors */\r
+\r
+                       uint8_t                   JackType; /**< Type of jack, one of the JACKTYPE_* mask values */\r
+                       uint8_t                   JackID; /**< ID value of this jack - must be a unique value within the device */\r
+                       \r
+                       uint8_t                   JackStrIndex; /**< Index of a string descriptor describing this descriptor within the device */\r
+               } USB_MIDI_In_Jack_t;\r
+\r
+               /** Type define for an Audio class specific MIDI OUT jack. This gives information to the host on a MIDI output, either\r
+                *  a physical output jack, or a logical jack (sending output data internally, or to the host via an endpoint).\r
+                */\r
+               typedef struct\r
+               {\r
+                       USB_Descriptor_Header_t   Header; /**< Regular descriptor header containing the descriptor's type and length */\r
+                       uint8_t                   Subtype; /**< Sub type value used to distinguish between audio class specific descriptors */\r
+\r
+                       uint8_t                   JackType; /**< Type of jack, one of the JACKTYPE_* mask values */\r
+                       uint8_t                   JackID; /**< ID value of this jack - must be a unique value within the device */\r
+                       \r
+                       uint8_t                   NumberOfPins; /**< Number of output channels within the jack, either physical or logical */\r
+                       uint8_t                   SourceJackID[1]; /**< ID of each output pin's source data jack */\r
+                       uint8_t                   SourcePinID[1]; /**< Pin number in the input jack of each output pin's source data */\r
+                       \r
+                       uint8_t                   JackStrIndex; /**< Index of a string descriptor describing this descriptor within the device */\r
+               } USB_MIDI_Out_Jack_t;\r
+               \r
+               /** Type define for an Audio class specific extended MIDI jack endpoint descriptor. This contains extra information\r
+                *  on the usage of MIDI endpoints used to stream MIDI events in and out of the USB Audio device, and follows an Audio\r
+                *  class specific extended MIDI endpoint descriptor. See the USB Audio specification for more details.\r
+                */\r
+               typedef struct\r
+               {\r
+                       USB_Descriptor_Header_t   Header; /**< Regular descriptor header containing the descriptor's type and length */\r
+                       uint8_t                   Subtype; /**< Sub type value used to distinguish between audio class specific descriptors */\r
+\r
+                       uint8_t                   TotalEmbeddedJacks; /**< Total number of jacks inside this endpoint */\r
+                       uint8_t                   AssociatedJackID[1]; /**< IDs of each jack inside the endpoint */\r
+               } USB_MIDI_Jack_Endpoint_t;\r
+\r
+               /** Type define for the device configuration descriptor structure. This must be defined in the\r
+                *  application code, as the configuration descriptor contains several sub-descriptors which\r
+                *  vary between devices, and which describe the device's usage to the host.\r
+                */\r
+               typedef struct\r
+               {\r
+                       USB_Descriptor_Configuration_Header_t Config;\r
+                       USB_Descriptor_Interface_t            AudioControlInterface;\r
+                       USB_AudioInterface_AC_t               AudioControlInterface_SPC;\r
+                       USB_Descriptor_Interface_t            AudioStreamInterface;\r
+                       USB_AudioInterface_MIDI_AS_t          AudioStreamInterface_SPC;\r
+                       USB_MIDI_In_Jack_t                    MIDI_In_Jack_Emb;\r
+                       USB_MIDI_In_Jack_t                    MIDI_In_Jack_Ext;\r
+                       USB_MIDI_Out_Jack_t                   MIDI_Out_Jack_Emb;\r
+                       USB_MIDI_Out_Jack_t                   MIDI_Out_Jack_Ext;\r
+                       USB_AudioStreamEndpoint_Std_t         MIDI_In_Jack_Endpoint;\r
+                       USB_MIDI_Jack_Endpoint_t              MIDI_In_Jack_Endpoint_SPC;\r
+                       USB_AudioStreamEndpoint_Std_t         MIDI_Out_Jack_Endpoint;\r
+                       USB_MIDI_Jack_Endpoint_t              MIDI_Out_Jack_Endpoint_SPC;\r
+               } USB_Descriptor_Configuration_t;\r
+               \r
+       /* Function Prototypes: */\r
+               uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
+                                                                                       ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);\r
+\r
+#endif\r
diff --git a/Demos/Device/LowLevel/MIDI/Doxygen.conf b/Demos/Device/LowLevel/MIDI/Doxygen.conf
new file mode 100644 (file)
index 0000000..7d36de8
--- /dev/null
@@ -0,0 +1,1485 @@
+# Doxyfile 1.5.7.1\r
+\r
+# This file describes the settings to be used by the documentation system\r
+# doxygen (www.doxygen.org) for a project\r
+#\r
+# All text after a hash (#) is considered a comment and will be ignored\r
+# The format is:\r
+#       TAG = value [value, ...]\r
+# For lists items can also be appended using:\r
+#       TAG += value [value, ...]\r
+# Values that contain spaces should be placed between quotes (" ")\r
+\r
+#---------------------------------------------------------------------------\r
+# Project related configuration options\r
+#---------------------------------------------------------------------------\r
+\r
+# This tag specifies the encoding used for all characters in the config file \r
+# that follow. The default is UTF-8 which is also the encoding used for all \r
+# text before the first occurrence of this tag. Doxygen uses libiconv (or the \r
+# iconv built into libc) for the transcoding. See \r
+# http://www.gnu.org/software/libiconv for the list of possible encodings.\r
+\r
+DOXYFILE_ENCODING      = UTF-8\r
+\r
+# The PROJECT_NAME tag is a single word (or a sequence of words surrounded \r
+# by quotes) that should identify the project.\r
+\r
+PROJECT_NAME           = "LUFA Library - MIDI Device Demo"\r
+\r
+# The PROJECT_NUMBER tag can be used to enter a project or revision number. \r
+# This could be handy for archiving the generated documentation or \r
+# if some version control system is used.\r
+\r
+PROJECT_NUMBER         = 0.0.0\r
+\r
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) \r
+# base path where the generated documentation will be put. \r
+# If a relative path is entered, it will be relative to the location \r
+# where doxygen was started. If left blank the current directory will be used.\r
+\r
+OUTPUT_DIRECTORY       = ./Documentation/\r
+\r
+# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create \r
+# 4096 sub-directories (in 2 levels) under the output directory of each output \r
+# format and will distribute the generated files over these directories. \r
+# Enabling this option can be useful when feeding doxygen a huge amount of \r
+# source files, where putting all generated files in the same directory would \r
+# otherwise cause performance problems for the file system.\r
+\r
+CREATE_SUBDIRS         = YES\r
+\r
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all \r
+# documentation generated by doxygen is written. Doxygen will use this \r
+# information to generate all constant output in the proper language. \r
+# The default language is English, other supported languages are: \r
+# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, \r
+# Croatian, Czech, Danish, Dutch, Farsi, Finnish, French, German, Greek, \r
+# Hungarian, Italian, Japanese, Japanese-en (Japanese with English messages), \r
+# Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, Polish, \r
+# Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, Slovene, \r
+# Spanish, Swedish, and Ukrainian.\r
+\r
+OUTPUT_LANGUAGE        = English\r
+\r
+# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will \r
+# include brief member descriptions after the members that are listed in \r
+# the file and class documentation (similar to JavaDoc). \r
+# Set to NO to disable this.\r
+\r
+BRIEF_MEMBER_DESC      = YES\r
+\r
+# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend \r
+# the brief description of a member or function before the detailed description. \r
+# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the \r
+# brief descriptions will be completely suppressed.\r
+\r
+REPEAT_BRIEF           = YES\r
+\r
+# This tag implements a quasi-intelligent brief description abbreviator \r
+# that is used to form the text in various listings. Each string \r
+# in this list, if found as the leading text of the brief description, will be \r
+# stripped from the text and the result after processing the whole list, is \r
+# used as the annotated text. Otherwise, the brief description is used as-is. \r
+# If left blank, the following values are used ("$name" is automatically \r
+# replaced with the name of the entity): "The $name class" "The $name widget" \r
+# "The $name file" "is" "provides" "specifies" "contains" \r
+# "represents" "a" "an" "the"\r
+\r
+ABBREVIATE_BRIEF       = "The $name class" \\r
+                         "The $name widget" \\r
+                         "The $name file" \\r
+                         is \\r
+                         provides \\r
+                         specifies \\r
+                         contains \\r
+                         represents \\r
+                         a \\r
+                         an \\r
+                         the\r
+\r
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then \r
+# Doxygen will generate a detailed section even if there is only a brief \r
+# description.\r
+\r
+ALWAYS_DETAILED_SEC    = NO\r
+\r
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all \r
+# inherited members of a class in the documentation of that class as if those \r
+# members were ordinary class members. Constructors, destructors and assignment \r
+# operators of the base classes will not be shown.\r
+\r
+INLINE_INHERITED_MEMB  = NO\r
+\r
+# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full \r
+# path before files name in the file list and in the header files. If set \r
+# to NO the shortest path that makes the file name unique will be used.\r
+\r
+FULL_PATH_NAMES        = YES\r
+\r
+# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag \r
+# can be used to strip a user-defined part of the path. Stripping is \r
+# only done if one of the specified strings matches the left-hand part of \r
+# the path. The tag can be used to show relative paths in the file list. \r
+# If left blank the directory from which doxygen is run is used as the \r
+# path to strip.\r
+\r
+STRIP_FROM_PATH        = \r
+\r
+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of \r
+# the path mentioned in the documentation of a class, which tells \r
+# the reader which header file to include in order to use a class. \r
+# If left blank only the name of the header file containing the class \r
+# definition is used. Otherwise one should specify the include paths that \r
+# are normally passed to the compiler using the -I flag.\r
+\r
+STRIP_FROM_INC_PATH    = \r
+\r
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter \r
+# (but less readable) file names. This can be useful is your file systems \r
+# doesn't support long names like on DOS, Mac, or CD-ROM.\r
+\r
+SHORT_NAMES            = YES\r
+\r
+# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen \r
+# will interpret the first line (until the first dot) of a JavaDoc-style \r
+# comment as the brief description. If set to NO, the JavaDoc \r
+# comments will behave just like regular Qt-style comments \r
+# (thus requiring an explicit @brief command for a brief description.)\r
+\r
+JAVADOC_AUTOBRIEF      = NO\r
+\r
+# If the QT_AUTOBRIEF tag is set to YES then Doxygen will \r
+# interpret the first line (until the first dot) of a Qt-style \r
+# comment as the brief description. If set to NO, the comments \r
+# will behave just like regular Qt-style comments (thus requiring \r
+# an explicit \brief command for a brief description.)\r
+\r
+QT_AUTOBRIEF           = NO\r
+\r
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen \r
+# treat a multi-line C++ special comment block (i.e. a block of //! or /// \r
+# comments) as a brief description. This used to be the default behaviour. \r
+# The new default is to treat a multi-line C++ comment block as a detailed \r
+# description. Set this tag to YES if you prefer the old behaviour instead.\r
+\r
+MULTILINE_CPP_IS_BRIEF = NO\r
+\r
+# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented \r
+# member inherits the documentation from any documented member that it \r
+# re-implements.\r
+\r
+INHERIT_DOCS           = YES\r
+\r
+# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce \r
+# a new page for each member. If set to NO, the documentation of a member will \r
+# be part of the file/class/namespace that contains it.\r
+\r
+SEPARATE_MEMBER_PAGES  = NO\r
+\r
+# The TAB_SIZE tag can be used to set the number of spaces in a tab. \r
+# Doxygen uses this value to replace tabs by spaces in code fragments.\r
+\r
+TAB_SIZE               = 4\r
+\r
+# This tag can be used to specify a number of aliases that acts \r
+# as commands in the documentation. An alias has the form "name=value". \r
+# For example adding "sideeffect=\par Side Effects:\n" will allow you to \r
+# put the command \sideeffect (or @sideeffect) in the documentation, which \r
+# will result in a user-defined paragraph with heading "Side Effects:". \r
+# You can put \n's in the value part of an alias to insert newlines.\r
+\r
+ALIASES                = \r
+\r
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C \r
+# sources only. Doxygen will then generate output that is more tailored for C. \r
+# For instance, some of the names that are used will be different. The list \r
+# of all members will be omitted, etc.\r
+\r
+OPTIMIZE_OUTPUT_FOR_C  = YES\r
+\r
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java \r
+# sources only. Doxygen will then generate output that is more tailored for \r
+# Java. For instance, namespaces will be presented as packages, qualified \r
+# scopes will look different, etc.\r
+\r
+OPTIMIZE_OUTPUT_JAVA   = NO\r
+\r
+# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran \r
+# sources only. Doxygen will then generate output that is more tailored for \r
+# Fortran.\r
+\r
+OPTIMIZE_FOR_FORTRAN   = NO\r
+\r
+# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL \r
+# sources. Doxygen will then generate output that is tailored for \r
+# VHDL.\r
+\r
+OPTIMIZE_OUTPUT_VHDL   = NO\r
+\r
+# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want \r
+# to include (a tag file for) the STL sources as input, then you should \r
+# set this tag to YES in order to let doxygen match functions declarations and \r
+# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. \r
+# func(std::string) {}). This also make the inheritance and collaboration \r
+# diagrams that involve STL classes more complete and accurate.\r
+\r
+BUILTIN_STL_SUPPORT    = NO\r
+\r
+# If you use Microsoft's C++/CLI language, you should set this option to YES to\r
+# enable parsing support.\r
+\r
+CPP_CLI_SUPPORT        = NO\r
+\r
+# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. \r
+# Doxygen will parse them like normal C++ but will assume all classes use public \r
+# instead of private inheritance when no explicit protection keyword is present.\r
+\r
+SIP_SUPPORT            = NO\r
+\r
+# For Microsoft's IDL there are propget and propput attributes to indicate getter \r
+# and setter methods for a property. Setting this option to YES (the default) \r
+# will make doxygen to replace the get and set methods by a property in the \r
+# documentation. This will only work if the methods are indeed getting or \r
+# setting a simple type. If this is not the case, or you want to show the \r
+# methods anyway, you should set this option to NO.\r
+\r
+IDL_PROPERTY_SUPPORT   = YES\r
+\r
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC \r
+# tag is set to YES, then doxygen will reuse the documentation of the first \r
+# member in the group (if any) for the other members of the group. By default \r
+# all members of a group must be documented explicitly.\r
+\r
+DISTRIBUTE_GROUP_DOC   = NO\r
+\r
+# Set the SUBGROUPING tag to YES (the default) to allow class member groups of \r
+# the same type (for instance a group of public functions) to be put as a \r
+# subgroup of that type (e.g. under the Public Functions section). Set it to \r
+# NO to prevent subgrouping. Alternatively, this can be done per class using \r
+# the \nosubgrouping command.\r
+\r
+SUBGROUPING            = YES\r
+\r
+# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum \r
+# is documented as struct, union, or enum with the name of the typedef. So \r
+# typedef struct TypeS {} TypeT, will appear in the documentation as a struct \r
+# with name TypeT. When disabled the typedef will appear as a member of a file, \r
+# namespace, or class. And the struct will be named TypeS. This can typically \r
+# be useful for C code in case the coding convention dictates that all compound \r
+# types are typedef'ed and only the typedef is referenced, never the tag name.\r
+\r
+TYPEDEF_HIDES_STRUCT   = NO\r
+\r
+# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to \r
+# determine which symbols to keep in memory and which to flush to disk.\r
+# When the cache is full, less often used symbols will be written to disk.\r
+# For small to medium size projects (<1000 input files) the default value is \r
+# probably good enough. For larger projects a too small cache size can cause \r
+# doxygen to be busy swapping symbols to and from disk most of the time \r
+# causing a significant performance penality. \r
+# If the system has enough physical memory increasing the cache will improve the \r
+# performance by keeping more symbols in memory. Note that the value works on \r
+# a logarithmic scale so increasing the size by one will rougly double the \r
+# memory usage. The cache size is given by this formula: \r
+# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, \r
+# corresponding to a cache size of 2^16 = 65536 symbols\r
+\r
+SYMBOL_CACHE_SIZE      = 0\r
+\r
+#---------------------------------------------------------------------------\r
+# Build related configuration options\r
+#---------------------------------------------------------------------------\r
+\r
+# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in \r
+# documentation are documented, even if no documentation was available. \r
+# Private class members and static file members will be hidden unless \r
+# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES\r
+\r
+EXTRACT_ALL            = YES\r
+\r
+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class \r
+# will be included in the documentation.\r
+\r
+EXTRACT_PRIVATE        = YES\r
+\r
+# If the EXTRACT_STATIC tag is set to YES all static members of a file \r
+# will be included in the documentation.\r
+\r
+EXTRACT_STATIC         = YES\r
+\r
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) \r
+# defined locally in source files will be included in the documentation. \r
+# If set to NO only classes defined in header files are included.\r
+\r
+EXTRACT_LOCAL_CLASSES  = YES\r
+\r
+# This flag is only useful for Objective-C code. When set to YES local \r
+# methods, which are defined in the implementation section but not in \r
+# the interface are included in the documentation. \r
+# If set to NO (the default) only methods in the interface are included.\r
+\r
+EXTRACT_LOCAL_METHODS  = NO\r
+\r
+# If this flag is set to YES, the members of anonymous namespaces will be \r
+# extracted and appear in the documentation as a namespace called \r
+# 'anonymous_namespace{file}', where file will be replaced with the base \r
+# name of the file that contains the anonymous namespace. By default \r
+# anonymous namespace are hidden.\r
+\r
+EXTRACT_ANON_NSPACES   = NO\r
+\r
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all \r
+# undocumented members of documented classes, files or namespaces. \r
+# If set to NO (the default) these members will be included in the \r
+# various overviews, but no documentation section is generated. \r
+# This option has no effect if EXTRACT_ALL is enabled.\r
+\r
+HIDE_UNDOC_MEMBERS     = NO\r
+\r
+# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all \r
+# undocumented classes that are normally visible in the class hierarchy. \r
+# If set to NO (the default) these classes will be included in the various \r
+# overviews. This option has no effect if EXTRACT_ALL is enabled.\r
+\r
+HIDE_UNDOC_CLASSES     = NO\r
+\r
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all \r
+# friend (class|struct|union) declarations. \r
+# If set to NO (the default) these declarations will be included in the \r
+# documentation.\r
+\r
+HIDE_FRIEND_COMPOUNDS  = NO\r
+\r
+# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any \r
+# documentation blocks found inside the body of a function. \r
+# If set to NO (the default) these blocks will be appended to the \r
+# function's detailed documentation block.\r
+\r
+HIDE_IN_BODY_DOCS      = NO\r
+\r
+# The INTERNAL_DOCS tag determines if documentation \r
+# that is typed after a \internal command is included. If the tag is set \r
+# to NO (the default) then the documentation will be excluded. \r
+# Set it to YES to include the internal documentation.\r
+\r
+INTERNAL_DOCS          = NO\r
+\r
+# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate \r
+# file names in lower-case letters. If set to YES upper-case letters are also \r
+# allowed. This is useful if you have classes or files whose names only differ \r
+# in case and if your file system supports case sensitive file names. Windows \r
+# and Mac users are advised to set this option to NO.\r
+\r
+CASE_SENSE_NAMES       = NO\r
+\r
+# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen \r
+# will show members with their full class and namespace scopes in the \r
+# documentation. If set to YES the scope will be hidden.\r
+\r
+HIDE_SCOPE_NAMES       = NO\r
+\r
+# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen \r
+# will put a list of the files that are included by a file in the documentation \r
+# of that file.\r
+\r
+SHOW_INCLUDE_FILES     = YES\r
+\r
+# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] \r
+# is inserted in the documentation for inline members.\r
+\r
+INLINE_INFO            = YES\r
+\r
+# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen \r
+# will sort the (detailed) documentation of file and class members \r
+# alphabetically by member name. If set to NO the members will appear in \r
+# declaration order.\r
+\r
+SORT_MEMBER_DOCS       = YES\r
+\r
+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the \r
+# brief documentation of file, namespace and class members alphabetically \r
+# by member name. If set to NO (the default) the members will appear in \r
+# declaration order.\r
+\r
+SORT_BRIEF_DOCS        = NO\r
+\r
+# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the \r
+# hierarchy of group names into alphabetical order. If set to NO (the default) \r
+# the group names will appear in their defined order.\r
+\r
+SORT_GROUP_NAMES       = NO\r
+\r
+# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be \r
+# sorted by fully-qualified names, including namespaces. If set to \r
+# NO (the default), the class list will be sorted only by class name, \r
+# not including the namespace part. \r
+# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.\r
+# Note: This option applies only to the class list, not to the \r
+# alphabetical list.\r
+\r
+SORT_BY_SCOPE_NAME     = NO\r
+\r
+# The GENERATE_TODOLIST tag can be used to enable (YES) or \r
+# disable (NO) the todo list. This list is created by putting \todo \r
+# commands in the documentation.\r
+\r
+GENERATE_TODOLIST      = NO\r
+\r
+# The GENERATE_TESTLIST tag can be used to enable (YES) or \r
+# disable (NO) the test list. This list is created by putting \test \r
+# commands in the documentation.\r
+\r
+GENERATE_TESTLIST      = NO\r
+\r
+# The GENERATE_BUGLIST tag can be used to enable (YES) or \r
+# disable (NO) the bug list. This list is created by putting \bug \r
+# commands in the documentation.\r
+\r
+GENERATE_BUGLIST       = NO\r
+\r
+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or \r
+# disable (NO) the deprecated list. This list is created by putting \r
+# \deprecated commands in the documentation.\r
+\r
+GENERATE_DEPRECATEDLIST= YES\r
+\r
+# The ENABLED_SECTIONS tag can be used to enable conditional \r
+# documentation sections, marked by \if sectionname ... \endif.\r
+\r
+ENABLED_SECTIONS       = \r
+\r
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines \r
+# the initial value of a variable or define consists of for it to appear in \r
+# the documentation. If the initializer consists of more lines than specified \r
+# here it will be hidden. Use a value of 0 to hide initializers completely. \r
+# The appearance of the initializer of individual variables and defines in the \r
+# documentation can be controlled using \showinitializer or \hideinitializer \r
+# command in the documentation regardless of this setting.\r
+\r
+MAX_INITIALIZER_LINES  = 30\r
+\r
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated \r
+# at the bottom of the documentation of classes and structs. If set to YES the \r
+# list will mention the files that were used to generate the documentation.\r
+\r
+SHOW_USED_FILES        = YES\r
+\r
+# If the sources in your project are distributed over multiple directories \r
+# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy \r
+# in the documentation. The default is NO.\r
+\r
+SHOW_DIRECTORIES       = YES\r
+\r
+# Set the SHOW_FILES tag to NO to disable the generation of the Files page.\r
+# This will remove the Files entry from the Quick Index and from the \r
+# Folder Tree View (if specified). The default is YES.\r
+\r
+SHOW_FILES             = YES\r
+\r
+# Set the SHOW_NAMESPACES tag to NO to disable the generation of the \r
+# Namespaces page.  This will remove the Namespaces entry from the Quick Index\r
+# and from the Folder Tree View (if specified). The default is YES.\r
+\r
+SHOW_NAMESPACES        = YES\r
+\r
+# The FILE_VERSION_FILTER tag can be used to specify a program or script that \r
+# doxygen should invoke to get the current version for each file (typically from \r
+# the version control system). Doxygen will invoke the program by executing (via \r
+# popen()) the command <command> <input-file>, where <command> is the value of \r
+# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file \r
+# provided by doxygen. Whatever the program writes to standard output \r
+# is used as the file version. See the manual for examples.\r
+\r
+FILE_VERSION_FILTER    = \r
+\r
+# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by \r
+# doxygen. The layout file controls the global structure of the generated output files \r
+# in an output format independent way. The create the layout file that represents \r
+# doxygen's defaults, run doxygen with the -l option. You can optionally specify a \r
+# file name after the option, if omitted DoxygenLayout.xml will be used as the name \r
+# of the layout file.\r
+\r
+LAYOUT_FILE            = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to warning and progress messages\r
+#---------------------------------------------------------------------------\r
+\r
+# The QUIET tag can be used to turn on/off the messages that are generated \r
+# by doxygen. Possible values are YES and NO. If left blank NO is used.\r
+\r
+QUIET                  = YES\r
+\r
+# The WARNINGS tag can be used to turn on/off the warning messages that are \r
+# generated by doxygen. Possible values are YES and NO. If left blank \r
+# NO is used.\r
+\r
+WARNINGS               = YES\r
+\r
+# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings \r
+# for undocumented members. If EXTRACT_ALL is set to YES then this flag will \r
+# automatically be disabled.\r
+\r
+WARN_IF_UNDOCUMENTED   = YES\r
+\r
+# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for \r
+# potential errors in the documentation, such as not documenting some \r
+# parameters in a documented function, or documenting parameters that \r
+# don't exist or using markup commands wrongly.\r
+\r
+WARN_IF_DOC_ERROR      = YES\r
+\r
+# This WARN_NO_PARAMDOC option can be abled to get warnings for \r
+# functions that are documented, but have no documentation for their parameters \r
+# or return value. If set to NO (the default) doxygen will only warn about \r
+# wrong or incomplete parameter documentation, but not about the absence of \r
+# documentation.\r
+\r
+WARN_NO_PARAMDOC       = YES\r
+\r
+# The WARN_FORMAT tag determines the format of the warning messages that \r
+# doxygen can produce. The string should contain the $file, $line, and $text \r
+# tags, which will be replaced by the file and line number from which the \r
+# warning originated and the warning text. Optionally the format may contain \r
+# $version, which will be replaced by the version of the file (if it could \r
+# be obtained via FILE_VERSION_FILTER)\r
+\r
+WARN_FORMAT            = "$file:$line: $text"\r
+\r
+# The WARN_LOGFILE tag can be used to specify a file to which warning \r
+# and error messages should be written. If left blank the output is written \r
+# to stderr.\r
+\r
+WARN_LOGFILE           = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the input files\r
+#---------------------------------------------------------------------------\r
+\r
+# The INPUT tag can be used to specify the files and/or directories that contain \r
+# documented source files. You may enter file names like "myfile.cpp" or \r
+# directories like "/usr/src/myproject". Separate the files or directories \r
+# with spaces.\r
+\r
+INPUT                  = ./\r
+\r
+# This tag can be used to specify the character encoding of the source files \r
+# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is \r
+# also the default input encoding. Doxygen uses libiconv (or the iconv built \r
+# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for \r
+# the list of possible encodings.\r
+\r
+INPUT_ENCODING         = UTF-8\r
+\r
+# If the value of the INPUT tag contains directories, you can use the \r
+# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \r
+# and *.h) to filter out the source-files in the directories. If left \r
+# blank the following patterns are tested: \r
+# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx \r
+# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90\r
+\r
+FILE_PATTERNS          = *.h \\r
+                         *.c \\r
+                                                *.txt\r
+\r
+# The RECURSIVE tag can be used to turn specify whether or not subdirectories \r
+# should be searched for input files as well. Possible values are YES and NO. \r
+# If left blank NO is used.\r
+\r
+RECURSIVE              = YES\r
+\r
+# The EXCLUDE tag can be used to specify files and/or directories that should \r
+# excluded from the INPUT source files. This way you can easily exclude a \r
+# subdirectory from a directory tree whose root is specified with the INPUT tag.\r
+\r
+EXCLUDE                = \r
+\r
+# The EXCLUDE_SYMLINKS tag can be used select whether or not files or \r
+# directories that are symbolic links (a Unix filesystem feature) are excluded \r
+# from the input.\r
+\r
+EXCLUDE_SYMLINKS       = NO\r
+\r
+# If the value of the INPUT tag contains directories, you can use the \r
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude \r
+# certain files from those directories. Note that the wildcards are matched \r
+# against the file with absolute path, so to exclude all test directories \r
+# for example use the pattern */test/*\r
+\r
+EXCLUDE_PATTERNS       = */LowLevel/USBMode.h\r
+\r
+# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names \r
+# (namespaces, classes, functions, etc.) that should be excluded from the \r
+# output. The symbol name can be a fully qualified name, a word, or if the \r
+# wildcard * is used, a substring. Examples: ANamespace, AClass, \r
+# AClass::ANamespace, ANamespace::*Test\r
+\r
+EXCLUDE_SYMBOLS        = __*\r
+\r
+# The EXAMPLE_PATH tag can be used to specify one or more files or \r
+# directories that contain example code fragments that are included (see \r
+# the \include command).\r
+\r
+EXAMPLE_PATH           = \r
+\r
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the \r
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \r
+# and *.h) to filter out the source-files in the directories. If left \r
+# blank all files are included.\r
+\r
+EXAMPLE_PATTERNS       = *\r
+\r
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be \r
+# searched for input files to be used with the \include or \dontinclude \r
+# commands irrespective of the value of the RECURSIVE tag. \r
+# Possible values are YES and NO. If left blank NO is used.\r
+\r
+EXAMPLE_RECURSIVE      = NO\r
+\r
+# The IMAGE_PATH tag can be used to specify one or more files or \r
+# directories that contain image that are included in the documentation (see \r
+# the \image command).\r
+\r
+IMAGE_PATH             = \r
+\r
+# The INPUT_FILTER tag can be used to specify a program that doxygen should \r
+# invoke to filter for each input file. Doxygen will invoke the filter program \r
+# by executing (via popen()) the command <filter> <input-file>, where <filter> \r
+# is the value of the INPUT_FILTER tag, and <input-file> is the name of an \r
+# input file. Doxygen will then use the output that the filter program writes \r
+# to standard output.  If FILTER_PATTERNS is specified, this tag will be \r
+# ignored.\r
+\r
+INPUT_FILTER           = \r
+\r
+# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern \r
+# basis.  Doxygen will compare the file name with each pattern and apply the \r
+# filter if there is a match.  The filters are a list of the form: \r
+# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further \r
+# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER \r
+# is applied to all files.\r
+\r
+FILTER_PATTERNS        = \r
+\r
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using \r
+# INPUT_FILTER) will be used to filter the input files when producing source \r
+# files to browse (i.e. when SOURCE_BROWSER is set to YES).\r
+\r
+FILTER_SOURCE_FILES    = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to source browsing\r
+#---------------------------------------------------------------------------\r
+\r
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will \r
+# be generated. Documented entities will be cross-referenced with these sources. \r
+# Note: To get rid of all source code in the generated output, make sure also \r
+# VERBATIM_HEADERS is set to NO.\r
+\r
+SOURCE_BROWSER         = NO\r
+\r
+# Setting the INLINE_SOURCES tag to YES will include the body \r
+# of functions and classes directly in the documentation.\r
+\r
+INLINE_SOURCES         = NO\r
+\r
+# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct \r
+# doxygen to hide any special comment blocks from generated source code \r
+# fragments. Normal C and C++ comments will always remain visible.\r
+\r
+STRIP_CODE_COMMENTS    = YES\r
+\r
+# If the REFERENCED_BY_RELATION tag is set to YES \r
+# then for each documented function all documented \r
+# functions referencing it will be listed.\r
+\r
+REFERENCED_BY_RELATION = NO\r
+\r
+# If the REFERENCES_RELATION tag is set to YES \r
+# then for each documented function all documented entities \r
+# called/used by that function will be listed.\r
+\r
+REFERENCES_RELATION    = NO\r
+\r
+# If the REFERENCES_LINK_SOURCE tag is set to YES (the default)\r
+# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from\r
+# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will\r
+# link to the source code.  Otherwise they will link to the documentstion.\r
+\r
+REFERENCES_LINK_SOURCE = NO\r
+\r
+# If the USE_HTAGS tag is set to YES then the references to source code \r
+# will point to the HTML generated by the htags(1) tool instead of doxygen \r
+# built-in source browser. The htags tool is part of GNU's global source \r
+# tagging system (see http://www.gnu.org/software/global/global.html). You \r
+# will need version 4.8.6 or higher.\r
+\r
+USE_HTAGS              = NO\r
+\r
+# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen \r
+# will generate a verbatim copy of the header file for each class for \r
+# which an include is specified. Set to NO to disable this.\r
+\r
+VERBATIM_HEADERS       = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the alphabetical class index\r
+#---------------------------------------------------------------------------\r
+\r
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index \r
+# of all compounds will be generated. Enable this if the project \r
+# contains a lot of classes, structs, unions or interfaces.\r
+\r
+ALPHABETICAL_INDEX     = YES\r
+\r
+# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then \r
+# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns \r
+# in which this list will be split (can be a number in the range [1..20])\r
+\r
+COLS_IN_ALPHA_INDEX    = 5\r
+\r
+# In case all classes in a project start with a common prefix, all \r
+# classes will be put under the same header in the alphabetical index. \r
+# The IGNORE_PREFIX tag can be used to specify one or more prefixes that \r
+# should be ignored while generating the index headers.\r
+\r
+IGNORE_PREFIX          = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the HTML output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_HTML tag is set to YES (the default) Doxygen will \r
+# generate HTML output.\r
+\r
+GENERATE_HTML          = YES\r
+\r
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `html' will be used as the default path.\r
+\r
+HTML_OUTPUT            = html\r
+\r
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for \r
+# each generated HTML page (for example: .htm,.php,.asp). If it is left blank \r
+# doxygen will generate files with .html extension.\r
+\r
+HTML_FILE_EXTENSION    = .html\r
+\r
+# The HTML_HEADER tag can be used to specify a personal HTML header for \r
+# each generated HTML page. If it is left blank doxygen will generate a \r
+# standard header.\r
+\r
+HTML_HEADER            = \r
+\r
+# The HTML_FOOTER tag can be used to specify a personal HTML footer for \r
+# each generated HTML page. If it is left blank doxygen will generate a \r
+# standard footer.\r
+\r
+HTML_FOOTER            = \r
+\r
+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading \r
+# style sheet that is used by each HTML page. It can be used to \r
+# fine-tune the look of the HTML output. If the tag is left blank doxygen \r
+# will generate a default style sheet. Note that doxygen will try to copy \r
+# the style sheet file to the HTML output directory, so don't put your own \r
+# stylesheet in the HTML output directory as well, or it will be erased!\r
+\r
+HTML_STYLESHEET        = \r
+\r
+# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, \r
+# files or namespaces will be aligned in HTML using tables. If set to \r
+# NO a bullet list will be used.\r
+\r
+HTML_ALIGN_MEMBERS     = YES\r
+\r
+# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML \r
+# documentation will contain sections that can be hidden and shown after the \r
+# page has loaded. For this to work a browser that supports \r
+# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox \r
+# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari).\r
+\r
+HTML_DYNAMIC_SECTIONS  = YES\r
+\r
+# If the GENERATE_DOCSET tag is set to YES, additional index files \r
+# will be generated that can be used as input for Apple's Xcode 3 \r
+# integrated development environment, introduced with OSX 10.5 (Leopard). \r
+# To create a documentation set, doxygen will generate a Makefile in the \r
+# HTML output directory. Running make will produce the docset in that \r
+# directory and running "make install" will install the docset in \r
+# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find \r
+# it at startup. \r
+# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information.\r
+\r
+GENERATE_DOCSET        = NO\r
+\r
+# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the \r
+# feed. A documentation feed provides an umbrella under which multiple \r
+# documentation sets from a single provider (such as a company or product suite) \r
+# can be grouped.\r
+\r
+DOCSET_FEEDNAME        = "Doxygen generated docs"\r
+\r
+# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that \r
+# should uniquely identify the documentation set bundle. This should be a \r
+# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen \r
+# will append .docset to the name.\r
+\r
+DOCSET_BUNDLE_ID       = org.doxygen.Project\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, additional index files \r
+# will be generated that can be used as input for tools like the \r
+# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) \r
+# of the generated HTML documentation.\r
+\r
+GENERATE_HTMLHELP      = NO\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can \r
+# be used to specify the file name of the resulting .chm file. You \r
+# can add a path in front of the file if the result should not be \r
+# written to the html output directory.\r
+\r
+CHM_FILE               = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can \r
+# be used to specify the location (absolute path including file name) of \r
+# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run \r
+# the HTML help compiler on the generated index.hhp.\r
+\r
+HHC_LOCATION           = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag \r
+# controls if a separate .chi index file is generated (YES) or that \r
+# it should be included in the master .chm file (NO).\r
+\r
+GENERATE_CHI           = NO\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING\r
+# is used to encode HtmlHelp index (hhk), content (hhc) and project file\r
+# content.\r
+\r
+CHM_INDEX_ENCODING     = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag \r
+# controls whether a binary table of contents is generated (YES) or a \r
+# normal table of contents (NO) in the .chm file.\r
+\r
+BINARY_TOC             = NO\r
+\r
+# The TOC_EXPAND flag can be set to YES to add extra items for group members \r
+# to the contents of the HTML help documentation and to the tree view.\r
+\r
+TOC_EXPAND             = YES\r
+\r
+# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER \r
+# are set, an additional index file will be generated that can be used as input for \r
+# Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated \r
+# HTML documentation.\r
+\r
+GENERATE_QHP           = NO\r
+\r
+# If the QHG_LOCATION tag is specified, the QCH_FILE tag can \r
+# be used to specify the file name of the resulting .qch file. \r
+# The path specified is relative to the HTML output folder.\r
+\r
+QCH_FILE               = \r
+\r
+# The QHP_NAMESPACE tag specifies the namespace to use when generating \r
+# Qt Help Project output. For more information please see \r
+# <a href="http://doc.trolltech.com/qthelpproject.html#namespace">Qt Help Project / Namespace</a>.\r
+\r
+QHP_NAMESPACE          = org.doxygen.Project\r
+\r
+# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating \r
+# Qt Help Project output. For more information please see \r
+# <a href="http://doc.trolltech.com/qthelpproject.html#virtual-folders">Qt Help Project / Virtual Folders</a>.\r
+\r
+QHP_VIRTUAL_FOLDER     = doc\r
+\r
+# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can \r
+# be used to specify the location of Qt's qhelpgenerator. \r
+# If non-empty doxygen will try to run qhelpgenerator on the generated \r
+# .qhp file .\r
+\r
+QHG_LOCATION           = \r
+\r
+# The DISABLE_INDEX tag can be used to turn on/off the condensed index at \r
+# top of each HTML page. The value NO (the default) enables the index and \r
+# the value YES disables it.\r
+\r
+DISABLE_INDEX          = NO\r
+\r
+# This tag can be used to set the number of enum values (range [1..20]) \r
+# that doxygen will group on one line in the generated HTML documentation.\r
+\r
+ENUM_VALUES_PER_LINE   = 1\r
+\r
+# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index\r
+# structure should be generated to display hierarchical information.\r
+# If the tag value is set to FRAME, a side panel will be generated\r
+# containing a tree-like index structure (just like the one that \r
+# is generated for HTML Help). For this to work a browser that supports \r
+# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, \r
+# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are \r
+# probably better off using the HTML help feature. Other possible values \r
+# for this tag are: HIERARCHIES, which will generate the Groups, Directories,\r
+# and Class Hierarchy pages using a tree view instead of an ordered list;\r
+# ALL, which combines the behavior of FRAME and HIERARCHIES; and NONE, which\r
+# disables this behavior completely. For backwards compatibility with previous\r
+# releases of Doxygen, the values YES and NO are equivalent to FRAME and NONE\r
+# respectively.\r
+\r
+GENERATE_TREEVIEW      = YES\r
+\r
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be \r
+# used to set the initial width (in pixels) of the frame in which the tree \r
+# is shown.\r
+\r
+TREEVIEW_WIDTH         = 250\r
+\r
+# Use this tag to change the font size of Latex formulas included \r
+# as images in the HTML documentation. The default is 10. Note that \r
+# when you change the font size after a successful doxygen run you need \r
+# to manually remove any form_*.png images from the HTML output directory \r
+# to force them to be regenerated.\r
+\r
+FORMULA_FONTSIZE       = 10\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the LaTeX output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will \r
+# generate Latex output.\r
+\r
+GENERATE_LATEX         = NO\r
+\r
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `latex' will be used as the default path.\r
+\r
+LATEX_OUTPUT           = latex\r
+\r
+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be \r
+# invoked. If left blank `latex' will be used as the default command name.\r
+\r
+LATEX_CMD_NAME         = latex\r
+\r
+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to \r
+# generate index for LaTeX. If left blank `makeindex' will be used as the \r
+# default command name.\r
+\r
+MAKEINDEX_CMD_NAME     = makeindex\r
+\r
+# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact \r
+# LaTeX documents. This may be useful for small projects and may help to \r
+# save some trees in general.\r
+\r
+COMPACT_LATEX          = NO\r
+\r
+# The PAPER_TYPE tag can be used to set the paper type that is used \r
+# by the printer. Possible values are: a4, a4wide, letter, legal and \r
+# executive. If left blank a4wide will be used.\r
+\r
+PAPER_TYPE             = a4wide\r
+\r
+# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX \r
+# packages that should be included in the LaTeX output.\r
+\r
+EXTRA_PACKAGES         = \r
+\r
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for \r
+# the generated latex document. The header should contain everything until \r
+# the first chapter. If it is left blank doxygen will generate a \r
+# standard header. Notice: only use this tag if you know what you are doing!\r
+\r
+LATEX_HEADER           = \r
+\r
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated \r
+# is prepared for conversion to pdf (using ps2pdf). The pdf file will \r
+# contain links (just like the HTML output) instead of page references \r
+# This makes the output suitable for online browsing using a pdf viewer.\r
+\r
+PDF_HYPERLINKS         = YES\r
+\r
+# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of \r
+# plain latex in the generated Makefile. Set this option to YES to get a \r
+# higher quality PDF documentation.\r
+\r
+USE_PDFLATEX           = YES\r
+\r
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. \r
+# command to the generated LaTeX files. This will instruct LaTeX to keep \r
+# running if errors occur, instead of asking the user for help. \r
+# This option is also used when generating formulas in HTML.\r
+\r
+LATEX_BATCHMODE        = NO\r
+\r
+# If LATEX_HIDE_INDICES is set to YES then doxygen will not \r
+# include the index chapters (such as File Index, Compound Index, etc.) \r
+# in the output.\r
+\r
+LATEX_HIDE_INDICES     = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the RTF output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output \r
+# The RTF output is optimized for Word 97 and may not look very pretty with \r
+# other RTF readers or editors.\r
+\r
+GENERATE_RTF           = NO\r
+\r
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `rtf' will be used as the default path.\r
+\r
+RTF_OUTPUT             = rtf\r
+\r
+# If the COMPACT_RTF tag is set to YES Doxygen generates more compact \r
+# RTF documents. This may be useful for small projects and may help to \r
+# save some trees in general.\r
+\r
+COMPACT_RTF            = NO\r
+\r
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated \r
+# will contain hyperlink fields. The RTF file will \r
+# contain links (just like the HTML output) instead of page references. \r
+# This makes the output suitable for online browsing using WORD or other \r
+# programs which support those fields. \r
+# Note: wordpad (write) and others do not support links.\r
+\r
+RTF_HYPERLINKS         = NO\r
+\r
+# Load stylesheet definitions from file. Syntax is similar to doxygen's \r
+# config file, i.e. a series of assignments. You only have to provide \r
+# replacements, missing definitions are set to their default value.\r
+\r
+RTF_STYLESHEET_FILE    = \r
+\r
+# Set optional variables used in the generation of an rtf document. \r
+# Syntax is similar to doxygen's config file.\r
+\r
+RTF_EXTENSIONS_FILE    = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the man page output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_MAN tag is set to YES (the default) Doxygen will \r
+# generate man pages\r
+\r
+GENERATE_MAN           = NO\r
+\r
+# The MAN_OUTPUT tag is used to specify where the man pages will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `man' will be used as the default path.\r
+\r
+MAN_OUTPUT             = man\r
+\r
+# The MAN_EXTENSION tag determines the extension that is added to \r
+# the generated man pages (default is the subroutine's section .3)\r
+\r
+MAN_EXTENSION          = .3\r
+\r
+# If the MAN_LINKS tag is set to YES and Doxygen generates man output, \r
+# then it will generate one additional man file for each entity \r
+# documented in the real man page(s). These additional files \r
+# only source the real man page, but without them the man command \r
+# would be unable to find the correct page. The default is NO.\r
+\r
+MAN_LINKS              = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the XML output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_XML tag is set to YES Doxygen will \r
+# generate an XML file that captures the structure of \r
+# the code including all documentation.\r
+\r
+GENERATE_XML           = NO\r
+\r
+# The XML_OUTPUT tag is used to specify where the XML pages will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `xml' will be used as the default path.\r
+\r
+XML_OUTPUT             = xml\r
+\r
+# The XML_SCHEMA tag can be used to specify an XML schema, \r
+# which can be used by a validating XML parser to check the \r
+# syntax of the XML files.\r
+\r
+XML_SCHEMA             = \r
+\r
+# The XML_DTD tag can be used to specify an XML DTD, \r
+# which can be used by a validating XML parser to check the \r
+# syntax of the XML files.\r
+\r
+XML_DTD                = \r
+\r
+# If the XML_PROGRAMLISTING tag is set to YES Doxygen will \r
+# dump the program listings (including syntax highlighting \r
+# and cross-referencing information) to the XML output. Note that \r
+# enabling this will significantly increase the size of the XML output.\r
+\r
+XML_PROGRAMLISTING     = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options for the AutoGen Definitions output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will \r
+# generate an AutoGen Definitions (see autogen.sf.net) file \r
+# that captures the structure of the code including all \r
+# documentation. Note that this feature is still experimental \r
+# and incomplete at the moment.\r
+\r
+GENERATE_AUTOGEN_DEF   = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the Perl module output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_PERLMOD tag is set to YES Doxygen will \r
+# generate a Perl module file that captures the structure of \r
+# the code including all documentation. Note that this \r
+# feature is still experimental and incomplete at the \r
+# moment.\r
+\r
+GENERATE_PERLMOD       = NO\r
+\r
+# If the PERLMOD_LATEX tag is set to YES Doxygen will generate \r
+# the necessary Makefile rules, Perl scripts and LaTeX code to be able \r
+# to generate PDF and DVI output from the Perl module output.\r
+\r
+PERLMOD_LATEX          = NO\r
+\r
+# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be \r
+# nicely formatted so it can be parsed by a human reader.  This is useful \r
+# if you want to understand what is going on.  On the other hand, if this \r
+# tag is set to NO the size of the Perl module output will be much smaller \r
+# and Perl will parse it just the same.\r
+\r
+PERLMOD_PRETTY         = YES\r
+\r
+# The names of the make variables in the generated doxyrules.make file \r
+# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. \r
+# This is useful so different doxyrules.make files included by the same \r
+# Makefile don't overwrite each other's variables.\r
+\r
+PERLMOD_MAKEVAR_PREFIX = \r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration options related to the preprocessor   \r
+#---------------------------------------------------------------------------\r
+\r
+# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will \r
+# evaluate all C-preprocessor directives found in the sources and include \r
+# files.\r
+\r
+ENABLE_PREPROCESSING   = YES\r
+\r
+# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro \r
+# names in the source code. If set to NO (the default) only conditional \r
+# compilation will be performed. Macro expansion can be done in a controlled \r
+# way by setting EXPAND_ONLY_PREDEF to YES.\r
+\r
+MACRO_EXPANSION        = YES\r
+\r
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES \r
+# then the macro expansion is limited to the macros specified with the \r
+# PREDEFINED and EXPAND_AS_DEFINED tags.\r
+\r
+EXPAND_ONLY_PREDEF     = YES\r
+\r
+# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files \r
+# in the INCLUDE_PATH (see below) will be search if a #include is found.\r
+\r
+SEARCH_INCLUDES        = YES\r
+\r
+# The INCLUDE_PATH tag can be used to specify one or more directories that \r
+# contain include files that are not input files but should be processed by \r
+# the preprocessor.\r
+\r
+INCLUDE_PATH           = \r
+\r
+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard \r
+# patterns (like *.h and *.hpp) to filter out the header-files in the \r
+# directories. If left blank, the patterns specified with FILE_PATTERNS will \r
+# be used.\r
+\r
+INCLUDE_FILE_PATTERNS  = \r
+\r
+# The PREDEFINED tag can be used to specify one or more macro names that \r
+# are defined before the preprocessor is started (similar to the -D option of \r
+# gcc). The argument of the tag is a list of macros of the form: name \r
+# or name=definition (no spaces). If the definition and the = are \r
+# omitted =1 is assumed. To prevent a macro definition from being \r
+# undefined via #undef or recursively expanded use the := operator \r
+# instead of the = operator.\r
+\r
+PREDEFINED             = __DOXYGEN__\r
+\r
+# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then \r
+# this tag can be used to specify a list of macro names that should be expanded. \r
+# The macro definition that is found in the sources will be used. \r
+# Use the PREDEFINED tag if you want to use a different macro definition.\r
+\r
+EXPAND_AS_DEFINED      = BUTTLOADTAG\r
+\r
+# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then \r
+# doxygen's preprocessor will remove all function-like macros that are alone \r
+# on a line, have an all uppercase name, and do not end with a semicolon. Such \r
+# function macros are typically used for boiler-plate code, and will confuse \r
+# the parser if not removed.\r
+\r
+SKIP_FUNCTION_MACROS   = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration::additions related to external references   \r
+#---------------------------------------------------------------------------\r
+\r
+# The TAGFILES option can be used to specify one or more tagfiles. \r
+# Optionally an initial location of the external documentation \r
+# can be added for each tagfile. The format of a tag file without \r
+# this location is as follows: \r
+#   TAGFILES = file1 file2 ... \r
+# Adding location for the tag files is done as follows: \r
+#   TAGFILES = file1=loc1 "file2 = loc2" ... \r
+# where "loc1" and "loc2" can be relative or absolute paths or \r
+# URLs. If a location is present for each tag, the installdox tool \r
+# does not have to be run to correct the links.\r
+# Note that each tag file must have a unique name\r
+# (where the name does NOT include the path)\r
+# If a tag file is not located in the directory in which doxygen \r
+# is run, you must also specify the path to the tagfile here.\r
+\r
+TAGFILES               = \r
+\r
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create \r
+# a tag file that is based on the input files it reads.\r
+\r
+GENERATE_TAGFILE       = \r
+\r
+# If the ALLEXTERNALS tag is set to YES all external classes will be listed \r
+# in the class index. If set to NO only the inherited external classes \r
+# will be listed.\r
+\r
+ALLEXTERNALS           = NO\r
+\r
+# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed \r
+# in the modules index. If set to NO, only the current project's groups will \r
+# be listed.\r
+\r
+EXTERNAL_GROUPS        = YES\r
+\r
+# The PERL_PATH should be the absolute path and name of the perl script \r
+# interpreter (i.e. the result of `which perl').\r
+\r
+PERL_PATH              = /usr/bin/perl\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration options related to the dot tool   \r
+#---------------------------------------------------------------------------\r
+\r
+# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will \r
+# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base \r
+# or super classes. Setting the tag to NO turns the diagrams off. Note that \r
+# this option is superseded by the HAVE_DOT option below. This is only a \r
+# fallback. It is recommended to install and use dot, since it yields more \r
+# powerful graphs.\r
+\r
+CLASS_DIAGRAMS         = NO\r
+\r
+# You can define message sequence charts within doxygen comments using the \msc \r
+# command. Doxygen will then run the mscgen tool (see \r
+# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the \r
+# documentation. The MSCGEN_PATH tag allows you to specify the directory where \r
+# the mscgen tool resides. If left empty the tool is assumed to be found in the \r
+# default search path.\r
+\r
+MSCGEN_PATH            = \r
+\r
+# If set to YES, the inheritance and collaboration graphs will hide \r
+# inheritance and usage relations if the target is undocumented \r
+# or is not a class.\r
+\r
+HIDE_UNDOC_RELATIONS   = YES\r
+\r
+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is \r
+# available from the path. This tool is part of Graphviz, a graph visualization \r
+# toolkit from AT&T and Lucent Bell Labs. The other options in this section \r
+# have no effect if this option is set to NO (the default)\r
+\r
+HAVE_DOT               = NO\r
+\r
+# By default doxygen will write a font called FreeSans.ttf to the output \r
+# directory and reference it in all dot files that doxygen generates. This \r
+# font does not include all possible unicode characters however, so when you need \r
+# these (or just want a differently looking font) you can specify the font name \r
+# using DOT_FONTNAME. You need need to make sure dot is able to find the font, \r
+# which can be done by putting it in a standard location or by setting the \r
+# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory \r
+# containing the font.\r
+\r
+DOT_FONTNAME           = FreeSans\r
+\r
+# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. \r
+# The default size is 10pt.\r
+\r
+DOT_FONTSIZE           = 10\r
+\r
+# By default doxygen will tell dot to use the output directory to look for the \r
+# FreeSans.ttf font (which doxygen will put there itself). If you specify a \r
+# different font using DOT_FONTNAME you can set the path where dot \r
+# can find it using this tag.\r
+\r
+DOT_FONTPATH           = \r
+\r
+# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for each documented class showing the direct and \r
+# indirect inheritance relations. Setting this tag to YES will force the \r
+# the CLASS_DIAGRAMS tag to NO.\r
+\r
+CLASS_GRAPH            = NO\r
+\r
+# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for each documented class showing the direct and \r
+# indirect implementation dependencies (inheritance, containment, and \r
+# class references variables) of the class with other documented classes.\r
+\r
+COLLABORATION_GRAPH    = NO\r
+\r
+# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for groups, showing the direct groups dependencies\r
+\r
+GROUP_GRAPHS           = NO\r
+\r
+# If the UML_LOOK tag is set to YES doxygen will generate inheritance and \r
+# collaboration diagrams in a style similar to the OMG's Unified Modeling \r
+# Language.\r
+\r
+UML_LOOK               = NO\r
+\r
+# If set to YES, the inheritance and collaboration graphs will show the \r
+# relations between templates and their instances.\r
+\r
+TEMPLATE_RELATIONS     = NO\r
+\r
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT \r
+# tags are set to YES then doxygen will generate a graph for each documented \r
+# file showing the direct and indirect include dependencies of the file with \r
+# other documented files.\r
+\r
+INCLUDE_GRAPH          = NO\r
+\r
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and \r
+# HAVE_DOT tags are set to YES then doxygen will generate a graph for each \r
+# documented header file showing the documented files that directly or \r
+# indirectly include this file.\r
+\r
+INCLUDED_BY_GRAPH      = NO\r
+\r
+# If the CALL_GRAPH and HAVE_DOT options are set to YES then \r
+# doxygen will generate a call dependency graph for every global function \r
+# or class method. Note that enabling this option will significantly increase \r
+# the time of a run. So in most cases it will be better to enable call graphs \r
+# for selected functions only using the \callgraph command.\r
+\r
+CALL_GRAPH             = NO\r
+\r
+# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then \r
+# doxygen will generate a caller dependency graph for every global function \r
+# or class method. Note that enabling this option will significantly increase \r
+# the time of a run. So in most cases it will be better to enable caller \r
+# graphs for selected functions only using the \callergraph command.\r
+\r
+CALLER_GRAPH           = NO\r
+\r
+# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen \r
+# will graphical hierarchy of all classes instead of a textual one.\r
+\r
+GRAPHICAL_HIERARCHY    = NO\r
+\r
+# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES \r
+# then doxygen will show the dependencies a directory has on other directories \r
+# in a graphical way. The dependency relations are determined by the #include\r
+# relations between the files in the directories.\r
+\r
+DIRECTORY_GRAPH        = NO\r
+\r
+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images \r
+# generated by dot. Possible values are png, jpg, or gif\r
+# If left blank png will be used.\r
+\r
+DOT_IMAGE_FORMAT       = png\r
+\r
+# The tag DOT_PATH can be used to specify the path where the dot tool can be \r
+# found. If left blank, it is assumed the dot tool can be found in the path.\r
+\r
+DOT_PATH               = "C:/Program Files/Graphviz2.18/bin"\r
+\r
+# The DOTFILE_DIRS tag can be used to specify one or more directories that \r
+# contain dot files that are included in the documentation (see the \r
+# \dotfile command).\r
+\r
+DOTFILE_DIRS           = \r
+\r
+# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of \r
+# nodes that will be shown in the graph. If the number of nodes in a graph \r
+# becomes larger than this value, doxygen will truncate the graph, which is \r
+# visualized by representing a node as a red box. Note that doxygen if the \r
+# number of direct children of the root node in a graph is already larger than \r
+# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note \r
+# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.\r
+\r
+DOT_GRAPH_MAX_NODES    = 15\r
+\r
+# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the \r
+# graphs generated by dot. A depth value of 3 means that only nodes reachable \r
+# from the root by following a path via at most 3 edges will be shown. Nodes \r
+# that lay further from the root node will be omitted. Note that setting this \r
+# option to 1 or 2 may greatly reduce the computation time needed for large \r
+# code bases. Also note that the size of a graph can be further restricted by \r
+# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.\r
+\r
+MAX_DOT_GRAPH_DEPTH    = 2\r
+\r
+# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent \r
+# background. This is disabled by default, because dot on Windows does not \r
+# seem to support this out of the box. Warning: Depending on the platform used, \r
+# enabling this option may lead to badly anti-aliased labels on the edges of \r
+# a graph (i.e. they become hard to read).\r
+\r
+DOT_TRANSPARENT        = YES\r
+\r
+# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output \r
+# files in one run (i.e. multiple -o and -T options on the command line). This \r
+# makes dot run faster, but since only newer versions of dot (>1.8.10) \r
+# support this, this feature is disabled by default.\r
+\r
+DOT_MULTI_TARGETS      = NO\r
+\r
+# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will \r
+# generate a legend page explaining the meaning of the various boxes and \r
+# arrows in the dot generated graphs.\r
+\r
+GENERATE_LEGEND        = YES\r
+\r
+# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will \r
+# remove the intermediate dot files that are used to generate \r
+# the various graphs.\r
+\r
+DOT_CLEANUP            = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration::additions related to the search engine   \r
+#---------------------------------------------------------------------------\r
+\r
+# The SEARCHENGINE tag specifies whether or not a search engine should be \r
+# used. If set to NO the values of all tags below this one will be ignored.\r
+\r
+SEARCHENGINE           = NO\r
diff --git a/Demos/Device/LowLevel/MIDI/MIDI.aps b/Demos/Device/LowLevel/MIDI/MIDI.aps
new file mode 100644 (file)
index 0000000..e61e770
--- /dev/null
@@ -0,0 +1 @@
+<AVRStudio><MANAGEMENT><ProjectName>MIDI</ProjectName><Created>30-Sep-2008 14:13:12</Created><LastEdit>30-Sep-2008 14:13:33</LastEdit><ICON>241</ICON><ProjectType>0</ProjectType><Created>30-Sep-2008 14:13:12</Created><Version>4</Version><Build>4, 14, 0, 589</Build><ProjectTypeName>AVR GCC</ProjectTypeName></MANAGEMENT><CODE_CREATION><ObjectFile></ObjectFile><EntryFile></EntryFile><SaveFolder>C:\Users\Dean\Documents\Electronics\Projects\WORK\MyUSBWORK\Demos\MIDI\</SaveFolder></CODE_CREATION><DEBUG_TARGET><CURRENT_TARGET></CURRENT_TARGET><CURRENT_PART></CURRENT_PART><BREAKPOINTS></BREAKPOINTS><IO_EXPAND><HIDE>false</HIDE></IO_EXPAND><REGISTERNAMES><Register>R00</Register><Register>R01</Register><Register>R02</Register><Register>R03</Register><Register>R04</Register><Register>R05</Register><Register>R06</Register><Register>R07</Register><Register>R08</Register><Register>R09</Register><Register>R10</Register><Register>R11</Register><Register>R12</Register><Register>R13</Register><Register>R14</Register><Register>R15</Register><Register>R16</Register><Register>R17</Register><Register>R18</Register><Register>R19</Register><Register>R20</Register><Register>R21</Register><Register>R22</Register><Register>R23</Register><Register>R24</Register><Register>R25</Register><Register>R26</Register><Register>R27</Register><Register>R28</Register><Register>R29</Register><Register>R30</Register><Register>R31</Register></REGISTERNAMES><COM>Auto</COM><COMType>0</COMType><WATCHNUM>0</WATCHNUM><WATCHNAMES><Pane0></Pane0><Pane1></Pane1><Pane2></Pane2><Pane3></Pane3></WATCHNAMES><BreakOnTrcaeFull>0</BreakOnTrcaeFull></DEBUG_TARGET><Debugger><Triggers></Triggers></Debugger><AVRGCCPLUGIN><FILES><SOURCEFILE>Descriptors.c</SOURCEFILE><SOURCEFILE>MIDI.c</SOURCEFILE><HEADERFILE>Descriptors.h</HEADERFILE><HEADERFILE>MIDI.h</HEADERFILE><OTHERFILE>makefile</OTHERFILE></FILES><CONFIGS><CONFIG><NAME>default</NAME><USESEXTERNALMAKEFILE>YES</USESEXTERNALMAKEFILE><EXTERNALMAKEFILE>makefile</EXTERNALMAKEFILE><PART>atmega128</PART><HEX>1</HEX><LIST>1</LIST><MAP>1</MAP><OUTPUTFILENAME>MIDI.elf</OUTPUTFILENAME><OUTPUTDIR>default\</OUTPUTDIR><ISDIRTY>1</ISDIRTY><OPTIONS/><INCDIRS/><LIBDIRS/><LIBS/><LINKOBJECTS/><OPTIONSFORALL>-Wall -gdwarf-2 -std=gnu99 -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums</OPTIONSFORALL><LINKEROPTIONS></LINKEROPTIONS><SEGMENTS/></CONFIG></CONFIGS><LASTCONFIG>default</LASTCONFIG><USES_WINAVR>1</USES_WINAVR><GCC_LOC>C:\WinAVR-20080512\bin\avr-gcc.exe</GCC_LOC><MAKE_LOC>C:\WinAVR-20080512\utils\bin\make.exe</MAKE_LOC></AVRGCCPLUGIN><IOView><usergroups/><sort sorted="0" column="0" ordername="0" orderaddress="0" ordergroup="0"/></IOView><Files></Files><Events><Bookmarks></Bookmarks></Events><Trace><Filters></Filters></Trace></AVRStudio>\r
diff --git a/Demos/Device/LowLevel/MIDI/MIDI.c b/Demos/Device/LowLevel/MIDI/MIDI.c
new file mode 100644 (file)
index 0000000..b6b43df
--- /dev/null
@@ -0,0 +1,219 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  Main source file for the MIDI input demo. This file contains the main tasks of the demo and\r
+ *  is responsible for the initial application hardware configuration.\r
+ */\r
+\r
+#include "MIDI.h"\r
+\r
+/* Scheduler Task List */\r
+TASK_LIST\r
+{\r
+       { .Task = USB_USBTask          , .TaskStatus = TASK_STOP },\r
+       { .Task = USB_MIDI_Task        , .TaskStatus = TASK_STOP },\r
+};\r
+\r
+/** Main program entry point. This routine configures the hardware required by the application, then\r
+ *  starts the scheduler to run the application tasks.\r
+ */\r
+int main(void)\r
+{\r
+       /* Disable watchdog if enabled by bootloader/fuses */\r
+       MCUSR &= ~(1 << WDRF);\r
+       wdt_disable();\r
+\r
+       /* Disable clock division */\r
+       clock_prescale_set(clock_div_1);\r
+       \r
+       /* Hardware Initialization */\r
+       Joystick_Init();\r
+       LEDs_Init();\r
+       Buttons_Init();\r
+\r
+       /* Indicate USB not ready */\r
+       UpdateStatus(Status_USBNotReady);\r
+       \r
+       /* Initialize Scheduler so that it can be used */\r
+       Scheduler_Init();\r
+\r
+       /* Initialize USB Subsystem */\r
+       USB_Init();\r
+\r
+       /* Scheduling - routine never returns, so put this last in the main function */\r
+       Scheduler_Start();\r
+}\r
+\r
+/** Event handler for the USB_Connect event. This indicates that the device is enumerating via the status LEDs. */\r
+void EVENT_USB_Connect(void)\r
+{\r
+       /* Start USB management task */\r
+       Scheduler_SetTaskMode(USB_USBTask, TASK_RUN);\r
+\r
+       /* Indicate USB enumerating */\r
+       UpdateStatus(Status_USBEnumerating);\r
+}\r
+\r
+/** Event handler for the USB_Disconnect event. This indicates that the device is no longer connected to a host via\r
+ *  the status LEDs, disables the sample update and PWM output timers and stops the USB and MIDI management tasks.\r
+ */\r
+void EVENT_USB_Disconnect(void)\r
+{\r
+       /* Stop running audio and USB management tasks */\r
+       Scheduler_SetTaskMode(USB_MIDI_Task, TASK_STOP);\r
+       Scheduler_SetTaskMode(USB_USBTask, TASK_STOP);\r
+\r
+       /* Indicate USB not ready */\r
+       UpdateStatus(Status_USBNotReady);\r
+}\r
+\r
+/** Event handler for the USB_ConfigurationChanged event. This is fired when the host set the current configuration\r
+ *  of the USB device after enumeration - the device endpoints are configured and the MIDI management task started.\r
+ */\r
+void EVENT_USB_ConfigurationChanged(void)\r
+{\r
+       /* Setup MIDI stream endpoints */\r
+       Endpoint_ConfigureEndpoint(MIDI_STREAM_OUT_EPNUM, EP_TYPE_BULK,\r
+                                      ENDPOINT_DIR_OUT, MIDI_STREAM_EPSIZE,\r
+                                  ENDPOINT_BANK_SINGLE);\r
+\r
+       Endpoint_ConfigureEndpoint(MIDI_STREAM_IN_EPNUM, EP_TYPE_BULK,\r
+                                      ENDPOINT_DIR_IN, MIDI_STREAM_EPSIZE,\r
+                                  ENDPOINT_BANK_SINGLE);\r
+\r
+       /* Indicate USB connected and ready */\r
+       UpdateStatus(Status_USBReady);\r
+\r
+       /* Start MIDI task */\r
+       Scheduler_SetTaskMode(USB_MIDI_Task, TASK_RUN);\r
+}\r
+\r
+/** Task to handle the generation of MIDI note change events in response to presses of the board joystick, and send them\r
+ *  to the host.\r
+ */\r
+TASK(USB_MIDI_Task)\r
+{\r
+       static uint8_t PrevJoystickStatus;\r
+\r
+       /* Select the MIDI IN stream */\r
+       Endpoint_SelectEndpoint(MIDI_STREAM_IN_EPNUM);\r
+\r
+       /* Check if endpoint is ready to be written to */\r
+       if (Endpoint_IsINReady())\r
+       {\r
+               /* Get current joystick mask, XOR with previous to detect joystick changes */\r
+               uint8_t JoystickStatus  = Joystick_GetStatus();\r
+               uint8_t JoystickChanges = (JoystickStatus ^ PrevJoystickStatus);\r
+               \r
+               /* Get board button status - if pressed use channel 10 (percussion), otherwise use channel 1 */\r
+               uint8_t Channel = ((Buttons_GetStatus() & BUTTONS_BUTTON1) ? MIDI_CHANNEL(10) : MIDI_CHANNEL(1));\r
+\r
+               if (JoystickChanges & JOY_LEFT)\r
+                 SendMIDINoteChange(0x3C, (JoystickStatus & JOY_LEFT), 0, Channel);\r
+\r
+               if (JoystickChanges & JOY_UP)\r
+                 SendMIDINoteChange(0x3D, (JoystickStatus & JOY_UP), 0, Channel);\r
+\r
+               if (JoystickChanges & JOY_RIGHT)\r
+                 SendMIDINoteChange(0x3E, (JoystickStatus & JOY_RIGHT), 0, Channel);\r
+\r
+               if (JoystickChanges & JOY_DOWN)\r
+                 SendMIDINoteChange(0x3F, (JoystickStatus & JOY_DOWN), 0, Channel);\r
+\r
+               if (JoystickChanges & JOY_PRESS)\r
+                 SendMIDINoteChange(0x3B, (JoystickStatus & JOY_PRESS), 0, Channel);\r
+\r
+               /* Save previous joystick value for next joystick change detection */\r
+               PrevJoystickStatus = JoystickStatus;\r
+       }\r
+\r
+       /* Select the MIDI OUT stream */\r
+       Endpoint_SelectEndpoint(MIDI_STREAM_OUT_EPNUM);\r
+\r
+       /* Check if endpoint is ready to be read from, if so discard its (unused) data */\r
+       if (Endpoint_IsOUTReceived())\r
+         Endpoint_ClearOUT();\r
+}\r
+\r
+/** Function to manage status updates to the user. This is done via LEDs on the given board, if available, but may be changed to\r
+ *  log to a serial port, or anything else that is suitable for status updates.\r
+ *\r
+ *  \param CurrentStatus  Current status of the system, from the MIDI_StatusCodes_t enum\r
+ */\r
+void UpdateStatus(uint8_t CurrentStatus)\r
+{\r
+       uint8_t LEDMask = LEDS_NO_LEDS;\r
+       \r
+       /* Set the LED mask to the appropriate LED mask based on the given status code */\r
+       switch (CurrentStatus)\r
+       {\r
+               case Status_USBNotReady:\r
+                       LEDMask = (LEDS_LED1);\r
+                       break;\r
+               case Status_USBEnumerating:\r
+                       LEDMask = (LEDS_LED1 | LEDS_LED2);\r
+                       break;\r
+               case Status_USBReady:\r
+                       LEDMask = (LEDS_LED2 | LEDS_LED4);\r
+                       break;\r
+       }\r
+       \r
+       /* Set the board LEDs to the new LED mask */\r
+       LEDs_SetAllLEDs(LEDMask);\r
+}\r
+\r
+/** Sends a MIDI note change event (note on or off) to the MIDI output jack, on the given virtual cable ID and channel.\r
+ *\r
+ *  \param Pitch    Pitch of the note to turn on or off\r
+ *  \param OnOff    Set to true if the note is on (being held down), or false otherwise\r
+ *  \param CableID  ID of the virtual cable to send the note change to\r
+ *  \param Channel  MIDI channel number to send the note change event to\r
+ */\r
+void SendMIDINoteChange(const uint8_t Pitch, const bool OnOff, const uint8_t CableID, const uint8_t Channel)\r
+{\r
+       /* Wait until endpoint ready for more data */\r
+       while (!(Endpoint_IsReadWriteAllowed()));\r
+\r
+       /* Check if the message should be a Note On or Note Off command */\r
+       uint8_t Command = ((OnOff)? MIDI_COMMAND_NOTE_ON : MIDI_COMMAND_NOTE_OFF);\r
+\r
+       /* Write the Packet Header to the endpoint */\r
+       Endpoint_Write_Byte((CableID << 4) | (Command >> 4));\r
+\r
+       /* Write the Note On/Off command with the specified channel, pitch and velocity */\r
+       Endpoint_Write_Byte(Command | Channel);\r
+       Endpoint_Write_Byte(Pitch);\r
+       Endpoint_Write_Byte(MIDI_STANDARD_VELOCITY);\r
+       \r
+       /* Send the data in the endpoint to the host */\r
+       Endpoint_ClearIN();\r
+}\r
diff --git a/Demos/Device/LowLevel/MIDI/MIDI.h b/Demos/Device/LowLevel/MIDI/MIDI.h
new file mode 100644 (file)
index 0000000..635036a
--- /dev/null
@@ -0,0 +1,92 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  Header file for AudioOutput.c.\r
+ */\r
\r
+#ifndef _AUDIO_OUTPUT_H_\r
+#define _AUDIO_OUTPUT_H_\r
+\r
+       /* Includes: */\r
+               #include <avr/io.h>\r
+               #include <avr/wdt.h>\r
+               #include <avr/power.h>\r
+               #include <stdbool.h>\r
+\r
+               #include "Descriptors.h"\r
+                               \r
+               #include <LUFA/Version.h>                            // Library Version Information\r
+               #include <LUFA/Drivers/USB/USB.h>                    // USB Functionality\r
+               #include <LUFA/Drivers/Board/Joystick.h>             // Joystick driver\r
+               #include <LUFA/Drivers/Board/LEDs.h>                 // LEDs driver\r
+               #include <LUFA/Drivers/Board/Buttons.h>              // Board Buttons driver\r
+               #include <LUFA/Scheduler/Scheduler.h>                // Simple scheduler for task management\r
+\r
+   /* Macros: */\r
+               /** MIDI command for a note on (activation) event */\r
+               #define MIDI_COMMAND_NOTE_ON         0x90\r
+\r
+               /** MIDI command for a note off (deactivation) event */\r
+               #define MIDI_COMMAND_NOTE_OFF        0x80\r
+\r
+               /** Standard key press velocity value used for all note events, as no pressure sensor is mounted */\r
+               #define MIDI_STANDARD_VELOCITY       64\r
+               \r
+               /** Convenience macro. MIDI channels are numbered from 1-10 (natural numbers) however the logical channel\r
+                *  addresses are zero-indexed. This converts a natural MIDI channel number into the logical channel address.\r
+                *\r
+                *  \param channel  MIDI channel number to address\r
+                */\r
+               #define MIDI_CHANNEL(channel)        (channel - 1)\r
+\r
+       /* Enums: */\r
+               /** Enum for the possible status codes for passing to the UpdateStatus() function. */\r
+               enum MIDI_StatusCodes_t\r
+               {\r
+                       Status_USBNotReady    = 0, /**< USB is not ready (disconnected from a USB host) */\r
+                       Status_USBEnumerating = 1, /**< USB interface is enumerating */\r
+                       Status_USBReady       = 2, /**< USB interface is connected and ready */\r
+               };\r
+\r
+       /* Task Definitions: */\r
+               TASK(USB_MIDI_Task);\r
+\r
+   /* Function Prototypes: */\r
+               void EVENT_USB_Connect(void);\r
+               void EVENT_USB_Disconnect(void);\r
+               void EVENT_USB_ConfigurationChanged(void);\r
+\r
+               void SendMIDINoteChange(const uint8_t Pitch, const bool OnOff,\r
+                                       const uint8_t CableID, const uint8_t Channel);          \r
+               void UpdateStatus(uint8_t CurrentStatus);\r
+               \r
+#endif\r
diff --git a/Demos/Device/LowLevel/MIDI/MIDI.txt b/Demos/Device/LowLevel/MIDI/MIDI.txt
new file mode 100644 (file)
index 0000000..5a31350
--- /dev/null
@@ -0,0 +1,65 @@
+/** \file\r
+ *\r
+ *  This file contains special DoxyGen information for the generation of the main page and other special\r
+ *  documentation pages. It is not a project source file.\r
+ */\r
\r
+/** \mainpage MIDI Input Device Demo\r
+ *\r
+ *  \section SSec_Info USB Information:\r
+ *\r
+ *  The following table gives a rundown of the USB utilization of this demo.\r
+ *\r
+ *  <table>\r
+ *   <tr>\r
+ *    <td><b>USB Mode:</b></td>\r
+ *    <td>Device</td>\r
+ *   </tr>\r
+ *   <tr>\r
+ *    <td><b>USB Class:</b></td>\r
+ *    <td>Audio Class</td>\r
+ *   </tr>\r
+ *   <tr> \r
+ *    <td><b>USB Subclass:</b></td>\r
+ *    <td>Standard Audio Device</td>\r
+ *   </tr>\r
+ *   <tr>\r
+ *    <td><b>Relevant Standards:</b></td>\r
+ *    <td>USBIF Audio Class Specification</td>\r
+ *    <td>USB-MIDI Audio Class Extension Specification</td>\r
+ *    <td>General MIDI Specification</td>\r
+ *   </tr>\r
+ *   <tr>\r
+ *    <td><b>Usable Speeds:</b></td>\r
+ *    <td>Full Speed Mode</td>\r
+ *   </tr>\r
+ *  </table>\r
+ *\r
+ *  \section SSec_Description Project Description: \r
+ *\r
+ *  MIDI demonstration application. This gives a simple reference\r
+ *  application for implementing the USB-MIDI class in USB devices.\r
+ *  It is built upon the USB Audio class.\r
+ *  \r
+ *  Joystick movements are translated into note on/off messages and\r
+ *  are sent to the host PC as MIDI streams which can be read by any\r
+ *  MIDI program supporting MIDI IN devices.\r
+ *  \r
+ *  If the HWB is not pressed, channel 1 (default piano) is used. If\r
+ *  the HWB is set, then channel 10 (default percussion) is selected.\r
+ *  \r
+ *  This device implements MIDI-THRU mode, with the IN MIDI data being\r
+ *  generated by the device itself. OUT MIDI data is discarded.\r
+ *\r
+ *  \section SSec_Options Project Options\r
+ *\r
+ *  The following defines can be found in this demo, which can control the demo behaviour when defined, or changed in value.\r
+ *\r
+ *  <table>\r
+ *   <tr>\r
+ *    <td>\r
+ *     None\r
+ *    </td>\r
+ *   </tr>\r
+ *  </table>\r
+ */\r
diff --git a/Demos/Device/LowLevel/MIDI/makefile b/Demos/Device/LowLevel/MIDI/makefile
new file mode 100644 (file)
index 0000000..18fc3b1
--- /dev/null
@@ -0,0 +1,734 @@
+# Hey Emacs, this is a -*- makefile -*-\r
+#----------------------------------------------------------------------------\r
+# WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al.\r
+#  >> Modified for use with the LUFA project. <<\r
+#\r
+# Released to the Public Domain\r
+#\r
+# Additional material for this makefile was written by:\r
+# Peter Fleury\r
+# Tim Henigan\r
+# Colin O'Flynn\r
+# Reiner Patommel\r
+# Markus Pfaff\r
+# Sander Pool\r
+# Frederik Rouleau\r
+# Carlos Lamas\r
+# Dean Camera\r
+# Opendous Inc.\r
+# Denver Gingerich\r
+#\r
+#----------------------------------------------------------------------------\r
+# On command line:\r
+#\r
+# make all = Make software.\r
+#\r
+# make clean = Clean out built project files.\r
+#\r
+# make coff = Convert ELF to AVR COFF.\r
+#\r
+# make extcoff = Convert ELF to AVR Extended COFF.\r
+#\r
+# make program = Download the hex file to the device, using avrdude.\r
+#                Please customize the avrdude settings below first!\r
+#\r
+# make dfu = Download the hex file to the device, using dfu-programmer (must\r
+#            have dfu-programmer installed).\r
+#\r
+# make flip = Download the hex file to the device, using Atmel FLIP (must\r
+#             have Atmel FLIP installed).\r
+#\r
+# make dfu-ee = Download the eeprom file to the device, using dfu-programmer\r
+#               (must have dfu-programmer installed).\r
+#\r
+# make flip-ee = Download the eeprom file to the device, using Atmel FLIP\r
+#                (must have Atmel FLIP installed).\r
+#\r
+# make doxygen = Generate DoxyGen documentation for the project (must have\r
+#                DoxyGen installed)\r
+#\r
+# make debug = Start either simulavr or avarice as specified for debugging, \r
+#              with avr-gdb or avr-insight as the front end for debugging.\r
+#\r
+# make filename.s = Just compile filename.c into the assembler code only.\r
+#\r
+# make filename.i = Create a preprocessed source file for use in submitting\r
+#                   bug reports to the GCC project.\r
+#\r
+# To rebuild project do "make clean" then "make all".\r
+#----------------------------------------------------------------------------\r
+\r
+\r
+# MCU name\r
+MCU = at90usb1287\r
+\r
+\r
+# Target board (see library "Board Types" documentation, USER or blank for projects not requiring\r
+# LUFA board drivers). If USER is selected, put custom board drivers in a directory called \r
+# "Board" inside the application directory.\r
+BOARD  = USBKEY\r
+\r
+\r
+# Processor frequency.\r
+#     This will define a symbol, F_CPU, in all source code files equal to the \r
+#     processor frequency. You can then use this symbol in your source code to \r
+#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done\r
+#     automatically to create a 32-bit value in your source code.\r
+#     Typical values are:\r
+#         F_CPU =  1000000\r
+#         F_CPU =  1843200\r
+#         F_CPU =  2000000\r
+#         F_CPU =  3686400\r
+#         F_CPU =  4000000\r
+#         F_CPU =  7372800\r
+#         F_CPU =  8000000\r
+#         F_CPU = 11059200\r
+#         F_CPU = 14745600\r
+#         F_CPU = 16000000\r
+#         F_CPU = 18432000\r
+#         F_CPU = 20000000\r
+F_CPU = 8000000\r
+\r
+\r
+# Input clock frequency.\r
+#     This will define a symbol, F_CLOCK, in all source code files equal to the \r
+#     input clock frequency (before any prescaling is performed). This value may\r
+#     differ from F_CPU if prescaling is used on the latter, and is required as the\r
+#     raw input clock is fed directly to the PLL sections of the AVR for high speed\r
+#     clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'\r
+#     at the end, this will be done automatically to create a 32-bit value in your\r
+#     source code.\r
+#\r
+#     If no clock division is performed on the input clock inside the AVR (via the\r
+#     CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.\r
+F_CLOCK = 8000000\r
+\r
+\r
+# Output format. (can be srec, ihex, binary)\r
+FORMAT = ihex\r
+\r
+\r
+# Target file name (without extension).\r
+TARGET = MIDI\r
+\r
+\r
+# Object files directory\r
+#     To put object files in current directory, use a dot (.), do NOT make\r
+#     this an empty or blank macro!\r
+OBJDIR = .\r
+\r
+\r
+# Path to the LUFA library\r
+LUFA_PATH = ../../..\r
+\r
+\r
+# List C source files here. (C dependencies are automatically generated.)\r
+SRC = $(TARGET).c                                                 \\r
+         Descriptors.c                                               \\r
+         $(LUFA_PATH)/LUFA/Scheduler/Scheduler.c                     \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/DevChapter9.c        \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Endpoint.c           \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Host.c               \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/HostChapter9.c       \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/LowLevel.c           \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Pipe.c               \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/Events.c            \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBInterrupt.c      \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBTask.c           \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/ConfigDescriptor.c  \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/Class/HIDParser.c             \\r
+\r
+\r
+# List C++ source files here. (C dependencies are automatically generated.)\r
+CPPSRC = \r
+\r
+\r
+# List Assembler source files here.\r
+#     Make them always end in a capital .S.  Files ending in a lowercase .s\r
+#     will not be considered source files but generated files (assembler\r
+#     output from the compiler), and will be deleted upon "make clean"!\r
+#     Even though the DOS/Win* filesystem matches both .s and .S the same,\r
+#     it will preserve the spelling of the filenames, and gcc itself does\r
+#     care about how the name is spelled on its command-line.\r
+ASRC =\r
+\r
+\r
+# Optimization level, can be [0, 1, 2, 3, s]. \r
+#     0 = turn off optimization. s = optimize for size.\r
+#     (Note: 3 is not always the best optimization level. See avr-libc FAQ.)\r
+OPT = s\r
+\r
+\r
+# Debugging format.\r
+#     Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs.\r
+#     AVR Studio 4.10 requires dwarf-2.\r
+#     AVR [Extended] COFF format requires stabs, plus an avr-objcopy run.\r
+DEBUG = dwarf-2\r
+\r
+\r
+# List any extra directories to look for include files here.\r
+#     Each directory must be seperated by a space.\r
+#     Use forward slashes for directory separators.\r
+#     For a directory that has spaces, enclose it in quotes.\r
+EXTRAINCDIRS = $(LUFA_PATH)/\r
+\r
+\r
+# Compiler flag to set the C Standard level.\r
+#     c89   = "ANSI" C\r
+#     gnu89 = c89 plus GCC extensions\r
+#     c99   = ISO C99 standard (not yet fully implemented)\r
+#     gnu99 = c99 plus GCC extensions\r
+CSTANDARD = -std=gnu99\r
+\r
+\r
+# Place -D or -U options here for C sources\r
+CDEFS  = -DF_CPU=$(F_CPU)UL -DF_CLOCK=$(F_CLOCK)UL -DBOARD=BOARD_$(BOARD)\r
+CDEFS += -DUSE_NONSTANDARD_DESCRIPTOR_NAMES -DNO_STREAM_CALLBACKS -DUSB_DEVICE_ONLY\r
+CDEFS += -DFIXED_CONTROL_ENDPOINT_SIZE=8 -DUSE_SINGLE_DEVICE_CONFIGURATION\r
+CDEFS += -DUSE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)"\r
+\r
+\r
+# Place -D or -U options here for ASM sources\r
+ADEFS = -DF_CPU=$(F_CPU)\r
+\r
+\r
+# Place -D or -U options here for C++ sources\r
+CPPDEFS = -DF_CPU=$(F_CPU)UL\r
+#CPPDEFS += -D__STDC_LIMIT_MACROS\r
+#CPPDEFS += -D__STDC_CONSTANT_MACROS\r
+\r
+\r
+\r
+#---------------- Compiler Options C ----------------\r
+#  -g*:          generate debugging information\r
+#  -O*:          optimization level\r
+#  -f...:        tuning, see GCC manual and avr-libc documentation\r
+#  -Wall...:     warning level\r
+#  -Wa,...:      tell GCC to pass this to the assembler.\r
+#    -adhlns...: create assembler listing\r
+CFLAGS = -g$(DEBUG)\r
+CFLAGS += $(CDEFS)\r
+CFLAGS += -O$(OPT)\r
+CFLAGS += -funsigned-char\r
+CFLAGS += -funsigned-bitfields\r
+CFLAGS += -ffunction-sections\r
+CFLAGS += -fpack-struct\r
+CFLAGS += -fshort-enums\r
+CFLAGS += -finline-limit=20\r
+CFLAGS += -Wall\r
+CFLAGS += -Wstrict-prototypes\r
+CFLAGS += -Wundef\r
+#CFLAGS += -fno-unit-at-a-time\r
+#CFLAGS += -Wunreachable-code\r
+#CFLAGS += -Wsign-compare\r
+CFLAGS += -Wa,-adhlns=$(<:%.c=$(OBJDIR)/%.lst)\r
+CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))\r
+CFLAGS += $(CSTANDARD)\r
+\r
+\r
+#---------------- Compiler Options C++ ----------------\r
+#  -g*:          generate debugging information\r
+#  -O*:          optimization level\r
+#  -f...:        tuning, see GCC manual and avr-libc documentation\r
+#  -Wall...:     warning level\r
+#  -Wa,...:      tell GCC to pass this to the assembler.\r
+#    -adhlns...: create assembler listing\r
+CPPFLAGS = -g$(DEBUG)\r
+CPPFLAGS += $(CPPDEFS)\r
+CPPFLAGS += -O$(OPT)\r
+CPPFLAGS += -funsigned-char\r
+CPPFLAGS += -funsigned-bitfields\r
+CPPFLAGS += -fpack-struct\r
+CPPFLAGS += -fshort-enums\r
+CPPFLAGS += -fno-exceptions\r
+CPPFLAGS += -Wall\r
+CFLAGS += -Wundef\r
+#CPPFLAGS += -mshort-calls\r
+#CPPFLAGS += -fno-unit-at-a-time\r
+#CPPFLAGS += -Wstrict-prototypes\r
+#CPPFLAGS += -Wunreachable-code\r
+#CPPFLAGS += -Wsign-compare\r
+CPPFLAGS += -Wa,-adhlns=$(<:%.cpp=$(OBJDIR)/%.lst)\r
+CPPFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))\r
+#CPPFLAGS += $(CSTANDARD)\r
+\r
+\r
+#---------------- Assembler Options ----------------\r
+#  -Wa,...:   tell GCC to pass this to the assembler.\r
+#  -adhlns:   create listing\r
+#  -gstabs:   have the assembler create line number information; note that\r
+#             for use in COFF files, additional information about filenames\r
+#             and function names needs to be present in the assembler source\r
+#             files -- see avr-libc docs [FIXME: not yet described there]\r
+#  -listing-cont-lines: Sets the maximum number of continuation lines of hex \r
+#       dump that will be displayed for a given single line of source input.\r
+ASFLAGS = $(ADEFS) -Wa,-adhlns=$(<:%.S=$(OBJDIR)/%.lst),-gstabs,--listing-cont-lines=100\r
+\r
+\r
+#---------------- Library Options ----------------\r
+# Minimalistic printf version\r
+PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min\r
+\r
+# Floating point printf version (requires MATH_LIB = -lm below)\r
+PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt\r
+\r
+# If this is left blank, then it will use the Standard printf version.\r
+PRINTF_LIB = \r
+#PRINTF_LIB = $(PRINTF_LIB_MIN)\r
+#PRINTF_LIB = $(PRINTF_LIB_FLOAT)\r
+\r
+\r
+# Minimalistic scanf version\r
+SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min\r
+\r
+# Floating point + %[ scanf version (requires MATH_LIB = -lm below)\r
+SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt\r
+\r
+# If this is left blank, then it will use the Standard scanf version.\r
+SCANF_LIB = \r
+#SCANF_LIB = $(SCANF_LIB_MIN)\r
+#SCANF_LIB = $(SCANF_LIB_FLOAT)\r
+\r
+\r
+MATH_LIB = -lm\r
+\r
+\r
+# List any extra directories to look for libraries here.\r
+#     Each directory must be seperated by a space.\r
+#     Use forward slashes for directory separators.\r
+#     For a directory that has spaces, enclose it in quotes.\r
+EXTRALIBDIRS = \r
+\r
+\r
+\r
+#---------------- External Memory Options ----------------\r
+\r
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),\r
+# used for variables (.data/.bss) and heap (malloc()).\r
+#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff\r
+\r
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),\r
+# only used for heap (malloc()).\r
+#EXTMEMOPTS = -Wl,--section-start,.data=0x801100,--defsym=__heap_end=0x80ffff\r
+\r
+EXTMEMOPTS =\r
+\r
+\r
+\r
+#---------------- Linker Options ----------------\r
+#  -Wl,...:     tell GCC to pass this to linker.\r
+#    -Map:      create map file\r
+#    --cref:    add cross reference to  map file\r
+LDFLAGS = -Wl,-Map=$(TARGET).map,--cref\r
+LDFLAGS += -Wl,--relax \r
+LDFLAGS += -Wl,--gc-sections\r
+LDFLAGS += $(EXTMEMOPTS)\r
+LDFLAGS += $(patsubst %,-L%,$(EXTRALIBDIRS))\r
+LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)\r
+#LDFLAGS += -T linker_script.x\r
+\r
+\r
+\r
+#---------------- Programming Options (avrdude) ----------------\r
+\r
+# Programming hardware: alf avr910 avrisp bascom bsd \r
+# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500\r
+#\r
+# Type: avrdude -c ?\r
+# to get a full listing.\r
+#\r
+AVRDUDE_PROGRAMMER = jtagmkII\r
+\r
+# com1 = serial port. Use lpt1 to connect to parallel port.\r
+AVRDUDE_PORT = usb\r
+\r
+AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex\r
+#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep\r
+\r
+\r
+# Uncomment the following if you want avrdude's erase cycle counter.\r
+# Note that this counter needs to be initialized first using -Yn,\r
+# see avrdude manual.\r
+#AVRDUDE_ERASE_COUNTER = -y\r
+\r
+# Uncomment the following if you do /not/ wish a verification to be\r
+# performed after programming the device.\r
+#AVRDUDE_NO_VERIFY = -V\r
+\r
+# Increase verbosity level.  Please use this when submitting bug\r
+# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude> \r
+# to submit bug reports.\r
+#AVRDUDE_VERBOSE = -v -v\r
+\r
+AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)\r
+AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY)\r
+AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE)\r
+AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER)\r
+\r
+\r
+\r
+#---------------- Debugging Options ----------------\r
+\r
+# For simulavr only - target MCU frequency.\r
+DEBUG_MFREQ = $(F_CPU)\r
+\r
+# Set the DEBUG_UI to either gdb or insight.\r
+# DEBUG_UI = gdb\r
+DEBUG_UI = insight\r
+\r
+# Set the debugging back-end to either avarice, simulavr.\r
+DEBUG_BACKEND = avarice\r
+#DEBUG_BACKEND = simulavr\r
+\r
+# GDB Init Filename.\r
+GDBINIT_FILE = __avr_gdbinit\r
+\r
+# When using avarice settings for the JTAG\r
+JTAG_DEV = /dev/com1\r
+\r
+# Debugging port used to communicate between GDB / avarice / simulavr.\r
+DEBUG_PORT = 4242\r
+\r
+# Debugging host used to communicate between GDB / avarice / simulavr, normally\r
+#     just set to localhost unless doing some sort of crazy debugging when \r
+#     avarice is running on a different computer.\r
+DEBUG_HOST = localhost\r
+\r
+\r
+\r
+#============================================================================\r
+\r
+\r
+# Define programs and commands.\r
+SHELL = sh\r
+CC = avr-gcc\r
+OBJCOPY = avr-objcopy\r
+OBJDUMP = avr-objdump\r
+SIZE = avr-size\r
+AR = avr-ar rcs\r
+NM = avr-nm\r
+AVRDUDE = avrdude\r
+REMOVE = rm -f\r
+REMOVEDIR = rm -rf\r
+COPY = cp\r
+WINSHELL = cmd\r
+\r
+# Define Messages\r
+# English\r
+MSG_ERRORS_NONE = Errors: none\r
+MSG_BEGIN = -------- begin --------\r
+MSG_END = --------  end  --------\r
+MSG_SIZE_BEFORE = Size before: \r
+MSG_SIZE_AFTER = Size after:\r
+MSG_COFF = Converting to AVR COFF:\r
+MSG_EXTENDED_COFF = Converting to AVR Extended COFF:\r
+MSG_FLASH = Creating load file for Flash:\r
+MSG_EEPROM = Creating load file for EEPROM:\r
+MSG_EXTENDED_LISTING = Creating Extended Listing:\r
+MSG_SYMBOL_TABLE = Creating Symbol Table:\r
+MSG_LINKING = Linking:\r
+MSG_COMPILING = Compiling C:\r
+MSG_COMPILING_CPP = Compiling C++:\r
+MSG_ASSEMBLING = Assembling:\r
+MSG_CLEANING = Cleaning project:\r
+MSG_CREATING_LIBRARY = Creating library:\r
+\r
+\r
+\r
+\r
+# Define all object files.\r
+OBJ = $(SRC:%.c=$(OBJDIR)/%.o) $(CPPSRC:%.cpp=$(OBJDIR)/%.o) $(ASRC:%.S=$(OBJDIR)/%.o) \r
+\r
+# Define all listing files.\r
+LST = $(SRC:%.c=$(OBJDIR)/%.lst) $(CPPSRC:%.cpp=$(OBJDIR)/%.lst) $(ASRC:%.S=$(OBJDIR)/%.lst) \r
+\r
+\r
+# Compiler flags to generate dependency files.\r
+GENDEPFLAGS = -MMD -MP -MF .dep/$(@F).d\r
+\r
+\r
+# Combine all necessary flags and optional flags.\r
+# Add target processor to flags.\r
+ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS)\r
+ALL_CPPFLAGS = -mmcu=$(MCU) -I. -x c++ $(CPPFLAGS) $(GENDEPFLAGS)\r
+ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)\r
+\r
+\r
+\r
+\r
+\r
+# Default target.\r
+all: begin gccversion sizebefore build checkhooks checklibmode checkboard sizeafter end\r
+\r
+# Change the build target to build a HEX file or a library.\r
+build: elf hex eep lss sym\r
+#build: lib\r
+\r
+\r
+elf: $(TARGET).elf\r
+hex: $(TARGET).hex\r
+eep: $(TARGET).eep\r
+lss: $(TARGET).lss\r
+sym: $(TARGET).sym\r
+LIBNAME=lib$(TARGET).a\r
+lib: $(LIBNAME)\r
+\r
+\r
+\r
+# Eye candy.\r
+# AVR Studio 3.x does not check make's exit code but relies on\r
+# the following magic strings to be generated by the compile job.\r
+begin:\r
+       @echo\r
+       @echo $(MSG_BEGIN)\r
+\r
+end:\r
+       @echo $(MSG_END)\r
+       @echo\r
+\r
+\r
+# Display size of file.\r
+HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex\r
+ELFSIZE = $(SIZE) $(MCU_FLAG) $(FORMAT_FLAG) $(TARGET).elf\r
+MCU_FLAG = $(shell $(SIZE) --help | grep -- --mcu > /dev/null && echo --mcu=$(MCU) )\r
+FORMAT_FLAG = $(shell $(SIZE) --help | grep -- --format=.*avr > /dev/null && echo --format=avr )\r
+\r
+sizebefore:\r
+       @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \\r
+       2>/dev/null; echo; fi\r
+\r
+sizeafter:\r
+       @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \\r
+       2>/dev/null; echo; fi\r
+\r
+checkhooks: build\r
+       @echo\r
+       @echo ------- Unhooked LUFA Events -------\r
+       @$(shell) (grep -s '^EVENT_.*LUFA/.*\\.o' $(TARGET).map | \\r
+                  cut -d' ' -f1 | cut -d'_' -f2- | grep ".*") || \\r
+                          echo "(None)"\r
+       @echo ------------------------------------\r
+\r
+checklibmode:\r
+       @echo\r
+       @echo ----------- Library Mode -----------\r
+       @$(shell) ($(CC) $(ALL_CFLAGS) -E -dM - < /dev/null \\r
+                 | grep 'USB_\(DEVICE\|HOST\)_ONLY' | cut -d' ' -f2 | grep ".*") \\r
+                 || echo "No specific mode (both device and host mode allowable)."\r
+       @echo ------------------------------------\r
+\r
+checkboard:\r
+       @echo\r
+       @echo ---------- Selected Board ----------\r
+       @echo Selected board model is $(BOARD).\r
+       @echo ------------------------------------\r
+       \r
+# Display compiler version information.\r
+gccversion : \r
+       @$(CC) --version\r
+\r
+\r
+\r
+# Program the device.  \r
+program: $(TARGET).hex $(TARGET).eep\r
+       $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)\r
+\r
+flip: $(TARGET).hex\r
+       batchisp -hardware usb -device $(MCU) -operation erase f\r
+       batchisp -hardware usb -device $(MCU) -operation loadbuffer $(TARGET).hex program\r
+       batchisp -hardware usb -device $(MCU) -operation start reset 0\r
+\r
+dfu: $(TARGET).hex\r
+       dfu-programmer $(MCU) erase\r
+       dfu-programmer $(MCU) flash --debug 1 $(TARGET).hex\r
+       dfu-programmer $(MCU) reset\r
+\r
+flip-ee: $(TARGET).hex $(TARGET).eep\r
+       copy $(TARGET).eep $(TARGET)eep.hex\r
+       batchisp -hardware usb -device $(MCU) -operation memory EEPROM erase\r
+       batchisp -hardware usb -device $(MCU) -operation memory EEPROM loadbuffer $(TARGET)eep.hex program\r
+       batchisp -hardware usb -device $(MCU) -operation start reset 0\r
+\r
+dfu-ee: $(TARGET).hex $(TARGET).eep\r
+       dfu-programmer $(MCU) flash-eeprom --debug 1 --suppress-bootloader-mem $(TARGET).eep\r
+       dfu-programmer $(MCU) reset\r
+\r
+\r
+# Generate avr-gdb config/init file which does the following:\r
+#     define the reset signal, load the target file, connect to target, and set \r
+#     a breakpoint at main().\r
+gdb-config: \r
+       @$(REMOVE) $(GDBINIT_FILE)\r
+       @echo define reset >> $(GDBINIT_FILE)\r
+       @echo SIGNAL SIGHUP >> $(GDBINIT_FILE)\r
+       @echo end >> $(GDBINIT_FILE)\r
+       @echo file $(TARGET).elf >> $(GDBINIT_FILE)\r
+       @echo target remote $(DEBUG_HOST):$(DEBUG_PORT)  >> $(GDBINIT_FILE)\r
+ifeq ($(DEBUG_BACKEND),simulavr)\r
+       @echo load  >> $(GDBINIT_FILE)\r
+endif\r
+       @echo break main >> $(GDBINIT_FILE)\r
+\r
+debug: gdb-config $(TARGET).elf\r
+ifeq ($(DEBUG_BACKEND), avarice)\r
+       @echo Starting AVaRICE - Press enter when "waiting to connect" message displays.\r
+       @$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \\r
+       $(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT)\r
+       @$(WINSHELL) /c pause\r
+\r
+else\r
+       @$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \\r
+       $(DEBUG_MFREQ) --port $(DEBUG_PORT)\r
+endif\r
+       @$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE)\r
+\r
+\r
+\r
+\r
+# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.\r
+COFFCONVERT = $(OBJCOPY) --debugging\r
+COFFCONVERT += --change-section-address .data-0x800000\r
+COFFCONVERT += --change-section-address .bss-0x800000\r
+COFFCONVERT += --change-section-address .noinit-0x800000\r
+COFFCONVERT += --change-section-address .eeprom-0x810000\r
+\r
+\r
+\r
+coff: $(TARGET).elf\r
+       @echo\r
+       @echo $(MSG_COFF) $(TARGET).cof\r
+       $(COFFCONVERT) -O coff-avr $< $(TARGET).cof\r
+\r
+\r
+extcoff: $(TARGET).elf\r
+       @echo\r
+       @echo $(MSG_EXTENDED_COFF) $(TARGET).cof\r
+       $(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof\r
+\r
+\r
+\r
+# Create final output files (.hex, .eep) from ELF output file.\r
+%.hex: %.elf\r
+       @echo\r
+       @echo $(MSG_FLASH) $@\r
+       $(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@\r
+\r
+%.eep: %.elf\r
+       @echo\r
+       @echo $(MSG_EEPROM) $@\r
+       -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \\r
+       --change-section-lma .eeprom=0 --no-change-warnings -O $(FORMAT) $< $@ || exit 0\r
+\r
+# Create extended listing file from ELF output file.\r
+%.lss: %.elf\r
+       @echo\r
+       @echo $(MSG_EXTENDED_LISTING) $@\r
+       $(OBJDUMP) -h -z -S $< > $@\r
+\r
+# Create a symbol table from ELF output file.\r
+%.sym: %.elf\r
+       @echo\r
+       @echo $(MSG_SYMBOL_TABLE) $@\r
+       $(NM) -n $< > $@\r
+\r
+\r
+\r
+# Create library from object files.\r
+.SECONDARY : $(TARGET).a\r
+.PRECIOUS : $(OBJ)\r
+%.a: $(OBJ)\r
+       @echo\r
+       @echo $(MSG_CREATING_LIBRARY) $@\r
+       $(AR) $@ $(OBJ)\r
+\r
+\r
+# Link: create ELF output file from object files.\r
+.SECONDARY : $(TARGET).elf\r
+.PRECIOUS : $(OBJ)\r
+%.elf: $(OBJ)\r
+       @echo\r
+       @echo $(MSG_LINKING) $@\r
+       $(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)\r
+\r
+\r
+# Compile: create object files from C source files.\r
+$(OBJDIR)/%.o : %.c\r
+       @echo\r
+       @echo $(MSG_COMPILING) $<\r
+       $(CC) -c $(ALL_CFLAGS) $< -o $@ \r
+\r
+\r
+# Compile: create object files from C++ source files.\r
+$(OBJDIR)/%.o : %.cpp\r
+       @echo\r
+       @echo $(MSG_COMPILING_CPP) $<\r
+       $(CC) -c $(ALL_CPPFLAGS) $< -o $@ \r
+\r
+\r
+# Compile: create assembler files from C source files.\r
+%.s : %.c\r
+       $(CC) -S $(ALL_CFLAGS) $< -o $@\r
+\r
+\r
+# Compile: create assembler files from C++ source files.\r
+%.s : %.cpp\r
+       $(CC) -S $(ALL_CPPFLAGS) $< -o $@\r
+\r
+\r
+# Assemble: create object files from assembler source files.\r
+$(OBJDIR)/%.o : %.S\r
+       @echo\r
+       @echo $(MSG_ASSEMBLING) $<\r
+       $(CC) -c $(ALL_ASFLAGS) $< -o $@\r
+\r
+\r
+# Create preprocessed source for use in sending a bug report.\r
+%.i : %.c\r
+       $(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ \r
+       \r
+\r
+# Target: clean project.\r
+clean: begin clean_list clean_binary end\r
+\r
+clean_binary:\r
+       $(REMOVE) $(TARGET).hex\r
+       \r
+clean_list:\r
+       @echo $(MSG_CLEANING)\r
+       $(REMOVE) $(TARGET).eep\r
+       $(REMOVE) $(TARGET)eep.hex\r
+       $(REMOVE) $(TARGET).cof\r
+       $(REMOVE) $(TARGET).elf\r
+       $(REMOVE) $(TARGET).map\r
+       $(REMOVE) $(TARGET).sym\r
+       $(REMOVE) $(TARGET).lss\r
+       $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.o)\r
+       $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.lst)\r
+       $(REMOVE) $(SRC:.c=.s)\r
+       $(REMOVE) $(SRC:.c=.d)\r
+       $(REMOVE) $(SRC:.c=.i)\r
+       $(REMOVEDIR) .dep\r
+\r
+\r
+doxygen:\r
+       @echo Generating Project Documentation...\r
+       @doxygen Doxygen.conf\r
+       @echo Documentation Generation Complete.\r
+\r
+clean_doxygen:\r
+       rm -rf Documentation\r
+\r
+# Create object files directory\r
+$(shell mkdir $(OBJDIR) 2>/dev/null)\r
+\r
+\r
+# Include the dependency files.\r
+-include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)\r
+\r
+\r
+# Listing of phony targets.\r
+.PHONY : all checkhooks checklibmode checkboard   \\r
+begin finish end sizebefore sizeafter gccversion  \\r
+build elf hex eep lss sym coff extcoff clean      \\r
+clean_list clean_binary program debug gdb-config  \\r
+doxygen dfu flip flip-ee dfu-ee
\ No newline at end of file
diff --git a/Demos/Device/LowLevel/MassStorage/Descriptors.c b/Demos/Device/LowLevel/MassStorage/Descriptors.c
new file mode 100644 (file)
index 0000000..6c02a6c
--- /dev/null
@@ -0,0 +1,223 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  USB Device Descriptors, for library use when in USB device mode. Descriptors are special \r
+ *  computer-readable structures which the host requests upon device enumeration, to determine\r
+ *  the device's capabilities and functions.  \r
+ */\r
+\r
+#include "Descriptors.h"\r
+\r
+/** Device descriptor structure. This descriptor, located in FLASH memory, describes the overall\r
+ *  device characteristics, including the supported USB version, control endpoint size and the\r
+ *  number of device configurations. The descriptor is read out by the USB host when the enumeration\r
+ *  process begins.\r
+ */\r
+USB_Descriptor_Device_t PROGMEM DeviceDescriptor =\r
+{\r
+       .Header                 = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device},\r
+               \r
+       .USBSpecification       = VERSION_BCD(01.10),\r
+       .Class                  = 0x00,\r
+       .SubClass               = 0x00,\r
+       .Protocol               = 0x00,\r
+                               \r
+       .Endpoint0Size          = FIXED_CONTROL_ENDPOINT_SIZE,\r
+               \r
+       .VendorID               = 0x03EB,\r
+       .ProductID              = 0x2045,\r
+       .ReleaseNumber          = 0x0000,\r
+               \r
+       .ManufacturerStrIndex   = 0x01,\r
+       .ProductStrIndex        = 0x02,\r
+       .SerialNumStrIndex      = 0x03,\r
+               \r
+       .NumberOfConfigurations = 1\r
+};\r
+\r
+/** Configuration descriptor structure. This descriptor, located in FLASH memory, describes the usage\r
+ *  of the device in one of its supported configurations, including information about any device interfaces\r
+ *  and endpoints. The descriptor is read out by the USB host during the enumeration process when selecting\r
+ *  a configuration so that the host may correctly communicate with the USB device.\r
+ */\r
+USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =\r
+{\r
+       .Config = \r
+               {\r
+                       .Header                 = {.Size = sizeof(USB_Descriptor_Configuration_Header_t), .Type = DTYPE_Configuration},\r
+\r
+                       .TotalConfigurationSize = sizeof(USB_Descriptor_Configuration_t),\r
+                       .TotalInterfaces        = 1,\r
+                               \r
+                       .ConfigurationNumber    = 1,\r
+                       .ConfigurationStrIndex  = NO_DESCRIPTOR,\r
+                               \r
+                       .ConfigAttributes       = USB_CONFIG_ATTR_BUSPOWERED,\r
+                       \r
+                       .MaxPowerConsumption    = USB_CONFIG_POWER_MA(100)\r
+               },\r
+               \r
+       .Interface = \r
+               {\r
+                       .Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},\r
+\r
+                       .InterfaceNumber        = 0,\r
+                       .AlternateSetting       = 0,\r
+                       \r
+                       .TotalEndpoints         = 2,\r
+                               \r
+                       .Class                  = 0x08,\r
+                       .SubClass               = 0x06,\r
+                       .Protocol               = 0x50,\r
+                               \r
+                       .InterfaceStrIndex      = NO_DESCRIPTOR\r
+               },\r
+\r
+       .DataInEndpoint = \r
+               {\r
+                       .Header                 = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},\r
+\r
+                       .EndpointAddress        = (ENDPOINT_DESCRIPTOR_DIR_IN | MASS_STORAGE_IN_EPNUM),\r
+                       .Attributes             = EP_TYPE_BULK,\r
+                       .EndpointSize           = MASS_STORAGE_IO_EPSIZE,\r
+                       .PollingIntervalMS      = 0x00\r
+               },\r
+\r
+       .DataOutEndpoint = \r
+               {\r
+                       .Header                 = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},\r
+\r
+                       .EndpointAddress        = (ENDPOINT_DESCRIPTOR_DIR_OUT | MASS_STORAGE_OUT_EPNUM),\r
+                       .Attributes             = EP_TYPE_BULK,\r
+                       .EndpointSize           = MASS_STORAGE_IO_EPSIZE,\r
+                       .PollingIntervalMS      = 0x00\r
+               }\r
+};\r
+\r
+/** Language descriptor structure. This descriptor, located in FLASH memory, is returned when the host requests\r
+ *  the string descriptor with index 0 (the first index). It is actually an array of 16-bit integers, which indicate\r
+ *  via the language ID table available at USB.org what languages the device supports for its string descriptors.\r
+ */\r
+USB_Descriptor_String_t PROGMEM LanguageString =\r
+{\r
+       .Header                 = {.Size = USB_STRING_LEN(1), .Type = DTYPE_String},\r
+               \r
+       .UnicodeString          = {LANGUAGE_ID_ENG}\r
+};\r
+\r
+/** Manufacturer descriptor string. This is a Unicode string containing the manufacturer's details in human readable\r
+ *  form, and is read out upon request by the host when the appropriate string ID is requested, listed in the Device\r
+ *  Descriptor.\r
+ */\r
+USB_Descriptor_String_t PROGMEM ManufacturerString =\r
+{\r
+       .Header                 = {.Size = USB_STRING_LEN(11), .Type = DTYPE_String},\r
+               \r
+       .UnicodeString          = L"Dean Camera"\r
+};\r
+\r
+/** Product descriptor string. This is a Unicode string containing the product's details in human readable form,\r
+ *  and is read out upon request by the host when the appropriate string ID is requested, listed in the Device\r
+ *  Descriptor.\r
+ */\r
+USB_Descriptor_String_t PROGMEM ProductString =\r
+{\r
+       .Header                 = {.Size = USB_STRING_LEN(22), .Type = DTYPE_String},\r
+               \r
+       .UnicodeString          = L"LUFA Mass Storage Demo"\r
+};\r
+\r
+/** Serial number descriptor string. This is a Unicode string containing a string of HEX characters at least 12\r
+ *  digits in length to uniquely identify a device when concatenated with the device's Vendor and Product IDs. By\r
+ *  using the unique serial number string to identify a device, the device drivers do not need to be reinstalled\r
+ *  each time the device is inserted into a different USB port on the same system. <b>This should be unique between\r
+ *  devices, or conflicts will occur if two devices sharing the same serial number are inserted into the same system\r
+ *  at the same time.</b>\r
+ */\r
+USB_Descriptor_String_t PROGMEM SerialNumberString =\r
+{\r
+       .Header                 = {.Size = USB_STRING_LEN(12), .Type = DTYPE_String},\r
+               \r
+       .UnicodeString          = L"000000000000"\r
+};\r
+\r
+/** This function is called by the library when in device mode, and must be overridden (see library "USB Descriptors"\r
+ *  documentation) by the application code so that the address and size of a requested descriptor can be given\r
+ *  to the USB library. When the device receives a Get Descriptor request on the control endpoint, this function\r
+ *  is called so that the descriptor details can be passed back and the appropriate descriptor sent back to the\r
+ *  USB host.\r
+ */\r
+uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
+{\r
+       const uint8_t  DescriptorType   = (wValue >> 8);\r
+       const uint8_t  DescriptorNumber = (wValue & 0xFF);\r
+\r
+       void*    Address = NULL;\r
+       uint16_t Size    = NO_DESCRIPTOR;\r
+\r
+       switch (DescriptorType)\r
+       {\r
+               case DTYPE_Device: \r
+                       Address = (void*)&DeviceDescriptor;\r
+                       Size    = sizeof(USB_Descriptor_Device_t);\r
+                       break;\r
+               case DTYPE_Configuration: \r
+                       Address = (void*)&ConfigurationDescriptor;\r
+                       Size    = sizeof(USB_Descriptor_Configuration_t);\r
+                       break;\r
+               case DTYPE_String: \r
+                       switch (DescriptorNumber)\r
+                       {\r
+                               case 0x00: \r
+                                       Address = (void*)&LanguageString;\r
+                                       Size    = pgm_read_byte(&LanguageString.Header.Size);\r
+                                       break;\r
+                               case 0x01: \r
+                                       Address = (void*)&ManufacturerString;\r
+                                       Size    = pgm_read_byte(&ManufacturerString.Header.Size);\r
+                                       break;\r
+                               case 0x02: \r
+                                       Address = (void*)&ProductString;\r
+                                       Size    = pgm_read_byte(&ProductString.Header.Size);\r
+                                       break;\r
+                               case 0x03: \r
+                                       Address = (void*)&SerialNumberString;\r
+                                       Size    = pgm_read_byte(&SerialNumberString.Header.Size);\r
+                                       break;\r
+                       }\r
+                       \r
+                       break;\r
+       }\r
+       \r
+       *DescriptorAddress = Address;\r
+       return Size;\r
+}\r
diff --git a/Demos/Device/LowLevel/MassStorage/Descriptors.h b/Demos/Device/LowLevel/MassStorage/Descriptors.h
new file mode 100644 (file)
index 0000000..0fa147b
--- /dev/null
@@ -0,0 +1,71 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  Header file for Descriptors.c.\r
+ */\r
\r
+#ifndef _DESCRIPTORS_H_\r
+#define _DESCRIPTORS_H_\r
+\r
+       /* Includes: */\r
+               #include <LUFA/Drivers/USB/USB.h>\r
+\r
+               #include <avr/pgmspace.h>\r
+\r
+       /* Macros: */\r
+               /** Endpoint number of the Mass Storage device-to-host data IN endpoint. */\r
+               #define MASS_STORAGE_IN_EPNUM          3        \r
+\r
+               /** Endpoint number of the Mass Storage host-to-device data OUT endpoint. */\r
+               #define MASS_STORAGE_OUT_EPNUM         4        \r
+\r
+               /** Size in bytes of the Mass Storage data endpoints. */\r
+               #define MASS_STORAGE_IO_EPSIZE         64\r
+               \r
+       /* Type Defines: */             \r
+               /** Type define for the device configuration descriptor structure. This must be defined in the\r
+                *  application code, as the configuration descriptor contains several sub-descriptors which\r
+                *  vary between devices, and which describe the device's usage to the host.\r
+                */\r
+               typedef struct\r
+               {\r
+                       USB_Descriptor_Configuration_Header_t Config;\r
+                       USB_Descriptor_Interface_t            Interface;\r
+                       USB_Descriptor_Endpoint_t             DataInEndpoint;\r
+                       USB_Descriptor_Endpoint_t             DataOutEndpoint;\r
+               } USB_Descriptor_Configuration_t;\r
+               \r
+       /* Function Prototypes: */\r
+               uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
+                                                                                       ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);\r
+\r
+#endif\r
diff --git a/Demos/Device/LowLevel/MassStorage/Doxygen.conf b/Demos/Device/LowLevel/MassStorage/Doxygen.conf
new file mode 100644 (file)
index 0000000..a7b9001
--- /dev/null
@@ -0,0 +1,1485 @@
+# Doxyfile 1.5.7.1\r
+\r
+# This file describes the settings to be used by the documentation system\r
+# doxygen (www.doxygen.org) for a project\r
+#\r
+# All text after a hash (#) is considered a comment and will be ignored\r
+# The format is:\r
+#       TAG = value [value, ...]\r
+# For lists items can also be appended using:\r
+#       TAG += value [value, ...]\r
+# Values that contain spaces should be placed between quotes (" ")\r
+\r
+#---------------------------------------------------------------------------\r
+# Project related configuration options\r
+#---------------------------------------------------------------------------\r
+\r
+# This tag specifies the encoding used for all characters in the config file \r
+# that follow. The default is UTF-8 which is also the encoding used for all \r
+# text before the first occurrence of this tag. Doxygen uses libiconv (or the \r
+# iconv built into libc) for the transcoding. See \r
+# http://www.gnu.org/software/libiconv for the list of possible encodings.\r
+\r
+DOXYFILE_ENCODING      = UTF-8\r
+\r
+# The PROJECT_NAME tag is a single word (or a sequence of words surrounded \r
+# by quotes) that should identify the project.\r
+\r
+PROJECT_NAME           = "LUFA Library - Mass Storage Device Demo"\r
+\r
+# The PROJECT_NUMBER tag can be used to enter a project or revision number. \r
+# This could be handy for archiving the generated documentation or \r
+# if some version control system is used.\r
+\r
+PROJECT_NUMBER         = 0.0.0\r
+\r
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) \r
+# base path where the generated documentation will be put. \r
+# If a relative path is entered, it will be relative to the location \r
+# where doxygen was started. If left blank the current directory will be used.\r
+\r
+OUTPUT_DIRECTORY       = ./Documentation/\r
+\r
+# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create \r
+# 4096 sub-directories (in 2 levels) under the output directory of each output \r
+# format and will distribute the generated files over these directories. \r
+# Enabling this option can be useful when feeding doxygen a huge amount of \r
+# source files, where putting all generated files in the same directory would \r
+# otherwise cause performance problems for the file system.\r
+\r
+CREATE_SUBDIRS         = YES\r
+\r
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all \r
+# documentation generated by doxygen is written. Doxygen will use this \r
+# information to generate all constant output in the proper language. \r
+# The default language is English, other supported languages are: \r
+# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, \r
+# Croatian, Czech, Danish, Dutch, Farsi, Finnish, French, German, Greek, \r
+# Hungarian, Italian, Japanese, Japanese-en (Japanese with English messages), \r
+# Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, Polish, \r
+# Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, Slovene, \r
+# Spanish, Swedish, and Ukrainian.\r
+\r
+OUTPUT_LANGUAGE        = English\r
+\r
+# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will \r
+# include brief member descriptions after the members that are listed in \r
+# the file and class documentation (similar to JavaDoc). \r
+# Set to NO to disable this.\r
+\r
+BRIEF_MEMBER_DESC      = YES\r
+\r
+# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend \r
+# the brief description of a member or function before the detailed description. \r
+# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the \r
+# brief descriptions will be completely suppressed.\r
+\r
+REPEAT_BRIEF           = YES\r
+\r
+# This tag implements a quasi-intelligent brief description abbreviator \r
+# that is used to form the text in various listings. Each string \r
+# in this list, if found as the leading text of the brief description, will be \r
+# stripped from the text and the result after processing the whole list, is \r
+# used as the annotated text. Otherwise, the brief description is used as-is. \r
+# If left blank, the following values are used ("$name" is automatically \r
+# replaced with the name of the entity): "The $name class" "The $name widget" \r
+# "The $name file" "is" "provides" "specifies" "contains" \r
+# "represents" "a" "an" "the"\r
+\r
+ABBREVIATE_BRIEF       = "The $name class" \\r
+                         "The $name widget" \\r
+                         "The $name file" \\r
+                         is \\r
+                         provides \\r
+                         specifies \\r
+                         contains \\r
+                         represents \\r
+                         a \\r
+                         an \\r
+                         the\r
+\r
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then \r
+# Doxygen will generate a detailed section even if there is only a brief \r
+# description.\r
+\r
+ALWAYS_DETAILED_SEC    = NO\r
+\r
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all \r
+# inherited members of a class in the documentation of that class as if those \r
+# members were ordinary class members. Constructors, destructors and assignment \r
+# operators of the base classes will not be shown.\r
+\r
+INLINE_INHERITED_MEMB  = NO\r
+\r
+# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full \r
+# path before files name in the file list and in the header files. If set \r
+# to NO the shortest path that makes the file name unique will be used.\r
+\r
+FULL_PATH_NAMES        = YES\r
+\r
+# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag \r
+# can be used to strip a user-defined part of the path. Stripping is \r
+# only done if one of the specified strings matches the left-hand part of \r
+# the path. The tag can be used to show relative paths in the file list. \r
+# If left blank the directory from which doxygen is run is used as the \r
+# path to strip.\r
+\r
+STRIP_FROM_PATH        = \r
+\r
+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of \r
+# the path mentioned in the documentation of a class, which tells \r
+# the reader which header file to include in order to use a class. \r
+# If left blank only the name of the header file containing the class \r
+# definition is used. Otherwise one should specify the include paths that \r
+# are normally passed to the compiler using the -I flag.\r
+\r
+STRIP_FROM_INC_PATH    = \r
+\r
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter \r
+# (but less readable) file names. This can be useful is your file systems \r
+# doesn't support long names like on DOS, Mac, or CD-ROM.\r
+\r
+SHORT_NAMES            = YES\r
+\r
+# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen \r
+# will interpret the first line (until the first dot) of a JavaDoc-style \r
+# comment as the brief description. If set to NO, the JavaDoc \r
+# comments will behave just like regular Qt-style comments \r
+# (thus requiring an explicit @brief command for a brief description.)\r
+\r
+JAVADOC_AUTOBRIEF      = NO\r
+\r
+# If the QT_AUTOBRIEF tag is set to YES then Doxygen will \r
+# interpret the first line (until the first dot) of a Qt-style \r
+# comment as the brief description. If set to NO, the comments \r
+# will behave just like regular Qt-style comments (thus requiring \r
+# an explicit \brief command for a brief description.)\r
+\r
+QT_AUTOBRIEF           = NO\r
+\r
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen \r
+# treat a multi-line C++ special comment block (i.e. a block of //! or /// \r
+# comments) as a brief description. This used to be the default behaviour. \r
+# The new default is to treat a multi-line C++ comment block as a detailed \r
+# description. Set this tag to YES if you prefer the old behaviour instead.\r
+\r
+MULTILINE_CPP_IS_BRIEF = NO\r
+\r
+# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented \r
+# member inherits the documentation from any documented member that it \r
+# re-implements.\r
+\r
+INHERIT_DOCS           = YES\r
+\r
+# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce \r
+# a new page for each member. If set to NO, the documentation of a member will \r
+# be part of the file/class/namespace that contains it.\r
+\r
+SEPARATE_MEMBER_PAGES  = NO\r
+\r
+# The TAB_SIZE tag can be used to set the number of spaces in a tab. \r
+# Doxygen uses this value to replace tabs by spaces in code fragments.\r
+\r
+TAB_SIZE               = 4\r
+\r
+# This tag can be used to specify a number of aliases that acts \r
+# as commands in the documentation. An alias has the form "name=value". \r
+# For example adding "sideeffect=\par Side Effects:\n" will allow you to \r
+# put the command \sideeffect (or @sideeffect) in the documentation, which \r
+# will result in a user-defined paragraph with heading "Side Effects:". \r
+# You can put \n's in the value part of an alias to insert newlines.\r
+\r
+ALIASES                = \r
+\r
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C \r
+# sources only. Doxygen will then generate output that is more tailored for C. \r
+# For instance, some of the names that are used will be different. The list \r
+# of all members will be omitted, etc.\r
+\r
+OPTIMIZE_OUTPUT_FOR_C  = YES\r
+\r
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java \r
+# sources only. Doxygen will then generate output that is more tailored for \r
+# Java. For instance, namespaces will be presented as packages, qualified \r
+# scopes will look different, etc.\r
+\r
+OPTIMIZE_OUTPUT_JAVA   = NO\r
+\r
+# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran \r
+# sources only. Doxygen will then generate output that is more tailored for \r
+# Fortran.\r
+\r
+OPTIMIZE_FOR_FORTRAN   = NO\r
+\r
+# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL \r
+# sources. Doxygen will then generate output that is tailored for \r
+# VHDL.\r
+\r
+OPTIMIZE_OUTPUT_VHDL   = NO\r
+\r
+# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want \r
+# to include (a tag file for) the STL sources as input, then you should \r
+# set this tag to YES in order to let doxygen match functions declarations and \r
+# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. \r
+# func(std::string) {}). This also make the inheritance and collaboration \r
+# diagrams that involve STL classes more complete and accurate.\r
+\r
+BUILTIN_STL_SUPPORT    = NO\r
+\r
+# If you use Microsoft's C++/CLI language, you should set this option to YES to\r
+# enable parsing support.\r
+\r
+CPP_CLI_SUPPORT        = NO\r
+\r
+# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. \r
+# Doxygen will parse them like normal C++ but will assume all classes use public \r
+# instead of private inheritance when no explicit protection keyword is present.\r
+\r
+SIP_SUPPORT            = NO\r
+\r
+# For Microsoft's IDL there are propget and propput attributes to indicate getter \r
+# and setter methods for a property. Setting this option to YES (the default) \r
+# will make doxygen to replace the get and set methods by a property in the \r
+# documentation. This will only work if the methods are indeed getting or \r
+# setting a simple type. If this is not the case, or you want to show the \r
+# methods anyway, you should set this option to NO.\r
+\r
+IDL_PROPERTY_SUPPORT   = YES\r
+\r
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC \r
+# tag is set to YES, then doxygen will reuse the documentation of the first \r
+# member in the group (if any) for the other members of the group. By default \r
+# all members of a group must be documented explicitly.\r
+\r
+DISTRIBUTE_GROUP_DOC   = NO\r
+\r
+# Set the SUBGROUPING tag to YES (the default) to allow class member groups of \r
+# the same type (for instance a group of public functions) to be put as a \r
+# subgroup of that type (e.g. under the Public Functions section). Set it to \r
+# NO to prevent subgrouping. Alternatively, this can be done per class using \r
+# the \nosubgrouping command.\r
+\r
+SUBGROUPING            = YES\r
+\r
+# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum \r
+# is documented as struct, union, or enum with the name of the typedef. So \r
+# typedef struct TypeS {} TypeT, will appear in the documentation as a struct \r
+# with name TypeT. When disabled the typedef will appear as a member of a file, \r
+# namespace, or class. And the struct will be named TypeS. This can typically \r
+# be useful for C code in case the coding convention dictates that all compound \r
+# types are typedef'ed and only the typedef is referenced, never the tag name.\r
+\r
+TYPEDEF_HIDES_STRUCT   = NO\r
+\r
+# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to \r
+# determine which symbols to keep in memory and which to flush to disk.\r
+# When the cache is full, less often used symbols will be written to disk.\r
+# For small to medium size projects (<1000 input files) the default value is \r
+# probably good enough. For larger projects a too small cache size can cause \r
+# doxygen to be busy swapping symbols to and from disk most of the time \r
+# causing a significant performance penality. \r
+# If the system has enough physical memory increasing the cache will improve the \r
+# performance by keeping more symbols in memory. Note that the value works on \r
+# a logarithmic scale so increasing the size by one will rougly double the \r
+# memory usage. The cache size is given by this formula: \r
+# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, \r
+# corresponding to a cache size of 2^16 = 65536 symbols\r
+\r
+SYMBOL_CACHE_SIZE      = 0\r
+\r
+#---------------------------------------------------------------------------\r
+# Build related configuration options\r
+#---------------------------------------------------------------------------\r
+\r
+# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in \r
+# documentation are documented, even if no documentation was available. \r
+# Private class members and static file members will be hidden unless \r
+# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES\r
+\r
+EXTRACT_ALL            = YES\r
+\r
+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class \r
+# will be included in the documentation.\r
+\r
+EXTRACT_PRIVATE        = YES\r
+\r
+# If the EXTRACT_STATIC tag is set to YES all static members of a file \r
+# will be included in the documentation.\r
+\r
+EXTRACT_STATIC         = YES\r
+\r
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) \r
+# defined locally in source files will be included in the documentation. \r
+# If set to NO only classes defined in header files are included.\r
+\r
+EXTRACT_LOCAL_CLASSES  = YES\r
+\r
+# This flag is only useful for Objective-C code. When set to YES local \r
+# methods, which are defined in the implementation section but not in \r
+# the interface are included in the documentation. \r
+# If set to NO (the default) only methods in the interface are included.\r
+\r
+EXTRACT_LOCAL_METHODS  = NO\r
+\r
+# If this flag is set to YES, the members of anonymous namespaces will be \r
+# extracted and appear in the documentation as a namespace called \r
+# 'anonymous_namespace{file}', where file will be replaced with the base \r
+# name of the file that contains the anonymous namespace. By default \r
+# anonymous namespace are hidden.\r
+\r
+EXTRACT_ANON_NSPACES   = NO\r
+\r
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all \r
+# undocumented members of documented classes, files or namespaces. \r
+# If set to NO (the default) these members will be included in the \r
+# various overviews, but no documentation section is generated. \r
+# This option has no effect if EXTRACT_ALL is enabled.\r
+\r
+HIDE_UNDOC_MEMBERS     = NO\r
+\r
+# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all \r
+# undocumented classes that are normally visible in the class hierarchy. \r
+# If set to NO (the default) these classes will be included in the various \r
+# overviews. This option has no effect if EXTRACT_ALL is enabled.\r
+\r
+HIDE_UNDOC_CLASSES     = NO\r
+\r
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all \r
+# friend (class|struct|union) declarations. \r
+# If set to NO (the default) these declarations will be included in the \r
+# documentation.\r
+\r
+HIDE_FRIEND_COMPOUNDS  = NO\r
+\r
+# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any \r
+# documentation blocks found inside the body of a function. \r
+# If set to NO (the default) these blocks will be appended to the \r
+# function's detailed documentation block.\r
+\r
+HIDE_IN_BODY_DOCS      = NO\r
+\r
+# The INTERNAL_DOCS tag determines if documentation \r
+# that is typed after a \internal command is included. If the tag is set \r
+# to NO (the default) then the documentation will be excluded. \r
+# Set it to YES to include the internal documentation.\r
+\r
+INTERNAL_DOCS          = NO\r
+\r
+# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate \r
+# file names in lower-case letters. If set to YES upper-case letters are also \r
+# allowed. This is useful if you have classes or files whose names only differ \r
+# in case and if your file system supports case sensitive file names. Windows \r
+# and Mac users are advised to set this option to NO.\r
+\r
+CASE_SENSE_NAMES       = NO\r
+\r
+# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen \r
+# will show members with their full class and namespace scopes in the \r
+# documentation. If set to YES the scope will be hidden.\r
+\r
+HIDE_SCOPE_NAMES       = NO\r
+\r
+# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen \r
+# will put a list of the files that are included by a file in the documentation \r
+# of that file.\r
+\r
+SHOW_INCLUDE_FILES     = YES\r
+\r
+# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] \r
+# is inserted in the documentation for inline members.\r
+\r
+INLINE_INFO            = YES\r
+\r
+# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen \r
+# will sort the (detailed) documentation of file and class members \r
+# alphabetically by member name. If set to NO the members will appear in \r
+# declaration order.\r
+\r
+SORT_MEMBER_DOCS       = YES\r
+\r
+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the \r
+# brief documentation of file, namespace and class members alphabetically \r
+# by member name. If set to NO (the default) the members will appear in \r
+# declaration order.\r
+\r
+SORT_BRIEF_DOCS        = NO\r
+\r
+# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the \r
+# hierarchy of group names into alphabetical order. If set to NO (the default) \r
+# the group names will appear in their defined order.\r
+\r
+SORT_GROUP_NAMES       = NO\r
+\r
+# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be \r
+# sorted by fully-qualified names, including namespaces. If set to \r
+# NO (the default), the class list will be sorted only by class name, \r
+# not including the namespace part. \r
+# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.\r
+# Note: This option applies only to the class list, not to the \r
+# alphabetical list.\r
+\r
+SORT_BY_SCOPE_NAME     = NO\r
+\r
+# The GENERATE_TODOLIST tag can be used to enable (YES) or \r
+# disable (NO) the todo list. This list is created by putting \todo \r
+# commands in the documentation.\r
+\r
+GENERATE_TODOLIST      = NO\r
+\r
+# The GENERATE_TESTLIST tag can be used to enable (YES) or \r
+# disable (NO) the test list. This list is created by putting \test \r
+# commands in the documentation.\r
+\r
+GENERATE_TESTLIST      = NO\r
+\r
+# The GENERATE_BUGLIST tag can be used to enable (YES) or \r
+# disable (NO) the bug list. This list is created by putting \bug \r
+# commands in the documentation.\r
+\r
+GENERATE_BUGLIST       = NO\r
+\r
+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or \r
+# disable (NO) the deprecated list. This list is created by putting \r
+# \deprecated commands in the documentation.\r
+\r
+GENERATE_DEPRECATEDLIST= YES\r
+\r
+# The ENABLED_SECTIONS tag can be used to enable conditional \r
+# documentation sections, marked by \if sectionname ... \endif.\r
+\r
+ENABLED_SECTIONS       = \r
+\r
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines \r
+# the initial value of a variable or define consists of for it to appear in \r
+# the documentation. If the initializer consists of more lines than specified \r
+# here it will be hidden. Use a value of 0 to hide initializers completely. \r
+# The appearance of the initializer of individual variables and defines in the \r
+# documentation can be controlled using \showinitializer or \hideinitializer \r
+# command in the documentation regardless of this setting.\r
+\r
+MAX_INITIALIZER_LINES  = 30\r
+\r
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated \r
+# at the bottom of the documentation of classes and structs. If set to YES the \r
+# list will mention the files that were used to generate the documentation.\r
+\r
+SHOW_USED_FILES        = YES\r
+\r
+# If the sources in your project are distributed over multiple directories \r
+# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy \r
+# in the documentation. The default is NO.\r
+\r
+SHOW_DIRECTORIES       = YES\r
+\r
+# Set the SHOW_FILES tag to NO to disable the generation of the Files page.\r
+# This will remove the Files entry from the Quick Index and from the \r
+# Folder Tree View (if specified). The default is YES.\r
+\r
+SHOW_FILES             = YES\r
+\r
+# Set the SHOW_NAMESPACES tag to NO to disable the generation of the \r
+# Namespaces page.  This will remove the Namespaces entry from the Quick Index\r
+# and from the Folder Tree View (if specified). The default is YES.\r
+\r
+SHOW_NAMESPACES        = YES\r
+\r
+# The FILE_VERSION_FILTER tag can be used to specify a program or script that \r
+# doxygen should invoke to get the current version for each file (typically from \r
+# the version control system). Doxygen will invoke the program by executing (via \r
+# popen()) the command <command> <input-file>, where <command> is the value of \r
+# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file \r
+# provided by doxygen. Whatever the program writes to standard output \r
+# is used as the file version. See the manual for examples.\r
+\r
+FILE_VERSION_FILTER    = \r
+\r
+# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by \r
+# doxygen. The layout file controls the global structure of the generated output files \r
+# in an output format independent way. The create the layout file that represents \r
+# doxygen's defaults, run doxygen with the -l option. You can optionally specify a \r
+# file name after the option, if omitted DoxygenLayout.xml will be used as the name \r
+# of the layout file.\r
+\r
+LAYOUT_FILE            = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to warning and progress messages\r
+#---------------------------------------------------------------------------\r
+\r
+# The QUIET tag can be used to turn on/off the messages that are generated \r
+# by doxygen. Possible values are YES and NO. If left blank NO is used.\r
+\r
+QUIET                  = YES\r
+\r
+# The WARNINGS tag can be used to turn on/off the warning messages that are \r
+# generated by doxygen. Possible values are YES and NO. If left blank \r
+# NO is used.\r
+\r
+WARNINGS               = YES\r
+\r
+# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings \r
+# for undocumented members. If EXTRACT_ALL is set to YES then this flag will \r
+# automatically be disabled.\r
+\r
+WARN_IF_UNDOCUMENTED   = YES\r
+\r
+# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for \r
+# potential errors in the documentation, such as not documenting some \r
+# parameters in a documented function, or documenting parameters that \r
+# don't exist or using markup commands wrongly.\r
+\r
+WARN_IF_DOC_ERROR      = YES\r
+\r
+# This WARN_NO_PARAMDOC option can be abled to get warnings for \r
+# functions that are documented, but have no documentation for their parameters \r
+# or return value. If set to NO (the default) doxygen will only warn about \r
+# wrong or incomplete parameter documentation, but not about the absence of \r
+# documentation.\r
+\r
+WARN_NO_PARAMDOC       = YES\r
+\r
+# The WARN_FORMAT tag determines the format of the warning messages that \r
+# doxygen can produce. The string should contain the $file, $line, and $text \r
+# tags, which will be replaced by the file and line number from which the \r
+# warning originated and the warning text. Optionally the format may contain \r
+# $version, which will be replaced by the version of the file (if it could \r
+# be obtained via FILE_VERSION_FILTER)\r
+\r
+WARN_FORMAT            = "$file:$line: $text"\r
+\r
+# The WARN_LOGFILE tag can be used to specify a file to which warning \r
+# and error messages should be written. If left blank the output is written \r
+# to stderr.\r
+\r
+WARN_LOGFILE           = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the input files\r
+#---------------------------------------------------------------------------\r
+\r
+# The INPUT tag can be used to specify the files and/or directories that contain \r
+# documented source files. You may enter file names like "myfile.cpp" or \r
+# directories like "/usr/src/myproject". Separate the files or directories \r
+# with spaces.\r
+\r
+INPUT                  = ./\r
+\r
+# This tag can be used to specify the character encoding of the source files \r
+# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is \r
+# also the default input encoding. Doxygen uses libiconv (or the iconv built \r
+# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for \r
+# the list of possible encodings.\r
+\r
+INPUT_ENCODING         = UTF-8\r
+\r
+# If the value of the INPUT tag contains directories, you can use the \r
+# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \r
+# and *.h) to filter out the source-files in the directories. If left \r
+# blank the following patterns are tested: \r
+# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx \r
+# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90\r
+\r
+FILE_PATTERNS          = *.h \\r
+                         *.c \\r
+                                                *.txt\r
+\r
+# The RECURSIVE tag can be used to turn specify whether or not subdirectories \r
+# should be searched for input files as well. Possible values are YES and NO. \r
+# If left blank NO is used.\r
+\r
+RECURSIVE              = YES\r
+\r
+# The EXCLUDE tag can be used to specify files and/or directories that should \r
+# excluded from the INPUT source files. This way you can easily exclude a \r
+# subdirectory from a directory tree whose root is specified with the INPUT tag.\r
+\r
+EXCLUDE                = \r
+\r
+# The EXCLUDE_SYMLINKS tag can be used select whether or not files or \r
+# directories that are symbolic links (a Unix filesystem feature) are excluded \r
+# from the input.\r
+\r
+EXCLUDE_SYMLINKS       = NO\r
+\r
+# If the value of the INPUT tag contains directories, you can use the \r
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude \r
+# certain files from those directories. Note that the wildcards are matched \r
+# against the file with absolute path, so to exclude all test directories \r
+# for example use the pattern */test/*\r
+\r
+EXCLUDE_PATTERNS       = */LowLevel/USBMode.h\r
+\r
+# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names \r
+# (namespaces, classes, functions, etc.) that should be excluded from the \r
+# output. The symbol name can be a fully qualified name, a word, or if the \r
+# wildcard * is used, a substring. Examples: ANamespace, AClass, \r
+# AClass::ANamespace, ANamespace::*Test\r
+\r
+EXCLUDE_SYMBOLS        = __*\r
+\r
+# The EXAMPLE_PATH tag can be used to specify one or more files or \r
+# directories that contain example code fragments that are included (see \r
+# the \include command).\r
+\r
+EXAMPLE_PATH           = \r
+\r
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the \r
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \r
+# and *.h) to filter out the source-files in the directories. If left \r
+# blank all files are included.\r
+\r
+EXAMPLE_PATTERNS       = *\r
+\r
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be \r
+# searched for input files to be used with the \include or \dontinclude \r
+# commands irrespective of the value of the RECURSIVE tag. \r
+# Possible values are YES and NO. If left blank NO is used.\r
+\r
+EXAMPLE_RECURSIVE      = NO\r
+\r
+# The IMAGE_PATH tag can be used to specify one or more files or \r
+# directories that contain image that are included in the documentation (see \r
+# the \image command).\r
+\r
+IMAGE_PATH             = \r
+\r
+# The INPUT_FILTER tag can be used to specify a program that doxygen should \r
+# invoke to filter for each input file. Doxygen will invoke the filter program \r
+# by executing (via popen()) the command <filter> <input-file>, where <filter> \r
+# is the value of the INPUT_FILTER tag, and <input-file> is the name of an \r
+# input file. Doxygen will then use the output that the filter program writes \r
+# to standard output.  If FILTER_PATTERNS is specified, this tag will be \r
+# ignored.\r
+\r
+INPUT_FILTER           = \r
+\r
+# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern \r
+# basis.  Doxygen will compare the file name with each pattern and apply the \r
+# filter if there is a match.  The filters are a list of the form: \r
+# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further \r
+# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER \r
+# is applied to all files.\r
+\r
+FILTER_PATTERNS        = \r
+\r
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using \r
+# INPUT_FILTER) will be used to filter the input files when producing source \r
+# files to browse (i.e. when SOURCE_BROWSER is set to YES).\r
+\r
+FILTER_SOURCE_FILES    = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to source browsing\r
+#---------------------------------------------------------------------------\r
+\r
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will \r
+# be generated. Documented entities will be cross-referenced with these sources. \r
+# Note: To get rid of all source code in the generated output, make sure also \r
+# VERBATIM_HEADERS is set to NO.\r
+\r
+SOURCE_BROWSER         = NO\r
+\r
+# Setting the INLINE_SOURCES tag to YES will include the body \r
+# of functions and classes directly in the documentation.\r
+\r
+INLINE_SOURCES         = NO\r
+\r
+# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct \r
+# doxygen to hide any special comment blocks from generated source code \r
+# fragments. Normal C and C++ comments will always remain visible.\r
+\r
+STRIP_CODE_COMMENTS    = YES\r
+\r
+# If the REFERENCED_BY_RELATION tag is set to YES \r
+# then for each documented function all documented \r
+# functions referencing it will be listed.\r
+\r
+REFERENCED_BY_RELATION = NO\r
+\r
+# If the REFERENCES_RELATION tag is set to YES \r
+# then for each documented function all documented entities \r
+# called/used by that function will be listed.\r
+\r
+REFERENCES_RELATION    = NO\r
+\r
+# If the REFERENCES_LINK_SOURCE tag is set to YES (the default)\r
+# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from\r
+# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will\r
+# link to the source code.  Otherwise they will link to the documentstion.\r
+\r
+REFERENCES_LINK_SOURCE = NO\r
+\r
+# If the USE_HTAGS tag is set to YES then the references to source code \r
+# will point to the HTML generated by the htags(1) tool instead of doxygen \r
+# built-in source browser. The htags tool is part of GNU's global source \r
+# tagging system (see http://www.gnu.org/software/global/global.html). You \r
+# will need version 4.8.6 or higher.\r
+\r
+USE_HTAGS              = NO\r
+\r
+# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen \r
+# will generate a verbatim copy of the header file for each class for \r
+# which an include is specified. Set to NO to disable this.\r
+\r
+VERBATIM_HEADERS       = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the alphabetical class index\r
+#---------------------------------------------------------------------------\r
+\r
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index \r
+# of all compounds will be generated. Enable this if the project \r
+# contains a lot of classes, structs, unions or interfaces.\r
+\r
+ALPHABETICAL_INDEX     = YES\r
+\r
+# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then \r
+# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns \r
+# in which this list will be split (can be a number in the range [1..20])\r
+\r
+COLS_IN_ALPHA_INDEX    = 5\r
+\r
+# In case all classes in a project start with a common prefix, all \r
+# classes will be put under the same header in the alphabetical index. \r
+# The IGNORE_PREFIX tag can be used to specify one or more prefixes that \r
+# should be ignored while generating the index headers.\r
+\r
+IGNORE_PREFIX          = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the HTML output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_HTML tag is set to YES (the default) Doxygen will \r
+# generate HTML output.\r
+\r
+GENERATE_HTML          = YES\r
+\r
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `html' will be used as the default path.\r
+\r
+HTML_OUTPUT            = html\r
+\r
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for \r
+# each generated HTML page (for example: .htm,.php,.asp). If it is left blank \r
+# doxygen will generate files with .html extension.\r
+\r
+HTML_FILE_EXTENSION    = .html\r
+\r
+# The HTML_HEADER tag can be used to specify a personal HTML header for \r
+# each generated HTML page. If it is left blank doxygen will generate a \r
+# standard header.\r
+\r
+HTML_HEADER            = \r
+\r
+# The HTML_FOOTER tag can be used to specify a personal HTML footer for \r
+# each generated HTML page. If it is left blank doxygen will generate a \r
+# standard footer.\r
+\r
+HTML_FOOTER            = \r
+\r
+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading \r
+# style sheet that is used by each HTML page. It can be used to \r
+# fine-tune the look of the HTML output. If the tag is left blank doxygen \r
+# will generate a default style sheet. Note that doxygen will try to copy \r
+# the style sheet file to the HTML output directory, so don't put your own \r
+# stylesheet in the HTML output directory as well, or it will be erased!\r
+\r
+HTML_STYLESHEET        = \r
+\r
+# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, \r
+# files or namespaces will be aligned in HTML using tables. If set to \r
+# NO a bullet list will be used.\r
+\r
+HTML_ALIGN_MEMBERS     = YES\r
+\r
+# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML \r
+# documentation will contain sections that can be hidden and shown after the \r
+# page has loaded. For this to work a browser that supports \r
+# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox \r
+# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari).\r
+\r
+HTML_DYNAMIC_SECTIONS  = YES\r
+\r
+# If the GENERATE_DOCSET tag is set to YES, additional index files \r
+# will be generated that can be used as input for Apple's Xcode 3 \r
+# integrated development environment, introduced with OSX 10.5 (Leopard). \r
+# To create a documentation set, doxygen will generate a Makefile in the \r
+# HTML output directory. Running make will produce the docset in that \r
+# directory and running "make install" will install the docset in \r
+# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find \r
+# it at startup. \r
+# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information.\r
+\r
+GENERATE_DOCSET        = NO\r
+\r
+# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the \r
+# feed. A documentation feed provides an umbrella under which multiple \r
+# documentation sets from a single provider (such as a company or product suite) \r
+# can be grouped.\r
+\r
+DOCSET_FEEDNAME        = "Doxygen generated docs"\r
+\r
+# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that \r
+# should uniquely identify the documentation set bundle. This should be a \r
+# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen \r
+# will append .docset to the name.\r
+\r
+DOCSET_BUNDLE_ID       = org.doxygen.Project\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, additional index files \r
+# will be generated that can be used as input for tools like the \r
+# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) \r
+# of the generated HTML documentation.\r
+\r
+GENERATE_HTMLHELP      = NO\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can \r
+# be used to specify the file name of the resulting .chm file. You \r
+# can add a path in front of the file if the result should not be \r
+# written to the html output directory.\r
+\r
+CHM_FILE               = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can \r
+# be used to specify the location (absolute path including file name) of \r
+# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run \r
+# the HTML help compiler on the generated index.hhp.\r
+\r
+HHC_LOCATION           = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag \r
+# controls if a separate .chi index file is generated (YES) or that \r
+# it should be included in the master .chm file (NO).\r
+\r
+GENERATE_CHI           = NO\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING\r
+# is used to encode HtmlHelp index (hhk), content (hhc) and project file\r
+# content.\r
+\r
+CHM_INDEX_ENCODING     = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag \r
+# controls whether a binary table of contents is generated (YES) or a \r
+# normal table of contents (NO) in the .chm file.\r
+\r
+BINARY_TOC             = NO\r
+\r
+# The TOC_EXPAND flag can be set to YES to add extra items for group members \r
+# to the contents of the HTML help documentation and to the tree view.\r
+\r
+TOC_EXPAND             = YES\r
+\r
+# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER \r
+# are set, an additional index file will be generated that can be used as input for \r
+# Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated \r
+# HTML documentation.\r
+\r
+GENERATE_QHP           = NO\r
+\r
+# If the QHG_LOCATION tag is specified, the QCH_FILE tag can \r
+# be used to specify the file name of the resulting .qch file. \r
+# The path specified is relative to the HTML output folder.\r
+\r
+QCH_FILE               = \r
+\r
+# The QHP_NAMESPACE tag specifies the namespace to use when generating \r
+# Qt Help Project output. For more information please see \r
+# <a href="http://doc.trolltech.com/qthelpproject.html#namespace">Qt Help Project / Namespace</a>.\r
+\r
+QHP_NAMESPACE          = org.doxygen.Project\r
+\r
+# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating \r
+# Qt Help Project output. For more information please see \r
+# <a href="http://doc.trolltech.com/qthelpproject.html#virtual-folders">Qt Help Project / Virtual Folders</a>.\r
+\r
+QHP_VIRTUAL_FOLDER     = doc\r
+\r
+# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can \r
+# be used to specify the location of Qt's qhelpgenerator. \r
+# If non-empty doxygen will try to run qhelpgenerator on the generated \r
+# .qhp file .\r
+\r
+QHG_LOCATION           = \r
+\r
+# The DISABLE_INDEX tag can be used to turn on/off the condensed index at \r
+# top of each HTML page. The value NO (the default) enables the index and \r
+# the value YES disables it.\r
+\r
+DISABLE_INDEX          = NO\r
+\r
+# This tag can be used to set the number of enum values (range [1..20]) \r
+# that doxygen will group on one line in the generated HTML documentation.\r
+\r
+ENUM_VALUES_PER_LINE   = 1\r
+\r
+# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index\r
+# structure should be generated to display hierarchical information.\r
+# If the tag value is set to FRAME, a side panel will be generated\r
+# containing a tree-like index structure (just like the one that \r
+# is generated for HTML Help). For this to work a browser that supports \r
+# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, \r
+# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are \r
+# probably better off using the HTML help feature. Other possible values \r
+# for this tag are: HIERARCHIES, which will generate the Groups, Directories,\r
+# and Class Hierarchy pages using a tree view instead of an ordered list;\r
+# ALL, which combines the behavior of FRAME and HIERARCHIES; and NONE, which\r
+# disables this behavior completely. For backwards compatibility with previous\r
+# releases of Doxygen, the values YES and NO are equivalent to FRAME and NONE\r
+# respectively.\r
+\r
+GENERATE_TREEVIEW      = YES\r
+\r
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be \r
+# used to set the initial width (in pixels) of the frame in which the tree \r
+# is shown.\r
+\r
+TREEVIEW_WIDTH         = 250\r
+\r
+# Use this tag to change the font size of Latex formulas included \r
+# as images in the HTML documentation. The default is 10. Note that \r
+# when you change the font size after a successful doxygen run you need \r
+# to manually remove any form_*.png images from the HTML output directory \r
+# to force them to be regenerated.\r
+\r
+FORMULA_FONTSIZE       = 10\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the LaTeX output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will \r
+# generate Latex output.\r
+\r
+GENERATE_LATEX         = NO\r
+\r
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `latex' will be used as the default path.\r
+\r
+LATEX_OUTPUT           = latex\r
+\r
+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be \r
+# invoked. If left blank `latex' will be used as the default command name.\r
+\r
+LATEX_CMD_NAME         = latex\r
+\r
+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to \r
+# generate index for LaTeX. If left blank `makeindex' will be used as the \r
+# default command name.\r
+\r
+MAKEINDEX_CMD_NAME     = makeindex\r
+\r
+# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact \r
+# LaTeX documents. This may be useful for small projects and may help to \r
+# save some trees in general.\r
+\r
+COMPACT_LATEX          = NO\r
+\r
+# The PAPER_TYPE tag can be used to set the paper type that is used \r
+# by the printer. Possible values are: a4, a4wide, letter, legal and \r
+# executive. If left blank a4wide will be used.\r
+\r
+PAPER_TYPE             = a4wide\r
+\r
+# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX \r
+# packages that should be included in the LaTeX output.\r
+\r
+EXTRA_PACKAGES         = \r
+\r
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for \r
+# the generated latex document. The header should contain everything until \r
+# the first chapter. If it is left blank doxygen will generate a \r
+# standard header. Notice: only use this tag if you know what you are doing!\r
+\r
+LATEX_HEADER           = \r
+\r
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated \r
+# is prepared for conversion to pdf (using ps2pdf). The pdf file will \r
+# contain links (just like the HTML output) instead of page references \r
+# This makes the output suitable for online browsing using a pdf viewer.\r
+\r
+PDF_HYPERLINKS         = YES\r
+\r
+# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of \r
+# plain latex in the generated Makefile. Set this option to YES to get a \r
+# higher quality PDF documentation.\r
+\r
+USE_PDFLATEX           = YES\r
+\r
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. \r
+# command to the generated LaTeX files. This will instruct LaTeX to keep \r
+# running if errors occur, instead of asking the user for help. \r
+# This option is also used when generating formulas in HTML.\r
+\r
+LATEX_BATCHMODE        = NO\r
+\r
+# If LATEX_HIDE_INDICES is set to YES then doxygen will not \r
+# include the index chapters (such as File Index, Compound Index, etc.) \r
+# in the output.\r
+\r
+LATEX_HIDE_INDICES     = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the RTF output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output \r
+# The RTF output is optimized for Word 97 and may not look very pretty with \r
+# other RTF readers or editors.\r
+\r
+GENERATE_RTF           = NO\r
+\r
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `rtf' will be used as the default path.\r
+\r
+RTF_OUTPUT             = rtf\r
+\r
+# If the COMPACT_RTF tag is set to YES Doxygen generates more compact \r
+# RTF documents. This may be useful for small projects and may help to \r
+# save some trees in general.\r
+\r
+COMPACT_RTF            = NO\r
+\r
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated \r
+# will contain hyperlink fields. The RTF file will \r
+# contain links (just like the HTML output) instead of page references. \r
+# This makes the output suitable for online browsing using WORD or other \r
+# programs which support those fields. \r
+# Note: wordpad (write) and others do not support links.\r
+\r
+RTF_HYPERLINKS         = NO\r
+\r
+# Load stylesheet definitions from file. Syntax is similar to doxygen's \r
+# config file, i.e. a series of assignments. You only have to provide \r
+# replacements, missing definitions are set to their default value.\r
+\r
+RTF_STYLESHEET_FILE    = \r
+\r
+# Set optional variables used in the generation of an rtf document. \r
+# Syntax is similar to doxygen's config file.\r
+\r
+RTF_EXTENSIONS_FILE    = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the man page output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_MAN tag is set to YES (the default) Doxygen will \r
+# generate man pages\r
+\r
+GENERATE_MAN           = NO\r
+\r
+# The MAN_OUTPUT tag is used to specify where the man pages will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `man' will be used as the default path.\r
+\r
+MAN_OUTPUT             = man\r
+\r
+# The MAN_EXTENSION tag determines the extension that is added to \r
+# the generated man pages (default is the subroutine's section .3)\r
+\r
+MAN_EXTENSION          = .3\r
+\r
+# If the MAN_LINKS tag is set to YES and Doxygen generates man output, \r
+# then it will generate one additional man file for each entity \r
+# documented in the real man page(s). These additional files \r
+# only source the real man page, but without them the man command \r
+# would be unable to find the correct page. The default is NO.\r
+\r
+MAN_LINKS              = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the XML output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_XML tag is set to YES Doxygen will \r
+# generate an XML file that captures the structure of \r
+# the code including all documentation.\r
+\r
+GENERATE_XML           = NO\r
+\r
+# The XML_OUTPUT tag is used to specify where the XML pages will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `xml' will be used as the default path.\r
+\r
+XML_OUTPUT             = xml\r
+\r
+# The XML_SCHEMA tag can be used to specify an XML schema, \r
+# which can be used by a validating XML parser to check the \r
+# syntax of the XML files.\r
+\r
+XML_SCHEMA             = \r
+\r
+# The XML_DTD tag can be used to specify an XML DTD, \r
+# which can be used by a validating XML parser to check the \r
+# syntax of the XML files.\r
+\r
+XML_DTD                = \r
+\r
+# If the XML_PROGRAMLISTING tag is set to YES Doxygen will \r
+# dump the program listings (including syntax highlighting \r
+# and cross-referencing information) to the XML output. Note that \r
+# enabling this will significantly increase the size of the XML output.\r
+\r
+XML_PROGRAMLISTING     = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options for the AutoGen Definitions output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will \r
+# generate an AutoGen Definitions (see autogen.sf.net) file \r
+# that captures the structure of the code including all \r
+# documentation. Note that this feature is still experimental \r
+# and incomplete at the moment.\r
+\r
+GENERATE_AUTOGEN_DEF   = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the Perl module output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_PERLMOD tag is set to YES Doxygen will \r
+# generate a Perl module file that captures the structure of \r
+# the code including all documentation. Note that this \r
+# feature is still experimental and incomplete at the \r
+# moment.\r
+\r
+GENERATE_PERLMOD       = NO\r
+\r
+# If the PERLMOD_LATEX tag is set to YES Doxygen will generate \r
+# the necessary Makefile rules, Perl scripts and LaTeX code to be able \r
+# to generate PDF and DVI output from the Perl module output.\r
+\r
+PERLMOD_LATEX          = NO\r
+\r
+# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be \r
+# nicely formatted so it can be parsed by a human reader.  This is useful \r
+# if you want to understand what is going on.  On the other hand, if this \r
+# tag is set to NO the size of the Perl module output will be much smaller \r
+# and Perl will parse it just the same.\r
+\r
+PERLMOD_PRETTY         = YES\r
+\r
+# The names of the make variables in the generated doxyrules.make file \r
+# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. \r
+# This is useful so different doxyrules.make files included by the same \r
+# Makefile don't overwrite each other's variables.\r
+\r
+PERLMOD_MAKEVAR_PREFIX = \r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration options related to the preprocessor   \r
+#---------------------------------------------------------------------------\r
+\r
+# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will \r
+# evaluate all C-preprocessor directives found in the sources and include \r
+# files.\r
+\r
+ENABLE_PREPROCESSING   = YES\r
+\r
+# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro \r
+# names in the source code. If set to NO (the default) only conditional \r
+# compilation will be performed. Macro expansion can be done in a controlled \r
+# way by setting EXPAND_ONLY_PREDEF to YES.\r
+\r
+MACRO_EXPANSION        = YES\r
+\r
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES \r
+# then the macro expansion is limited to the macros specified with the \r
+# PREDEFINED and EXPAND_AS_DEFINED tags.\r
+\r
+EXPAND_ONLY_PREDEF     = YES\r
+\r
+# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files \r
+# in the INCLUDE_PATH (see below) will be search if a #include is found.\r
+\r
+SEARCH_INCLUDES        = YES\r
+\r
+# The INCLUDE_PATH tag can be used to specify one or more directories that \r
+# contain include files that are not input files but should be processed by \r
+# the preprocessor.\r
+\r
+INCLUDE_PATH           = \r
+\r
+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard \r
+# patterns (like *.h and *.hpp) to filter out the header-files in the \r
+# directories. If left blank, the patterns specified with FILE_PATTERNS will \r
+# be used.\r
+\r
+INCLUDE_FILE_PATTERNS  = \r
+\r
+# The PREDEFINED tag can be used to specify one or more macro names that \r
+# are defined before the preprocessor is started (similar to the -D option of \r
+# gcc). The argument of the tag is a list of macros of the form: name \r
+# or name=definition (no spaces). If the definition and the = are \r
+# omitted =1 is assumed. To prevent a macro definition from being \r
+# undefined via #undef or recursively expanded use the := operator \r
+# instead of the = operator.\r
+\r
+PREDEFINED             = __DOXYGEN__\r
+\r
+# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then \r
+# this tag can be used to specify a list of macro names that should be expanded. \r
+# The macro definition that is found in the sources will be used. \r
+# Use the PREDEFINED tag if you want to use a different macro definition.\r
+\r
+EXPAND_AS_DEFINED      = BUTTLOADTAG\r
+\r
+# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then \r
+# doxygen's preprocessor will remove all function-like macros that are alone \r
+# on a line, have an all uppercase name, and do not end with a semicolon. Such \r
+# function macros are typically used for boiler-plate code, and will confuse \r
+# the parser if not removed.\r
+\r
+SKIP_FUNCTION_MACROS   = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration::additions related to external references   \r
+#---------------------------------------------------------------------------\r
+\r
+# The TAGFILES option can be used to specify one or more tagfiles. \r
+# Optionally an initial location of the external documentation \r
+# can be added for each tagfile. The format of a tag file without \r
+# this location is as follows: \r
+#   TAGFILES = file1 file2 ... \r
+# Adding location for the tag files is done as follows: \r
+#   TAGFILES = file1=loc1 "file2 = loc2" ... \r
+# where "loc1" and "loc2" can be relative or absolute paths or \r
+# URLs. If a location is present for each tag, the installdox tool \r
+# does not have to be run to correct the links.\r
+# Note that each tag file must have a unique name\r
+# (where the name does NOT include the path)\r
+# If a tag file is not located in the directory in which doxygen \r
+# is run, you must also specify the path to the tagfile here.\r
+\r
+TAGFILES               = \r
+\r
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create \r
+# a tag file that is based on the input files it reads.\r
+\r
+GENERATE_TAGFILE       = \r
+\r
+# If the ALLEXTERNALS tag is set to YES all external classes will be listed \r
+# in the class index. If set to NO only the inherited external classes \r
+# will be listed.\r
+\r
+ALLEXTERNALS           = NO\r
+\r
+# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed \r
+# in the modules index. If set to NO, only the current project's groups will \r
+# be listed.\r
+\r
+EXTERNAL_GROUPS        = YES\r
+\r
+# The PERL_PATH should be the absolute path and name of the perl script \r
+# interpreter (i.e. the result of `which perl').\r
+\r
+PERL_PATH              = /usr/bin/perl\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration options related to the dot tool   \r
+#---------------------------------------------------------------------------\r
+\r
+# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will \r
+# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base \r
+# or super classes. Setting the tag to NO turns the diagrams off. Note that \r
+# this option is superseded by the HAVE_DOT option below. This is only a \r
+# fallback. It is recommended to install and use dot, since it yields more \r
+# powerful graphs.\r
+\r
+CLASS_DIAGRAMS         = NO\r
+\r
+# You can define message sequence charts within doxygen comments using the \msc \r
+# command. Doxygen will then run the mscgen tool (see \r
+# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the \r
+# documentation. The MSCGEN_PATH tag allows you to specify the directory where \r
+# the mscgen tool resides. If left empty the tool is assumed to be found in the \r
+# default search path.\r
+\r
+MSCGEN_PATH            = \r
+\r
+# If set to YES, the inheritance and collaboration graphs will hide \r
+# inheritance and usage relations if the target is undocumented \r
+# or is not a class.\r
+\r
+HIDE_UNDOC_RELATIONS   = YES\r
+\r
+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is \r
+# available from the path. This tool is part of Graphviz, a graph visualization \r
+# toolkit from AT&T and Lucent Bell Labs. The other options in this section \r
+# have no effect if this option is set to NO (the default)\r
+\r
+HAVE_DOT               = NO\r
+\r
+# By default doxygen will write a font called FreeSans.ttf to the output \r
+# directory and reference it in all dot files that doxygen generates. This \r
+# font does not include all possible unicode characters however, so when you need \r
+# these (or just want a differently looking font) you can specify the font name \r
+# using DOT_FONTNAME. You need need to make sure dot is able to find the font, \r
+# which can be done by putting it in a standard location or by setting the \r
+# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory \r
+# containing the font.\r
+\r
+DOT_FONTNAME           = FreeSans\r
+\r
+# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. \r
+# The default size is 10pt.\r
+\r
+DOT_FONTSIZE           = 10\r
+\r
+# By default doxygen will tell dot to use the output directory to look for the \r
+# FreeSans.ttf font (which doxygen will put there itself). If you specify a \r
+# different font using DOT_FONTNAME you can set the path where dot \r
+# can find it using this tag.\r
+\r
+DOT_FONTPATH           = \r
+\r
+# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for each documented class showing the direct and \r
+# indirect inheritance relations. Setting this tag to YES will force the \r
+# the CLASS_DIAGRAMS tag to NO.\r
+\r
+CLASS_GRAPH            = NO\r
+\r
+# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for each documented class showing the direct and \r
+# indirect implementation dependencies (inheritance, containment, and \r
+# class references variables) of the class with other documented classes.\r
+\r
+COLLABORATION_GRAPH    = NO\r
+\r
+# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for groups, showing the direct groups dependencies\r
+\r
+GROUP_GRAPHS           = NO\r
+\r
+# If the UML_LOOK tag is set to YES doxygen will generate inheritance and \r
+# collaboration diagrams in a style similar to the OMG's Unified Modeling \r
+# Language.\r
+\r
+UML_LOOK               = NO\r
+\r
+# If set to YES, the inheritance and collaboration graphs will show the \r
+# relations between templates and their instances.\r
+\r
+TEMPLATE_RELATIONS     = NO\r
+\r
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT \r
+# tags are set to YES then doxygen will generate a graph for each documented \r
+# file showing the direct and indirect include dependencies of the file with \r
+# other documented files.\r
+\r
+INCLUDE_GRAPH          = NO\r
+\r
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and \r
+# HAVE_DOT tags are set to YES then doxygen will generate a graph for each \r
+# documented header file showing the documented files that directly or \r
+# indirectly include this file.\r
+\r
+INCLUDED_BY_GRAPH      = NO\r
+\r
+# If the CALL_GRAPH and HAVE_DOT options are set to YES then \r
+# doxygen will generate a call dependency graph for every global function \r
+# or class method. Note that enabling this option will significantly increase \r
+# the time of a run. So in most cases it will be better to enable call graphs \r
+# for selected functions only using the \callgraph command.\r
+\r
+CALL_GRAPH             = NO\r
+\r
+# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then \r
+# doxygen will generate a caller dependency graph for every global function \r
+# or class method. Note that enabling this option will significantly increase \r
+# the time of a run. So in most cases it will be better to enable caller \r
+# graphs for selected functions only using the \callergraph command.\r
+\r
+CALLER_GRAPH           = NO\r
+\r
+# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen \r
+# will graphical hierarchy of all classes instead of a textual one.\r
+\r
+GRAPHICAL_HIERARCHY    = NO\r
+\r
+# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES \r
+# then doxygen will show the dependencies a directory has on other directories \r
+# in a graphical way. The dependency relations are determined by the #include\r
+# relations between the files in the directories.\r
+\r
+DIRECTORY_GRAPH        = NO\r
+\r
+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images \r
+# generated by dot. Possible values are png, jpg, or gif\r
+# If left blank png will be used.\r
+\r
+DOT_IMAGE_FORMAT       = png\r
+\r
+# The tag DOT_PATH can be used to specify the path where the dot tool can be \r
+# found. If left blank, it is assumed the dot tool can be found in the path.\r
+\r
+DOT_PATH               = "C:/Program Files/Graphviz2.18/bin"\r
+\r
+# The DOTFILE_DIRS tag can be used to specify one or more directories that \r
+# contain dot files that are included in the documentation (see the \r
+# \dotfile command).\r
+\r
+DOTFILE_DIRS           = \r
+\r
+# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of \r
+# nodes that will be shown in the graph. If the number of nodes in a graph \r
+# becomes larger than this value, doxygen will truncate the graph, which is \r
+# visualized by representing a node as a red box. Note that doxygen if the \r
+# number of direct children of the root node in a graph is already larger than \r
+# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note \r
+# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.\r
+\r
+DOT_GRAPH_MAX_NODES    = 15\r
+\r
+# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the \r
+# graphs generated by dot. A depth value of 3 means that only nodes reachable \r
+# from the root by following a path via at most 3 edges will be shown. Nodes \r
+# that lay further from the root node will be omitted. Note that setting this \r
+# option to 1 or 2 may greatly reduce the computation time needed for large \r
+# code bases. Also note that the size of a graph can be further restricted by \r
+# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.\r
+\r
+MAX_DOT_GRAPH_DEPTH    = 2\r
+\r
+# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent \r
+# background. This is disabled by default, because dot on Windows does not \r
+# seem to support this out of the box. Warning: Depending on the platform used, \r
+# enabling this option may lead to badly anti-aliased labels on the edges of \r
+# a graph (i.e. they become hard to read).\r
+\r
+DOT_TRANSPARENT        = YES\r
+\r
+# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output \r
+# files in one run (i.e. multiple -o and -T options on the command line). This \r
+# makes dot run faster, but since only newer versions of dot (>1.8.10) \r
+# support this, this feature is disabled by default.\r
+\r
+DOT_MULTI_TARGETS      = NO\r
+\r
+# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will \r
+# generate a legend page explaining the meaning of the various boxes and \r
+# arrows in the dot generated graphs.\r
+\r
+GENERATE_LEGEND        = YES\r
+\r
+# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will \r
+# remove the intermediate dot files that are used to generate \r
+# the various graphs.\r
+\r
+DOT_CLEANUP            = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration::additions related to the search engine   \r
+#---------------------------------------------------------------------------\r
+\r
+# The SEARCHENGINE tag specifies whether or not a search engine should be \r
+# used. If set to NO the values of all tags below this one will be ignored.\r
+\r
+SEARCHENGINE           = NO\r
diff --git a/Demos/Device/LowLevel/MassStorage/Lib/DataflashManager.c b/Demos/Device/LowLevel/MassStorage/Lib/DataflashManager.c
new file mode 100644 (file)
index 0000000..4b62419
--- /dev/null
@@ -0,0 +1,477 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  Functions to manage the physical dataflash media, including reading and writing of\r
+ *  blocks of data. These functions are called by the SCSI layer when data must be stored\r
+ *  or retrieved to/from the physical storage media. If a different media is used (such\r
+ *  as a SD card or EEPROM), functions similar to these will need to be generated.\r
+ */\r
+\r
+#define  INCLUDE_FROM_DATAFLASHMANAGER_C\r
+#include "DataflashManager.h"\r
+\r
+/** Writes blocks (OS blocks, not Dataflash pages) to the storage medium, the board dataflash IC(s), from\r
+ *  the pre-selected data OUT endpoint. This routine reads in OS sized blocks from the endpoint and writes\r
+ *  them to the dataflash in Dataflash page sized blocks.\r
+ *\r
+ *  \param BlockAddress  Data block starting address for the write sequence\r
+ *  \param TotalBlocks   Number of blocks of data to write\r
+ */\r
+void DataflashManager_WriteBlocks(const uint32_t BlockAddress, uint16_t TotalBlocks)\r
+{\r
+       uint16_t CurrDFPage          = ((BlockAddress * VIRTUAL_MEMORY_BLOCK_SIZE) / DATAFLASH_PAGE_SIZE);\r
+       uint16_t CurrDFPageByte      = ((BlockAddress * VIRTUAL_MEMORY_BLOCK_SIZE) % DATAFLASH_PAGE_SIZE);\r
+       uint8_t  CurrDFPageByteDiv16 = (CurrDFPageByte >> 4);\r
+\r
+       /* Copy selected dataflash's current page contents to the dataflash buffer */\r
+       Dataflash_SelectChipFromPage(CurrDFPage);\r
+       Dataflash_SendByte(DF_CMD_MAINMEMTOBUFF1);\r
+       Dataflash_SendAddressBytes(CurrDFPage, 0);\r
+       Dataflash_WaitWhileBusy();\r
+\r
+       /* Send the dataflash buffer write command */\r
+       Dataflash_ToggleSelectedChipCS();\r
+       Dataflash_SendByte(DF_CMD_BUFF1WRITE);\r
+       Dataflash_SendAddressBytes(0, CurrDFPageByte);\r
+\r
+       /* Wait until endpoint is ready before continuing */\r
+       while (!(Endpoint_IsReadWriteAllowed()));\r
+\r
+       while (TotalBlocks)\r
+       {\r
+               uint8_t BytesInBlockDiv16 = 0;\r
+               \r
+               /* Write an endpoint packet sized data block to the dataflash */\r
+               while (BytesInBlockDiv16 < (VIRTUAL_MEMORY_BLOCK_SIZE >> 4))\r
+               {\r
+                       /* Check if the endpoint is currently empty */\r
+                       if (!(Endpoint_IsReadWriteAllowed()))\r
+                       {\r
+                               /* Clear the current endpoint bank */\r
+                               Endpoint_ClearOUT();\r
+                               \r
+                               /* Wait until the host has sent another packet */\r
+                               while (!(Endpoint_IsReadWriteAllowed()));\r
+                       }\r
+\r
+                       /* Check if end of dataflash page reached */\r
+                       if (CurrDFPageByteDiv16 == (DATAFLASH_PAGE_SIZE >> 4))\r
+                       {\r
+                               /* Write the dataflash buffer contents back to the dataflash page */\r
+                               Dataflash_ToggleSelectedChipCS();\r
+                               Dataflash_SendByte(DF_CMD_BUFF1TOMAINMEMWITHERASE);\r
+                               Dataflash_SendAddressBytes(CurrDFPage, 0);\r
+\r
+                               /* Reset the dataflash buffer counter, increment the page counter */\r
+                               CurrDFPageByteDiv16 = 0;\r
+                               CurrDFPage++;\r
+\r
+                               /* Select the next dataflash chip based on the new dataflash page index */\r
+                               Dataflash_SelectChipFromPage(CurrDFPage);\r
+                               Dataflash_WaitWhileBusy();\r
+\r
+#if (DATAFLASH_PAGE_SIZE > VIRTUAL_MEMORY_BLOCK_SIZE)\r
+                               /* If less than one dataflash page remaining, copy over the existing page to preserve trailing data */\r
+                               if ((TotalBlocks * (VIRTUAL_MEMORY_BLOCK_SIZE >> 4)) < (DATAFLASH_PAGE_SIZE >> 4))\r
+                               {\r
+                                       /* Copy selected dataflash's current page contents to the dataflash buffer */\r
+                                       Dataflash_ToggleSelectedChipCS();\r
+                                       Dataflash_SendByte(DF_CMD_MAINMEMTOBUFF1);\r
+                                       Dataflash_SendAddressBytes(CurrDFPage, 0);\r
+                                       Dataflash_WaitWhileBusy();\r
+                               }\r
+#endif\r
+\r
+                               /* Send the dataflash buffer write command */\r
+                               Dataflash_ToggleSelectedChipCS();\r
+                               Dataflash_SendByte(DF_CMD_BUFF1WRITE);\r
+                               Dataflash_SendAddressBytes(0, 0);\r
+                       }\r
+\r
+                       /* Write one 16-byte chunk of data to the dataflash */\r
+                       Dataflash_SendByte(Endpoint_Read_Byte());\r
+                       Dataflash_SendByte(Endpoint_Read_Byte());\r
+                       Dataflash_SendByte(Endpoint_Read_Byte());\r
+                       Dataflash_SendByte(Endpoint_Read_Byte());\r
+                       Dataflash_SendByte(Endpoint_Read_Byte());\r
+                       Dataflash_SendByte(Endpoint_Read_Byte());\r
+                       Dataflash_SendByte(Endpoint_Read_Byte());\r
+                       Dataflash_SendByte(Endpoint_Read_Byte());\r
+                       Dataflash_SendByte(Endpoint_Read_Byte());\r
+                       Dataflash_SendByte(Endpoint_Read_Byte());\r
+                       Dataflash_SendByte(Endpoint_Read_Byte());\r
+                       Dataflash_SendByte(Endpoint_Read_Byte());\r
+                       Dataflash_SendByte(Endpoint_Read_Byte());\r
+                       Dataflash_SendByte(Endpoint_Read_Byte());\r
+                       Dataflash_SendByte(Endpoint_Read_Byte());\r
+                       Dataflash_SendByte(Endpoint_Read_Byte());\r
+                       \r
+                       /* Increment the dataflash page 16 byte block counter */\r
+                       CurrDFPageByteDiv16++;\r
+\r
+                       /* Increment the block 16 byte block counter */\r
+                       BytesInBlockDiv16++;\r
+\r
+                       /* Check if the current command is being aborted by the host */\r
+                       if (IsMassStoreReset)\r
+                         return;                       \r
+               }\r
+                       \r
+               /* Decrement the blocks remaining counter and reset the sub block counter */\r
+               TotalBlocks--;\r
+       }\r
+\r
+       /* Write the dataflash buffer contents back to the dataflash page */\r
+       Dataflash_ToggleSelectedChipCS();\r
+       Dataflash_SendByte(DF_CMD_BUFF1TOMAINMEMWITHERASE);\r
+       Dataflash_SendAddressBytes(CurrDFPage, 0x00);\r
+       Dataflash_WaitWhileBusy();\r
+\r
+       /* If the endpoint is empty, clear it ready for the next packet from the host */\r
+       if (!(Endpoint_IsReadWriteAllowed()))\r
+         Endpoint_ClearOUT();\r
+\r
+       /* Deselect all dataflash chips */\r
+       Dataflash_DeselectChip();\r
+}\r
+\r
+/** Reads blocks (OS blocks, not Dataflash pages) from the storage medium, the board dataflash IC(s), into\r
+ *  the pre-selected data IN endpoint. This routine reads in Dataflash page sized blocks from the Dataflash\r
+ *  and writes them in OS sized blocks to the endpoint.\r
+ *\r
+ *  \param BlockAddress  Data block starting address for the read sequence\r
+ *  \param TotalBlocks   Number of blocks of data to read\r
+ */\r
+void DataflashManager_ReadBlocks(const uint32_t BlockAddress, uint16_t TotalBlocks)\r
+{\r
+       uint16_t CurrDFPage          = ((BlockAddress * VIRTUAL_MEMORY_BLOCK_SIZE) / DATAFLASH_PAGE_SIZE);\r
+       uint16_t CurrDFPageByte      = ((BlockAddress * VIRTUAL_MEMORY_BLOCK_SIZE) % DATAFLASH_PAGE_SIZE);\r
+       uint8_t  CurrDFPageByteDiv16 = (CurrDFPageByte >> 4);\r
+\r
+       /* Send the dataflash main memory page read command */\r
+       Dataflash_SelectChipFromPage(CurrDFPage);\r
+       Dataflash_SendByte(DF_CMD_MAINMEMPAGEREAD);\r
+       Dataflash_SendAddressBytes(CurrDFPage, CurrDFPageByte);\r
+       Dataflash_SendByte(0x00);\r
+       Dataflash_SendByte(0x00);\r
+       Dataflash_SendByte(0x00);\r
+       Dataflash_SendByte(0x00);\r
+       \r
+       /* Wait until endpoint is ready before continuing */\r
+       while (!(Endpoint_IsReadWriteAllowed()));\r
+       \r
+       while (TotalBlocks)\r
+       {\r
+               uint8_t BytesInBlockDiv16 = 0;\r
+               \r
+               /* Write an endpoint packet sized data block to the dataflash */\r
+               while (BytesInBlockDiv16 < (VIRTUAL_MEMORY_BLOCK_SIZE >> 4))\r
+               {\r
+                       /* Check if the endpoint is currently full */\r
+                       if (!(Endpoint_IsReadWriteAllowed()))\r
+                       {\r
+                               /* Clear the endpoint bank to send its contents to the host */\r
+                               Endpoint_ClearIN();\r
+                               \r
+                               /* Wait until the endpoint is ready for more data */\r
+                               while (!(Endpoint_IsReadWriteAllowed()));\r
+                       }\r
+                       \r
+                       /* Check if end of dataflash page reached */\r
+                       if (CurrDFPageByteDiv16 == (DATAFLASH_PAGE_SIZE >> 4))\r
+                       {\r
+                               /* Reset the dataflash buffer counter, increment the page counter */\r
+                               CurrDFPageByteDiv16 = 0;\r
+                               CurrDFPage++;\r
+\r
+                               /* Select the next dataflash chip based on the new dataflash page index */\r
+                               Dataflash_SelectChipFromPage(CurrDFPage);\r
+                               \r
+                               /* Send the dataflash main memory page read command */\r
+                               Dataflash_SendByte(DF_CMD_MAINMEMPAGEREAD);\r
+                               Dataflash_SendAddressBytes(CurrDFPage, 0);\r
+                               Dataflash_SendByte(0x00);\r
+                               Dataflash_SendByte(0x00);\r
+                               Dataflash_SendByte(0x00);\r
+                               Dataflash_SendByte(0x00);\r
+                       }       \r
+\r
+                       /* Read one 16-byte chunk of data from the dataflash */\r
+                       Endpoint_Write_Byte(Dataflash_ReceiveByte());\r
+                       Endpoint_Write_Byte(Dataflash_ReceiveByte());\r
+                       Endpoint_Write_Byte(Dataflash_ReceiveByte());\r
+                       Endpoint_Write_Byte(Dataflash_ReceiveByte());\r
+                       Endpoint_Write_Byte(Dataflash_ReceiveByte());\r
+                       Endpoint_Write_Byte(Dataflash_ReceiveByte());\r
+                       Endpoint_Write_Byte(Dataflash_ReceiveByte());\r
+                       Endpoint_Write_Byte(Dataflash_ReceiveByte());\r
+                       Endpoint_Write_Byte(Dataflash_ReceiveByte());\r
+                       Endpoint_Write_Byte(Dataflash_ReceiveByte());\r
+                       Endpoint_Write_Byte(Dataflash_ReceiveByte());\r
+                       Endpoint_Write_Byte(Dataflash_ReceiveByte());\r
+                       Endpoint_Write_Byte(Dataflash_ReceiveByte());\r
+                       Endpoint_Write_Byte(Dataflash_ReceiveByte());\r
+                       Endpoint_Write_Byte(Dataflash_ReceiveByte());\r
+                       Endpoint_Write_Byte(Dataflash_ReceiveByte());\r
+                       \r
+                       /* Increment the dataflash page 16 byte block counter */\r
+                       CurrDFPageByteDiv16++;\r
+                       \r
+                       /* Increment the block 16 byte block counter */\r
+                       BytesInBlockDiv16++;\r
+\r
+                       /* Check if the current command is being aborted by the host */\r
+                       if (IsMassStoreReset)\r
+                         return;\r
+               }\r
+               \r
+               /* Decrement the blocks remaining counter */\r
+               TotalBlocks--;\r
+       }\r
+       \r
+       /* If the endpoint is full, send its contents to the host */\r
+       if (!(Endpoint_IsReadWriteAllowed()))\r
+         Endpoint_ClearIN();\r
+\r
+       /* Deselect all dataflash chips */\r
+       Dataflash_DeselectChip();\r
+}\r
+\r
+/** Writes blocks (OS blocks, not Dataflash pages) to the storage medium, the board dataflash IC(s), from\r
+ *  the a given RAM buffer. This routine reads in OS sized blocks from the buffer and writes them to the\r
+ *  dataflash in Dataflash page sized blocks. This can be linked to FAT libraries to write files to the\r
+ *  dataflash.\r
+ *\r
+ *  \param BlockAddress  Data block starting address for the write sequence\r
+ *  \param TotalBlocks   Number of blocks of data to write\r
+ *  \param BufferPtr     Pointer to the data source RAM buffer\r
+ */\r
+void DataflashManager_WriteBlocks_RAM(const uint32_t BlockAddress, uint16_t TotalBlocks, uint8_t* BufferPtr)\r
+{\r
+       uint16_t CurrDFPage          = ((BlockAddress * VIRTUAL_MEMORY_BLOCK_SIZE) / DATAFLASH_PAGE_SIZE);\r
+       uint16_t CurrDFPageByte      = ((BlockAddress * VIRTUAL_MEMORY_BLOCK_SIZE) % DATAFLASH_PAGE_SIZE);\r
+       uint8_t  CurrDFPageByteDiv16 = (CurrDFPageByte >> 4);\r
+\r
+       /* Copy selected dataflash's current page contents to the dataflash buffer */\r
+       Dataflash_SelectChipFromPage(CurrDFPage);\r
+       Dataflash_SendByte(DF_CMD_MAINMEMTOBUFF1);\r
+       Dataflash_SendAddressBytes(CurrDFPage, 0);\r
+       Dataflash_WaitWhileBusy();\r
+\r
+       /* Send the dataflash buffer write command */\r
+       Dataflash_ToggleSelectedChipCS();\r
+       Dataflash_SendByte(DF_CMD_BUFF1WRITE);\r
+       Dataflash_SendAddressBytes(0, CurrDFPageByte);\r
+\r
+       while (TotalBlocks)\r
+       {\r
+               uint8_t BytesInBlockDiv16 = 0;\r
+               \r
+               /* Write an endpoint packet sized data block to the dataflash */\r
+               while (BytesInBlockDiv16 < (VIRTUAL_MEMORY_BLOCK_SIZE >> 4))\r
+               {\r
+                       /* Check if end of dataflash page reached */\r
+                       if (CurrDFPageByteDiv16 == (DATAFLASH_PAGE_SIZE >> 4))\r
+                       {\r
+                               /* Write the dataflash buffer contents back to the dataflash page */\r
+                               Dataflash_ToggleSelectedChipCS();\r
+                               Dataflash_SendByte(DF_CMD_BUFF1TOMAINMEMWITHERASE);\r
+                               Dataflash_SendAddressBytes(CurrDFPage, 0);\r
+\r
+                               /* Reset the dataflash buffer counter, increment the page counter */\r
+                               CurrDFPageByteDiv16 = 0;\r
+                               CurrDFPage++;\r
+\r
+                               /* Select the next dataflash chip based on the new dataflash page index */\r
+                               Dataflash_SelectChipFromPage(CurrDFPage);\r
+                               Dataflash_WaitWhileBusy();\r
+\r
+#if (DATAFLASH_PAGE_SIZE > VIRTUAL_MEMORY_BLOCK_SIZE)\r
+                               /* If less than one dataflash page remaining, copy over the existing page to preserve trailing data */\r
+                               if ((TotalBlocks * (VIRTUAL_MEMORY_BLOCK_SIZE >> 4)) < (DATAFLASH_PAGE_SIZE >> 4))\r
+                               {\r
+                                       /* Copy selected dataflash's current page contents to the dataflash buffer */\r
+                                       Dataflash_ToggleSelectedChipCS();\r
+                                       Dataflash_SendByte(DF_CMD_MAINMEMTOBUFF1);\r
+                                       Dataflash_SendAddressBytes(CurrDFPage, 0);\r
+                                       Dataflash_WaitWhileBusy();\r
+                               }\r
+#endif\r
+\r
+                               /* Send the dataflash buffer write command */\r
+                               Dataflash_ToggleSelectedChipCS();\r
+                               Dataflash_SendByte(DF_CMD_BUFF1WRITE);\r
+                               Dataflash_SendAddressBytes(0, 0);\r
+                       }\r
+                       \r
+                       /* Write one 16-byte chunk of data to the dataflash */\r
+                       for (uint8_t ByteNum = 0; ByteNum < 16; ByteNum++)\r
+                         Dataflash_SendByte(*(BufferPtr++));\r
+                       \r
+                       /* Increment the dataflash page 16 byte block counter */\r
+                       CurrDFPageByteDiv16++;\r
+\r
+                       /* Increment the block 16 byte block counter */\r
+                       BytesInBlockDiv16++;\r
+\r
+                       /* Check if the current command is being aborted by the host */\r
+                       if (IsMassStoreReset)\r
+                         return;                       \r
+               }\r
+                       \r
+               /* Decrement the blocks remaining counter and reset the sub block counter */\r
+               TotalBlocks--;\r
+       }\r
+\r
+       /* Write the dataflash buffer contents back to the dataflash page */\r
+       Dataflash_ToggleSelectedChipCS();\r
+       Dataflash_SendByte(DF_CMD_BUFF1TOMAINMEMWITHERASE);\r
+       Dataflash_SendAddressBytes(CurrDFPage, 0x00);\r
+       Dataflash_WaitWhileBusy();\r
+\r
+       /* Deselect all dataflash chips */\r
+       Dataflash_DeselectChip();\r
+}\r
+\r
+/** Reads blocks (OS blocks, not Dataflash pages) from the storage medium, the board dataflash IC(s), into\r
+ *  the a preallocated RAM buffer. This routine reads in Dataflash page sized blocks from the Dataflash\r
+ *  and writes them in OS sized blocks to the given buffer. This can be linked to FAT libraries to read\r
+ *  the files stored on the dataflash.\r
+ *\r
+ *  \param BlockAddress  Data block starting address for the read sequence\r
+ *  \param TotalBlocks   Number of blocks of data to read\r
+ *  \param BufferPtr     Pointer to the data destination RAM buffer\r
+ */\r
+void DataflashManager_ReadBlocks_RAM(const uint32_t BlockAddress, uint16_t TotalBlocks, uint8_t* BufferPtr)\r
+{\r
+       uint16_t CurrDFPage          = ((BlockAddress * VIRTUAL_MEMORY_BLOCK_SIZE) / DATAFLASH_PAGE_SIZE);\r
+       uint16_t CurrDFPageByte      = ((BlockAddress * VIRTUAL_MEMORY_BLOCK_SIZE) % DATAFLASH_PAGE_SIZE);\r
+       uint8_t  CurrDFPageByteDiv16 = (CurrDFPageByte >> 4);\r
+\r
+       /* Send the dataflash main memory page read command */\r
+       Dataflash_SelectChipFromPage(CurrDFPage);\r
+       Dataflash_SendByte(DF_CMD_MAINMEMPAGEREAD);\r
+       Dataflash_SendAddressBytes(CurrDFPage, CurrDFPageByte);\r
+       Dataflash_SendByte(0x00);\r
+       Dataflash_SendByte(0x00);\r
+       Dataflash_SendByte(0x00);\r
+       Dataflash_SendByte(0x00);\r
+\r
+       while (TotalBlocks)\r
+       {\r
+               uint8_t BytesInBlockDiv16 = 0;\r
+               \r
+               /* Write an endpoint packet sized data block to the dataflash */\r
+               while (BytesInBlockDiv16 < (VIRTUAL_MEMORY_BLOCK_SIZE >> 4))\r
+               {\r
+                       /* Check if end of dataflash page reached */\r
+                       if (CurrDFPageByteDiv16 == (DATAFLASH_PAGE_SIZE >> 4))\r
+                       {\r
+                               /* Reset the dataflash buffer counter, increment the page counter */\r
+                               CurrDFPageByteDiv16 = 0;\r
+                               CurrDFPage++;\r
+\r
+                               /* Select the next dataflash chip based on the new dataflash page index */\r
+                               Dataflash_SelectChipFromPage(CurrDFPage);\r
+                               \r
+                               /* Send the dataflash main memory page read command */\r
+                               Dataflash_SendByte(DF_CMD_MAINMEMPAGEREAD);\r
+                               Dataflash_SendAddressBytes(CurrDFPage, 0);\r
+                               Dataflash_SendByte(0x00);\r
+                               Dataflash_SendByte(0x00);\r
+                               Dataflash_SendByte(0x00);\r
+                               Dataflash_SendByte(0x00);\r
+                       }       \r
+\r
+                       /* Read one 16-byte chunk of data from the dataflash */\r
+                       for (uint8_t ByteNum = 0; ByteNum < 16; ByteNum++)\r
+                         *(BufferPtr++) = Dataflash_ReceiveByte();\r
+                       \r
+                       /* Increment the dataflash page 16 byte block counter */\r
+                       CurrDFPageByteDiv16++;\r
+                       \r
+                       /* Increment the block 16 byte block counter */\r
+                       BytesInBlockDiv16++;\r
+\r
+                       /* Check if the current command is being aborted by the host */\r
+                       if (IsMassStoreReset)\r
+                         return;\r
+               }\r
+               \r
+               /* Decrement the blocks remaining counter */\r
+               TotalBlocks--;\r
+       }\r
+\r
+       /* Deselect all dataflash chips */\r
+       Dataflash_DeselectChip();\r
+}\r
+\r
+/** Disables the dataflash memory write protection bits on the board Dataflash ICs, if enabled. */\r
+void DataflashManager_ResetDataflashProtections(void)\r
+{\r
+       /* Select first dataflash chip, send the read status register command */\r
+       Dataflash_SelectChip(DATAFLASH_CHIP1);\r
+       Dataflash_SendByte(DF_CMD_GETSTATUS);\r
+       \r
+       /* Check if sector protection is enabled */\r
+       if (Dataflash_ReceiveByte() & DF_STATUS_SECTORPROTECTION_ON)\r
+       {\r
+               Dataflash_ToggleSelectedChipCS();\r
+\r
+               /* Send the commands to disable sector protection */\r
+               Dataflash_SendByte(DF_CMD_SECTORPROTECTIONOFF[0]);\r
+               Dataflash_SendByte(DF_CMD_SECTORPROTECTIONOFF[1]);\r
+               Dataflash_SendByte(DF_CMD_SECTORPROTECTIONOFF[2]);\r
+               Dataflash_SendByte(DF_CMD_SECTORPROTECTIONOFF[3]);\r
+       }\r
+       \r
+       /* Select second dataflash chip (if present on selected board), send read status register command */\r
+       #if (DATAFLASH_TOTALCHIPS == 2)\r
+       Dataflash_SelectChip(DATAFLASH_CHIP2);\r
+       Dataflash_SendByte(DF_CMD_GETSTATUS);\r
+       \r
+       /* Check if sector protection is enabled */\r
+       if (Dataflash_ReceiveByte() & DF_STATUS_SECTORPROTECTION_ON)\r
+       {\r
+               Dataflash_ToggleSelectedChipCS();\r
+\r
+               /* Send the commands to disable sector protection */\r
+               Dataflash_SendByte(DF_CMD_SECTORPROTECTIONOFF[0]);\r
+               Dataflash_SendByte(DF_CMD_SECTORPROTECTIONOFF[1]);\r
+               Dataflash_SendByte(DF_CMD_SECTORPROTECTIONOFF[2]);\r
+               Dataflash_SendByte(DF_CMD_SECTORPROTECTIONOFF[3]);\r
+       }\r
+       #endif\r
+       \r
+       /* Deselect current dataflash chip */\r
+       Dataflash_DeselectChip();\r
+}\r
diff --git a/Demos/Device/LowLevel/MassStorage/Lib/DataflashManager.h b/Demos/Device/LowLevel/MassStorage/Lib/DataflashManager.h
new file mode 100644 (file)
index 0000000..1332fd3
--- /dev/null
@@ -0,0 +1,75 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  Header file for DataflashManager.c.\r
+ */\r
\r
+#ifndef _DATAFLASH_MANAGER_H\r
+#define _DATAFLASH_MANAGER_H\r
+\r
+       /* Includes: */\r
+               #include <avr/io.h>\r
+               \r
+               #include "MassStorage.h"\r
+               #include "Descriptors.h"\r
+\r
+               #include <LUFA/Common/Common.h>              // Function Attribute, Atomic, Debug and ISR Macros\r
+               #include <LUFA/Drivers/USB/USB.h>            // USB Functionality\r
+               #include <LUFA/Drivers/Board/Dataflash.h>    // Dataflash chip driver\r
+\r
+       /* Preprocessor Checks: */\r
+               #if (DATAFLASH_PAGE_SIZE % 16)\r
+                       #error Dataflash page size must be a multiple of 16 bytes.\r
+               #endif\r
+\r
+       /* Defines: */\r
+               /** Total number of bytes of the storage medium, comprised of one or more dataflash ICs. */\r
+               #define VIRTUAL_MEMORY_BYTES                ((uint32_t)DATAFLASH_PAGES * DATAFLASH_PAGE_SIZE * DATAFLASH_TOTALCHIPS)\r
+\r
+               /** Block size of the device. This is kept at 512 to remain compatible with the OS despite the underlying\r
+                *  storage media (Dataflash) using a different native block size.\r
+                */\r
+               #define VIRTUAL_MEMORY_BLOCK_SIZE           512\r
+               \r
+               /** Total number of blocks of the virtual memory for reporting to the host as the device's total capacity. */\r
+               #define VIRTUAL_MEMORY_BLOCKS               (VIRTUAL_MEMORY_BYTES / VIRTUAL_MEMORY_BLOCK_SIZE)\r
+               \r
+       /* Function Prototypes: */\r
+               void DataflashManager_WriteBlocks(const uint32_t BlockAddress, uint16_t TotalBlocks);\r
+               void DataflashManager_ReadBlocks(const uint32_t BlockAddress, uint16_t TotalBlocks);\r
+               void DataflashManager_WriteBlocks_RAM(const uint32_t BlockAddress, uint16_t TotalBlocks,\r
+                                                     uint8_t* BufferPtr) ATTR_NON_NULL_PTR_ARG(3);\r
+               void DataflashManager_ReadBlocks_RAM(const uint32_t BlockAddress, uint16_t TotalBlocks,\r
+                                                    uint8_t* BufferPtr) ATTR_NON_NULL_PTR_ARG(3);\r
+               void DataflashManager_ResetDataflashProtections(void);\r
+               \r
+#endif\r
diff --git a/Demos/Device/LowLevel/MassStorage/Lib/SCSI.c b/Demos/Device/LowLevel/MassStorage/Lib/SCSI.c
new file mode 100644 (file)
index 0000000..5993a54
--- /dev/null
@@ -0,0 +1,350 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  SCSI command processing routines, for SCSI commands issued by the host. Mass Storage\r
+ *  devices use a thin "Bulk-Only Transport" protocol for issuing commands and status information,\r
+ *  which wrap around standard SCSI device commands for controlling the actual storage medium.\r
+ */\r
\r
+#define  INCLUDE_FROM_SCSI_C\r
+#include "SCSI.h"\r
+\r
+/** Structure to hold the SCSI response data to a SCSI INQUIRY command. This gives information about the device's\r
+ *  features and capabilities.\r
+ */\r
+SCSI_Inquiry_Response_t InquiryData = \r
+       {\r
+               .DeviceType          = DEVICE_TYPE_BLOCK,\r
+               .PeripheralQualifier = 0,\r
+                       \r
+               .Removable           = true,\r
+                       \r
+               .Version             = 0,\r
+                       \r
+               .ResponseDataFormat  = 2,\r
+               .NormACA             = false,\r
+               .TrmTsk              = false,\r
+               .AERC                = false,\r
+\r
+               .AdditionalLength    = 0x1F,\r
+                       \r
+               .SoftReset           = false,\r
+               .CmdQue              = false,\r
+               .Linked              = false,\r
+               .Sync                = false,\r
+               .WideBus16Bit        = false,\r
+               .WideBus32Bit        = false,\r
+               .RelAddr             = false,\r
+               \r
+               .VendorID            = "LUFA",\r
+               .ProductID           = "Dataflash Disk",\r
+               .RevisionID          = {'0','.','0','0'},\r
+       };\r
+\r
+/** Structure to hold the sense data for the last issued SCSI command, which is returned to the host after a SCSI REQUEST SENSE\r
+ *  command is issued. This gives information on exactly why the last command failed to complete.\r
+ */\r
+SCSI_Request_Sense_Response_t SenseData =\r
+       {\r
+               .ResponseCode        = 0x70,\r
+               .AdditionalLength    = 0x0A,\r
+       };\r
+\r
+\r
+/** Main routine to process the SCSI command located in the Command Block Wrapper read from the host. This dispatches\r
+ *  to the appropriate SCSI command handling routine if the issued command is supported by the device, else it returns\r
+ *  a command failure due to a ILLEGAL REQUEST.\r
+ */\r
+void SCSI_DecodeSCSICommand(void)\r
+{\r
+       bool CommandSuccess = false;\r
+\r
+       /* Run the appropriate SCSI command hander function based on the passed command */\r
+       switch (CommandBlock.SCSICommandData[0])\r
+       {\r
+               case SCSI_CMD_INQUIRY:\r
+                       CommandSuccess = SCSI_Command_Inquiry();                        \r
+                       break;\r
+               case SCSI_CMD_REQUEST_SENSE:\r
+                       CommandSuccess = SCSI_Command_Request_Sense();\r
+                       break;\r
+               case SCSI_CMD_READ_CAPACITY_10:\r
+                       CommandSuccess = SCSI_Command_Read_Capacity_10();                       \r
+                       break;\r
+               case SCSI_CMD_SEND_DIAGNOSTIC:\r
+                       CommandSuccess = SCSI_Command_Send_Diagnostic();\r
+                       break;\r
+               case SCSI_CMD_WRITE_10:\r
+                       CommandSuccess = SCSI_Command_ReadWrite_10(DATA_WRITE);\r
+                       break;\r
+               case SCSI_CMD_READ_10:\r
+                       CommandSuccess = SCSI_Command_ReadWrite_10(DATA_READ);\r
+                       break;\r
+               case SCSI_CMD_TEST_UNIT_READY:\r
+               case SCSI_CMD_PREVENT_ALLOW_MEDIUM_REMOVAL:\r
+               case SCSI_CMD_VERIFY_10:\r
+                       /* These commands should just succeed, no handling required */\r
+                       CommandSuccess = true;\r
+                       CommandBlock.DataTransferLength = 0;\r
+                       break;\r
+               default:\r
+                       /* Update the SENSE key to reflect the invalid command */\r
+                       SCSI_SET_SENSE(SCSI_SENSE_KEY_ILLEGAL_REQUEST,\r
+                                  SCSI_ASENSE_INVALID_COMMAND,\r
+                                  SCSI_ASENSEQ_NO_QUALIFIER);\r
+                       break;\r
+       }\r
+       \r
+       /* Check if command was successfully processed */\r
+       if (CommandSuccess)\r
+       {\r
+               /* Command succeeded - set the CSW status and update the SENSE key */\r
+               CommandStatus.Status = Command_Pass;\r
+               \r
+               SCSI_SET_SENSE(SCSI_SENSE_KEY_GOOD,\r
+                              SCSI_ASENSE_NO_ADDITIONAL_INFORMATION,\r
+                              SCSI_ASENSEQ_NO_QUALIFIER);                                         \r
+       }\r
+       else\r
+       {\r
+               /* Command failed - set the CSW status - failed command function updates the SENSE key */\r
+               CommandStatus.Status = Command_Fail;\r
+       }\r
+}\r
+\r
+/** Command processing for an issued SCSI INQUIRY command. This command returns information about the device's features\r
+ *  and capabilities to the host.\r
+ *\r
+ *  \return Boolean true if the command completed successfully, false otherwise.\r
+ */\r
+static bool SCSI_Command_Inquiry(void)\r
+{\r
+       uint16_t AllocationLength  = (((uint16_t)CommandBlock.SCSICommandData[3] << 8) |\r
+                                                CommandBlock.SCSICommandData[4]);\r
+       uint16_t BytesTransferred  = (AllocationLength < sizeof(InquiryData))? AllocationLength :\r
+                                                                              sizeof(InquiryData);\r
+\r
+       /* Only the standard INQUIRY data is supported, check if any optional INQUIRY bits set */\r
+       if ((CommandBlock.SCSICommandData[1] & ((1 << 0) | (1 << 1))) ||\r
+            CommandBlock.SCSICommandData[2])\r
+       {\r
+               /* Optional but unsupported bits set - update the SENSE key and fail the request */\r
+               SCSI_SET_SENSE(SCSI_SENSE_KEY_ILLEGAL_REQUEST,\r
+                              SCSI_ASENSE_INVALID_FIELD_IN_CDB,\r
+                              SCSI_ASENSEQ_NO_QUALIFIER);\r
+\r
+               return false;\r
+       }\r
+\r
+       /* Write the INQUIRY data to the endpoint */\r
+       Endpoint_Write_Stream_LE(&InquiryData, BytesTransferred, StreamCallback_AbortOnMassStoreReset);\r
+\r
+       uint8_t PadBytes[AllocationLength - BytesTransferred];\r
+       \r
+       /* Pad out remaining bytes with 0x00 */\r
+       Endpoint_Write_Stream_LE(&PadBytes, (AllocationLength - BytesTransferred), StreamCallback_AbortOnMassStoreReset);\r
+\r
+       /* Finalize the stream transfer to send the last packet */\r
+       Endpoint_ClearIN();\r
+\r
+       /* Succeed the command and update the bytes transferred counter */\r
+       CommandBlock.DataTransferLength -= BytesTransferred;\r
+       \r
+       return true;\r
+}\r
+\r
+/** Command processing for an issued SCSI REQUEST SENSE command. This command returns information about the last issued command,\r
+ *  including the error code and additional error information so that the host can determine why a command failed to complete.\r
+ *\r
+ *  \return Boolean true if the command completed successfully, false otherwise.\r
+ */\r
+static bool SCSI_Command_Request_Sense(void)\r
+{\r
+       uint8_t  AllocationLength = CommandBlock.SCSICommandData[4];\r
+       uint8_t  BytesTransferred = (AllocationLength < sizeof(SenseData))? AllocationLength : sizeof(SenseData);\r
+       \r
+       /* Send the SENSE data - this indicates to the host the status of the last command */\r
+       Endpoint_Write_Stream_LE(&SenseData, BytesTransferred, StreamCallback_AbortOnMassStoreReset);\r
+       \r
+       uint8_t PadBytes[AllocationLength - BytesTransferred];\r
+       \r
+       /* Pad out remaining bytes with 0x00 */\r
+       Endpoint_Write_Stream_LE(&PadBytes, (AllocationLength - BytesTransferred), StreamCallback_AbortOnMassStoreReset);\r
+\r
+       /* Finalize the stream transfer to send the last packet */\r
+       Endpoint_ClearIN();\r
+\r
+       /* Succeed the command and update the bytes transferred counter */\r
+       CommandBlock.DataTransferLength -= BytesTransferred;\r
+\r
+       return true;\r
+}\r
+\r
+/** Command processing for an issued SCSI READ CAPACITY (10) command. This command returns information about the device's capacity\r
+ *  on the selected Logical Unit (drive), as a number of OS-sized blocks.\r
+ *\r
+ *  \return Boolean true if the command completed successfully, false otherwise.\r
+ */\r
+static bool SCSI_Command_Read_Capacity_10(void)\r
+{\r
+       /* Send the total number of logical blocks in the current LUN */\r
+       Endpoint_Write_DWord_BE(LUN_MEDIA_BLOCKS - 1);\r
+\r
+       /* Send the logical block size of the device (must be 512 bytes) */\r
+       Endpoint_Write_DWord_BE(VIRTUAL_MEMORY_BLOCK_SIZE);\r
+\r
+       /* Check if the current command is being aborted by the host */\r
+       if (IsMassStoreReset)\r
+         return false;\r
+\r
+       /* Send the endpoint data packet to the host */\r
+       Endpoint_ClearIN();\r
+\r
+       /* Succeed the command and update the bytes transferred counter */\r
+       CommandBlock.DataTransferLength -= 8;\r
+       \r
+       return true;\r
+}\r
+\r
+/** Command processing for an issued SCSI SEND DIAGNOSTIC command. This command performs a quick check of the Dataflash ICs on the\r
+ *  board, and indicates if they are present and functioning correctly. Only the Self-Test portion of the diagnostic command is\r
+ *  supported.\r
+ *\r
+ *  \return Boolean true if the command completed successfully, false otherwise.\r
+ */\r
+static bool SCSI_Command_Send_Diagnostic(void)\r
+{\r
+       uint8_t ReturnByte;\r
+\r
+       /* Check to see if the SELF TEST bit is not set */\r
+       if (!(CommandBlock.SCSICommandData[1] & (1 << 2)))\r
+       {\r
+               /* Only self-test supported - update SENSE key and fail the command */\r
+               SCSI_SET_SENSE(SCSI_SENSE_KEY_ILLEGAL_REQUEST,\r
+                              SCSI_ASENSE_INVALID_FIELD_IN_CDB,\r
+                              SCSI_ASENSEQ_NO_QUALIFIER);\r
+\r
+               return false;\r
+       }\r
+       \r
+       /* Test first Dataflash IC is present and responding to commands */\r
+       Dataflash_SelectChip(DATAFLASH_CHIP1);\r
+       Dataflash_SendByte(DF_CMD_READMANUFACTURERDEVICEINFO);\r
+       ReturnByte = Dataflash_ReceiveByte();\r
+       Dataflash_DeselectChip();\r
+\r
+       /* If returned data is invalid, fail the command */\r
+       if (ReturnByte != DF_MANUFACTURER_ATMEL)\r
+       {\r
+               /* Update SENSE key with a hardware error condition and return command fail */\r
+               SCSI_SET_SENSE(SCSI_SENSE_KEY_HARDWARE_ERROR,\r
+                              SCSI_ASENSE_NO_ADDITIONAL_INFORMATION,\r
+                              SCSI_ASENSEQ_NO_QUALIFIER);      \r
+       \r
+               return false;\r
+       }\r
+\r
+       #if (DATAFLASH_TOTALCHIPS == 2)\r
+       /* Test second Dataflash IC is present and responding to commands */\r
+       Dataflash_SelectChip(DATAFLASH_CHIP2);\r
+       Dataflash_SendByte(DF_CMD_READMANUFACTURERDEVICEINFO);\r
+       ReturnByte = Dataflash_ReceiveByte();\r
+       Dataflash_DeselectChip();\r
+\r
+       /* If returned data is invalid, fail the command */\r
+       if (ReturnByte != DF_MANUFACTURER_ATMEL)\r
+       {\r
+               /* Update SENSE key with a hardware error condition and return command fail */\r
+               SCSI_SET_SENSE(SCSI_SENSE_KEY_HARDWARE_ERROR,\r
+                              SCSI_ASENSE_NO_ADDITIONAL_INFORMATION,\r
+                              SCSI_ASENSEQ_NO_QUALIFIER);      \r
+       \r
+               return false;\r
+       }\r
+       #endif\r
+       \r
+       /* Succeed the command and update the bytes transferred counter */\r
+       CommandBlock.DataTransferLength = 0;\r
+       \r
+       return true;\r
+}\r
+\r
+/** Command processing for an issued SCSI READ (10) or WRITE (10) command. This command reads in the block start address\r
+ *  and total number of blocks to process, then calls the appropriate low-level dataflash routine to handle the actual\r
+ *  reading and writing of the data.\r
+ *\r
+ *  \param IsDataRead  Indicates if the command is a READ (10) command or WRITE (10) command (DATA_READ or DATA_WRITE)\r
+ *\r
+ *  \return Boolean true if the command completed successfully, false otherwise.\r
+ */\r
+static bool SCSI_Command_ReadWrite_10(const bool IsDataRead)\r
+{\r
+       uint32_t BlockAddress;\r
+       uint16_t TotalBlocks;\r
+       \r
+       /* Load in the 32-bit block address (SCSI uses big-endian, so have to do it byte-by-byte) */\r
+       ((uint8_t*)&BlockAddress)[3] = CommandBlock.SCSICommandData[2];\r
+       ((uint8_t*)&BlockAddress)[2] = CommandBlock.SCSICommandData[3];\r
+       ((uint8_t*)&BlockAddress)[1] = CommandBlock.SCSICommandData[4];\r
+       ((uint8_t*)&BlockAddress)[0] = CommandBlock.SCSICommandData[5];\r
+\r
+       /* Load in the 16-bit total blocks (SCSI uses big-endian, so have to do it byte-by-byte) */\r
+       ((uint8_t*)&TotalBlocks)[1]  = CommandBlock.SCSICommandData[7];\r
+       ((uint8_t*)&TotalBlocks)[0]  = CommandBlock.SCSICommandData[8];\r
+       \r
+       /* Check if the block address is outside the maximum allowable value for the LUN */\r
+       if (BlockAddress >= LUN_MEDIA_BLOCKS)\r
+       {\r
+               /* Block address is invalid, update SENSE key and return command fail */\r
+               SCSI_SET_SENSE(SCSI_SENSE_KEY_ILLEGAL_REQUEST,\r
+                              SCSI_ASENSE_LOGICAL_BLOCK_ADDRESS_OUT_OF_RANGE,\r
+                              SCSI_ASENSEQ_NO_QUALIFIER);\r
+\r
+               return false;\r
+       }\r
+\r
+       #if (TOTAL_LUNS > 1)\r
+       /* Adjust the given block address to the real media address based on the selected LUN */\r
+       BlockAddress += ((uint32_t)CommandBlock.LUN * LUN_MEDIA_BLOCKS);\r
+       #endif\r
+       \r
+       /* Determine if the packet is a READ (10) or WRITE (10) command, call appropriate function */\r
+       if (IsDataRead == DATA_READ)\r
+         DataflashManager_ReadBlocks(BlockAddress, TotalBlocks);\r
+       else\r
+         DataflashManager_WriteBlocks(BlockAddress, TotalBlocks);\r
+\r
+       /* Update the bytes transferred counter and succeed the command */\r
+       CommandBlock.DataTransferLength -= ((uint32_t)TotalBlocks * VIRTUAL_MEMORY_BLOCK_SIZE);\r
+       \r
+       return true;\r
+}\r
diff --git a/Demos/Device/LowLevel/MassStorage/Lib/SCSI.h b/Demos/Device/LowLevel/MassStorage/Lib/SCSI.h
new file mode 100644 (file)
index 0000000..d7693ca
--- /dev/null
@@ -0,0 +1,149 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  Header file for SCSI.c.\r
+ */\r
\r
+#ifndef _SCSI_H_\r
+#define _SCSI_H_\r
+\r
+       /* Includes: */\r
+               #include <avr/io.h>\r
+               #include <avr/pgmspace.h>\r
+\r
+               #include <LUFA/Common/Common.h>              // Function Attribute, Atomic, Debug and ISR Macros\r
+               #include <LUFA/Drivers/USB/USB.h>            // USB Functionality\r
+               #include <LUFA/Drivers/Board/LEDs.h>         // LEDs driver\r
+\r
+               #include "MassStorage.h"\r
+               #include "Descriptors.h"\r
+               #include "DataflashManager.h"\r
+               #include "SCSI_Codes.h"\r
+       \r
+       /* Macros: */\r
+               /** Macro to set the current SCSI sense data to the given key, additional sense code and additional sense qualifier. This\r
+                *  is for convenience, as it allows for all three sense values (returned upon request to the host to give information about\r
+                *  the last command failure) in a quick and easy manner.\r
+                *\r
+                *  \param key    New SCSI sense key to set the sense code to\r
+                *  \param acode  New SCSI additional sense key to set the additional sense code to\r
+                *  \param aqual  New SCSI additional sense key qualifier to set the additional sense qualifier code to\r
+                */\r
+               #define SCSI_SET_SENSE(key, acode, aqual)  MACROS{ SenseData.SenseKey = key;              \\r
+                                                                  SenseData.AdditionalSenseCode = acode; \\r
+                                                                  SenseData.AdditionalSenseQualifier = aqual; }MACROE\r
+\r
+               /** Macro for the SCSI_Command_ReadWrite_10() function, to indicate that data is to be read from the storage medium. */\r
+               #define DATA_READ      true\r
+\r
+               /** Macro for the SCSI_Command_ReadWrite_10() function, to indicate that data is to be written to the storage medium. */\r
+               #define DATA_WRITE     false\r
+\r
+               /** Value for the DeviceType entry in the SCSI_Inquiry_Response_t enum, indicating a Block Media device. */\r
+               #define DEVICE_TYPE_BLOCK 0x00\r
+               \r
+               /** Value for the DeviceType entry in the SCSI_Inquiry_Response_t enum, indicating a CD-ROM device. */\r
+               #define DEVICE_TYPE_CDROM 0x05\r
+\r
+       /* Type Defines: */\r
+               /** Type define for a SCSI response structure to a SCSI INQUIRY command. For details of the\r
+                *  structure contents, refer to the SCSI specifications.\r
+                */\r
+               typedef struct\r
+               {\r
+                       unsigned char DeviceType          : 5;\r
+                       unsigned char PeripheralQualifier : 3;\r
+                       \r
+                       unsigned char _RESERVED1          : 7;\r
+                       unsigned char Removable           : 1;\r
+                       \r
+                       uint8_t      Version;\r
+                       \r
+                       unsigned char ResponseDataFormat  : 4;\r
+                       unsigned char _RESERVED2          : 1;\r
+                       unsigned char NormACA             : 1;\r
+                       unsigned char TrmTsk              : 1;\r
+                       unsigned char AERC                : 1;\r
+\r
+                       uint8_t      AdditionalLength;\r
+                       uint8_t      _RESERVED3[2];\r
+\r
+                       unsigned char SoftReset           : 1;\r
+                       unsigned char CmdQue              : 1;\r
+                       unsigned char _RESERVED4          : 1;\r
+                       unsigned char Linked              : 1;\r
+                       unsigned char Sync                : 1;\r
+                       unsigned char WideBus16Bit        : 1;\r
+                       unsigned char WideBus32Bit        : 1;\r
+                       unsigned char RelAddr             : 1;\r
+                       \r
+                       uint8_t      VendorID[8];\r
+                       uint8_t      ProductID[16];\r
+                       uint8_t      RevisionID[4];\r
+               } SCSI_Inquiry_Response_t;\r
+               \r
+               /** Type define for a SCSI sense structure to a SCSI REQUEST SENSE command. For details of the\r
+                *  structure contents, refer to the SCSI specifications.\r
+                */\r
+               typedef struct\r
+               {\r
+                       uint8_t       ResponseCode;\r
+                       \r
+                       uint8_t       SegmentNumber;\r
+                       \r
+                       unsigned char SenseKey            : 4;\r
+                       unsigned char _RESERVED1          : 1;\r
+                       unsigned char ILI                 : 1;\r
+                       unsigned char EOM                 : 1;\r
+                       unsigned char FileMark            : 1;\r
+                       \r
+                       uint8_t      Information[4];\r
+                       uint8_t      AdditionalLength;\r
+                       uint8_t      CmdSpecificInformation[4];\r
+                       uint8_t      AdditionalSenseCode;\r
+                       uint8_t      AdditionalSenseQualifier;\r
+                       uint8_t      FieldReplaceableUnitCode;\r
+                       uint8_t      SenseKeySpecific[3];\r
+               } SCSI_Request_Sense_Response_t;\r
+               \r
+       /* Function Prototypes: */\r
+               void SCSI_DecodeSCSICommand(void);\r
+               \r
+               #if defined(INCLUDE_FROM_SCSI_C)\r
+                       static bool SCSI_Command_Inquiry(void);\r
+                       static bool SCSI_Command_Request_Sense(void);\r
+                       static bool SCSI_Command_Read_Capacity_10(void);\r
+                       static bool SCSI_Command_Send_Diagnostic(void);\r
+                       static bool SCSI_Command_ReadWrite_10(const bool IsDataRead);\r
+               #endif\r
+               \r
+#endif\r
diff --git a/Demos/Device/LowLevel/MassStorage/Lib/SCSI_Codes.h b/Demos/Device/LowLevel/MassStorage/Lib/SCSI_Codes.h
new file mode 100644 (file)
index 0000000..2b2213d
--- /dev/null
@@ -0,0 +1,85 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  Header containing macros for possible SCSI commands and SENSE data. Refer to\r
+ *  the SCSI standard documentation for more information on each SCSI command and\r
+ *  the SENSE data.\r
+ */\r
\r
+#ifndef _SCSI_CODES_H_\r
+#define _SCSI_CODES_H_\r
+\r
+       /* Macros: */\r
+               #define SCSI_CMD_INQUIRY                               0x12\r
+               #define SCSI_CMD_REQUEST_SENSE                         0x03\r
+               #define SCSI_CMD_TEST_UNIT_READY                       0x00\r
+               #define SCSI_CMD_READ_CAPACITY_10                      0x25\r
+               #define SCSI_CMD_SEND_DIAGNOSTIC                       0x1D\r
+               #define SCSI_CMD_PREVENT_ALLOW_MEDIUM_REMOVAL          0x1E\r
+               #define SCSI_CMD_WRITE_10                              0x2A\r
+               #define SCSI_CMD_READ_10                               0x28\r
+               #define SCSI_CMD_WRITE_6                               0x0A\r
+               #define SCSI_CMD_READ_6                                0x08\r
+               #define SCSI_CMD_VERIFY_10                             0x2F\r
+               #define SCSI_CMD_MODE_SENSE_6                          0x1A\r
+               #define SCSI_CMD_MODE_SENSE_10                         0x5A\r
+\r
+               #define SCSI_SENSE_KEY_GOOD                            0x00\r
+               #define SCSI_SENSE_KEY_RECOVERED_ERROR                 0x01\r
+               #define SCSI_SENSE_KEY_NOT_READY                       0x02\r
+               #define SCSI_SENSE_KEY_MEDIUM_ERROR                    0x03\r
+               #define SCSI_SENSE_KEY_HARDWARE_ERROR                  0x04\r
+               #define SCSI_SENSE_KEY_ILLEGAL_REQUEST                 0x05\r
+               #define SCSI_SENSE_KEY_UNIT_ATTENTION                  0x06\r
+               #define SCSI_SENSE_KEY_DATA_PROTECT                    0x07\r
+               #define SCSI_SENSE_KEY_BLANK_CHECK                     0x08\r
+               #define SCSI_SENSE_KEY_VENDOR_SPECIFIC                 0x09\r
+               #define SCSI_SENSE_KEY_COPY_ABORTED                    0x0A\r
+               #define SCSI_SENSE_KEY_ABORTED_COMMAND                 0x0B\r
+               #define SCSI_SENSE_KEY_VOLUME_OVERFLOW                 0x0D\r
+               #define SCSI_SENSE_KEY_MISCOMPARE                      0x0E\r
+\r
+               #define SCSI_ASENSE_NO_ADDITIONAL_INFORMATION          0x00\r
+               #define SCSI_ASENSE_LOGICAL_UNIT_NOT_READY             0x04\r
+               #define SCSI_ASENSE_INVALID_FIELD_IN_CDB               0x24\r
+               #define SCSI_ASENSE_WRITE_PROTECTED                    0x27\r
+               #define SCSI_ASENSE_FORMAT_ERROR                       0x31\r
+               #define SCSI_ASENSE_INVALID_COMMAND                    0x20\r
+               #define SCSI_ASENSE_LOGICAL_BLOCK_ADDRESS_OUT_OF_RANGE 0x21\r
+               #define SCSI_ASENSE_MEDIUM_NOT_PRESENT                 0x3A\r
+\r
+               #define SCSI_ASENSEQ_NO_QUALIFIER                      0x00\r
+               #define SCSI_ASENSEQ_FORMAT_COMMAND_FAILED             0x01\r
+               #define SCSI_ASENSEQ_INITIALIZING_COMMAND_REQUIRED     0x02\r
+               #define SCSI_ASENSEQ_OPERATION_IN_PROGRESS             0x07\r
+\r
+#endif\r
diff --git a/Demos/Device/LowLevel/MassStorage/MassStorage.aps b/Demos/Device/LowLevel/MassStorage/MassStorage.aps
new file mode 100644 (file)
index 0000000..483bc4c
--- /dev/null
@@ -0,0 +1 @@
+<AVRStudio><MANAGEMENT><ProjectName>MassStorage</ProjectName><Created>30-Sep-2008 14:12:09</Created><LastEdit>30-Sep-2008 14:12:25</LastEdit><ICON>241</ICON><ProjectType>0</ProjectType><Created>30-Sep-2008 14:12:09</Created><Version>4</Version><Build>4, 14, 0, 589</Build><ProjectTypeName>AVR GCC</ProjectTypeName></MANAGEMENT><CODE_CREATION><ObjectFile></ObjectFile><EntryFile></EntryFile><SaveFolder>C:\Users\Dean\Documents\Electronics\Projects\WORK\MyUSBWORK\Demos\MassStorage\</SaveFolder></CODE_CREATION><DEBUG_TARGET><CURRENT_TARGET>JTAGICE mkII</CURRENT_TARGET><CURRENT_PART>AT90USB1287.xml</CURRENT_PART><BREAKPOINTS></BREAKPOINTS><IO_EXPAND><HIDE>false</HIDE></IO_EXPAND><REGISTERNAMES><Register>R00</Register><Register>R01</Register><Register>R02</Register><Register>R03</Register><Register>R04</Register><Register>R05</Register><Register>R06</Register><Register>R07</Register><Register>R08</Register><Register>R09</Register><Register>R10</Register><Register>R11</Register><Register>R12</Register><Register>R13</Register><Register>R14</Register><Register>R15</Register><Register>R16</Register><Register>R17</Register><Register>R18</Register><Register>R19</Register><Register>R20</Register><Register>R21</Register><Register>R22</Register><Register>R23</Register><Register>R24</Register><Register>R25</Register><Register>R26</Register><Register>R27</Register><Register>R28</Register><Register>R29</Register><Register>R30</Register><Register>R31</Register></REGISTERNAMES><COM>Auto</COM><COMType>0</COMType><WATCHNUM>0</WATCHNUM><WATCHNAMES><Pane0></Pane0><Pane1></Pane1><Pane2></Pane2><Pane3></Pane3></WATCHNAMES><BreakOnTrcaeFull>0</BreakOnTrcaeFull></DEBUG_TARGET><Debugger><Triggers></Triggers></Debugger><AVRGCCPLUGIN><FILES><SOURCEFILE>DataflashManager.c</SOURCEFILE><SOURCEFILE>Descriptors.c</SOURCEFILE><SOURCEFILE>MassStorage.c</SOURCEFILE><SOURCEFILE>SCSI.c</SOURCEFILE><HEADERFILE>DataflashManager.h</HEADERFILE><HEADERFILE>Descriptors.h</HEADERFILE><HEADERFILE>MassStorage.h</HEADERFILE><HEADERFILE>SCSI.h</HEADERFILE><HEADERFILE>SCSI_Codes.h</HEADERFILE><OTHERFILE>makefile</OTHERFILE></FILES><CONFIGS><CONFIG><NAME>default</NAME><USESEXTERNALMAKEFILE>YES</USESEXTERNALMAKEFILE><EXTERNALMAKEFILE>makefile</EXTERNALMAKEFILE><PART>at90usb1287</PART><HEX>1</HEX><LIST>1</LIST><MAP>1</MAP><OUTPUTFILENAME>MassStorage.elf</OUTPUTFILENAME><OUTPUTDIR>default\</OUTPUTDIR><ISDIRTY>1</ISDIRTY><OPTIONS/><INCDIRS/><LIBDIRS/><LIBS/><LINKOBJECTS/><OPTIONSFORALL>-Wall -gdwarf-2 -std=gnu99 -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums</OPTIONSFORALL><LINKEROPTIONS></LINKEROPTIONS><SEGMENTS/></CONFIG></CONFIGS><LASTCONFIG>default</LASTCONFIG><USES_WINAVR>1</USES_WINAVR><GCC_LOC>C:\WinAVR-20080512\bin\avr-gcc.exe</GCC_LOC><MAKE_LOC>C:\WinAVR-20080512\utils\bin\make.exe</MAKE_LOC></AVRGCCPLUGIN><IOView><usergroups/><sort sorted="0" column="0" ordername="0" orderaddress="0" ordergroup="0"/></IOView><Files></Files><Events><Bookmarks></Bookmarks></Events><Trace><Filters></Filters></Trace></AVRStudio>\r
diff --git a/Demos/Device/LowLevel/MassStorage/MassStorage.c b/Demos/Device/LowLevel/MassStorage/MassStorage.c
new file mode 100644 (file)
index 0000000..72a2302
--- /dev/null
@@ -0,0 +1,370 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  Main source file for the Mass Storage demo. This file contains the main tasks of the demo and\r
+ *  is responsible for the initial application hardware configuration.\r
+ */\r
+\r
+#define  INCLUDE_FROM_MASSSTORAGE_C\r
+#include "MassStorage.h"\r
+\r
+/* Scheduler Task List */\r
+TASK_LIST\r
+{\r
+       { .Task = USB_MassStorage      , .TaskStatus = TASK_STOP },\r
+};\r
+\r
+/* Global Variables */\r
+/** Structure to hold the latest Command Block Wrapper issued by the host, containing a SCSI command to execute. */\r
+CommandBlockWrapper_t  CommandBlock;\r
+\r
+/** Structure to hold the latest Command Status Wrapper to return to the host, containing the status of the last issued command. */\r
+CommandStatusWrapper_t CommandStatus = { .Signature = CSW_SIGNATURE };\r
+\r
+/** Flag to asynchronously abort any in-progress data transfers upon the reception of a mass storage reset command. */\r
+volatile bool          IsMassStoreReset = false;\r
+\r
+/** Main program entry point. This routine configures the hardware required by the application, then\r
+ *  starts the scheduler to run the application tasks.\r
+ */\r
+int main(void)\r
+{\r
+       /* Disable watchdog if enabled by bootloader/fuses */\r
+       MCUSR &= ~(1 << WDRF);\r
+       wdt_disable();\r
+\r
+       /* Disable clock division */\r
+       clock_prescale_set(clock_div_1);\r
+\r
+       /* Hardware Initialization */\r
+       LEDs_Init();\r
+       Dataflash_Init(SPI_SPEED_FCPU_DIV_2);\r
+\r
+       /* Clear Dataflash sector protections, if enabled */\r
+       DataflashManager_ResetDataflashProtections();\r
+       \r
+       /* Indicate USB not ready */\r
+       UpdateStatus(Status_USBNotReady);\r
+       \r
+       /* Initialize Scheduler so that it can be used */\r
+       Scheduler_Init();\r
+\r
+       /* Initialize USB Subsystem */\r
+       USB_Init();\r
+\r
+       /* Scheduling - routine never returns, so put this last in the main function */\r
+       Scheduler_Start();\r
+}\r
+\r
+/** Event handler for the USB_Connect event. This indicates that the device is enumerating via the status LEDs. */\r
+void EVENT_USB_Connect(void)\r
+{\r
+       /* Indicate USB enumerating */\r
+       UpdateStatus(Status_USBEnumerating);\r
+       \r
+       /* Reset the MSReset flag upon connection */\r
+       IsMassStoreReset = false;\r
+}\r
+\r
+/** Event handler for the USB_Disconnect event. This indicates that the device is no longer connected to a host via\r
+ *  the status LEDs and stops the Mass Storage management task.\r
+ */\r
+void EVENT_USB_Disconnect(void)\r
+{\r
+       /* Stop running mass storage task */\r
+       Scheduler_SetTaskMode(USB_MassStorage, TASK_STOP);\r
+\r
+       /* Indicate USB not ready */\r
+       UpdateStatus(Status_USBNotReady);\r
+}\r
+\r
+/** Event handler for the USB_ConfigurationChanged event. This is fired when the host set the current configuration\r
+ *  of the USB device after enumeration - the device endpoints are configured and the Mass Storage management task started.\r
+ */\r
+void EVENT_USB_ConfigurationChanged(void)\r
+{\r
+       /* Setup Mass Storage In and Out Endpoints */\r
+       Endpoint_ConfigureEndpoint(MASS_STORAGE_IN_EPNUM, EP_TYPE_BULK,\r
+                                      ENDPOINT_DIR_IN, MASS_STORAGE_IO_EPSIZE,\r
+                                  ENDPOINT_BANK_DOUBLE);\r
+\r
+       Endpoint_ConfigureEndpoint(MASS_STORAGE_OUT_EPNUM, EP_TYPE_BULK,\r
+                                      ENDPOINT_DIR_OUT, MASS_STORAGE_IO_EPSIZE,\r
+                                  ENDPOINT_BANK_DOUBLE);\r
+\r
+       /* Indicate USB connected and ready */\r
+       UpdateStatus(Status_USBReady);\r
+       \r
+       /* Start mass storage task */\r
+       Scheduler_SetTaskMode(USB_MassStorage, TASK_RUN);\r
+}\r
+\r
+/** Event handler for the USB_UnhandledControlPacket event. This is used to catch standard and class specific\r
+ *  control requests that are not handled internally by the USB library (including the Mass Storage class-specific\r
+ *  requests) so that they can be handled appropriately for the application.\r
+ */\r
+void EVENT_USB_UnhandledControlPacket(void)\r
+{\r
+       /* Process UFI specific control requests */\r
+       switch (USB_ControlRequest.bRequest)\r
+       {\r
+               case REQ_MassStorageReset:\r
+                       if (USB_ControlRequest.bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE))\r
+                       {\r
+                               Endpoint_ClearSETUP();\r
+\r
+                               /* Indicate that the current transfer should be aborted */\r
+                               IsMassStoreReset = true;                        \r
+\r
+                               /* Acknowledge status stage */\r
+                               while (!(Endpoint_IsINReady()));\r
+                               Endpoint_ClearIN();\r
+                       }\r
+\r
+                       break;\r
+               case REQ_GetMaxLUN:\r
+                       if (USB_ControlRequest.bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_INTERFACE))\r
+                       {\r
+                               Endpoint_ClearSETUP();\r
+\r
+                               /* Indicate to the host the number of supported LUNs (virtual disks) on the device */\r
+                               Endpoint_Write_Byte(TOTAL_LUNS - 1);\r
+                               \r
+                               Endpoint_ClearIN();\r
+                               \r
+                               /* Acknowledge status stage */\r
+                               while (!(Endpoint_IsOUTReceived()));\r
+                               Endpoint_ClearOUT();\r
+                       }\r
+                       \r
+                       break;\r
+       }\r
+}\r
+\r
+/** Function to manage status updates to the user. This is done via LEDs on the given board, if available, but may be changed to\r
+ *  log to a serial port, or anything else that is suitable for status updates.\r
+ *\r
+ *  \param CurrentStatus  Current status of the system, from the MassStorage_StatusCodes_t enum\r
+ */\r
+void UpdateStatus(uint8_t CurrentStatus)\r
+{\r
+       uint8_t LEDMask = LEDS_NO_LEDS;\r
+       \r
+       /* Set the LED mask to the appropriate LED mask based on the given status code */\r
+       switch (CurrentStatus)\r
+       {\r
+               case Status_USBNotReady:\r
+                       LEDMask = (LEDS_LED1);\r
+                       break;\r
+               case Status_USBEnumerating:\r
+                       LEDMask = (LEDS_LED1 | LEDS_LED2);\r
+                       break;\r
+               case Status_USBReady:\r
+                       LEDMask = (LEDS_LED2 | LEDS_LED4);\r
+                       break;\r
+               case Status_CommandBlockError:\r
+                       LEDMask = (LEDS_LED1);\r
+                       break;\r
+               case Status_ProcessingCommandBlock:\r
+                       LEDMask = (LEDS_LED1 | LEDS_LED2);\r
+                       break;\r
+       }\r
+       \r
+       /* Set the board LEDs to the new LED mask */\r
+       LEDs_SetAllLEDs(LEDMask);\r
+}\r
+\r
+/** Task to manage the Mass Storage interface, reading in Command Block Wrappers from the host, processing the SCSI commands they\r
+ *  contain, and returning Command Status Wrappers back to the host to indicate the success or failure of the last issued command.\r
+ */\r
+TASK(USB_MassStorage)\r
+{\r
+       /* Check if the USB System is connected to a Host */\r
+       if (USB_IsConnected)\r
+       {\r
+               /* Select the Data Out Endpoint */\r
+               Endpoint_SelectEndpoint(MASS_STORAGE_OUT_EPNUM);\r
+               \r
+               /* Check to see if a command from the host has been issued */\r
+               if (Endpoint_IsReadWriteAllowed())\r
+               {       \r
+                       /* Indicate busy */\r
+                       UpdateStatus(Status_ProcessingCommandBlock);\r
+\r
+                       /* Process sent command block from the host */\r
+                       if (ReadInCommandBlock())\r
+                       {\r
+                               /* Check direction of command, select Data IN endpoint if data is from the device */\r
+                               if (CommandBlock.Flags & COMMAND_DIRECTION_DATA_IN)\r
+                                 Endpoint_SelectEndpoint(MASS_STORAGE_IN_EPNUM);\r
+\r
+                               /* Decode the received SCSI command */\r
+                               SCSI_DecodeSCSICommand();\r
+\r
+                               /* Load in the CBW tag into the CSW to link them together */\r
+                               CommandStatus.Tag = CommandBlock.Tag;\r
+\r
+                               /* Load in the data residue counter into the CSW */\r
+                               CommandStatus.DataTransferResidue = CommandBlock.DataTransferLength;\r
+\r
+                               /* Stall the selected data pipe if command failed (if data is still to be transferred) */\r
+                               if ((CommandStatus.Status == Command_Fail) && (CommandStatus.DataTransferResidue))\r
+                                 Endpoint_StallTransaction();\r
+\r
+                               /* Return command status block to the host */\r
+                               ReturnCommandStatus();\r
+                               \r
+                               /* Check if a Mass Storage Reset occurred */\r
+                               if (IsMassStoreReset)\r
+                               {\r
+                                       /* Reset the data endpoint banks */\r
+                                       Endpoint_ResetFIFO(MASS_STORAGE_OUT_EPNUM);\r
+                                       Endpoint_ResetFIFO(MASS_STORAGE_IN_EPNUM);\r
+                                       \r
+                                       Endpoint_SelectEndpoint(MASS_STORAGE_OUT_EPNUM);\r
+                                       Endpoint_ClearStall();\r
+                                       Endpoint_SelectEndpoint(MASS_STORAGE_IN_EPNUM);\r
+                                       Endpoint_ClearStall();\r
+\r
+                                       /* Clear the abort transfer flag */\r
+                                       IsMassStoreReset = false;\r
+                               }\r
+\r
+                               /* Indicate ready */\r
+                               UpdateStatus(Status_USBReady);\r
+                       }\r
+                       else\r
+                       {\r
+                               /* Indicate error reading in the command block from the host */\r
+                               UpdateStatus(Status_CommandBlockError);\r
+                       }\r
+               }\r
+       }\r
+}\r
+\r
+/** Function to read in a command block from the host, via the bulk data OUT endpoint. This function reads in the next command block\r
+ *  if one has been issued, and performs validation to ensure that the block command is valid.\r
+ *\r
+ *  \return Boolean true if a valid command block has been read in from the endpoint, false otherwise\r
+ */\r
+static bool ReadInCommandBlock(void)\r
+{\r
+       /* Select the Data Out endpoint */\r
+       Endpoint_SelectEndpoint(MASS_STORAGE_OUT_EPNUM);\r
+\r
+       /* Read in command block header */\r
+       Endpoint_Read_Stream_LE(&CommandBlock, (sizeof(CommandBlock) - sizeof(CommandBlock.SCSICommandData)),\r
+                               StreamCallback_AbortOnMassStoreReset);\r
+\r
+       /* Check if the current command is being aborted by the host */\r
+       if (IsMassStoreReset)\r
+         return false;\r
+\r
+       /* Verify the command block - abort if invalid */\r
+       if ((CommandBlock.Signature != CBW_SIGNATURE) ||\r
+           (CommandBlock.LUN >= TOTAL_LUNS) ||\r
+               (CommandBlock.SCSICommandLength > MAX_SCSI_COMMAND_LENGTH))\r
+       {\r
+               /* Stall both data pipes until reset by host */\r
+               Endpoint_StallTransaction();\r
+               Endpoint_SelectEndpoint(MASS_STORAGE_IN_EPNUM);\r
+               Endpoint_StallTransaction();\r
+               \r
+               return false;\r
+       }\r
+\r
+       /* Read in command block command data */\r
+       Endpoint_Read_Stream_LE(&CommandBlock.SCSICommandData,\r
+                               CommandBlock.SCSICommandLength,\r
+                               StreamCallback_AbortOnMassStoreReset);\r
+         \r
+       /* Check if the current command is being aborted by the host */\r
+       if (IsMassStoreReset)\r
+         return false;\r
+\r
+       /* Finalize the stream transfer to send the last packet */\r
+       Endpoint_ClearOUT();\r
+       \r
+       return true;\r
+}\r
+\r
+/** Returns the filled Command Status Wrapper back to the host via the bulk data IN endpoint, waiting for the host to clear any\r
+ *  stalled data endpoints as needed.\r
+ */\r
+static void ReturnCommandStatus(void)\r
+{\r
+       /* Select the Data Out endpoint */\r
+       Endpoint_SelectEndpoint(MASS_STORAGE_OUT_EPNUM);\r
+\r
+       /* While data pipe is stalled, wait until the host issues a control request to clear the stall */\r
+       while (Endpoint_IsStalled())\r
+       {\r
+               /* Check if the current command is being aborted by the host */\r
+               if (IsMassStoreReset)\r
+                 return;\r
+       }\r
+\r
+       /* Select the Data In endpoint */\r
+       Endpoint_SelectEndpoint(MASS_STORAGE_IN_EPNUM);\r
+\r
+       /* While data pipe is stalled, wait until the host issues a control request to clear the stall */\r
+       while (Endpoint_IsStalled())\r
+       {\r
+               /* Check if the current command is being aborted by the host */\r
+               if (IsMassStoreReset)\r
+                 return;\r
+       }\r
+       \r
+       /* Write the CSW to the endpoint */\r
+       Endpoint_Write_Stream_LE(&CommandStatus, sizeof(CommandStatus),\r
+                                 StreamCallback_AbortOnMassStoreReset);\r
+       \r
+       /* Check if the current command is being aborted by the host */\r
+       if (IsMassStoreReset)\r
+         return;\r
+\r
+       /* Finalize the stream transfer to send the last packet */\r
+       Endpoint_ClearIN();\r
+}\r
+\r
+/** Stream callback function for the Endpoint stream read and write functions. This callback will abort the current stream transfer\r
+ *  if a Mass Storage Reset request has been issued to the control endpoint.\r
+ */\r
+uint8_t StreamCallback_AbortOnMassStoreReset(void)\r
+{      \r
+       /* Abort if a Mass Storage reset command was received */\r
+       if (IsMassStoreReset)\r
+         return STREAMCALLBACK_Abort;\r
+       \r
+       /* Continue with the current stream operation */\r
+       return STREAMCALLBACK_Continue;\r
+}\r
diff --git a/Demos/Device/LowLevel/MassStorage/MassStorage.h b/Demos/Device/LowLevel/MassStorage/MassStorage.h
new file mode 100644 (file)
index 0000000..cbd3cd9
--- /dev/null
@@ -0,0 +1,149 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  Header file for MassStorage.c.\r
+ */\r
+\r
+#ifndef _MASS_STORAGE_H_\r
+#define _MASS_STORAGE_H_\r
+\r
+       /* Includes: */\r
+               #include <avr/io.h>\r
+               #include <avr/wdt.h>\r
+               #include <avr/power.h>\r
+\r
+               #include "Descriptors.h"\r
+\r
+               #include "Lib/SCSI.h"\r
+               #include "Lib/DataflashManager.h"\r
+\r
+               #include <LUFA/Version.h>                    // Library Version Information\r
+               #include <LUFA/Drivers/USB/USB.h>            // USB Functionality\r
+               #include <LUFA/Drivers/Board/LEDs.h>         // LEDs driver\r
+               #include <LUFA/Drivers/Board/Dataflash.h>    // Dataflash chip driver\r
+               #include <LUFA/Scheduler/Scheduler.h>        // Simple scheduler for task management\r
+\r
+       /* Macros: */\r
+               /** Mass Storage Class specific request to reset the Mass Storage interface, ready for the next command. */\r
+               #define REQ_MassStorageReset       0xFF\r
+\r
+               /** Mass Storage Class specific request to retrieve the total number of Logical Units (drives) in the SCSI device. */\r
+               #define REQ_GetMaxLUN              0xFE\r
+\r
+               /** Maximum length of a SCSI command which can be issued by the device or host in a Mass Storage bulk wrapper. */\r
+               #define MAX_SCSI_COMMAND_LENGTH    16\r
+               \r
+               /** Total number of Logical Units (drives) in the device. The total device capacity is shared equally between\r
+                *  each drive - this can be set to any positive non-zero amount.\r
+                */\r
+               #define TOTAL_LUNS                 2\r
+               \r
+               /** Blocks in each LUN, calculated from the total capacity divided by the total number of Logical Units in the device. */\r
+               #define LUN_MEDIA_BLOCKS           (VIRTUAL_MEMORY_BLOCKS / TOTAL_LUNS)    \r
+               \r
+               /** Magic signature for a Command Block Wrapper used in the Mass Storage Bulk-Only transport protocol. */\r
+               #define CBW_SIGNATURE              0x43425355UL\r
+\r
+               /** Magic signature for a Command Status Wrapper used in the Mass Storage Bulk-Only transport protocol. */\r
+               #define CSW_SIGNATURE              0x53425355UL\r
+               \r
+               /** Mask for a Command Block Wrapper's flags attribute to specify a command with data sent from host-to-device. */\r
+               #define COMMAND_DIRECTION_DATA_OUT (0 << 7)\r
+\r
+               /** Mask for a Command Block Wrapper's flags attribute to specify a command with data sent from device-to-host. */\r
+               #define COMMAND_DIRECTION_DATA_IN  (1 << 7)\r
+\r
+       /* Type defines: */\r
+               /** Type define for a Command Block Wrapper, used in the Mass Storage Bulk-Only Transport protocol. */\r
+               typedef struct\r
+               {\r
+                       uint32_t Signature; /**< Command block signature, must be CBW_SIGNATURE to indicate a valid Command Block */\r
+                       uint32_t Tag; /**< Unique command ID value, to associate a command block wrapper with its command status wrapper */\r
+                       uint32_t DataTransferLength; /** Length of the optional data portion of the issued command, in bytes */\r
+                       uint8_t  Flags; /**< Command block flags, indicating command data direction */\r
+                       uint8_t  LUN; /**< Logical Unit number this command is issued to */\r
+                       uint8_t  SCSICommandLength; /**< Length of the issued SCSI command within the SCSI command data array */\r
+                       uint8_t  SCSICommandData[MAX_SCSI_COMMAND_LENGTH]; /**< Issued SCSI command in the Command Block */\r
+               } CommandBlockWrapper_t;\r
+               \r
+               /** Type define for a Command Status Wrapper, used in the Mass Storage Bulk-Only Transport protocol. */\r
+               typedef struct\r
+               {\r
+                       uint32_t Signature; /**< Status block signature, must be CSW_SIGNATURE to indicate a valid Command Status */\r
+                       uint32_t Tag; /**< Unique command ID value, to associate a command block wrapper with its command status wrapper */\r
+                       uint32_t DataTransferResidue; /**< Number of bytes of data not processed in the SCSI command */\r
+                       uint8_t  Status; /**< Status code of the issued command - a value from the MassStorage_CommandStatusCodes_t enum */\r
+               } CommandStatusWrapper_t;\r
+               \r
+       /* Enums: */\r
+               /** Enum for the possible command status wrapper return status codes. */\r
+               enum MassStorage_CommandStatusCodes_t\r
+               {\r
+                       Command_Pass = 0, /**< Command completed with no error */\r
+                       Command_Fail = 1, /**< Command failed to complete - host may check the exact error via a SCSI REQUEST SENSE command */\r
+                       Phase_Error  = 2  /**< Command failed due to being invalid in the current phase */\r
+               };\r
+\r
+               /** Enum for the possible status codes for passing to the UpdateStatus() function. */\r
+               enum MassStorage_StatusCodes_t\r
+               {\r
+                       Status_USBNotReady            = 0, /**< USB is not ready (disconnected from a USB host) */\r
+                       Status_USBEnumerating         = 1, /**< USB interface is enumerating */\r
+                       Status_USBReady               = 2, /**< USB interface is connected and ready */\r
+                       Status_CommandBlockError      = 3, /**< Processing a SCSI command block from the host */\r
+                       Status_ProcessingCommandBlock = 4, /**< Error during the processing of a SCSI command block from the host */\r
+               };\r
+               \r
+       /* Global Variables: */\r
+               extern CommandBlockWrapper_t  CommandBlock;\r
+               extern CommandStatusWrapper_t CommandStatus;\r
+               extern volatile bool          IsMassStoreReset;\r
+\r
+       /* Task Definitions: */\r
+               TASK(USB_MassStorage);\r
+               \r
+       /* Function Prototypes: */\r
+               void EVENT_USB_Connect(void);\r
+               void EVENT_USB_Disconnect(void);\r
+               void EVENT_USB_ConfigurationChanged(void);\r
+               void EVENT_USB_UnhandledControlPacket(void);\r
+\r
+               void UpdateStatus(uint8_t CurrentStatus);\r
+\r
+               #if defined(INCLUDE_FROM_MASSSTORAGE_C)\r
+                       static bool ReadInCommandBlock(void);\r
+                       static void ReturnCommandStatus(void);\r
+               #endif\r
+\r
+               uint8_t StreamCallback_AbortOnMassStoreReset(void);\r
+\r
+#endif\r
diff --git a/Demos/Device/LowLevel/MassStorage/MassStorage.txt b/Demos/Device/LowLevel/MassStorage/MassStorage.txt
new file mode 100644 (file)
index 0000000..1d06cb6
--- /dev/null
@@ -0,0 +1,83 @@
+/** \file\r
+ *\r
+ *  This file contains special DoxyGen information for the generation of the main page and other special\r
+ *  documentation pages. It is not a project source file.\r
+ */\r
\r
+/** \mainpage Mass Storage Device Demo\r
+ *\r
+ *  \section SSec_Info USB Information:\r
+ *\r
+ *  The following table gives a rundown of the USB utilization of this demo.\r
+ *\r
+ *  <table>\r
+ *   <tr>\r
+ *    <td><b>USB Mode:</b></td>\r
+ *    <td>Device</td>\r
+ *   </tr>\r
+ *   <tr>\r
+ *    <td><b>USB Class:</b></td>\r
+ *    <td>Mass Storage Device</td>\r
+ *   </tr>\r
+ *   <tr> \r
+ *    <td><b>USB Subclass:</b></td>\r
+ *    <td>Bulk-Only Transport</td>\r
+ *   </tr>\r
+ *   <tr>\r
+ *    <td><b>Relevant Standards:</b></td>\r
+ *    <td>USBIF Mass Storage Standard</td>\r
+ *    <td>USB Bulk-Only Transport Standard</td>\r
+ *    <td>SCSI Primary Commands Specification</td>\r
+ *    <td>SCSI Block Commands Specification</td>\r
+ *   </tr>\r
+ *   <tr>\r
+ *    <td><b>Usable Speeds:</b></td>\r
+ *    <td>Full Speed Mode</td>\r
+ *   </tr>\r
+ *  </table>\r
+ *\r
+ *  \section SSec_Description Project Description: \r
+ *\r
+ *  Dual LUN Mass Storage demonstration application. This gives a simple\r
+ *  reference application for implementing a multiple LUN USB Mass Storage\r
+ *  device using the basic USB UFI drivers in all modern OSes (i.e. no\r
+ *  special drivers required).\r
+ *  \r
+ *  On start-up the system will automatically enumerate and function as an\r
+ *  external mass storage device with two LUNs (separate disks) which may\r
+ *  be formatted and used in the same manner as commercial USB Mass Storage\r
+ *  devices.\r
+ *     \r
+ *  You will need to format the mass storage drives upon first run of this\r
+ *  demonstration - as the device acts only as a data block transport between\r
+ *  the host and the storage media, it does not matter what file system is used,\r
+ *  as the data interpretation is performed by the host and not the USB device.\r
+ *  \r
+ *  This demo is not restricted to only two LUNs; by changing the TOTAL_LUNS\r
+ *  value in MassStorageDualLUN.h, any number of LUNs can be used (from 1 to\r
+ *  255), with each LUN being allocated an equal portion of the available\r
+ *  Dataflash memory.\r
+ *\r
+ *  The USB control endpoint is managed entirely by the library using endpoint\r
+ *  interrupts, as the INTERRUPT_CONTROL_ENDPOINT option is enabled. This allows for\r
+ *  the host to reset the Mass Storage device state during long transfers without\r
+ *  the need for complicated polling logic.\r
+ *\r
+ *  \section SSec_Options Project Options\r
+ *\r
+ *  The following defines can be found in this demo, which can control the demo behaviour when defined, or changed in value.\r
+ *\r
+ *  <table>\r
+ *   <tr>\r
+ *    <td><b>Define Name:</b></td>\r
+ *    <td><b>Location:</b></td>\r
+ *    <td><b>Description:</b></td>\r
+ *   </tr>\r
+ *   <tr>\r
+ *    <td>TOTAL_LUNS</td>\r
+ *    <td>MassStorage.h</td>\r
+ *    <td>Total number of Logical Units (drives) in the device. The total device capacity is shared equally between each drive\r
+ *        - this can be set to any positive non-zero amount.</td>\r
+ *   </tr>\r
+ *  </table>\r
+ */\r
diff --git a/Demos/Device/LowLevel/MassStorage/makefile b/Demos/Device/LowLevel/MassStorage/makefile
new file mode 100644 (file)
index 0000000..93f8957
--- /dev/null
@@ -0,0 +1,737 @@
+# Hey Emacs, this is a -*- makefile -*-\r
+#----------------------------------------------------------------------------\r
+# WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al.\r
+#  >> Modified for use with the LUFA project. <<\r
+#\r
+# Released to the Public Domain\r
+#\r
+# Additional material for this makefile was written by:\r
+# Peter Fleury\r
+# Tim Henigan\r
+# Colin O'Flynn\r
+# Reiner Patommel\r
+# Markus Pfaff\r
+# Sander Pool\r
+# Frederik Rouleau\r
+# Carlos Lamas\r
+# Dean Camera\r
+# Opendous Inc.\r
+# Denver Gingerich\r
+#\r
+#----------------------------------------------------------------------------\r
+# On command line:\r
+#\r
+# make all = Make software.\r
+#\r
+# make clean = Clean out built project files.\r
+#\r
+# make coff = Convert ELF to AVR COFF.\r
+#\r
+# make extcoff = Convert ELF to AVR Extended COFF.\r
+#\r
+# make program = Download the hex file to the device, using avrdude.\r
+#                Please customize the avrdude settings below first!\r
+#\r
+# make dfu = Download the hex file to the device, using dfu-programmer (must\r
+#            have dfu-programmer installed).\r
+#\r
+# make flip = Download the hex file to the device, using Atmel FLIP (must\r
+#             have Atmel FLIP installed).\r
+#\r
+# make dfu-ee = Download the eeprom file to the device, using dfu-programmer\r
+#               (must have dfu-programmer installed).\r
+#\r
+# make flip-ee = Download the eeprom file to the device, using Atmel FLIP\r
+#                (must have Atmel FLIP installed).\r
+#\r
+# make doxygen = Generate DoxyGen documentation for the project (must have\r
+#                DoxyGen installed)\r
+#\r
+# make debug = Start either simulavr or avarice as specified for debugging, \r
+#              with avr-gdb or avr-insight as the front end for debugging.\r
+#\r
+# make filename.s = Just compile filename.c into the assembler code only.\r
+#\r
+# make filename.i = Create a preprocessed source file for use in submitting\r
+#                   bug reports to the GCC project.\r
+#\r
+# To rebuild project do "make clean" then "make all".\r
+#----------------------------------------------------------------------------\r
+\r
+\r
+# MCU name\r
+MCU = at90usb1287\r
+\r
+\r
+# Target board (see library "Board Types" documentation, USER or blank for projects not requiring\r
+# LUFA board drivers). If USER is selected, put custom board drivers in a directory called \r
+# "Board" inside the application directory.\r
+BOARD  = USBKEY\r
+\r
+\r
+# Processor frequency.\r
+#     This will define a symbol, F_CPU, in all source code files equal to the \r
+#     processor frequency. You can then use this symbol in your source code to \r
+#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done\r
+#     automatically to create a 32-bit value in your source code.\r
+#     Typical values are:\r
+#         F_CPU =  1000000\r
+#         F_CPU =  1843200\r
+#         F_CPU =  2000000\r
+#         F_CPU =  3686400\r
+#         F_CPU =  4000000\r
+#         F_CPU =  7372800\r
+#         F_CPU =  8000000\r
+#         F_CPU = 11059200\r
+#         F_CPU = 14745600\r
+#         F_CPU = 16000000\r
+#         F_CPU = 18432000\r
+#         F_CPU = 20000000\r
+F_CPU = 8000000\r
+\r
+\r
+# Input clock frequency.\r
+#     This will define a symbol, F_CLOCK, in all source code files equal to the \r
+#     input clock frequency (before any prescaling is performed). This value may\r
+#     differ from F_CPU if prescaling is used on the latter, and is required as the\r
+#     raw input clock is fed directly to the PLL sections of the AVR for high speed\r
+#     clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'\r
+#     at the end, this will be done automatically to create a 32-bit value in your\r
+#     source code.\r
+#\r
+#     If no clock division is performed on the input clock inside the AVR (via the\r
+#     CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.\r
+F_CLOCK = 8000000\r
+\r
+\r
+# Output format. (can be srec, ihex, binary)\r
+FORMAT = ihex\r
+\r
+\r
+# Target file name (without extension).\r
+TARGET = MassStorage\r
+\r
+\r
+# Object files directory\r
+#     To put object files in current directory, use a dot (.), do NOT make\r
+#     this an empty or blank macro!\r
+OBJDIR = .\r
+\r
+\r
+# Path to the LUFA library\r
+LUFA_PATH = ../../..\r
+\r
+\r
+# List C source files here. (C dependencies are automatically generated.)\r
+SRC = $(TARGET).c                                                 \\r
+         Descriptors.c                                               \\r
+         Lib/SCSI.c                                                  \\r
+         Lib/DataflashManager.c                                      \\r
+         $(LUFA_PATH)/LUFA/Scheduler/Scheduler.c                     \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/DevChapter9.c        \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Endpoint.c           \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Host.c               \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/HostChapter9.c       \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/LowLevel.c           \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Pipe.c               \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/Events.c            \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBInterrupt.c      \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBTask.c           \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/ConfigDescriptor.c  \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/Class/HIDParser.c             \\r
+\r
+\r
+# List C++ source files here. (C dependencies are automatically generated.)\r
+CPPSRC = \r
+\r
+\r
+# List Assembler source files here.\r
+#     Make them always end in a capital .S.  Files ending in a lowercase .s\r
+#     will not be considered source files but generated files (assembler\r
+#     output from the compiler), and will be deleted upon "make clean"!\r
+#     Even though the DOS/Win* filesystem matches both .s and .S the same,\r
+#     it will preserve the spelling of the filenames, and gcc itself does\r
+#     care about how the name is spelled on its command-line.\r
+ASRC =\r
+\r
+\r
+# Optimization level, can be [0, 1, 2, 3, s]. \r
+#     0 = turn off optimization. s = optimize for size.\r
+#     (Note: 3 is not always the best optimization level. See avr-libc FAQ.)\r
+OPT = s\r
+\r
+\r
+# Debugging format.\r
+#     Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs.\r
+#     AVR Studio 4.10 requires dwarf-2.\r
+#     AVR [Extended] COFF format requires stabs, plus an avr-objcopy run.\r
+DEBUG = dwarf-2\r
+\r
+\r
+# List any extra directories to look for include files here.\r
+#     Each directory must be seperated by a space.\r
+#     Use forward slashes for directory separators.\r
+#     For a directory that has spaces, enclose it in quotes.\r
+EXTRAINCDIRS = $(LUFA_PATH)/\r
+\r
+\r
+# Compiler flag to set the C Standard level.\r
+#     c89   = "ANSI" C\r
+#     gnu89 = c89 plus GCC extensions\r
+#     c99   = ISO C99 standard (not yet fully implemented)\r
+#     gnu99 = c99 plus GCC extensions\r
+CSTANDARD = -std=gnu99\r
+\r
+\r
+# Place -D or -U options here for C sources\r
+CDEFS  = -DF_CPU=$(F_CPU)UL -DF_CLOCK=$(F_CLOCK)UL -DBOARD=BOARD_$(BOARD)\r
+CDEFS += -DUSE_NONSTANDARD_DESCRIPTOR_NAMES -DUSB_DEVICE_ONLY\r
+CDEFS += -DFIXED_CONTROL_ENDPOINT_SIZE=8 -DUSE_SINGLE_DEVICE_CONFIGURATION\r
+CDEFS += -DUSE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)"\r
+CDEFS += -DINTERRUPT_CONTROL_ENDPOINT\r
+\r
+\r
+# Place -D or -U options here for ASM sources\r
+ADEFS = -DF_CPU=$(F_CPU)\r
+\r
+\r
+# Place -D or -U options here for C++ sources\r
+CPPDEFS = -DF_CPU=$(F_CPU)UL\r
+#CPPDEFS += -D__STDC_LIMIT_MACROS\r
+#CPPDEFS += -D__STDC_CONSTANT_MACROS\r
+\r
+\r
+\r
+#---------------- Compiler Options C ----------------\r
+#  -g*:          generate debugging information\r
+#  -O*:          optimization level\r
+#  -f...:        tuning, see GCC manual and avr-libc documentation\r
+#  -Wall...:     warning level\r
+#  -Wa,...:      tell GCC to pass this to the assembler.\r
+#    -adhlns...: create assembler listing\r
+CFLAGS = -g$(DEBUG)\r
+CFLAGS += $(CDEFS)\r
+CFLAGS += -O$(OPT)\r
+CFLAGS += -funsigned-char\r
+CFLAGS += -funsigned-bitfields\r
+CFLAGS += -ffunction-sections\r
+CFLAGS += -fpack-struct\r
+CFLAGS += -fshort-enums\r
+CFLAGS += -finline-limit=20\r
+CFLAGS += -Wall\r
+CFLAGS += -Wstrict-prototypes\r
+CFLAGS += -Wundef\r
+#CFLAGS += -fno-unit-at-a-time\r
+#CFLAGS += -Wunreachable-code\r
+#CFLAGS += -Wsign-compare\r
+CFLAGS += -Wa,-adhlns=$(<:%.c=$(OBJDIR)/%.lst)\r
+CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))\r
+CFLAGS += $(CSTANDARD)\r
+\r
+\r
+#---------------- Compiler Options C++ ----------------\r
+#  -g*:          generate debugging information\r
+#  -O*:          optimization level\r
+#  -f...:        tuning, see GCC manual and avr-libc documentation\r
+#  -Wall...:     warning level\r
+#  -Wa,...:      tell GCC to pass this to the assembler.\r
+#    -adhlns...: create assembler listing\r
+CPPFLAGS = -g$(DEBUG)\r
+CPPFLAGS += $(CPPDEFS)\r
+CPPFLAGS += -O$(OPT)\r
+CPPFLAGS += -funsigned-char\r
+CPPFLAGS += -funsigned-bitfields\r
+CPPFLAGS += -fpack-struct\r
+CPPFLAGS += -fshort-enums\r
+CPPFLAGS += -fno-exceptions\r
+CPPFLAGS += -Wall\r
+CFLAGS += -Wundef\r
+#CPPFLAGS += -mshort-calls\r
+#CPPFLAGS += -fno-unit-at-a-time\r
+#CPPFLAGS += -Wstrict-prototypes\r
+#CPPFLAGS += -Wunreachable-code\r
+#CPPFLAGS += -Wsign-compare\r
+CPPFLAGS += -Wa,-adhlns=$(<:%.cpp=$(OBJDIR)/%.lst)\r
+CPPFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))\r
+#CPPFLAGS += $(CSTANDARD)\r
+\r
+\r
+#---------------- Assembler Options ----------------\r
+#  -Wa,...:   tell GCC to pass this to the assembler.\r
+#  -adhlns:   create listing\r
+#  -gstabs:   have the assembler create line number information; note that\r
+#             for use in COFF files, additional information about filenames\r
+#             and function names needs to be present in the assembler source\r
+#             files -- see avr-libc docs [FIXME: not yet described there]\r
+#  -listing-cont-lines: Sets the maximum number of continuation lines of hex \r
+#       dump that will be displayed for a given single line of source input.\r
+ASFLAGS = $(ADEFS) -Wa,-adhlns=$(<:%.S=$(OBJDIR)/%.lst),-gstabs,--listing-cont-lines=100\r
+\r
+\r
+#---------------- Library Options ----------------\r
+# Minimalistic printf version\r
+PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min\r
+\r
+# Floating point printf version (requires MATH_LIB = -lm below)\r
+PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt\r
+\r
+# If this is left blank, then it will use the Standard printf version.\r
+PRINTF_LIB = \r
+#PRINTF_LIB = $(PRINTF_LIB_MIN)\r
+#PRINTF_LIB = $(PRINTF_LIB_FLOAT)\r
+\r
+\r
+# Minimalistic scanf version\r
+SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min\r
+\r
+# Floating point + %[ scanf version (requires MATH_LIB = -lm below)\r
+SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt\r
+\r
+# If this is left blank, then it will use the Standard scanf version.\r
+SCANF_LIB = \r
+#SCANF_LIB = $(SCANF_LIB_MIN)\r
+#SCANF_LIB = $(SCANF_LIB_FLOAT)\r
+\r
+\r
+MATH_LIB = -lm\r
+\r
+\r
+# List any extra directories to look for libraries here.\r
+#     Each directory must be seperated by a space.\r
+#     Use forward slashes for directory separators.\r
+#     For a directory that has spaces, enclose it in quotes.\r
+EXTRALIBDIRS = \r
+\r
+\r
+\r
+#---------------- External Memory Options ----------------\r
+\r
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),\r
+# used for variables (.data/.bss) and heap (malloc()).\r
+#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff\r
+\r
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),\r
+# only used for heap (malloc()).\r
+#EXTMEMOPTS = -Wl,--section-start,.data=0x801100,--defsym=__heap_end=0x80ffff\r
+\r
+EXTMEMOPTS =\r
+\r
+\r
+\r
+#---------------- Linker Options ----------------\r
+#  -Wl,...:     tell GCC to pass this to linker.\r
+#    -Map:      create map file\r
+#    --cref:    add cross reference to  map file\r
+LDFLAGS = -Wl,-Map=$(TARGET).map,--cref\r
+LDFLAGS += -Wl,--relax\r
+LDFLAGS += -Wl,--gc-sections\r
+LDFLAGS += $(EXTMEMOPTS)\r
+LDFLAGS += $(patsubst %,-L%,$(EXTRALIBDIRS))\r
+LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)\r
+#LDFLAGS += -T linker_script.x\r
+\r
+\r
+\r
+#---------------- Programming Options (avrdude) ----------------\r
+\r
+# Programming hardware: alf avr910 avrisp bascom bsd \r
+# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500\r
+#\r
+# Type: avrdude -c ?\r
+# to get a full listing.\r
+#\r
+AVRDUDE_PROGRAMMER = jtagmkII\r
+\r
+# com1 = serial port. Use lpt1 to connect to parallel port.\r
+AVRDUDE_PORT = usb\r
+\r
+AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex\r
+#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep\r
+\r
+\r
+# Uncomment the following if you want avrdude's erase cycle counter.\r
+# Note that this counter needs to be initialized first using -Yn,\r
+# see avrdude manual.\r
+#AVRDUDE_ERASE_COUNTER = -y\r
+\r
+# Uncomment the following if you do /not/ wish a verification to be\r
+# performed after programming the device.\r
+#AVRDUDE_NO_VERIFY = -V\r
+\r
+# Increase verbosity level.  Please use this when submitting bug\r
+# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude> \r
+# to submit bug reports.\r
+#AVRDUDE_VERBOSE = -v -v\r
+\r
+AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)\r
+AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY)\r
+AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE)\r
+AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER)\r
+\r
+\r
+\r
+#---------------- Debugging Options ----------------\r
+\r
+# For simulavr only - target MCU frequency.\r
+DEBUG_MFREQ = $(F_CPU)\r
+\r
+# Set the DEBUG_UI to either gdb or insight.\r
+# DEBUG_UI = gdb\r
+DEBUG_UI = insight\r
+\r
+# Set the debugging back-end to either avarice, simulavr.\r
+DEBUG_BACKEND = avarice\r
+#DEBUG_BACKEND = simulavr\r
+\r
+# GDB Init Filename.\r
+GDBINIT_FILE = __avr_gdbinit\r
+\r
+# When using avarice settings for the JTAG\r
+JTAG_DEV = /dev/com1\r
+\r
+# Debugging port used to communicate between GDB / avarice / simulavr.\r
+DEBUG_PORT = 4242\r
+\r
+# Debugging host used to communicate between GDB / avarice / simulavr, normally\r
+#     just set to localhost unless doing some sort of crazy debugging when \r
+#     avarice is running on a different computer.\r
+DEBUG_HOST = localhost\r
+\r
+\r
+\r
+#============================================================================\r
+\r
+\r
+# Define programs and commands.\r
+SHELL = sh\r
+CC = avr-gcc\r
+OBJCOPY = avr-objcopy\r
+OBJDUMP = avr-objdump\r
+SIZE = avr-size\r
+AR = avr-ar rcs\r
+NM = avr-nm\r
+AVRDUDE = avrdude\r
+REMOVE = rm -f\r
+REMOVEDIR = rm -rf\r
+COPY = cp\r
+WINSHELL = cmd\r
+\r
+# Define Messages\r
+# English\r
+MSG_ERRORS_NONE = Errors: none\r
+MSG_BEGIN = -------- begin --------\r
+MSG_END = --------  end  --------\r
+MSG_SIZE_BEFORE = Size before: \r
+MSG_SIZE_AFTER = Size after:\r
+MSG_COFF = Converting to AVR COFF:\r
+MSG_EXTENDED_COFF = Converting to AVR Extended COFF:\r
+MSG_FLASH = Creating load file for Flash:\r
+MSG_EEPROM = Creating load file for EEPROM:\r
+MSG_EXTENDED_LISTING = Creating Extended Listing:\r
+MSG_SYMBOL_TABLE = Creating Symbol Table:\r
+MSG_LINKING = Linking:\r
+MSG_COMPILING = Compiling C:\r
+MSG_COMPILING_CPP = Compiling C++:\r
+MSG_ASSEMBLING = Assembling:\r
+MSG_CLEANING = Cleaning project:\r
+MSG_CREATING_LIBRARY = Creating library:\r
+\r
+\r
+\r
+\r
+# Define all object files.\r
+OBJ = $(SRC:%.c=$(OBJDIR)/%.o) $(CPPSRC:%.cpp=$(OBJDIR)/%.o) $(ASRC:%.S=$(OBJDIR)/%.o) \r
+\r
+# Define all listing files.\r
+LST = $(SRC:%.c=$(OBJDIR)/%.lst) $(CPPSRC:%.cpp=$(OBJDIR)/%.lst) $(ASRC:%.S=$(OBJDIR)/%.lst) \r
+\r
+\r
+# Compiler flags to generate dependency files.\r
+GENDEPFLAGS = -MMD -MP -MF .dep/$(@F).d\r
+\r
+\r
+# Combine all necessary flags and optional flags.\r
+# Add target processor to flags.\r
+ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS)\r
+ALL_CPPFLAGS = -mmcu=$(MCU) -I. -x c++ $(CPPFLAGS) $(GENDEPFLAGS)\r
+ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)\r
+\r
+\r
+\r
+\r
+\r
+# Default target.\r
+all: begin gccversion sizebefore build checkhooks checklibmode checkboard sizeafter end\r
+\r
+# Change the build target to build a HEX file or a library.\r
+build: elf hex eep lss sym\r
+#build: lib\r
+\r
+\r
+elf: $(TARGET).elf\r
+hex: $(TARGET).hex\r
+eep: $(TARGET).eep\r
+lss: $(TARGET).lss\r
+sym: $(TARGET).sym\r
+LIBNAME=lib$(TARGET).a\r
+lib: $(LIBNAME)\r
+\r
+\r
+\r
+# Eye candy.\r
+# AVR Studio 3.x does not check make's exit code but relies on\r
+# the following magic strings to be generated by the compile job.\r
+begin:\r
+       @echo\r
+       @echo $(MSG_BEGIN)\r
+\r
+end:\r
+       @echo $(MSG_END)\r
+       @echo\r
+\r
+\r
+# Display size of file.\r
+HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex\r
+ELFSIZE = $(SIZE) $(MCU_FLAG) $(FORMAT_FLAG) $(TARGET).elf\r
+MCU_FLAG = $(shell $(SIZE) --help | grep -- --mcu > /dev/null && echo --mcu=$(MCU) )\r
+FORMAT_FLAG = $(shell $(SIZE) --help | grep -- --format=.*avr > /dev/null && echo --format=avr )\r
+\r
+sizebefore:\r
+       @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \\r
+       2>/dev/null; echo; fi\r
+\r
+sizeafter:\r
+       @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \\r
+       2>/dev/null; echo; fi\r
+\r
+checkhooks: build\r
+       @echo\r
+       @echo ------- Unhooked LUFA Events -------\r
+       @$(shell) (grep -s '^EVENT_.*LUFA/.*\\.o' $(TARGET).map | \\r
+                  cut -d' ' -f1 | cut -d'_' -f2- | grep ".*") || \\r
+                          echo "(None)"\r
+       @echo ------------------------------------\r
+\r
+checklibmode:\r
+       @echo\r
+       @echo ----------- Library Mode -----------\r
+       @$(shell) ($(CC) $(ALL_CFLAGS) -E -dM - < /dev/null \\r
+                 | grep 'USB_\(DEVICE\|HOST\)_ONLY' | cut -d' ' -f2 | grep ".*") \\r
+                 || echo "No specific mode (both device and host mode allowable)."\r
+       @echo ------------------------------------\r
+\r
+checkboard:\r
+       @echo\r
+       @echo ---------- Selected Board ----------\r
+       @echo Selected board model is $(BOARD).\r
+       @echo ------------------------------------\r
+       \r
+# Display compiler version information.\r
+gccversion : \r
+       @$(CC) --version\r
+\r
+\r
+\r
+# Program the device.  \r
+program: $(TARGET).hex $(TARGET).eep\r
+       $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)\r
+\r
+flip: $(TARGET).hex\r
+       batchisp -hardware usb -device $(MCU) -operation erase f\r
+       batchisp -hardware usb -device $(MCU) -operation loadbuffer $(TARGET).hex program\r
+       batchisp -hardware usb -device $(MCU) -operation start reset 0\r
+\r
+dfu: $(TARGET).hex\r
+       dfu-programmer $(MCU) erase\r
+       dfu-programmer $(MCU) flash --debug 1 $(TARGET).hex\r
+       dfu-programmer $(MCU) reset\r
+\r
+flip-ee: $(TARGET).hex $(TARGET).eep\r
+       copy $(TARGET).eep $(TARGET)eep.hex\r
+       batchisp -hardware usb -device $(MCU) -operation memory EEPROM erase\r
+       batchisp -hardware usb -device $(MCU) -operation memory EEPROM loadbuffer $(TARGET)eep.hex program\r
+       batchisp -hardware usb -device $(MCU) -operation start reset 0\r
+\r
+dfu-ee: $(TARGET).hex $(TARGET).eep\r
+       dfu-programmer $(MCU) flash-eeprom --debug 1 --suppress-bootloader-mem $(TARGET).eep\r
+       dfu-programmer $(MCU) reset\r
+\r
+\r
+# Generate avr-gdb config/init file which does the following:\r
+#     define the reset signal, load the target file, connect to target, and set \r
+#     a breakpoint at main().\r
+gdb-config: \r
+       @$(REMOVE) $(GDBINIT_FILE)\r
+       @echo define reset >> $(GDBINIT_FILE)\r
+       @echo SIGNAL SIGHUP >> $(GDBINIT_FILE)\r
+       @echo end >> $(GDBINIT_FILE)\r
+       @echo file $(TARGET).elf >> $(GDBINIT_FILE)\r
+       @echo target remote $(DEBUG_HOST):$(DEBUG_PORT)  >> $(GDBINIT_FILE)\r
+ifeq ($(DEBUG_BACKEND),simulavr)\r
+       @echo load  >> $(GDBINIT_FILE)\r
+endif\r
+       @echo break main >> $(GDBINIT_FILE)\r
+\r
+debug: gdb-config $(TARGET).elf\r
+ifeq ($(DEBUG_BACKEND), avarice)\r
+       @echo Starting AVaRICE - Press enter when "waiting to connect" message displays.\r
+       @$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \\r
+       $(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT)\r
+       @$(WINSHELL) /c pause\r
+\r
+else\r
+       @$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \\r
+       $(DEBUG_MFREQ) --port $(DEBUG_PORT)\r
+endif\r
+       @$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE)\r
+\r
+\r
+\r
+\r
+# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.\r
+COFFCONVERT = $(OBJCOPY) --debugging\r
+COFFCONVERT += --change-section-address .data-0x800000\r
+COFFCONVERT += --change-section-address .bss-0x800000\r
+COFFCONVERT += --change-section-address .noinit-0x800000\r
+COFFCONVERT += --change-section-address .eeprom-0x810000\r
+\r
+\r
+\r
+coff: $(TARGET).elf\r
+       @echo\r
+       @echo $(MSG_COFF) $(TARGET).cof\r
+       $(COFFCONVERT) -O coff-avr $< $(TARGET).cof\r
+\r
+\r
+extcoff: $(TARGET).elf\r
+       @echo\r
+       @echo $(MSG_EXTENDED_COFF) $(TARGET).cof\r
+       $(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof\r
+\r
+\r
+\r
+# Create final output files (.hex, .eep) from ELF output file.\r
+%.hex: %.elf\r
+       @echo\r
+       @echo $(MSG_FLASH) $@\r
+       $(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@\r
+\r
+%.eep: %.elf\r
+       @echo\r
+       @echo $(MSG_EEPROM) $@\r
+       -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \\r
+       --change-section-lma .eeprom=0 --no-change-warnings -O $(FORMAT) $< $@ || exit 0\r
+\r
+# Create extended listing file from ELF output file.\r
+%.lss: %.elf\r
+       @echo\r
+       @echo $(MSG_EXTENDED_LISTING) $@\r
+       $(OBJDUMP) -h -z -S $< > $@\r
+\r
+# Create a symbol table from ELF output file.\r
+%.sym: %.elf\r
+       @echo\r
+       @echo $(MSG_SYMBOL_TABLE) $@\r
+       $(NM) -n $< > $@\r
+\r
+\r
+\r
+# Create library from object files.\r
+.SECONDARY : $(TARGET).a\r
+.PRECIOUS : $(OBJ)\r
+%.a: $(OBJ)\r
+       @echo\r
+       @echo $(MSG_CREATING_LIBRARY) $@\r
+       $(AR) $@ $(OBJ)\r
+\r
+\r
+# Link: create ELF output file from object files.\r
+.SECONDARY : $(TARGET).elf\r
+.PRECIOUS : $(OBJ)\r
+%.elf: $(OBJ)\r
+       @echo\r
+       @echo $(MSG_LINKING) $@\r
+       $(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)\r
+\r
+\r
+# Compile: create object files from C source files.\r
+$(OBJDIR)/%.o : %.c\r
+       @echo\r
+       @echo $(MSG_COMPILING) $<\r
+       $(CC) -c $(ALL_CFLAGS) $< -o $@ \r
+\r
+\r
+# Compile: create object files from C++ source files.\r
+$(OBJDIR)/%.o : %.cpp\r
+       @echo\r
+       @echo $(MSG_COMPILING_CPP) $<\r
+       $(CC) -c $(ALL_CPPFLAGS) $< -o $@ \r
+\r
+\r
+# Compile: create assembler files from C source files.\r
+%.s : %.c\r
+       $(CC) -S $(ALL_CFLAGS) $< -o $@\r
+\r
+\r
+# Compile: create assembler files from C++ source files.\r
+%.s : %.cpp\r
+       $(CC) -S $(ALL_CPPFLAGS) $< -o $@\r
+\r
+\r
+# Assemble: create object files from assembler source files.\r
+$(OBJDIR)/%.o : %.S\r
+       @echo\r
+       @echo $(MSG_ASSEMBLING) $<\r
+       $(CC) -c $(ALL_ASFLAGS) $< -o $@\r
+\r
+\r
+# Create preprocessed source for use in sending a bug report.\r
+%.i : %.c\r
+       $(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ \r
+       \r
+\r
+# Target: clean project.\r
+clean: begin clean_list clean_binary end\r
+\r
+clean_binary:\r
+       $(REMOVE) $(TARGET).hex\r
+       \r
+clean_list:\r
+       @echo $(MSG_CLEANING)\r
+       $(REMOVE) $(TARGET).eep\r
+       $(REMOVE) $(TARGET)eep.hex\r
+       $(REMOVE) $(TARGET).cof\r
+       $(REMOVE) $(TARGET).elf\r
+       $(REMOVE) $(TARGET).map\r
+       $(REMOVE) $(TARGET).sym\r
+       $(REMOVE) $(TARGET).lss\r
+       $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.o)\r
+       $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.lst)\r
+       $(REMOVE) $(SRC:.c=.s)\r
+       $(REMOVE) $(SRC:.c=.d)\r
+       $(REMOVE) $(SRC:.c=.i)\r
+       $(REMOVEDIR) .dep\r
+\r
+\r
+doxygen:\r
+       @echo Generating Project Documentation...\r
+       @doxygen Doxygen.conf\r
+       @echo Documentation Generation Complete.\r
+\r
+clean_doxygen:\r
+       rm -rf Documentation\r
+\r
+# Create object files directory\r
+$(shell mkdir $(OBJDIR) 2>/dev/null)\r
+\r
+\r
+# Include the dependency files.\r
+-include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)\r
+\r
+\r
+# Listing of phony targets.\r
+.PHONY : all checkhooks checklibmode checkboard   \\r
+begin finish end sizebefore sizeafter gccversion  \\r
+build elf hex eep lss sym coff extcoff clean      \\r
+clean_list clean_binary program debug gdb-config  \\r
+doxygen dfu flip flip-ee dfu-ee
\ No newline at end of file
diff --git a/Demos/Device/LowLevel/Mouse/Descriptors.c b/Demos/Device/LowLevel/Mouse/Descriptors.c
new file mode 100644 (file)
index 0000000..8ac4570
--- /dev/null
@@ -0,0 +1,251 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  USB Device Descriptors, for library use when in USB device mode. Descriptors are special \r
+ *  computer-readable structures which the host requests upon device enumeration, to determine\r
+ *  the device's capabilities and functions.  \r
+ */\r
+\r
+#include "Descriptors.h"\r
+\r
+/** HID class report descriptor. This is a special descriptor constructed with values from the\r
+ *  USBIF HID class specification to describe the reports and capabilities of the HID device. This\r
+ *  descriptor is parsed by the host and its contents used to determine what data (and in what encoding)\r
+ *  the device will send, and what it may be sent back from the host. Refer to the HID specification for\r
+ *  more details on HID report descriptors.\r
+ */\r
+USB_Descriptor_HIDReport_Datatype_t PROGMEM MouseReport[] =\r
+{\r
+       0x05, 0x01,          /* Usage Page (Generic Desktop)             */\r
+       0x09, 0x02,          /* Usage (Mouse)                            */\r
+       0xA1, 0x01,          /* Collection (Application)                 */\r
+       0x09, 0x01,          /*   Usage (Pointer)                        */\r
+       0xA1, 0x00,          /*   Collection (Application)               */\r
+       0x95, 0x03,          /*     Report Count (3)                     */\r
+       0x75, 0x01,          /*     Report Size (1)                      */\r
+       0x05, 0x09,          /*     Usage Page (Button)                  */\r
+       0x19, 0x01,          /*     Usage Minimum (Button 1)             */\r
+       0x29, 0x03,          /*     Usage Maximum (Button 3)             */\r
+       0x15, 0x00,          /*     Logical Minimum (0)                  */\r
+       0x25, 0x01,          /*     Logical Maximum (1)                  */\r
+       0x81, 0x02,          /*     Input (Data, Variable, Absolute)     */\r
+       0x95, 0x01,          /*     Report Count (1)                     */\r
+       0x75, 0x05,          /*     Report Size (5)                      */\r
+       0x81, 0x01,          /*     Input (Constant)                     */\r
+       0x75, 0x08,          /*     Report Size (8)                      */\r
+       0x95, 0x02,          /*     Report Count (2)                     */\r
+       0x05, 0x01,          /*     Usage Page (Generic Desktop Control) */\r
+       0x09, 0x30,          /*     Usage X                              */\r
+       0x09, 0x31,          /*     Usage Y                              */\r
+       0x15, 0x81,          /*     Logical Minimum (-127)               */\r
+       0x25, 0x7F,          /*     Logical Maximum (127)                */\r
+       0x81, 0x06,          /*     Input (Data, Variable, Relative)     */\r
+       0xC0,                /*   End Collection                         */\r
+       0xC0                 /* End Collection                           */\r
+};\r
+\r
+/** Device descriptor structure. This descriptor, located in FLASH memory, describes the overall\r
+ *  device characteristics, including the supported USB version, control endpoint size and the\r
+ *  number of device configurations. The descriptor is read out by the USB host when the enumeration\r
+ *  process begins.\r
+ */\r
+USB_Descriptor_Device_t PROGMEM DeviceDescriptor =\r
+{\r
+       .Header                 = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device},\r
+               \r
+       .USBSpecification       = VERSION_BCD(01.10),\r
+       .Class                  = 0x00,\r
+       .SubClass               = 0x00,\r
+       .Protocol               = 0x00,\r
+                               \r
+       .Endpoint0Size          = FIXED_CONTROL_ENDPOINT_SIZE,\r
+               \r
+       .VendorID               = 0x03EB,\r
+       .ProductID              = 0x2041,\r
+       .ReleaseNumber          = 0x0000,\r
+               \r
+       .ManufacturerStrIndex   = 0x01,\r
+       .ProductStrIndex        = 0x02,\r
+       .SerialNumStrIndex      = NO_DESCRIPTOR,\r
+               \r
+       .NumberOfConfigurations = 1\r
+};\r
+\r
+/** Configuration descriptor structure. This descriptor, located in FLASH memory, describes the usage\r
+ *  of the device in one of its supported configurations, including information about any device interfaces\r
+ *  and endpoints. The descriptor is read out by the USB host during the enumeration process when selecting\r
+ *  a configuration so that the host may correctly communicate with the USB device.\r
+ */\r
+USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =\r
+{\r
+       .Config = \r
+               {\r
+                       .Header                 = {.Size = sizeof(USB_Descriptor_Configuration_Header_t), .Type = DTYPE_Configuration},\r
+\r
+                       .TotalConfigurationSize = sizeof(USB_Descriptor_Configuration_t),\r
+                       .TotalInterfaces        = 1,\r
+                               \r
+                       .ConfigurationNumber    = 1,\r
+                       .ConfigurationStrIndex  = NO_DESCRIPTOR,\r
+                               \r
+                       .ConfigAttributes       = (USB_CONFIG_ATTR_BUSPOWERED | USB_CONFIG_ATTR_SELFPOWERED),\r
+                       \r
+                       .MaxPowerConsumption    = USB_CONFIG_POWER_MA(100)\r
+               },\r
+               \r
+       .Interface = \r
+               {\r
+                       .Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},\r
+\r
+                       .InterfaceNumber        = 0x00,\r
+                       .AlternateSetting       = 0x00,\r
+                       \r
+                       .TotalEndpoints         = 1,\r
+                               \r
+                       .Class                  = 0x03,\r
+                       .SubClass               = 0x01,\r
+                       .Protocol               = 0x02,\r
+                               \r
+                       .InterfaceStrIndex      = NO_DESCRIPTOR\r
+               },\r
+\r
+       .MouseHID = \r
+               {\r
+                       .Header                 = {.Size = sizeof(USB_Descriptor_HID_t), .Type = DTYPE_HID},\r
+                                                                        \r
+                       .HIDSpec                = VERSION_BCD(01.11),\r
+                       .CountryCode            = 0x00,\r
+                       .TotalReportDescriptors = 1,\r
+                       .HIDReportType          = DTYPE_Report,\r
+                       .HIDReportLength        = sizeof(MouseReport)\r
+               },\r
+\r
+       .MouseEndpoint = \r
+               {\r
+                       .Header                 = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},\r
+                                                                                \r
+                       .EndpointAddress        = (ENDPOINT_DESCRIPTOR_DIR_IN | MOUSE_EPNUM),\r
+                       .Attributes             = EP_TYPE_INTERRUPT,\r
+                       .EndpointSize           = MOUSE_EPSIZE,\r
+                       .PollingIntervalMS      = 0x02\r
+               }       \r
+};\r
+\r
+/** Language descriptor structure. This descriptor, located in FLASH memory, is returned when the host requests\r
+ *  the string descriptor with index 0 (the first index). It is actually an array of 16-bit integers, which indicate\r
+ *  via the language ID table available at USB.org what languages the device supports for its string descriptors.\r
+ */\r
+USB_Descriptor_String_t PROGMEM LanguageString =\r
+{\r
+       .Header                 = {.Size = USB_STRING_LEN(1), .Type = DTYPE_String},\r
+               \r
+       .UnicodeString          = {LANGUAGE_ID_ENG}\r
+};\r
+\r
+/** Manufacturer descriptor string. This is a Unicode string containing the manufacturer's details in human readable\r
+ *  form, and is read out upon request by the host when the appropriate string ID is requested, listed in the Device\r
+ *  Descriptor.\r
+ */\r
+USB_Descriptor_String_t PROGMEM ManufacturerString =\r
+{\r
+       .Header                 = {.Size = USB_STRING_LEN(11), .Type = DTYPE_String},\r
+               \r
+       .UnicodeString          = L"Dean Camera"\r
+};\r
+\r
+/** Product descriptor string. This is a Unicode string containing the product's details in human readable form,\r
+ *  and is read out upon request by the host when the appropriate string ID is requested, listed in the Device\r
+ *  Descriptor.\r
+ */\r
+USB_Descriptor_String_t PROGMEM ProductString =\r
+{\r
+       .Header                 = {.Size = USB_STRING_LEN(15), .Type = DTYPE_String},\r
+               \r
+       .UnicodeString          = L"LUFA Mouse Demo"\r
+};\r
+\r
+/** This function is called by the library when in device mode, and must be overridden (see library "USB Descriptors"\r
+ *  documentation) by the application code so that the address and size of a requested descriptor can be given\r
+ *  to the USB library. When the device receives a Get Descriptor request on the control endpoint, this function\r
+ *  is called so that the descriptor details can be passed back and the appropriate descriptor sent back to the\r
+ *  USB host.\r
+ */\r
+uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
+{\r
+       const uint8_t  DescriptorType   = (wValue >> 8);\r
+       const uint8_t  DescriptorNumber = (wValue & 0xFF);\r
+\r
+       void*    Address = NULL;\r
+       uint16_t Size    = NO_DESCRIPTOR;\r
+\r
+       switch (DescriptorType)\r
+       {\r
+               case DTYPE_Device:\r
+                       Address = (void*)&DeviceDescriptor;\r
+                       Size    = sizeof(USB_Descriptor_Device_t);\r
+                       break;\r
+               case DTYPE_Configuration:\r
+                       Address = (void*)&ConfigurationDescriptor;\r
+                       Size    = sizeof(USB_Descriptor_Configuration_t);\r
+                       break;\r
+               case DTYPE_String:\r
+                       switch (DescriptorNumber)\r
+                       {\r
+                               case 0x00:\r
+                                       Address = (void*)&LanguageString;\r
+                                       Size    = pgm_read_byte(&LanguageString.Header.Size);\r
+                                       break;\r
+                               case 0x01:\r
+                                       Address = (void*)&ManufacturerString;\r
+                                       Size    = pgm_read_byte(&ManufacturerString.Header.Size);\r
+                                       break;\r
+                               case 0x02:\r
+                                       Address = (void*)&ProductString;\r
+                                       Size    = pgm_read_byte(&ProductString.Header.Size);\r
+                                       break;\r
+                       }\r
+                       \r
+                       break;\r
+               case DTYPE_HID: \r
+                       Address = (void*)&ConfigurationDescriptor.MouseHID;\r
+                       Size    = sizeof(USB_Descriptor_HID_t);\r
+                       break;\r
+               case DTYPE_Report: \r
+                       Address = (void*)&MouseReport;\r
+                       Size    = sizeof(MouseReport);\r
+                       break;\r
+       }\r
+       \r
+       *DescriptorAddress = Address;           \r
+       return Size;\r
+}\r
+\r
diff --git a/Demos/Device/LowLevel/Mouse/Descriptors.h b/Demos/Device/LowLevel/Mouse/Descriptors.h
new file mode 100644 (file)
index 0000000..883ef31
--- /dev/null
@@ -0,0 +1,93 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  Header file for Descriptors.c.\r
+ */\r
\r
+#ifndef _DESCRIPTORS_H_\r
+#define _DESCRIPTORS_H_\r
+\r
+       /* Includes: */\r
+               #include <LUFA/Drivers/USB/USB.h>\r
+\r
+               #include <avr/pgmspace.h>\r
+\r
+       /* Type Defines: */\r
+               /** Type define for the HID class specific HID descriptor, to describe the HID device's specifications. Refer to the HID\r
+                *  specification for details on the structure elements.\r
+                */\r
+               typedef struct\r
+               {\r
+                       USB_Descriptor_Header_t Header;\r
+                               \r
+                       uint16_t                HIDSpec;\r
+                       uint8_t                 CountryCode;\r
+               \r
+                       uint8_t                 TotalReportDescriptors;\r
+\r
+                       uint8_t                 HIDReportType;\r
+                       uint16_t                HIDReportLength;\r
+               } USB_Descriptor_HID_t;\r
+\r
+               /** Type define for the data type used to store HID report descriptor elements. */\r
+               typedef uint8_t USB_Descriptor_HIDReport_Datatype_t;\r
+\r
+               /** Type define for the device configuration descriptor structure. This must be defined in the\r
+                *  application code, as the configuration descriptor contains several sub-descriptors which\r
+                *  vary between devices, and which describe the device's usage to the host.\r
+                */\r
+               typedef struct\r
+               {\r
+                       USB_Descriptor_Configuration_Header_t Config;\r
+                       USB_Descriptor_Interface_t            Interface;\r
+                       USB_Descriptor_HID_t                  MouseHID;\r
+               USB_Descriptor_Endpoint_t             MouseEndpoint;\r
+               } USB_Descriptor_Configuration_t;\r
+                                       \r
+       /* Macros: */\r
+               /** Endpoint number of the Mouse HID reporting IN endpoint. */\r
+               #define MOUSE_EPNUM               1\r
+               \r
+               /** Size in bytes of the Mouse HID reporting IN endpoint. */\r
+               #define MOUSE_EPSIZE              8\r
+\r
+               /** Descriptor header type value, to indicate a HID class HID descriptor. */\r
+               #define DTYPE_HID                 0x21\r
+               \r
+               /** Descriptor header type value, to indicate a HID class HID report descriptor. */\r
+               #define DTYPE_Report              0x22\r
+\r
+       /* Function Prototypes: */\r
+               uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
+                                                                                       ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);\r
+\r
+#endif\r
diff --git a/Demos/Device/LowLevel/Mouse/Doxygen.conf b/Demos/Device/LowLevel/Mouse/Doxygen.conf
new file mode 100644 (file)
index 0000000..62c4db1
--- /dev/null
@@ -0,0 +1,1485 @@
+# Doxyfile 1.5.7.1\r
+\r
+# This file describes the settings to be used by the documentation system\r
+# doxygen (www.doxygen.org) for a project\r
+#\r
+# All text after a hash (#) is considered a comment and will be ignored\r
+# The format is:\r
+#       TAG = value [value, ...]\r
+# For lists items can also be appended using:\r
+#       TAG += value [value, ...]\r
+# Values that contain spaces should be placed between quotes (" ")\r
+\r
+#---------------------------------------------------------------------------\r
+# Project related configuration options\r
+#---------------------------------------------------------------------------\r
+\r
+# This tag specifies the encoding used for all characters in the config file \r
+# that follow. The default is UTF-8 which is also the encoding used for all \r
+# text before the first occurrence of this tag. Doxygen uses libiconv (or the \r
+# iconv built into libc) for the transcoding. See \r
+# http://www.gnu.org/software/libiconv for the list of possible encodings.\r
+\r
+DOXYFILE_ENCODING      = UTF-8\r
+\r
+# The PROJECT_NAME tag is a single word (or a sequence of words surrounded \r
+# by quotes) that should identify the project.\r
+\r
+PROJECT_NAME           = "LUFA Library - Mouse Device Demo"\r
+\r
+# The PROJECT_NUMBER tag can be used to enter a project or revision number. \r
+# This could be handy for archiving the generated documentation or \r
+# if some version control system is used.\r
+\r
+PROJECT_NUMBER         = 0.0.0\r
+\r
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) \r
+# base path where the generated documentation will be put. \r
+# If a relative path is entered, it will be relative to the location \r
+# where doxygen was started. If left blank the current directory will be used.\r
+\r
+OUTPUT_DIRECTORY       = ./Documentation/\r
+\r
+# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create \r
+# 4096 sub-directories (in 2 levels) under the output directory of each output \r
+# format and will distribute the generated files over these directories. \r
+# Enabling this option can be useful when feeding doxygen a huge amount of \r
+# source files, where putting all generated files in the same directory would \r
+# otherwise cause performance problems for the file system.\r
+\r
+CREATE_SUBDIRS         = YES\r
+\r
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all \r
+# documentation generated by doxygen is written. Doxygen will use this \r
+# information to generate all constant output in the proper language. \r
+# The default language is English, other supported languages are: \r
+# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, \r
+# Croatian, Czech, Danish, Dutch, Farsi, Finnish, French, German, Greek, \r
+# Hungarian, Italian, Japanese, Japanese-en (Japanese with English messages), \r
+# Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, Polish, \r
+# Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, Slovene, \r
+# Spanish, Swedish, and Ukrainian.\r
+\r
+OUTPUT_LANGUAGE        = English\r
+\r
+# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will \r
+# include brief member descriptions after the members that are listed in \r
+# the file and class documentation (similar to JavaDoc). \r
+# Set to NO to disable this.\r
+\r
+BRIEF_MEMBER_DESC      = YES\r
+\r
+# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend \r
+# the brief description of a member or function before the detailed description. \r
+# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the \r
+# brief descriptions will be completely suppressed.\r
+\r
+REPEAT_BRIEF           = YES\r
+\r
+# This tag implements a quasi-intelligent brief description abbreviator \r
+# that is used to form the text in various listings. Each string \r
+# in this list, if found as the leading text of the brief description, will be \r
+# stripped from the text and the result after processing the whole list, is \r
+# used as the annotated text. Otherwise, the brief description is used as-is. \r
+# If left blank, the following values are used ("$name" is automatically \r
+# replaced with the name of the entity): "The $name class" "The $name widget" \r
+# "The $name file" "is" "provides" "specifies" "contains" \r
+# "represents" "a" "an" "the"\r
+\r
+ABBREVIATE_BRIEF       = "The $name class" \\r
+                         "The $name widget" \\r
+                         "The $name file" \\r
+                         is \\r
+                         provides \\r
+                         specifies \\r
+                         contains \\r
+                         represents \\r
+                         a \\r
+                         an \\r
+                         the\r
+\r
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then \r
+# Doxygen will generate a detailed section even if there is only a brief \r
+# description.\r
+\r
+ALWAYS_DETAILED_SEC    = NO\r
+\r
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all \r
+# inherited members of a class in the documentation of that class as if those \r
+# members were ordinary class members. Constructors, destructors and assignment \r
+# operators of the base classes will not be shown.\r
+\r
+INLINE_INHERITED_MEMB  = NO\r
+\r
+# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full \r
+# path before files name in the file list and in the header files. If set \r
+# to NO the shortest path that makes the file name unique will be used.\r
+\r
+FULL_PATH_NAMES        = YES\r
+\r
+# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag \r
+# can be used to strip a user-defined part of the path. Stripping is \r
+# only done if one of the specified strings matches the left-hand part of \r
+# the path. The tag can be used to show relative paths in the file list. \r
+# If left blank the directory from which doxygen is run is used as the \r
+# path to strip.\r
+\r
+STRIP_FROM_PATH        = \r
+\r
+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of \r
+# the path mentioned in the documentation of a class, which tells \r
+# the reader which header file to include in order to use a class. \r
+# If left blank only the name of the header file containing the class \r
+# definition is used. Otherwise one should specify the include paths that \r
+# are normally passed to the compiler using the -I flag.\r
+\r
+STRIP_FROM_INC_PATH    = \r
+\r
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter \r
+# (but less readable) file names. This can be useful is your file systems \r
+# doesn't support long names like on DOS, Mac, or CD-ROM.\r
+\r
+SHORT_NAMES            = YES\r
+\r
+# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen \r
+# will interpret the first line (until the first dot) of a JavaDoc-style \r
+# comment as the brief description. If set to NO, the JavaDoc \r
+# comments will behave just like regular Qt-style comments \r
+# (thus requiring an explicit @brief command for a brief description.)\r
+\r
+JAVADOC_AUTOBRIEF      = NO\r
+\r
+# If the QT_AUTOBRIEF tag is set to YES then Doxygen will \r
+# interpret the first line (until the first dot) of a Qt-style \r
+# comment as the brief description. If set to NO, the comments \r
+# will behave just like regular Qt-style comments (thus requiring \r
+# an explicit \brief command for a brief description.)\r
+\r
+QT_AUTOBRIEF           = NO\r
+\r
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen \r
+# treat a multi-line C++ special comment block (i.e. a block of //! or /// \r
+# comments) as a brief description. This used to be the default behaviour. \r
+# The new default is to treat a multi-line C++ comment block as a detailed \r
+# description. Set this tag to YES if you prefer the old behaviour instead.\r
+\r
+MULTILINE_CPP_IS_BRIEF = NO\r
+\r
+# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented \r
+# member inherits the documentation from any documented member that it \r
+# re-implements.\r
+\r
+INHERIT_DOCS           = YES\r
+\r
+# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce \r
+# a new page for each member. If set to NO, the documentation of a member will \r
+# be part of the file/class/namespace that contains it.\r
+\r
+SEPARATE_MEMBER_PAGES  = NO\r
+\r
+# The TAB_SIZE tag can be used to set the number of spaces in a tab. \r
+# Doxygen uses this value to replace tabs by spaces in code fragments.\r
+\r
+TAB_SIZE               = 4\r
+\r
+# This tag can be used to specify a number of aliases that acts \r
+# as commands in the documentation. An alias has the form "name=value". \r
+# For example adding "sideeffect=\par Side Effects:\n" will allow you to \r
+# put the command \sideeffect (or @sideeffect) in the documentation, which \r
+# will result in a user-defined paragraph with heading "Side Effects:". \r
+# You can put \n's in the value part of an alias to insert newlines.\r
+\r
+ALIASES                = \r
+\r
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C \r
+# sources only. Doxygen will then generate output that is more tailored for C. \r
+# For instance, some of the names that are used will be different. The list \r
+# of all members will be omitted, etc.\r
+\r
+OPTIMIZE_OUTPUT_FOR_C  = YES\r
+\r
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java \r
+# sources only. Doxygen will then generate output that is more tailored for \r
+# Java. For instance, namespaces will be presented as packages, qualified \r
+# scopes will look different, etc.\r
+\r
+OPTIMIZE_OUTPUT_JAVA   = NO\r
+\r
+# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran \r
+# sources only. Doxygen will then generate output that is more tailored for \r
+# Fortran.\r
+\r
+OPTIMIZE_FOR_FORTRAN   = NO\r
+\r
+# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL \r
+# sources. Doxygen will then generate output that is tailored for \r
+# VHDL.\r
+\r
+OPTIMIZE_OUTPUT_VHDL   = NO\r
+\r
+# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want \r
+# to include (a tag file for) the STL sources as input, then you should \r
+# set this tag to YES in order to let doxygen match functions declarations and \r
+# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. \r
+# func(std::string) {}). This also make the inheritance and collaboration \r
+# diagrams that involve STL classes more complete and accurate.\r
+\r
+BUILTIN_STL_SUPPORT    = NO\r
+\r
+# If you use Microsoft's C++/CLI language, you should set this option to YES to\r
+# enable parsing support.\r
+\r
+CPP_CLI_SUPPORT        = NO\r
+\r
+# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. \r
+# Doxygen will parse them like normal C++ but will assume all classes use public \r
+# instead of private inheritance when no explicit protection keyword is present.\r
+\r
+SIP_SUPPORT            = NO\r
+\r
+# For Microsoft's IDL there are propget and propput attributes to indicate getter \r
+# and setter methods for a property. Setting this option to YES (the default) \r
+# will make doxygen to replace the get and set methods by a property in the \r
+# documentation. This will only work if the methods are indeed getting or \r
+# setting a simple type. If this is not the case, or you want to show the \r
+# methods anyway, you should set this option to NO.\r
+\r
+IDL_PROPERTY_SUPPORT   = YES\r
+\r
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC \r
+# tag is set to YES, then doxygen will reuse the documentation of the first \r
+# member in the group (if any) for the other members of the group. By default \r
+# all members of a group must be documented explicitly.\r
+\r
+DISTRIBUTE_GROUP_DOC   = NO\r
+\r
+# Set the SUBGROUPING tag to YES (the default) to allow class member groups of \r
+# the same type (for instance a group of public functions) to be put as a \r
+# subgroup of that type (e.g. under the Public Functions section). Set it to \r
+# NO to prevent subgrouping. Alternatively, this can be done per class using \r
+# the \nosubgrouping command.\r
+\r
+SUBGROUPING            = YES\r
+\r
+# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum \r
+# is documented as struct, union, or enum with the name of the typedef. So \r
+# typedef struct TypeS {} TypeT, will appear in the documentation as a struct \r
+# with name TypeT. When disabled the typedef will appear as a member of a file, \r
+# namespace, or class. And the struct will be named TypeS. This can typically \r
+# be useful for C code in case the coding convention dictates that all compound \r
+# types are typedef'ed and only the typedef is referenced, never the tag name.\r
+\r
+TYPEDEF_HIDES_STRUCT   = NO\r
+\r
+# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to \r
+# determine which symbols to keep in memory and which to flush to disk.\r
+# When the cache is full, less often used symbols will be written to disk.\r
+# For small to medium size projects (<1000 input files) the default value is \r
+# probably good enough. For larger projects a too small cache size can cause \r
+# doxygen to be busy swapping symbols to and from disk most of the time \r
+# causing a significant performance penality. \r
+# If the system has enough physical memory increasing the cache will improve the \r
+# performance by keeping more symbols in memory. Note that the value works on \r
+# a logarithmic scale so increasing the size by one will rougly double the \r
+# memory usage. The cache size is given by this formula: \r
+# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, \r
+# corresponding to a cache size of 2^16 = 65536 symbols\r
+\r
+SYMBOL_CACHE_SIZE      = 0\r
+\r
+#---------------------------------------------------------------------------\r
+# Build related configuration options\r
+#---------------------------------------------------------------------------\r
+\r
+# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in \r
+# documentation are documented, even if no documentation was available. \r
+# Private class members and static file members will be hidden unless \r
+# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES\r
+\r
+EXTRACT_ALL            = YES\r
+\r
+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class \r
+# will be included in the documentation.\r
+\r
+EXTRACT_PRIVATE        = YES\r
+\r
+# If the EXTRACT_STATIC tag is set to YES all static members of a file \r
+# will be included in the documentation.\r
+\r
+EXTRACT_STATIC         = YES\r
+\r
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) \r
+# defined locally in source files will be included in the documentation. \r
+# If set to NO only classes defined in header files are included.\r
+\r
+EXTRACT_LOCAL_CLASSES  = YES\r
+\r
+# This flag is only useful for Objective-C code. When set to YES local \r
+# methods, which are defined in the implementation section but not in \r
+# the interface are included in the documentation. \r
+# If set to NO (the default) only methods in the interface are included.\r
+\r
+EXTRACT_LOCAL_METHODS  = NO\r
+\r
+# If this flag is set to YES, the members of anonymous namespaces will be \r
+# extracted and appear in the documentation as a namespace called \r
+# 'anonymous_namespace{file}', where file will be replaced with the base \r
+# name of the file that contains the anonymous namespace. By default \r
+# anonymous namespace are hidden.\r
+\r
+EXTRACT_ANON_NSPACES   = NO\r
+\r
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all \r
+# undocumented members of documented classes, files or namespaces. \r
+# If set to NO (the default) these members will be included in the \r
+# various overviews, but no documentation section is generated. \r
+# This option has no effect if EXTRACT_ALL is enabled.\r
+\r
+HIDE_UNDOC_MEMBERS     = NO\r
+\r
+# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all \r
+# undocumented classes that are normally visible in the class hierarchy. \r
+# If set to NO (the default) these classes will be included in the various \r
+# overviews. This option has no effect if EXTRACT_ALL is enabled.\r
+\r
+HIDE_UNDOC_CLASSES     = NO\r
+\r
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all \r
+# friend (class|struct|union) declarations. \r
+# If set to NO (the default) these declarations will be included in the \r
+# documentation.\r
+\r
+HIDE_FRIEND_COMPOUNDS  = NO\r
+\r
+# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any \r
+# documentation blocks found inside the body of a function. \r
+# If set to NO (the default) these blocks will be appended to the \r
+# function's detailed documentation block.\r
+\r
+HIDE_IN_BODY_DOCS      = NO\r
+\r
+# The INTERNAL_DOCS tag determines if documentation \r
+# that is typed after a \internal command is included. If the tag is set \r
+# to NO (the default) then the documentation will be excluded. \r
+# Set it to YES to include the internal documentation.\r
+\r
+INTERNAL_DOCS          = NO\r
+\r
+# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate \r
+# file names in lower-case letters. If set to YES upper-case letters are also \r
+# allowed. This is useful if you have classes or files whose names only differ \r
+# in case and if your file system supports case sensitive file names. Windows \r
+# and Mac users are advised to set this option to NO.\r
+\r
+CASE_SENSE_NAMES       = NO\r
+\r
+# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen \r
+# will show members with their full class and namespace scopes in the \r
+# documentation. If set to YES the scope will be hidden.\r
+\r
+HIDE_SCOPE_NAMES       = NO\r
+\r
+# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen \r
+# will put a list of the files that are included by a file in the documentation \r
+# of that file.\r
+\r
+SHOW_INCLUDE_FILES     = YES\r
+\r
+# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] \r
+# is inserted in the documentation for inline members.\r
+\r
+INLINE_INFO            = YES\r
+\r
+# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen \r
+# will sort the (detailed) documentation of file and class members \r
+# alphabetically by member name. If set to NO the members will appear in \r
+# declaration order.\r
+\r
+SORT_MEMBER_DOCS       = YES\r
+\r
+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the \r
+# brief documentation of file, namespace and class members alphabetically \r
+# by member name. If set to NO (the default) the members will appear in \r
+# declaration order.\r
+\r
+SORT_BRIEF_DOCS        = NO\r
+\r
+# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the \r
+# hierarchy of group names into alphabetical order. If set to NO (the default) \r
+# the group names will appear in their defined order.\r
+\r
+SORT_GROUP_NAMES       = NO\r
+\r
+# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be \r
+# sorted by fully-qualified names, including namespaces. If set to \r
+# NO (the default), the class list will be sorted only by class name, \r
+# not including the namespace part. \r
+# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.\r
+# Note: This option applies only to the class list, not to the \r
+# alphabetical list.\r
+\r
+SORT_BY_SCOPE_NAME     = NO\r
+\r
+# The GENERATE_TODOLIST tag can be used to enable (YES) or \r
+# disable (NO) the todo list. This list is created by putting \todo \r
+# commands in the documentation.\r
+\r
+GENERATE_TODOLIST      = NO\r
+\r
+# The GENERATE_TESTLIST tag can be used to enable (YES) or \r
+# disable (NO) the test list. This list is created by putting \test \r
+# commands in the documentation.\r
+\r
+GENERATE_TESTLIST      = NO\r
+\r
+# The GENERATE_BUGLIST tag can be used to enable (YES) or \r
+# disable (NO) the bug list. This list is created by putting \bug \r
+# commands in the documentation.\r
+\r
+GENERATE_BUGLIST       = NO\r
+\r
+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or \r
+# disable (NO) the deprecated list. This list is created by putting \r
+# \deprecated commands in the documentation.\r
+\r
+GENERATE_DEPRECATEDLIST= YES\r
+\r
+# The ENABLED_SECTIONS tag can be used to enable conditional \r
+# documentation sections, marked by \if sectionname ... \endif.\r
+\r
+ENABLED_SECTIONS       = \r
+\r
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines \r
+# the initial value of a variable or define consists of for it to appear in \r
+# the documentation. If the initializer consists of more lines than specified \r
+# here it will be hidden. Use a value of 0 to hide initializers completely. \r
+# The appearance of the initializer of individual variables and defines in the \r
+# documentation can be controlled using \showinitializer or \hideinitializer \r
+# command in the documentation regardless of this setting.\r
+\r
+MAX_INITIALIZER_LINES  = 30\r
+\r
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated \r
+# at the bottom of the documentation of classes and structs. If set to YES the \r
+# list will mention the files that were used to generate the documentation.\r
+\r
+SHOW_USED_FILES        = YES\r
+\r
+# If the sources in your project are distributed over multiple directories \r
+# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy \r
+# in the documentation. The default is NO.\r
+\r
+SHOW_DIRECTORIES       = YES\r
+\r
+# Set the SHOW_FILES tag to NO to disable the generation of the Files page.\r
+# This will remove the Files entry from the Quick Index and from the \r
+# Folder Tree View (if specified). The default is YES.\r
+\r
+SHOW_FILES             = YES\r
+\r
+# Set the SHOW_NAMESPACES tag to NO to disable the generation of the \r
+# Namespaces page.  This will remove the Namespaces entry from the Quick Index\r
+# and from the Folder Tree View (if specified). The default is YES.\r
+\r
+SHOW_NAMESPACES        = YES\r
+\r
+# The FILE_VERSION_FILTER tag can be used to specify a program or script that \r
+# doxygen should invoke to get the current version for each file (typically from \r
+# the version control system). Doxygen will invoke the program by executing (via \r
+# popen()) the command <command> <input-file>, where <command> is the value of \r
+# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file \r
+# provided by doxygen. Whatever the program writes to standard output \r
+# is used as the file version. See the manual for examples.\r
+\r
+FILE_VERSION_FILTER    = \r
+\r
+# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by \r
+# doxygen. The layout file controls the global structure of the generated output files \r
+# in an output format independent way. The create the layout file that represents \r
+# doxygen's defaults, run doxygen with the -l option. You can optionally specify a \r
+# file name after the option, if omitted DoxygenLayout.xml will be used as the name \r
+# of the layout file.\r
+\r
+LAYOUT_FILE            = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to warning and progress messages\r
+#---------------------------------------------------------------------------\r
+\r
+# The QUIET tag can be used to turn on/off the messages that are generated \r
+# by doxygen. Possible values are YES and NO. If left blank NO is used.\r
+\r
+QUIET                  = YES\r
+\r
+# The WARNINGS tag can be used to turn on/off the warning messages that are \r
+# generated by doxygen. Possible values are YES and NO. If left blank \r
+# NO is used.\r
+\r
+WARNINGS               = YES\r
+\r
+# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings \r
+# for undocumented members. If EXTRACT_ALL is set to YES then this flag will \r
+# automatically be disabled.\r
+\r
+WARN_IF_UNDOCUMENTED   = YES\r
+\r
+# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for \r
+# potential errors in the documentation, such as not documenting some \r
+# parameters in a documented function, or documenting parameters that \r
+# don't exist or using markup commands wrongly.\r
+\r
+WARN_IF_DOC_ERROR      = YES\r
+\r
+# This WARN_NO_PARAMDOC option can be abled to get warnings for \r
+# functions that are documented, but have no documentation for their parameters \r
+# or return value. If set to NO (the default) doxygen will only warn about \r
+# wrong or incomplete parameter documentation, but not about the absence of \r
+# documentation.\r
+\r
+WARN_NO_PARAMDOC       = YES\r
+\r
+# The WARN_FORMAT tag determines the format of the warning messages that \r
+# doxygen can produce. The string should contain the $file, $line, and $text \r
+# tags, which will be replaced by the file and line number from which the \r
+# warning originated and the warning text. Optionally the format may contain \r
+# $version, which will be replaced by the version of the file (if it could \r
+# be obtained via FILE_VERSION_FILTER)\r
+\r
+WARN_FORMAT            = "$file:$line: $text"\r
+\r
+# The WARN_LOGFILE tag can be used to specify a file to which warning \r
+# and error messages should be written. If left blank the output is written \r
+# to stderr.\r
+\r
+WARN_LOGFILE           = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the input files\r
+#---------------------------------------------------------------------------\r
+\r
+# The INPUT tag can be used to specify the files and/or directories that contain \r
+# documented source files. You may enter file names like "myfile.cpp" or \r
+# directories like "/usr/src/myproject". Separate the files or directories \r
+# with spaces.\r
+\r
+INPUT                  = ./\r
+\r
+# This tag can be used to specify the character encoding of the source files \r
+# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is \r
+# also the default input encoding. Doxygen uses libiconv (or the iconv built \r
+# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for \r
+# the list of possible encodings.\r
+\r
+INPUT_ENCODING         = UTF-8\r
+\r
+# If the value of the INPUT tag contains directories, you can use the \r
+# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \r
+# and *.h) to filter out the source-files in the directories. If left \r
+# blank the following patterns are tested: \r
+# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx \r
+# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90\r
+\r
+FILE_PATTERNS          = *.h \\r
+                         *.c \\r
+                                                *.txt\r
+\r
+# The RECURSIVE tag can be used to turn specify whether or not subdirectories \r
+# should be searched for input files as well. Possible values are YES and NO. \r
+# If left blank NO is used.\r
+\r
+RECURSIVE              = YES\r
+\r
+# The EXCLUDE tag can be used to specify files and/or directories that should \r
+# excluded from the INPUT source files. This way you can easily exclude a \r
+# subdirectory from a directory tree whose root is specified with the INPUT tag.\r
+\r
+EXCLUDE                = \r
+\r
+# The EXCLUDE_SYMLINKS tag can be used select whether or not files or \r
+# directories that are symbolic links (a Unix filesystem feature) are excluded \r
+# from the input.\r
+\r
+EXCLUDE_SYMLINKS       = NO\r
+\r
+# If the value of the INPUT tag contains directories, you can use the \r
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude \r
+# certain files from those directories. Note that the wildcards are matched \r
+# against the file with absolute path, so to exclude all test directories \r
+# for example use the pattern */test/*\r
+\r
+EXCLUDE_PATTERNS       = */LowLevel/USBMode.h\r
+\r
+# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names \r
+# (namespaces, classes, functions, etc.) that should be excluded from the \r
+# output. The symbol name can be a fully qualified name, a word, or if the \r
+# wildcard * is used, a substring. Examples: ANamespace, AClass, \r
+# AClass::ANamespace, ANamespace::*Test\r
+\r
+EXCLUDE_SYMBOLS        = __*\r
+\r
+# The EXAMPLE_PATH tag can be used to specify one or more files or \r
+# directories that contain example code fragments that are included (see \r
+# the \include command).\r
+\r
+EXAMPLE_PATH           = \r
+\r
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the \r
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \r
+# and *.h) to filter out the source-files in the directories. If left \r
+# blank all files are included.\r
+\r
+EXAMPLE_PATTERNS       = *\r
+\r
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be \r
+# searched for input files to be used with the \include or \dontinclude \r
+# commands irrespective of the value of the RECURSIVE tag. \r
+# Possible values are YES and NO. If left blank NO is used.\r
+\r
+EXAMPLE_RECURSIVE      = NO\r
+\r
+# The IMAGE_PATH tag can be used to specify one or more files or \r
+# directories that contain image that are included in the documentation (see \r
+# the \image command).\r
+\r
+IMAGE_PATH             = \r
+\r
+# The INPUT_FILTER tag can be used to specify a program that doxygen should \r
+# invoke to filter for each input file. Doxygen will invoke the filter program \r
+# by executing (via popen()) the command <filter> <input-file>, where <filter> \r
+# is the value of the INPUT_FILTER tag, and <input-file> is the name of an \r
+# input file. Doxygen will then use the output that the filter program writes \r
+# to standard output.  If FILTER_PATTERNS is specified, this tag will be \r
+# ignored.\r
+\r
+INPUT_FILTER           = \r
+\r
+# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern \r
+# basis.  Doxygen will compare the file name with each pattern and apply the \r
+# filter if there is a match.  The filters are a list of the form: \r
+# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further \r
+# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER \r
+# is applied to all files.\r
+\r
+FILTER_PATTERNS        = \r
+\r
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using \r
+# INPUT_FILTER) will be used to filter the input files when producing source \r
+# files to browse (i.e. when SOURCE_BROWSER is set to YES).\r
+\r
+FILTER_SOURCE_FILES    = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to source browsing\r
+#---------------------------------------------------------------------------\r
+\r
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will \r
+# be generated. Documented entities will be cross-referenced with these sources. \r
+# Note: To get rid of all source code in the generated output, make sure also \r
+# VERBATIM_HEADERS is set to NO.\r
+\r
+SOURCE_BROWSER         = NO\r
+\r
+# Setting the INLINE_SOURCES tag to YES will include the body \r
+# of functions and classes directly in the documentation.\r
+\r
+INLINE_SOURCES         = NO\r
+\r
+# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct \r
+# doxygen to hide any special comment blocks from generated source code \r
+# fragments. Normal C and C++ comments will always remain visible.\r
+\r
+STRIP_CODE_COMMENTS    = YES\r
+\r
+# If the REFERENCED_BY_RELATION tag is set to YES \r
+# then for each documented function all documented \r
+# functions referencing it will be listed.\r
+\r
+REFERENCED_BY_RELATION = NO\r
+\r
+# If the REFERENCES_RELATION tag is set to YES \r
+# then for each documented function all documented entities \r
+# called/used by that function will be listed.\r
+\r
+REFERENCES_RELATION    = NO\r
+\r
+# If the REFERENCES_LINK_SOURCE tag is set to YES (the default)\r
+# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from\r
+# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will\r
+# link to the source code.  Otherwise they will link to the documentstion.\r
+\r
+REFERENCES_LINK_SOURCE = NO\r
+\r
+# If the USE_HTAGS tag is set to YES then the references to source code \r
+# will point to the HTML generated by the htags(1) tool instead of doxygen \r
+# built-in source browser. The htags tool is part of GNU's global source \r
+# tagging system (see http://www.gnu.org/software/global/global.html). You \r
+# will need version 4.8.6 or higher.\r
+\r
+USE_HTAGS              = NO\r
+\r
+# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen \r
+# will generate a verbatim copy of the header file for each class for \r
+# which an include is specified. Set to NO to disable this.\r
+\r
+VERBATIM_HEADERS       = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the alphabetical class index\r
+#---------------------------------------------------------------------------\r
+\r
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index \r
+# of all compounds will be generated. Enable this if the project \r
+# contains a lot of classes, structs, unions or interfaces.\r
+\r
+ALPHABETICAL_INDEX     = YES\r
+\r
+# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then \r
+# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns \r
+# in which this list will be split (can be a number in the range [1..20])\r
+\r
+COLS_IN_ALPHA_INDEX    = 5\r
+\r
+# In case all classes in a project start with a common prefix, all \r
+# classes will be put under the same header in the alphabetical index. \r
+# The IGNORE_PREFIX tag can be used to specify one or more prefixes that \r
+# should be ignored while generating the index headers.\r
+\r
+IGNORE_PREFIX          = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the HTML output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_HTML tag is set to YES (the default) Doxygen will \r
+# generate HTML output.\r
+\r
+GENERATE_HTML          = YES\r
+\r
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `html' will be used as the default path.\r
+\r
+HTML_OUTPUT            = html\r
+\r
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for \r
+# each generated HTML page (for example: .htm,.php,.asp). If it is left blank \r
+# doxygen will generate files with .html extension.\r
+\r
+HTML_FILE_EXTENSION    = .html\r
+\r
+# The HTML_HEADER tag can be used to specify a personal HTML header for \r
+# each generated HTML page. If it is left blank doxygen will generate a \r
+# standard header.\r
+\r
+HTML_HEADER            = \r
+\r
+# The HTML_FOOTER tag can be used to specify a personal HTML footer for \r
+# each generated HTML page. If it is left blank doxygen will generate a \r
+# standard footer.\r
+\r
+HTML_FOOTER            = \r
+\r
+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading \r
+# style sheet that is used by each HTML page. It can be used to \r
+# fine-tune the look of the HTML output. If the tag is left blank doxygen \r
+# will generate a default style sheet. Note that doxygen will try to copy \r
+# the style sheet file to the HTML output directory, so don't put your own \r
+# stylesheet in the HTML output directory as well, or it will be erased!\r
+\r
+HTML_STYLESHEET        = \r
+\r
+# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, \r
+# files or namespaces will be aligned in HTML using tables. If set to \r
+# NO a bullet list will be used.\r
+\r
+HTML_ALIGN_MEMBERS     = YES\r
+\r
+# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML \r
+# documentation will contain sections that can be hidden and shown after the \r
+# page has loaded. For this to work a browser that supports \r
+# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox \r
+# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari).\r
+\r
+HTML_DYNAMIC_SECTIONS  = YES\r
+\r
+# If the GENERATE_DOCSET tag is set to YES, additional index files \r
+# will be generated that can be used as input for Apple's Xcode 3 \r
+# integrated development environment, introduced with OSX 10.5 (Leopard). \r
+# To create a documentation set, doxygen will generate a Makefile in the \r
+# HTML output directory. Running make will produce the docset in that \r
+# directory and running "make install" will install the docset in \r
+# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find \r
+# it at startup. \r
+# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information.\r
+\r
+GENERATE_DOCSET        = NO\r
+\r
+# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the \r
+# feed. A documentation feed provides an umbrella under which multiple \r
+# documentation sets from a single provider (such as a company or product suite) \r
+# can be grouped.\r
+\r
+DOCSET_FEEDNAME        = "Doxygen generated docs"\r
+\r
+# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that \r
+# should uniquely identify the documentation set bundle. This should be a \r
+# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen \r
+# will append .docset to the name.\r
+\r
+DOCSET_BUNDLE_ID       = org.doxygen.Project\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, additional index files \r
+# will be generated that can be used as input for tools like the \r
+# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) \r
+# of the generated HTML documentation.\r
+\r
+GENERATE_HTMLHELP      = NO\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can \r
+# be used to specify the file name of the resulting .chm file. You \r
+# can add a path in front of the file if the result should not be \r
+# written to the html output directory.\r
+\r
+CHM_FILE               = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can \r
+# be used to specify the location (absolute path including file name) of \r
+# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run \r
+# the HTML help compiler on the generated index.hhp.\r
+\r
+HHC_LOCATION           = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag \r
+# controls if a separate .chi index file is generated (YES) or that \r
+# it should be included in the master .chm file (NO).\r
+\r
+GENERATE_CHI           = NO\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING\r
+# is used to encode HtmlHelp index (hhk), content (hhc) and project file\r
+# content.\r
+\r
+CHM_INDEX_ENCODING     = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag \r
+# controls whether a binary table of contents is generated (YES) or a \r
+# normal table of contents (NO) in the .chm file.\r
+\r
+BINARY_TOC             = NO\r
+\r
+# The TOC_EXPAND flag can be set to YES to add extra items for group members \r
+# to the contents of the HTML help documentation and to the tree view.\r
+\r
+TOC_EXPAND             = YES\r
+\r
+# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER \r
+# are set, an additional index file will be generated that can be used as input for \r
+# Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated \r
+# HTML documentation.\r
+\r
+GENERATE_QHP           = NO\r
+\r
+# If the QHG_LOCATION tag is specified, the QCH_FILE tag can \r
+# be used to specify the file name of the resulting .qch file. \r
+# The path specified is relative to the HTML output folder.\r
+\r
+QCH_FILE               = \r
+\r
+# The QHP_NAMESPACE tag specifies the namespace to use when generating \r
+# Qt Help Project output. For more information please see \r
+# <a href="http://doc.trolltech.com/qthelpproject.html#namespace">Qt Help Project / Namespace</a>.\r
+\r
+QHP_NAMESPACE          = org.doxygen.Project\r
+\r
+# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating \r
+# Qt Help Project output. For more information please see \r
+# <a href="http://doc.trolltech.com/qthelpproject.html#virtual-folders">Qt Help Project / Virtual Folders</a>.\r
+\r
+QHP_VIRTUAL_FOLDER     = doc\r
+\r
+# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can \r
+# be used to specify the location of Qt's qhelpgenerator. \r
+# If non-empty doxygen will try to run qhelpgenerator on the generated \r
+# .qhp file .\r
+\r
+QHG_LOCATION           = \r
+\r
+# The DISABLE_INDEX tag can be used to turn on/off the condensed index at \r
+# top of each HTML page. The value NO (the default) enables the index and \r
+# the value YES disables it.\r
+\r
+DISABLE_INDEX          = NO\r
+\r
+# This tag can be used to set the number of enum values (range [1..20]) \r
+# that doxygen will group on one line in the generated HTML documentation.\r
+\r
+ENUM_VALUES_PER_LINE   = 1\r
+\r
+# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index\r
+# structure should be generated to display hierarchical information.\r
+# If the tag value is set to FRAME, a side panel will be generated\r
+# containing a tree-like index structure (just like the one that \r
+# is generated for HTML Help). For this to work a browser that supports \r
+# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, \r
+# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are \r
+# probably better off using the HTML help feature. Other possible values \r
+# for this tag are: HIERARCHIES, which will generate the Groups, Directories,\r
+# and Class Hierarchy pages using a tree view instead of an ordered list;\r
+# ALL, which combines the behavior of FRAME and HIERARCHIES; and NONE, which\r
+# disables this behavior completely. For backwards compatibility with previous\r
+# releases of Doxygen, the values YES and NO are equivalent to FRAME and NONE\r
+# respectively.\r
+\r
+GENERATE_TREEVIEW      = YES\r
+\r
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be \r
+# used to set the initial width (in pixels) of the frame in which the tree \r
+# is shown.\r
+\r
+TREEVIEW_WIDTH         = 250\r
+\r
+# Use this tag to change the font size of Latex formulas included \r
+# as images in the HTML documentation. The default is 10. Note that \r
+# when you change the font size after a successful doxygen run you need \r
+# to manually remove any form_*.png images from the HTML output directory \r
+# to force them to be regenerated.\r
+\r
+FORMULA_FONTSIZE       = 10\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the LaTeX output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will \r
+# generate Latex output.\r
+\r
+GENERATE_LATEX         = NO\r
+\r
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `latex' will be used as the default path.\r
+\r
+LATEX_OUTPUT           = latex\r
+\r
+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be \r
+# invoked. If left blank `latex' will be used as the default command name.\r
+\r
+LATEX_CMD_NAME         = latex\r
+\r
+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to \r
+# generate index for LaTeX. If left blank `makeindex' will be used as the \r
+# default command name.\r
+\r
+MAKEINDEX_CMD_NAME     = makeindex\r
+\r
+# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact \r
+# LaTeX documents. This may be useful for small projects and may help to \r
+# save some trees in general.\r
+\r
+COMPACT_LATEX          = NO\r
+\r
+# The PAPER_TYPE tag can be used to set the paper type that is used \r
+# by the printer. Possible values are: a4, a4wide, letter, legal and \r
+# executive. If left blank a4wide will be used.\r
+\r
+PAPER_TYPE             = a4wide\r
+\r
+# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX \r
+# packages that should be included in the LaTeX output.\r
+\r
+EXTRA_PACKAGES         = \r
+\r
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for \r
+# the generated latex document. The header should contain everything until \r
+# the first chapter. If it is left blank doxygen will generate a \r
+# standard header. Notice: only use this tag if you know what you are doing!\r
+\r
+LATEX_HEADER           = \r
+\r
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated \r
+# is prepared for conversion to pdf (using ps2pdf). The pdf file will \r
+# contain links (just like the HTML output) instead of page references \r
+# This makes the output suitable for online browsing using a pdf viewer.\r
+\r
+PDF_HYPERLINKS         = YES\r
+\r
+# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of \r
+# plain latex in the generated Makefile. Set this option to YES to get a \r
+# higher quality PDF documentation.\r
+\r
+USE_PDFLATEX           = YES\r
+\r
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. \r
+# command to the generated LaTeX files. This will instruct LaTeX to keep \r
+# running if errors occur, instead of asking the user for help. \r
+# This option is also used when generating formulas in HTML.\r
+\r
+LATEX_BATCHMODE        = NO\r
+\r
+# If LATEX_HIDE_INDICES is set to YES then doxygen will not \r
+# include the index chapters (such as File Index, Compound Index, etc.) \r
+# in the output.\r
+\r
+LATEX_HIDE_INDICES     = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the RTF output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output \r
+# The RTF output is optimized for Word 97 and may not look very pretty with \r
+# other RTF readers or editors.\r
+\r
+GENERATE_RTF           = NO\r
+\r
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `rtf' will be used as the default path.\r
+\r
+RTF_OUTPUT             = rtf\r
+\r
+# If the COMPACT_RTF tag is set to YES Doxygen generates more compact \r
+# RTF documents. This may be useful for small projects and may help to \r
+# save some trees in general.\r
+\r
+COMPACT_RTF            = NO\r
+\r
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated \r
+# will contain hyperlink fields. The RTF file will \r
+# contain links (just like the HTML output) instead of page references. \r
+# This makes the output suitable for online browsing using WORD or other \r
+# programs which support those fields. \r
+# Note: wordpad (write) and others do not support links.\r
+\r
+RTF_HYPERLINKS         = NO\r
+\r
+# Load stylesheet definitions from file. Syntax is similar to doxygen's \r
+# config file, i.e. a series of assignments. You only have to provide \r
+# replacements, missing definitions are set to their default value.\r
+\r
+RTF_STYLESHEET_FILE    = \r
+\r
+# Set optional variables used in the generation of an rtf document. \r
+# Syntax is similar to doxygen's config file.\r
+\r
+RTF_EXTENSIONS_FILE    = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the man page output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_MAN tag is set to YES (the default) Doxygen will \r
+# generate man pages\r
+\r
+GENERATE_MAN           = NO\r
+\r
+# The MAN_OUTPUT tag is used to specify where the man pages will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `man' will be used as the default path.\r
+\r
+MAN_OUTPUT             = man\r
+\r
+# The MAN_EXTENSION tag determines the extension that is added to \r
+# the generated man pages (default is the subroutine's section .3)\r
+\r
+MAN_EXTENSION          = .3\r
+\r
+# If the MAN_LINKS tag is set to YES and Doxygen generates man output, \r
+# then it will generate one additional man file for each entity \r
+# documented in the real man page(s). These additional files \r
+# only source the real man page, but without them the man command \r
+# would be unable to find the correct page. The default is NO.\r
+\r
+MAN_LINKS              = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the XML output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_XML tag is set to YES Doxygen will \r
+# generate an XML file that captures the structure of \r
+# the code including all documentation.\r
+\r
+GENERATE_XML           = NO\r
+\r
+# The XML_OUTPUT tag is used to specify where the XML pages will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `xml' will be used as the default path.\r
+\r
+XML_OUTPUT             = xml\r
+\r
+# The XML_SCHEMA tag can be used to specify an XML schema, \r
+# which can be used by a validating XML parser to check the \r
+# syntax of the XML files.\r
+\r
+XML_SCHEMA             = \r
+\r
+# The XML_DTD tag can be used to specify an XML DTD, \r
+# which can be used by a validating XML parser to check the \r
+# syntax of the XML files.\r
+\r
+XML_DTD                = \r
+\r
+# If the XML_PROGRAMLISTING tag is set to YES Doxygen will \r
+# dump the program listings (including syntax highlighting \r
+# and cross-referencing information) to the XML output. Note that \r
+# enabling this will significantly increase the size of the XML output.\r
+\r
+XML_PROGRAMLISTING     = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options for the AutoGen Definitions output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will \r
+# generate an AutoGen Definitions (see autogen.sf.net) file \r
+# that captures the structure of the code including all \r
+# documentation. Note that this feature is still experimental \r
+# and incomplete at the moment.\r
+\r
+GENERATE_AUTOGEN_DEF   = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the Perl module output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_PERLMOD tag is set to YES Doxygen will \r
+# generate a Perl module file that captures the structure of \r
+# the code including all documentation. Note that this \r
+# feature is still experimental and incomplete at the \r
+# moment.\r
+\r
+GENERATE_PERLMOD       = NO\r
+\r
+# If the PERLMOD_LATEX tag is set to YES Doxygen will generate \r
+# the necessary Makefile rules, Perl scripts and LaTeX code to be able \r
+# to generate PDF and DVI output from the Perl module output.\r
+\r
+PERLMOD_LATEX          = NO\r
+\r
+# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be \r
+# nicely formatted so it can be parsed by a human reader.  This is useful \r
+# if you want to understand what is going on.  On the other hand, if this \r
+# tag is set to NO the size of the Perl module output will be much smaller \r
+# and Perl will parse it just the same.\r
+\r
+PERLMOD_PRETTY         = YES\r
+\r
+# The names of the make variables in the generated doxyrules.make file \r
+# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. \r
+# This is useful so different doxyrules.make files included by the same \r
+# Makefile don't overwrite each other's variables.\r
+\r
+PERLMOD_MAKEVAR_PREFIX = \r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration options related to the preprocessor   \r
+#---------------------------------------------------------------------------\r
+\r
+# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will \r
+# evaluate all C-preprocessor directives found in the sources and include \r
+# files.\r
+\r
+ENABLE_PREPROCESSING   = YES\r
+\r
+# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro \r
+# names in the source code. If set to NO (the default) only conditional \r
+# compilation will be performed. Macro expansion can be done in a controlled \r
+# way by setting EXPAND_ONLY_PREDEF to YES.\r
+\r
+MACRO_EXPANSION        = YES\r
+\r
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES \r
+# then the macro expansion is limited to the macros specified with the \r
+# PREDEFINED and EXPAND_AS_DEFINED tags.\r
+\r
+EXPAND_ONLY_PREDEF     = YES\r
+\r
+# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files \r
+# in the INCLUDE_PATH (see below) will be search if a #include is found.\r
+\r
+SEARCH_INCLUDES        = YES\r
+\r
+# The INCLUDE_PATH tag can be used to specify one or more directories that \r
+# contain include files that are not input files but should be processed by \r
+# the preprocessor.\r
+\r
+INCLUDE_PATH           = \r
+\r
+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard \r
+# patterns (like *.h and *.hpp) to filter out the header-files in the \r
+# directories. If left blank, the patterns specified with FILE_PATTERNS will \r
+# be used.\r
+\r
+INCLUDE_FILE_PATTERNS  = \r
+\r
+# The PREDEFINED tag can be used to specify one or more macro names that \r
+# are defined before the preprocessor is started (similar to the -D option of \r
+# gcc). The argument of the tag is a list of macros of the form: name \r
+# or name=definition (no spaces). If the definition and the = are \r
+# omitted =1 is assumed. To prevent a macro definition from being \r
+# undefined via #undef or recursively expanded use the := operator \r
+# instead of the = operator.\r
+\r
+PREDEFINED             = __DOXYGEN__\r
+\r
+# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then \r
+# this tag can be used to specify a list of macro names that should be expanded. \r
+# The macro definition that is found in the sources will be used. \r
+# Use the PREDEFINED tag if you want to use a different macro definition.\r
+\r
+EXPAND_AS_DEFINED      = BUTTLOADTAG\r
+\r
+# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then \r
+# doxygen's preprocessor will remove all function-like macros that are alone \r
+# on a line, have an all uppercase name, and do not end with a semicolon. Such \r
+# function macros are typically used for boiler-plate code, and will confuse \r
+# the parser if not removed.\r
+\r
+SKIP_FUNCTION_MACROS   = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration::additions related to external references   \r
+#---------------------------------------------------------------------------\r
+\r
+# The TAGFILES option can be used to specify one or more tagfiles. \r
+# Optionally an initial location of the external documentation \r
+# can be added for each tagfile. The format of a tag file without \r
+# this location is as follows: \r
+#   TAGFILES = file1 file2 ... \r
+# Adding location for the tag files is done as follows: \r
+#   TAGFILES = file1=loc1 "file2 = loc2" ... \r
+# where "loc1" and "loc2" can be relative or absolute paths or \r
+# URLs. If a location is present for each tag, the installdox tool \r
+# does not have to be run to correct the links.\r
+# Note that each tag file must have a unique name\r
+# (where the name does NOT include the path)\r
+# If a tag file is not located in the directory in which doxygen \r
+# is run, you must also specify the path to the tagfile here.\r
+\r
+TAGFILES               = \r
+\r
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create \r
+# a tag file that is based on the input files it reads.\r
+\r
+GENERATE_TAGFILE       = \r
+\r
+# If the ALLEXTERNALS tag is set to YES all external classes will be listed \r
+# in the class index. If set to NO only the inherited external classes \r
+# will be listed.\r
+\r
+ALLEXTERNALS           = NO\r
+\r
+# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed \r
+# in the modules index. If set to NO, only the current project's groups will \r
+# be listed.\r
+\r
+EXTERNAL_GROUPS        = YES\r
+\r
+# The PERL_PATH should be the absolute path and name of the perl script \r
+# interpreter (i.e. the result of `which perl').\r
+\r
+PERL_PATH              = /usr/bin/perl\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration options related to the dot tool   \r
+#---------------------------------------------------------------------------\r
+\r
+# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will \r
+# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base \r
+# or super classes. Setting the tag to NO turns the diagrams off. Note that \r
+# this option is superseded by the HAVE_DOT option below. This is only a \r
+# fallback. It is recommended to install and use dot, since it yields more \r
+# powerful graphs.\r
+\r
+CLASS_DIAGRAMS         = NO\r
+\r
+# You can define message sequence charts within doxygen comments using the \msc \r
+# command. Doxygen will then run the mscgen tool (see \r
+# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the \r
+# documentation. The MSCGEN_PATH tag allows you to specify the directory where \r
+# the mscgen tool resides. If left empty the tool is assumed to be found in the \r
+# default search path.\r
+\r
+MSCGEN_PATH            = \r
+\r
+# If set to YES, the inheritance and collaboration graphs will hide \r
+# inheritance and usage relations if the target is undocumented \r
+# or is not a class.\r
+\r
+HIDE_UNDOC_RELATIONS   = YES\r
+\r
+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is \r
+# available from the path. This tool is part of Graphviz, a graph visualization \r
+# toolkit from AT&T and Lucent Bell Labs. The other options in this section \r
+# have no effect if this option is set to NO (the default)\r
+\r
+HAVE_DOT               = NO\r
+\r
+# By default doxygen will write a font called FreeSans.ttf to the output \r
+# directory and reference it in all dot files that doxygen generates. This \r
+# font does not include all possible unicode characters however, so when you need \r
+# these (or just want a differently looking font) you can specify the font name \r
+# using DOT_FONTNAME. You need need to make sure dot is able to find the font, \r
+# which can be done by putting it in a standard location or by setting the \r
+# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory \r
+# containing the font.\r
+\r
+DOT_FONTNAME           = FreeSans\r
+\r
+# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. \r
+# The default size is 10pt.\r
+\r
+DOT_FONTSIZE           = 10\r
+\r
+# By default doxygen will tell dot to use the output directory to look for the \r
+# FreeSans.ttf font (which doxygen will put there itself). If you specify a \r
+# different font using DOT_FONTNAME you can set the path where dot \r
+# can find it using this tag.\r
+\r
+DOT_FONTPATH           = \r
+\r
+# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for each documented class showing the direct and \r
+# indirect inheritance relations. Setting this tag to YES will force the \r
+# the CLASS_DIAGRAMS tag to NO.\r
+\r
+CLASS_GRAPH            = NO\r
+\r
+# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for each documented class showing the direct and \r
+# indirect implementation dependencies (inheritance, containment, and \r
+# class references variables) of the class with other documented classes.\r
+\r
+COLLABORATION_GRAPH    = NO\r
+\r
+# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for groups, showing the direct groups dependencies\r
+\r
+GROUP_GRAPHS           = NO\r
+\r
+# If the UML_LOOK tag is set to YES doxygen will generate inheritance and \r
+# collaboration diagrams in a style similar to the OMG's Unified Modeling \r
+# Language.\r
+\r
+UML_LOOK               = NO\r
+\r
+# If set to YES, the inheritance and collaboration graphs will show the \r
+# relations between templates and their instances.\r
+\r
+TEMPLATE_RELATIONS     = NO\r
+\r
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT \r
+# tags are set to YES then doxygen will generate a graph for each documented \r
+# file showing the direct and indirect include dependencies of the file with \r
+# other documented files.\r
+\r
+INCLUDE_GRAPH          = NO\r
+\r
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and \r
+# HAVE_DOT tags are set to YES then doxygen will generate a graph for each \r
+# documented header file showing the documented files that directly or \r
+# indirectly include this file.\r
+\r
+INCLUDED_BY_GRAPH      = NO\r
+\r
+# If the CALL_GRAPH and HAVE_DOT options are set to YES then \r
+# doxygen will generate a call dependency graph for every global function \r
+# or class method. Note that enabling this option will significantly increase \r
+# the time of a run. So in most cases it will be better to enable call graphs \r
+# for selected functions only using the \callgraph command.\r
+\r
+CALL_GRAPH             = NO\r
+\r
+# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then \r
+# doxygen will generate a caller dependency graph for every global function \r
+# or class method. Note that enabling this option will significantly increase \r
+# the time of a run. So in most cases it will be better to enable caller \r
+# graphs for selected functions only using the \callergraph command.\r
+\r
+CALLER_GRAPH           = NO\r
+\r
+# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen \r
+# will graphical hierarchy of all classes instead of a textual one.\r
+\r
+GRAPHICAL_HIERARCHY    = NO\r
+\r
+# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES \r
+# then doxygen will show the dependencies a directory has on other directories \r
+# in a graphical way. The dependency relations are determined by the #include\r
+# relations between the files in the directories.\r
+\r
+DIRECTORY_GRAPH        = NO\r
+\r
+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images \r
+# generated by dot. Possible values are png, jpg, or gif\r
+# If left blank png will be used.\r
+\r
+DOT_IMAGE_FORMAT       = png\r
+\r
+# The tag DOT_PATH can be used to specify the path where the dot tool can be \r
+# found. If left blank, it is assumed the dot tool can be found in the path.\r
+\r
+DOT_PATH               = "C:/Program Files/Graphviz2.18/bin"\r
+\r
+# The DOTFILE_DIRS tag can be used to specify one or more directories that \r
+# contain dot files that are included in the documentation (see the \r
+# \dotfile command).\r
+\r
+DOTFILE_DIRS           = \r
+\r
+# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of \r
+# nodes that will be shown in the graph. If the number of nodes in a graph \r
+# becomes larger than this value, doxygen will truncate the graph, which is \r
+# visualized by representing a node as a red box. Note that doxygen if the \r
+# number of direct children of the root node in a graph is already larger than \r
+# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note \r
+# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.\r
+\r
+DOT_GRAPH_MAX_NODES    = 15\r
+\r
+# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the \r
+# graphs generated by dot. A depth value of 3 means that only nodes reachable \r
+# from the root by following a path via at most 3 edges will be shown. Nodes \r
+# that lay further from the root node will be omitted. Note that setting this \r
+# option to 1 or 2 may greatly reduce the computation time needed for large \r
+# code bases. Also note that the size of a graph can be further restricted by \r
+# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.\r
+\r
+MAX_DOT_GRAPH_DEPTH    = 2\r
+\r
+# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent \r
+# background. This is disabled by default, because dot on Windows does not \r
+# seem to support this out of the box. Warning: Depending on the platform used, \r
+# enabling this option may lead to badly anti-aliased labels on the edges of \r
+# a graph (i.e. they become hard to read).\r
+\r
+DOT_TRANSPARENT        = YES\r
+\r
+# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output \r
+# files in one run (i.e. multiple -o and -T options on the command line). This \r
+# makes dot run faster, but since only newer versions of dot (>1.8.10) \r
+# support this, this feature is disabled by default.\r
+\r
+DOT_MULTI_TARGETS      = NO\r
+\r
+# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will \r
+# generate a legend page explaining the meaning of the various boxes and \r
+# arrows in the dot generated graphs.\r
+\r
+GENERATE_LEGEND        = YES\r
+\r
+# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will \r
+# remove the intermediate dot files that are used to generate \r
+# the various graphs.\r
+\r
+DOT_CLEANUP            = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration::additions related to the search engine   \r
+#---------------------------------------------------------------------------\r
+\r
+# The SEARCHENGINE tag specifies whether or not a search engine should be \r
+# used. If set to NO the values of all tags below this one will be ignored.\r
+\r
+SEARCHENGINE           = NO\r
diff --git a/Demos/Device/LowLevel/Mouse/Mouse.aps b/Demos/Device/LowLevel/Mouse/Mouse.aps
new file mode 100644 (file)
index 0000000..3ae1637
--- /dev/null
@@ -0,0 +1 @@
+<AVRStudio><MANAGEMENT><ProjectName>Mouse</ProjectName><Created>30-Sep-2008 14:13:52</Created><LastEdit>30-Sep-2008 14:14:08</LastEdit><ICON>241</ICON><ProjectType>0</ProjectType><Created>30-Sep-2008 14:13:52</Created><Version>4</Version><Build>4, 14, 0, 589</Build><ProjectTypeName>AVR GCC</ProjectTypeName></MANAGEMENT><CODE_CREATION><ObjectFile></ObjectFile><EntryFile></EntryFile><SaveFolder>C:\Users\Dean\Documents\Electronics\Projects\WORK\MyUSBWORK\Demos\Mouse\</SaveFolder></CODE_CREATION><DEBUG_TARGET><CURRENT_TARGET>JTAGICE mkII</CURRENT_TARGET><CURRENT_PART>AT90USB1287.xml</CURRENT_PART><BREAKPOINTS></BREAKPOINTS><IO_EXPAND><HIDE>false</HIDE></IO_EXPAND><REGISTERNAMES><Register>R00</Register><Register>R01</Register><Register>R02</Register><Register>R03</Register><Register>R04</Register><Register>R05</Register><Register>R06</Register><Register>R07</Register><Register>R08</Register><Register>R09</Register><Register>R10</Register><Register>R11</Register><Register>R12</Register><Register>R13</Register><Register>R14</Register><Register>R15</Register><Register>R16</Register><Register>R17</Register><Register>R18</Register><Register>R19</Register><Register>R20</Register><Register>R21</Register><Register>R22</Register><Register>R23</Register><Register>R24</Register><Register>R25</Register><Register>R26</Register><Register>R27</Register><Register>R28</Register><Register>R29</Register><Register>R30</Register><Register>R31</Register></REGISTERNAMES><COM>Auto</COM><COMType>0</COMType><WATCHNUM>0</WATCHNUM><WATCHNAMES><Pane0></Pane0><Pane1></Pane1><Pane2></Pane2><Pane3></Pane3></WATCHNAMES><BreakOnTrcaeFull>0</BreakOnTrcaeFull></DEBUG_TARGET><Debugger><Triggers></Triggers></Debugger><AVRGCCPLUGIN><FILES><SOURCEFILE>Descriptors.c</SOURCEFILE><SOURCEFILE>Mouse.c</SOURCEFILE><HEADERFILE>Descriptors.h</HEADERFILE><HEADERFILE>Mouse.h</HEADERFILE><OTHERFILE>makefile</OTHERFILE></FILES><CONFIGS><CONFIG><NAME>default</NAME><USESEXTERNALMAKEFILE>YES</USESEXTERNALMAKEFILE><EXTERNALMAKEFILE>makefile</EXTERNALMAKEFILE><PART>at90usb1287</PART><HEX>1</HEX><LIST>1</LIST><MAP>1</MAP><OUTPUTFILENAME>Mouse.elf</OUTPUTFILENAME><OUTPUTDIR>default\</OUTPUTDIR><ISDIRTY>1</ISDIRTY><OPTIONS/><INCDIRS/><LIBDIRS/><LIBS/><LINKOBJECTS/><OPTIONSFORALL>-Wall -gdwarf-2 -std=gnu99 -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums</OPTIONSFORALL><LINKEROPTIONS></LINKEROPTIONS><SEGMENTS/></CONFIG></CONFIGS><LASTCONFIG>default</LASTCONFIG><USES_WINAVR>1</USES_WINAVR><GCC_LOC>C:\WinAVR-20080512\bin\avr-gcc.exe</GCC_LOC><MAKE_LOC>C:\WinAVR-20080512\utils\bin\make.exe</MAKE_LOC></AVRGCCPLUGIN><IOView><usergroups/><sort sorted="0" column="0" ordername="0" orderaddress="0" ordergroup="0"/></IOView><Files></Files><Events><Bookmarks></Bookmarks></Events><Trace><Filters></Filters></Trace></AVRStudio>\r
diff --git a/Demos/Device/LowLevel/Mouse/Mouse.c b/Demos/Device/LowLevel/Mouse/Mouse.c
new file mode 100644 (file)
index 0000000..32b12fc
--- /dev/null
@@ -0,0 +1,360 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  Main source file for the Mouse demo. This file contains the main tasks of the demo and\r
+ *  is responsible for the initial application hardware configuration.\r
+ */\r
\r
+#include "Mouse.h"\r
+\r
+/* Scheduler Task List */\r
+TASK_LIST\r
+{\r
+       { .Task = USB_USBTask          , .TaskStatus = TASK_STOP },\r
+       { .Task = USB_Mouse_Report     , .TaskStatus = TASK_STOP },\r
+};\r
+\r
+/* Global Variables */\r
+/** Indicates what report mode the host has requested, true for normal HID reporting mode, false for special boot\r
+ *  protocol reporting mode.\r
+ */\r
+bool UsingReportProtocol = true;\r
+\r
+/** Current Idle period. This is set by the host via a Set Idle HID class request to silence the device's reports\r
+ *  for either the entire idle duration, or until the report status changes (e.g. the user moves the mouse).\r
+ */\r
+uint16_t IdleCount = HID_IDLE_CHANGESONLY;\r
+\r
+/** Current Idle period remaining. When the IdleCount value is set, this tracks the remaining number of idle\r
+ *  milliseconds. This is separate to the IdleCount timer and is incremented and compared as the host may request \r
+ *  the current idle period via a Get Idle HID class request, thus its value must be preserved.\r
+ */\r
+uint16_t IdleMSRemaining = 0;\r
+\r
+\r
+/** Main program entry point. This routine configures the hardware required by the application, then\r
+ *  starts the scheduler to run the application tasks.\r
+ */\r
+int main(void)\r
+{\r
+       /* Disable watchdog if enabled by bootloader/fuses */\r
+       MCUSR &= ~(1 << WDRF);\r
+       wdt_disable();\r
+\r
+       /* Disable clock division */\r
+       clock_prescale_set(clock_div_1);\r
+\r
+       /* Hardware Initialization */\r
+       Joystick_Init();\r
+       LEDs_Init();\r
+       Buttons_Init();\r
+       \r
+       /* Millisecond timer initialization, with output compare interrupt enabled for the idle timing */\r
+       OCR0A  = 0x7D;\r
+       TCCR0A = (1 << WGM01);\r
+       TCCR0B = ((1 << CS01) | (1 << CS00));\r
+       TIMSK0 = (1 << OCIE0A);\r
+\r
+       /* Indicate USB not ready */\r
+       UpdateStatus(Status_USBNotReady);\r
+       \r
+       /* Initialize Scheduler so that it can be used */\r
+       Scheduler_Init();\r
+\r
+       /* Initialize USB Subsystem */\r
+       USB_Init();\r
+\r
+       /* Scheduling - routine never returns, so put this last in the main function */\r
+       Scheduler_Start();\r
+}\r
+\r
+/** Event handler for the USB_Connect event. This indicates that the device is enumerating via the status LEDs and\r
+ *  starts the library USB task to begin the enumeration and USB management process.\r
+ */\r
+void EVENT_USB_Connect(void)\r
+{\r
+       /* Start USB management task */\r
+       Scheduler_SetTaskMode(USB_USBTask, TASK_RUN);\r
+       \r
+       /* Indicate USB enumerating */\r
+       UpdateStatus(Status_USBEnumerating);\r
+\r
+       /* Default to report protocol on connect */\r
+       UsingReportProtocol = true;\r
+}\r
+\r
+/** Event handler for the USB_Disconnect event. This indicates that the device is no longer connected to a host via\r
+ *  the status LEDs and stops the USB management and Mouse reporting tasks.\r
+ */\r
+void EVENT_USB_Disconnect(void)\r
+{\r
+       /* Stop running mouse reporting and USB management tasks */\r
+       Scheduler_SetTaskMode(USB_Mouse_Report, TASK_STOP);\r
+       Scheduler_SetTaskMode(USB_USBTask, TASK_STOP);\r
+\r
+       /* Indicate USB not ready */\r
+       UpdateStatus(Status_USBNotReady);\r
+}\r
+\r
+/** Event handler for the USB_ConfigurationChanged event. This is fired when the host sets the current configuration\r
+ *  of the USB device after enumeration - the device endpoints are configured and the mouse reporting task started.\r
+ */ \r
+void EVENT_USB_ConfigurationChanged(void)\r
+{\r
+       /* Setup Mouse Report Endpoint */\r
+       Endpoint_ConfigureEndpoint(MOUSE_EPNUM, EP_TYPE_INTERRUPT,\r
+                                      ENDPOINT_DIR_IN, MOUSE_EPSIZE,\r
+                                  ENDPOINT_BANK_SINGLE);\r
+\r
+       /* Indicate USB connected and ready */\r
+       UpdateStatus(Status_USBReady);\r
+\r
+       /* Start running mouse reporting task */\r
+       Scheduler_SetTaskMode(USB_Mouse_Report, TASK_RUN);\r
+}\r
+\r
+/** Event handler for the USB_UnhandledControlPacket event. This is used to catch standard and class specific\r
+ *  control requests that are not handled internally by the USB library (including the HID commands, which are\r
+ *  all issued via the control endpoint), so that they can be handled appropriately for the application.\r
+ */\r
+void EVENT_USB_UnhandledControlPacket(void)\r
+{\r
+       /* Handle HID Class specific requests */\r
+       switch (USB_ControlRequest.bRequest)\r
+       {\r
+               case REQ_GetReport:\r
+                       if (USB_ControlRequest.bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_INTERFACE))\r
+                       {\r
+                               USB_MouseReport_Data_t MouseReportData;\r
+\r
+                               Endpoint_ClearSETUP();\r
+\r
+                               /* Create the next mouse report for transmission to the host */\r
+                               CreateMouseReport(&MouseReportData);\r
+       \r
+                               /* Write the report data to the control endpoint */\r
+                               Endpoint_Write_Control_Stream_LE(&MouseReportData, sizeof(MouseReportData));\r
+                               \r
+                               /* Clear the report data afterwards */\r
+                               memset(&MouseReportData, 0, sizeof(MouseReportData));\r
+\r
+                               /* Finalize the stream transfer to send the last packet or clear the host abort */\r
+                               Endpoint_ClearOUT();\r
+                       }\r
+               \r
+                       break;\r
+               case REQ_GetProtocol:\r
+                       if (USB_ControlRequest.bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_INTERFACE))\r
+                       {\r
+                               Endpoint_ClearSETUP();\r
+                               \r
+                               /* Write the current protocol flag to the host */\r
+                               Endpoint_Write_Byte(UsingReportProtocol);\r
+                               \r
+                               /* Send the flag to the host */\r
+                               Endpoint_ClearIN();\r
+\r
+                               /* Acknowledge status stage */\r
+                               while (!(Endpoint_IsOUTReceived()));\r
+                               Endpoint_ClearOUT();\r
+                       }\r
+                       \r
+                       break;\r
+               case REQ_SetProtocol:\r
+                       if (USB_ControlRequest.bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE))\r
+                       {\r
+                               Endpoint_ClearSETUP();\r
+                               \r
+                               /* Set or clear the flag depending on what the host indicates that the current Protocol should be */\r
+                               UsingReportProtocol = (USB_ControlRequest.wValue != 0);\r
+                               \r
+                               /* Acknowledge status stage */\r
+                               while (!(Endpoint_IsINReady()));\r
+                               Endpoint_ClearIN();\r
+                       }\r
+                       \r
+                       break;\r
+               case REQ_SetIdle:\r
+                       if (USB_ControlRequest.bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE))\r
+                       {\r
+                               Endpoint_ClearSETUP();\r
+                               \r
+                               /* Get idle period in MSB */\r
+                               IdleCount = (USB_ControlRequest.wValue >> 8);\r
+                               \r
+                               /* Acknowledge status stage */\r
+                               while (!(Endpoint_IsINReady()));\r
+                               Endpoint_ClearIN();\r
+                       }\r
+                       \r
+                       break;\r
+               case REQ_GetIdle:\r
+                       if (USB_ControlRequest.bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_INTERFACE))\r
+                       {               \r
+                               Endpoint_ClearSETUP();\r
+                               \r
+                               /* Write the current idle duration to the host */\r
+                               Endpoint_Write_Byte(IdleCount);\r
+                               \r
+                               /* Send the flag to the host */\r
+                               Endpoint_ClearIN();\r
+\r
+                               /* Acknowledge status stage */\r
+                               while (!(Endpoint_IsOUTReceived()));\r
+                               Endpoint_ClearOUT();\r
+                       }\r
+\r
+                       break;\r
+       }\r
+}\r
+\r
+/** ISR for the timer 0 compare vector. This ISR fires once each millisecond, and increments the\r
+ *  scheduler elapsed idle period counter when the host has set an idle period.\r
+ */\r
+ISR(TIMER0_COMPA_vect, ISR_BLOCK)\r
+{\r
+       /* One millisecond has elapsed, decrement the idle time remaining counter if it has not already elapsed */\r
+       if (IdleMSRemaining)\r
+         IdleMSRemaining--;\r
+}\r
+\r
+/** Fills the given HID report data structure with the next HID report to send to the host.\r
+ *\r
+ *  \param ReportData  Pointer to a HID report data structure to be filled\r
+ */\r
+void CreateMouseReport(USB_MouseReport_Data_t* ReportData)\r
+{\r
+       uint8_t JoyStatus_LCL    = Joystick_GetStatus();\r
+       uint8_t ButtonStatus_LCL = Buttons_GetStatus();\r
+       \r
+       /* Clear the report contents */\r
+       memset(ReportData, 0, sizeof(USB_MouseReport_Data_t));\r
+\r
+       if (JoyStatus_LCL & JOY_UP)\r
+         ReportData->Y = -1;\r
+       else if (JoyStatus_LCL & JOY_DOWN)\r
+         ReportData->Y =  1;\r
+\r
+       if (JoyStatus_LCL & JOY_RIGHT)\r
+         ReportData->X =  1;\r
+       else if (JoyStatus_LCL & JOY_LEFT)\r
+         ReportData->X = -1;\r
+\r
+       if (JoyStatus_LCL & JOY_PRESS)\r
+         ReportData->Button  = (1 << 0);\r
+         \r
+       if (ButtonStatus_LCL & BUTTONS_BUTTON1)\r
+         ReportData->Button |= (1 << 1);\r
+}\r
+\r
+/** Sends the next HID report to the host, via the keyboard data endpoint. */\r
+void SendNextReport(void)\r
+{\r
+       static USB_MouseReport_Data_t PrevMouseReportData;\r
+       USB_MouseReport_Data_t        MouseReportData;\r
+       bool                          SendReport;\r
+       \r
+       /* Create the next mouse report for transmission to the host */\r
+       CreateMouseReport(&MouseReportData);\r
+       \r
+       /* Check to see if the report data has changed - if so a report MUST be sent */\r
+       SendReport = (memcmp(&PrevMouseReportData, &MouseReportData, sizeof(USB_MouseReport_Data_t)) != 0);\r
+       \r
+       /* Override the check if the Y or X values are non-zero - we want continuous movement while the joystick\r
+        * is being held down (via continuous reports), otherwise the cursor will only move once per joystick toggle */\r
+       if ((MouseReportData.Y != 0) || (MouseReportData.X != 0))\r
+         SendReport = true;\r
+       \r
+       /* Save the current report data for later comparison to check for changes */\r
+       PrevMouseReportData = MouseReportData;\r
+       \r
+       /* Check if the idle period is set and has elapsed */\r
+       if ((IdleCount != HID_IDLE_CHANGESONLY) && (!(IdleMSRemaining)))\r
+       {\r
+               /* Reset the idle time remaining counter, must multiply by 4 to get the duration in milliseconds */\r
+               IdleMSRemaining = (IdleCount << 2);\r
+               \r
+               /* Idle period is set and has elapsed, must send a report to the host */\r
+               SendReport = true;\r
+       }\r
+       \r
+       /* Select the Mouse Report Endpoint */\r
+       Endpoint_SelectEndpoint(MOUSE_EPNUM);\r
+\r
+       /* Check if Mouse Endpoint Ready for Read/Write and if we should send a new report */\r
+       if (Endpoint_IsReadWriteAllowed() && SendReport)\r
+       {\r
+               /* Write Mouse Report Data */\r
+               Endpoint_Write_Stream_LE(&MouseReportData, sizeof(MouseReportData));\r
+               \r
+               /* Finalize the stream transfer to send the last packet */\r
+               Endpoint_ClearIN();\r
+       }\r
+}\r
+\r
+/** Function to manage status updates to the user. This is done via LEDs on the given board, if available, but may be changed to\r
+ *  log to a serial port, or anything else that is suitable for status updates.\r
+ *\r
+ *  \param CurrentStatus  Current status of the system, from the Mouse_StatusCodes_t enum\r
+ */\r
+void UpdateStatus(uint8_t CurrentStatus)\r
+{\r
+       uint8_t LEDMask = LEDS_NO_LEDS;\r
+       \r
+       /* Set the LED mask to the appropriate LED mask based on the given status code */\r
+       switch (CurrentStatus)\r
+       {\r
+               case Status_USBNotReady:\r
+                       LEDMask = (LEDS_LED1);\r
+                       break;\r
+               case Status_USBEnumerating:\r
+                       LEDMask = (LEDS_LED1 | LEDS_LED2);\r
+                       break;\r
+               case Status_USBReady:\r
+                       LEDMask = (LEDS_LED2 | LEDS_LED4);\r
+                       break;\r
+       }\r
+       \r
+       /* Set the board LEDs to the new LED mask */\r
+       LEDs_SetAllLEDs(LEDMask);\r
+}\r
+\r
+/** Task to manage HID report generation and transmission to the host, when in report mode. */\r
+TASK(USB_Mouse_Report)\r
+{\r
+       /* Check if the USB system is connected to a host */\r
+       if (USB_IsConnected)\r
+       {\r
+               /* Send the next mouse report to the host */\r
+               SendNextReport();\r
+       }\r
+}\r
diff --git a/Demos/Device/LowLevel/Mouse/Mouse.h b/Demos/Device/LowLevel/Mouse/Mouse.h
new file mode 100644 (file)
index 0000000..65879da
--- /dev/null
@@ -0,0 +1,110 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  Header file for Mouse.c.\r
+ */\r
+\r
+#ifndef _MOUSE_H_\r
+#define _MOUSE_H_\r
+\r
+       /* Includes: */\r
+               #include <avr/io.h>\r
+               #include <avr/wdt.h>\r
+               #include <avr/interrupt.h>\r
+               #include <avr/power.h>\r
+               #include <stdbool.h>\r
+               #include <string.h>\r
+               \r
+               #include "Descriptors.h"\r
+\r
+               #include <LUFA/Version.h>                    // Library Version Information\r
+               #include <LUFA/Drivers/USB/USB.h>            // USB Functionality\r
+               #include <LUFA/Drivers/Board/Joystick.h>     // Joystick driver\r
+               #include <LUFA/Drivers/Board/LEDs.h>         // LEDs driver\r
+               #include <LUFA/Drivers/Board/Buttons.h>      // Board Buttons driver\r
+               #include <LUFA/Scheduler/Scheduler.h>        // Simple scheduler for task management\r
+               \r
+       /* Task Definitions: */\r
+               TASK(USB_Mouse_Report);\r
+\r
+       /* Macros: */\r
+               /** Idle period indicating that reports should be sent only when the inputs have changed */\r
+               #define HID_IDLE_CHANGESONLY 0\r
+       \r
+               /** HID Class specific request to get the next HID report from the device. */\r
+               #define REQ_GetReport        0x01\r
+\r
+               /** HID Class specific request to get the idle timeout period of the device. */\r
+               #define REQ_GetIdle          0x02\r
+\r
+               /** HID Class specific request to send the next HID report to the device. */\r
+               #define REQ_SetReport        0x09\r
+\r
+               /** HID Class specific request to set the idle timeout period of the device. */\r
+               #define REQ_SetIdle          0x0A\r
+\r
+               /** HID Class specific request to get the current HID protocol in use, either report or boot. */\r
+               #define REQ_GetProtocol      0x03\r
+\r
+               /** HID Class specific request to set the current HID protocol in use, either report or boot. */\r
+               #define REQ_SetProtocol      0x0B\r
+\r
+       /* Type Defines: */\r
+               /** Type define for the mouse HID report structure, for creating and sending HID reports to the host PC.\r
+                *  This mirrors the layout described to the host in the HID report descriptor, in Descriptors.c.\r
+                */\r
+               typedef struct\r
+               {\r
+                       uint8_t Button; /**< Bit mask of the currently pressed mouse buttons */\r
+                       int8_t  X; /**< Current mouse delta X movement, as a signed 8-bit integer */\r
+                       int8_t  Y; /**< Current mouse delta Y movement, as a signed 8-bit integer */\r
+               } USB_MouseReport_Data_t;\r
+               \r
+       /* Enums: */\r
+               /** Enum for the possible status codes for passing to the UpdateStatus() function. */\r
+               enum Mouse_StatusCodes_t\r
+               {\r
+                       Status_USBNotReady    = 0, /**< USB is not ready (disconnected from a USB host) */\r
+                       Status_USBEnumerating = 1, /**< USB interface is enumerating */\r
+                       Status_USBReady       = 2, /**< USB interface is connected and ready */\r
+               };\r
+                       \r
+       /* Function Prototypes: */\r
+               void EVENT_USB_Connect(void);\r
+               void EVENT_USB_Disconnect(void);\r
+               void EVENT_USB_ConfigurationChanged(void);\r
+               void EVENT_USB_UnhandledControlPacket(void);\r
+\r
+               void CreateMouseReport(USB_MouseReport_Data_t* ReportData);\r
+               void UpdateStatus(uint8_t CurrentStatus);\r
+\r
+#endif\r
diff --git a/Demos/Device/LowLevel/Mouse/Mouse.txt b/Demos/Device/LowLevel/Mouse/Mouse.txt
new file mode 100644 (file)
index 0000000..07982a7
--- /dev/null
@@ -0,0 +1,61 @@
+/** \file\r
+ *\r
+ *  This file contains special DoxyGen information for the generation of the main page and other special\r
+ *  documentation pages. It is not a project source file.\r
+ */\r
\r
+/** \mainpage Mouse Device Demo\r
+ *\r
+ *  \section SSec_Info USB Information:\r
+ *\r
+ *  The following table gives a rundown of the USB utilization of this demo.\r
+ *\r
+ *  <table>\r
+ *   <tr>\r
+ *    <td><b>USB Mode:</b></td>\r
+ *    <td>Device</td>\r
+ *   </tr>\r
+ *   <tr>\r
+ *    <td><b>USB Class:</b></td>\r
+ *    <td>Human Interface Device (HID)</td>\r
+ *   </tr>\r
+ *   <tr> \r
+ *    <td><b>USB Subclass:</b></td>\r
+ *    <td>N/A</td>\r
+ *   </tr>\r
+ *   <tr>\r
+ *    <td><b>Relevant Standards:</b></td>\r
+ *    <td>USBIF HID Specification, USBIF HID Usage Tables</td>\r
+ *   </tr>\r
+ *   <tr>\r
+ *    <td><b>Usable Speeds:</b></td>\r
+ *    <td>Low Speed Mode, Full Speed Mode</td>\r
+ *   </tr>\r
+ *  </table>\r
+ *\r
+ *  \section SSec_Description Project Description: \r
+ *\r
+ *  Mouse demonstration application. This gives a simple reference\r
+ *  application for implementing a USB Mouse using the basic USB HID\r
+ *  drivers in all modern OSes (i.e. no special drivers required). It is\r
+ *  boot protocol compatible, and thus works under compatible BIOS as if\r
+ *  it was a native mouse (e.g. PS/2).\r
+ *  \r
+ *  On start-up the system will automatically enumerate and function\r
+ *  as a mouse when the USB connection to a host is present. To use\r
+ *  the mouse, move the joystick to move the pointer, and push the\r
+ *  joystick inwards to simulate a left-button click. The HWB serves as\r
+ *  the right mouse button.\r
+ *\r
+ *  \section SSec_Options Project Options\r
+ *\r
+ *  The following defines can be found in this demo, which can control the demo behaviour when defined, or changed in value.\r
+ *\r
+ *  <table>\r
+ *   <tr>\r
+ *    <td>\r
+ *     None\r
+ *    </td>\r
+ *   </tr>\r
+ *  </table>\r
+ */\r
diff --git a/Demos/Device/LowLevel/Mouse/makefile b/Demos/Device/LowLevel/Mouse/makefile
new file mode 100644 (file)
index 0000000..632bf91
--- /dev/null
@@ -0,0 +1,733 @@
+# Hey Emacs, this is a -*- makefile -*-\r
+#----------------------------------------------------------------------------\r
+# WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al.\r
+#  >> Modified for use with the LUFA project. <<\r
+#\r
+# Released to the Public Domain\r
+#\r
+# Additional material for this makefile was written by:\r
+# Peter Fleury\r
+# Tim Henigan\r
+# Colin O'Flynn\r
+# Reiner Patommel\r
+# Markus Pfaff\r
+# Sander Pool\r
+# Frederik Rouleau\r
+# Carlos Lamas\r
+# Dean Camera\r
+# Opendous Inc.\r
+# Denver Gingerich\r
+#\r
+#----------------------------------------------------------------------------\r
+# On command line:\r
+#\r
+# make all = Make software.\r
+#\r
+# make clean = Clean out built project files.\r
+#\r
+# make coff = Convert ELF to AVR COFF.\r
+#\r
+# make extcoff = Convert ELF to AVR Extended COFF.\r
+#\r
+# make program = Download the hex file to the device, using avrdude.\r
+#                Please customize the avrdude settings below first!\r
+#\r
+# make dfu = Download the hex file to the device, using dfu-programmer (must\r
+#            have dfu-programmer installed).\r
+#\r
+# make flip = Download the hex file to the device, using Atmel FLIP (must\r
+#             have Atmel FLIP installed).\r
+#\r
+# make dfu-ee = Download the eeprom file to the device, using dfu-programmer\r
+#               (must have dfu-programmer installed).\r
+#\r
+# make flip-ee = Download the eeprom file to the device, using Atmel FLIP\r
+#                (must have Atmel FLIP installed).\r
+#\r
+# make doxygen = Generate DoxyGen documentation for the project (must have\r
+#                DoxyGen installed)\r
+#\r
+# make debug = Start either simulavr or avarice as specified for debugging, \r
+#              with avr-gdb or avr-insight as the front end for debugging.\r
+#\r
+# make filename.s = Just compile filename.c into the assembler code only.\r
+#\r
+# make filename.i = Create a preprocessed source file for use in submitting\r
+#                   bug reports to the GCC project.\r
+#\r
+# To rebuild project do "make clean" then "make all".\r
+#----------------------------------------------------------------------------\r
+\r
+\r
+# MCU name\r
+MCU = at90usb1287\r
+\r
+\r
+# Target board (see library "Board Types" documentation, USER or blank for projects not requiring\r
+# LUFA board drivers). If USER is selected, put custom board drivers in a directory called \r
+# "Board" inside the application directory.\r
+BOARD  = USBKEY\r
+\r
+\r
+# Processor frequency.\r
+#     This will define a symbol, F_CPU, in all source code files equal to the \r
+#     processor frequency. You can then use this symbol in your source code to \r
+#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done\r
+#     automatically to create a 32-bit value in your source code.\r
+#     Typical values are:\r
+#         F_CPU =  1000000\r
+#         F_CPU =  1843200\r
+#         F_CPU =  2000000\r
+#         F_CPU =  3686400\r
+#         F_CPU =  4000000\r
+#         F_CPU =  7372800\r
+#         F_CPU =  8000000\r
+#         F_CPU = 11059200\r
+#         F_CPU = 14745600\r
+#         F_CPU = 16000000\r
+#         F_CPU = 18432000\r
+#         F_CPU = 20000000\r
+F_CPU = 8000000\r
+\r
+\r
+# Input clock frequency.\r
+#     This will define a symbol, F_CLOCK, in all source code files equal to the \r
+#     input clock frequency (before any prescaling is performed). This value may\r
+#     differ from F_CPU if prescaling is used on the latter, and is required as the\r
+#     raw input clock is fed directly to the PLL sections of the AVR for high speed\r
+#     clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'\r
+#     at the end, this will be done automatically to create a 32-bit value in your\r
+#     source code.\r
+#\r
+#     If no clock division is performed on the input clock inside the AVR (via the\r
+#     CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.\r
+F_CLOCK = 8000000\r
+\r
+\r
+# Output format. (can be srec, ihex, binary)\r
+FORMAT = ihex\r
+\r
+\r
+# Target file name (without extension).\r
+TARGET = Mouse\r
+\r
+\r
+# Object files directory\r
+#     To put object files in current directory, use a dot (.), do NOT make\r
+#     this an empty or blank macro!\r
+OBJDIR = .\r
+\r
+\r
+# Path to the LUFA library\r
+LUFA_PATH = ../../..\r
+\r
+\r
+# List C source files here. (C dependencies are automatically generated.)\r
+SRC = $(TARGET).c                                                 \\r
+         Descriptors.c                                               \\r
+         $(LUFA_PATH)/LUFA/Scheduler/Scheduler.c                     \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/DevChapter9.c        \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Endpoint.c           \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Host.c               \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/HostChapter9.c       \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/LowLevel.c           \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Pipe.c               \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/Events.c            \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBInterrupt.c      \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBTask.c           \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/ConfigDescriptor.c  \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/Class/HIDParser.c             \\r
\r
+# List C++ source files here. (C dependencies are automatically generated.)\r
+CPPSRC = \r
+\r
+\r
+# List Assembler source files here.\r
+#     Make them always end in a capital .S.  Files ending in a lowercase .s\r
+#     will not be considered source files but generated files (assembler\r
+#     output from the compiler), and will be deleted upon "make clean"!\r
+#     Even though the DOS/Win* filesystem matches both .s and .S the same,\r
+#     it will preserve the spelling of the filenames, and gcc itself does\r
+#     care about how the name is spelled on its command-line.\r
+ASRC =\r
+\r
+\r
+# Optimization level, can be [0, 1, 2, 3, s]. \r
+#     0 = turn off optimization. s = optimize for size.\r
+#     (Note: 3 is not always the best optimization level. See avr-libc FAQ.)\r
+OPT = s\r
+\r
+\r
+# Debugging format.\r
+#     Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs.\r
+#     AVR Studio 4.10 requires dwarf-2.\r
+#     AVR [Extended] COFF format requires stabs, plus an avr-objcopy run.\r
+DEBUG = dwarf-2\r
+\r
+\r
+# List any extra directories to look for include files here.\r
+#     Each directory must be seperated by a space.\r
+#     Use forward slashes for directory separators.\r
+#     For a directory that has spaces, enclose it in quotes.\r
+EXTRAINCDIRS = $(LUFA_PATH)/\r
+\r
+\r
+# Compiler flag to set the C Standard level.\r
+#     c89   = "ANSI" C\r
+#     gnu89 = c89 plus GCC extensions\r
+#     c99   = ISO C99 standard (not yet fully implemented)\r
+#     gnu99 = c99 plus GCC extensions\r
+CSTANDARD = -std=gnu99\r
+\r
+\r
+# Place -D or -U options here for C sources\r
+CDEFS  = -DF_CPU=$(F_CPU)UL -DF_CLOCK=$(F_CLOCK)UL -DBOARD=BOARD_$(BOARD)\r
+CDEFS += -DUSE_NONSTANDARD_DESCRIPTOR_NAMES -DNO_STREAM_CALLBACKS -DUSB_DEVICE_ONLY\r
+CDEFS += -DFIXED_CONTROL_ENDPOINT_SIZE=8 -DUSE_SINGLE_DEVICE_CONFIGURATION\r
+CDEFS += -DUSE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)"\r
+\r
+# Place -D or -U options here for ASM sources\r
+ADEFS = -DF_CPU=$(F_CPU)\r
+\r
+\r
+# Place -D or -U options here for C++ sources\r
+CPPDEFS = -DF_CPU=$(F_CPU)UL\r
+#CPPDEFS += -D__STDC_LIMIT_MACROS\r
+#CPPDEFS += -D__STDC_CONSTANT_MACROS\r
+\r
+\r
+\r
+#---------------- Compiler Options C ----------------\r
+#  -g*:          generate debugging information\r
+#  -O*:          optimization level\r
+#  -f...:        tuning, see GCC manual and avr-libc documentation\r
+#  -Wall...:     warning level\r
+#  -Wa,...:      tell GCC to pass this to the assembler.\r
+#    -adhlns...: create assembler listing\r
+CFLAGS = -g$(DEBUG)\r
+CFLAGS += $(CDEFS)\r
+CFLAGS += -O$(OPT)\r
+CFLAGS += -funsigned-char\r
+CFLAGS += -funsigned-bitfields\r
+CFLAGS += -ffunction-sections\r
+CFLAGS += -fpack-struct\r
+CFLAGS += -fshort-enums\r
+CFLAGS += -finline-limit=20\r
+CFLAGS += -Wall\r
+CFLAGS += -Wstrict-prototypes\r
+#CFLAGS += -mshort-calls\r
+CFLAGS += -Wundef\r
+#CFLAGS += -fno-unit-at-a-time\r
+#CFLAGS += -Wunreachable-code\r
+#CFLAGS += -Wsign-compare\r
+CFLAGS += -Wa,-adhlns=$(<:%.c=$(OBJDIR)/%.lst)\r
+CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))\r
+CFLAGS += $(CSTANDARD)\r
+\r
+\r
+#---------------- Compiler Options C++ ----------------\r
+#  -g*:          generate debugging information\r
+#  -O*:          optimization level\r
+#  -f...:        tuning, see GCC manual and avr-libc documentation\r
+#  -Wall...:     warning level\r
+#  -Wa,...:      tell GCC to pass this to the assembler.\r
+#    -adhlns...: create assembler listing\r
+CPPFLAGS = -g$(DEBUG)\r
+CPPFLAGS += $(CPPDEFS)\r
+CPPFLAGS += -O$(OPT)\r
+CPPFLAGS += -funsigned-char\r
+CPPFLAGS += -funsigned-bitfields\r
+CPPFLAGS += -fpack-struct\r
+CPPFLAGS += -fshort-enums\r
+CPPFLAGS += -fno-exceptions\r
+CPPFLAGS += -Wall\r
+CFLAGS += -Wundef\r
+#CPPFLAGS += -mshort-calls\r
+#CPPFLAGS += -fno-unit-at-a-time\r
+#CPPFLAGS += -Wstrict-prototypes\r
+#CPPFLAGS += -Wunreachable-code\r
+#CPPFLAGS += -Wsign-compare\r
+CPPFLAGS += -Wa,-adhlns=$(<:%.cpp=$(OBJDIR)/%.lst)\r
+CPPFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))\r
+#CPPFLAGS += $(CSTANDARD)\r
+\r
+\r
+#---------------- Assembler Options ----------------\r
+#  -Wa,...:   tell GCC to pass this to the assembler.\r
+#  -adhlns:   create listing\r
+#  -gstabs:   have the assembler create line number information; note that\r
+#             for use in COFF files, additional information about filenames\r
+#             and function names needs to be present in the assembler source\r
+#             files -- see avr-libc docs [FIXME: not yet described there]\r
+#  -listing-cont-lines: Sets the maximum number of continuation lines of hex \r
+#       dump that will be displayed for a given single line of source input.\r
+ASFLAGS = $(ADEFS) -Wa,-adhlns=$(<:%.S=$(OBJDIR)/%.lst),-gstabs,--listing-cont-lines=100\r
+\r
+\r
+#---------------- Library Options ----------------\r
+# Minimalistic printf version\r
+PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min\r
+\r
+# Floating point printf version (requires MATH_LIB = -lm below)\r
+PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt\r
+\r
+# If this is left blank, then it will use the Standard printf version.\r
+PRINTF_LIB = \r
+#PRINTF_LIB = $(PRINTF_LIB_MIN)\r
+#PRINTF_LIB = $(PRINTF_LIB_FLOAT)\r
+\r
+\r
+# Minimalistic scanf version\r
+SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min\r
+\r
+# Floating point + %[ scanf version (requires MATH_LIB = -lm below)\r
+SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt\r
+\r
+# If this is left blank, then it will use the Standard scanf version.\r
+SCANF_LIB = \r
+#SCANF_LIB = $(SCANF_LIB_MIN)\r
+#SCANF_LIB = $(SCANF_LIB_FLOAT)\r
+\r
+\r
+MATH_LIB = -lm\r
+\r
+\r
+# List any extra directories to look for libraries here.\r
+#     Each directory must be seperated by a space.\r
+#     Use forward slashes for directory separators.\r
+#     For a directory that has spaces, enclose it in quotes.\r
+EXTRALIBDIRS = \r
+\r
+\r
+\r
+#---------------- External Memory Options ----------------\r
+\r
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),\r
+# used for variables (.data/.bss) and heap (malloc()).\r
+#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff\r
+\r
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),\r
+# only used for heap (malloc()).\r
+#EXTMEMOPTS = -Wl,--section-start,.data=0x801100,--defsym=__heap_end=0x80ffff\r
+\r
+EXTMEMOPTS =\r
+\r
+\r
+\r
+#---------------- Linker Options ----------------\r
+#  -Wl,...:     tell GCC to pass this to linker.\r
+#    -Map:      create map file\r
+#    --cref:    add cross reference to  map file\r
+LDFLAGS = -Wl,-Map=$(TARGET).map,--cref\r
+LDFLAGS += -Wl,--relax \r
+LDFLAGS += -Wl,--gc-sections\r
+LDFLAGS += $(EXTMEMOPTS)\r
+LDFLAGS += $(patsubst %,-L%,$(EXTRALIBDIRS))\r
+LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)\r
+#LDFLAGS += -T linker_script.x\r
+\r
+\r
+\r
+#---------------- Programming Options (avrdude) ----------------\r
+\r
+# Programming hardware: alf avr910 avrisp bascom bsd \r
+# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500\r
+#\r
+# Type: avrdude -c ?\r
+# to get a full listing.\r
+#\r
+AVRDUDE_PROGRAMMER = jtagmkII\r
+\r
+# com1 = serial port. Use lpt1 to connect to parallel port.\r
+AVRDUDE_PORT = usb\r
+\r
+AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex\r
+#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep\r
+\r
+\r
+# Uncomment the following if you want avrdude's erase cycle counter.\r
+# Note that this counter needs to be initialized first using -Yn,\r
+# see avrdude manual.\r
+#AVRDUDE_ERASE_COUNTER = -y\r
+\r
+# Uncomment the following if you do /not/ wish a verification to be\r
+# performed after programming the device.\r
+#AVRDUDE_NO_VERIFY = -V\r
+\r
+# Increase verbosity level.  Please use this when submitting bug\r
+# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude> \r
+# to submit bug reports.\r
+#AVRDUDE_VERBOSE = -v -v\r
+\r
+AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)\r
+AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY)\r
+AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE)\r
+AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER)\r
+\r
+\r
+\r
+#---------------- Debugging Options ----------------\r
+\r
+# For simulavr only - target MCU frequency.\r
+DEBUG_MFREQ = $(F_CPU)\r
+\r
+# Set the DEBUG_UI to either gdb or insight.\r
+# DEBUG_UI = gdb\r
+DEBUG_UI = insight\r
+\r
+# Set the debugging back-end to either avarice, simulavr.\r
+DEBUG_BACKEND = avarice\r
+#DEBUG_BACKEND = simulavr\r
+\r
+# GDB Init Filename.\r
+GDBINIT_FILE = __avr_gdbinit\r
+\r
+# When using avarice settings for the JTAG\r
+JTAG_DEV = /dev/com1\r
+\r
+# Debugging port used to communicate between GDB / avarice / simulavr.\r
+DEBUG_PORT = 4242\r
+\r
+# Debugging host used to communicate between GDB / avarice / simulavr, normally\r
+#     just set to localhost unless doing some sort of crazy debugging when \r
+#     avarice is running on a different computer.\r
+DEBUG_HOST = localhost\r
+\r
+\r
+\r
+#============================================================================\r
+\r
+\r
+# Define programs and commands.\r
+SHELL = sh\r
+CC = avr-gcc\r
+OBJCOPY = avr-objcopy\r
+OBJDUMP = avr-objdump\r
+SIZE = avr-size\r
+AR = avr-ar rcs\r
+NM = avr-nm\r
+AVRDUDE = avrdude\r
+REMOVE = rm -f\r
+REMOVEDIR = rm -rf\r
+COPY = cp\r
+WINSHELL = cmd\r
+\r
+# Define Messages\r
+# English\r
+MSG_ERRORS_NONE = Errors: none\r
+MSG_BEGIN = -------- begin --------\r
+MSG_END = --------  end  --------\r
+MSG_SIZE_BEFORE = Size before: \r
+MSG_SIZE_AFTER = Size after:\r
+MSG_COFF = Converting to AVR COFF:\r
+MSG_EXTENDED_COFF = Converting to AVR Extended COFF:\r
+MSG_FLASH = Creating load file for Flash:\r
+MSG_EEPROM = Creating load file for EEPROM:\r
+MSG_EXTENDED_LISTING = Creating Extended Listing:\r
+MSG_SYMBOL_TABLE = Creating Symbol Table:\r
+MSG_LINKING = Linking:\r
+MSG_COMPILING = Compiling C:\r
+MSG_COMPILING_CPP = Compiling C++:\r
+MSG_ASSEMBLING = Assembling:\r
+MSG_CLEANING = Cleaning project:\r
+MSG_CREATING_LIBRARY = Creating library:\r
+\r
+\r
+\r
+\r
+# Define all object files.\r
+OBJ = $(SRC:%.c=$(OBJDIR)/%.o) $(CPPSRC:%.cpp=$(OBJDIR)/%.o) $(ASRC:%.S=$(OBJDIR)/%.o) \r
+\r
+# Define all listing files.\r
+LST = $(SRC:%.c=$(OBJDIR)/%.lst) $(CPPSRC:%.cpp=$(OBJDIR)/%.lst) $(ASRC:%.S=$(OBJDIR)/%.lst) \r
+\r
+\r
+# Compiler flags to generate dependency files.\r
+GENDEPFLAGS = -MMD -MP -MF .dep/$(@F).d\r
+\r
+\r
+# Combine all necessary flags and optional flags.\r
+# Add target processor to flags.\r
+ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS)\r
+ALL_CPPFLAGS = -mmcu=$(MCU) -I. -x c++ $(CPPFLAGS) $(GENDEPFLAGS)\r
+ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)\r
+\r
+\r
+\r
+\r
+\r
+# Default target.\r
+all: begin gccversion sizebefore build checkhooks checklibmode checkboard sizeafter end\r
+\r
+# Change the build target to build a HEX file or a library.\r
+build: elf hex eep lss sym\r
+#build: lib\r
+\r
+\r
+elf: $(TARGET).elf\r
+hex: $(TARGET).hex\r
+eep: $(TARGET).eep\r
+lss: $(TARGET).lss\r
+sym: $(TARGET).sym\r
+LIBNAME=lib$(TARGET).a\r
+lib: $(LIBNAME)\r
+\r
+\r
+\r
+# Eye candy.\r
+# AVR Studio 3.x does not check make's exit code but relies on\r
+# the following magic strings to be generated by the compile job.\r
+begin:\r
+       @echo\r
+       @echo $(MSG_BEGIN)\r
+\r
+end:\r
+       @echo $(MSG_END)\r
+       @echo\r
+\r
+\r
+# Display size of file.\r
+HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex\r
+ELFSIZE = $(SIZE) $(MCU_FLAG) $(FORMAT_FLAG) $(TARGET).elf\r
+MCU_FLAG = $(shell $(SIZE) --help | grep -- --mcu > /dev/null && echo --mcu=$(MCU) )\r
+FORMAT_FLAG = $(shell $(SIZE) --help | grep -- --format=.*avr > /dev/null && echo --format=avr )\r
+\r
+sizebefore:\r
+       @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \\r
+       2>/dev/null; echo; fi\r
+\r
+sizeafter:\r
+       @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \\r
+       2>/dev/null; echo; fi\r
+\r
+checkhooks: build\r
+       @echo\r
+       @echo ------- Unhooked LUFA Events -------\r
+       @$(shell) (grep -s '^EVENT_.*LUFA/.*\\.o' $(TARGET).map | \\r
+                  cut -d' ' -f1 | cut -d'_' -f2- | grep ".*") || \\r
+                          echo "(None)"\r
+       @echo ------------------------------------\r
+\r
+checklibmode:\r
+       @echo\r
+       @echo ----------- Library Mode -----------\r
+       @$(shell) ($(CC) $(ALL_CFLAGS) -E -dM - < /dev/null \\r
+                 | grep 'USB_\(DEVICE\|HOST\)_ONLY' | cut -d' ' -f2 | grep ".*") \\r
+                 || echo "No specific mode (both device and host mode allowable)."\r
+       @echo ------------------------------------\r
+\r
+checkboard:\r
+       @echo\r
+       @echo ---------- Selected Board ----------\r
+       @echo Selected board model is $(BOARD).\r
+       @echo ------------------------------------\r
+       \r
+# Display compiler version information.\r
+gccversion : \r
+       @$(CC) --version\r
+\r
+\r
+\r
+# Program the device.  \r
+program: $(TARGET).hex $(TARGET).eep\r
+       $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)\r
+\r
+flip: $(TARGET).hex\r
+       batchisp -hardware usb -device $(MCU) -operation erase f\r
+       batchisp -hardware usb -device $(MCU) -operation loadbuffer $(TARGET).hex program\r
+       batchisp -hardware usb -device $(MCU) -operation start reset 0\r
+\r
+dfu: $(TARGET).hex\r
+       dfu-programmer $(MCU) erase\r
+       dfu-programmer $(MCU) flash --debug 1 $(TARGET).hex\r
+       dfu-programmer $(MCU) reset\r
+\r
+flip-ee: $(TARGET).hex $(TARGET).eep\r
+       copy $(TARGET).eep $(TARGET)eep.hex\r
+       batchisp -hardware usb -device $(MCU) -operation memory EEPROM erase\r
+       batchisp -hardware usb -device $(MCU) -operation memory EEPROM loadbuffer $(TARGET)eep.hex program\r
+       batchisp -hardware usb -device $(MCU) -operation start reset 0\r
+\r
+dfu-ee: $(TARGET).hex $(TARGET).eep\r
+       dfu-programmer $(MCU) flash-eeprom --debug 1 --suppress-bootloader-mem $(TARGET).eep\r
+       dfu-programmer $(MCU) reset\r
+\r
+\r
+# Generate avr-gdb config/init file which does the following:\r
+#     define the reset signal, load the target file, connect to target, and set \r
+#     a breakpoint at main().\r
+gdb-config: \r
+       @$(REMOVE) $(GDBINIT_FILE)\r
+       @echo define reset >> $(GDBINIT_FILE)\r
+       @echo SIGNAL SIGHUP >> $(GDBINIT_FILE)\r
+       @echo end >> $(GDBINIT_FILE)\r
+       @echo file $(TARGET).elf >> $(GDBINIT_FILE)\r
+       @echo target remote $(DEBUG_HOST):$(DEBUG_PORT)  >> $(GDBINIT_FILE)\r
+ifeq ($(DEBUG_BACKEND),simulavr)\r
+       @echo load  >> $(GDBINIT_FILE)\r
+endif\r
+       @echo break main >> $(GDBINIT_FILE)\r
+\r
+debug: gdb-config $(TARGET).elf\r
+ifeq ($(DEBUG_BACKEND), avarice)\r
+       @echo Starting AVaRICE - Press enter when "waiting to connect" message displays.\r
+       @$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \\r
+       $(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT)\r
+       @$(WINSHELL) /c pause\r
+\r
+else\r
+       @$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \\r
+       $(DEBUG_MFREQ) --port $(DEBUG_PORT)\r
+endif\r
+       @$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE)\r
+\r
+\r
+\r
+\r
+# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.\r
+COFFCONVERT = $(OBJCOPY) --debugging\r
+COFFCONVERT += --change-section-address .data-0x800000\r
+COFFCONVERT += --change-section-address .bss-0x800000\r
+COFFCONVERT += --change-section-address .noinit-0x800000\r
+COFFCONVERT += --change-section-address .eeprom-0x810000\r
+\r
+\r
+\r
+coff: $(TARGET).elf\r
+       @echo\r
+       @echo $(MSG_COFF) $(TARGET).cof\r
+       $(COFFCONVERT) -O coff-avr $< $(TARGET).cof\r
+\r
+\r
+extcoff: $(TARGET).elf\r
+       @echo\r
+       @echo $(MSG_EXTENDED_COFF) $(TARGET).cof\r
+       $(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof\r
+\r
+\r
+\r
+# Create final output files (.hex, .eep) from ELF output file.\r
+%.hex: %.elf\r
+       @echo\r
+       @echo $(MSG_FLASH) $@\r
+       $(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@\r
+\r
+%.eep: %.elf\r
+       @echo\r
+       @echo $(MSG_EEPROM) $@\r
+       -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \\r
+       --change-section-lma .eeprom=0 --no-change-warnings -O $(FORMAT) $< $@ || exit 0\r
+\r
+# Create extended listing file from ELF output file.\r
+%.lss: %.elf\r
+       @echo\r
+       @echo $(MSG_EXTENDED_LISTING) $@\r
+       $(OBJDUMP) -h -z -S $< > $@\r
+\r
+# Create a symbol table from ELF output file.\r
+%.sym: %.elf\r
+       @echo\r
+       @echo $(MSG_SYMBOL_TABLE) $@\r
+       $(NM) -n $< > $@\r
+\r
+\r
+\r
+# Create library from object files.\r
+.SECONDARY : $(TARGET).a\r
+.PRECIOUS : $(OBJ)\r
+%.a: $(OBJ)\r
+       @echo\r
+       @echo $(MSG_CREATING_LIBRARY) $@\r
+       $(AR) $@ $(OBJ)\r
+\r
+\r
+# Link: create ELF output file from object files.\r
+.SECONDARY : $(TARGET).elf\r
+.PRECIOUS : $(OBJ)\r
+%.elf: $(OBJ)\r
+       @echo\r
+       @echo $(MSG_LINKING) $@\r
+       $(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)\r
+\r
+\r
+# Compile: create object files from C source files.\r
+$(OBJDIR)/%.o : %.c\r
+       @echo\r
+       @echo $(MSG_COMPILING) $<\r
+       $(CC) -c $(ALL_CFLAGS) $< -o $@ \r
+\r
+\r
+# Compile: create object files from C++ source files.\r
+$(OBJDIR)/%.o : %.cpp\r
+       @echo\r
+       @echo $(MSG_COMPILING_CPP) $<\r
+       $(CC) -c $(ALL_CPPFLAGS) $< -o $@ \r
+\r
+\r
+# Compile: create assembler files from C source files.\r
+%.s : %.c\r
+       $(CC) -S $(ALL_CFLAGS) $< -o $@\r
+\r
+\r
+# Compile: create assembler files from C++ source files.\r
+%.s : %.cpp\r
+       $(CC) -S $(ALL_CPPFLAGS) $< -o $@\r
+\r
+\r
+# Assemble: create object files from assembler source files.\r
+$(OBJDIR)/%.o : %.S\r
+       @echo\r
+       @echo $(MSG_ASSEMBLING) $<\r
+       $(CC) -c $(ALL_ASFLAGS) $< -o $@\r
+\r
+\r
+# Create preprocessed source for use in sending a bug report.\r
+%.i : %.c\r
+       $(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ \r
+       \r
+\r
+# Target: clean project.\r
+clean: begin clean_list clean_binary end\r
+\r
+clean_binary:\r
+       $(REMOVE) $(TARGET).hex\r
+       \r
+clean_list:\r
+       @echo $(MSG_CLEANING)\r
+       $(REMOVE) $(TARGET).eep\r
+       $(REMOVE) $(TARGET)eep.hex\r
+       $(REMOVE) $(TARGET).cof\r
+       $(REMOVE) $(TARGET).elf\r
+       $(REMOVE) $(TARGET).map\r
+       $(REMOVE) $(TARGET).sym\r
+       $(REMOVE) $(TARGET).lss\r
+       $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.o)\r
+       $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.lst)\r
+       $(REMOVE) $(SRC:.c=.s)\r
+       $(REMOVE) $(SRC:.c=.d)\r
+       $(REMOVE) $(SRC:.c=.i)\r
+       $(REMOVEDIR) .dep\r
+\r
+\r
+doxygen:\r
+       @echo Generating Project Documentation...\r
+       @doxygen Doxygen.conf\r
+       @echo Documentation Generation Complete.\r
+\r
+clean_doxygen:\r
+       rm -rf Documentation\r
+\r
+# Create object files directory\r
+$(shell mkdir $(OBJDIR) 2>/dev/null)\r
+\r
+\r
+# Include the dependency files.\r
+-include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)\r
+\r
+\r
+# Listing of phony targets.\r
+.PHONY : all checkhooks checklibmode checkboard   \\r
+begin finish end sizebefore sizeafter gccversion  \\r
+build elf hex eep lss sym coff extcoff clean      \\r
+clean_list clean_binary program debug gdb-config  \\r
+doxygen dfu flip flip-ee dfu-ee
\ No newline at end of file
diff --git a/Demos/Device/LowLevel/RNDISEthernet/Descriptors.c b/Demos/Device/LowLevel/RNDISEthernet/Descriptors.c
new file mode 100644 (file)
index 0000000..1be5bfd
--- /dev/null
@@ -0,0 +1,263 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  USB Device Descriptors, for library use when in USB device mode. Descriptors are special \r
+ *  computer-readable structures which the host requests upon device enumeration, to determine\r
+ *  the device's capabilities and functions.  \r
+ */\r
\r
+#include "Descriptors.h"\r
+\r
+/** Device descriptor structure. This descriptor, located in FLASH memory, describes the overall\r
+ *  device characteristics, including the supported USB version, control endpoint size and the\r
+ *  number of device configurations. The descriptor is read out by the USB host when the enumeration\r
+ *  process begins.\r
+ */\r
+USB_Descriptor_Device_t PROGMEM DeviceDescriptor =\r
+{\r
+       .Header                 = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device},\r
+               \r
+       .USBSpecification       = VERSION_BCD(01.10),\r
+       .Class                  = 0x02,\r
+       .SubClass               = 0x00,\r
+       .Protocol               = 0x00,\r
+                               \r
+       .Endpoint0Size          = FIXED_CONTROL_ENDPOINT_SIZE,\r
+               \r
+       .VendorID               = 0x03EB,\r
+       .ProductID              = 0x204C,\r
+       .ReleaseNumber          = 0x0000,\r
+               \r
+       .ManufacturerStrIndex   = 0x01,\r
+       .ProductStrIndex        = 0x02,\r
+       .SerialNumStrIndex      = NO_DESCRIPTOR,\r
+               \r
+       .NumberOfConfigurations = 1\r
+};\r
+\r
+/** Configuration descriptor structure. This descriptor, located in FLASH memory, describes the usage\r
+ *  of the device in one of its supported configurations, including information about any device interfaces\r
+ *  and endpoints. The descriptor is read out by the USB host during the enumeration process when selecting\r
+ *  a configuration so that the host may correctly communicate with the USB device.\r
+ */\r
+USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =\r
+{\r
+       .Config = \r
+               {\r
+                       .Header                 = {.Size = sizeof(USB_Descriptor_Configuration_Header_t), .Type = DTYPE_Configuration},\r
+\r
+                       .TotalConfigurationSize = sizeof(USB_Descriptor_Configuration_t),\r
+                       .TotalInterfaces        = 2,\r
+                               \r
+                       .ConfigurationNumber    = 1,\r
+                       .ConfigurationStrIndex  = NO_DESCRIPTOR,\r
+                               \r
+                       .ConfigAttributes       = (USB_CONFIG_ATTR_BUSPOWERED | USB_CONFIG_ATTR_SELFPOWERED),\r
+                       \r
+                       .MaxPowerConsumption    = USB_CONFIG_POWER_MA(100)\r
+               },\r
+               \r
+       .CCI_Interface = \r
+               {\r
+                       .Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},\r
+\r
+                       .InterfaceNumber        = 0,\r
+                       .AlternateSetting       = 0,\r
+                       \r
+                       .TotalEndpoints         = 1,\r
+                               \r
+                       .Class                  = 0x02,\r
+                       .SubClass               = 0x02,\r
+                       .Protocol               = 0xFF,\r
+                               \r
+                       .InterfaceStrIndex      = NO_DESCRIPTOR\r
+               },\r
+\r
+       .CDC_Functional_Header = \r
+               {\r
+                       .Header                 = {.Size = sizeof(CDC_FUNCTIONAL_DESCRIPTOR(2)), .Type = 0x24},\r
+                       .SubType                = 0x00,\r
+                       \r
+                       .Data                   = {0x01, 0x10}\r
+               },\r
+               \r
+       .CDC_Functional_CallManagement= \r
+               {\r
+                       .Header                 = {.Size = sizeof(CDC_FUNCTIONAL_DESCRIPTOR(2)), .Type = 0x24},\r
+                       .SubType                = 0x01,\r
+                       \r
+                       .Data                   = {0x00, 0x00}\r
+               },\r
+               \r
+       .CDC_Functional_AbstractControlManagement = \r
+               {\r
+                       .Header                 = {.Size = sizeof(CDC_FUNCTIONAL_DESCRIPTOR(1)), .Type = 0x24},\r
+                       .SubType                = 0x02,\r
+                       \r
+                       .Data                   = {0x00}\r
+               },\r
+       \r
+       .CDC_Functional_Union = \r
+               {\r
+                       .Header                 = {.Size = sizeof(CDC_FUNCTIONAL_DESCRIPTOR(2)), .Type = 0x24},\r
+                       .SubType                = 0x06,\r
+                       \r
+                       .Data                   = {0x00, 0x01}\r
+               },\r
+\r
+       .ManagementEndpoint = \r
+               {\r
+                       .Header                 = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},\r
+                                                                                \r
+                       .EndpointAddress        = (ENDPOINT_DESCRIPTOR_DIR_IN | CDC_NOTIFICATION_EPNUM),\r
+                       .Attributes             = EP_TYPE_INTERRUPT,\r
+                       .EndpointSize           = CDC_NOTIFICATION_EPSIZE,\r
+                       .PollingIntervalMS      = 0x02\r
+               },\r
+\r
+       .DCI_Interface = \r
+               {\r
+                       .Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},\r
+\r
+                       .InterfaceNumber        = 1,\r
+                       .AlternateSetting       = 0,\r
+                       \r
+                       .TotalEndpoints         = 2,\r
+                               \r
+                       .Class                  = 0x0A,\r
+                       .SubClass               = 0x00,\r
+                       .Protocol               = 0x00,\r
+                               \r
+                       .InterfaceStrIndex      = NO_DESCRIPTOR\r
+               },\r
+\r
+       .DataOutEndpoint = \r
+               {\r
+                       .Header                 = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},\r
+                                                                                \r
+                       .EndpointAddress        = (ENDPOINT_DESCRIPTOR_DIR_OUT | CDC_RX_EPNUM),\r
+                       .Attributes             = EP_TYPE_BULK,\r
+                       .EndpointSize           = CDC_TXRX_EPSIZE,\r
+                       .PollingIntervalMS      = 0x00\r
+               },\r
+               \r
+       .DataInEndpoint = \r
+               {\r
+                       .Header                 = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},\r
+                                                                                \r
+                       .EndpointAddress        = (ENDPOINT_DESCRIPTOR_DIR_IN | CDC_TX_EPNUM),\r
+                       .Attributes             = EP_TYPE_BULK,\r
+                       .EndpointSize           = CDC_TXRX_EPSIZE,\r
+                       .PollingIntervalMS      = 0x00\r
+               }\r
+};\r
+\r
+/** Language descriptor structure. This descriptor, located in FLASH memory, is returned when the host requests\r
+ *  the string descriptor with index 0 (the first index). It is actually an array of 16-bit integers, which indicate\r
+ *  via the language ID table available at USB.org what languages the device supports for its string descriptors.\r
+ */\r
+USB_Descriptor_String_t PROGMEM LanguageString =\r
+{\r
+       .Header                 = {.Size = USB_STRING_LEN(1), .Type = DTYPE_String},\r
+               \r
+       .UnicodeString          = {LANGUAGE_ID_ENG}\r
+};\r
+\r
+/** Manufacturer descriptor string. This is a Unicode string containing the manufacturer's details in human readable\r
+ *  form, and is read out upon request by the host when the appropriate string ID is requested, listed in the Device\r
+ *  Descriptor.\r
+ */\r
+USB_Descriptor_String_t PROGMEM ManufacturerString =\r
+{\r
+       .Header                 = {.Size = USB_STRING_LEN(11), .Type = DTYPE_String},\r
+               \r
+       .UnicodeString          = L"Dean Camera"\r
+};\r
+\r
+/** Product descriptor string. This is a Unicode string containing the product's details in human readable form,\r
+ *  and is read out upon request by the host when the appropriate string ID is requested, listed in the Device\r
+ *  Descriptor.\r
+ */\r
+USB_Descriptor_String_t PROGMEM ProductString =\r
+{\r
+       .Header                 = {.Size = USB_STRING_LEN(19), .Type = DTYPE_String},\r
+               \r
+       .UnicodeString          = L"LUFA RNDIS CDC Demo"\r
+};\r
+\r
+/** This function is called by the library when in device mode, and must be overridden (see library "USB Descriptors"\r
+ *  documentation) by the application code so that the address and size of a requested descriptor can be given\r
+ *  to the USB library. When the device receives a Get Descriptor request on the control endpoint, this function\r
+ *  is called so that the descriptor details can be passed back and the appropriate descriptor sent back to the\r
+ *  USB host.\r
+ */\r
+uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
+{\r
+       const uint8_t  DescriptorType   = (wValue >> 8);\r
+       const uint8_t  DescriptorNumber = (wValue & 0xFF);\r
+\r
+       void*    Address = NULL;\r
+       uint16_t Size    = NO_DESCRIPTOR;\r
+\r
+       switch (DescriptorType)\r
+       {\r
+               case DTYPE_Device:\r
+                       Address = (void*)&DeviceDescriptor;\r
+                       Size    = sizeof(USB_Descriptor_Device_t);\r
+                       break;\r
+               case DTYPE_Configuration: \r
+                       Address = (void*)&ConfigurationDescriptor;\r
+                       Size    = sizeof(USB_Descriptor_Configuration_t);\r
+                       break;\r
+               case DTYPE_String:\r
+                       switch (DescriptorNumber)\r
+                       {\r
+                               case 0x00:\r
+                                       Address = (void*)&LanguageString;\r
+                                       Size    = pgm_read_byte(&LanguageString.Header.Size);\r
+                                       break;\r
+                               case 0x01:\r
+                                       Address = (void*)&ManufacturerString;\r
+                                       Size    = pgm_read_byte(&ManufacturerString.Header.Size);\r
+                                       break;\r
+                               case 0x02:\r
+                                       Address = (void*)&ProductString;\r
+                                       Size    = pgm_read_byte(&ProductString.Header.Size);\r
+                                       break;\r
+                       }\r
+                       \r
+                       break;\r
+       }\r
+       \r
+       *DescriptorAddress = Address;\r
+       return Size;\r
+}\r
diff --git a/Demos/Device/LowLevel/RNDISEthernet/Descriptors.h b/Demos/Device/LowLevel/RNDISEthernet/Descriptors.h
new file mode 100644 (file)
index 0000000..eb43735
--- /dev/null
@@ -0,0 +1,98 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  Header file for Descriptors.c.\r
+ */\r
+\r
+#ifndef _DESCRIPTORS_H_\r
+#define _DESCRIPTORS_H_\r
+\r
+       /* Includes: */\r
+               #include <LUFA/Drivers/USB/USB.h>\r
+\r
+               #include <avr/pgmspace.h>\r
+\r
+       /* Macros: */\r
+               /** Macro to define a CDC class-specific functional descriptor. CDC functional descriptors have a\r
+                *  uniform structure but variable sized data payloads, thus cannot be represented accurately by\r
+                *  a single typedef struct. A macro is used instead so that functional descriptors can be created\r
+                *  easily by specifying the size of the payload. This allows sizeof() to work correctly.\r
+                *\r
+                *  \param DataSize  Size in bytes of the CDC functional descriptor's data payload\r
+                */             \r
+               #define CDC_FUNCTIONAL_DESCRIPTOR(DataSize)        \\r
+                    struct                                        \\r
+                    {                                             \\r
+                         USB_Descriptor_Header_t Header;          \\r
+                             uint8_t                 SubType;         \\r
+                         uint8_t                 Data[DataSize];  \\r
+                    }\r
+\r
+               /** Endpoint number of the CDC device-to-host notification IN endpoint. */\r
+               #define CDC_NOTIFICATION_EPNUM         3\r
+\r
+               /** Endpoint number of the CDC device-to-host data IN endpoint. */\r
+               #define CDC_TX_EPNUM                   1        \r
+\r
+               /** Endpoint number of the CDC host-to-device data OUT endpoint. */\r
+               #define CDC_RX_EPNUM                   2        \r
+\r
+               /** Size in bytes of the CDC device-to-host notification IN endpoint. */\r
+               #define CDC_NOTIFICATION_EPSIZE        8\r
+\r
+               /** Size in bytes of the CDC data IN and OUT endpoints. */\r
+               #define CDC_TXRX_EPSIZE                64\r
+\r
+       /* Type Defines: */\r
+               /** Type define for the device configuration descriptor structure. This must be defined in the\r
+                *  application code, as the configuration descriptor contains several sub-descriptors which\r
+                *  vary between devices, and which describe the device's usage to the host.\r
+                */\r
+               typedef struct\r
+               {\r
+                       USB_Descriptor_Configuration_Header_t    Config;\r
+                       USB_Descriptor_Interface_t               CCI_Interface;\r
+                       CDC_FUNCTIONAL_DESCRIPTOR(2)             CDC_Functional_Header;\r
+                       CDC_FUNCTIONAL_DESCRIPTOR(2)             CDC_Functional_CallManagement;\r
+                       CDC_FUNCTIONAL_DESCRIPTOR(1)             CDC_Functional_AbstractControlManagement;\r
+                       CDC_FUNCTIONAL_DESCRIPTOR(2)             CDC_Functional_Union;\r
+                       USB_Descriptor_Endpoint_t                ManagementEndpoint;\r
+                       USB_Descriptor_Interface_t               DCI_Interface;\r
+                       USB_Descriptor_Endpoint_t                DataOutEndpoint;\r
+                       USB_Descriptor_Endpoint_t                DataInEndpoint;\r
+               } USB_Descriptor_Configuration_t;\r
+\r
+       /* Function Prototypes: */\r
+               uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
+                                                                                       ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);\r
+\r
+#endif\r
diff --git a/Demos/Device/LowLevel/RNDISEthernet/Doxygen.conf b/Demos/Device/LowLevel/RNDISEthernet/Doxygen.conf
new file mode 100644 (file)
index 0000000..9d7973b
--- /dev/null
@@ -0,0 +1,1485 @@
+# Doxyfile 1.5.7.1\r
+\r
+# This file describes the settings to be used by the documentation system\r
+# doxygen (www.doxygen.org) for a project\r
+#\r
+# All text after a hash (#) is considered a comment and will be ignored\r
+# The format is:\r
+#       TAG = value [value, ...]\r
+# For lists items can also be appended using:\r
+#       TAG += value [value, ...]\r
+# Values that contain spaces should be placed between quotes (" ")\r
+\r
+#---------------------------------------------------------------------------\r
+# Project related configuration options\r
+#---------------------------------------------------------------------------\r
+\r
+# This tag specifies the encoding used for all characters in the config file \r
+# that follow. The default is UTF-8 which is also the encoding used for all \r
+# text before the first occurrence of this tag. Doxygen uses libiconv (or the \r
+# iconv built into libc) for the transcoding. See \r
+# http://www.gnu.org/software/libiconv for the list of possible encodings.\r
+\r
+DOXYFILE_ENCODING      = UTF-8\r
+\r
+# The PROJECT_NAME tag is a single word (or a sequence of words surrounded \r
+# by quotes) that should identify the project.\r
+\r
+PROJECT_NAME           = "LUFA Library - RNDIS Ethernet Demo"\r
+\r
+# The PROJECT_NUMBER tag can be used to enter a project or revision number. \r
+# This could be handy for archiving the generated documentation or \r
+# if some version control system is used.\r
+\r
+PROJECT_NUMBER         = 0.0.0\r
+\r
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) \r
+# base path where the generated documentation will be put. \r
+# If a relative path is entered, it will be relative to the location \r
+# where doxygen was started. If left blank the current directory will be used.\r
+\r
+OUTPUT_DIRECTORY       = ./Documentation/\r
+\r
+# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create \r
+# 4096 sub-directories (in 2 levels) under the output directory of each output \r
+# format and will distribute the generated files over these directories. \r
+# Enabling this option can be useful when feeding doxygen a huge amount of \r
+# source files, where putting all generated files in the same directory would \r
+# otherwise cause performance problems for the file system.\r
+\r
+CREATE_SUBDIRS         = YES\r
+\r
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all \r
+# documentation generated by doxygen is written. Doxygen will use this \r
+# information to generate all constant output in the proper language. \r
+# The default language is English, other supported languages are: \r
+# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, \r
+# Croatian, Czech, Danish, Dutch, Farsi, Finnish, French, German, Greek, \r
+# Hungarian, Italian, Japanese, Japanese-en (Japanese with English messages), \r
+# Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, Polish, \r
+# Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, Slovene, \r
+# Spanish, Swedish, and Ukrainian.\r
+\r
+OUTPUT_LANGUAGE        = English\r
+\r
+# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will \r
+# include brief member descriptions after the members that are listed in \r
+# the file and class documentation (similar to JavaDoc). \r
+# Set to NO to disable this.\r
+\r
+BRIEF_MEMBER_DESC      = YES\r
+\r
+# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend \r
+# the brief description of a member or function before the detailed description. \r
+# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the \r
+# brief descriptions will be completely suppressed.\r
+\r
+REPEAT_BRIEF           = YES\r
+\r
+# This tag implements a quasi-intelligent brief description abbreviator \r
+# that is used to form the text in various listings. Each string \r
+# in this list, if found as the leading text of the brief description, will be \r
+# stripped from the text and the result after processing the whole list, is \r
+# used as the annotated text. Otherwise, the brief description is used as-is. \r
+# If left blank, the following values are used ("$name" is automatically \r
+# replaced with the name of the entity): "The $name class" "The $name widget" \r
+# "The $name file" "is" "provides" "specifies" "contains" \r
+# "represents" "a" "an" "the"\r
+\r
+ABBREVIATE_BRIEF       = "The $name class" \\r
+                         "The $name widget" \\r
+                         "The $name file" \\r
+                         is \\r
+                         provides \\r
+                         specifies \\r
+                         contains \\r
+                         represents \\r
+                         a \\r
+                         an \\r
+                         the\r
+\r
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then \r
+# Doxygen will generate a detailed section even if there is only a brief \r
+# description.\r
+\r
+ALWAYS_DETAILED_SEC    = NO\r
+\r
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all \r
+# inherited members of a class in the documentation of that class as if those \r
+# members were ordinary class members. Constructors, destructors and assignment \r
+# operators of the base classes will not be shown.\r
+\r
+INLINE_INHERITED_MEMB  = NO\r
+\r
+# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full \r
+# path before files name in the file list and in the header files. If set \r
+# to NO the shortest path that makes the file name unique will be used.\r
+\r
+FULL_PATH_NAMES        = YES\r
+\r
+# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag \r
+# can be used to strip a user-defined part of the path. Stripping is \r
+# only done if one of the specified strings matches the left-hand part of \r
+# the path. The tag can be used to show relative paths in the file list. \r
+# If left blank the directory from which doxygen is run is used as the \r
+# path to strip.\r
+\r
+STRIP_FROM_PATH        = \r
+\r
+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of \r
+# the path mentioned in the documentation of a class, which tells \r
+# the reader which header file to include in order to use a class. \r
+# If left blank only the name of the header file containing the class \r
+# definition is used. Otherwise one should specify the include paths that \r
+# are normally passed to the compiler using the -I flag.\r
+\r
+STRIP_FROM_INC_PATH    = \r
+\r
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter \r
+# (but less readable) file names. This can be useful is your file systems \r
+# doesn't support long names like on DOS, Mac, or CD-ROM.\r
+\r
+SHORT_NAMES            = YES\r
+\r
+# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen \r
+# will interpret the first line (until the first dot) of a JavaDoc-style \r
+# comment as the brief description. If set to NO, the JavaDoc \r
+# comments will behave just like regular Qt-style comments \r
+# (thus requiring an explicit @brief command for a brief description.)\r
+\r
+JAVADOC_AUTOBRIEF      = NO\r
+\r
+# If the QT_AUTOBRIEF tag is set to YES then Doxygen will \r
+# interpret the first line (until the first dot) of a Qt-style \r
+# comment as the brief description. If set to NO, the comments \r
+# will behave just like regular Qt-style comments (thus requiring \r
+# an explicit \brief command for a brief description.)\r
+\r
+QT_AUTOBRIEF           = NO\r
+\r
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen \r
+# treat a multi-line C++ special comment block (i.e. a block of //! or /// \r
+# comments) as a brief description. This used to be the default behaviour. \r
+# The new default is to treat a multi-line C++ comment block as a detailed \r
+# description. Set this tag to YES if you prefer the old behaviour instead.\r
+\r
+MULTILINE_CPP_IS_BRIEF = NO\r
+\r
+# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented \r
+# member inherits the documentation from any documented member that it \r
+# re-implements.\r
+\r
+INHERIT_DOCS           = YES\r
+\r
+# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce \r
+# a new page for each member. If set to NO, the documentation of a member will \r
+# be part of the file/class/namespace that contains it.\r
+\r
+SEPARATE_MEMBER_PAGES  = NO\r
+\r
+# The TAB_SIZE tag can be used to set the number of spaces in a tab. \r
+# Doxygen uses this value to replace tabs by spaces in code fragments.\r
+\r
+TAB_SIZE               = 4\r
+\r
+# This tag can be used to specify a number of aliases that acts \r
+# as commands in the documentation. An alias has the form "name=value". \r
+# For example adding "sideeffect=\par Side Effects:\n" will allow you to \r
+# put the command \sideeffect (or @sideeffect) in the documentation, which \r
+# will result in a user-defined paragraph with heading "Side Effects:". \r
+# You can put \n's in the value part of an alias to insert newlines.\r
+\r
+ALIASES                = \r
+\r
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C \r
+# sources only. Doxygen will then generate output that is more tailored for C. \r
+# For instance, some of the names that are used will be different. The list \r
+# of all members will be omitted, etc.\r
+\r
+OPTIMIZE_OUTPUT_FOR_C  = YES\r
+\r
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java \r
+# sources only. Doxygen will then generate output that is more tailored for \r
+# Java. For instance, namespaces will be presented as packages, qualified \r
+# scopes will look different, etc.\r
+\r
+OPTIMIZE_OUTPUT_JAVA   = NO\r
+\r
+# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran \r
+# sources only. Doxygen will then generate output that is more tailored for \r
+# Fortran.\r
+\r
+OPTIMIZE_FOR_FORTRAN   = NO\r
+\r
+# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL \r
+# sources. Doxygen will then generate output that is tailored for \r
+# VHDL.\r
+\r
+OPTIMIZE_OUTPUT_VHDL   = NO\r
+\r
+# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want \r
+# to include (a tag file for) the STL sources as input, then you should \r
+# set this tag to YES in order to let doxygen match functions declarations and \r
+# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. \r
+# func(std::string) {}). This also make the inheritance and collaboration \r
+# diagrams that involve STL classes more complete and accurate.\r
+\r
+BUILTIN_STL_SUPPORT    = NO\r
+\r
+# If you use Microsoft's C++/CLI language, you should set this option to YES to\r
+# enable parsing support.\r
+\r
+CPP_CLI_SUPPORT        = NO\r
+\r
+# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. \r
+# Doxygen will parse them like normal C++ but will assume all classes use public \r
+# instead of private inheritance when no explicit protection keyword is present.\r
+\r
+SIP_SUPPORT            = NO\r
+\r
+# For Microsoft's IDL there are propget and propput attributes to indicate getter \r
+# and setter methods for a property. Setting this option to YES (the default) \r
+# will make doxygen to replace the get and set methods by a property in the \r
+# documentation. This will only work if the methods are indeed getting or \r
+# setting a simple type. If this is not the case, or you want to show the \r
+# methods anyway, you should set this option to NO.\r
+\r
+IDL_PROPERTY_SUPPORT   = YES\r
+\r
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC \r
+# tag is set to YES, then doxygen will reuse the documentation of the first \r
+# member in the group (if any) for the other members of the group. By default \r
+# all members of a group must be documented explicitly.\r
+\r
+DISTRIBUTE_GROUP_DOC   = NO\r
+\r
+# Set the SUBGROUPING tag to YES (the default) to allow class member groups of \r
+# the same type (for instance a group of public functions) to be put as a \r
+# subgroup of that type (e.g. under the Public Functions section). Set it to \r
+# NO to prevent subgrouping. Alternatively, this can be done per class using \r
+# the \nosubgrouping command.\r
+\r
+SUBGROUPING            = YES\r
+\r
+# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum \r
+# is documented as struct, union, or enum with the name of the typedef. So \r
+# typedef struct TypeS {} TypeT, will appear in the documentation as a struct \r
+# with name TypeT. When disabled the typedef will appear as a member of a file, \r
+# namespace, or class. And the struct will be named TypeS. This can typically \r
+# be useful for C code in case the coding convention dictates that all compound \r
+# types are typedef'ed and only the typedef is referenced, never the tag name.\r
+\r
+TYPEDEF_HIDES_STRUCT   = NO\r
+\r
+# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to \r
+# determine which symbols to keep in memory and which to flush to disk.\r
+# When the cache is full, less often used symbols will be written to disk.\r
+# For small to medium size projects (<1000 input files) the default value is \r
+# probably good enough. For larger projects a too small cache size can cause \r
+# doxygen to be busy swapping symbols to and from disk most of the time \r
+# causing a significant performance penality. \r
+# If the system has enough physical memory increasing the cache will improve the \r
+# performance by keeping more symbols in memory. Note that the value works on \r
+# a logarithmic scale so increasing the size by one will rougly double the \r
+# memory usage. The cache size is given by this formula: \r
+# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, \r
+# corresponding to a cache size of 2^16 = 65536 symbols\r
+\r
+SYMBOL_CACHE_SIZE      = 0\r
+\r
+#---------------------------------------------------------------------------\r
+# Build related configuration options\r
+#---------------------------------------------------------------------------\r
+\r
+# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in \r
+# documentation are documented, even if no documentation was available. \r
+# Private class members and static file members will be hidden unless \r
+# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES\r
+\r
+EXTRACT_ALL            = YES\r
+\r
+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class \r
+# will be included in the documentation.\r
+\r
+EXTRACT_PRIVATE        = YES\r
+\r
+# If the EXTRACT_STATIC tag is set to YES all static members of a file \r
+# will be included in the documentation.\r
+\r
+EXTRACT_STATIC         = YES\r
+\r
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) \r
+# defined locally in source files will be included in the documentation. \r
+# If set to NO only classes defined in header files are included.\r
+\r
+EXTRACT_LOCAL_CLASSES  = YES\r
+\r
+# This flag is only useful for Objective-C code. When set to YES local \r
+# methods, which are defined in the implementation section but not in \r
+# the interface are included in the documentation. \r
+# If set to NO (the default) only methods in the interface are included.\r
+\r
+EXTRACT_LOCAL_METHODS  = NO\r
+\r
+# If this flag is set to YES, the members of anonymous namespaces will be \r
+# extracted and appear in the documentation as a namespace called \r
+# 'anonymous_namespace{file}', where file will be replaced with the base \r
+# name of the file that contains the anonymous namespace. By default \r
+# anonymous namespace are hidden.\r
+\r
+EXTRACT_ANON_NSPACES   = NO\r
+\r
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all \r
+# undocumented members of documented classes, files or namespaces. \r
+# If set to NO (the default) these members will be included in the \r
+# various overviews, but no documentation section is generated. \r
+# This option has no effect if EXTRACT_ALL is enabled.\r
+\r
+HIDE_UNDOC_MEMBERS     = NO\r
+\r
+# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all \r
+# undocumented classes that are normally visible in the class hierarchy. \r
+# If set to NO (the default) these classes will be included in the various \r
+# overviews. This option has no effect if EXTRACT_ALL is enabled.\r
+\r
+HIDE_UNDOC_CLASSES     = NO\r
+\r
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all \r
+# friend (class|struct|union) declarations. \r
+# If set to NO (the default) these declarations will be included in the \r
+# documentation.\r
+\r
+HIDE_FRIEND_COMPOUNDS  = NO\r
+\r
+# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any \r
+# documentation blocks found inside the body of a function. \r
+# If set to NO (the default) these blocks will be appended to the \r
+# function's detailed documentation block.\r
+\r
+HIDE_IN_BODY_DOCS      = NO\r
+\r
+# The INTERNAL_DOCS tag determines if documentation \r
+# that is typed after a \internal command is included. If the tag is set \r
+# to NO (the default) then the documentation will be excluded. \r
+# Set it to YES to include the internal documentation.\r
+\r
+INTERNAL_DOCS          = NO\r
+\r
+# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate \r
+# file names in lower-case letters. If set to YES upper-case letters are also \r
+# allowed. This is useful if you have classes or files whose names only differ \r
+# in case and if your file system supports case sensitive file names. Windows \r
+# and Mac users are advised to set this option to NO.\r
+\r
+CASE_SENSE_NAMES       = NO\r
+\r
+# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen \r
+# will show members with their full class and namespace scopes in the \r
+# documentation. If set to YES the scope will be hidden.\r
+\r
+HIDE_SCOPE_NAMES       = NO\r
+\r
+# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen \r
+# will put a list of the files that are included by a file in the documentation \r
+# of that file.\r
+\r
+SHOW_INCLUDE_FILES     = YES\r
+\r
+# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] \r
+# is inserted in the documentation for inline members.\r
+\r
+INLINE_INFO            = YES\r
+\r
+# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen \r
+# will sort the (detailed) documentation of file and class members \r
+# alphabetically by member name. If set to NO the members will appear in \r
+# declaration order.\r
+\r
+SORT_MEMBER_DOCS       = YES\r
+\r
+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the \r
+# brief documentation of file, namespace and class members alphabetically \r
+# by member name. If set to NO (the default) the members will appear in \r
+# declaration order.\r
+\r
+SORT_BRIEF_DOCS        = NO\r
+\r
+# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the \r
+# hierarchy of group names into alphabetical order. If set to NO (the default) \r
+# the group names will appear in their defined order.\r
+\r
+SORT_GROUP_NAMES       = NO\r
+\r
+# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be \r
+# sorted by fully-qualified names, including namespaces. If set to \r
+# NO (the default), the class list will be sorted only by class name, \r
+# not including the namespace part. \r
+# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.\r
+# Note: This option applies only to the class list, not to the \r
+# alphabetical list.\r
+\r
+SORT_BY_SCOPE_NAME     = NO\r
+\r
+# The GENERATE_TODOLIST tag can be used to enable (YES) or \r
+# disable (NO) the todo list. This list is created by putting \todo \r
+# commands in the documentation.\r
+\r
+GENERATE_TODOLIST      = NO\r
+\r
+# The GENERATE_TESTLIST tag can be used to enable (YES) or \r
+# disable (NO) the test list. This list is created by putting \test \r
+# commands in the documentation.\r
+\r
+GENERATE_TESTLIST      = NO\r
+\r
+# The GENERATE_BUGLIST tag can be used to enable (YES) or \r
+# disable (NO) the bug list. This list is created by putting \bug \r
+# commands in the documentation.\r
+\r
+GENERATE_BUGLIST       = NO\r
+\r
+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or \r
+# disable (NO) the deprecated list. This list is created by putting \r
+# \deprecated commands in the documentation.\r
+\r
+GENERATE_DEPRECATEDLIST= YES\r
+\r
+# The ENABLED_SECTIONS tag can be used to enable conditional \r
+# documentation sections, marked by \if sectionname ... \endif.\r
+\r
+ENABLED_SECTIONS       = \r
+\r
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines \r
+# the initial value of a variable or define consists of for it to appear in \r
+# the documentation. If the initializer consists of more lines than specified \r
+# here it will be hidden. Use a value of 0 to hide initializers completely. \r
+# The appearance of the initializer of individual variables and defines in the \r
+# documentation can be controlled using \showinitializer or \hideinitializer \r
+# command in the documentation regardless of this setting.\r
+\r
+MAX_INITIALIZER_LINES  = 30\r
+\r
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated \r
+# at the bottom of the documentation of classes and structs. If set to YES the \r
+# list will mention the files that were used to generate the documentation.\r
+\r
+SHOW_USED_FILES        = YES\r
+\r
+# If the sources in your project are distributed over multiple directories \r
+# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy \r
+# in the documentation. The default is NO.\r
+\r
+SHOW_DIRECTORIES       = YES\r
+\r
+# Set the SHOW_FILES tag to NO to disable the generation of the Files page.\r
+# This will remove the Files entry from the Quick Index and from the \r
+# Folder Tree View (if specified). The default is YES.\r
+\r
+SHOW_FILES             = YES\r
+\r
+# Set the SHOW_NAMESPACES tag to NO to disable the generation of the \r
+# Namespaces page.  This will remove the Namespaces entry from the Quick Index\r
+# and from the Folder Tree View (if specified). The default is YES.\r
+\r
+SHOW_NAMESPACES        = YES\r
+\r
+# The FILE_VERSION_FILTER tag can be used to specify a program or script that \r
+# doxygen should invoke to get the current version for each file (typically from \r
+# the version control system). Doxygen will invoke the program by executing (via \r
+# popen()) the command <command> <input-file>, where <command> is the value of \r
+# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file \r
+# provided by doxygen. Whatever the program writes to standard output \r
+# is used as the file version. See the manual for examples.\r
+\r
+FILE_VERSION_FILTER    = \r
+\r
+# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by \r
+# doxygen. The layout file controls the global structure of the generated output files \r
+# in an output format independent way. The create the layout file that represents \r
+# doxygen's defaults, run doxygen with the -l option. You can optionally specify a \r
+# file name after the option, if omitted DoxygenLayout.xml will be used as the name \r
+# of the layout file.\r
+\r
+LAYOUT_FILE            = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to warning and progress messages\r
+#---------------------------------------------------------------------------\r
+\r
+# The QUIET tag can be used to turn on/off the messages that are generated \r
+# by doxygen. Possible values are YES and NO. If left blank NO is used.\r
+\r
+QUIET                  = YES\r
+\r
+# The WARNINGS tag can be used to turn on/off the warning messages that are \r
+# generated by doxygen. Possible values are YES and NO. If left blank \r
+# NO is used.\r
+\r
+WARNINGS               = YES\r
+\r
+# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings \r
+# for undocumented members. If EXTRACT_ALL is set to YES then this flag will \r
+# automatically be disabled.\r
+\r
+WARN_IF_UNDOCUMENTED   = YES\r
+\r
+# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for \r
+# potential errors in the documentation, such as not documenting some \r
+# parameters in a documented function, or documenting parameters that \r
+# don't exist or using markup commands wrongly.\r
+\r
+WARN_IF_DOC_ERROR      = YES\r
+\r
+# This WARN_NO_PARAMDOC option can be abled to get warnings for \r
+# functions that are documented, but have no documentation for their parameters \r
+# or return value. If set to NO (the default) doxygen will only warn about \r
+# wrong or incomplete parameter documentation, but not about the absence of \r
+# documentation.\r
+\r
+WARN_NO_PARAMDOC       = YES\r
+\r
+# The WARN_FORMAT tag determines the format of the warning messages that \r
+# doxygen can produce. The string should contain the $file, $line, and $text \r
+# tags, which will be replaced by the file and line number from which the \r
+# warning originated and the warning text. Optionally the format may contain \r
+# $version, which will be replaced by the version of the file (if it could \r
+# be obtained via FILE_VERSION_FILTER)\r
+\r
+WARN_FORMAT            = "$file:$line: $text"\r
+\r
+# The WARN_LOGFILE tag can be used to specify a file to which warning \r
+# and error messages should be written. If left blank the output is written \r
+# to stderr.\r
+\r
+WARN_LOGFILE           = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the input files\r
+#---------------------------------------------------------------------------\r
+\r
+# The INPUT tag can be used to specify the files and/or directories that contain \r
+# documented source files. You may enter file names like "myfile.cpp" or \r
+# directories like "/usr/src/myproject". Separate the files or directories \r
+# with spaces.\r
+\r
+INPUT                  = ./\r
+\r
+# This tag can be used to specify the character encoding of the source files \r
+# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is \r
+# also the default input encoding. Doxygen uses libiconv (or the iconv built \r
+# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for \r
+# the list of possible encodings.\r
+\r
+INPUT_ENCODING         = UTF-8\r
+\r
+# If the value of the INPUT tag contains directories, you can use the \r
+# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \r
+# and *.h) to filter out the source-files in the directories. If left \r
+# blank the following patterns are tested: \r
+# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx \r
+# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90\r
+\r
+FILE_PATTERNS          = *.h \\r
+                         *.c \\r
+                                                *.txt\r
+\r
+# The RECURSIVE tag can be used to turn specify whether or not subdirectories \r
+# should be searched for input files as well. Possible values are YES and NO. \r
+# If left blank NO is used.\r
+\r
+RECURSIVE              = YES\r
+\r
+# The EXCLUDE tag can be used to specify files and/or directories that should \r
+# excluded from the INPUT source files. This way you can easily exclude a \r
+# subdirectory from a directory tree whose root is specified with the INPUT tag.\r
+\r
+EXCLUDE                = \r
+\r
+# The EXCLUDE_SYMLINKS tag can be used select whether or not files or \r
+# directories that are symbolic links (a Unix filesystem feature) are excluded \r
+# from the input.\r
+\r
+EXCLUDE_SYMLINKS       = NO\r
+\r
+# If the value of the INPUT tag contains directories, you can use the \r
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude \r
+# certain files from those directories. Note that the wildcards are matched \r
+# against the file with absolute path, so to exclude all test directories \r
+# for example use the pattern */test/*\r
+\r
+EXCLUDE_PATTERNS       = */LowLevel/USBMode.h\r
+\r
+# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names \r
+# (namespaces, classes, functions, etc.) that should be excluded from the \r
+# output. The symbol name can be a fully qualified name, a word, or if the \r
+# wildcard * is used, a substring. Examples: ANamespace, AClass, \r
+# AClass::ANamespace, ANamespace::*Test\r
+\r
+EXCLUDE_SYMBOLS        = __*\r
+\r
+# The EXAMPLE_PATH tag can be used to specify one or more files or \r
+# directories that contain example code fragments that are included (see \r
+# the \include command).\r
+\r
+EXAMPLE_PATH           = \r
+\r
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the \r
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \r
+# and *.h) to filter out the source-files in the directories. If left \r
+# blank all files are included.\r
+\r
+EXAMPLE_PATTERNS       = *\r
+\r
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be \r
+# searched for input files to be used with the \include or \dontinclude \r
+# commands irrespective of the value of the RECURSIVE tag. \r
+# Possible values are YES and NO. If left blank NO is used.\r
+\r
+EXAMPLE_RECURSIVE      = NO\r
+\r
+# The IMAGE_PATH tag can be used to specify one or more files or \r
+# directories that contain image that are included in the documentation (see \r
+# the \image command).\r
+\r
+IMAGE_PATH             = \r
+\r
+# The INPUT_FILTER tag can be used to specify a program that doxygen should \r
+# invoke to filter for each input file. Doxygen will invoke the filter program \r
+# by executing (via popen()) the command <filter> <input-file>, where <filter> \r
+# is the value of the INPUT_FILTER tag, and <input-file> is the name of an \r
+# input file. Doxygen will then use the output that the filter program writes \r
+# to standard output.  If FILTER_PATTERNS is specified, this tag will be \r
+# ignored.\r
+\r
+INPUT_FILTER           = \r
+\r
+# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern \r
+# basis.  Doxygen will compare the file name with each pattern and apply the \r
+# filter if there is a match.  The filters are a list of the form: \r
+# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further \r
+# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER \r
+# is applied to all files.\r
+\r
+FILTER_PATTERNS        = \r
+\r
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using \r
+# INPUT_FILTER) will be used to filter the input files when producing source \r
+# files to browse (i.e. when SOURCE_BROWSER is set to YES).\r
+\r
+FILTER_SOURCE_FILES    = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to source browsing\r
+#---------------------------------------------------------------------------\r
+\r
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will \r
+# be generated. Documented entities will be cross-referenced with these sources. \r
+# Note: To get rid of all source code in the generated output, make sure also \r
+# VERBATIM_HEADERS is set to NO.\r
+\r
+SOURCE_BROWSER         = NO\r
+\r
+# Setting the INLINE_SOURCES tag to YES will include the body \r
+# of functions and classes directly in the documentation.\r
+\r
+INLINE_SOURCES         = NO\r
+\r
+# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct \r
+# doxygen to hide any special comment blocks from generated source code \r
+# fragments. Normal C and C++ comments will always remain visible.\r
+\r
+STRIP_CODE_COMMENTS    = YES\r
+\r
+# If the REFERENCED_BY_RELATION tag is set to YES \r
+# then for each documented function all documented \r
+# functions referencing it will be listed.\r
+\r
+REFERENCED_BY_RELATION = NO\r
+\r
+# If the REFERENCES_RELATION tag is set to YES \r
+# then for each documented function all documented entities \r
+# called/used by that function will be listed.\r
+\r
+REFERENCES_RELATION    = NO\r
+\r
+# If the REFERENCES_LINK_SOURCE tag is set to YES (the default)\r
+# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from\r
+# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will\r
+# link to the source code.  Otherwise they will link to the documentstion.\r
+\r
+REFERENCES_LINK_SOURCE = NO\r
+\r
+# If the USE_HTAGS tag is set to YES then the references to source code \r
+# will point to the HTML generated by the htags(1) tool instead of doxygen \r
+# built-in source browser. The htags tool is part of GNU's global source \r
+# tagging system (see http://www.gnu.org/software/global/global.html). You \r
+# will need version 4.8.6 or higher.\r
+\r
+USE_HTAGS              = NO\r
+\r
+# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen \r
+# will generate a verbatim copy of the header file for each class for \r
+# which an include is specified. Set to NO to disable this.\r
+\r
+VERBATIM_HEADERS       = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the alphabetical class index\r
+#---------------------------------------------------------------------------\r
+\r
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index \r
+# of all compounds will be generated. Enable this if the project \r
+# contains a lot of classes, structs, unions or interfaces.\r
+\r
+ALPHABETICAL_INDEX     = YES\r
+\r
+# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then \r
+# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns \r
+# in which this list will be split (can be a number in the range [1..20])\r
+\r
+COLS_IN_ALPHA_INDEX    = 5\r
+\r
+# In case all classes in a project start with a common prefix, all \r
+# classes will be put under the same header in the alphabetical index. \r
+# The IGNORE_PREFIX tag can be used to specify one or more prefixes that \r
+# should be ignored while generating the index headers.\r
+\r
+IGNORE_PREFIX          = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the HTML output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_HTML tag is set to YES (the default) Doxygen will \r
+# generate HTML output.\r
+\r
+GENERATE_HTML          = YES\r
+\r
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `html' will be used as the default path.\r
+\r
+HTML_OUTPUT            = html\r
+\r
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for \r
+# each generated HTML page (for example: .htm,.php,.asp). If it is left blank \r
+# doxygen will generate files with .html extension.\r
+\r
+HTML_FILE_EXTENSION    = .html\r
+\r
+# The HTML_HEADER tag can be used to specify a personal HTML header for \r
+# each generated HTML page. If it is left blank doxygen will generate a \r
+# standard header.\r
+\r
+HTML_HEADER            = \r
+\r
+# The HTML_FOOTER tag can be used to specify a personal HTML footer for \r
+# each generated HTML page. If it is left blank doxygen will generate a \r
+# standard footer.\r
+\r
+HTML_FOOTER            = \r
+\r
+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading \r
+# style sheet that is used by each HTML page. It can be used to \r
+# fine-tune the look of the HTML output. If the tag is left blank doxygen \r
+# will generate a default style sheet. Note that doxygen will try to copy \r
+# the style sheet file to the HTML output directory, so don't put your own \r
+# stylesheet in the HTML output directory as well, or it will be erased!\r
+\r
+HTML_STYLESHEET        = \r
+\r
+# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, \r
+# files or namespaces will be aligned in HTML using tables. If set to \r
+# NO a bullet list will be used.\r
+\r
+HTML_ALIGN_MEMBERS     = YES\r
+\r
+# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML \r
+# documentation will contain sections that can be hidden and shown after the \r
+# page has loaded. For this to work a browser that supports \r
+# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox \r
+# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari).\r
+\r
+HTML_DYNAMIC_SECTIONS  = YES\r
+\r
+# If the GENERATE_DOCSET tag is set to YES, additional index files \r
+# will be generated that can be used as input for Apple's Xcode 3 \r
+# integrated development environment, introduced with OSX 10.5 (Leopard). \r
+# To create a documentation set, doxygen will generate a Makefile in the \r
+# HTML output directory. Running make will produce the docset in that \r
+# directory and running "make install" will install the docset in \r
+# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find \r
+# it at startup. \r
+# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information.\r
+\r
+GENERATE_DOCSET        = NO\r
+\r
+# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the \r
+# feed. A documentation feed provides an umbrella under which multiple \r
+# documentation sets from a single provider (such as a company or product suite) \r
+# can be grouped.\r
+\r
+DOCSET_FEEDNAME        = "Doxygen generated docs"\r
+\r
+# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that \r
+# should uniquely identify the documentation set bundle. This should be a \r
+# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen \r
+# will append .docset to the name.\r
+\r
+DOCSET_BUNDLE_ID       = org.doxygen.Project\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, additional index files \r
+# will be generated that can be used as input for tools like the \r
+# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) \r
+# of the generated HTML documentation.\r
+\r
+GENERATE_HTMLHELP      = NO\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can \r
+# be used to specify the file name of the resulting .chm file. You \r
+# can add a path in front of the file if the result should not be \r
+# written to the html output directory.\r
+\r
+CHM_FILE               = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can \r
+# be used to specify the location (absolute path including file name) of \r
+# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run \r
+# the HTML help compiler on the generated index.hhp.\r
+\r
+HHC_LOCATION           = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag \r
+# controls if a separate .chi index file is generated (YES) or that \r
+# it should be included in the master .chm file (NO).\r
+\r
+GENERATE_CHI           = NO\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING\r
+# is used to encode HtmlHelp index (hhk), content (hhc) and project file\r
+# content.\r
+\r
+CHM_INDEX_ENCODING     = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag \r
+# controls whether a binary table of contents is generated (YES) or a \r
+# normal table of contents (NO) in the .chm file.\r
+\r
+BINARY_TOC             = NO\r
+\r
+# The TOC_EXPAND flag can be set to YES to add extra items for group members \r
+# to the contents of the HTML help documentation and to the tree view.\r
+\r
+TOC_EXPAND             = YES\r
+\r
+# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER \r
+# are set, an additional index file will be generated that can be used as input for \r
+# Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated \r
+# HTML documentation.\r
+\r
+GENERATE_QHP           = NO\r
+\r
+# If the QHG_LOCATION tag is specified, the QCH_FILE tag can \r
+# be used to specify the file name of the resulting .qch file. \r
+# The path specified is relative to the HTML output folder.\r
+\r
+QCH_FILE               = \r
+\r
+# The QHP_NAMESPACE tag specifies the namespace to use when generating \r
+# Qt Help Project output. For more information please see \r
+# <a href="http://doc.trolltech.com/qthelpproject.html#namespace">Qt Help Project / Namespace</a>.\r
+\r
+QHP_NAMESPACE          = org.doxygen.Project\r
+\r
+# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating \r
+# Qt Help Project output. For more information please see \r
+# <a href="http://doc.trolltech.com/qthelpproject.html#virtual-folders">Qt Help Project / Virtual Folders</a>.\r
+\r
+QHP_VIRTUAL_FOLDER     = doc\r
+\r
+# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can \r
+# be used to specify the location of Qt's qhelpgenerator. \r
+# If non-empty doxygen will try to run qhelpgenerator on the generated \r
+# .qhp file .\r
+\r
+QHG_LOCATION           = \r
+\r
+# The DISABLE_INDEX tag can be used to turn on/off the condensed index at \r
+# top of each HTML page. The value NO (the default) enables the index and \r
+# the value YES disables it.\r
+\r
+DISABLE_INDEX          = NO\r
+\r
+# This tag can be used to set the number of enum values (range [1..20]) \r
+# that doxygen will group on one line in the generated HTML documentation.\r
+\r
+ENUM_VALUES_PER_LINE   = 1\r
+\r
+# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index\r
+# structure should be generated to display hierarchical information.\r
+# If the tag value is set to FRAME, a side panel will be generated\r
+# containing a tree-like index structure (just like the one that \r
+# is generated for HTML Help). For this to work a browser that supports \r
+# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, \r
+# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are \r
+# probably better off using the HTML help feature. Other possible values \r
+# for this tag are: HIERARCHIES, which will generate the Groups, Directories,\r
+# and Class Hierarchy pages using a tree view instead of an ordered list;\r
+# ALL, which combines the behavior of FRAME and HIERARCHIES; and NONE, which\r
+# disables this behavior completely. For backwards compatibility with previous\r
+# releases of Doxygen, the values YES and NO are equivalent to FRAME and NONE\r
+# respectively.\r
+\r
+GENERATE_TREEVIEW      = YES\r
+\r
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be \r
+# used to set the initial width (in pixels) of the frame in which the tree \r
+# is shown.\r
+\r
+TREEVIEW_WIDTH         = 250\r
+\r
+# Use this tag to change the font size of Latex formulas included \r
+# as images in the HTML documentation. The default is 10. Note that \r
+# when you change the font size after a successful doxygen run you need \r
+# to manually remove any form_*.png images from the HTML output directory \r
+# to force them to be regenerated.\r
+\r
+FORMULA_FONTSIZE       = 10\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the LaTeX output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will \r
+# generate Latex output.\r
+\r
+GENERATE_LATEX         = NO\r
+\r
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `latex' will be used as the default path.\r
+\r
+LATEX_OUTPUT           = latex\r
+\r
+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be \r
+# invoked. If left blank `latex' will be used as the default command name.\r
+\r
+LATEX_CMD_NAME         = latex\r
+\r
+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to \r
+# generate index for LaTeX. If left blank `makeindex' will be used as the \r
+# default command name.\r
+\r
+MAKEINDEX_CMD_NAME     = makeindex\r
+\r
+# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact \r
+# LaTeX documents. This may be useful for small projects and may help to \r
+# save some trees in general.\r
+\r
+COMPACT_LATEX          = NO\r
+\r
+# The PAPER_TYPE tag can be used to set the paper type that is used \r
+# by the printer. Possible values are: a4, a4wide, letter, legal and \r
+# executive. If left blank a4wide will be used.\r
+\r
+PAPER_TYPE             = a4wide\r
+\r
+# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX \r
+# packages that should be included in the LaTeX output.\r
+\r
+EXTRA_PACKAGES         = \r
+\r
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for \r
+# the generated latex document. The header should contain everything until \r
+# the first chapter. If it is left blank doxygen will generate a \r
+# standard header. Notice: only use this tag if you know what you are doing!\r
+\r
+LATEX_HEADER           = \r
+\r
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated \r
+# is prepared for conversion to pdf (using ps2pdf). The pdf file will \r
+# contain links (just like the HTML output) instead of page references \r
+# This makes the output suitable for online browsing using a pdf viewer.\r
+\r
+PDF_HYPERLINKS         = YES\r
+\r
+# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of \r
+# plain latex in the generated Makefile. Set this option to YES to get a \r
+# higher quality PDF documentation.\r
+\r
+USE_PDFLATEX           = YES\r
+\r
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. \r
+# command to the generated LaTeX files. This will instruct LaTeX to keep \r
+# running if errors occur, instead of asking the user for help. \r
+# This option is also used when generating formulas in HTML.\r
+\r
+LATEX_BATCHMODE        = NO\r
+\r
+# If LATEX_HIDE_INDICES is set to YES then doxygen will not \r
+# include the index chapters (such as File Index, Compound Index, etc.) \r
+# in the output.\r
+\r
+LATEX_HIDE_INDICES     = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the RTF output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output \r
+# The RTF output is optimized for Word 97 and may not look very pretty with \r
+# other RTF readers or editors.\r
+\r
+GENERATE_RTF           = NO\r
+\r
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `rtf' will be used as the default path.\r
+\r
+RTF_OUTPUT             = rtf\r
+\r
+# If the COMPACT_RTF tag is set to YES Doxygen generates more compact \r
+# RTF documents. This may be useful for small projects and may help to \r
+# save some trees in general.\r
+\r
+COMPACT_RTF            = NO\r
+\r
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated \r
+# will contain hyperlink fields. The RTF file will \r
+# contain links (just like the HTML output) instead of page references. \r
+# This makes the output suitable for online browsing using WORD or other \r
+# programs which support those fields. \r
+# Note: wordpad (write) and others do not support links.\r
+\r
+RTF_HYPERLINKS         = NO\r
+\r
+# Load stylesheet definitions from file. Syntax is similar to doxygen's \r
+# config file, i.e. a series of assignments. You only have to provide \r
+# replacements, missing definitions are set to their default value.\r
+\r
+RTF_STYLESHEET_FILE    = \r
+\r
+# Set optional variables used in the generation of an rtf document. \r
+# Syntax is similar to doxygen's config file.\r
+\r
+RTF_EXTENSIONS_FILE    = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the man page output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_MAN tag is set to YES (the default) Doxygen will \r
+# generate man pages\r
+\r
+GENERATE_MAN           = NO\r
+\r
+# The MAN_OUTPUT tag is used to specify where the man pages will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `man' will be used as the default path.\r
+\r
+MAN_OUTPUT             = man\r
+\r
+# The MAN_EXTENSION tag determines the extension that is added to \r
+# the generated man pages (default is the subroutine's section .3)\r
+\r
+MAN_EXTENSION          = .3\r
+\r
+# If the MAN_LINKS tag is set to YES and Doxygen generates man output, \r
+# then it will generate one additional man file for each entity \r
+# documented in the real man page(s). These additional files \r
+# only source the real man page, but without them the man command \r
+# would be unable to find the correct page. The default is NO.\r
+\r
+MAN_LINKS              = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the XML output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_XML tag is set to YES Doxygen will \r
+# generate an XML file that captures the structure of \r
+# the code including all documentation.\r
+\r
+GENERATE_XML           = NO\r
+\r
+# The XML_OUTPUT tag is used to specify where the XML pages will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `xml' will be used as the default path.\r
+\r
+XML_OUTPUT             = xml\r
+\r
+# The XML_SCHEMA tag can be used to specify an XML schema, \r
+# which can be used by a validating XML parser to check the \r
+# syntax of the XML files.\r
+\r
+XML_SCHEMA             = \r
+\r
+# The XML_DTD tag can be used to specify an XML DTD, \r
+# which can be used by a validating XML parser to check the \r
+# syntax of the XML files.\r
+\r
+XML_DTD                = \r
+\r
+# If the XML_PROGRAMLISTING tag is set to YES Doxygen will \r
+# dump the program listings (including syntax highlighting \r
+# and cross-referencing information) to the XML output. Note that \r
+# enabling this will significantly increase the size of the XML output.\r
+\r
+XML_PROGRAMLISTING     = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options for the AutoGen Definitions output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will \r
+# generate an AutoGen Definitions (see autogen.sf.net) file \r
+# that captures the structure of the code including all \r
+# documentation. Note that this feature is still experimental \r
+# and incomplete at the moment.\r
+\r
+GENERATE_AUTOGEN_DEF   = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the Perl module output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_PERLMOD tag is set to YES Doxygen will \r
+# generate a Perl module file that captures the structure of \r
+# the code including all documentation. Note that this \r
+# feature is still experimental and incomplete at the \r
+# moment.\r
+\r
+GENERATE_PERLMOD       = NO\r
+\r
+# If the PERLMOD_LATEX tag is set to YES Doxygen will generate \r
+# the necessary Makefile rules, Perl scripts and LaTeX code to be able \r
+# to generate PDF and DVI output from the Perl module output.\r
+\r
+PERLMOD_LATEX          = NO\r
+\r
+# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be \r
+# nicely formatted so it can be parsed by a human reader.  This is useful \r
+# if you want to understand what is going on.  On the other hand, if this \r
+# tag is set to NO the size of the Perl module output will be much smaller \r
+# and Perl will parse it just the same.\r
+\r
+PERLMOD_PRETTY         = YES\r
+\r
+# The names of the make variables in the generated doxyrules.make file \r
+# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. \r
+# This is useful so different doxyrules.make files included by the same \r
+# Makefile don't overwrite each other's variables.\r
+\r
+PERLMOD_MAKEVAR_PREFIX = \r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration options related to the preprocessor   \r
+#---------------------------------------------------------------------------\r
+\r
+# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will \r
+# evaluate all C-preprocessor directives found in the sources and include \r
+# files.\r
+\r
+ENABLE_PREPROCESSING   = YES\r
+\r
+# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro \r
+# names in the source code. If set to NO (the default) only conditional \r
+# compilation will be performed. Macro expansion can be done in a controlled \r
+# way by setting EXPAND_ONLY_PREDEF to YES.\r
+\r
+MACRO_EXPANSION        = YES\r
+\r
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES \r
+# then the macro expansion is limited to the macros specified with the \r
+# PREDEFINED and EXPAND_AS_DEFINED tags.\r
+\r
+EXPAND_ONLY_PREDEF     = YES\r
+\r
+# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files \r
+# in the INCLUDE_PATH (see below) will be search if a #include is found.\r
+\r
+SEARCH_INCLUDES        = YES\r
+\r
+# The INCLUDE_PATH tag can be used to specify one or more directories that \r
+# contain include files that are not input files but should be processed by \r
+# the preprocessor.\r
+\r
+INCLUDE_PATH           = \r
+\r
+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard \r
+# patterns (like *.h and *.hpp) to filter out the header-files in the \r
+# directories. If left blank, the patterns specified with FILE_PATTERNS will \r
+# be used.\r
+\r
+INCLUDE_FILE_PATTERNS  = \r
+\r
+# The PREDEFINED tag can be used to specify one or more macro names that \r
+# are defined before the preprocessor is started (similar to the -D option of \r
+# gcc). The argument of the tag is a list of macros of the form: name \r
+# or name=definition (no spaces). If the definition and the = are \r
+# omitted =1 is assumed. To prevent a macro definition from being \r
+# undefined via #undef or recursively expanded use the := operator \r
+# instead of the = operator.\r
+\r
+PREDEFINED             = __DOXYGEN__\r
+\r
+# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then \r
+# this tag can be used to specify a list of macro names that should be expanded. \r
+# The macro definition that is found in the sources will be used. \r
+# Use the PREDEFINED tag if you want to use a different macro definition.\r
+\r
+EXPAND_AS_DEFINED      = BUTTLOADTAG\r
+\r
+# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then \r
+# doxygen's preprocessor will remove all function-like macros that are alone \r
+# on a line, have an all uppercase name, and do not end with a semicolon. Such \r
+# function macros are typically used for boiler-plate code, and will confuse \r
+# the parser if not removed.\r
+\r
+SKIP_FUNCTION_MACROS   = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration::additions related to external references   \r
+#---------------------------------------------------------------------------\r
+\r
+# The TAGFILES option can be used to specify one or more tagfiles. \r
+# Optionally an initial location of the external documentation \r
+# can be added for each tagfile. The format of a tag file without \r
+# this location is as follows: \r
+#   TAGFILES = file1 file2 ... \r
+# Adding location for the tag files is done as follows: \r
+#   TAGFILES = file1=loc1 "file2 = loc2" ... \r
+# where "loc1" and "loc2" can be relative or absolute paths or \r
+# URLs. If a location is present for each tag, the installdox tool \r
+# does not have to be run to correct the links.\r
+# Note that each tag file must have a unique name\r
+# (where the name does NOT include the path)\r
+# If a tag file is not located in the directory in which doxygen \r
+# is run, you must also specify the path to the tagfile here.\r
+\r
+TAGFILES               = \r
+\r
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create \r
+# a tag file that is based on the input files it reads.\r
+\r
+GENERATE_TAGFILE       = \r
+\r
+# If the ALLEXTERNALS tag is set to YES all external classes will be listed \r
+# in the class index. If set to NO only the inherited external classes \r
+# will be listed.\r
+\r
+ALLEXTERNALS           = NO\r
+\r
+# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed \r
+# in the modules index. If set to NO, only the current project's groups will \r
+# be listed.\r
+\r
+EXTERNAL_GROUPS        = YES\r
+\r
+# The PERL_PATH should be the absolute path and name of the perl script \r
+# interpreter (i.e. the result of `which perl').\r
+\r
+PERL_PATH              = /usr/bin/perl\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration options related to the dot tool   \r
+#---------------------------------------------------------------------------\r
+\r
+# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will \r
+# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base \r
+# or super classes. Setting the tag to NO turns the diagrams off. Note that \r
+# this option is superseded by the HAVE_DOT option below. This is only a \r
+# fallback. It is recommended to install and use dot, since it yields more \r
+# powerful graphs.\r
+\r
+CLASS_DIAGRAMS         = NO\r
+\r
+# You can define message sequence charts within doxygen comments using the \msc \r
+# command. Doxygen will then run the mscgen tool (see \r
+# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the \r
+# documentation. The MSCGEN_PATH tag allows you to specify the directory where \r
+# the mscgen tool resides. If left empty the tool is assumed to be found in the \r
+# default search path.\r
+\r
+MSCGEN_PATH            = \r
+\r
+# If set to YES, the inheritance and collaboration graphs will hide \r
+# inheritance and usage relations if the target is undocumented \r
+# or is not a class.\r
+\r
+HIDE_UNDOC_RELATIONS   = YES\r
+\r
+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is \r
+# available from the path. This tool is part of Graphviz, a graph visualization \r
+# toolkit from AT&T and Lucent Bell Labs. The other options in this section \r
+# have no effect if this option is set to NO (the default)\r
+\r
+HAVE_DOT               = NO\r
+\r
+# By default doxygen will write a font called FreeSans.ttf to the output \r
+# directory and reference it in all dot files that doxygen generates. This \r
+# font does not include all possible unicode characters however, so when you need \r
+# these (or just want a differently looking font) you can specify the font name \r
+# using DOT_FONTNAME. You need need to make sure dot is able to find the font, \r
+# which can be done by putting it in a standard location or by setting the \r
+# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory \r
+# containing the font.\r
+\r
+DOT_FONTNAME           = FreeSans\r
+\r
+# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. \r
+# The default size is 10pt.\r
+\r
+DOT_FONTSIZE           = 10\r
+\r
+# By default doxygen will tell dot to use the output directory to look for the \r
+# FreeSans.ttf font (which doxygen will put there itself). If you specify a \r
+# different font using DOT_FONTNAME you can set the path where dot \r
+# can find it using this tag.\r
+\r
+DOT_FONTPATH           = \r
+\r
+# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for each documented class showing the direct and \r
+# indirect inheritance relations. Setting this tag to YES will force the \r
+# the CLASS_DIAGRAMS tag to NO.\r
+\r
+CLASS_GRAPH            = NO\r
+\r
+# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for each documented class showing the direct and \r
+# indirect implementation dependencies (inheritance, containment, and \r
+# class references variables) of the class with other documented classes.\r
+\r
+COLLABORATION_GRAPH    = NO\r
+\r
+# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for groups, showing the direct groups dependencies\r
+\r
+GROUP_GRAPHS           = NO\r
+\r
+# If the UML_LOOK tag is set to YES doxygen will generate inheritance and \r
+# collaboration diagrams in a style similar to the OMG's Unified Modeling \r
+# Language.\r
+\r
+UML_LOOK               = NO\r
+\r
+# If set to YES, the inheritance and collaboration graphs will show the \r
+# relations between templates and their instances.\r
+\r
+TEMPLATE_RELATIONS     = NO\r
+\r
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT \r
+# tags are set to YES then doxygen will generate a graph for each documented \r
+# file showing the direct and indirect include dependencies of the file with \r
+# other documented files.\r
+\r
+INCLUDE_GRAPH          = NO\r
+\r
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and \r
+# HAVE_DOT tags are set to YES then doxygen will generate a graph for each \r
+# documented header file showing the documented files that directly or \r
+# indirectly include this file.\r
+\r
+INCLUDED_BY_GRAPH      = NO\r
+\r
+# If the CALL_GRAPH and HAVE_DOT options are set to YES then \r
+# doxygen will generate a call dependency graph for every global function \r
+# or class method. Note that enabling this option will significantly increase \r
+# the time of a run. So in most cases it will be better to enable call graphs \r
+# for selected functions only using the \callgraph command.\r
+\r
+CALL_GRAPH             = NO\r
+\r
+# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then \r
+# doxygen will generate a caller dependency graph for every global function \r
+# or class method. Note that enabling this option will significantly increase \r
+# the time of a run. So in most cases it will be better to enable caller \r
+# graphs for selected functions only using the \callergraph command.\r
+\r
+CALLER_GRAPH           = NO\r
+\r
+# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen \r
+# will graphical hierarchy of all classes instead of a textual one.\r
+\r
+GRAPHICAL_HIERARCHY    = NO\r
+\r
+# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES \r
+# then doxygen will show the dependencies a directory has on other directories \r
+# in a graphical way. The dependency relations are determined by the #include\r
+# relations between the files in the directories.\r
+\r
+DIRECTORY_GRAPH        = NO\r
+\r
+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images \r
+# generated by dot. Possible values are png, jpg, or gif\r
+# If left blank png will be used.\r
+\r
+DOT_IMAGE_FORMAT       = png\r
+\r
+# The tag DOT_PATH can be used to specify the path where the dot tool can be \r
+# found. If left blank, it is assumed the dot tool can be found in the path.\r
+\r
+DOT_PATH               = "C:/Program Files/Graphviz2.18/bin"\r
+\r
+# The DOTFILE_DIRS tag can be used to specify one or more directories that \r
+# contain dot files that are included in the documentation (see the \r
+# \dotfile command).\r
+\r
+DOTFILE_DIRS           = \r
+\r
+# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of \r
+# nodes that will be shown in the graph. If the number of nodes in a graph \r
+# becomes larger than this value, doxygen will truncate the graph, which is \r
+# visualized by representing a node as a red box. Note that doxygen if the \r
+# number of direct children of the root node in a graph is already larger than \r
+# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note \r
+# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.\r
+\r
+DOT_GRAPH_MAX_NODES    = 15\r
+\r
+# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the \r
+# graphs generated by dot. A depth value of 3 means that only nodes reachable \r
+# from the root by following a path via at most 3 edges will be shown. Nodes \r
+# that lay further from the root node will be omitted. Note that setting this \r
+# option to 1 or 2 may greatly reduce the computation time needed for large \r
+# code bases. Also note that the size of a graph can be further restricted by \r
+# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.\r
+\r
+MAX_DOT_GRAPH_DEPTH    = 2\r
+\r
+# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent \r
+# background. This is disabled by default, because dot on Windows does not \r
+# seem to support this out of the box. Warning: Depending on the platform used, \r
+# enabling this option may lead to badly anti-aliased labels on the edges of \r
+# a graph (i.e. they become hard to read).\r
+\r
+DOT_TRANSPARENT        = YES\r
+\r
+# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output \r
+# files in one run (i.e. multiple -o and -T options on the command line). This \r
+# makes dot run faster, but since only newer versions of dot (>1.8.10) \r
+# support this, this feature is disabled by default.\r
+\r
+DOT_MULTI_TARGETS      = NO\r
+\r
+# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will \r
+# generate a legend page explaining the meaning of the various boxes and \r
+# arrows in the dot generated graphs.\r
+\r
+GENERATE_LEGEND        = YES\r
+\r
+# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will \r
+# remove the intermediate dot files that are used to generate \r
+# the various graphs.\r
+\r
+DOT_CLEANUP            = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration::additions related to the search engine   \r
+#---------------------------------------------------------------------------\r
+\r
+# The SEARCHENGINE tag specifies whether or not a search engine should be \r
+# used. If set to NO the values of all tags below this one will be ignored.\r
+\r
+SEARCHENGINE           = NO\r
diff --git a/Demos/Device/LowLevel/RNDISEthernet/LUFA RNDIS.inf b/Demos/Device/LowLevel/RNDISEthernet/LUFA RNDIS.inf
new file mode 100644 (file)
index 0000000..a124afe
--- /dev/null
@@ -0,0 +1,52 @@
+;     Windows LUFA RNDIS Setup File\r
+; Copyright (c) 2000 Microsoft Corporation\r
+\r
+[Version]\r
+Signature           = "$Windows NT$"\r
+Class               = Net\r
+ClassGUID           = {4d36e972-e325-11ce-bfc1-08002be10318}\r
+Provider            = %COMPANY%\r
+DriverVer           = 06/21/2006,6.0.6000.16384\r
+;CatalogFile        = device.cat\r
+\r
+[Manufacturer]\r
+%COMPANY%         = RndisDevices,NTx86,NTamd64,NTia64\r
+\r
+; Decoration for x86 architecture\r
+[RndisDevices.NTx86]\r
+%RNDISDEV%    = RNDIS.NT.5.1, USB\VID_03EB&PID_204C\r
+\r
+; Decoration for x64 architecture\r
+[RndisDevices.NTamd64]\r
+%RNDISDEV%    = RNDIS.NT.5.1, USB\VID_03EB&PID_204C\r
+\r
+; Decoration for ia64 architecture\r
+[RndisDevices.NTia64]\r
+%RNDISDEV%    = RNDIS.NT.5.1, USB\VID_03EB&PID_204C\r
+\r
+;@@@ This is the common setting for setup\r
+[ControlFlags]\r
+ExcludeFromSelect=*\r
+\r
+; DDInstall section\r
+; References the in-build Netrndis.inf\r
+[RNDIS.NT.5.1]\r
+Characteristics = 0x84   ; NCF_PHYSICAL + NCF_HAS_UI\r
+BusType         = 15\r
+; NEVER REMOVE THE FOLLOWING REFERENCE FOR NETRNDIS.INF\r
+include         = netrndis.inf\r
+needs           = Usb_Rndis.ndi\r
+AddReg          = Rndis_AddReg_Vista\r
+\r
+; DDInstal.Services section\r
+[RNDIS.NT.5.1.Services]\r
+include     = netrndis.inf\r
+needs       = Usb_Rndis.ndi.Services\r
+\r
+; No sys copyfiles - the sys files are already in-build \r
+; (part of the operating system).\r
+\r
+; Modify these strings for your device as needed.\r
+[Strings] \r
+COMPANY="LUFA Library"\r
+RNDISDEV="LUFA USB RNDIS Demo"
\ No newline at end of file
diff --git a/Demos/Device/LowLevel/RNDISEthernet/Lib/ARP.c b/Demos/Device/LowLevel/RNDISEthernet/Lib/ARP.c
new file mode 100644 (file)
index 0000000..0f108c2
--- /dev/null
@@ -0,0 +1,85 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  Address Resolution Protocol (ARP) packet handling routines. This protocol handles the\r
+ *  conversion of physical MAC addresses to protocol IP addresses between the host and the\r
+ *  device.\r
+ */\r
\r
+#include "ARP.h"\r
+\r
+/** Processes an ARP packet inside an Ethernet frame, and writes the appropriate response\r
+ *  to the output Ethernet frame if the host is requesting the IP or MAC address of the\r
+ *  virtual server device on the network.\r
+ *\r
+ *  \param InDataStart   Pointer to the start of the incoming packet's ARP header\r
+ *  \param OutDataStart  Pointer to the start of the outgoing packet's ARP header\r
+ *\r
+ *  \return The number of bytes written to the out Ethernet frame if any, NO_RESPONSE otherwise\r
+ */\r
+int16_t ARP_ProcessARPPacket(void* InDataStart, void* OutDataStart)\r
+{\r
+       DecodeARPHeader(InDataStart);\r
+\r
+       ARP_Header_t* ARPHeaderIN  = (ARP_Header_t*)InDataStart;\r
+       ARP_Header_t* ARPHeaderOUT = (ARP_Header_t*)OutDataStart;\r
+\r
+       /* Ensure that the ARP request is a IPv4 request packet */\r
+       if ((SwapEndian_16(ARPHeaderIN->ProtocolType) == ETHERTYPE_IPV4) &&\r
+           (SwapEndian_16(ARPHeaderIN->Operation) == ARP_OPERATION_REQUEST))\r
+       {\r
+               /* If the ARP packet is requesting the MAC or IP of the virtual webserver, return the response */\r
+               if (IP_COMPARE(&ARPHeaderIN->TPA, &ServerIPAddress) || \r
+                   MAC_COMPARE(&ARPHeaderIN->THA, &ServerMACAddress))\r
+               {\r
+                       /* Fill out the ARP response header */\r
+                       ARPHeaderOUT->HardwareType = ARPHeaderIN->HardwareType;\r
+                       ARPHeaderOUT->ProtocolType = ARPHeaderIN->ProtocolType;\r
+                       ARPHeaderOUT->HLEN         = ARPHeaderIN->HLEN;\r
+                       ARPHeaderOUT->PLEN         = ARPHeaderIN->PLEN;\r
+                       ARPHeaderOUT->Operation    = SwapEndian_16(ARP_OPERATION_REPLY);\r
+\r
+                       /* Copy over the sender MAC/IP to the target fields for the response */\r
+                       ARPHeaderOUT->THA = ARPHeaderIN->SHA;\r
+                       ARPHeaderOUT->TPA = ARPHeaderIN->SPA;\r
+\r
+                       /* Copy over the new sender MAC/IP - MAC and IP addresses of the virtual webserver */\r
+                       ARPHeaderOUT->SHA = ServerMACAddress;\r
+                       ARPHeaderOUT->SPA = ServerIPAddress;\r
+\r
+                       /* Return the size of the response so far */\r
+                       return sizeof(ARP_Header_t);\r
+               }\r
+       }\r
+       \r
+       return NO_RESPONSE;\r
+}\r
diff --git a/Demos/Device/LowLevel/RNDISEthernet/Lib/ARP.h b/Demos/Device/LowLevel/RNDISEthernet/Lib/ARP.h
new file mode 100644 (file)
index 0000000..8551df8
--- /dev/null
@@ -0,0 +1,76 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  Header file for ARP.c.\r
+ */\r
\r
+#ifndef _ARP_H_\r
+#define _ARP_H_\r
+\r
+       /* Includes: */\r
+               #include <avr/io.h>\r
+               #include <string.h>\r
+               \r
+               #include <LUFA/Scheduler/Scheduler.h>\r
+               \r
+               #include "EthernetProtocols.h"\r
+               #include "Ethernet.h"\r
+               #include "ProtocolDecoders.h"\r
+               \r
+       /* Macros: */\r
+               /** ARP header operation constant, indicating a request from a host for an address translation */\r
+               #define ARP_OPERATION_REQUEST            1\r
+\r
+               /** ARP header operation constant, indicating a reply from a host giving an address translation */\r
+               #define ARP_OPERATION_REPLY              2\r
+\r
+       /* Type Defines: */\r
+               /** Type define for an ARP packet inside an Ethernet frame. */\r
+               typedef struct\r
+               {\r
+                       uint16_t      HardwareType; /**< Hardware type constant, indicating the hardware used */\r
+                       uint16_t      ProtocolType; /**< Protocol being resolved, usually ETHERTYPE_IPV4 */\r
+                       \r
+                       uint8_t       HLEN; /**< Length in bytes of the source/destination hardware addresses */\r
+                       uint8_t       PLEN; /**< Length in bytes of the source/destination protocol addresses */\r
+                       uint16_t      Operation; /**< Type of operation, either ARP_OPERATION_REQUEST or ARP_OPERATION_REPLY */\r
+                       \r
+                       MAC_Address_t SHA; /**< Sender's hardware address */\r
+                       IP_Address_t  SPA; /**< Sender's protocol address */\r
+                       MAC_Address_t THA; /**< Target's hardware address */\r
+                       IP_Address_t  TPA; /**< Target's protocol address */\r
+               } ARP_Header_t;\r
+               \r
+       /* Function Prototypes: */\r
+               int16_t ARP_ProcessARPPacket(void* InDataStart, void* OutDataStart);\r
+\r
+#endif\r
diff --git a/Demos/Device/LowLevel/RNDISEthernet/Lib/DHCP.c b/Demos/Device/LowLevel/RNDISEthernet/Lib/DHCP.c
new file mode 100644 (file)
index 0000000..76711fb
--- /dev/null
@@ -0,0 +1,118 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  Dynamic Host Configuration Protocol (DHCP) packet handling routines. This protocol\r
+ *  handles the automatic IP negotiation to the host, so that the host will use the provided\r
+ *  IP address given to it by the device.\r
+ */\r
\r
+#include "DHCP.h"\r
+\r
+/** Processes a DHCP packet inside an Ethernet frame, and writes the appropriate response\r
+ *  to the output Ethernet frame if the host is requesting or accepting an IP address.\r
+ *\r
+ *  \param IPHeaderInStart     Pointer to the start of the incoming packet's IP header\r
+ *  \param DHCPHeaderInStart   Pointer to the start of the incoming packet's DHCP header\r
+ *  \param DHCPHeaderOutStart  Pointer to the start of the outgoing packet's DHCP header\r
+ *\r
+ *  \return The number of bytes written to the out Ethernet frame if any, NO_RESPONSE otherwise\r
+ */\r
+int16_t DHCP_ProcessDHCPPacket(void* IPHeaderInStart, void* DHCPHeaderInStart, void* DHCPHeaderOutStart)\r
+{\r
+       IP_Header_t*   IPHeaderIN    = (IP_Header_t*)IPHeaderInStart;\r
+       DHCP_Header_t* DHCPHeaderIN  = (DHCP_Header_t*)DHCPHeaderInStart;\r
+       DHCP_Header_t* DHCPHeaderOUT = (DHCP_Header_t*)DHCPHeaderOutStart;\r
+       \r
+       uint8_t* DHCPOptionsINStart  = (uint8_t*)(DHCPHeaderInStart  + sizeof(DHCP_Header_t));\r
+       uint8_t* DHCPOptionsOUTStart = (uint8_t*)(DHCPHeaderOutStart + sizeof(DHCP_Header_t));\r
+\r
+       DecodeDHCPHeader(DHCPHeaderInStart);\r
+\r
+       /* Zero out the response DHCP packet, as much of it legacy and left at 0 */\r
+       memset(DHCPHeaderOUT, 0, sizeof(DHCP_Header_t));\r
+\r
+       /* Fill out the response DHCP packet */\r
+       DHCPHeaderOUT->HardwareType          = DHCPHeaderIN->HardwareType;\r
+       DHCPHeaderOUT->Operation             = DHCP_OP_BOOTREPLY;\r
+       DHCPHeaderOUT->HardwareAddressLength = DHCPHeaderIN->HardwareAddressLength;\r
+       DHCPHeaderOUT->Hops                  = 0;\r
+       DHCPHeaderOUT->TransactionID         = DHCPHeaderIN->TransactionID;\r
+       DHCPHeaderOUT->ElapsedSeconds        = 0;\r
+       DHCPHeaderOUT->Flags                 = DHCPHeaderIN->Flags;\r
+       DHCPHeaderOUT->YourIP                = ClientIPAddress;\r
+       memcpy(&DHCPHeaderOUT->ClientHardwareAddress, &DHCPHeaderIN->ClientHardwareAddress, sizeof(MAC_Address_t));\r
+       DHCPHeaderOUT->Cookie                = SwapEndian_32(DHCP_MAGIC_COOKIE);\r
+       \r
+       /* Alter the incoming IP packet header so that the corrected IP source and destinations are used - this means that\r
+          when the response IP header is generated, it will use the corrected addresses and not the null/broatcast addresses */\r
+       IPHeaderIN->SourceAddress      = ClientIPAddress;\r
+       IPHeaderIN->DestinationAddress = ServerIPAddress;\r
+\r
+       /* Process the incoming DHCP packet options */\r
+       while (DHCPOptionsINStart[0] != DHCP_OPTION_END)\r
+       {       \r
+               /* Find the Message Type DHCP option, to determine the type of DHCP packet */\r
+               if (DHCPOptionsINStart[0] == DHCP_OPTION_MESSAGETYPE)\r
+               {\r
+                       if ((DHCPOptionsINStart[2] == DHCP_MESSAGETYPE_DISCOVER) || (DHCPOptionsINStart[2] == DHCP_MESSAGETYPE_REQUEST))\r
+                       {\r
+                               /* Fill out the response DHCP packet options for a DHCP OFFER or ACK response */\r
+\r
+                               *(DHCPOptionsOUTStart++) = DHCP_OPTION_MESSAGETYPE;\r
+                               *(DHCPOptionsOUTStart++) = 1;\r
+                               *(DHCPOptionsOUTStart++) = (DHCPOptionsINStart[2] == DHCP_MESSAGETYPE_DISCOVER) ? DHCP_MESSAGETYPE_OFFER\r
+                                                                                                                                                                                               : DHCP_MESSAGETYPE_ACK;\r
+\r
+                               *(DHCPOptionsOUTStart++) = DHCP_OPTION_SUBNETMASK;\r
+                               *(DHCPOptionsOUTStart++) = 4;\r
+                               *(DHCPOptionsOUTStart++) = 0xFF;\r
+                               *(DHCPOptionsOUTStart++) = 0xFF;\r
+                               *(DHCPOptionsOUTStart++) = 0xFF;\r
+                               *(DHCPOptionsOUTStart++) = 0x00;\r
+\r
+                               *(DHCPOptionsOUTStart++) = DHCP_OPTION_DHCPSERVER;\r
+                               *(DHCPOptionsOUTStart++) = sizeof(IP_Address_t);\r
+                               memcpy(DHCPOptionsOUTStart, &ServerIPAddress, sizeof(IP_Address_t));\r
+                               DHCPOptionsOUTStart     += sizeof(IP_Address_t);\r
+\r
+                               *(DHCPOptionsOUTStart++) = DHCP_OPTION_END;\r
+                               \r
+                               return (sizeof(DHCP_Header_t) + 12 + sizeof(IP_Address_t));\r
+                       }\r
+               }\r
+               \r
+               /* Go to the next DHCP option - skip one byte if option is a padding byte, else skip the complete option's size */\r
+               DHCPOptionsINStart += ((DHCPOptionsINStart[0] == DHCP_OPTION_PAD) ? 1 : (DHCPOptionsINStart[1] + 2));\r
+       }\r
+       \r
+       return NO_RESPONSE;\r
+}\r
diff --git a/Demos/Device/LowLevel/RNDISEthernet/Lib/DHCP.h b/Demos/Device/LowLevel/RNDISEthernet/Lib/DHCP.h
new file mode 100644 (file)
index 0000000..f0e68b9
--- /dev/null
@@ -0,0 +1,125 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  Header file for DHCP.c.\r
+ */\r
\r
+#ifndef _DHCP_H_\r
+#define _DHCP_H_\r
+\r
+       /* Includes: */\r
+               #include <avr/io.h>\r
+               #include <string.h>\r
+       \r
+               #include "EthernetProtocols.h"\r
+               #include "Ethernet.h"\r
+               #include "ProtocolDecoders.h"\r
+\r
+       /* Macros: */\r
+               /** DHCP operation constant, indicating a request from a host to a DHCP server */\r
+               #define DHCP_OP_BOOTREQUEST       0x01\r
+\r
+               /** DHCP operation constant, indicating a reply from a DHCP server to a host */\r
+               #define DHCP_OP_BOOTREPLY         0x02\r
+               \r
+               /** Hardware type constant, indicating Ethernet as a carrier */\r
+               #define DHCP_HTYPE_ETHERNET       0x01\r
+               \r
+               /** Magic boot protocol "cookie", inserted into all BOOTP packets (BOOTP is the carrier of DHCP) */\r
+               #define DHCP_MAGIC_COOKIE         0x63825363\r
+               \r
+               /** DHCP option list entry header, indicating that a subnet mask will follow */\r
+               #define DHCP_OPTION_SUBNETMASK    1\r
+\r
+               /** DHCP option list entry header, indicating that the DHCP message type constant will follow */\r
+               #define DHCP_OPTION_MESSAGETYPE   53\r
+\r
+               /** DHCP option list entry header, indicating that the IP address of the DHCP server will follow */\r
+               #define DHCP_OPTION_DHCPSERVER    54\r
+\r
+               /** DHCP option list entry header, used to pad out option data */\r
+               #define DHCP_OPTION_PAD           0\r
+\r
+               /** DHCP option list entry header, indicating the end of option data */\r
+               #define DHCP_OPTION_END           255\r
+                       \r
+               /** Message type constant, used in the DHCP option data field, requesting that a DHCP server offer an IP address */\r
+               #define DHCP_MESSAGETYPE_DISCOVER 1\r
+\r
+               /** Message type constant, used in the DHCP option data field, indicating that a DHCP server is offering an IP address */\r
+               #define DHCP_MESSAGETYPE_OFFER    2\r
+\r
+               /** Message type constant, used in the DHCP option data field, requesting that a DHCP server lease a given IP address */\r
+               #define DHCP_MESSAGETYPE_REQUEST  3\r
+\r
+               /** Message type constant, used in the DHCP option data field, declining an offered DHCP server IP address lease */\r
+               #define DHCP_MESSAGETYPE_DECLINE  4\r
+\r
+               /** Message type constant, used in the DHCP option data field, ACKing a host IP lease request */\r
+               #define DHCP_MESSAGETYPE_ACK      5\r
+\r
+               /** Message type constant, used in the DHCP option data field, NACKing a host IP lease request */\r
+               #define DHCP_MESSAGETYPE_NACK     6\r
+\r
+               /** Message type constant, used in the DHCP option data field, indicating that a host is releasing a leased IP address */\r
+               #define DHCP_MESSAGETYPE_RELEASE  7\r
+\r
+       /* Type Defines: */\r
+               /** Type define for a DHCP packet inside an Ethernet frame. */\r
+               typedef struct\r
+               {\r
+                       uint8_t  Operation; /**< DHCP operation, either DHCP_OP_BOOTREQUEST or DHCP_OP_BOOTREPLY */\r
+                       uint8_t  HardwareType; /**< Hardware carrier type constant */\r
+                       uint8_t  HardwareAddressLength;  /**< Length in bytes of a hardware (MAC) address on the network */\r
+                       uint8_t  Hops; /**< Number of hops required to reach the server, unused */\r
+\r
+                       uint32_t TransactionID; /**< Unique ID of the DHCP packet, for positive matching between sent and received packets */\r
+\r
+                       uint16_t ElapsedSeconds; /**< Elapsed seconds since the request was made */\r
+                       uint16_t Flags; /**< BOOTP packet flags */\r
+                       \r
+                       IP_Address_t ClientIP; /**< Client IP address, if already leased an IP */\r
+                       IP_Address_t YourIP; /**< Client IP address */\r
+                       IP_Address_t NextServerIP; /**< Legacy BOOTP protocol field, unused for DHCP */\r
+                       IP_Address_t RelayAgentIP; /**< Legacy BOOTP protocol field, unused for DHCP */\r
+                       \r
+                       uint8_t ClientHardwareAddress[16]; /**< Hardware (MAC) address of the client making a request to the DHCP server */\r
+                       uint8_t ServerHostnameString[64]; /**< Legacy BOOTP protocol field, unused for DHCP */\r
+                       uint8_t BootFileName[128]; /**< Legacy BOOTP protocol field, unused for DHCP */\r
+                       \r
+                       uint32_t Cookie; /**< Magic BOOTP protocol cookie to indicate a valid packet */\r
+               } DHCP_Header_t;\r
+\r
+       /* Function Prototypes: */\r
+               int16_t DHCP_ProcessDHCPPacket(void* IPHeaderInStart, void* DHCPHeaderInStart, void* DHCPHeaderOutStart);\r
+\r
+#endif\r
diff --git a/Demos/Device/LowLevel/RNDISEthernet/Lib/Ethernet.c b/Demos/Device/LowLevel/RNDISEthernet/Lib/Ethernet.c
new file mode 100644 (file)
index 0000000..3d34f71
--- /dev/null
@@ -0,0 +1,136 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  Ethernet frame packet handling routines. This protocol handles the processing of raw Ethernet\r
+ *  frames sent and received, deferring the processing of subpacket protocols to the appropriate\r
+ *  protocol handlers, such as DHCP or ARP.\r
+ */\r
\r
+#include "Ethernet.h"\r
+\r
+/* Global Variables: */\r
+/** Ethernet Frame buffer structure, to hold the incoming Ethernet frame from the host. */\r
+Ethernet_Frame_Info_t FrameIN;\r
+\r
+/** Ethernet Frame buffer structure, to hold the outgoing Ethernet frame to the host. */\r
+Ethernet_Frame_Info_t FrameOUT;\r
+\r
+/** Constant for convenience when checking against or setting a MAC address to the virtual server MAC address. */\r
+const MAC_Address_t ServerMACAddress    = {SERVER_MAC_ADDRESS};\r
+\r
+/** Constant for convenience when checking against or setting an IP address to the virtual server IP address. */\r
+const IP_Address_t  ServerIPAddress     = {SERVER_IP_ADDRESS};\r
+\r
+/** Constant for convenience when checking against or setting a MAC address to the broadcast MAC address. */\r
+const MAC_Address_t BroadcastMACAddress = {BROADCAST_MAC_ADDRESS};\r
+\r
+/** Constant for convenience when checking against or setting a IP address to the broadcast IP address. */\r
+const IP_Address_t  BroadcastIPAddress  = {BROADCAST_IP_ADDRESS};\r
+\r
+/** Constant for convenience when checking against or setting an IP address to the client (host) IP address. */\r
+const IP_Address_t  ClientIPAddress     = {CLIENT_IP_ADDRESS};\r
+\r
+\r
+/** Processes an incoming Ethernet frame, and writes the appropriate response to the output Ethernet\r
+ *  frame buffer if the sub protocol handlers create a valid response.\r
+ */\r
+void Ethernet_ProcessPacket(void)\r
+{\r
+       DecodeEthernetFrameHeader(FrameIN.FrameData);\r
+\r
+       /* Cast the incoming Ethernet frame to the Ethernet header type */\r
+       Ethernet_Frame_Header_t* FrameINHeader  = (Ethernet_Frame_Header_t*)&FrameIN.FrameData;\r
+       Ethernet_Frame_Header_t* FrameOUTHeader = (Ethernet_Frame_Header_t*)&FrameOUT.FrameData;\r
+       \r
+       int16_t                  RetSize        = NO_RESPONSE;\r
+       \r
+       /* Ensure frame is addressed to either all (broadcast) or the virtual webserver, and is a type II frame */\r
+       if ((MAC_COMPARE(&FrameINHeader->Destination, &ServerMACAddress) ||\r
+            MAC_COMPARE(&FrameINHeader->Destination, &BroadcastMACAddress)) &&\r
+               (SwapEndian_16(FrameIN.FrameLength) > ETHERNET_VER2_MINSIZE))\r
+       {\r
+               /* Process the packet depending on its protocol */\r
+               switch (SwapEndian_16(FrameINHeader->EtherType))\r
+               {\r
+                       case ETHERTYPE_ARP:\r
+                               RetSize = ARP_ProcessARPPacket(&FrameIN.FrameData[sizeof(Ethernet_Frame_Header_t)],\r
+                                                              &FrameOUT.FrameData[sizeof(Ethernet_Frame_Header_t)]);\r
+                               break;          \r
+                       case ETHERTYPE_IPV4:\r
+                               RetSize = IP_ProcessIPPacket(&FrameIN.FrameData[sizeof(Ethernet_Frame_Header_t)],\r
+                                                            &FrameOUT.FrameData[sizeof(Ethernet_Frame_Header_t)]);\r
+                               break;\r
+               }\r
+               \r
+               /* Protocol processing routine has filled a response, complete the ethernet frame header */\r
+               if (RetSize > 0)\r
+               {\r
+                       /* Fill out the response Ethernet frame header */\r
+                       FrameOUTHeader->Source          = ServerMACAddress;\r
+                       FrameOUTHeader->Destination     = FrameINHeader->Source;\r
+                       FrameOUTHeader->EtherType       = FrameINHeader->EtherType;\r
+                       \r
+                       /* Set the response length in the buffer and indicate that a response is ready to be sent */\r
+                       FrameOUT.FrameLength            = (sizeof(Ethernet_Frame_Header_t) + RetSize);\r
+                       FrameOUT.FrameInBuffer          = true;\r
+               }\r
+       }\r
+\r
+       /* Check if the packet was processed */\r
+       if (RetSize != NO_PROCESS)\r
+       {\r
+               /* Clear the frame buffer */\r
+               FrameIN.FrameInBuffer = false;\r
+       }\r
+}\r
+\r
+/** Calculates the appropriate ethernet checksum, consisting of the addition of the one's\r
+ *  compliment of each word, complimented.\r
+ *\r
+ *  \param Data   Pointer to the packet buffer data whose checksum must be calculated\r
+ *  \param Bytes  Number of bytes in the data buffer to process\r
+ *\r
+ *  \return A 16-bit Ethernet checksum value\r
+ */\r
+uint16_t Ethernet_Checksum16(void* Data, uint16_t Bytes)\r
+{\r
+       uint16_t* Words    = (uint16_t*)Data;\r
+       uint32_t  Checksum = 0;\r
+\r
+       for (uint8_t CurrWord = 0; CurrWord < (Bytes >> 1); CurrWord++)\r
+         Checksum += Words[CurrWord];\r
+         \r
+       while (Checksum & 0xFFFF0000)\r
+         Checksum = ((Checksum & 0xFFFF) + (Checksum >> 16));\r
+       \r
+       return ~Checksum;\r
+}\r
diff --git a/Demos/Device/LowLevel/RNDISEthernet/Lib/Ethernet.h b/Demos/Device/LowLevel/RNDISEthernet/Lib/Ethernet.h
new file mode 100644 (file)
index 0000000..b360f07
--- /dev/null
@@ -0,0 +1,116 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  Header file for Ethernet.c.\r
+ */\r
\r
+#ifndef _ETHERNET_H_\r
+#define _ETHERNET_H_\r
+\r
+       /* Includes: */\r
+               #include <avr/io.h>\r
+               #include <string.h>\r
+\r
+               #include "EthernetProtocols.h"\r
+               #include "ProtocolDecoders.h"\r
+               #include "ICMP.h"\r
+               #include "TCP.h"\r
+               #include "UDP.h"\r
+               #include "DHCP.h"\r
+               #include "ARP.h"\r
+               #include "IP.h"\r
+               \r
+       /* Macros: */\r
+               /** Physical MAC address of the virtual server on the network */\r
+               #define SERVER_MAC_ADDRESS               {0x00, 0x01, 0x00, 0x01, 0x00, 0x01}           \r
+\r
+               /** Physical MAC address of the network broadcast address */\r
+               #define BROADCAST_MAC_ADDRESS            {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}\r
+       \r
+               /** Performs a comparison between two MAC addresses, indicating if they are identical.\r
+                *  \r
+                *  \param MAC1  First MAC address\r
+                *  \param MAC2  Second MAC address\r
+                *\r
+                *  \return True if the addresses match, false otherwise\r
+                */\r
+               #define MAC_COMPARE(MAC1, MAC2)          (memcmp(MAC1, MAC2, sizeof(MAC_Address_t)) == 0)\r
+\r
+               /** Maximum size of an incoming or outgoing Ethernet frame in bytes */\r
+               #define ETHERNET_FRAME_SIZE_MAX          1500\r
+               \r
+               /** Minimum size of an Ethernet packet in bytes, to conform to the Ethernet V2 packet standard */\r
+               #define ETHERNET_VER2_MINSIZE            0x0600\r
+               \r
+               /** Return value for all sub protocol handling routines, indicating that no response packet has been generated */\r
+               #define NO_RESPONSE                      0              \r
+\r
+               /** Return value for all sub protocol handling routines, indicating that the packet has not yet been handled */\r
+               #define NO_PROCESS                       -1\r
+\r
+       /* Type Defines: */\r
+               /** Type define for an Ethernet frame buffer. */\r
+               typedef struct\r
+               {\r
+                       uint8_t       FrameData[ETHERNET_FRAME_SIZE_MAX]; /**< Ethernet frame contents */\r
+                       uint16_t      FrameLength; /**< Length in bytes of the Ethernet frame stored in the buffer */\r
+                       bool          FrameInBuffer; /**< Indicates if a frame is currently stored in the buffer */\r
+               } Ethernet_Frame_Info_t;\r
+\r
+               /** Type define for an Ethernet frame header */\r
+               typedef struct\r
+               {\r
+                       MAC_Address_t Destination; /**< Physical MAC address of the packet recipient */\r
+                       MAC_Address_t Source; /**< Physics MAC address of the packet source */\r
+                       \r
+                       union\r
+                       {\r
+                               uint16_t  EtherType; /**< Ethernet packet subprotocol type, for Ethernet V2 packets */\r
+                               uint16_t  Length; /**< Ethernet frame length, for Ethernet V1 packets */\r
+                       };\r
+               } Ethernet_Frame_Header_t;\r
+               \r
+       /* External Variables: */\r
+               extern Ethernet_Frame_Info_t FrameIN;\r
+               extern Ethernet_Frame_Info_t FrameOUT;\r
+\r
+               extern const MAC_Address_t ServerMACAddress;\r
+               extern const IP_Address_t  ServerIPAddress;\r
+               extern const MAC_Address_t BroadcastMACAddress;\r
+               extern const IP_Address_t  BroadcastIPAddress;\r
+               extern const IP_Address_t  ClientIPAddress;\r
+               \r
+       /* Function Prototypes: */\r
+               void     Ethernet_ProcessPacket(void);\r
+               uint16_t Ethernet_Checksum16(void* Data, uint16_t Bytes);\r
+               \r
+#endif\r
diff --git a/Demos/Device/LowLevel/RNDISEthernet/Lib/EthernetProtocols.h b/Demos/Device/LowLevel/RNDISEthernet/Lib/EthernetProtocols.h
new file mode 100644 (file)
index 0000000..3ff3433
--- /dev/null
@@ -0,0 +1,87 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  General Ethernet protocol constants and type defines, for use by\r
+ *  all network protocol portions of the TCP/IP stack.\r
+ */\r
+\r
+#ifndef _ETHERNET_PROTOCOLS_H_\r
+#define _ETHERNET_PROTOCOLS_H_\r
+\r
+       /* Macros: */\r
+               #define ETHERTYPE_IPV4                   0x0800\r
+               #define ETHERTYPE_ARP                    0x0806\r
+               #define ETHERTYPE_RARP                   0x8035\r
+               #define ETHERTYPE_APPLETALK              0x809b\r
+               #define ETHERTYPE_APPLETALKARP           0x80f3\r
+               #define ETHERTYPE_IEEE8021Q              0x8100\r
+               #define ETHERTYPE_NOVELLIPX              0x8137\r
+               #define ETHERTYPE_NOVELL                 0x8138\r
+               #define ETHERTYPE_IPV6                   0x86DD\r
+               #define ETHERTYPE_COBRANET               0x8819\r
+               #define ETHERTYPE_PROVIDERBRIDGING       0x88a8\r
+               #define ETHERTYPE_MPLSUNICAST            0x8847\r
+               #define ETHERTYPE_MPLSMULTICAST          0x8848\r
+               #define ETHERTYPE_PPPoEDISCOVERY         0x8863\r
+               #define ETHERTYPE_PPPoESESSION           0x8864\r
+               #define ETHERTYPE_EAPOVERLAN             0x888E\r
+               #define ETHERTYPE_HYPERSCSI              0x889A\r
+               #define ETHERTYPE_ATAOVERETHERNET        0x88A2\r
+               #define ETHERTYPE_ETHERCAT               0x88A4\r
+               #define ETHERTYPE_SERCOSIII              0x88CD\r
+               #define ETHERTYPE_CESoE                  0x88D8\r
+               #define ETHERTYPE_MACSECURITY            0x88E5\r
+               #define ETHERTYPE_FIBRECHANNEL           0x8906\r
+               #define ETHERTYPE_QINQ                   0x9100\r
+               #define ETHERTYPE_VLLT                   0xCAFE\r
+               \r
+               #define PROTOCOL_ICMP                    1\r
+               #define PROTOCOL_IGMP                    2\r
+               #define PROTOCOL_TCP                     6\r
+               #define PROTOCOL_UDP                     17\r
+               #define PROTOCOL_OSPF                    89\r
+               #define PROTOCOL_SCTP                    132\r
+\r
+       /* Type Defines: */\r
+               /** Type define for a physical MAC address of a device on a network */\r
+               typedef struct\r
+               {\r
+                       uint8_t       Octets[6]; /**< Individual bytes of a MAC address */\r
+               } MAC_Address_t;\r
+               \r
+               /** Type define for a protocol IP address of a device on a network */\r
+               typedef struct\r
+               {\r
+                       uint8_t       Octets[4]; /**< Individual bytes of an IP address */\r
+               } IP_Address_t;\r
+\r
+#endif\r
diff --git a/Demos/Device/LowLevel/RNDISEthernet/Lib/ICMP.c b/Demos/Device/LowLevel/RNDISEthernet/Lib/ICMP.c
new file mode 100644 (file)
index 0000000..da4ffcf
--- /dev/null
@@ -0,0 +1,79 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  Internet Control Message Protocol (ICMP) packet handling routines. This protocol handles\r
+ *  Echo requests from the host, to indicate a successful network connection between the host\r
+ *  and the virtual server.\r
+ */\r
\r
+#include "ICMP.h"\r
+\r
+/** Processes an ICMP packet inside an Ethernet frame, and writes the appropriate response\r
+ *  to the output Ethernet frame if the host is issuing a ICMP ECHO request.\r
+ *\r
+ *  \param InDataStart   Pointer to the start of the incoming packet's ICMP header\r
+ *  \param OutDataStart  Pointer to the start of the outgoing packet's ICMP header\r
+ *\r
+ *  \return The number of bytes written to the out Ethernet frame if any, NO_RESPONSE otherwise\r
+ */\r
+int16_t ICMP_ProcessICMPPacket(void* InDataStart, void* OutDataStart)\r
+{\r
+       ICMP_Header_t* ICMPHeaderIN  = (ICMP_Header_t*)InDataStart;\r
+       ICMP_Header_t* ICMPHeaderOUT = (ICMP_Header_t*)OutDataStart;\r
+\r
+       DecodeICMPHeader(InDataStart);\r
+\r
+       /* Determine if the ICMP packet is an echo request (ping) */\r
+       if (ICMPHeaderIN->Type == ICMP_TYPE_ECHOREQUEST)\r
+       {\r
+               /* Fill out the ICMP response packet */\r
+               ICMPHeaderOUT->Type     = ICMP_TYPE_ECHOREPLY;\r
+               ICMPHeaderOUT->Code     = 0;\r
+               ICMPHeaderOUT->Checksum = 0;\r
+               ICMPHeaderOUT->Id       = ICMPHeaderIN->Id;\r
+               ICMPHeaderOUT->Sequence = ICMPHeaderIN->Sequence;\r
+               \r
+               uint16_t DataSize = FrameIN.FrameLength - ((((uint16_t)InDataStart + sizeof(ICMP_Header_t)) - (uint16_t)FrameIN.FrameData));\r
+               \r
+               /* Copy the remaining payload to the response - echo requests should echo back any sent data */\r
+               memcpy(&((uint8_t*)OutDataStart)[sizeof(ICMP_Header_t)],\r
+                      &((uint8_t*)InDataStart)[sizeof(ICMP_Header_t)],\r
+                          DataSize);\r
+\r
+               ICMPHeaderOUT->Checksum = Ethernet_Checksum16(ICMPHeaderOUT, (DataSize + sizeof(ICMP_Header_t)));\r
+\r
+               /* Return the size of the response so far */\r
+               return (DataSize + sizeof(ICMP_Header_t));\r
+       }\r
+       \r
+       return NO_RESPONSE;\r
+}\r
diff --git a/Demos/Device/LowLevel/RNDISEthernet/Lib/ICMP.h b/Demos/Device/LowLevel/RNDISEthernet/Lib/ICMP.h
new file mode 100644 (file)
index 0000000..b20a557
--- /dev/null
@@ -0,0 +1,80 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  Header file for ICMP.c.\r
+ */\r
+\r
+#ifndef _ICMP_H_\r
+#define _ICMP_H_\r
+\r
+       /* Includes: */\r
+               #include <avr/io.h>\r
+               #include <string.h>\r
+               \r
+               #include "EthernetProtocols.h"\r
+               #include "Ethernet.h"\r
+               #include "ProtocolDecoders.h"\r
+       \r
+       /* Macros: */\r
+               /** ICMP message type constant, indicating an ICMP ECHO Reply message */\r
+               #define ICMP_TYPE_ECHOREPLY              0\r
+\r
+               /** ICMP message type constant, indicating a packet destination is unreachable */\r
+               #define ICMP_TYPE_DESTINATIONUNREACHABLE 3\r
+               \r
+               /** ICMP message type constant, indicating an ICMP Source Quench message */\r
+               #define ICMP_TYPE_SOURCEQUENCH           4\r
+\r
+               /** ICMP message type constant, indicating an ICMP Redirect message */\r
+               #define ICMP_TYPE_REDIRECTMESSAGE        5\r
+\r
+               /** ICMP message type constant, indicating an ICMP ECHO Request message */\r
+               #define ICMP_TYPE_ECHOREQUEST            8\r
+\r
+               /** ICMP message type constant, indicating an ICMP Time Exceeded message */\r
+               #define ICMP_TYPE_TIMEEXCEEDED           11\r
+       \r
+       /* Type Defines: */\r
+               /** Type define for an ICMP message header. */\r
+               typedef struct\r
+               {\r
+                       uint8_t       Type; /**< ICMP message type, a ICMP_TYPE_* constant */\r
+                       uint8_t       Code; /**< ICMP message code, indicating the message value */\r
+                       uint16_t      Checksum; /**< Ethernet checksum of the ICMP message */\r
+                       uint16_t      Id; /**< Id of the ICMP message */\r
+                       uint16_t      Sequence; /**< Sequence number of the ICMP message, to link together message responses */\r
+               } ICMP_Header_t;\r
+               \r
+       /* Function Prototypes: */\r
+               int16_t ICMP_ProcessICMPPacket(void* InDataStart, void* OutDataStart);\r
+\r
+#endif\r
diff --git a/Demos/Device/LowLevel/RNDISEthernet/Lib/IP.c b/Demos/Device/LowLevel/RNDISEthernet/Lib/IP.c
new file mode 100644 (file)
index 0000000..8fb0b44
--- /dev/null
@@ -0,0 +1,111 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  Internet Protocol (IP) packet handling routines. This protocol handles IP packets from the\r
+ *  host which typically encapsulate other protocols such as ICMP, UDP and TCP.\r
+ */\r
\r
+#include "IP.h"\r
+\r
+/** Processes an IP packet inside an Ethernet frame, and writes the appropriate response\r
+ *  to the output Ethernet frame if one is created by a subprotocol handler.\r
+ *\r
+ *  \param InDataStart   Pointer to the start of the incoming packet's IP header\r
+ *  \param OutDataStart  Pointer to the start of the outgoing packet's IP header\r
+ *\r
+ *  \return The number of bytes written to the out Ethernet frame if any, NO_RESPONSE if no\r
+ *           response was generated, NO_PROCESS if the packet processing was deferred until the\r
+ *           next Ethernet packet handler iteration\r
+ */\r
+int16_t IP_ProcessIPPacket(void* InDataStart, void* OutDataStart)\r
+{\r
+       DecodeIPHeader(InDataStart);\r
+\r
+       IP_Header_t* IPHeaderIN  = (IP_Header_t*)InDataStart;\r
+       IP_Header_t* IPHeaderOUT = (IP_Header_t*)OutDataStart;\r
+\r
+       /* Header length is specified in number of longs in the packet header, convert to bytes */\r
+       uint16_t HeaderLengthBytes = (IPHeaderIN->HeaderLength * sizeof(uint32_t));\r
+\r
+       int16_t  RetSize = NO_RESPONSE;\r
+\r
+       /* Check to ensure the IP packet is addressed to the virtual webserver's IP or the broadcast IP address */\r
+       if (!(IP_COMPARE(&IPHeaderIN->DestinationAddress, &ServerIPAddress)) &&\r
+           !(IP_COMPARE(&IPHeaderIN->DestinationAddress, &BroadcastIPAddress)))\r
+       {\r
+               return NO_RESPONSE;\r
+       }\r
+       \r
+       /* Pass off the IP payload to the appropriate protocol processing routine */\r
+       switch (IPHeaderIN->Protocol)\r
+       {\r
+               case PROTOCOL_ICMP:\r
+                       RetSize = ICMP_ProcessICMPPacket(&((uint8_t*)InDataStart)[HeaderLengthBytes],\r
+                                                        &((uint8_t*)OutDataStart)[sizeof(IP_Header_t)]);\r
+                       break;\r
+               case PROTOCOL_TCP:\r
+                       RetSize = TCP_ProcessTCPPacket(InDataStart,\r
+                                                      &((uint8_t*)InDataStart)[HeaderLengthBytes],\r
+                                                      &((uint8_t*)OutDataStart)[sizeof(IP_Header_t)]);         \r
+                       break;\r
+               case PROTOCOL_UDP:\r
+                       RetSize = UDP_ProcessUDPPacket(InDataStart,\r
+                                                      &((uint8_t*)InDataStart)[HeaderLengthBytes],\r
+                                                      &((uint8_t*)OutDataStart)[sizeof(IP_Header_t)]);         \r
+                       break;\r
+       }\r
+       \r
+       /* Check to see if the protocol processing routine has filled out a response */\r
+       if (RetSize > 0)\r
+       {\r
+               /* Fill out the response IP packet header */\r
+               IPHeaderOUT->TotalLength        = SwapEndian_16(sizeof(IP_Header_t) + RetSize);\r
+               IPHeaderOUT->TypeOfService      = 0;\r
+               IPHeaderOUT->HeaderLength       = (sizeof(IP_Header_t) / sizeof(uint32_t));\r
+               IPHeaderOUT->Version            = 4;\r
+               IPHeaderOUT->Flags              = 0;\r
+               IPHeaderOUT->FragmentOffset     = 0;\r
+               IPHeaderOUT->Identification     = 0;\r
+               IPHeaderOUT->HeaderChecksum     = 0;\r
+               IPHeaderOUT->Protocol           = IPHeaderIN->Protocol;\r
+               IPHeaderOUT->TTL                = DEFAULT_TTL;\r
+               IPHeaderOUT->SourceAddress      = IPHeaderIN->DestinationAddress;\r
+               IPHeaderOUT->DestinationAddress = IPHeaderIN->SourceAddress;\r
+               \r
+               IPHeaderOUT->HeaderChecksum     = Ethernet_Checksum16(IPHeaderOUT, sizeof(IP_Header_t));\r
+                                               \r
+               /* Return the size of the response so far */\r
+               return (sizeof(IP_Header_t) + RetSize);\r
+       }\r
+       \r
+       return RetSize;\r
+}\r
diff --git a/Demos/Device/LowLevel/RNDISEthernet/Lib/IP.h b/Demos/Device/LowLevel/RNDISEthernet/Lib/IP.h
new file mode 100644 (file)
index 0000000..fc1a46a
--- /dev/null
@@ -0,0 +1,93 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  Header file for IP.c.\r
+ */\r
\r
+#ifndef _IP_H_\r
+#define _IP_H_\r
+\r
+       /* Includes: */\r
+               #include <avr/io.h>\r
+               #include <string.h>\r
+               \r
+               #include "EthernetProtocols.h"\r
+               #include "Ethernet.h"\r
+               #include "ProtocolDecoders.h"\r
+       \r
+       /* Macros: */\r
+               /** Protocol IP address of the host (client) machine, once assigned by DHCP */\r
+               #define CLIENT_IP_ADDRESS                { 10,     0,    0,    1}\r
+\r
+               /** Protocol IP address of the virtual server machine */\r
+               #define SERVER_IP_ADDRESS                { 10,     0,    0,    2}\r
+\r
+               /** Protocol IP address of the broadcast address */\r
+               #define BROADCAST_IP_ADDRESS             {0xFF, 0xFF, 0xFF, 0xFF}\r
+\r
+               /** Default Time To Live (TTL) value for sent packets, indicating the maximum allowable hops until their destination is reached */\r
+               #define DEFAULT_TTL                      128\r
+               \r
+               /** Performs a comparison between two IP addresses, indicating if they are identical.\r
+                *  \r
+                *  \param IP1  First IP address\r
+                *  \param IP2  Second IP address\r
+                *\r
+                *  \return True if the addresses match, false otherwise\r
+                */\r
+               #define IP_COMPARE(IP1, IP2)             (memcmp(IP1, IP2, sizeof(IP_Address_t)) == 0)\r
+               \r
+       /* Type Defines: */\r
+               /** Type define of an IP packet header. */\r
+               typedef struct\r
+               {\r
+                       unsigned char  HeaderLength   : 4; /**< Total length of the packet header, in 4-byte blocks */\r
+                       unsigned char  Version        : 4; /**< IP protocol version */\r
+                       uint8_t        TypeOfService; /**< Special service type identifier, indicating delay/throughput/reliability levels */\r
+                       uint16_t       TotalLength; /**< Total length of the IP packet, in bytes */\r
+\r
+                       uint16_t       Identification; /**< Identification value for identifying fragmented packets */\r
+                       unsigned int   FragmentOffset : 13; /**< Offset of this IP fragment */\r
+                       unsigned int   Flags          : 3; /**< Fragment flags, to indicate if a packet is fragmented */\r
+\r
+                       uint8_t        TTL; /**< Maximum allowable number of hops to reach the packet destination */\r
+                       uint8_t        Protocol; /**< Encapsulated protocol type */\r
+                       uint16_t       HeaderChecksum; /**< Ethernet checksum of the IP header */\r
+                       \r
+                       IP_Address_t  SourceAddress; /**< Source protocol IP address of the packet */\r
+                       IP_Address_t  DestinationAddress; /**< Destination protocol IP address of the packet */\r
+               } IP_Header_t;\r
+               \r
+       /* Function Prototypes: */\r
+               int16_t IP_ProcessIPPacket(void* InDataStart, void* OutDataStart);\r
+\r
+#endif\r
diff --git a/Demos/Device/LowLevel/RNDISEthernet/Lib/ProtocolDecoders.c b/Demos/Device/LowLevel/RNDISEthernet/Lib/ProtocolDecoders.c
new file mode 100644 (file)
index 0000000..add0333
--- /dev/null
@@ -0,0 +1,280 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/* Protocol decoders for Ethernet, TCP, IP, ICMP and ARP. Each of these routines\r
+   accepts a header to the appropriate protocol and prints out pertinent information\r
+   on the packet through the serial port.\r
+   \r
+   To disable printing of a specific protocol, define the token NO_DECODE_{Protocol}\r
+   in the project makefile, and pass it to the compiler using the -D switch.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  Protocol decoding routines, for the plain-text decoding of Ethernet frames for debugging purposes.\r
+ *  Enabled protocol decoders will print incoming Ethernet frame contents through the USART in a human\r
+ *  readable format.\r
+ *\r
+ *  Note that the USART is a slow transmission medium, and will slow down packet processing considerably.\r
+ *  Packet decoding routines can be disabled by defining NO_DECODE_{Protocol Name} in the project makefile\r
+ *  and passing it to the compiler via the -D switch.\r
+ */\r
\r
+#include "ProtocolDecoders.h"\r
+\r
+/** Decodes an Ethernet frame header and prints its contents to through the USART in a human readable format.\r
+ *\r
+ *  \param InDataStart  Pointer to the start of an Ethernet frame header\r
+ */\r
+void DecodeEthernetFrameHeader(void* InDataStart)\r
+{\r
+       #if !defined(NO_DECODE_ETHERNET)\r
+       Ethernet_Frame_Header_t* FrameHeader = (Ethernet_Frame_Header_t*)InDataStart;\r
+       \r
+       printf_P(PSTR("\r\n"));\r
+       \r
+       printf_P(PSTR("  ETHERNET\r\n"));\r
+       printf_P(PSTR("  + Frame Size: %u\r\n"), FrameIN.FrameLength);\r
+\r
+       if (!(MAC_COMPARE(&FrameHeader->Destination, &ServerMACAddress)) &&\r
+           !(MAC_COMPARE(&FrameHeader->Destination, &BroadcastMACAddress)))\r
+       {\r
+               printf_P(PSTR("  + NOT ADDRESSED TO DEVICE\r\n"));\r
+               return;\r
+       }\r
+\r
+       printf_P(PSTR("  + MAC Source : %02X:%02X:%02X:%02X:%02X:%02X\r\n"), FrameHeader->Source.Octets[0],\r
+                                                                            FrameHeader->Source.Octets[1],\r
+                                                                            FrameHeader->Source.Octets[2],\r
+                                                                            FrameHeader->Source.Octets[3],\r
+                                                                            FrameHeader->Source.Octets[4],\r
+                                                                            FrameHeader->Source.Octets[5]);\r
+\r
+       printf_P(PSTR("  + MAC Dest: %02X:%02X:%02X:%02X:%02X:%02X\r\n"),    FrameHeader->Destination.Octets[0],\r
+                                                                            FrameHeader->Destination.Octets[1],\r
+                                                                            FrameHeader->Destination.Octets[2],\r
+                                                                            FrameHeader->Destination.Octets[3],\r
+                                                                            FrameHeader->Destination.Octets[4],\r
+                                                                            FrameHeader->Destination.Octets[5]);\r
+\r
+       if (SwapEndian_16(FrameIN.FrameLength) > ETHERNET_VER2_MINSIZE)\r
+         printf_P(PSTR("  + Protocol: 0x%04x\r\n"), SwapEndian_16(FrameHeader->EtherType));\r
+       else\r
+         printf_P(PSTR("  + Protocol: UNKNOWN E1\r\n"));\r
+       #endif\r
+}\r
+\r
+/** Decodes an ARP header and prints its contents to through the USART in a human readable format.\r
+ *\r
+ *  \param InDataStart  Pointer to the start of an ARP packet header\r
+ */\r
+void DecodeARPHeader(void* InDataStart)\r
+{\r
+       #if !defined(NO_DECODE_ARP)\r
+       ARP_Header_t* ARPHeader = (ARP_Header_t*)InDataStart;   \r
+\r
+       printf_P(PSTR("   \\\r\n    ARP\r\n"));\r
+\r
+       if (!(IP_COMPARE(&ARPHeader->TPA, &ServerIPAddress)) &&\r
+           !(MAC_COMPARE(&ARPHeader->THA, &ServerMACAddress)))\r
+       {\r
+               printf_P(PSTR("    + NOT ADDRESSED TO DEVICE\r\n"));\r
+               return;         \r
+       }\r
+\r
+       printf_P(PSTR("    + Protocol: %x\r\n"), SwapEndian_16(ARPHeader->ProtocolType));\r
+       printf_P(PSTR("    + Operation: %u\r\n"), SwapEndian_16(ARPHeader->Operation));\r
+       \r
+       if (SwapEndian_16(ARPHeader->ProtocolType) == ETHERTYPE_IPV4)\r
+       {\r
+               printf_P(PSTR("    + SHA MAC: %02X:%02X:%02X:%02X:%02X:%02X\r\n"), ARPHeader->SHA.Octets[0],\r
+                                                                                  ARPHeader->SHA.Octets[1],\r
+                                                                                  ARPHeader->SHA.Octets[2],\r
+                                                                                  ARPHeader->SHA.Octets[3],\r
+                                                                                  ARPHeader->SHA.Octets[4],\r
+                                                                                  ARPHeader->SHA.Octets[5]);\r
+\r
+               printf_P(PSTR("    + SPA IP: %u.%u.%u.%u\r\n"), ARPHeader->SPA.Octets[0],\r
+                                                               ARPHeader->SPA.Octets[1],\r
+                                                               ARPHeader->SPA.Octets[2],\r
+                                                               ARPHeader->SPA.Octets[3]);\r
+\r
+               printf_P(PSTR("    + THA MAC: %02X:%02X:%02X:%02X:%02X:%02X\r\n"), ARPHeader->THA.Octets[0],\r
+                                                                                  ARPHeader->THA.Octets[1],\r
+                                                                                  ARPHeader->THA.Octets[2],\r
+                                                                                  ARPHeader->THA.Octets[3],\r
+                                                                                  ARPHeader->THA.Octets[4],\r
+                                                                                  ARPHeader->THA.Octets[5]);\r
+\r
+               printf_P(PSTR("    + TPA IP: %u.%u.%u.%u\r\n"), ARPHeader->TPA.Octets[0],\r
+                                                               ARPHeader->TPA.Octets[1],\r
+                                                               ARPHeader->TPA.Octets[2],\r
+                                                               ARPHeader->TPA.Octets[3]);\r
+       }\r
+       #endif\r
+}\r
+\r
+/** Decodes an IP header and prints its contents to through the USART in a human readable format.\r
+ *\r
+ *  \param InDataStart  Pointer to the start of an IP packet header\r
+ */\r
+void DecodeIPHeader(void* InDataStart)\r
+{\r
+       #if !defined(NO_DECODE_IP)\r
+       IP_Header_t* IPHeader  = (IP_Header_t*)InDataStart;\r
+\r
+       uint16_t HeaderLengthBytes = (IPHeader->HeaderLength * sizeof(uint32_t));\r
+\r
+       printf_P(PSTR("   \\\r\n    IP\r\n"));\r
+\r
+       if (!(IP_COMPARE(&IPHeader->DestinationAddress, &ServerIPAddress)))\r
+       {\r
+               printf_P(PSTR("    + NOT ADDRESSED TO DEVICE\r\n"));\r
+               return;\r
+       }\r
+\r
+       printf_P(PSTR("    + Header Length: %u Bytes\r\n"), HeaderLengthBytes);\r
+       printf_P(PSTR("    + Packet Version: %u\r\n"), IPHeader->Version);\r
+       printf_P(PSTR("    + Total Length: %u\r\n"), SwapEndian_16(IPHeader->TotalLength));\r
+       \r
+       printf_P(PSTR("    + Protocol: %u\r\n"), IPHeader->Protocol);\r
+       printf_P(PSTR("    + TTL: %u\r\n"), IPHeader->TTL);\r
+       \r
+       printf_P(PSTR("    + IP Src: %u.%u.%u.%u\r\n"), IPHeader->SourceAddress.Octets[0],\r
+                                                       IPHeader->SourceAddress.Octets[1],\r
+                                                       IPHeader->SourceAddress.Octets[2],\r
+                                                       IPHeader->SourceAddress.Octets[3]);     \r
+\r
+       printf_P(PSTR("    + IP Dst: %u.%u.%u.%u\r\n"), IPHeader->DestinationAddress.Octets[0],\r
+                                                       IPHeader->DestinationAddress.Octets[1],\r
+                                                       IPHeader->DestinationAddress.Octets[2],\r
+                                                       IPHeader->DestinationAddress.Octets[3]);\r
+       #endif\r
+}\r
+\r
+/** Decodes an ICMP header and prints its contents to through the USART in a human readable format.\r
+ *\r
+ *  \param InDataStart  Pointer to the start of an ICMP packet header\r
+ */\r
+void DecodeICMPHeader(void* InDataStart)\r
+{\r
+       #if !defined(NO_DECODE_ICMP)\r
+       ICMP_Header_t* ICMPHeader  = (ICMP_Header_t*)InDataStart;\r
+\r
+       printf_P(PSTR("    \\\r\n     ICMP\r\n"));\r
+\r
+       printf_P(PSTR("     + Type: %u\r\n"), ICMPHeader->Type);\r
+       printf_P(PSTR("     + Code: %u\r\n"), ICMPHeader->Code);\r
+       #endif\r
+}\r
+\r
+/** Decodes a TCP header and prints its contents to through the USART in a human readable format.\r
+ *\r
+ *  \param InDataStart  Pointer to the start of a TCP packet header\r
+ */\r
+void DecodeTCPHeader(void* InDataStart)\r
+{\r
+       #if !defined(NO_DECODE_TCP)\r
+       TCP_Header_t* TCPHeader  = (TCP_Header_t*)InDataStart;\r
+\r
+       uint16_t               HeaderLengthBytes = (TCPHeader->DataOffset * sizeof(uint32_t));\r
+\r
+       printf_P(PSTR("    \\\r\n     TCP\r\n"));\r
+\r
+       printf_P(PSTR("     + Header Length: %u Bytes\r\n"), HeaderLengthBytes);\r
+\r
+       printf_P(PSTR("     + Source Port: %u\r\n"), SwapEndian_16(TCPHeader->SourcePort));\r
+       printf_P(PSTR("     + Destination Port: %u\r\n"), SwapEndian_16(TCPHeader->DestinationPort));\r
+\r
+       printf_P(PSTR("     + Sequence Number: %lu\r\n"), SwapEndian_32(TCPHeader->SequenceNumber));\r
+       printf_P(PSTR("     + Acknowledgment Number: %lu\r\n"), SwapEndian_32(TCPHeader->AcknowledgmentNumber));\r
+       \r
+       printf_P(PSTR("     + Flags: 0x%02X\r\n"), TCPHeader->Flags);\r
+       \r
+       if (TCP_GetPortState(TCPHeader->DestinationPort) == TCP_Port_Closed)\r
+         printf_P(PSTR("     + NOT LISTENING ON DESTINATION PORT\r\n"));\r
+       #endif\r
+}\r
+\r
+/** Decodes an UDP header and prints its contents to through the USART in a human readable format.\r
+ *\r
+ *  \param InDataStart  Pointer to the start of a UDP packet header\r
+ */\r
+void DecodeUDPHeader(void* InDataStart)\r
+{\r
+       #if !defined(NO_DECODE_UDP)\r
+       UDP_Header_t* UDPHeader = (UDP_Header_t*)InDataStart;\r
+\r
+       printf_P(PSTR("    \\\r\n     UDP\r\n"));\r
+\r
+       printf_P(PSTR("     + Source Port: %u\r\n"), SwapEndian_16(UDPHeader->SourcePort));\r
+       printf_P(PSTR("     + Destination Port: %u\r\n"), SwapEndian_16(UDPHeader->DestinationPort));\r
+\r
+       printf_P(PSTR("     + Data Length: %d\r\n"), SwapEndian_16(UDPHeader->Length));\r
+       #endif\r
+}\r
+\r
+/** Decodes an DHCP header and prints its contents to through the USART in a human readable format.\r
+ *\r
+ *  \param InDataStart  Pointer to the start of a DHCP packet header\r
+ */\r
+void DecodeDHCPHeader(void* InDataStart)\r
+{\r
+       #if !defined(NO_DECODE_DHCP)\r
+       uint8_t* DHCPOptions = (InDataStart + sizeof(DHCP_Header_t));\r
+\r
+       printf_P(PSTR("     \\\r\n      DHCP\r\n"));\r
+\r
+       while (DHCPOptions[0] != DHCP_OPTION_END)\r
+       {\r
+               if (DHCPOptions[0] == DHCP_OPTION_MESSAGETYPE)\r
+               {\r
+                       switch (DHCPOptions[2])\r
+                       {\r
+                               case DHCP_MESSAGETYPE_DISCOVER:\r
+                                       printf_P(PSTR("      + DISCOVER\r\n"));\r
+                                       break;\r
+                               case DHCP_MESSAGETYPE_REQUEST:\r
+                                       printf_P(PSTR("      + REQUEST\r\n"));\r
+                                       break;\r
+                               case DHCP_MESSAGETYPE_RELEASE:\r
+                                       printf_P(PSTR("      + RELEASE\r\n"));\r
+                                       break;\r
+                               case DHCP_MESSAGETYPE_DECLINE:\r
+                                       printf_P(PSTR("      + DECLINE\r\n"));\r
+                                       break;\r
+                       }\r
+               }\r
+               \r
+               DHCPOptions += ((DHCPOptions[0] == DHCP_OPTION_PAD) ? 1 : (DHCPOptions[1] + 2));\r
+       }\r
+\r
+       #endif\r
+}\r
diff --git a/Demos/Device/LowLevel/RNDISEthernet/Lib/ProtocolDecoders.h b/Demos/Device/LowLevel/RNDISEthernet/Lib/ProtocolDecoders.h
new file mode 100644 (file)
index 0000000..fa0a869
--- /dev/null
@@ -0,0 +1,56 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  Header file for ProtocolDecoders.c.\r
+ */\r
+\r
+#ifndef _PROTOCOL_DECODERS_H_\r
+#define _PROTOCOL_DECODERS_H_\r
+\r
+       /* Includes: */\r
+               #include <avr/io.h>\r
+               \r
+               #include <LUFA/Drivers/Peripheral/SerialStream.h>\r
+               \r
+               #include "EthernetProtocols.h"\r
+               #include "Ethernet.h"\r
+               \r
+       /* Function Prototypes: */\r
+               void DecodeEthernetFrameHeader(void* InDataStart);\r
+               void DecodeARPHeader(void* InDataStart);\r
+               void DecodeIPHeader(void* InDataStart);\r
+               void DecodeICMPHeader(void* InDataStart);\r
+               void DecodeTCPHeader(void* InDataStart);\r
+               void DecodeUDPHeader(void* InDataStart);\r
+               void DecodeDHCPHeader(void* InDataStart);\r
+\r
+#endif\r
diff --git a/Demos/Device/LowLevel/RNDISEthernet/Lib/RNDIS.c b/Demos/Device/LowLevel/RNDISEthernet/Lib/RNDIS.c
new file mode 100644 (file)
index 0000000..c5202bc
--- /dev/null
@@ -0,0 +1,394 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  RNDIS command handler functions. This handles RNDIS commands according to\r
+ *  the Microsoft RNDIS specification, creating a USB Ethernet network adapter.\r
+ */\r
\r
+#define  INCLUDE_FROM_RNDIS_C\r
+#include "RNDIS.h"\r
+\r
+/* Global Variables: */\r
+/** Physical MAC address of the network adapter, which becomes the MAC address of the host for packets sent to the adapter. */\r
+static MAC_Address_t  PROGMEM AdapterMACAddress          = {ADAPTER_MAC_ADDRESS};\r
+\r
+/** Vendor description of the adapter. This is overridden by the INF file required to install the appropriate RNDIS drivers for\r
+ *  the device, but may still be used by the OS in some circumstances.\r
+ */\r
+static char           PROGMEM AdapterVendorDescription[] = "LUFA RNDIS Adapter";\r
+\r
+/** List of RNDIS OID commands supported by this adapter. */\r
+static const uint32_t PROGMEM AdapterSupportedOIDList[]  =\r
+                                                       {\r
+                                                               OID_GEN_SUPPORTED_LIST,\r
+                                                               OID_GEN_PHYSICAL_MEDIUM,\r
+                                                               OID_GEN_HARDWARE_STATUS,\r
+                                                               OID_GEN_MEDIA_SUPPORTED,\r
+                                                               OID_GEN_MEDIA_IN_USE,\r
+                                                               OID_GEN_MAXIMUM_FRAME_SIZE,\r
+                                                               OID_GEN_MAXIMUM_TOTAL_SIZE,\r
+                                                               OID_GEN_LINK_SPEED,\r
+                                                               OID_GEN_TRANSMIT_BLOCK_SIZE,\r
+                                                               OID_GEN_RECEIVE_BLOCK_SIZE,\r
+                                                               OID_GEN_VENDOR_ID,\r
+                                                               OID_GEN_VENDOR_DESCRIPTION,\r
+                                                               OID_GEN_CURRENT_PACKET_FILTER,\r
+                                                               OID_GEN_MAXIMUM_TOTAL_SIZE,\r
+                                                               OID_GEN_MEDIA_CONNECT_STATUS,\r
+                                                               OID_GEN_XMIT_OK,\r
+                                                               OID_GEN_RCV_OK,\r
+                                                               OID_GEN_XMIT_ERROR,\r
+                                                               OID_GEN_RCV_ERROR,\r
+                                                               OID_GEN_RCV_NO_BUFFER,\r
+                                                               OID_802_3_PERMANENT_ADDRESS,\r
+                                                               OID_802_3_CURRENT_ADDRESS,\r
+                                                               OID_802_3_MULTICAST_LIST,\r
+                                                               OID_802_3_MAXIMUM_LIST_SIZE,\r
+                                                               OID_802_3_RCV_ERROR_ALIGNMENT,\r
+                                                               OID_802_3_XMIT_ONE_COLLISION,\r
+                                                               OID_802_3_XMIT_MORE_COLLISIONS,\r
+                                                       };\r
+\r
+/** Buffer for RNDIS messages (as distinct from Ethernet frames sent through the adapter. This must be big enough to hold the entire\r
+ *  Supported OID list, plus the response header. The buffer is half-duplex, and is written to as it is read to save on SRAM - for this\r
+ *  reason, care must be taken when constructing RNDIS responses that unread data is not overwritten when writing in responses.\r
+ */\r
+uint8_t                 RNDISMessageBuffer[sizeof(AdapterSupportedOIDList) + sizeof(RNDIS_QUERY_CMPLT_t)];\r
+\r
+/** Pointer to the RNDIS message header at the top of the RNDIS message buffer, for convenience. */\r
+RNDIS_Message_Header_t* MessageHeader = (RNDIS_Message_Header_t*)&RNDISMessageBuffer;\r
+\r
+/** Indicates if a RNDIS message response is ready to be sent back to the host. */\r
+bool                    ResponseReady               = false;\r
+\r
+/** Current RNDIS adapter state, a value from the RNDIS_States_t enum. */\r
+uint8_t                 CurrRNDISState              = RNDIS_Uninitialized;\r
+\r
+/** Current Ethernet packet filter mask. This is non-zero when the adapter is initialized, or zero when disabled. */\r
+uint32_t                CurrPacketFilter            = 0;                                                       \r
+\r
+\r
+/** Processes the RNDIS message received by the host and stored in the RNDISMessageBuffer global buffer. If a response is\r
+ *  created, the ResponseReady global is updated so that the response is written back to the host upon request.\r
+ */\r
+void ProcessRNDISControlMessage(void)\r
+{\r
+       /* Note: Only a single buffer is used for both the received message and its response to save SRAM. Because of\r
+                this, response bytes should be filled in order so that they do not clobber unread data in the buffer. */\r
+\r
+       switch (MessageHeader->MessageType)\r
+       {\r
+               case REMOTE_NDIS_INITIALIZE_MSG:\r
+                       /* Initialize the adapter - return information about the supported RNDIS version and buffer sizes */\r
+\r
+                       ResponseReady = true;\r
+                       \r
+                       RNDIS_INITIALIZE_MSG_t*   INITIALIZE_Message  = (RNDIS_INITIALIZE_MSG_t*)&RNDISMessageBuffer;\r
+                       RNDIS_INITIALIZE_CMPLT_t* INITIALIZE_Response = (RNDIS_INITIALIZE_CMPLT_t*)&RNDISMessageBuffer;\r
+                       \r
+                       INITIALIZE_Response->MessageType           = REMOTE_NDIS_INITIALIZE_CMPLT;\r
+                       INITIALIZE_Response->MessageLength         = sizeof(RNDIS_INITIALIZE_CMPLT_t);\r
+                       INITIALIZE_Response->RequestId             = INITIALIZE_Message->RequestId;\r
+                       INITIALIZE_Response->Status                = REMOTE_NDIS_STATUS_SUCCESS;\r
+                       \r
+                       INITIALIZE_Response->MajorVersion          = REMOTE_NDIS_VERSION_MAJOR;\r
+                       INITIALIZE_Response->MinorVersion          = REMOTE_NDIS_VERSION_MINOR;                 \r
+                       INITIALIZE_Response->DeviceFlags           = REMOTE_NDIS_DF_CONNECTIONLESS;\r
+                       INITIALIZE_Response->Medium                = REMOTE_NDIS_MEDIUM_802_3;\r
+                       INITIALIZE_Response->MaxPacketsPerTransfer = 1;\r
+                       INITIALIZE_Response->MaxTransferSize       = (sizeof(RNDIS_PACKET_MSG_t) + ETHERNET_FRAME_SIZE_MAX);\r
+                       INITIALIZE_Response->PacketAlignmentFactor = 0;\r
+                       INITIALIZE_Response->AFListOffset          = 0;\r
+                       INITIALIZE_Response->AFListSize            = 0;\r
+                       \r
+                       CurrRNDISState = RNDIS_Initialized;\r
+               \r
+                       break;\r
+               case REMOTE_NDIS_HALT_MSG:\r
+                       /* Halt the adapter, reset the adapter state - note that no response should be returned when completed */\r
+\r
+                       ResponseReady = false;\r
+                       MessageHeader->MessageLength = 0;\r
+\r
+                       CurrRNDISState = RNDIS_Uninitialized;\r
+\r
+                       break;\r
+               case REMOTE_NDIS_QUERY_MSG:\r
+                       /* Request for information about a parameter about the adapter, specified as an OID token */\r
+\r
+                       ResponseReady = true;\r
+                                               \r
+                       RNDIS_QUERY_MSG_t*   QUERY_Message  = (RNDIS_QUERY_MSG_t*)&RNDISMessageBuffer;\r
+                       RNDIS_QUERY_CMPLT_t* QUERY_Response = (RNDIS_QUERY_CMPLT_t*)&RNDISMessageBuffer;\r
+                       uint32_t             Query_Oid      = QUERY_Message->Oid;\r
+                                               \r
+                       void*     QueryData                 = &RNDISMessageBuffer[sizeof(RNDIS_Message_Header_t) +\r
+                                                                                 QUERY_Message->InformationBufferOffset];\r
+                       void*     ResponseData              = &RNDISMessageBuffer[sizeof(RNDIS_QUERY_CMPLT_t)];         \r
+                       uint16_t  ResponseSize;\r
+\r
+                       QUERY_Response->MessageType         = REMOTE_NDIS_QUERY_CMPLT;\r
+                       QUERY_Response->MessageLength       = sizeof(RNDIS_QUERY_CMPLT_t);\r
+                                               \r
+                       if (ProcessNDISQuery(Query_Oid, QueryData, QUERY_Message->InformationBufferLength,\r
+                                            ResponseData, &ResponseSize))\r
+                       {\r
+                               QUERY_Response->Status                  = REMOTE_NDIS_STATUS_SUCCESS;\r
+                               QUERY_Response->MessageLength          += ResponseSize;\r
+                                                       \r
+                               QUERY_Response->InformationBufferLength = ResponseSize;\r
+                               QUERY_Response->InformationBufferOffset = (sizeof(RNDIS_QUERY_CMPLT_t) - sizeof(RNDIS_Message_Header_t));\r
+                       }\r
+                       else\r
+                       {                               \r
+                               QUERY_Response->Status                  = REMOTE_NDIS_STATUS_NOT_SUPPORTED;\r
+\r
+                               QUERY_Response->InformationBufferLength = 0;\r
+                               QUERY_Response->InformationBufferOffset = 0;\r
+                       }\r
+                       \r
+                       break;\r
+               case REMOTE_NDIS_SET_MSG:\r
+                       /* Request to set a parameter of the adapter, specified as an OID token */\r
+               \r
+                       ResponseReady = true;\r
+                       \r
+                       RNDIS_SET_MSG_t*   SET_Message  = (RNDIS_SET_MSG_t*)&RNDISMessageBuffer;\r
+                       RNDIS_SET_CMPLT_t* SET_Response = (RNDIS_SET_CMPLT_t*)&RNDISMessageBuffer;\r
+                       uint32_t           SET_Oid      = SET_Message->Oid;\r
+\r
+                       SET_Response->MessageType       = REMOTE_NDIS_SET_CMPLT;\r
+                       SET_Response->MessageLength     = sizeof(RNDIS_SET_CMPLT_t);\r
+                       SET_Response->RequestId         = SET_Message->RequestId;\r
+\r
+                       void* SetData                   = &RNDISMessageBuffer[sizeof(RNDIS_Message_Header_t) +\r
+                                                                             SET_Message->InformationBufferOffset];\r
+                                               \r
+                       if (ProcessNDISSet(SET_Oid, SetData, SET_Message->InformationBufferLength))\r
+                         SET_Response->Status        = REMOTE_NDIS_STATUS_SUCCESS;\r
+                       else\r
+                         SET_Response->Status        = REMOTE_NDIS_STATUS_NOT_SUPPORTED;\r
+\r
+                       break;\r
+               case REMOTE_NDIS_RESET_MSG:\r
+                       /* Soft reset the adapter */\r
+               \r
+                       ResponseReady = true;\r
+                       \r
+                       RNDIS_RESET_CMPLT_t* RESET_Response = (RNDIS_RESET_CMPLT_t*)&RNDISMessageBuffer;\r
+\r
+                       RESET_Response->MessageType         = REMOTE_NDIS_RESET_CMPLT;\r
+                       RESET_Response->MessageLength       = sizeof(RNDIS_RESET_CMPLT_t);\r
+                       RESET_Response->Status              = REMOTE_NDIS_STATUS_SUCCESS;\r
+                       RESET_Response->AddressingReset     = 0;\r
+\r
+                       break;\r
+               case REMOTE_NDIS_KEEPALIVE_MSG:\r
+                       /* Keep alive message sent to the adapter every 5 seconds when idle to ensure it is still responding */\r
+               \r
+                       ResponseReady = true;\r
+                       \r
+                       RNDIS_KEEPALIVE_MSG_t*   KEEPALIVE_Message  = (RNDIS_KEEPALIVE_MSG_t*)&RNDISMessageBuffer;\r
+                       RNDIS_KEEPALIVE_CMPLT_t* KEEPALIVE_Response = (RNDIS_KEEPALIVE_CMPLT_t*)&RNDISMessageBuffer;\r
+\r
+                       KEEPALIVE_Response->MessageType     = REMOTE_NDIS_KEEPALIVE_CMPLT;\r
+                       KEEPALIVE_Response->MessageLength   = sizeof(RNDIS_KEEPALIVE_CMPLT_t);\r
+                       KEEPALIVE_Response->RequestId       = KEEPALIVE_Message->RequestId;\r
+                       KEEPALIVE_Response->Status          = REMOTE_NDIS_STATUS_SUCCESS;\r
+                       \r
+                       break;\r
+       }\r
+}\r
+\r
+/** Processes RNDIS query commands, retrieving information from the adapter and reporting it back to the host. The requested\r
+ *  parameter is given as an OID value.\r
+ *\r
+ *  \param OId           OId value of the parameter being queried\r
+ *  \param QueryData     Pointer to any extra query data being sent by the host to the device inside the RNDIS message buffer\r
+ *  \param QuerySize     Size in bytes of the extra query data being sent by the host\r
+ *  \param ResponseData  Pointer to the start of the query response inside the RNDIS message buffer\r
+ *  \param ResponseSize  Pointer to the size in bytes of the response data being sent to the host\r
+ *\r
+ *  \return Boolean true if the query was handled, false otherwise\r
+ */\r
+static bool ProcessNDISQuery(uint32_t OId, void* QueryData, uint16_t QuerySize,\r
+                             void* ResponseData, uint16_t* ResponseSize)\r
+{\r
+       /* Handler for REMOTE_NDIS_QUERY_MSG messages */\r
+\r
+       switch (OId)\r
+       {\r
+               case OID_GEN_SUPPORTED_LIST:\r
+                       *ResponseSize = sizeof(AdapterSupportedOIDList);\r
+                       \r
+                       /* Copy the list of supported NDIS OID tokens to the response buffer */\r
+                       memcpy_P(ResponseData, AdapterSupportedOIDList, sizeof(AdapterSupportedOIDList));\r
+                       \r
+                       return true;\r
+               case OID_GEN_PHYSICAL_MEDIUM:\r
+                       *ResponseSize = sizeof(uint32_t);\r
+                       \r
+                       /* Indicate that the device is a true ethernet link */\r
+                       *((uint32_t*)ResponseData) = 0;\r
+                       \r
+                       return true;\r
+               case OID_GEN_HARDWARE_STATUS:\r
+                       *ResponseSize = sizeof(uint32_t);\r
+                       \r
+                       /* Always indicate hardware ready */\r
+                       *((uint32_t*)ResponseData) = NdisHardwareStatusReady;\r
+                       \r
+                       return true;\r
+               case OID_GEN_MEDIA_SUPPORTED:\r
+               case OID_GEN_MEDIA_IN_USE:\r
+                       *ResponseSize = sizeof(uint32_t);\r
+                       \r
+                       /* Indicate 802.3 (Ethernet) supported by the adapter */\r
+                       *((uint32_t*)ResponseData) = REMOTE_NDIS_MEDIUM_802_3;\r
+                       \r
+                       return true;\r
+               case OID_GEN_VENDOR_ID:\r
+                       *ResponseSize = sizeof(uint32_t);\r
+                       \r
+                       /* Vendor ID 0x0xFFFFFF is reserved for vendors who have not purchased a NDIS VID */\r
+                       *((uint32_t*)ResponseData) = 0x00FFFFFF;\r
+                       \r
+                       return true;\r
+               case OID_GEN_MAXIMUM_FRAME_SIZE:\r
+               case OID_GEN_TRANSMIT_BLOCK_SIZE:\r
+               case OID_GEN_RECEIVE_BLOCK_SIZE:\r
+                       *ResponseSize = sizeof(uint32_t);\r
+                       \r
+                       /* Indicate that the maximum frame size is the size of the ethernet frame buffer */\r
+                       *((uint32_t*)ResponseData) = ETHERNET_FRAME_SIZE_MAX;\r
+                       \r
+                       return true;\r
+               case OID_GEN_VENDOR_DESCRIPTION:\r
+                       *ResponseSize = sizeof(AdapterVendorDescription);\r
+                       \r
+                       /* Copy vendor description string to the response buffer */\r
+                       memcpy_P(ResponseData, AdapterVendorDescription, sizeof(AdapterVendorDescription));\r
+                       \r
+                       return true;\r
+               case OID_GEN_MEDIA_CONNECT_STATUS:\r
+                       *ResponseSize = sizeof(uint32_t);\r
+                       \r
+                       /* Always indicate that the adapter is connected to a network */\r
+                       *((uint32_t*)ResponseData) = REMOTE_NDIS_MEDIA_STATE_CONNECTED;\r
+                       \r
+                       return true;\r
+               case OID_GEN_LINK_SPEED:\r
+                       *ResponseSize = sizeof(uint32_t);\r
+                       \r
+                       /* Indicate 10Mb/s link speed */\r
+                       *((uint32_t*)ResponseData) = 100000;\r
+\r
+                       return true;\r
+               case OID_802_3_PERMANENT_ADDRESS:\r
+               case OID_802_3_CURRENT_ADDRESS:\r
+                       *ResponseSize = sizeof(MAC_Address_t);\r
+                       \r
+                       /* Copy over the fixed adapter MAC to the response buffer */\r
+                       memcpy_P(ResponseData, &AdapterMACAddress, sizeof(MAC_Address_t));\r
+\r
+                       return true;\r
+               case OID_802_3_MAXIMUM_LIST_SIZE:\r
+                       *ResponseSize = sizeof(uint32_t);\r
+                       \r
+                       /* Indicate only one multicast address supported */\r
+                       *((uint32_t*)ResponseData) = 1;\r
+               \r
+                       return true;\r
+               case OID_GEN_CURRENT_PACKET_FILTER:\r
+                       *ResponseSize = sizeof(uint32_t);\r
+                       \r
+                       /* Indicate the current packet filter mask */\r
+                       *((uint32_t*)ResponseData) = CurrPacketFilter;\r
+               \r
+                       return true;                    \r
+               case OID_GEN_XMIT_OK:\r
+               case OID_GEN_RCV_OK:\r
+               case OID_GEN_XMIT_ERROR:\r
+               case OID_GEN_RCV_ERROR:\r
+               case OID_GEN_RCV_NO_BUFFER:\r
+               case OID_802_3_RCV_ERROR_ALIGNMENT:\r
+               case OID_802_3_XMIT_ONE_COLLISION:\r
+               case OID_802_3_XMIT_MORE_COLLISIONS:\r
+                       *ResponseSize = sizeof(uint32_t);\r
+                       \r
+                       /* Unused statistic OIDs - always return 0 for each */\r
+                       *((uint32_t*)ResponseData) = 0;\r
+               \r
+                       return true;\r
+               case OID_GEN_MAXIMUM_TOTAL_SIZE:\r
+                       *ResponseSize = sizeof(uint32_t);\r
+                       \r
+                       /* Indicate maximum overall buffer (Ethernet frame and RNDIS header) the adapter can handle */\r
+                       *((uint32_t*)ResponseData) = (sizeof(RNDISMessageBuffer) + ETHERNET_FRAME_SIZE_MAX);\r
+               \r
+                       return true;\r
+               default:\r
+                       return false;\r
+       }\r
+}\r
+\r
+/** Processes RNDIS set commands, setting adapter parameters to values given by the host. The requested parameter is given \r
+ *  as an OID value.\r
+ *\r
+ *  \param OId      OId value of the parameter being set\r
+ *  \param SetData  Pointer to the parameter value in the RNDIS message buffer\r
+ *  \param SetSize  Size in bytes of the parameter value being sent by the host\r
+ *\r
+ *  \return Boolean true if the set was handled, false otherwise\r
+ */\r
+static bool ProcessNDISSet(uint32_t OId, void* SetData, uint16_t SetSize)\r
+{\r
+       /* Handler for REMOTE_NDIS_SET_MSG messages */\r
+\r
+       switch (OId)\r
+       {\r
+               case OID_GEN_CURRENT_PACKET_FILTER:\r
+                       /* Save the packet filter mask in case the host queries it again later */\r
+                       CurrPacketFilter = *((uint32_t*)SetData);\r
+               \r
+                       /* Set the RNDIS state to initialized if the packet filter is non-zero */\r
+                       CurrRNDISState = ((CurrPacketFilter) ? RNDIS_Data_Initialized : RNDIS_Data_Initialized);\r
+                       \r
+                       return true;\r
+               case OID_802_3_MULTICAST_LIST:\r
+                       /* Do nothing - throw away the value from the host as it is unused */\r
+               \r
+                       return true;\r
+               default:\r
+                       return false;\r
+       }\r
+}\r
diff --git a/Demos/Device/LowLevel/RNDISEthernet/Lib/RNDIS.h b/Demos/Device/LowLevel/RNDISEthernet/Lib/RNDIS.h
new file mode 100644 (file)
index 0000000..88c9a9e
--- /dev/null
@@ -0,0 +1,226 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  Header file for RNDIS.c.\r
+ */\r
+\r
+#ifndef _RNDIS_H_\r
+#define _RNDIS_H_\r
+\r
+       /* Includes: */\r
+               #include <avr/io.h>\r
+               #include <stdbool.h>\r
+               \r
+               #include "RNDISEthernet.h"\r
+               #include "RNDISConstants.h"\r
+               #include "Ethernet.h"\r
+\r
+       /* Macros: */\r
+               /** Physical MAC Address of the USB network adapter */\r
+               #define ADAPTER_MAC_ADDRESS                   {0x02, 0x00, 0x02, 0x00, 0x02, 0x00}\r
+       \r
+               /** Implemented RNDIS Version Major */\r
+               #define REMOTE_NDIS_VERSION_MAJOR             0x01\r
+\r
+               /** Implemented RNDIS Version Minor */\r
+               #define REMOTE_NDIS_VERSION_MINOR             0x00\r
+       \r
+               /** RNDIS request to issue a host-to-device NDIS command */\r
+               #define REQ_SendEncapsulatedCommand           0x00\r
+\r
+               /** RNDIS request to issue a device-to-host NDIS response */\r
+               #define REQ_GetEncapsulatedResponse           0x01\r
+               \r
+       /* Enums: */\r
+               /** Enum for the possible NDIS adapter states. */\r
+               enum RNDIS_States_t\r
+               {\r
+                       RNDIS_Uninitialized    = 0, /**< Adapter currently uninitialized */\r
+                       RNDIS_Initialized      = 1, /**< Adapter currently initialized but not ready for data transfers */\r
+                       RNDIS_Data_Initialized = 2, /**< Adapter currently initialized and ready for data transfers */\r
+               };\r
+\r
+               /** Enum for the NDIS hardware states */\r
+               enum NDIS_Hardware_Status_t\r
+               {\r
+                       NdisHardwareStatusReady, /**< Hardware Ready to accept commands from the host */\r
+                       NdisHardwareStatusInitializing, /**< Hardware busy initializing */\r
+                       NdisHardwareStatusReset, /**< Hardware reset */\r
+                       NdisHardwareStatusClosing, /**< Hardware currently closing */\r
+                       NdisHardwareStatusNotReady /**< Hardware not ready to accept commands from the host */\r
+               };\r
+\r
+       /* Type Defines: */\r
+               /** Type define for a RNDIS message header, sent before RNDIS messages */\r
+               typedef struct\r
+               {\r
+                       uint32_t MessageType; /**< RNDIS message type, a REMOTE_NDIS_*_MSG constant */\r
+                       uint32_t MessageLength; /**< Total length of the RNDIS message, in bytes */\r
+               } RNDIS_Message_Header_t;\r
+\r
+               /** Type define for a RNDIS packet message, used to encapsulate Ethernet packets sent to and from the adapter */\r
+               typedef struct\r
+               {\r
+                       uint32_t MessageType;\r
+                       uint32_t MessageLength;\r
+                       uint32_t DataOffset;\r
+                       uint32_t DataLength;\r
+                       uint32_t OOBDataOffset;\r
+                       uint32_t OOBDataLength;\r
+                       uint32_t NumOOBDataElements;\r
+                       uint32_t PerPacketInfoOffset;\r
+                       uint32_t PerPacketInfoLength;\r
+                       uint32_t VcHandle;\r
+                       uint32_t Reserved;\r
+               } RNDIS_PACKET_MSG_t;\r
+       \r
+               /** Type define for a RNDIS Initialize command message */\r
+               typedef struct\r
+               {\r
+                       uint32_t MessageType;\r
+                       uint32_t MessageLength;\r
+                       uint32_t RequestId;\r
+                       \r
+                       uint32_t MajorVersion;\r
+                       uint32_t MinorVersion;\r
+                       uint32_t MaxTransferSize;\r
+               } RNDIS_INITIALIZE_MSG_t;\r
+               \r
+               /** Type define for a RNDIS Initialize complete response message */\r
+               typedef struct\r
+               {\r
+                       uint32_t MessageType;\r
+                       uint32_t MessageLength;\r
+                       uint32_t RequestId;\r
+                       uint32_t Status;\r
+                       \r
+                       uint32_t MajorVersion;\r
+                       uint32_t MinorVersion;\r
+                       uint32_t DeviceFlags;\r
+                       uint32_t Medium;\r
+                       uint32_t MaxPacketsPerTransfer;\r
+                       uint32_t MaxTransferSize;\r
+                       uint32_t PacketAlignmentFactor;\r
+                       uint32_t AFListOffset;\r
+                       uint32_t AFListSize;\r
+               } RNDIS_INITIALIZE_CMPLT_t;\r
+               \r
+               /** Type define for a RNDIS Keepalive command message */\r
+               typedef struct\r
+               {\r
+                       uint32_t MessageType;\r
+                       uint32_t MessageLength;\r
+                       uint32_t RequestId;\r
+               } RNDIS_KEEPALIVE_MSG_t;\r
+\r
+               /** Type define for a RNDIS Keepalive complete message */\r
+               typedef struct\r
+               {\r
+                       uint32_t MessageType;\r
+                       uint32_t MessageLength;\r
+                       uint32_t RequestId;\r
+                       uint32_t Status;\r
+               } RNDIS_KEEPALIVE_CMPLT_t;\r
+\r
+               /** Type define for a RNDIS Reset complete message */\r
+               typedef struct\r
+               {\r
+                       uint32_t MessageType;\r
+                       uint32_t MessageLength;\r
+                       uint32_t Status;\r
+\r
+                       uint32_t AddressingReset;\r
+               } RNDIS_RESET_CMPLT_t;\r
+               \r
+               /** Type define for a RNDIS Set command message */\r
+               typedef struct\r
+               {\r
+                       uint32_t MessageType;\r
+                       uint32_t MessageLength;\r
+                       uint32_t RequestId;\r
+                       \r
+                       uint32_t Oid;\r
+                       uint32_t InformationBufferLength;\r
+                       uint32_t InformationBufferOffset;\r
+                       uint32_t DeviceVcHandle;\r
+               } RNDIS_SET_MSG_t;\r
+\r
+               /** Type define for a RNDIS Set complete response message */\r
+               typedef struct\r
+               {\r
+                       uint32_t MessageType;\r
+                       uint32_t MessageLength;\r
+                       uint32_t RequestId;\r
+                       uint32_t Status;\r
+               } RNDIS_SET_CMPLT_t;\r
+               \r
+               /** Type define for a RNDIS Query command message */\r
+               typedef struct\r
+               {\r
+                       uint32_t MessageType;\r
+                       uint32_t MessageLength;\r
+                       uint32_t RequestId;\r
+                       \r
+                       uint32_t Oid;\r
+                       uint32_t InformationBufferLength;\r
+                       uint32_t InformationBufferOffset;\r
+                       uint32_t DeviceVcHandle;\r
+               } RNDIS_QUERY_MSG_t;\r
+               \r
+               /** Type define for a RNDIS Query complete response message */\r
+               typedef struct\r
+               {\r
+                       uint32_t MessageType;\r
+                       uint32_t MessageLength;\r
+                       uint32_t RequestId;\r
+                       uint32_t Status;\r
+                       \r
+                       uint32_t InformationBufferLength;\r
+                       uint32_t InformationBufferOffset;\r
+               } RNDIS_QUERY_CMPLT_t;\r
+               \r
+       /* External Variables: */\r
+               extern uint8_t                 RNDISMessageBuffer[];\r
+               extern RNDIS_Message_Header_t* MessageHeader;\r
+               extern bool                    ResponseReady;\r
+               extern uint8_t                 CurrRNDISState;\r
+\r
+       /* Function Prototypes: */\r
+               void ProcessRNDISControlMessage(void);\r
+\r
+               #if defined(INCLUDE_FROM_RNDIS_C)\r
+                       static bool ProcessNDISQuery(uint32_t OId, void* QueryData, uint16_t QuerySize,\r
+                                                                                void* ResponseData, uint16_t* ResponseSize);\r
+                       static bool ProcessNDISSet(uint32_t OId, void* SetData, uint16_t SetSize);      \r
+               #endif\r
+               \r
+#endif\r
diff --git a/Demos/Device/LowLevel/RNDISEthernet/Lib/RNDISConstants.h b/Demos/Device/LowLevel/RNDISEthernet/Lib/RNDISConstants.h
new file mode 100644 (file)
index 0000000..ad66f62
--- /dev/null
@@ -0,0 +1,99 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  RNDIS specification related constants. For more information on these\r
+ *  constants, please refer to the Microsoft RNDIS specification.\r
+ */\r
\r
+#ifndef _RNDIS_CONSTANTS_H_\r
+#define _RNDIS_CONSTANTS_H_\r
+\r
+       /* Macros: */\r
+               #define REMOTE_NDIS_PACKET_MSG                0x00000001UL\r
+               #define REMOTE_NDIS_INITIALIZE_MSG            0x00000002UL\r
+               #define REMOTE_NDIS_HALT_MSG                  0x00000003UL\r
+               #define REMOTE_NDIS_QUERY_MSG                 0x00000004UL\r
+               #define REMOTE_NDIS_SET_MSG                   0x00000005UL\r
+               #define REMOTE_NDIS_RESET_MSG                 0x00000006UL\r
+               #define REMOTE_NDIS_INDICATE_STATUS_MSG       0x00000007UL\r
+               #define REMOTE_NDIS_KEEPALIVE_MSG             0x00000008UL\r
+\r
+               #define REMOTE_NDIS_INITIALIZE_CMPLT          0x80000002UL\r
+               #define REMOTE_NDIS_QUERY_CMPLT               0x80000004UL\r
+               #define REMOTE_NDIS_SET_CMPLT                 0x80000005UL\r
+               #define REMOTE_NDIS_RESET_CMPLT               0x80000006UL\r
+               #define REMOTE_NDIS_KEEPALIVE_CMPLT           0x80000008UL\r
+               \r
+               #define REMOTE_NDIS_STATUS_SUCCESS            0x00000000UL\r
+               #define REMOTE_NDIS_STATUS_FAILURE            0xC0000001UL\r
+               #define REMOTE_NDIS_STATUS_INVALID_DATA       0xC0010015UL\r
+               #define REMOTE_NDIS_STATUS_NOT_SUPPORTED      0xC00000BBUL\r
+               #define REMOTE_NDIS_STATUS_MEDIA_CONNECT      0x4001000BUL\r
+               #define REMOTE_NDIS_STATUS_MEDIA_DISCONNECT   0x4001000CUL\r
+               \r
+               #define REMOTE_NDIS_MEDIA_STATE_CONNECTED     0x00000000UL\r
+               #define REMOTE_NDIS_MEDIA_STATE_DISCONNECTED  0x00000001UL\r
+               \r
+               #define REMOTE_NDIS_MEDIUM_802_3              0x00000000UL\r
+               \r
+               #define REMOTE_NDIS_DF_CONNECTIONLESS         0x00000001UL\r
+               #define REMOTE_NDIS_DF_CONNECTION_ORIENTED    0x00000002UL\r
+               \r
+               #define OID_GEN_SUPPORTED_LIST                0x00010101UL\r
+               #define OID_GEN_HARDWARE_STATUS               0x00010102UL\r
+               #define OID_GEN_MEDIA_SUPPORTED               0x00010103UL\r
+               #define OID_GEN_MEDIA_IN_USE                  0x00010104UL\r
+               #define OID_GEN_MAXIMUM_FRAME_SIZE            0x00010106UL\r
+               #define OID_GEN_MAXIMUM_TOTAL_SIZE            0x00010111UL\r
+               #define OID_GEN_LINK_SPEED                    0x00010107UL\r
+               #define OID_GEN_TRANSMIT_BLOCK_SIZE           0x0001010AUL\r
+               #define OID_GEN_RECEIVE_BLOCK_SIZE            0x0001010BUL\r
+               #define OID_GEN_VENDOR_ID                     0x0001010CUL\r
+               #define OID_GEN_VENDOR_DESCRIPTION            0x0001010DUL\r
+               #define OID_GEN_CURRENT_PACKET_FILTER         0x0001010EUL\r
+               #define OID_GEN_MAXIMUM_TOTAL_SIZE            0x00010111UL\r
+               #define OID_GEN_MEDIA_CONNECT_STATUS          0x00010114UL\r
+               #define OID_GEN_PHYSICAL_MEDIUM               0x00010202UL\r
+               #define OID_GEN_XMIT_OK                       0x00020101UL\r
+               #define OID_GEN_RCV_OK                        0x00020102UL\r
+               #define OID_GEN_XMIT_ERROR                    0x00020103UL\r
+               #define OID_GEN_RCV_ERROR                     0x00020104UL\r
+               #define OID_GEN_RCV_NO_BUFFER                 0x00020105UL\r
+               #define OID_802_3_PERMANENT_ADDRESS           0x01010101UL\r
+               #define OID_802_3_CURRENT_ADDRESS             0x01010102UL\r
+               #define OID_802_3_MULTICAST_LIST              0x01010103UL\r
+               #define OID_802_3_MAXIMUM_LIST_SIZE           0x01010104UL\r
+               #define OID_802_3_RCV_ERROR_ALIGNMENT         0x01020101UL\r
+               #define OID_802_3_XMIT_ONE_COLLISION          0x01020102UL\r
+               #define OID_802_3_XMIT_MORE_COLLISIONS        0x01020103UL\r
+\r
+#endif\r
diff --git a/Demos/Device/LowLevel/RNDISEthernet/Lib/TCP.c b/Demos/Device/LowLevel/RNDISEthernet/Lib/TCP.c
new file mode 100644 (file)
index 0000000..f259aad
--- /dev/null
@@ -0,0 +1,614 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  Transmission Control Protocol (TCP) packet handling routines. This protocol handles the reliable in-order transmission\r
+ *  and reception of packets to and from devices on a network, to "ports" on the device. It is used in situations where data\r
+ *  delivery must be reliable and correct, e.g. HTTP, TELNET and most other non-streaming protocols.\r
+ */\r
\r
+#define  INCLUDE_FROM_TCP_C\r
+#include "TCP.h"\r
+\r
+/* Global Variables: */\r
+/** Port state table array. This contains the current status of TCP ports in the device. To save on space, only open ports are\r
+ *  stored - closed ports may be overwritten at any time, and the system will assume any ports not present in the array are closed. This\r
+ *  allows for MAX_OPEN_TCP_PORTS to be less than the number of ports used by the application if desired.\r
+ */\r
+TCP_PortState_t        PortStateTable[MAX_OPEN_TCP_PORTS];\r
+\r
+/** Connection state table array. This contains the current status of TCP connections in the device. To save on space, only active\r
+ *  (non-closed) connections are stored - closed connections may be overwritten at any time, and the system will assume any connections\r
+ *  not present in the array are closed.\r
+ */\r
+TCP_ConnectionState_t  ConnectionStateTable[MAX_TCP_CONNECTIONS];\r
+\r
+\r
+/** Task to handle the calling of each registered application's callback function, to process and generate TCP packets at the application\r
+ *  level. If an application produces a response, this task constructs the appropriate Ethernet frame and places it into the Ethernet OUT\r
+ *  buffer for later transmission.\r
+ */\r
+TASK(TCP_Task)\r
+{\r
+       /* Task to hand off TCP packets to and from the listening applications. */\r
+\r
+       /* Run each application in sequence, to process incoming and generate outgoing packets */\r
+       for (uint8_t CSTableEntry = 0; CSTableEntry < MAX_TCP_CONNECTIONS; CSTableEntry++)\r
+       {\r
+               /* Find the corresponding port entry in the port table */\r
+               for (uint8_t PTableEntry = 0; PTableEntry < MAX_TCP_CONNECTIONS; PTableEntry++)\r
+               {\r
+                       /* Run the application handler for the port */\r
+                       if ((PortStateTable[PTableEntry].Port  == ConnectionStateTable[CSTableEntry].Port) && \r
+                           (PortStateTable[PTableEntry].State == TCP_Port_Open))\r
+                       {\r
+                               PortStateTable[PTableEntry].ApplicationHandler(&ConnectionStateTable[CSTableEntry], &ConnectionStateTable[CSTableEntry].Info.Buffer);\r
+                       }\r
+               }\r
+       }\r
+       \r
+       /* Bail out early if there is already a frame waiting to be sent in the Ethernet OUT buffer */\r
+       if (FrameOUT.FrameInBuffer)\r
+         return;\r
+       \r
+       /* Send response packets from each application as the TCP packet buffers are filled by the applications */\r
+       for (uint8_t CSTableEntry = 0; CSTableEntry < MAX_TCP_CONNECTIONS; CSTableEntry++)\r
+       {\r
+               /* For each completely received packet, pass it along to the listening application */\r
+               if ((ConnectionStateTable[CSTableEntry].Info.Buffer.Direction == TCP_PACKETDIR_OUT) &&\r
+                   (ConnectionStateTable[CSTableEntry].Info.Buffer.Ready))\r
+               {\r
+                       Ethernet_Frame_Header_t* FrameOUTHeader = (Ethernet_Frame_Header_t*)&FrameOUT.FrameData;\r
+                       IP_Header_t*             IPHeaderOUT    = (IP_Header_t*)&FrameOUT.FrameData[sizeof(Ethernet_Frame_Header_t)];\r
+                       TCP_Header_t*            TCPHeaderOUT   = (TCP_Header_t*)&FrameOUT.FrameData[sizeof(Ethernet_Frame_Header_t) +\r
+                                                                                                    sizeof(IP_Header_t)];                                              \r
+                       void*                    TCPDataOUT     = &FrameOUT.FrameData[sizeof(Ethernet_Frame_Header_t) +\r
+                                                                                     sizeof(IP_Header_t) +\r
+                                                                                     sizeof(TCP_Header_t)];\r
+\r
+                       uint16_t PacketSize = ConnectionStateTable[CSTableEntry].Info.Buffer.Length;\r
+\r
+                       /* Fill out the TCP data */\r
+                       TCPHeaderOUT->SourcePort           = ConnectionStateTable[CSTableEntry].Port;\r
+                       TCPHeaderOUT->DestinationPort      = ConnectionStateTable[CSTableEntry].RemotePort;\r
+                       TCPHeaderOUT->SequenceNumber       = SwapEndian_32(ConnectionStateTable[CSTableEntry].Info.SequenceNumberOut);\r
+                       TCPHeaderOUT->AcknowledgmentNumber = SwapEndian_32(ConnectionStateTable[CSTableEntry].Info.SequenceNumberIn);\r
+                       TCPHeaderOUT->DataOffset           = (sizeof(TCP_Header_t) / sizeof(uint32_t));\r
+                       TCPHeaderOUT->WindowSize           = SwapEndian_16(TCP_WINDOW_SIZE);\r
+\r
+                       TCPHeaderOUT->Flags                = TCP_FLAG_ACK;\r
+                       TCPHeaderOUT->UrgentPointer        = 0;\r
+                       TCPHeaderOUT->Checksum             = 0;\r
+                       TCPHeaderOUT->Reserved             = 0;\r
+\r
+                       memcpy(TCPDataOUT, ConnectionStateTable[CSTableEntry].Info.Buffer.Data, PacketSize);\r
+                       \r
+                       ConnectionStateTable[CSTableEntry].Info.SequenceNumberOut += PacketSize;\r
+\r
+                       TCPHeaderOUT->Checksum             = TCP_Checksum16(TCPHeaderOUT, ServerIPAddress,\r
+                                                                           ConnectionStateTable[CSTableEntry].RemoteAddress,\r
+                                                                           (sizeof(TCP_Header_t) + PacketSize));\r
+\r
+                       PacketSize += sizeof(TCP_Header_t);\r
+\r
+                       /* Fill out the response IP header */\r
+                       IPHeaderOUT->TotalLength        = SwapEndian_16(sizeof(IP_Header_t) + PacketSize);\r
+                       IPHeaderOUT->TypeOfService      = 0;\r
+                       IPHeaderOUT->HeaderLength       = (sizeof(IP_Header_t) / sizeof(uint32_t));\r
+                       IPHeaderOUT->Version            = 4;\r
+                       IPHeaderOUT->Flags              = 0;\r
+                       IPHeaderOUT->FragmentOffset     = 0;\r
+                       IPHeaderOUT->Identification     = 0;\r
+                       IPHeaderOUT->HeaderChecksum     = 0;\r
+                       IPHeaderOUT->Protocol           = PROTOCOL_TCP;\r
+                       IPHeaderOUT->TTL                = DEFAULT_TTL;\r
+                       IPHeaderOUT->SourceAddress      = ServerIPAddress;\r
+                       IPHeaderOUT->DestinationAddress = ConnectionStateTable[CSTableEntry].RemoteAddress;\r
+                       \r
+                       IPHeaderOUT->HeaderChecksum     = Ethernet_Checksum16(IPHeaderOUT, sizeof(IP_Header_t));\r
+               \r
+                       PacketSize += sizeof(IP_Header_t);\r
+               \r
+                       /* Fill out the response Ethernet frame header */\r
+                       FrameOUTHeader->Source          = ServerMACAddress;\r
+                       FrameOUTHeader->Destination     = (MAC_Address_t){{0x02, 0x00, 0x02, 0x00, 0x02, 0x00}};\r
+                       FrameOUTHeader->EtherType       = SwapEndian_16(ETHERTYPE_IPV4);\r
+\r
+                       PacketSize += sizeof(Ethernet_Frame_Header_t);\r
+\r
+                       /* Set the response length in the buffer and indicate that a response is ready to be sent */\r
+                       FrameOUT.FrameLength            = PacketSize;\r
+                       FrameOUT.FrameInBuffer          = true;\r
+                       \r
+                       ConnectionStateTable[CSTableEntry].Info.Buffer.Ready = false;\r
+                       \r
+                       break;\r
+               }\r
+       }\r
+}\r
+\r
+/** Initializes the TCP protocol handler, clearing the port and connection state tables. This must be called before TCP packets are\r
+ *  processed.\r
+ */\r
+void TCP_Init(void)\r
+{\r
+       /* Initialize the port state table with all CLOSED entries */\r
+       for (uint8_t PTableEntry = 0; PTableEntry < MAX_OPEN_TCP_PORTS; PTableEntry++)\r
+         PortStateTable[PTableEntry].State = TCP_Port_Closed;\r
+\r
+       /* Initialize the connection table with all CLOSED entries */\r
+       for (uint8_t CSTableEntry = 0; CSTableEntry < MAX_TCP_CONNECTIONS; CSTableEntry++)\r
+         ConnectionStateTable[CSTableEntry].State = TCP_Connection_Closed;\r
+}\r
+\r
+/** Sets the state and callback handler of the given port, specified in big endian to the given state.\r
+ *\r
+ *  \param Port     Port whose state and callback function to set, specified in big endian\r
+ *  \param State    New state of the port, a value from the TCP_PortStates_t enum\r
+ *  \param Handler  Application callback handler for the port\r
+ *\r
+ *  \return Boolean true if the port state was set, false otherwise (no more space in the port state table)\r
+ */\r
+bool TCP_SetPortState(uint16_t Port, uint8_t State, void (*Handler)(TCP_ConnectionState_t*, TCP_ConnectionBuffer_t*))\r
+{\r
+       /* Note, Port number should be specified in BIG endian to simplify network code */\r
+\r
+       /* Check to see if the port entry is already in the port state table */\r
+       for (uint8_t PTableEntry = 0; PTableEntry < MAX_TCP_CONNECTIONS; PTableEntry++)\r
+       {\r
+               /* Find existing entry for the port in the table, update it if found */\r
+               if (PortStateTable[PTableEntry].Port == Port)\r
+               {\r
+                       PortStateTable[PTableEntry].State = State;\r
+                       PortStateTable[PTableEntry].ApplicationHandler = Handler;\r
+                       return true;\r
+               }\r
+       }\r
+\r
+       /* Check if trying to open the port -- if so we need to find an unused (closed) entry and replace it */\r
+       if (State == TCP_Port_Open)\r
+       {\r
+               for (uint8_t PTableEntry = 0; PTableEntry < MAX_TCP_CONNECTIONS; PTableEntry++)\r
+               {\r
+                       /* Find a closed port entry in the table, change it to the given port and state */\r
+                       if (PortStateTable[PTableEntry].State == TCP_Port_Closed)\r
+                       {\r
+                               PortStateTable[PTableEntry].Port  = Port;\r
+                               PortStateTable[PTableEntry].State = State;\r
+                               PortStateTable[PTableEntry].ApplicationHandler = Handler;\r
+                               return true;\r
+                       }\r
+               }\r
+               \r
+               /* Port not in table and no room to add it, return failure */\r
+               return false;\r
+       }\r
+       else\r
+       {\r
+               /* Port not in table but trying to close it, so operation successful */\r
+               return true;\r
+       }\r
+}\r
+\r
+/** Retrieves the current state of a given TCP port, specified in big endian.\r
+ *\r
+ *  \param Port  TCP port whose state is to be retrieved, given in big-endian\r
+ *\r
+ *  \return A value from the TCP_PortStates_t enum\r
+ */\r
+uint8_t TCP_GetPortState(uint16_t Port)\r
+{\r
+       /* Note, Port number should be specified in BIG endian to simplify network code */\r
+\r
+       for (uint8_t PTableEntry = 0; PTableEntry < MAX_TCP_CONNECTIONS; PTableEntry++)\r
+       {\r
+               /* Find existing entry for the port in the table, return the port status if found */\r
+               if (PortStateTable[PTableEntry].Port == Port)\r
+                 return PortStateTable[PTableEntry].State;\r
+       }\r
+       \r
+       /* Port not in table, assume closed */\r
+       return TCP_Port_Closed;\r
+}\r
+\r
+/** Sets the connection state of the given port, remote address and remote port to the given TCP connection state. If the\r
+ *  connection exists in the connection state table it is updated, otherwise it is created if possible.\r
+ *\r
+ *  \param Port           TCP port of the connection on the device, specified in big endian\r
+ *  \param RemoteAddress  Remote protocol IP address of the connected device\r
+ *  \param RemotePort     TCP port of the remote device in the connection, specified in big endian\r
+ *  \param State          TCP connection state, a value from the TCP_ConnectionStates_t enum\r
+ *\r
+ *  \return Boolean true if the connection was updated or created, false otherwise (no more space in the connection state table)\r
+ */\r
+bool TCP_SetConnectionState(uint16_t Port, IP_Address_t RemoteAddress, uint16_t RemotePort, uint8_t State)\r
+{\r
+       /* Note, Port number should be specified in BIG endian to simplify network code */\r
+\r
+       for (uint8_t CSTableEntry = 0; CSTableEntry < MAX_TCP_CONNECTIONS; CSTableEntry++)\r
+       {\r
+               /* Find port entry in the table */\r
+               if ((ConnectionStateTable[CSTableEntry].Port == Port) &&\r
+                    IP_COMPARE(&ConnectionStateTable[CSTableEntry].RemoteAddress, &RemoteAddress) &&\r
+                        ConnectionStateTable[CSTableEntry].RemotePort == RemotePort)\r
+               {\r
+                       ConnectionStateTable[CSTableEntry].State = State;\r
+                       return true;\r
+               }\r
+       }\r
+       \r
+       for (uint8_t CSTableEntry = 0; CSTableEntry < MAX_TCP_CONNECTIONS; CSTableEntry++)\r
+       {\r
+               /* Find empty entry in the table */\r
+               if (ConnectionStateTable[CSTableEntry].State == TCP_Connection_Closed)\r
+               {\r
+                       ConnectionStateTable[CSTableEntry].Port          = Port;\r
+                       ConnectionStateTable[CSTableEntry].RemoteAddress = RemoteAddress;                       \r
+                       ConnectionStateTable[CSTableEntry].RemotePort    = RemotePort;\r
+                       ConnectionStateTable[CSTableEntry].State         = State;\r
+                       return true;\r
+               }\r
+       }\r
+       \r
+       return false;\r
+}\r
+\r
+/** Retrieves the current state of a given TCP connection to a host.\r
+ *\r
+ *  \param Port           TCP port on the device in the connection, specified in big endian\r
+ *  \param RemoteAddress  Remote protocol IP address of the connected host\r
+ *  \param RemotePort     Remote TCP port of the connected host, specified in big endian\r
+ *\r
+ *  \return A value from the TCP_ConnectionStates_t enum\r
+ */\r
+uint8_t TCP_GetConnectionState(uint16_t Port, IP_Address_t RemoteAddress, uint16_t RemotePort)\r
+{\r
+       /* Note, Port number should be specified in BIG endian to simplify network code */\r
+\r
+       for (uint8_t CSTableEntry = 0; CSTableEntry < MAX_TCP_CONNECTIONS; CSTableEntry++)\r
+       {\r
+               /* Find port entry in the table */\r
+               if ((ConnectionStateTable[CSTableEntry].Port == Port) &&\r
+                    IP_COMPARE(&ConnectionStateTable[CSTableEntry].RemoteAddress, &RemoteAddress) &&\r
+                        ConnectionStateTable[CSTableEntry].RemotePort == RemotePort)\r
+                        \r
+               {\r
+                       return ConnectionStateTable[CSTableEntry].State;\r
+               }\r
+       }\r
+       \r
+       return TCP_Connection_Closed;\r
+}\r
+\r
+/** Retrieves the connection info structure of a given connection to a host.\r
+ *\r
+ *  \param Port           TCP port on the device in the connection, specified in big endian\r
+ *  \param RemoteAddress  Remote protocol IP address of the connected host\r
+ *  \param RemotePort     Remote TCP port of the connected host, specified in big endian\r
+ *\r
+ *  \return ConnectionInfo structure of the connection if found, NULL otherwise\r
+ */\r
+TCP_ConnectionInfo_t* TCP_GetConnectionInfo(uint16_t Port, IP_Address_t RemoteAddress, uint16_t RemotePort)\r
+{\r
+       /* Note, Port number should be specified in BIG endian to simplify network code */\r
+\r
+       for (uint8_t CSTableEntry = 0; CSTableEntry < MAX_TCP_CONNECTIONS; CSTableEntry++)\r
+       {\r
+               /* Find port entry in the table */\r
+               if ((ConnectionStateTable[CSTableEntry].Port == Port) &&\r
+                    IP_COMPARE(&ConnectionStateTable[CSTableEntry].RemoteAddress, &RemoteAddress) &&\r
+                        ConnectionStateTable[CSTableEntry].RemotePort == RemotePort)\r
+               {\r
+                       return &ConnectionStateTable[CSTableEntry].Info;\r
+               }\r
+       }\r
+       \r
+       return NULL;\r
+}\r
+\r
+/** Processes a TCP packet inside an Ethernet frame, and writes the appropriate response\r
+ *  to the output Ethernet frame if one is created by a application handler.\r
+ *\r
+ *  \param IPHeaderInStart    Pointer to the start of the incoming packet's IP header\r
+ *  \param TCPHeaderInStart   Pointer to the start of the incoming packet's TCP header\r
+ *  \param TCPHeaderOutStart  Pointer to the start of the outgoing packet's TCP header\r
+ *\r
+ *  \return The number of bytes written to the out Ethernet frame if any, NO_RESPONSE if no\r
+ *           response was generated, NO_PROCESS if the packet processing was deferred until the\r
+ *           next Ethernet packet handler iteration\r
+ */\r
+int16_t TCP_ProcessTCPPacket(void* IPHeaderInStart, void* TCPHeaderInStart, void* TCPHeaderOutStart)\r
+{\r
+       IP_Header_t*  IPHeaderIN   = (IP_Header_t*)IPHeaderInStart;\r
+       TCP_Header_t* TCPHeaderIN  = (TCP_Header_t*)TCPHeaderInStart;\r
+       TCP_Header_t* TCPHeaderOUT = (TCP_Header_t*)TCPHeaderOutStart;\r
+\r
+       TCP_ConnectionInfo_t* ConnectionInfo;\r
+       \r
+       DecodeTCPHeader(TCPHeaderInStart);\r
+\r
+       bool PacketResponse = false;\r
+               \r
+       /* Check if the destination port is open and allows incoming connections */\r
+       if (TCP_GetPortState(TCPHeaderIN->DestinationPort) == TCP_Port_Open)\r
+       {\r
+               /* Detect SYN from host to start a connection */\r
+               if (TCPHeaderIN->Flags & TCP_FLAG_SYN)\r
+                 TCP_SetConnectionState(TCPHeaderIN->DestinationPort, IPHeaderIN->SourceAddress, TCPHeaderIN->SourcePort, TCP_Connection_Listen);\r
+\r
+               /* Detect RST from host to abort existing connection */\r
+               if (TCPHeaderIN->Flags & TCP_FLAG_RST)\r
+               {\r
+                       TCPHeaderOUT->Flags = (TCP_FLAG_RST | TCP_FLAG_ACK);                            \r
+                       PacketResponse = true;\r
+                       \r
+                       TCP_SetConnectionState(TCPHeaderIN->DestinationPort, IPHeaderIN->SourceAddress,\r
+                                              TCPHeaderIN->SourcePort, TCP_Connection_Closed);                 \r
+               }\r
+               else\r
+               {\r
+                       /* Process the incoming TCP packet based on the current connection state for the sender and port */\r
+                       switch (TCP_GetConnectionState(TCPHeaderIN->DestinationPort, IPHeaderIN->SourceAddress, TCPHeaderIN->SourcePort))\r
+                       {\r
+                               case TCP_Connection_Listen:\r
+                                       if (TCPHeaderIN->Flags == TCP_FLAG_SYN)\r
+                                       {\r
+                                               /* SYN connection when closed starts a connection with a peer */\r
+\r
+                                               TCPHeaderOUT->Flags = (TCP_FLAG_SYN | TCP_FLAG_ACK);                            \r
+                                               PacketResponse      = true;\r
+                                                                       \r
+                                               TCP_SetConnectionState(TCPHeaderIN->DestinationPort, IPHeaderIN->SourceAddress, TCPHeaderIN->SourcePort,\r
+                                                                                          TCP_Connection_SYNReceived);\r
+                                                                                          \r
+                                               ConnectionInfo = TCP_GetConnectionInfo(TCPHeaderIN->DestinationPort, IPHeaderIN->SourceAddress, TCPHeaderIN->SourcePort);\r
+\r
+                                               ConnectionInfo->SequenceNumberIn  = (SwapEndian_32(TCPHeaderIN->SequenceNumber) + 1);\r
+                                               ConnectionInfo->SequenceNumberOut = 0;\r
+                                               ConnectionInfo->Buffer.InUse      = false;\r
+                                       }\r
+                                       \r
+                                       break;\r
+                               case TCP_Connection_SYNReceived:\r
+                                       if (TCPHeaderIN->Flags == TCP_FLAG_ACK)\r
+                                       {\r
+                                               /* ACK during the connection process completes the connection to a peer */\r
+\r
+                                               TCP_SetConnectionState(TCPHeaderIN->DestinationPort, IPHeaderIN->SourceAddress,\r
+                                                                                          TCPHeaderIN->SourcePort, TCP_Connection_Established);\r
+\r
+                                               ConnectionInfo = TCP_GetConnectionInfo(TCPHeaderIN->DestinationPort, IPHeaderIN->SourceAddress,\r
+                                                                                                                          TCPHeaderIN->SourcePort);\r
+                                                                                                                          \r
+                                               ConnectionInfo->SequenceNumberOut++;\r
+                                       }\r
+                                       \r
+                                       break;\r
+                               case TCP_Connection_Established:\r
+                                       if (TCPHeaderIN->Flags == (TCP_FLAG_FIN | TCP_FLAG_ACK))\r
+                                       {\r
+                                               /* FIN ACK when connected to a peer starts the finalization process */\r
+                                       \r
+                                               TCPHeaderOUT->Flags = (TCP_FLAG_FIN | TCP_FLAG_ACK);                            \r
+                                               PacketResponse      = true;\r
+                                               \r
+                                               TCP_SetConnectionState(TCPHeaderIN->DestinationPort, IPHeaderIN->SourceAddress,\r
+                                                                                          TCPHeaderIN->SourcePort, TCP_Connection_CloseWait);\r
+\r
+                                               ConnectionInfo = TCP_GetConnectionInfo(TCPHeaderIN->DestinationPort, IPHeaderIN->SourceAddress,\r
+                                                                                                                          TCPHeaderIN->SourcePort);\r
+\r
+                                               ConnectionInfo->SequenceNumberIn++;\r
+                                               ConnectionInfo->SequenceNumberOut++;\r
+                                       }\r
+                                       else if ((TCPHeaderIN->Flags == TCP_FLAG_ACK) || (TCPHeaderIN->Flags == (TCP_FLAG_ACK | TCP_FLAG_PSH)))\r
+                                       {\r
+                                               ConnectionInfo = TCP_GetConnectionInfo(TCPHeaderIN->DestinationPort, IPHeaderIN->SourceAddress,\r
+                                                                                                                          TCPHeaderIN->SourcePort);\r
+\r
+                                               /* Check if the buffer is currently in use either by a buffered data to send, or receive */             \r
+                                               if ((ConnectionInfo->Buffer.InUse == false) && (ConnectionInfo->Buffer.Ready == false))\r
+                                               {                                               \r
+                                                       ConnectionInfo->Buffer.Direction = TCP_PACKETDIR_IN;\r
+                                                       ConnectionInfo->Buffer.InUse     = true;\r
+                                                       ConnectionInfo->Buffer.Length    = 0;\r
+                                               }\r
+                                               \r
+                                               /* Check if the buffer has been claimed by us to read in data from the peer */\r
+                                               if ((ConnectionInfo->Buffer.Direction == TCP_PACKETDIR_IN) &&\r
+                                                       (ConnectionInfo->Buffer.Length != TCP_WINDOW_SIZE))\r
+                                               {\r
+                                                       uint16_t IPOffset   = (IPHeaderIN->HeaderLength * sizeof(uint32_t));\r
+                                                       uint16_t TCPOffset  = (TCPHeaderIN->DataOffset * sizeof(uint32_t));\r
+                                                       uint16_t DataLength = (SwapEndian_16(IPHeaderIN->TotalLength) - IPOffset - TCPOffset);\r
+\r
+                                                       /* Copy the packet data into the buffer */\r
+                                                       memcpy(&ConnectionInfo->Buffer.Data[ConnectionInfo->Buffer.Length],\r
+                                                                  &((uint8_t*)TCPHeaderInStart)[TCPOffset],\r
+                                                                  DataLength);\r
+\r
+                                                       ConnectionInfo->SequenceNumberIn += DataLength;\r
+                                                       ConnectionInfo->Buffer.Length    += DataLength;\r
+                                                       \r
+                                                       /* Check if the buffer is full or if the PSH flag is set, if so indicate buffer ready */\r
+                                                       if ((!(TCP_WINDOW_SIZE - ConnectionInfo->Buffer.Length)) || (TCPHeaderIN->Flags & TCP_FLAG_PSH))\r
+                                                       {\r
+                                                               ConnectionInfo->Buffer.InUse = false;\r
+                                                               ConnectionInfo->Buffer.Ready = true;\r
+\r
+                                                               TCPHeaderOUT->Flags = TCP_FLAG_ACK;\r
+                                                               PacketResponse      = true;\r
+                                                       }\r
+                                               }\r
+                                               else\r
+                                               {\r
+                                                       /* Buffer is currently in use by the application, defer processing of the incoming packet */\r
+                                                       return NO_PROCESS;\r
+                                               }\r
+                                       }\r
+                                       \r
+                                       break;\r
+                               case TCP_Connection_Closing:\r
+                                               ConnectionInfo = TCP_GetConnectionInfo(TCPHeaderIN->DestinationPort, IPHeaderIN->SourceAddress,\r
+                                                                                                                          TCPHeaderIN->SourcePort);\r
+\r
+                                               TCPHeaderOUT->Flags = (TCP_FLAG_ACK | TCP_FLAG_FIN);\r
+                                               PacketResponse      = true;\r
+                                               \r
+                                               ConnectionInfo->Buffer.InUse = false;\r
+                                               \r
+                                               TCP_SetConnectionState(TCPHeaderIN->DestinationPort, IPHeaderIN->SourceAddress,\r
+                                                                                          TCPHeaderIN->SourcePort, TCP_Connection_FINWait1);\r
+\r
+                                       break;\r
+                               case TCP_Connection_FINWait1:\r
+                                       if (TCPHeaderIN->Flags == (TCP_FLAG_FIN | TCP_FLAG_ACK))\r
+                                       {\r
+                                               ConnectionInfo = TCP_GetConnectionInfo(TCPHeaderIN->DestinationPort, IPHeaderIN->SourceAddress,\r
+                                                                                                                          TCPHeaderIN->SourcePort);\r
+\r
+                                               TCPHeaderOUT->Flags = TCP_FLAG_ACK;\r
+                                               PacketResponse      = true;\r
+\r
+                                               ConnectionInfo->SequenceNumberIn++;\r
+                                               ConnectionInfo->SequenceNumberOut++;\r
+                                               \r
+                                               TCP_SetConnectionState(TCPHeaderIN->DestinationPort, IPHeaderIN->SourceAddress,\r
+                                                                                          TCPHeaderIN->SourcePort, TCP_Connection_Closed);\r
+                                       }\r
+                                       else if (TCPHeaderIN->Flags == TCP_FLAG_ACK)\r
+                                       {\r
+                                               TCP_SetConnectionState(TCPHeaderIN->DestinationPort, IPHeaderIN->SourceAddress,\r
+                                                                                          TCPHeaderIN->SourcePort, TCP_Connection_FINWait2);\r
+                                       }\r
+                                       \r
+                                       break;\r
+                               case TCP_Connection_FINWait2:\r
+                                       if (TCPHeaderIN->Flags == (TCP_FLAG_FIN | TCP_FLAG_ACK))\r
+                                       {\r
+                                               ConnectionInfo = TCP_GetConnectionInfo(TCPHeaderIN->DestinationPort, IPHeaderIN->SourceAddress,\r
+                                                                                                                          TCPHeaderIN->SourcePort);\r
+\r
+                                               TCPHeaderOUT->Flags = TCP_FLAG_ACK;\r
+                                               PacketResponse      = true;\r
+\r
+                                               ConnectionInfo->SequenceNumberIn++;\r
+                                               ConnectionInfo->SequenceNumberOut++;\r
+                                               \r
+                                               TCP_SetConnectionState(TCPHeaderIN->DestinationPort, IPHeaderIN->SourceAddress,\r
+                                                                                          TCPHeaderIN->SourcePort, TCP_Connection_Closed);\r
+                                       }\r
+                               \r
+                                       break;\r
+                               case TCP_Connection_CloseWait:\r
+                                       if (TCPHeaderIN->Flags == TCP_FLAG_ACK)\r
+                                       {\r
+                                               TCP_SetConnectionState(TCPHeaderIN->DestinationPort, IPHeaderIN->SourceAddress,\r
+                                                                                          TCPHeaderIN->SourcePort, TCP_Connection_Closed);\r
+                                       }\r
+                                       \r
+                                       break;\r
+                       }\r
+               }\r
+       }\r
+       else\r
+       {\r
+               /* Port is not open, indicate via a RST/ACK response to the sender */\r
+               TCPHeaderOUT->Flags = (TCP_FLAG_RST | TCP_FLAG_ACK);                            \r
+               PacketResponse      = true;\r
+       }\r
+       \r
+       /* Check if we need to respond to the sent packet */\r
+       if (PacketResponse)\r
+       {\r
+               ConnectionInfo = TCP_GetConnectionInfo(TCPHeaderIN->DestinationPort, IPHeaderIN->SourceAddress,\r
+                                                      TCPHeaderIN->SourcePort);\r
+\r
+               TCPHeaderOUT->SourcePort           = TCPHeaderIN->DestinationPort;\r
+               TCPHeaderOUT->DestinationPort      = TCPHeaderIN->SourcePort;\r
+               TCPHeaderOUT->SequenceNumber       = SwapEndian_32(ConnectionInfo->SequenceNumberOut);\r
+               TCPHeaderOUT->AcknowledgmentNumber = SwapEndian_32(ConnectionInfo->SequenceNumberIn);\r
+               TCPHeaderOUT->DataOffset           = (sizeof(TCP_Header_t) / sizeof(uint32_t));\r
+               \r
+               if (!(ConnectionInfo->Buffer.InUse))\r
+                 TCPHeaderOUT->WindowSize         = SwapEndian_16(TCP_WINDOW_SIZE);\r
+               else\r
+                 TCPHeaderOUT->WindowSize         = SwapEndian_16(TCP_WINDOW_SIZE - ConnectionInfo->Buffer.Length);\r
+\r
+               TCPHeaderOUT->UrgentPointer        = 0;\r
+               TCPHeaderOUT->Checksum             = 0;\r
+               TCPHeaderOUT->Reserved             = 0;\r
+               \r
+               TCPHeaderOUT->Checksum             = TCP_Checksum16(TCPHeaderOUT, IPHeaderIN->DestinationAddress,\r
+                                                                   IPHeaderIN->SourceAddress, sizeof(TCP_Header_t));                                   \r
+\r
+               return sizeof(TCP_Header_t);    \r
+       }\r
+\r
+       return NO_RESPONSE;\r
+}\r
+\r
+/** Calculates the appropriate TCP checksum, consisting of the addition of the one's compliment of each word,\r
+ *  complimented.\r
+ *\r
+ *  \param TCPHeaderOutStart  Pointer to the start of the packet's outgoing TCP header\r
+ *  \param SourceAddress      Source protocol IP address of the outgoing IP header\r
+ *  \param SourceAddress      DestinationAddress protocol IP address of the outgoing IP header\r
+ *  \param TCPOutSize         Size in bytes of the TCP data header and payload\r
+ *\r
+ *  \return A 16-bit TCP checksum value\r
+ */\r
+static uint16_t TCP_Checksum16(void* TCPHeaderOutStart, IP_Address_t SourceAddress,\r
+                               IP_Address_t DestinationAddress, uint16_t TCPOutSize)\r
+{\r
+       uint32_t Checksum = 0;\r
+       \r
+       /* TCP/IP checksums are the addition of the one's compliment of each word including the IP pseudo-header,\r
+          complimented */\r
+       \r
+       Checksum += ((uint16_t*)&SourceAddress)[0];\r
+       Checksum += ((uint16_t*)&SourceAddress)[1];\r
+       Checksum += ((uint16_t*)&DestinationAddress)[0];\r
+       Checksum += ((uint16_t*)&DestinationAddress)[1];\r
+       Checksum += SwapEndian_16(PROTOCOL_TCP);\r
+       Checksum += SwapEndian_16(TCPOutSize);\r
+\r
+       for (uint8_t CurrWord = 0; CurrWord < (TCPOutSize >> 1); CurrWord++)\r
+         Checksum += ((uint16_t*)TCPHeaderOutStart)[CurrWord];\r
+       \r
+       if (TCPOutSize & 0x01)\r
+         Checksum += (((uint16_t*)TCPHeaderOutStart)[TCPOutSize >> 1] & 0x00FF);\r
+         \r
+       while (Checksum & 0xFFFF0000)\r
+         Checksum = ((Checksum & 0xFFFF) + (Checksum >> 16));\r
+       \r
+       return ~Checksum;\r
+}\r
diff --git a/Demos/Device/LowLevel/RNDISEthernet/Lib/TCP.h b/Demos/Device/LowLevel/RNDISEthernet/Lib/TCP.h
new file mode 100644 (file)
index 0000000..d4b72a5
--- /dev/null
@@ -0,0 +1,253 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  Header file for TCP.c.\r
+ */\r
+\r
+#ifndef _TCP_H_\r
+#define _TCP_H_\r
+\r
+       /* Includes: */\r
+               #include <avr/io.h>\r
+               #include <stdbool.h>\r
+               \r
+               #include <LUFA/Scheduler/Scheduler.h>\r
+               \r
+               #include "EthernetProtocols.h"\r
+               #include "Ethernet.h"\r
+               #include "ProtocolDecoders.h"\r
+               \r
+       /* Macros: */\r
+               /** Maximum number of TCP ports which can be open at the one time */\r
+               #define MAX_OPEN_TCP_PORTS              1\r
+\r
+               /** Maximum number of TCP connections which can be sustained at the one time */\r
+               #define MAX_TCP_CONNECTIONS             1\r
+\r
+               /** TCP window size, giving the maximum number of bytes which can be buffered at the one time */\r
+               #define TCP_WINDOW_SIZE                 1024\r
+               \r
+               /** Port number for HTTP transmissions */\r
+               #define TCP_PORT_HTTP                   SwapEndian_16(80)\r
+               \r
+               /** Data direction indicator for a TCP application buffer, indicating data from host-to-device */\r
+               #define TCP_PACKETDIR_IN                false\r
+\r
+               /** Data direction indicator for a TCP application buffer, indicating data from device-to-host */\r
+               #define TCP_PACKETDIR_OUT               true\r
+               \r
+               /** Congestion Window Reduced TCP flag mask */\r
+               #define TCP_FLAG_CWR                    (1 << 7)\r
+\r
+               /** Explicit Congestion Notification TCP flag mask */\r
+               #define TCP_FLAG_ECE                    (1 << 6)\r
+\r
+               /** Urgent TCP flag mask */\r
+               #define TCP_FLAG_URG                    (1 << 5)\r
+\r
+               /** Data Acknowledge TCP flag mask */\r
+               #define TCP_FLAG_ACK                    (1 << 4)\r
+\r
+               /** Data Push TCP flag mask */\r
+               #define TCP_FLAG_PSH                    (1 << 3)\r
+\r
+               /** Reset TCP flag mask */\r
+               #define TCP_FLAG_RST                    (1 << 2)\r
+\r
+               /** Synchronize TCP flag mask */\r
+               #define TCP_FLAG_SYN                    (1 << 1)\r
+\r
+               /** Connection Finalize TCP flag mask */\r
+               #define TCP_FLAG_FIN                    (1 << 0)\r
+               \r
+               /** Application macro: Determines if the given application buffer contains a packet received from the host\r
+                *\r
+                *  \param Buffer  Application buffer to check\r
+                *\r
+                *  \return Boolean true if the buffer contains a packet from the host, false otherwise\r
+                */\r
+               #define TCP_APP_HAS_RECEIVED_PACKET(Buffer)  (Buffer->Ready && (Buffer->Direction == TCP_PACKETDIR_IN))\r
+\r
+               /** Application macro: Indicates if the application buffer is currently locked by the application for device-to-host transfers.\r
+                *\r
+                *  \param Buffer  Application buffer to check\r
+                *\r
+                *  \return Boolean true if the buffer has been captured by the application for device-to-host transmissions, false otherwise\r
+                */\r
+               #define TCP_APP_HAVE_CAPTURED_BUFFER(Buffer) (!(Buffer->Ready) && Buffer->InUse && \\r
+                                                             (Buffer->Direction == TCP_PACKETDIR_OUT))\r
+\r
+               /** Application macro: Indicates if the application can lock the buffer for multiple continued device-to-host transmissions.\r
+                *\r
+                *  \param Buffer  Application buffer to check\r
+                *\r
+                *  \return Boolean true if the buffer may be captured by the application for device-to-host transmissions, false otherwise\r
+                */\r
+               #define TCP_APP_CAN_CAPTURE_BUFFER(Buffer)   Buffer->InUse\r
+\r
+               /** Application macro: Captures the application buffer, locking it for device-to-host transmissions only. This should be\r
+                *  performed when the application needs to transmit several packets worth of data in succession with no interruptions from the host.\r
+                *\r
+                *  \note The application must check that the buffer can be locked first using TCP_APP_CAN_CAPTURE_BUFFER().\r
+                *\r
+                *  \param Buffer  Application buffer to lock\r
+                */\r
+               #define TCP_APP_CAPTURE_BUFFER(Buffer)       MACROS{ Buffer->Direction = TCP_PACKETDIR_OUT; Buffer->InUse = true; }MACROE\r
+\r
+               /** Application macro: Releases a captured application buffer, allowing for host-to-device packets to be received.\r
+                *\r
+                *  \param Buffer  Application buffer to release\r
+                */\r
+               #define TCP_APP_RELEASE_BUFFER(Buffer)       MACROS{ Buffer->InUse = false; }MACROE\r
+\r
+               /** Application macro: Sends the contents of the given application buffer to the host.\r
+                *\r
+                *  \param Buffer  Application buffer to send\r
+                *  \param Len     Length of data contained in the buffer\r
+                */\r
+               #define TCP_APP_SEND_BUFFER(Buffer, Len)     MACROS{ Buffer->Direction = TCP_PACKETDIR_OUT; Buffer->Length = Len; Buffer->Ready = true; }MACROE\r
+\r
+               /** Application macro: Clears the application buffer, ready for a packet to be written to it.\r
+                *\r
+                *  \param Buffer  Application buffer to clear\r
+                */\r
+               #define TCP_APP_CLEAR_BUFFER(Buffer)         MACROS{ Buffer->Ready = false; Buffer->Length = 0; }MACROE\r
+               \r
+               /** Application macro: Closes an open connection to a host.\r
+                *\r
+                *  \param Connection  Open TCP connection to close\r
+                */\r
+               #define TCP_APP_CLOSECONNECTION(Connection)  MACROS{ Connection->State = TCP_Connection_Closing;  }MACROE\r
+\r
+       /* Enums: */\r
+               /** Enum for possible TCP port states */\r
+               enum TCP_PortStates_t\r
+               {\r
+                       TCP_Port_Closed            = 0, /**< TCP port closed, no connections to a host may be made on this port. */\r
+                       TCP_Port_Open              = 1, /**< TCP port open, connections to a host may be made on this port. */\r
+               };\r
+       \r
+               /** Enum for possible TCP connection states */\r
+               enum TCP_ConnectionStates_t\r
+               {\r
+                       TCP_Connection_Listen      = 0, /**< Listening for a connection from a host */\r
+                       TCP_Connection_SYNSent     = 1, /**< Unused */\r
+                       TCP_Connection_SYNReceived = 2, /**< SYN received, waiting for ACK */\r
+                       TCP_Connection_Established = 3, /**< Connection established in both directions */\r
+                       TCP_Connection_FINWait1    = 4, /**< Closing, waiting for ACK */\r
+                       TCP_Connection_FINWait2    = 5, /**< Closing, waiting for FIN ACK */\r
+                       TCP_Connection_CloseWait   = 6, /**< Closing, waiting for ACK */\r
+                       TCP_Connection_Closing     = 7, /**< Unused */\r
+                       TCP_Connection_LastACK     = 8, /**< Unused */\r
+                       TCP_Connection_TimeWait    = 9, /**< Unused */\r
+                       TCP_Connection_Closed      = 10, /**< Connection closed in both directions */                   \r
+               };\r
+       \r
+       /* Type Defines: */\r
+               /** Type define for a TCP connection buffer structure, including size, data and direction */\r
+               typedef struct\r
+               {\r
+                       uint16_t               Length; /**< Length of data in the TCP application buffer */\r
+                       uint8_t                Data[TCP_WINDOW_SIZE]; /**< TCP application data buffer */\r
+                       bool                   Direction; /**< Buffer transmission direction, either TCP_PACKETDIR_IN  or TCP_PACKETDIR_OUT */\r
+                       bool                   Ready; /**< If data from host, indicates buffer ready to be read, otherwise indicates\r
+                                                      *   buffer ready to be sent to the host\r
+                                                      */\r
+                       bool                   InUse; /** Indicates if the buffer is locked to to the current direction, and cannot be changed */\r
+               } TCP_ConnectionBuffer_t;\r
+\r
+               /** Type define for a TCP connection information structure */\r
+               typedef struct\r
+               {\r
+                       uint32_t               SequenceNumberIn; /**< Current TCP sequence number for host-to-device */ \r
+                       uint32_t               SequenceNumberOut; /**< Current TCP sequence number for device-to-host */\r
+                       TCP_ConnectionBuffer_t Buffer; /**< Connection application data buffer */\r
+               } TCP_ConnectionInfo_t;\r
+\r
+               /** Type define for a complete TCP connection state */\r
+               typedef struct\r
+               {\r
+                       uint16_t               Port; /**< Connection port number on the device */\r
+                       uint16_t               RemotePort; /**< Connection port number on the host */\r
+                       IP_Address_t           RemoteAddress; /**< Connection protocol IP address of the host */\r
+                       TCP_ConnectionInfo_t   Info; /**< Connection information, including application buffer */\r
+                       uint8_t                State; /**< Current connection state, a value from the TCP_ConnectionStates_t enum */\r
+               } TCP_ConnectionState_t;\r
+\r
+               /** Type define for a TCP port state */\r
+               typedef struct\r
+               {\r
+                       uint16_t               Port; /**< TCP port number on the device */\r
+                       uint8_t                State; /**< Current port state, a value from the TCP_PortStates_t enum */\r
+                       void                   (*ApplicationHandler) (TCP_ConnectionState_t* ConnectionState,\r
+                                                                     TCP_ConnectionBuffer_t* Buffer); /**< Port application handler */\r
+               } TCP_PortState_t;\r
+\r
+               /** Type define for a TCP packet header */\r
+               typedef struct\r
+               {\r
+                       uint16_t               SourcePort; /**< Source port of the TCP packet */\r
+                       uint16_t               DestinationPort; /**< Destination port of the TCP packet */\r
+                       \r
+                       uint32_t               SequenceNumber; /**< Data sequence number of the packet */\r
+                       uint32_t               AcknowledgmentNumber; /**< Data acknowledgment number of the packet */\r
+                       \r
+                       unsigned char          Reserved : 4; /**< Reserved, must be all 0 */\r
+                       unsigned char          DataOffset : 4; /**< Offset of the data from the start of the header, in 4 byte chunks */\r
+                       uint8_t                Flags; /**< TCP packet flags */\r
+                       uint16_t               WindowSize; /**< Current data window size (bytes remaining in reception buffer) */\r
+                       \r
+                       uint16_t               Checksum; /**< TCP checksum */\r
+                       uint16_t               UrgentPointer; /**< Urgent data pointer */\r
+               } TCP_Header_t;\r
+\r
+       /* Tasks: */\r
+               TASK(TCP_Task);\r
+               \r
+       /* External Variables: */\r
+               TCP_PortState_t PortStateTable[MAX_OPEN_TCP_PORTS];\r
+\r
+       /* Function Prototypes: */\r
+               void                  TCP_Init(void);\r
+               bool                  TCP_SetPortState(uint16_t Port, uint8_t State, void (*Handler)(TCP_ConnectionState_t*, TCP_ConnectionBuffer_t*));\r
+               uint8_t               TCP_GetPortState(uint16_t Port);\r
+               bool                  TCP_SetConnectionState(uint16_t Port, IP_Address_t RemoteAddress, uint16_t RemotePort, uint8_t State);\r
+               uint8_t               TCP_GetConnectionState(uint16_t Port, IP_Address_t RemoteAddress, uint16_t RemotePort);\r
+               TCP_ConnectionInfo_t* TCP_GetConnectionInfo(uint16_t Port, IP_Address_t RemoteAddress, uint16_t RemotePort);\r
+               int16_t               TCP_ProcessTCPPacket(void* IPHeaderInStart, void* TCPHeaderInStart, void* TCPHeaderOutStart);\r
+\r
+               #if defined(INCLUDE_FROM_TCP_C)\r
+                       static uint16_t TCP_Checksum16(void* TCPHeaderOutStart, IP_Address_t SourceAddress,\r
+                                                                                  IP_Address_t DestinationAddress, uint16_t TCPOutSize);\r
+               #endif\r
+\r
+#endif\r
diff --git a/Demos/Device/LowLevel/RNDISEthernet/Lib/UDP.c b/Demos/Device/LowLevel/RNDISEthernet/Lib/UDP.c
new file mode 100644 (file)
index 0000000..1f571c3
--- /dev/null
@@ -0,0 +1,80 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  User Datagram Protocol (UDP) packet handling routines. This protocol handles high throughput, low\r
+ *  reliability packets which are typically used to encapsulate streaming data.\r
+ */\r
\r
+#define  INCLUDE_FROM_UDP_C\r
+#include "UDP.h"\r
+\r
+/** Processes a UDP packet inside an Ethernet frame, and writes the appropriate response\r
+ *  to the output Ethernet frame if a subprotocol handler has created a response packet.\r
+ *\r
+ *  \param IPHeaderInStart    Pointer to the start of the incoming packet's IP header\r
+ *  \param UDPHeaderInStart   Pointer to the start of the incoming packet's UDP header\r
+ *  \param UDPHeaderOutStart  Pointer to the start of the outgoing packet's UDP header\r
+ *\r
+ *  \return The number of bytes written to the out Ethernet frame if any, NO_RESPONSE otherwise\r
+ */\r
+int16_t UDP_ProcessUDPPacket(void* IPHeaderInStart, void* UDPHeaderInStart, void* UDPHeaderOutStart)\r
+{\r
+       UDP_Header_t* UDPHeaderIN  = (UDP_Header_t*)UDPHeaderInStart;\r
+       UDP_Header_t* UDPHeaderOUT = (UDP_Header_t*)UDPHeaderOutStart;\r
+       \r
+       int16_t RetSize = NO_RESPONSE;\r
+       \r
+       DecodeUDPHeader(UDPHeaderInStart);\r
+       \r
+       /* Check to see if the UDP packet is a DHCP packet */\r
+       if (SwapEndian_16(UDPHeaderIN->DestinationPort) == UDP_PORT_DHCP_REQUEST)\r
+       {\r
+               RetSize = DHCP_ProcessDHCPPacket(IPHeaderInStart,\r
+                                                &((uint8_t*)UDPHeaderInStart)[sizeof(UDP_Header_t)],\r
+                                            &((uint8_t*)UDPHeaderOutStart)[sizeof(UDP_Header_t)]);\r
+       }\r
+       \r
+       /* Check to see if the protocol processing routine has filled out a response */\r
+       if (RetSize > 0)\r
+       {\r
+               /* Fill out the response UDP packet header */\r
+               UDPHeaderOUT->SourcePort      = UDPHeaderIN->DestinationPort;\r
+               UDPHeaderOUT->DestinationPort = UDPHeaderIN->SourcePort;\r
+               UDPHeaderOUT->Checksum        = 0;\r
+               UDPHeaderOUT->Length          = SwapEndian_16(sizeof(UDP_Header_t) + RetSize);\r
+\r
+               /* Return the size of the response so far */\r
+               return (sizeof(UDP_Header_t) + RetSize);\r
+       }\r
+       \r
+       return NO_RESPONSE;\r
+}\r
diff --git a/Demos/Device/LowLevel/RNDISEthernet/Lib/UDP.h b/Demos/Device/LowLevel/RNDISEthernet/Lib/UDP.h
new file mode 100644 (file)
index 0000000..60bbe21
--- /dev/null
@@ -0,0 +1,66 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  Header file for IP.c.\r
+ */\r
+\r
+#ifndef _UDP_H_\r
+#define _UDP_H_\r
+\r
+       /* Includes: */\r
+               #include <avr/io.h>\r
+       \r
+               #include "EthernetProtocols.h"\r
+               #include "Ethernet.h"\r
+               #include "ProtocolDecoders.h"\r
+       \r
+       /* Macros: */\r
+               /** Source UDP port for a DHCP request */\r
+               #define UDP_PORT_DHCP_REQUEST 67\r
+\r
+               /** Destination UDP port for a DHCP reply */\r
+               #define UDP_PORT_DHCP_REPLY   68\r
+                       \r
+       /* Type Defines: */\r
+               /** Type define for a UDP packet header */\r
+               typedef struct\r
+               {\r
+                       uint16_t SourcePort; /**< Packet source port */\r
+                       uint16_t DestinationPort; /**< Packet destination port */\r
+                       uint16_t Length; /**< Total packet length, in bytes */\r
+                       uint16_t Checksum; /**< Optional UDP packet checksum */\r
+               } UDP_Header_t;\r
+               \r
+       /* Function Prototypes: */\r
+               int16_t UDP_ProcessUDPPacket(void* IPHeaderInStart, void* UDPHeaderInStart, void* UDPHeaderOutStart);\r
+\r
+#endif\r
diff --git a/Demos/Device/LowLevel/RNDISEthernet/Lib/Webserver.c b/Demos/Device/LowLevel/RNDISEthernet/Lib/Webserver.c
new file mode 100644 (file)
index 0000000..c07f2c8
--- /dev/null
@@ -0,0 +1,162 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  Simple webserver application for demonstrating the RNDIS demo and TCP/IP stack. This\r
+ *  application will serve up a static HTTP webpage when requested by the host.\r
+ */\r
+\r
+#include "Webserver.h"\r
+\r
+/** HTTP server response header, for transmission before the page contents. This indicates to the host that a page exists at the\r
+ *  given location, and gives extra connection information.\r
+ */\r
+char PROGMEM HTTPHeader[] = "HTTP/1.1 200 OK\r\n"\r
+                            "Server: LUFA RNDIS\r\n"\r
+                            "Content-type: text/html\r\n"\r
+                            "Connection: close\r\n\r\n";\r
+\r
+/** HTTP page to serve to the host when a HTTP request is made. This page is too long for a single response, thus it is automatically\r
+ *  broken up into smaller blocks and sent as a series of packets each time the webserver application callback is run.\r
+ */\r
+char PROGMEM HTTPPage[]   = \r
+               "<html>"\r
+               "       <head>"\r
+               "               <title>"\r
+               "                       LUFA Webserver Demo"\r
+               "               </title>"\r
+               "       </head>"\r
+               "       <body>"\r
+               "               <h1>Hello from your USB AVR!</h1>"\r
+               "               <p>"\r
+               "                       Hello! Welcome to the LUFA RNDIS Demo Webserver test page, running on your USB AVR via the LUFA library. This demonstrates the HTTP webserver, TCP/IP stack and RNDIS demo all running atop the LUFA USB stack."\r
+               "                       <br /><br />"\r
+               "                       <small>Project Information: <a href=\"http://www.fourwalledcubicle.com/LUFA.php\">http://www.fourwalledcubicle.com/LUFA.php</a>.</small>"\r
+               "                       <hr />"\r
+               "                       <i>LUFA Version: </i>" LUFA_VERSION_STRING\r
+               "               </p>"\r
+               "       </body>"\r
+               "</html>";\r
+\r
+\r
+/** Initializes the Webserver application, opening the appropriate HTTP port in the TCP handler and registering the application\r
+ *  callback routine for packets sent to the HTTP protocol port.\r
+ */\r
+void Webserver_Init(void)\r
+{\r
+       /* Open the HTTP port in the TCP protocol so that HTTP connections to the device can be established */\r
+       TCP_SetPortState(TCP_PORT_HTTP, TCP_Port_Open, Webserver_ApplicationCallback);\r
+}\r
+\r
+/** Indicates if a given request equals the given HTTP command.\r
+ *\r
+ *  \param RequestHeader  HTTP request made by the host\r
+ *  \param Command        HTTP command to compare the request to\r
+ *\r
+ *  \return Boolean true if the command matches the request, false otherwise\r
+ */\r
+static bool IsHTTPCommand(uint8_t* RequestHeader, char* Command)\r
+{\r
+       /* Returns true if the non null terminated string in RequestHeader matches the null terminated string Command */\r
+       return (strncmp((char*)RequestHeader, Command, strlen(Command)) == 0);\r
+}\r
+\r
+/** Application callback routine, executed each time the TCP processing task runs. This callback determines what request\r
+ *  has been made (if any), and serves up appropriate responses.\r
+ *\r
+ *  \param ConnectionState  Pointer to a TCP Connection State structure giving connection information\r
+ *  \param Buffer           Pointer to the application's send/receive packet buffer\r
+ */\r
+void Webserver_ApplicationCallback(TCP_ConnectionState_t* ConnectionState, TCP_ConnectionBuffer_t* Buffer)\r
+{\r
+       char*          BufferDataStr = (char*)Buffer->Data;\r
+       static uint8_t PageBlock     = 0;\r
+       \r
+       /* Check to see if a packet has been received on the HTTP port from a remote host */\r
+       if (TCP_APP_HAS_RECEIVED_PACKET(Buffer))\r
+       {\r
+               if (IsHTTPCommand(Buffer->Data, "GET"))\r
+               {\r
+                       PageBlock = 0;\r
+\r
+                       /* Copy the HTTP response header into the packet buffer */\r
+                       strcpy_P(BufferDataStr, HTTPHeader);\r
+                       \r
+                       /* Send the buffer contents to the host */\r
+                       TCP_APP_SEND_BUFFER(Buffer, strlen(BufferDataStr));\r
+\r
+                       /* Lock the buffer to Device->Host transmissions only while we send the page contents */\r
+                       TCP_APP_CAPTURE_BUFFER(Buffer);\r
+               }\r
+               else if (IsHTTPCommand(Buffer->Data, "HEAD"))\r
+               {\r
+                       /* Copy the HTTP response header into the packet buffer */\r
+                       strcpy_P(BufferDataStr, HTTPHeader);\r
+\r
+                       /* Send the buffer contents to the host */\r
+                       TCP_APP_SEND_BUFFER(Buffer, strlen(BufferDataStr));\r
+               }\r
+               else if (IsHTTPCommand(Buffer->Data, "TRACE"))\r
+               {\r
+                       /* Echo the host's query back to the host */\r
+                       TCP_APP_SEND_BUFFER(Buffer, Buffer->Length);\r
+               }\r
+               else\r
+               {\r
+                       /* Unknown request, just clear the buffer (drop the packet) */\r
+                       TCP_APP_CLEAR_BUFFER(Buffer);\r
+               }\r
+       }\r
+       else if (TCP_APP_HAVE_CAPTURED_BUFFER(Buffer))\r
+       {\r
+               uint16_t RemLength = strlen_P(&HTTPPage[PageBlock * HTTP_REPLY_BLOCK_SIZE]);\r
+               uint16_t Length;\r
+       \r
+               /* Determine the length of the loaded block */\r
+               Length = ((RemLength > HTTP_REPLY_BLOCK_SIZE) ? HTTP_REPLY_BLOCK_SIZE : RemLength);\r
+\r
+               /* Copy the next buffer sized block of the page to the packet buffer */\r
+               strncpy_P(BufferDataStr, &HTTPPage[PageBlock * HTTP_REPLY_BLOCK_SIZE], Length);\r
+               \r
+               /* Send the buffer contents to the host */\r
+               TCP_APP_SEND_BUFFER(Buffer, Length);\r
+\r
+               /* Check to see if the entire page has been sent */\r
+               if (PageBlock++ == (sizeof(HTTPPage) / HTTP_REPLY_BLOCK_SIZE))\r
+               {\r
+                       /* Unlock the buffer so that the host can fill it with future packets */\r
+                       TCP_APP_RELEASE_BUFFER(Buffer);\r
+                       \r
+                       /* Close the connection to the host */\r
+                       TCP_APP_CLOSECONNECTION(ConnectionState);\r
+               }\r
+       }\r
+}\r
diff --git a/Demos/Device/LowLevel/RNDISEthernet/Lib/Webserver.h b/Demos/Device/LowLevel/RNDISEthernet/Lib/Webserver.h
new file mode 100644 (file)
index 0000000..b2193ad
--- /dev/null
@@ -0,0 +1,55 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  Header file for Webserver.c.\r
+ */\r
\r
+#ifndef _WEBSERVER_H_\r
+#define _WEBSERVER_H_\r
+\r
+       /* Includes: */\r
+               #include <avr/io.h>\r
+               #include <avr/pgmspace.h>\r
+               \r
+               #include <LUFA/Version.h>\r
+               \r
+               #include "TCP.h"\r
+       \r
+       /* Macros: */\r
+               /** Maximum size of a HTTP response per transmission */\r
+               #define  HTTP_REPLY_BLOCK_SIZE     128\r
+       \r
+       /* Function Prototypes: */\r
+               void Webserver_Init(void);\r
+               void Webserver_ApplicationCallback(TCP_ConnectionState_t* ConnectionState, TCP_ConnectionBuffer_t* Buffer);\r
+\r
+#endif\r
diff --git a/Demos/Device/LowLevel/RNDISEthernet/RNDISEthernet.aps b/Demos/Device/LowLevel/RNDISEthernet/RNDISEthernet.aps
new file mode 100644 (file)
index 0000000..b5d21c1
--- /dev/null
@@ -0,0 +1 @@
+<AVRStudio><MANAGEMENT><ProjectName>RNDISEthernet</ProjectName><Created>30-Sep-2008 14:17:05</Created><LastEdit>22-Jan-2009 17:52:35</LastEdit><ICON>241</ICON><ProjectType>0</ProjectType><Created>30-Sep-2008 14:17:05</Created><Version>4</Version><Build>4, 14, 0, 589</Build><ProjectTypeName>AVR GCC</ProjectTypeName></MANAGEMENT><CODE_CREATION><ObjectFile></ObjectFile><EntryFile></EntryFile><SaveFolder>C:\Users\Dean\Documents\Electronics\Projects\WORK\LUFAWORK\Demos\RNDISEthernet\</SaveFolder></CODE_CREATION><DEBUG_TARGET><CURRENT_TARGET>JTAGICE mkII</CURRENT_TARGET><CURRENT_PART>AT90USB1287.xml</CURRENT_PART><BREAKPOINTS></BREAKPOINTS><IO_EXPAND><HIDE>false</HIDE></IO_EXPAND><REGISTERNAMES><Register>R00</Register><Register>R01</Register><Register>R02</Register><Register>R03</Register><Register>R04</Register><Register>R05</Register><Register>R06</Register><Register>R07</Register><Register>R08</Register><Register>R09</Register><Register>R10</Register><Register>R11</Register><Register>R12</Register><Register>R13</Register><Register>R14</Register><Register>R15</Register><Register>R16</Register><Register>R17</Register><Register>R18</Register><Register>R19</Register><Register>R20</Register><Register>R21</Register><Register>R22</Register><Register>R23</Register><Register>R24</Register><Register>R25</Register><Register>R26</Register><Register>R27</Register><Register>R28</Register><Register>R29</Register><Register>R30</Register><Register>R31</Register></REGISTERNAMES><COM>Auto</COM><COMType>0</COMType><WATCHNUM>0</WATCHNUM><WATCHNAMES><Pane0></Pane0><Pane1></Pane1><Pane2></Pane2><Pane3></Pane3></WATCHNAMES><BreakOnTrcaeFull>0</BreakOnTrcaeFull></DEBUG_TARGET><Debugger><Triggers></Triggers></Debugger><AVRGCCPLUGIN><FILES><SOURCEFILE>ARP.c</SOURCEFILE><SOURCEFILE>Descriptors.c</SOURCEFILE><SOURCEFILE>Ethernet.c</SOURCEFILE><SOURCEFILE>ICMP.c</SOURCEFILE><SOURCEFILE>IP.c</SOURCEFILE><SOURCEFILE>ProtocolDecoders.c</SOURCEFILE><SOURCEFILE>RNDIS.c</SOURCEFILE><SOURCEFILE>RNDISEthernet.c</SOURCEFILE><SOURCEFILE>TCP.c</SOURCEFILE><SOURCEFILE>Webserver.c</SOURCEFILE><HEADERFILE>ARP.h</HEADERFILE><HEADERFILE>Descriptors.h</HEADERFILE><HEADERFILE>Ethernet.h</HEADERFILE><HEADERFILE>EthernetProtocols.h</HEADERFILE><HEADERFILE>ICMP.h</HEADERFILE><HEADERFILE>IP.h</HEADERFILE><HEADERFILE>ProtocolDecoders.h</HEADERFILE><HEADERFILE>RNDIS.h</HEADERFILE><HEADERFILE>RNDISEthernet.h</HEADERFILE><HEADERFILE>TCP.h</HEADERFILE><HEADERFILE>Webserver.h</HEADERFILE><OTHERFILE>makefile</OTHERFILE></FILES><CONFIGS><CONFIG><NAME>default</NAME><USESEXTERNALMAKEFILE>YES</USESEXTERNALMAKEFILE><EXTERNALMAKEFILE>makefile</EXTERNALMAKEFILE><PART>at90usb1287</PART><HEX>1</HEX><LIST>1</LIST><MAP>1</MAP><OUTPUTFILENAME>RNDISEthernet.elf</OUTPUTFILENAME><OUTPUTDIR>default\</OUTPUTDIR><ISDIRTY>1</ISDIRTY><OPTIONS/><INCDIRS/><LIBDIRS/><LIBS/><LINKOBJECTS/><OPTIONSFORALL>-Wall -gdwarf-2 -std=gnu99 -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums</OPTIONSFORALL><LINKEROPTIONS></LINKEROPTIONS><SEGMENTS/></CONFIG></CONFIGS><LASTCONFIG>default</LASTCONFIG><USES_WINAVR>1</USES_WINAVR><GCC_LOC>C:\WinAVR-20081205\bin\avr-gcc.exe</GCC_LOC><MAKE_LOC>C:\WinAVR-20081205\utils\bin\make.exe</MAKE_LOC></AVRGCCPLUGIN><ProjectFiles><Files><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\LUFAWORK\Demos\RNDISEthernet\ARP.h</Name><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\LUFAWORK\Demos\RNDISEthernet\Descriptors.h</Name><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\LUFAWORK\Demos\RNDISEthernet\Ethernet.h</Name><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\LUFAWORK\Demos\RNDISEthernet\EthernetProtocols.h</Name><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\LUFAWORK\Demos\RNDISEthernet\ICMP.h</Name><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\LUFAWORK\Demos\RNDISEthernet\IP.h</Name><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\LUFAWORK\Demos\RNDISEthernet\ProtocolDecoders.h</Name><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\LUFAWORK\Demos\RNDISEthernet\RNDIS.h</Name><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\LUFAWORK\Demos\RNDISEthernet\RNDISEthernet.h</Name><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\LUFAWORK\Demos\RNDISEthernet\TCP.h</Name><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\LUFAWORK\Demos\RNDISEthernet\Telnet.h</Name><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\LUFAWORK\Demos\RNDISEthernet\Webserver.h</Name><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\LUFAWORK\Demos\RNDISEthernet\ARP.c</Name><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\LUFAWORK\Demos\RNDISEthernet\Descriptors.c</Name><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\LUFAWORK\Demos\RNDISEthernet\Ethernet.c</Name><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\LUFAWORK\Demos\RNDISEthernet\ICMP.c</Name><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\LUFAWORK\Demos\RNDISEthernet\IP.c</Name><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\LUFAWORK\Demos\RNDISEthernet\ProtocolDecoders.c</Name><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\LUFAWORK\Demos\RNDISEthernet\RNDIS.c</Name><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\LUFAWORK\Demos\RNDISEthernet\RNDISEthernet.c</Name><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\LUFAWORK\Demos\RNDISEthernet\TCP.c</Name><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\LUFAWORK\Demos\RNDISEthernet\Telnet.c</Name><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\LUFAWORK\Demos\RNDISEthernet\Webserver.c</Name></Files></ProjectFiles><IOView><usergroups/><sort sorted="0" column="0" ordername="1" orderaddress="1" ordergroup="1"/></IOView><Files></Files><Events><Bookmarks></Bookmarks></Events><Trace><Filters></Filters></Trace></AVRStudio>\r
diff --git a/Demos/Device/LowLevel/RNDISEthernet/RNDISEthernet.c b/Demos/Device/LowLevel/RNDISEthernet/RNDISEthernet.c
new file mode 100644 (file)
index 0000000..b046f78
--- /dev/null
@@ -0,0 +1,338 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  Main source file for the RNDISEthernet demo. This file contains the main tasks of the demo and\r
+ *  is responsible for the initial application hardware configuration.\r
+ */\r
+\r
+#include "RNDISEthernet.h"\r
+\r
+/* Scheduler Task List */\r
+TASK_LIST\r
+{\r
+       { .Task = USB_USBTask          , .TaskStatus = TASK_STOP },\r
+       { .Task = Ethernet_Task        , .TaskStatus = TASK_STOP },\r
+       { .Task = TCP_Task             , .TaskStatus = TASK_STOP },\r
+       { .Task = RNDIS_Task           , .TaskStatus = TASK_STOP },\r
+};\r
+\r
+/** Main program entry point. This routine configures the hardware required by the application, then\r
+ *  starts the scheduler to run the USB management task.\r
+ */\r
+int main(void)\r
+{\r
+       /* Disable watchdog if enabled by bootloader/fuses */\r
+       MCUSR &= ~(1 << WDRF);\r
+       wdt_disable();\r
+\r
+       /* Disable clock division */\r
+       clock_prescale_set(clock_div_1);\r
+\r
+       /* Hardware Initialization */\r
+       LEDs_Init();\r
+       SerialStream_Init(9600, false);\r
+       \r
+       /* Webserver Initialization */\r
+       TCP_Init();\r
+       Webserver_Init();\r
+\r
+       printf_P(PSTR("\r\n\r\n****** RNDIS Demo running. ******\r\n"));\r
+\r
+       /* Indicate USB not ready */\r
+       UpdateStatus(Status_USBNotReady);\r
+       \r
+       /* Initialize Scheduler so that it can be used */\r
+       Scheduler_Init();\r
+\r
+       /* Initialize USB Subsystem */\r
+       USB_Init();\r
+\r
+       /* Scheduling - routine never returns, so put this last in the main function */\r
+       Scheduler_Start();\r
+}\r
+\r
+/** Event handler for the USB_Connect event. This indicates that the device is enumerating via the status LEDs and\r
+ *  starts the library USB task to begin the enumeration and USB management process.\r
+ */\r
+void EVENT_USB_Connect(void)\r
+{\r
+       /* Start USB management task */\r
+       Scheduler_SetTaskMode(USB_USBTask, TASK_RUN);\r
+\r
+       /* Indicate USB enumerating */\r
+       UpdateStatus(Status_USBEnumerating);\r
+}\r
+\r
+/** Event handler for the USB_Disconnect event. This indicates that the device is no longer connected to a host via\r
+ *  the status LEDs and stops all the relevant tasks.\r
+ */\r
+void EVENT_USB_Disconnect(void)\r
+{\r
+       /* Stop running TCP/IP and USB management tasks */\r
+       Scheduler_SetTaskMode(RNDIS_Task, TASK_STOP);\r
+       Scheduler_SetTaskMode(Ethernet_Task, TASK_STOP);\r
+       Scheduler_SetTaskMode(TCP_Task, TASK_STOP);\r
+       Scheduler_SetTaskMode(USB_USBTask, TASK_STOP);\r
+\r
+       /* Indicate USB not ready */\r
+       UpdateStatus(Status_USBNotReady);\r
+}\r
+\r
+/** Event handler for the USB_ConfigurationChanged event. This is fired when the host sets the current configuration\r
+ *  of the USB device after enumeration, and configures the RNDIS device endpoints and starts the relevant tasks.\r
+ */\r
+void EVENT_USB_ConfigurationChanged(void)\r
+{\r
+       /* Setup CDC Notification, Rx and Tx Endpoints */\r
+       Endpoint_ConfigureEndpoint(CDC_TX_EPNUM, EP_TYPE_BULK,\r
+                                      ENDPOINT_DIR_IN, CDC_TXRX_EPSIZE,\r
+                                  ENDPOINT_BANK_SINGLE);\r
+\r
+       Endpoint_ConfigureEndpoint(CDC_RX_EPNUM, EP_TYPE_BULK,\r
+                                      ENDPOINT_DIR_OUT, CDC_TXRX_EPSIZE,\r
+                                  ENDPOINT_BANK_SINGLE);\r
+\r
+       Endpoint_ConfigureEndpoint(CDC_NOTIFICATION_EPNUM, EP_TYPE_INTERRUPT,\r
+                                      ENDPOINT_DIR_IN, CDC_NOTIFICATION_EPSIZE,\r
+                                  ENDPOINT_BANK_SINGLE);\r
+\r
+       /* Indicate USB connected and ready */\r
+       UpdateStatus(Status_USBReady);\r
+\r
+       /* Start TCP/IP tasks */\r
+       Scheduler_SetTaskMode(RNDIS_Task, TASK_RUN);\r
+       Scheduler_SetTaskMode(Ethernet_Task, TASK_RUN);\r
+       Scheduler_SetTaskMode(TCP_Task, TASK_RUN);\r
+}\r
+\r
+/** Event handler for the USB_UnhandledControlPacket event. This is used to catch standard and class specific\r
+ *  control requests that are not handled internally by the USB library (including the RNDIS control commands,\r
+ *  which set up the USB RNDIS network adapter), so that they can be handled appropriately for the application.\r
+ */\r
+void EVENT_USB_UnhandledControlPacket(void)\r
+{\r
+       /* Process RNDIS class commands */\r
+       switch (USB_ControlRequest.bRequest)\r
+       {\r
+               case REQ_SendEncapsulatedCommand:\r
+                       if (USB_ControlRequest.bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE))\r
+                       {\r
+                               /* Clear the SETUP packet, ready for data transfer */\r
+                               Endpoint_ClearSETUP();\r
+                               \r
+                               /* Read in the RNDIS message into the message buffer */\r
+                               Endpoint_Read_Control_Stream_LE(RNDISMessageBuffer, USB_ControlRequest.wLength);\r
+\r
+                               /* Finalize the stream transfer to clear the last packet from the host */\r
+                               Endpoint_ClearIN();\r
+\r
+                               /* Process the RNDIS message */\r
+                               ProcessRNDISControlMessage();\r
+                       }\r
+                       \r
+                       break;\r
+               case REQ_GetEncapsulatedResponse:\r
+                       if (USB_ControlRequest.bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_INTERFACE))\r
+                       {\r
+                               /* Clear the SETUP packet, ready for data transfer */\r
+                               Endpoint_ClearSETUP();\r
+                               \r
+                               /* Check if a response to the last message is ready */\r
+                               if (!(MessageHeader->MessageLength))\r
+                               {\r
+                                       /* Set the response to a single 0x00 byte to indicate that no response is ready */\r
+                                       RNDISMessageBuffer[0] = 0;\r
+                                       MessageHeader->MessageLength = 1;\r
+                               }\r
+\r
+                               /* Write the message response data to the endpoint */\r
+                               Endpoint_Write_Control_Stream_LE(RNDISMessageBuffer, MessageHeader->MessageLength);\r
+                               \r
+                               /* Finalize the stream transfer to send the last packet or clear the host abort */\r
+                               Endpoint_ClearOUT();\r
+\r
+                               /* Reset the message header once again after transmission */\r
+                               MessageHeader->MessageLength = 0;\r
+                       }\r
+       \r
+                       break;\r
+       }\r
+}\r
+\r
+/** Function to manage status updates to the user. This is done via LEDs on the given board, if available, but may be changed to\r
+ *  log to a serial port, or anything else that is suitable for status updates.\r
+ *\r
+ *  \param CurrentStatus  Current status of the system, from the RNDISEthernet_StatusCodes_t enum\r
+ */\r
+void UpdateStatus(uint8_t CurrentStatus)\r
+{\r
+       uint8_t LEDMask = LEDS_NO_LEDS;\r
+       \r
+       /* Set the LED mask to the appropriate LED mask based on the given status code */\r
+       switch (CurrentStatus)\r
+       {\r
+               case Status_USBNotReady:\r
+                       LEDMask = (LEDS_LED1);\r
+                       break;\r
+               case Status_USBEnumerating:\r
+                       LEDMask = (LEDS_LED1 | LEDS_LED2);\r
+                       break;\r
+               case Status_USBReady:\r
+                       LEDMask = (LEDS_LED2 | LEDS_LED4);\r
+                       break;\r
+               case Status_ProcessingEthernetFrame:\r
+                       LEDMask = (LEDS_LED2 | LEDS_LED3);\r
+                       break;          \r
+       }\r
+       \r
+       /* Set the board LEDs to the new LED mask */\r
+       LEDs_SetAllLEDs(LEDMask);\r
+}\r
+\r
+/** Task to manage the sending and receiving of encapsulated RNDIS data and notifications. This removes the RNDIS\r
+ *  wrapper from received Ethernet frames and places them in the FrameIN global buffer, or adds the RNDIS wrapper\r
+ *  to a frame in the FrameOUT global before sending the buffer contents to the host.\r
+ */\r
+TASK(RNDIS_Task)\r
+{\r
+       /* Select the notification endpoint */\r
+       Endpoint_SelectEndpoint(CDC_NOTIFICATION_EPNUM);\r
+\r
+       /* Check if a message response is ready for the host */\r
+       if (Endpoint_IsINReady() && ResponseReady)\r
+       {\r
+               USB_Notification_t Notification = (USB_Notification_t)\r
+                       {\r
+                               .bmRequestType = (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_INTERFACE),\r
+                               .bNotification = NOTIF_RESPONSE_AVAILABLE,\r
+                               .wValue        = 0,\r
+                               .wIndex        = 0,\r
+                               .wLength       = 0,\r
+                       };\r
+               \r
+               /* Indicate that a message response is ready for the host */\r
+               Endpoint_Write_Stream_LE(&Notification, sizeof(Notification));\r
+\r
+               /* Finalize the stream transfer to send the last packet */\r
+               Endpoint_ClearIN();\r
+\r
+               /* Indicate a response is no longer ready */\r
+               ResponseReady = false;\r
+       }\r
+       \r
+       /* Don't process the data endpoints until the system is in the data initialized state, and the buffer is free */\r
+       if ((CurrRNDISState == RNDIS_Data_Initialized) && !(MessageHeader->MessageLength))\r
+       {\r
+               /* Create a new packet header for reading/writing */\r
+               RNDIS_PACKET_MSG_t RNDISPacketHeader;\r
+\r
+               /* Select the data OUT endpoint */\r
+               Endpoint_SelectEndpoint(CDC_RX_EPNUM);\r
+               \r
+               /* Check if the data OUT endpoint contains data, and that the IN buffer is empty */\r
+               if (Endpoint_IsOUTReceived() && !(FrameIN.FrameInBuffer))\r
+               {\r
+                       /* Read in the packet message header */\r
+                       Endpoint_Read_Stream_LE(&RNDISPacketHeader, sizeof(RNDIS_PACKET_MSG_t));\r
+\r
+                       /* Stall the request if the data is too large */\r
+                       if (RNDISPacketHeader.DataLength > ETHERNET_FRAME_SIZE_MAX)\r
+                       {\r
+                               Endpoint_StallTransaction();\r
+                               return;\r
+                       }\r
+                       \r
+                       /* Read in the Ethernet frame into the buffer */\r
+                       Endpoint_Read_Stream_LE(FrameIN.FrameData, RNDISPacketHeader.DataLength);\r
+\r
+                       /* Finalize the stream transfer to send the last packet */\r
+                       Endpoint_ClearOUT();\r
+                       \r
+                       /* Store the size of the Ethernet frame */\r
+                       FrameIN.FrameLength = RNDISPacketHeader.DataLength;\r
+\r
+                       /* Indicate Ethernet IN buffer full */\r
+                       FrameIN.FrameInBuffer = true;\r
+               }\r
+               \r
+               /* Select the data IN endpoint */\r
+               Endpoint_SelectEndpoint(CDC_TX_EPNUM);\r
+               \r
+               /* Check if the data IN endpoint is ready for more data, and that the IN buffer is full */\r
+               if (Endpoint_IsINReady() && FrameOUT.FrameInBuffer)\r
+               {\r
+                       /* Clear the packet header with all 0s so that the relevant fields can be filled */\r
+                       memset(&RNDISPacketHeader, 0, sizeof(RNDIS_PACKET_MSG_t));\r
+\r
+                       /* Construct the required packet header fields in the buffer */\r
+                       RNDISPacketHeader.MessageType   = REMOTE_NDIS_PACKET_MSG;\r
+                       RNDISPacketHeader.MessageLength = (sizeof(RNDIS_PACKET_MSG_t) + FrameOUT.FrameLength);\r
+                       RNDISPacketHeader.DataOffset    = (sizeof(RNDIS_PACKET_MSG_t) - sizeof(RNDIS_Message_Header_t));\r
+                       RNDISPacketHeader.DataLength    = FrameOUT.FrameLength;\r
+\r
+                       /* Send the packet header to the host */\r
+                       Endpoint_Write_Stream_LE(&RNDISPacketHeader, sizeof(RNDIS_PACKET_MSG_t));\r
+\r
+                       /* Send the Ethernet frame data to the host */\r
+                       Endpoint_Write_Stream_LE(FrameOUT.FrameData, RNDISPacketHeader.DataLength);\r
+                       \r
+                       /* Finalize the stream transfer to send the last packet */\r
+                       Endpoint_ClearIN();\r
+                       \r
+                       /* Indicate Ethernet OUT buffer no longer full */\r
+                       FrameOUT.FrameInBuffer = false;\r
+               }\r
+       }\r
+}\r
+\r
+/** Ethernet frame processing task. This task checks to see if a frame has been received, and if so hands off the processing\r
+ *  of the frame to the Ethernet processing routines.\r
+ */\r
+TASK(Ethernet_Task)\r
+{\r
+       /* Task for Ethernet processing. Incoming ethernet frames are loaded into the FrameIN structure, and\r
+          outgoing frames should be loaded into the FrameOUT structure. Both structures can only hold a single\r
+          Ethernet frame at a time, so the FrameInBuffer bool is used to indicate when the buffers contain data. */\r
+\r
+       /* Check if a frame has been written to the IN frame buffer */\r
+       if (FrameIN.FrameInBuffer)\r
+       {\r
+               /* Indicate packet processing started */\r
+               UpdateStatus(Status_ProcessingEthernetFrame);\r
+\r
+               /* Process the ethernet frame - replace this with your own Ethernet handler code as desired */\r
+               Ethernet_ProcessPacket();\r
+\r
+               /* Indicate packet processing complete */\r
+               UpdateStatus(Status_USBReady);\r
+       }\r
+}\r
diff --git a/Demos/Device/LowLevel/RNDISEthernet/RNDISEthernet.h b/Demos/Device/LowLevel/RNDISEthernet/RNDISEthernet.h
new file mode 100644 (file)
index 0000000..703af40
--- /dev/null
@@ -0,0 +1,100 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  Header file for RNDISEthernet.c.\r
+ */\r
\r
+#ifndef _RNDISETHERNET_H_\r
+#define _RNDISETHERNET_H_\r
+\r
+       /* Includes: */\r
+               #include <avr/io.h>\r
+               #include <avr/wdt.h>\r
+               #include <avr/pgmspace.h>\r
+               #include <avr/power.h>\r
+               #include <string.h>\r
+               #include <stdio.h>\r
+\r
+               #include "Descriptors.h"\r
+\r
+               #include "Lib/RNDIS.h"\r
+               #include "Lib/Ethernet.h"\r
+               #include "Lib/TCP.h"\r
+               #include "Lib/ARP.h"\r
+               #include "Lib/Webserver.h"\r
+\r
+               #include <LUFA/Version.h>                         // Library Version Information\r
+               #include <LUFA/Drivers/USB/USB.h>                 // USB Functionality\r
+               #include <LUFA/Drivers/Board/LEDs.h>              // LEDs driver\r
+               #include <LUFA/Scheduler/Scheduler.h>             // Simple scheduler for task management\r
+               #include <LUFA/Drivers/Peripheral/SerialStream.h> // Serial stream driver\r
+       \r
+       /* Macros: */\r
+               /** Notification value to indicate that a frame is ready to be read by the host. */\r
+               #define NOTIF_RESPONSE_AVAILABLE                 0x01\r
+\r
+       /* Type Defines: */\r
+               /** Type define for a RNDIS notification message, for transmission to the RNDIS host via the notification\r
+                *  Endpoint.\r
+                */\r
+               typedef struct\r
+               {\r
+                       uint8_t  bmRequestType; /**< Notification type, a mask of values from SrdRequestType.h */\r
+                       uint8_t  bNotification; /**< Notification index, indicating what the RNDIS notification relates to */\r
+                       uint16_t wValue; /**< Two byte notification value parameter */\r
+                       uint16_t wIndex; /**< Two byte notification index parameter */\r
+                       uint16_t wLength; /**< Size of data payload following the notification header */\r
+               } USB_Notification_t;\r
+\r
+       /* Enums: */\r
+               /** Enum for the possible status codes for passing to the UpdateStatus() function. */\r
+               enum RNDISEthernet_StatusCodes_t\r
+               {\r
+                       Status_USBNotReady             = 0, /**< USB is not ready (disconnected from a USB host) */\r
+                       Status_USBEnumerating          = 1, /**< USB interface is enumerating */\r
+                       Status_USBReady                = 2, /**< USB interface is connected and ready */\r
+                       Status_ProcessingEthernetFrame = 3, /**< Currently processing an ethernet frame from the host */\r
+               };\r
+               \r
+       /* Tasks: */\r
+               TASK(RNDIS_Task);\r
+               TASK(Ethernet_Task);\r
+\r
+       /* Function Prototypes: */\r
+               void EVENT_USB_Connect(void);\r
+               void EVENT_USB_Disconnect(void);\r
+               void EVENT_USB_ConfigurationChanged(void);\r
+               void EVENT_USB_UnhandledControlPacket(void);\r
+\r
+               void UpdateStatus(uint8_t CurrentStatus);\r
+       \r
+#endif\r
diff --git a/Demos/Device/LowLevel/RNDISEthernet/RNDISEthernet.txt b/Demos/Device/LowLevel/RNDISEthernet/RNDISEthernet.txt
new file mode 100644 (file)
index 0000000..306cf85
--- /dev/null
@@ -0,0 +1,115 @@
+/** \file\r
+ *\r
+ *  This file contains special DoxyGen information for the generation of the main page and other special\r
+ *  documentation pages. It is not a project source file.\r
+ */\r
\r
+/** \mainpage RNDIS Class Ethernet Demo (with Webserver/Telnet)\r
+ *\r
+ *  \section SSec_Info USB Information:\r
+ *\r
+ *  The following table gives a rundown of the USB utilization of this demo.\r
+ *\r
+ *  Remote Network Driver Interface demonstration application.\r
+ *  This gives a simple reference application for implementing\r
+ *  a CDC RNDIS device acting as a simple network interface for\r
+ *  ethernet packet exchange. RNDIS is a proprietary Microsoft\r
+ *  standard; this demo will only work on Windows 2000 (manually\r
+ *  patched with the Microsoft RNDIS hotfix) and above (with no\r
+ *  manual patches), or on the latest Linux kernels.\r
+ *  \r
+ *  Before running, you will need to install the INF file that\r
+ *  is located in the RNDISEthernet project directory. This will\r
+ *  enable Windows to use its inbuilt RNDIS drivers, negating the\r
+ *  need for special Windows drivers for the device. To install,\r
+ *  right-click the .INF file and choose the Install option. If\r
+ *  Windows 2000 is used, the Microsoft INF file in the hotfix\r
+ *  will need to be altered to use the VID/PID of the demo and\r
+ *  then chosen instead of the LUFA RNDIS INF file when prompted.\r
+ *  \r
+ *  When enumerated, this demo will install as a new network\r
+ *  adapter which ethernet packets can be sent to and received\r
+ *  from. Running on top of the adapter is a very simple TCP/IP\r
+ *  stack with a HTTP webserver and TELNET host which can be\r
+ *  accessed through a web browser at IP address 10.0.0.2:80 or\r
+ *  through a TELNET client at 10.0.0.2:25. This device also supports\r
+ *  ping echos via the ICMP protocol.\r
+ *  \r
+ *  \note The TCP/IP stack in this demo has a number of limitations\r
+ *  and should serve as an example only - it is not fully featured nor\r
+ *  compliant to the TCP/IP specification. For complete projects, it is \r
+ *  recommended that it be replaced with an external open source TCP/IP\r
+ *  stack that is feature complete, such as the uIP stack.\r
+ *\r
+ *  \section SSec_Description Project Description: \r
+ *\r
+ *  <table>\r
+ *   <tr>\r
+ *    <td><b>USB Mode:</b></td>\r
+ *    <td>Device</td>\r
+ *   </tr>\r
+ *   <tr>\r
+ *    <td><b>USB Class:</b></td>\r
+ *    <td>Communications Device Class (CDC)</td>\r
+ *   </tr>\r
+ *   <tr> \r
+ *    <td><b>USB Subclass:</b></td>\r
+ *    <td>Remote NDIS (Microsoft Proprietary CDC Class Networking Standard)</td>\r
+ *   </tr>\r
+ *   <tr>\r
+ *    <td><b>Relevant Standards:</b></td>\r
+ *    <td>Microsoft RNDIS Specification</td>\r
+ *   </tr>\r
+ *   <tr>\r
+ *    <td><b>Usable Speeds:</b></td>\r
+ *    <td>Full Speed Mode</td>\r
+ *   </tr>\r
+ *  </table>\r
+ *\r
+ *  \section SSec_Options Project Options\r
+ *\r
+ *  The following defines can be found in this demo, which can control the demo behaviour when defined, or changed in value.\r
+ *\r
+ *  <table>\r
+ *   <tr>\r
+ *    <td><b>Define Name:</b></td>\r
+ *    <td><b>Location:</b></td>\r
+ *    <td><b>Description:</b></td>\r
+ *   </tr>\r
+ *   <tr>\r
+ *    <td>NO_DECODE_ETHERNET</td>\r
+ *    <td>Makefile CDEFS</td>\r
+ *    <td>When defined, received Ethernet headers will not be decoded and printed to the device serial port.</td>\r
+ *   </tr>\r
+ *   <tr>\r
+ *    <td>NO_DECODE_ARP</td>\r
+ *    <td>Makefile CDEFS</td>\r
+ *    <td>When defined, received ARP headers will not be decoded and printed to the device serial port.</td>\r
+ *   </tr>\r
+ *   <tr>\r
+ *    <td>NO_DECODE_IP</td>\r
+ *    <td>Makefile CDEFS</td>\r
+ *    <td>When defined, received IP headers will not be decoded and printed to the device serial port.</td>\r
+ *   </tr>\r
+ *   <tr>\r
+ *    <td>NO_DECODE_ICMP</td>\r
+ *    <td>Makefile CDEFS</td>\r
+ *    <td>When defined, received ICMP headers will not be decoded and printed to the device serial port.</td>\r
+ *   </tr>\r
+ *   <tr>\r
+ *    <td>NO_DECODE_TCP</td>\r
+ *    <td>Makefile CDEFS</td>\r
+ *    <td>When defined, received TCP headers will not be decoded and printed to the device serial port.</td>\r
+ *   </tr>\r
+ *   <tr>\r
+ *    <td>NO_DECODE_UDP</td>\r
+ *    <td>Makefile CDEFS</td>\r
+ *    <td>When defined, received UDP headers will not be decoded and printed to the device serial port.</td>\r
+ *   </tr>\r
+ *   <tr>\r
+ *    <td>NO_DECODE_DHCP</td>\r
+ *    <td>Makefile CDEFS</td>\r
+ *    <td>When defined, received DHCP headers will not be decoded and printed to the device serial port.</td>\r
+ *   </tr>\r
+ *  </table>\r
+ */
\ No newline at end of file
diff --git a/Demos/Device/LowLevel/RNDISEthernet/makefile b/Demos/Device/LowLevel/RNDISEthernet/makefile
new file mode 100644 (file)
index 0000000..f40c37b
--- /dev/null
@@ -0,0 +1,747 @@
+# Hey Emacs, this is a -*- makefile -*-\r
+#----------------------------------------------------------------------------\r
+# WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al.\r
+#  >> Modified for use with the LUFA project. <<\r
+#\r
+# Released to the Public Domain\r
+#\r
+# Additional material for this makefile was written by:\r
+# Peter Fleury\r
+# Tim Henigan\r
+# Colin O'Flynn\r
+# Reiner Patommel\r
+# Markus Pfaff\r
+# Sander Pool\r
+# Frederik Rouleau\r
+# Carlos Lamas\r
+# Dean Camera\r
+# Opendous Inc.\r
+# Denver Gingerich\r
+#\r
+#----------------------------------------------------------------------------\r
+# On command line:\r
+#\r
+# make all = Make software.\r
+#\r
+# make clean = Clean out built project files.\r
+#\r
+# make coff = Convert ELF to AVR COFF.\r
+#\r
+# make extcoff = Convert ELF to AVR Extended COFF.\r
+#\r
+# make program = Download the hex file to the device, using avrdude.\r
+#                Please customize the avrdude settings below first!\r
+#\r
+# make dfu = Download the hex file to the device, using dfu-programmer (must\r
+#            have dfu-programmer installed).\r
+#\r
+# make flip = Download the hex file to the device, using Atmel FLIP (must\r
+#             have Atmel FLIP installed).\r
+#\r
+# make dfu-ee = Download the eeprom file to the device, using dfu-programmer\r
+#               (must have dfu-programmer installed).\r
+#\r
+# make flip-ee = Download the eeprom file to the device, using Atmel FLIP\r
+#                (must have Atmel FLIP installed).\r
+#\r
+# make doxygen = Generate DoxyGen documentation for the project (must have\r
+#                DoxyGen installed)\r
+#\r
+# make debug = Start either simulavr or avarice as specified for debugging, \r
+#              with avr-gdb or avr-insight as the front end for debugging.\r
+#\r
+# make filename.s = Just compile filename.c into the assembler code only.\r
+#\r
+# make filename.i = Create a preprocessed source file for use in submitting\r
+#                   bug reports to the GCC project.\r
+#\r
+# To rebuild project do "make clean" then "make all".\r
+#----------------------------------------------------------------------------\r
+\r
+\r
+# MCU name\r
+MCU = at90usb1287\r
+\r
+\r
+# Target board (see library "Board Types" documentation, USER or blank for projects not requiring\r
+# LUFA board drivers). If USER is selected, put custom board drivers in a directory called \r
+# "Board" inside the application directory.\r
+BOARD  = USBKEY\r
+\r
+\r
+# Processor frequency.\r
+#     This will define a symbol, F_CPU, in all source code files equal to the \r
+#     processor frequency. You can then use this symbol in your source code to \r
+#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done\r
+#     automatically to create a 32-bit value in your source code.\r
+#     Typical values are:\r
+#         F_CPU =  1000000\r
+#         F_CPU =  1843200\r
+#         F_CPU =  2000000\r
+#         F_CPU =  3686400\r
+#         F_CPU =  4000000\r
+#         F_CPU =  7372800\r
+#         F_CPU =  8000000\r
+#         F_CPU = 11059200\r
+#         F_CPU = 14745600\r
+#         F_CPU = 16000000\r
+#         F_CPU = 18432000\r
+#         F_CPU = 20000000\r
+F_CPU = 8000000\r
+\r
+\r
+# Input clock frequency.\r
+#     This will define a symbol, F_CLOCK, in all source code files equal to the \r
+#     input clock frequency (before any prescaling is performed). This value may\r
+#     differ from F_CPU if prescaling is used on the latter, and is required as the\r
+#     raw input clock is fed directly to the PLL sections of the AVR for high speed\r
+#     clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'\r
+#     at the end, this will be done automatically to create a 32-bit value in your\r
+#     source code.\r
+#\r
+#     If no clock division is performed on the input clock inside the AVR (via the\r
+#     CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.\r
+F_CLOCK = 8000000\r
+\r
+\r
+# Output format. (can be srec, ihex, binary)\r
+FORMAT = ihex\r
+\r
+\r
+# Target file name (without extension).\r
+TARGET = RNDISEthernet\r
+\r
+\r
+# Object files directory\r
+#     To put object files in current directory, use a dot (.), do NOT make\r
+#     this an empty or blank macro!\r
+OBJDIR = .\r
+\r
+\r
+# Path to the LUFA library\r
+LUFA_PATH = ../../..\r
+\r
+\r
+# List C source files here. (C dependencies are automatically generated.)\r
+SRC = $(TARGET).c                                                 \\r
+      Descriptors.c                                               \\r
+      Lib/RNDIS.c                                                 \\r
+         Lib/Ethernet.c                                              \\r
+         Lib/ProtocolDecoders.c                                      \\r
+         Lib/ICMP.c                                                  \\r
+         Lib/TCP.c                                                   \\r
+         Lib/UDP.c                                                   \\r
+         Lib/DHCP.c                                                  \\r
+         Lib/ARP.c                                                   \\r
+         Lib/IP.c                                                    \\r
+         Lib/Webserver.c                                             \\r
+         $(LUFA_PATH)/LUFA/Scheduler/Scheduler.c                     \\r
+         $(LUFA_PATH)/LUFA/Drivers/Peripheral/SerialStream.c         \\r
+         $(LUFA_PATH)/LUFA/Drivers/Peripheral/Serial.c               \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/DevChapter9.c        \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Endpoint.c           \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Host.c               \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/HostChapter9.c       \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/LowLevel.c           \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Pipe.c               \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/Events.c            \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBInterrupt.c      \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBTask.c           \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/ConfigDescriptor.c  \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/Class/HIDParser.c             \\r
+\r
+\r
+# List C++ source files here. (C dependencies are automatically generated.)\r
+CPPSRC = \r
+\r
+\r
+# List Assembler source files here.\r
+#     Make them always end in a capital .S.  Files ending in a lowercase .s\r
+#     will not be considered source files but generated files (assembler\r
+#     output from the compiler), and will be deleted upon "make clean"!\r
+#     Even though the DOS/Win* filesystem matches both .s and .S the same,\r
+#     it will preserve the spelling of the filenames, and gcc itself does\r
+#     care about how the name is spelled on its command-line.\r
+ASRC =\r
+\r
+\r
+# Optimization level, can be [0, 1, 2, 3, s]. \r
+#     0 = turn off optimization. s = optimize for size.\r
+#     (Note: 3 is not always the best optimization level. See avr-libc FAQ.)\r
+OPT = s\r
+\r
+\r
+# Debugging format.\r
+#     Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs.\r
+#     AVR Studio 4.10 requires dwarf-2.\r
+#     AVR [Extended] COFF format requires stabs, plus an avr-objcopy run.\r
+DEBUG = dwarf-2\r
+\r
+\r
+# List any extra directories to look for include files here.\r
+#     Each directory must be seperated by a space.\r
+#     Use forward slashes for directory separators.\r
+#     For a directory that has spaces, enclose it in quotes.\r
+EXTRAINCDIRS = $(LUFA_PATH)/\r
+\r
+\r
+# Compiler flag to set the C Standard level.\r
+#     c89   = "ANSI" C\r
+#     gnu89 = c89 plus GCC extensions\r
+#     c99   = ISO C99 standard (not yet fully implemented)\r
+#     gnu99 = c99 plus GCC extensions\r
+CSTANDARD = -std=gnu99\r
+\r
+\r
+# Place -D or -U options here for C sources\r
+CDEFS  = -DF_CPU=$(F_CPU)UL -DF_CLOCK=$(F_CLOCK)UL -DBOARD=BOARD_$(BOARD)\r
+CDEFS += -DUSE_NONSTANDARD_DESCRIPTOR_NAMES -DNO_STREAM_CALLBACKS -DUSB_DEVICE_ONLY\r
+CDEFS += -DFIXED_CONTROL_ENDPOINT_SIZE=8 -DUSE_SINGLE_DEVICE_CONFIGURATION\r
+CDEFS += -DUSE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)"\r
+CDEFS += -DNO_DECODE_ETHERNET -DNO_DECODE_ARP -DNO_DECODE_ICMP -DNO_DECODE_IP -DNO_DECODE_TCP -DNO_DECODE_UDP -DNO_DECODE_DHCP\r
+\r
+\r
+# Place -D or -U options here for ASM sources\r
+ADEFS = -DF_CPU=$(F_CPU)\r
+\r
+\r
+# Place -D or -U options here for C++ sources\r
+CPPDEFS = -DF_CPU=$(F_CPU)UL\r
+#CPPDEFS += -D__STDC_LIMIT_MACROS\r
+#CPPDEFS += -D__STDC_CONSTANT_MACROS\r
+\r
+\r
+\r
+#---------------- Compiler Options C ----------------\r
+#  -g*:          generate debugging information\r
+#  -O*:          optimization level\r
+#  -f...:        tuning, see GCC manual and avr-libc documentation\r
+#  -Wall...:     warning level\r
+#  -Wa,...:      tell GCC to pass this to the assembler.\r
+#    -adhlns...: create assembler listing\r
+CFLAGS = -g$(DEBUG)\r
+CFLAGS += $(CDEFS)\r
+CFLAGS += -O$(OPT)\r
+CFLAGS += -funsigned-char\r
+CFLAGS += -funsigned-bitfields\r
+CFLAGS += -ffunction-sections\r
+CFLAGS += -fpack-struct\r
+CFLAGS += -fshort-enums\r
+CFLAGS += -finline-limit=20\r
+CFLAGS += -Wall\r
+CFLAGS += -Wstrict-prototypes\r
+CFLAGS += -Wundef\r
+#CFLAGS += -fno-unit-at-a-time\r
+#CFLAGS += -Wunreachable-code\r
+#CFLAGS += -Wsign-compare\r
+CFLAGS += -Wa,-adhlns=$(<:%.c=$(OBJDIR)/%.lst)\r
+CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))\r
+CFLAGS += $(CSTANDARD)\r
+\r
+\r
+#---------------- Compiler Options C++ ----------------\r
+#  -g*:          generate debugging information\r
+#  -O*:          optimization level\r
+#  -f...:        tuning, see GCC manual and avr-libc documentation\r
+#  -Wall...:     warning level\r
+#  -Wa,...:      tell GCC to pass this to the assembler.\r
+#    -adhlns...: create assembler listing\r
+CPPFLAGS = -g$(DEBUG)\r
+CPPFLAGS += $(CPPDEFS)\r
+CPPFLAGS += -O$(OPT)\r
+CPPFLAGS += -funsigned-char\r
+CPPFLAGS += -funsigned-bitfields\r
+CPPFLAGS += -fpack-struct\r
+CPPFLAGS += -fshort-enums\r
+CPPFLAGS += -fno-exceptions\r
+CPPFLAGS += -Wall\r
+CFLAGS += -Wundef\r
+#CPPFLAGS += -mshort-calls\r
+#CPPFLAGS += -fno-unit-at-a-time\r
+#CPPFLAGS += -Wstrict-prototypes\r
+#CPPFLAGS += -Wunreachable-code\r
+#CPPFLAGS += -Wsign-compare\r
+CPPFLAGS += -Wa,-adhlns=$(<:%.cpp=$(OBJDIR)/%.lst)\r
+CPPFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))\r
+#CPPFLAGS += $(CSTANDARD)\r
+\r
+\r
+#---------------- Assembler Options ----------------\r
+#  -Wa,...:   tell GCC to pass this to the assembler.\r
+#  -adhlns:   create listing\r
+#  -gstabs:   have the assembler create line number information; note that\r
+#             for use in COFF files, additional information about filenames\r
+#             and function names needs to be present in the assembler source\r
+#             files -- see avr-libc docs [FIXME: not yet described there]\r
+#  -listing-cont-lines: Sets the maximum number of continuation lines of hex \r
+#       dump that will be displayed for a given single line of source input.\r
+ASFLAGS = $(ADEFS) -Wa,-adhlns=$(<:%.S=$(OBJDIR)/%.lst),-gstabs,--listing-cont-lines=100\r
+\r
+\r
+#---------------- Library Options ----------------\r
+# Minimalistic printf version\r
+PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min\r
+\r
+# Floating point printf version (requires MATH_LIB = -lm below)\r
+PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt\r
+\r
+# If this is left blank, then it will use the Standard printf version.\r
+PRINTF_LIB = \r
+#PRINTF_LIB = $(PRINTF_LIB_MIN)\r
+#PRINTF_LIB = $(PRINTF_LIB_FLOAT)\r
+\r
+\r
+# Minimalistic scanf version\r
+SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min\r
+\r
+# Floating point + %[ scanf version (requires MATH_LIB = -lm below)\r
+SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt\r
+\r
+# If this is left blank, then it will use the Standard scanf version.\r
+SCANF_LIB = \r
+#SCANF_LIB = $(SCANF_LIB_MIN)\r
+#SCANF_LIB = $(SCANF_LIB_FLOAT)\r
+\r
+\r
+MATH_LIB = -lm\r
+\r
+\r
+# List any extra directories to look for libraries here.\r
+#     Each directory must be seperated by a space.\r
+#     Use forward slashes for directory separators.\r
+#     For a directory that has spaces, enclose it in quotes.\r
+EXTRALIBDIRS = \r
+\r
+\r
+\r
+#---------------- External Memory Options ----------------\r
+\r
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),\r
+# used for variables (.data/.bss) and heap (malloc()).\r
+#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff\r
+\r
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),\r
+# only used for heap (malloc()).\r
+#EXTMEMOPTS = -Wl,--section-start,.data=0x801100,--defsym=__heap_end=0x80ffff\r
+\r
+EXTMEMOPTS =\r
+\r
+\r
+\r
+#---------------- Linker Options ----------------\r
+#  -Wl,...:     tell GCC to pass this to linker.\r
+#    -Map:      create map file\r
+#    --cref:    add cross reference to  map file\r
+LDFLAGS = -Wl,-Map=$(TARGET).map,--cref\r
+LDFLAGS += -Wl,--relax \r
+LDFLAGS += -Wl,--gc-sections\r
+LDFLAGS += $(EXTMEMOPTS)\r
+LDFLAGS += $(patsubst %,-L%,$(EXTRALIBDIRS))\r
+LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)\r
+#LDFLAGS += -T linker_script.x\r
+\r
+\r
+\r
+#---------------- Programming Options (avrdude) ----------------\r
+\r
+# Programming hardware: alf avr910 avrisp bascom bsd \r
+# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500\r
+#\r
+# Type: avrdude -c ?\r
+# to get a full listing.\r
+#\r
+AVRDUDE_PROGRAMMER = jtagmkII\r
+\r
+# com1 = serial port. Use lpt1 to connect to parallel port.\r
+AVRDUDE_PORT = usb\r
+\r
+AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex\r
+#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep\r
+\r
+\r
+# Uncomment the following if you want avrdude's erase cycle counter.\r
+# Note that this counter needs to be initialized first using -Yn,\r
+# see avrdude manual.\r
+#AVRDUDE_ERASE_COUNTER = -y\r
+\r
+# Uncomment the following if you do /not/ wish a verification to be\r
+# performed after programming the device.\r
+#AVRDUDE_NO_VERIFY = -V\r
+\r
+# Increase verbosity level.  Please use this when submitting bug\r
+# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude> \r
+# to submit bug reports.\r
+#AVRDUDE_VERBOSE = -v -v\r
+\r
+AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)\r
+AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY)\r
+AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE)\r
+AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER)\r
+\r
+\r
+\r
+#---------------- Debugging Options ----------------\r
+\r
+# For simulavr only - target MCU frequency.\r
+DEBUG_MFREQ = $(F_CPU)\r
+\r
+# Set the DEBUG_UI to either gdb or insight.\r
+# DEBUG_UI = gdb\r
+DEBUG_UI = insight\r
+\r
+# Set the debugging back-end to either avarice, simulavr.\r
+DEBUG_BACKEND = avarice\r
+#DEBUG_BACKEND = simulavr\r
+\r
+# GDB Init Filename.\r
+GDBINIT_FILE = __avr_gdbinit\r
+\r
+# When using avarice settings for the JTAG\r
+JTAG_DEV = /dev/com1\r
+\r
+# Debugging port used to communicate between GDB / avarice / simulavr.\r
+DEBUG_PORT = 4242\r
+\r
+# Debugging host used to communicate between GDB / avarice / simulavr, normally\r
+#     just set to localhost unless doing some sort of crazy debugging when \r
+#     avarice is running on a different computer.\r
+DEBUG_HOST = localhost\r
+\r
+\r
+\r
+#============================================================================\r
+\r
+\r
+# Define programs and commands.\r
+SHELL = sh\r
+CC = avr-gcc\r
+OBJCOPY = avr-objcopy\r
+OBJDUMP = avr-objdump\r
+SIZE = avr-size\r
+AR = avr-ar rcs\r
+NM = avr-nm\r
+AVRDUDE = avrdude\r
+REMOVE = rm -f\r
+REMOVEDIR = rm -rf\r
+COPY = cp\r
+WINSHELL = cmd\r
+\r
+# Define Messages\r
+# English\r
+MSG_ERRORS_NONE = Errors: none\r
+MSG_BEGIN = -------- begin --------\r
+MSG_END = --------  end  --------\r
+MSG_SIZE_BEFORE = Size before: \r
+MSG_SIZE_AFTER = Size after:\r
+MSG_COFF = Converting to AVR COFF:\r
+MSG_EXTENDED_COFF = Converting to AVR Extended COFF:\r
+MSG_FLASH = Creating load file for Flash:\r
+MSG_EEPROM = Creating load file for EEPROM:\r
+MSG_EXTENDED_LISTING = Creating Extended Listing:\r
+MSG_SYMBOL_TABLE = Creating Symbol Table:\r
+MSG_LINKING = Linking:\r
+MSG_COMPILING = Compiling C:\r
+MSG_COMPILING_CPP = Compiling C++:\r
+MSG_ASSEMBLING = Assembling:\r
+MSG_CLEANING = Cleaning project:\r
+MSG_CREATING_LIBRARY = Creating library:\r
+\r
+\r
+\r
+\r
+# Define all object files.\r
+OBJ = $(SRC:%.c=$(OBJDIR)/%.o) $(CPPSRC:%.cpp=$(OBJDIR)/%.o) $(ASRC:%.S=$(OBJDIR)/%.o) \r
+\r
+# Define all listing files.\r
+LST = $(SRC:%.c=$(OBJDIR)/%.lst) $(CPPSRC:%.cpp=$(OBJDIR)/%.lst) $(ASRC:%.S=$(OBJDIR)/%.lst) \r
+\r
+\r
+# Compiler flags to generate dependency files.\r
+GENDEPFLAGS = -MMD -MP -MF .dep/$(@F).d\r
+\r
+\r
+# Combine all necessary flags and optional flags.\r
+# Add target processor to flags.\r
+ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS)\r
+ALL_CPPFLAGS = -mmcu=$(MCU) -I. -x c++ $(CPPFLAGS) $(GENDEPFLAGS)\r
+ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)\r
+\r
+\r
+\r
+\r
+\r
+# Default target.\r
+all: begin gccversion sizebefore build checkhooks checklibmode checkboard sizeafter end\r
+\r
+# Change the build target to build a HEX file or a library.\r
+build: elf hex eep lss sym\r
+#build: lib\r
+\r
+\r
+elf: $(TARGET).elf\r
+hex: $(TARGET).hex\r
+eep: $(TARGET).eep\r
+lss: $(TARGET).lss\r
+sym: $(TARGET).sym\r
+LIBNAME=lib$(TARGET).a\r
+lib: $(LIBNAME)\r
+\r
+\r
+\r
+# Eye candy.\r
+# AVR Studio 3.x does not check make's exit code but relies on\r
+# the following magic strings to be generated by the compile job.\r
+begin:\r
+       @echo\r
+       @echo $(MSG_BEGIN)\r
+\r
+end:\r
+       @echo $(MSG_END)\r
+       @echo\r
+\r
+\r
+# Display size of file.\r
+HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex\r
+ELFSIZE = $(SIZE) $(MCU_FLAG) $(FORMAT_FLAG) $(TARGET).elf\r
+MCU_FLAG = $(shell $(SIZE) --help | grep -- --mcu > /dev/null && echo --mcu=$(MCU) )\r
+FORMAT_FLAG = $(shell $(SIZE) --help | grep -- --format=.*avr > /dev/null && echo --format=avr )\r
+\r
+sizebefore:\r
+       @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \\r
+       2>/dev/null; echo; fi\r
+\r
+sizeafter:\r
+       @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \\r
+       2>/dev/null; echo; fi\r
+\r
+checkhooks: build\r
+       @echo\r
+       @echo ------- Unhooked LUFA Events -------\r
+       @$(shell) (grep -s '^EVENT_.*LUFA/.*\\.o' $(TARGET).map | \\r
+                  cut -d' ' -f1 | cut -d'_' -f2- | grep ".*") || \\r
+                          echo "(None)"\r
+       @echo ------------------------------------\r
+\r
+checklibmode:\r
+       @echo\r
+       @echo ----------- Library Mode -----------\r
+       @$(shell) ($(CC) $(ALL_CFLAGS) -E -dM - < /dev/null \\r
+                 | grep 'USB_\(DEVICE\|HOST\)_ONLY' | cut -d' ' -f2 | grep ".*") \\r
+                 || echo "No specific mode (both device and host mode allowable)."\r
+       @echo ------------------------------------\r
+\r
+checkboard:\r
+       @echo\r
+       @echo ---------- Selected Board ----------\r
+       @echo Selected board model is $(BOARD).\r
+       @echo ------------------------------------\r
+       \r
+# Display compiler version information.\r
+gccversion : \r
+       @$(CC) --version\r
+\r
+\r
+\r
+# Program the device.  \r
+program: $(TARGET).hex $(TARGET).eep\r
+       $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)\r
+\r
+flip: $(TARGET).hex\r
+       batchisp -hardware usb -device $(MCU) -operation erase f\r
+       batchisp -hardware usb -device $(MCU) -operation loadbuffer $(TARGET).hex program\r
+       batchisp -hardware usb -device $(MCU) -operation start reset 0\r
+\r
+dfu: $(TARGET).hex\r
+       dfu-programmer $(MCU) erase\r
+       dfu-programmer $(MCU) flash --debug 1 $(TARGET).hex\r
+       dfu-programmer $(MCU) reset\r
+\r
+flip-ee: $(TARGET).hex $(TARGET).eep\r
+       copy $(TARGET).eep $(TARGET)eep.hex\r
+       batchisp -hardware usb -device $(MCU) -operation memory EEPROM erase\r
+       batchisp -hardware usb -device $(MCU) -operation memory EEPROM loadbuffer $(TARGET)eep.hex program\r
+       batchisp -hardware usb -device $(MCU) -operation start reset 0\r
+\r
+dfu-ee: $(TARGET).hex $(TARGET).eep\r
+       dfu-programmer $(MCU) flash-eeprom --debug 1 --suppress-bootloader-mem $(TARGET).eep\r
+       dfu-programmer $(MCU) reset\r
+\r
+\r
+# Generate avr-gdb config/init file which does the following:\r
+#     define the reset signal, load the target file, connect to target, and set \r
+#     a breakpoint at main().\r
+gdb-config: \r
+       @$(REMOVE) $(GDBINIT_FILE)\r
+       @echo define reset >> $(GDBINIT_FILE)\r
+       @echo SIGNAL SIGHUP >> $(GDBINIT_FILE)\r
+       @echo end >> $(GDBINIT_FILE)\r
+       @echo file $(TARGET).elf >> $(GDBINIT_FILE)\r
+       @echo target remote $(DEBUG_HOST):$(DEBUG_PORT)  >> $(GDBINIT_FILE)\r
+ifeq ($(DEBUG_BACKEND),simulavr)\r
+       @echo load  >> $(GDBINIT_FILE)\r
+endif\r
+       @echo break main >> $(GDBINIT_FILE)\r
+\r
+debug: gdb-config $(TARGET).elf\r
+ifeq ($(DEBUG_BACKEND), avarice)\r
+       @echo Starting AVaRICE - Press enter when "waiting to connect" message displays.\r
+       @$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \\r
+       $(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT)\r
+       @$(WINSHELL) /c pause\r
+\r
+else\r
+       @$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \\r
+       $(DEBUG_MFREQ) --port $(DEBUG_PORT)\r
+endif\r
+       @$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE)\r
+\r
+\r
+\r
+\r
+# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.\r
+COFFCONVERT = $(OBJCOPY) --debugging\r
+COFFCONVERT += --change-section-address .data-0x800000\r
+COFFCONVERT += --change-section-address .bss-0x800000\r
+COFFCONVERT += --change-section-address .noinit-0x800000\r
+COFFCONVERT += --change-section-address .eeprom-0x810000\r
+\r
+\r
+\r
+coff: $(TARGET).elf\r
+       @echo\r
+       @echo $(MSG_COFF) $(TARGET).cof\r
+       $(COFFCONVERT) -O coff-avr $< $(TARGET).cof\r
+\r
+\r
+extcoff: $(TARGET).elf\r
+       @echo\r
+       @echo $(MSG_EXTENDED_COFF) $(TARGET).cof\r
+       $(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof\r
+\r
+\r
+\r
+# Create final output files (.hex, .eep) from ELF output file.\r
+%.hex: %.elf\r
+       @echo\r
+       @echo $(MSG_FLASH) $@\r
+       $(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@\r
+\r
+%.eep: %.elf\r
+       @echo\r
+       @echo $(MSG_EEPROM) $@\r
+       -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \\r
+       --change-section-lma .eeprom=0 --no-change-warnings -O $(FORMAT) $< $@ || exit 0\r
+\r
+# Create extended listing file from ELF output file.\r
+%.lss: %.elf\r
+       @echo\r
+       @echo $(MSG_EXTENDED_LISTING) $@\r
+       $(OBJDUMP) -h -z -S $< > $@\r
+\r
+# Create a symbol table from ELF output file.\r
+%.sym: %.elf\r
+       @echo\r
+       @echo $(MSG_SYMBOL_TABLE) $@\r
+       $(NM) -n $< > $@\r
+\r
+\r
+\r
+# Create library from object files.\r
+.SECONDARY : $(TARGET).a\r
+.PRECIOUS : $(OBJ)\r
+%.a: $(OBJ)\r
+       @echo\r
+       @echo $(MSG_CREATING_LIBRARY) $@\r
+       $(AR) $@ $(OBJ)\r
+\r
+\r
+# Link: create ELF output file from object files.\r
+.SECONDARY : $(TARGET).elf\r
+.PRECIOUS : $(OBJ)\r
+%.elf: $(OBJ)\r
+       @echo\r
+       @echo $(MSG_LINKING) $@\r
+       $(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)\r
+\r
+\r
+# Compile: create object files from C source files.\r
+$(OBJDIR)/%.o : %.c\r
+       @echo\r
+       @echo $(MSG_COMPILING) $<\r
+       $(CC) -c $(ALL_CFLAGS) $< -o $@ \r
+\r
+\r
+# Compile: create object files from C++ source files.\r
+$(OBJDIR)/%.o : %.cpp\r
+       @echo\r
+       @echo $(MSG_COMPILING_CPP) $<\r
+       $(CC) -c $(ALL_CPPFLAGS) $< -o $@ \r
+\r
+\r
+# Compile: create assembler files from C source files.\r
+%.s : %.c\r
+       $(CC) -S $(ALL_CFLAGS) $< -o $@\r
+\r
+\r
+# Compile: create assembler files from C++ source files.\r
+%.s : %.cpp\r
+       $(CC) -S $(ALL_CPPFLAGS) $< -o $@\r
+\r
+\r
+# Assemble: create object files from assembler source files.\r
+$(OBJDIR)/%.o : %.S\r
+       @echo\r
+       @echo $(MSG_ASSEMBLING) $<\r
+       $(CC) -c $(ALL_ASFLAGS) $< -o $@\r
+\r
+\r
+# Create preprocessed source for use in sending a bug report.\r
+%.i : %.c\r
+       $(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ \r
+       \r
+\r
+# Target: clean project.\r
+clean: begin clean_list clean_binary end\r
+\r
+clean_binary:\r
+       $(REMOVE) $(TARGET).hex\r
+       \r
+clean_list:\r
+       @echo $(MSG_CLEANING)\r
+       $(REMOVE) $(TARGET).eep\r
+       $(REMOVE) $(TARGET)eep.hex\r
+       $(REMOVE) $(TARGET).cof\r
+       $(REMOVE) $(TARGET).elf\r
+       $(REMOVE) $(TARGET).map\r
+       $(REMOVE) $(TARGET).sym\r
+       $(REMOVE) $(TARGET).lss\r
+       $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.o)\r
+       $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.lst)\r
+       $(REMOVE) $(SRC:.c=.s)\r
+       $(REMOVE) $(SRC:.c=.d)\r
+       $(REMOVE) $(SRC:.c=.i)\r
+       $(REMOVEDIR) .dep\r
+\r
+\r
+doxygen:\r
+       @echo Generating Project Documentation...\r
+       @doxygen Doxygen.conf\r
+       @echo Documentation Generation Complete.\r
+\r
+clean_doxygen:\r
+       rm -rf Documentation\r
+\r
+# Create object files directory\r
+$(shell mkdir $(OBJDIR) 2>/dev/null)\r
+\r
+\r
+# Include the dependency files.\r
+-include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)\r
+\r
+\r
+# Listing of phony targets.\r
+.PHONY : all checkhooks checklibmode checkboard   \\r
+begin finish end sizebefore sizeafter gccversion  \\r
+build elf hex eep lss sym coff extcoff clean      \\r
+clean_list clean_binary program debug gdb-config  \\r
+doxygen dfu flip flip-ee dfu-ee
\ No newline at end of file
diff --git a/Demos/Device/LowLevel/USBtoSerial/Descriptors.c b/Demos/Device/LowLevel/USBtoSerial/Descriptors.c
new file mode 100644 (file)
index 0000000..c369d16
--- /dev/null
@@ -0,0 +1,263 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  USB Device Descriptors, for library use when in USB device mode. Descriptors are special \r
+ *  computer-readable structures which the host requests upon device enumeration, to determine\r
+ *  the device's capabilities and functions.  \r
+ */\r
+\r
+#include "Descriptors.h"\r
+\r
+/** Device descriptor structure. This descriptor, located in FLASH memory, describes the overall\r
+ *  device characteristics, including the supported USB version, control endpoint size and the\r
+ *  number of device configurations. The descriptor is read out by the USB host when the enumeration\r
+ *  process begins.\r
+ */\r
+USB_Descriptor_Device_t PROGMEM DeviceDescriptor =\r
+{\r
+       .Header                 = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device},\r
+               \r
+       .USBSpecification       = VERSION_BCD(01.10),\r
+       .Class                  = 0x02,\r
+       .SubClass               = 0x00,\r
+       .Protocol               = 0x00,\r
+                               \r
+       .Endpoint0Size          = FIXED_CONTROL_ENDPOINT_SIZE,\r
+               \r
+       .VendorID               = 0x03EB,\r
+       .ProductID              = 0x204B,\r
+       .ReleaseNumber          = 0x0000,\r
+               \r
+       .ManufacturerStrIndex   = 0x01,\r
+       .ProductStrIndex        = 0x02,\r
+       .SerialNumStrIndex      = NO_DESCRIPTOR,\r
+               \r
+       .NumberOfConfigurations = 1\r
+};\r
+\r
+/** Configuration descriptor structure. This descriptor, located in FLASH memory, describes the usage\r
+ *  of the device in one of its supported configurations, including information about any device interfaces\r
+ *  and endpoints. The descriptor is read out by the USB host during the enumeration process when selecting\r
+ *  a configuration so that the host may correctly communicate with the USB device.\r
+ */\r
+USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =\r
+{\r
+       .Config = \r
+               {\r
+                       .Header                 = {.Size = sizeof(USB_Descriptor_Configuration_Header_t), .Type = DTYPE_Configuration},\r
+\r
+                       .TotalConfigurationSize = sizeof(USB_Descriptor_Configuration_t),\r
+                       .TotalInterfaces        = 2,\r
+                               \r
+                       .ConfigurationNumber    = 1,\r
+                       .ConfigurationStrIndex  = NO_DESCRIPTOR,\r
+                               \r
+                       .ConfigAttributes       = (USB_CONFIG_ATTR_BUSPOWERED | USB_CONFIG_ATTR_SELFPOWERED),\r
+                       \r
+                       .MaxPowerConsumption    = USB_CONFIG_POWER_MA(100)\r
+               },\r
+               \r
+       .CCI_Interface = \r
+               {\r
+                       .Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},\r
+\r
+                       .InterfaceNumber        = 0,\r
+                       .AlternateSetting       = 0,\r
+                       \r
+                       .TotalEndpoints         = 1,\r
+                               \r
+                       .Class                  = 0x02,\r
+                       .SubClass               = 0x02,\r
+                       .Protocol               = 0x01,\r
+                               \r
+                       .InterfaceStrIndex      = NO_DESCRIPTOR\r
+               },\r
+\r
+       .CDC_Functional_IntHeader = \r
+               {\r
+                       .Header                 = {.Size = sizeof(CDC_FUNCTIONAL_DESCRIPTOR(2)), .Type = 0x24},\r
+                       .SubType                = 0x00,\r
+                       \r
+                       .Data                   = {0x01, 0x10}\r
+               },\r
+\r
+       .CDC_Functional_CallManagement = \r
+               {\r
+                       .Header                 = {.Size = sizeof(CDC_FUNCTIONAL_DESCRIPTOR(2)), .Type = 0x24},\r
+                       .SubType                = 0x01,\r
+                       \r
+                       .Data                   = {0x03, 0x01}\r
+               },\r
+\r
+       .CDC_Functional_AbstractControlManagement = \r
+               {\r
+                       .Header                 = {.Size = sizeof(CDC_FUNCTIONAL_DESCRIPTOR(1)), .Type = 0x24},\r
+                       .SubType                = 0x02,\r
+                       \r
+                       .Data                   = {0x06}\r
+               },\r
+               \r
+       .CDC_Functional_Union= \r
+               {\r
+                       .Header                 = {.Size = sizeof(CDC_FUNCTIONAL_DESCRIPTOR(2)), .Type = 0x24},\r
+                       .SubType                = 0x06,\r
+                       \r
+                       .Data                   = {0x00, 0x01}\r
+               },\r
+\r
+       .ManagementEndpoint = \r
+               {\r
+                       .Header                 = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},\r
+                                                                                \r
+                       .EndpointAddress        = (ENDPOINT_DESCRIPTOR_DIR_IN | CDC_NOTIFICATION_EPNUM),\r
+                       .Attributes             = EP_TYPE_INTERRUPT,\r
+                       .EndpointSize           = CDC_NOTIFICATION_EPSIZE,\r
+                       .PollingIntervalMS      = 0xFF\r
+               },\r
+\r
+       .DCI_Interface = \r
+               {\r
+                       .Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},\r
+\r
+                       .InterfaceNumber        = 1,\r
+                       .AlternateSetting       = 0,\r
+                       \r
+                       .TotalEndpoints         = 2,\r
+                               \r
+                       .Class                  = 0x0A,\r
+                       .SubClass               = 0x00,\r
+                       .Protocol               = 0x00,\r
+                               \r
+                       .InterfaceStrIndex      = NO_DESCRIPTOR\r
+               },\r
+\r
+       .DataOutEndpoint = \r
+               {\r
+                       .Header                 = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},\r
+                                                                                \r
+                       .EndpointAddress        = (ENDPOINT_DESCRIPTOR_DIR_OUT | CDC_RX_EPNUM),\r
+                       .Attributes             = EP_TYPE_BULK,\r
+                       .EndpointSize           = CDC_TXRX_EPSIZE,\r
+                       .PollingIntervalMS      = 0x00\r
+               },\r
+               \r
+       .DataInEndpoint = \r
+               {\r
+                       .Header                 = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},\r
+                                                                                \r
+                       .EndpointAddress        = (ENDPOINT_DESCRIPTOR_DIR_IN | CDC_TX_EPNUM),\r
+                       .Attributes       =             EP_TYPE_BULK,\r
+                       .EndpointSize           = CDC_TXRX_EPSIZE,\r
+                       .PollingIntervalMS=             0x00\r
+               }\r
+};\r
+\r
+/** Language descriptor structure. This descriptor, located in FLASH memory, is returned when the host requests\r
+ *  the string descriptor with index 0 (the first index). It is actually an array of 16-bit integers, which indicate\r
+ *  via the language ID table available at USB.org what languages the device supports for its string descriptors.\r
+ */\r
+USB_Descriptor_String_t PROGMEM LanguageString =\r
+{\r
+       .Header                 = {.Size = USB_STRING_LEN(1), .Type = DTYPE_String},\r
+               \r
+       .UnicodeString          = {LANGUAGE_ID_ENG}\r
+};\r
+\r
+/** Manufacturer descriptor string. This is a Unicode string containing the manufacturer's details in human readable\r
+ *  form, and is read out upon request by the host when the appropriate string ID is requested, listed in the Device\r
+ *  Descriptor.\r
+ */\r
+USB_Descriptor_String_t PROGMEM ManufacturerString =\r
+{\r
+       .Header                 = {.Size = USB_STRING_LEN(11), .Type = DTYPE_String},\r
+               \r
+       .UnicodeString          = L"Dean Camera"\r
+};\r
+\r
+/** Product descriptor string. This is a Unicode string containing the product's details in human readable form,\r
+ *  and is read out upon request by the host when the appropriate string ID is requested, listed in the Device\r
+ *  Descriptor.\r
+ */\r
+USB_Descriptor_String_t PROGMEM ProductString =\r
+{\r
+       .Header                 = {.Size = USB_STRING_LEN(19), .Type = DTYPE_String},\r
+               \r
+       .UnicodeString          = L"LUFA USB-RS232 Demo"\r
+};\r
+\r
+/** This function is called by the library when in device mode, and must be overridden (see library "USB Descriptors"\r
+ *  documentation) by the application code so that the address and size of a requested descriptor can be given\r
+ *  to the USB library. When the device receives a Get Descriptor request on the control endpoint, this function\r
+ *  is called so that the descriptor details can be passed back and the appropriate descriptor sent back to the\r
+ *  USB host.\r
+ */\r
+uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
+{\r
+       const uint8_t  DescriptorType   = (wValue >> 8);\r
+       const uint8_t  DescriptorNumber = (wValue & 0xFF);\r
+\r
+       void*    Address = NULL;\r
+       uint16_t Size    = NO_DESCRIPTOR;\r
+\r
+       switch (DescriptorType)\r
+       {\r
+               case DTYPE_Device: \r
+                       Address = (void*)&DeviceDescriptor;\r
+                       Size    = sizeof(USB_Descriptor_Device_t);\r
+                       break;\r
+               case DTYPE_Configuration: \r
+                       Address = (void*)&ConfigurationDescriptor;\r
+                       Size    = sizeof(USB_Descriptor_Configuration_t);\r
+                       break;\r
+               case DTYPE_String: \r
+                       switch (DescriptorNumber)\r
+                       {\r
+                               case 0x00: \r
+                                       Address = (void*)&LanguageString;\r
+                                       Size    = pgm_read_byte(&LanguageString.Header.Size);\r
+                                       break;\r
+                               case 0x01: \r
+                                       Address = (void*)&ManufacturerString;\r
+                                       Size    = pgm_read_byte(&ManufacturerString.Header.Size);\r
+                                       break;\r
+                               case 0x02: \r
+                                       Address = (void*)&ProductString;\r
+                                       Size    = pgm_read_byte(&ProductString.Header.Size);\r
+                                       break;\r
+                       }\r
+                       \r
+                       break;\r
+       }\r
+       \r
+       *DescriptorAddress = Address;\r
+       return Size;\r
+}\r
diff --git a/Demos/Device/LowLevel/USBtoSerial/Descriptors.h b/Demos/Device/LowLevel/USBtoSerial/Descriptors.h
new file mode 100644 (file)
index 0000000..41b4430
--- /dev/null
@@ -0,0 +1,98 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  Header file for Descriptors.c.\r
+ */\r
\r
+#ifndef _DESCRIPTORS_H_\r
+#define _DESCRIPTORS_H_\r
+\r
+       /* Includes: */\r
+               #include <LUFA/Drivers/USB/USB.h>\r
+\r
+               #include <avr/pgmspace.h>\r
+\r
+       /* Macros: */\r
+               /** Macro to define a CDC class-specific functional descriptor. CDC functional descriptors have a\r
+                *  uniform structure but variable sized data payloads, thus cannot be represented accurately by\r
+                *  a single typedef struct. A macro is used instead so that functional descriptors can be created\r
+                *  easily by specifying the size of the payload. This allows sizeof() to work correctly.\r
+                *\r
+                *  \param DataSize  Size in bytes of the CDC functional descriptor's data payload\r
+                */\r
+               #define CDC_FUNCTIONAL_DESCRIPTOR(DataSize)        \\r
+                    struct                                        \\r
+                    {                                             \\r
+                         USB_Descriptor_Header_t Header;          \\r
+                             uint8_t                 SubType;         \\r
+                         uint8_t                 Data[DataSize];  \\r
+                    }\r
+                        \r
+               /** Endpoint number of the CDC device-to-host notification IN endpoint. */\r
+               #define CDC_NOTIFICATION_EPNUM         2\r
+\r
+               /** Endpoint number of the CDC device-to-host data IN endpoint. */\r
+               #define CDC_TX_EPNUM                   3        \r
+\r
+               /** Endpoint number of the CDC host-to-device data OUT endpoint. */\r
+               #define CDC_RX_EPNUM                   4        \r
+\r
+               /** Size in bytes of the CDC device-to-host notification IN endpoint. */\r
+               #define CDC_NOTIFICATION_EPSIZE        8\r
+\r
+               /** Size in bytes of the CDC data IN and OUT endpoints. */\r
+               #define CDC_TXRX_EPSIZE                16       \r
+\r
+       /* Type Defines: */\r
+               /** Type define for the device configuration descriptor structure. This must be defined in the\r
+                *  application code, as the configuration descriptor contains several sub-descriptors which\r
+                *  vary between devices, and which describe the device's usage to the host.\r
+                */\r
+               typedef struct\r
+               {\r
+                       USB_Descriptor_Configuration_Header_t    Config;\r
+                       USB_Descriptor_Interface_t               CCI_Interface;\r
+                       CDC_FUNCTIONAL_DESCRIPTOR(2)             CDC_Functional_IntHeader;\r
+                       CDC_FUNCTIONAL_DESCRIPTOR(2)             CDC_Functional_CallManagement;\r
+                       CDC_FUNCTIONAL_DESCRIPTOR(1)             CDC_Functional_AbstractControlManagement;\r
+                       CDC_FUNCTIONAL_DESCRIPTOR(2)             CDC_Functional_Union;\r
+                       USB_Descriptor_Endpoint_t                ManagementEndpoint;\r
+                       USB_Descriptor_Interface_t               DCI_Interface;\r
+                       USB_Descriptor_Endpoint_t                DataOutEndpoint;\r
+                       USB_Descriptor_Endpoint_t                DataInEndpoint;\r
+               } USB_Descriptor_Configuration_t;\r
+\r
+       /* Function Prototypes: */\r
+               uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
+                                                                                       ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);\r
+\r
+#endif\r
diff --git a/Demos/Device/LowLevel/USBtoSerial/Doxygen.conf b/Demos/Device/LowLevel/USBtoSerial/Doxygen.conf
new file mode 100644 (file)
index 0000000..1eb8c54
--- /dev/null
@@ -0,0 +1,1485 @@
+# Doxyfile 1.5.7.1\r
+\r
+# This file describes the settings to be used by the documentation system\r
+# doxygen (www.doxygen.org) for a project\r
+#\r
+# All text after a hash (#) is considered a comment and will be ignored\r
+# The format is:\r
+#       TAG = value [value, ...]\r
+# For lists items can also be appended using:\r
+#       TAG += value [value, ...]\r
+# Values that contain spaces should be placed between quotes (" ")\r
+\r
+#---------------------------------------------------------------------------\r
+# Project related configuration options\r
+#---------------------------------------------------------------------------\r
+\r
+# This tag specifies the encoding used for all characters in the config file \r
+# that follow. The default is UTF-8 which is also the encoding used for all \r
+# text before the first occurrence of this tag. Doxygen uses libiconv (or the \r
+# iconv built into libc) for the transcoding. See \r
+# http://www.gnu.org/software/libiconv for the list of possible encodings.\r
+\r
+DOXYFILE_ENCODING      = UTF-8\r
+\r
+# The PROJECT_NAME tag is a single word (or a sequence of words surrounded \r
+# by quotes) that should identify the project.\r
+\r
+PROJECT_NAME           = "LUFA Library - USB to Serial Device Demo"\r
+\r
+# The PROJECT_NUMBER tag can be used to enter a project or revision number. \r
+# This could be handy for archiving the generated documentation or \r
+# if some version control system is used.\r
+\r
+PROJECT_NUMBER         = 0.0.0\r
+\r
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) \r
+# base path where the generated documentation will be put. \r
+# If a relative path is entered, it will be relative to the location \r
+# where doxygen was started. If left blank the current directory will be used.\r
+\r
+OUTPUT_DIRECTORY       = ./Documentation/\r
+\r
+# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create \r
+# 4096 sub-directories (in 2 levels) under the output directory of each output \r
+# format and will distribute the generated files over these directories. \r
+# Enabling this option can be useful when feeding doxygen a huge amount of \r
+# source files, where putting all generated files in the same directory would \r
+# otherwise cause performance problems for the file system.\r
+\r
+CREATE_SUBDIRS         = YES\r
+\r
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all \r
+# documentation generated by doxygen is written. Doxygen will use this \r
+# information to generate all constant output in the proper language. \r
+# The default language is English, other supported languages are: \r
+# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, \r
+# Croatian, Czech, Danish, Dutch, Farsi, Finnish, French, German, Greek, \r
+# Hungarian, Italian, Japanese, Japanese-en (Japanese with English messages), \r
+# Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, Polish, \r
+# Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, Slovene, \r
+# Spanish, Swedish, and Ukrainian.\r
+\r
+OUTPUT_LANGUAGE        = English\r
+\r
+# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will \r
+# include brief member descriptions after the members that are listed in \r
+# the file and class documentation (similar to JavaDoc). \r
+# Set to NO to disable this.\r
+\r
+BRIEF_MEMBER_DESC      = YES\r
+\r
+# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend \r
+# the brief description of a member or function before the detailed description. \r
+# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the \r
+# brief descriptions will be completely suppressed.\r
+\r
+REPEAT_BRIEF           = YES\r
+\r
+# This tag implements a quasi-intelligent brief description abbreviator \r
+# that is used to form the text in various listings. Each string \r
+# in this list, if found as the leading text of the brief description, will be \r
+# stripped from the text and the result after processing the whole list, is \r
+# used as the annotated text. Otherwise, the brief description is used as-is. \r
+# If left blank, the following values are used ("$name" is automatically \r
+# replaced with the name of the entity): "The $name class" "The $name widget" \r
+# "The $name file" "is" "provides" "specifies" "contains" \r
+# "represents" "a" "an" "the"\r
+\r
+ABBREVIATE_BRIEF       = "The $name class" \\r
+                         "The $name widget" \\r
+                         "The $name file" \\r
+                         is \\r
+                         provides \\r
+                         specifies \\r
+                         contains \\r
+                         represents \\r
+                         a \\r
+                         an \\r
+                         the\r
+\r
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then \r
+# Doxygen will generate a detailed section even if there is only a brief \r
+# description.\r
+\r
+ALWAYS_DETAILED_SEC    = NO\r
+\r
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all \r
+# inherited members of a class in the documentation of that class as if those \r
+# members were ordinary class members. Constructors, destructors and assignment \r
+# operators of the base classes will not be shown.\r
+\r
+INLINE_INHERITED_MEMB  = NO\r
+\r
+# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full \r
+# path before files name in the file list and in the header files. If set \r
+# to NO the shortest path that makes the file name unique will be used.\r
+\r
+FULL_PATH_NAMES        = YES\r
+\r
+# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag \r
+# can be used to strip a user-defined part of the path. Stripping is \r
+# only done if one of the specified strings matches the left-hand part of \r
+# the path. The tag can be used to show relative paths in the file list. \r
+# If left blank the directory from which doxygen is run is used as the \r
+# path to strip.\r
+\r
+STRIP_FROM_PATH        = \r
+\r
+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of \r
+# the path mentioned in the documentation of a class, which tells \r
+# the reader which header file to include in order to use a class. \r
+# If left blank only the name of the header file containing the class \r
+# definition is used. Otherwise one should specify the include paths that \r
+# are normally passed to the compiler using the -I flag.\r
+\r
+STRIP_FROM_INC_PATH    = \r
+\r
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter \r
+# (but less readable) file names. This can be useful is your file systems \r
+# doesn't support long names like on DOS, Mac, or CD-ROM.\r
+\r
+SHORT_NAMES            = YES\r
+\r
+# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen \r
+# will interpret the first line (until the first dot) of a JavaDoc-style \r
+# comment as the brief description. If set to NO, the JavaDoc \r
+# comments will behave just like regular Qt-style comments \r
+# (thus requiring an explicit @brief command for a brief description.)\r
+\r
+JAVADOC_AUTOBRIEF      = NO\r
+\r
+# If the QT_AUTOBRIEF tag is set to YES then Doxygen will \r
+# interpret the first line (until the first dot) of a Qt-style \r
+# comment as the brief description. If set to NO, the comments \r
+# will behave just like regular Qt-style comments (thus requiring \r
+# an explicit \brief command for a brief description.)\r
+\r
+QT_AUTOBRIEF           = NO\r
+\r
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen \r
+# treat a multi-line C++ special comment block (i.e. a block of //! or /// \r
+# comments) as a brief description. This used to be the default behaviour. \r
+# The new default is to treat a multi-line C++ comment block as a detailed \r
+# description. Set this tag to YES if you prefer the old behaviour instead.\r
+\r
+MULTILINE_CPP_IS_BRIEF = NO\r
+\r
+# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented \r
+# member inherits the documentation from any documented member that it \r
+# re-implements.\r
+\r
+INHERIT_DOCS           = YES\r
+\r
+# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce \r
+# a new page for each member. If set to NO, the documentation of a member will \r
+# be part of the file/class/namespace that contains it.\r
+\r
+SEPARATE_MEMBER_PAGES  = NO\r
+\r
+# The TAB_SIZE tag can be used to set the number of spaces in a tab. \r
+# Doxygen uses this value to replace tabs by spaces in code fragments.\r
+\r
+TAB_SIZE               = 4\r
+\r
+# This tag can be used to specify a number of aliases that acts \r
+# as commands in the documentation. An alias has the form "name=value". \r
+# For example adding "sideeffect=\par Side Effects:\n" will allow you to \r
+# put the command \sideeffect (or @sideeffect) in the documentation, which \r
+# will result in a user-defined paragraph with heading "Side Effects:". \r
+# You can put \n's in the value part of an alias to insert newlines.\r
+\r
+ALIASES                = \r
+\r
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C \r
+# sources only. Doxygen will then generate output that is more tailored for C. \r
+# For instance, some of the names that are used will be different. The list \r
+# of all members will be omitted, etc.\r
+\r
+OPTIMIZE_OUTPUT_FOR_C  = YES\r
+\r
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java \r
+# sources only. Doxygen will then generate output that is more tailored for \r
+# Java. For instance, namespaces will be presented as packages, qualified \r
+# scopes will look different, etc.\r
+\r
+OPTIMIZE_OUTPUT_JAVA   = NO\r
+\r
+# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran \r
+# sources only. Doxygen will then generate output that is more tailored for \r
+# Fortran.\r
+\r
+OPTIMIZE_FOR_FORTRAN   = NO\r
+\r
+# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL \r
+# sources. Doxygen will then generate output that is tailored for \r
+# VHDL.\r
+\r
+OPTIMIZE_OUTPUT_VHDL   = NO\r
+\r
+# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want \r
+# to include (a tag file for) the STL sources as input, then you should \r
+# set this tag to YES in order to let doxygen match functions declarations and \r
+# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. \r
+# func(std::string) {}). This also make the inheritance and collaboration \r
+# diagrams that involve STL classes more complete and accurate.\r
+\r
+BUILTIN_STL_SUPPORT    = NO\r
+\r
+# If you use Microsoft's C++/CLI language, you should set this option to YES to\r
+# enable parsing support.\r
+\r
+CPP_CLI_SUPPORT        = NO\r
+\r
+# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. \r
+# Doxygen will parse them like normal C++ but will assume all classes use public \r
+# instead of private inheritance when no explicit protection keyword is present.\r
+\r
+SIP_SUPPORT            = NO\r
+\r
+# For Microsoft's IDL there are propget and propput attributes to indicate getter \r
+# and setter methods for a property. Setting this option to YES (the default) \r
+# will make doxygen to replace the get and set methods by a property in the \r
+# documentation. This will only work if the methods are indeed getting or \r
+# setting a simple type. If this is not the case, or you want to show the \r
+# methods anyway, you should set this option to NO.\r
+\r
+IDL_PROPERTY_SUPPORT   = YES\r
+\r
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC \r
+# tag is set to YES, then doxygen will reuse the documentation of the first \r
+# member in the group (if any) for the other members of the group. By default \r
+# all members of a group must be documented explicitly.\r
+\r
+DISTRIBUTE_GROUP_DOC   = NO\r
+\r
+# Set the SUBGROUPING tag to YES (the default) to allow class member groups of \r
+# the same type (for instance a group of public functions) to be put as a \r
+# subgroup of that type (e.g. under the Public Functions section). Set it to \r
+# NO to prevent subgrouping. Alternatively, this can be done per class using \r
+# the \nosubgrouping command.\r
+\r
+SUBGROUPING            = YES\r
+\r
+# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum \r
+# is documented as struct, union, or enum with the name of the typedef. So \r
+# typedef struct TypeS {} TypeT, will appear in the documentation as a struct \r
+# with name TypeT. When disabled the typedef will appear as a member of a file, \r
+# namespace, or class. And the struct will be named TypeS. This can typically \r
+# be useful for C code in case the coding convention dictates that all compound \r
+# types are typedef'ed and only the typedef is referenced, never the tag name.\r
+\r
+TYPEDEF_HIDES_STRUCT   = NO\r
+\r
+# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to \r
+# determine which symbols to keep in memory and which to flush to disk.\r
+# When the cache is full, less often used symbols will be written to disk.\r
+# For small to medium size projects (<1000 input files) the default value is \r
+# probably good enough. For larger projects a too small cache size can cause \r
+# doxygen to be busy swapping symbols to and from disk most of the time \r
+# causing a significant performance penality. \r
+# If the system has enough physical memory increasing the cache will improve the \r
+# performance by keeping more symbols in memory. Note that the value works on \r
+# a logarithmic scale so increasing the size by one will rougly double the \r
+# memory usage. The cache size is given by this formula: \r
+# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, \r
+# corresponding to a cache size of 2^16 = 65536 symbols\r
+\r
+SYMBOL_CACHE_SIZE      = 0\r
+\r
+#---------------------------------------------------------------------------\r
+# Build related configuration options\r
+#---------------------------------------------------------------------------\r
+\r
+# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in \r
+# documentation are documented, even if no documentation was available. \r
+# Private class members and static file members will be hidden unless \r
+# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES\r
+\r
+EXTRACT_ALL            = YES\r
+\r
+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class \r
+# will be included in the documentation.\r
+\r
+EXTRACT_PRIVATE        = YES\r
+\r
+# If the EXTRACT_STATIC tag is set to YES all static members of a file \r
+# will be included in the documentation.\r
+\r
+EXTRACT_STATIC         = YES\r
+\r
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) \r
+# defined locally in source files will be included in the documentation. \r
+# If set to NO only classes defined in header files are included.\r
+\r
+EXTRACT_LOCAL_CLASSES  = YES\r
+\r
+# This flag is only useful for Objective-C code. When set to YES local \r
+# methods, which are defined in the implementation section but not in \r
+# the interface are included in the documentation. \r
+# If set to NO (the default) only methods in the interface are included.\r
+\r
+EXTRACT_LOCAL_METHODS  = NO\r
+\r
+# If this flag is set to YES, the members of anonymous namespaces will be \r
+# extracted and appear in the documentation as a namespace called \r
+# 'anonymous_namespace{file}', where file will be replaced with the base \r
+# name of the file that contains the anonymous namespace. By default \r
+# anonymous namespace are hidden.\r
+\r
+EXTRACT_ANON_NSPACES   = NO\r
+\r
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all \r
+# undocumented members of documented classes, files or namespaces. \r
+# If set to NO (the default) these members will be included in the \r
+# various overviews, but no documentation section is generated. \r
+# This option has no effect if EXTRACT_ALL is enabled.\r
+\r
+HIDE_UNDOC_MEMBERS     = NO\r
+\r
+# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all \r
+# undocumented classes that are normally visible in the class hierarchy. \r
+# If set to NO (the default) these classes will be included in the various \r
+# overviews. This option has no effect if EXTRACT_ALL is enabled.\r
+\r
+HIDE_UNDOC_CLASSES     = NO\r
+\r
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all \r
+# friend (class|struct|union) declarations. \r
+# If set to NO (the default) these declarations will be included in the \r
+# documentation.\r
+\r
+HIDE_FRIEND_COMPOUNDS  = NO\r
+\r
+# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any \r
+# documentation blocks found inside the body of a function. \r
+# If set to NO (the default) these blocks will be appended to the \r
+# function's detailed documentation block.\r
+\r
+HIDE_IN_BODY_DOCS      = NO\r
+\r
+# The INTERNAL_DOCS tag determines if documentation \r
+# that is typed after a \internal command is included. If the tag is set \r
+# to NO (the default) then the documentation will be excluded. \r
+# Set it to YES to include the internal documentation.\r
+\r
+INTERNAL_DOCS          = NO\r
+\r
+# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate \r
+# file names in lower-case letters. If set to YES upper-case letters are also \r
+# allowed. This is useful if you have classes or files whose names only differ \r
+# in case and if your file system supports case sensitive file names. Windows \r
+# and Mac users are advised to set this option to NO.\r
+\r
+CASE_SENSE_NAMES       = NO\r
+\r
+# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen \r
+# will show members with their full class and namespace scopes in the \r
+# documentation. If set to YES the scope will be hidden.\r
+\r
+HIDE_SCOPE_NAMES       = NO\r
+\r
+# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen \r
+# will put a list of the files that are included by a file in the documentation \r
+# of that file.\r
+\r
+SHOW_INCLUDE_FILES     = YES\r
+\r
+# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] \r
+# is inserted in the documentation for inline members.\r
+\r
+INLINE_INFO            = YES\r
+\r
+# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen \r
+# will sort the (detailed) documentation of file and class members \r
+# alphabetically by member name. If set to NO the members will appear in \r
+# declaration order.\r
+\r
+SORT_MEMBER_DOCS       = YES\r
+\r
+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the \r
+# brief documentation of file, namespace and class members alphabetically \r
+# by member name. If set to NO (the default) the members will appear in \r
+# declaration order.\r
+\r
+SORT_BRIEF_DOCS        = NO\r
+\r
+# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the \r
+# hierarchy of group names into alphabetical order. If set to NO (the default) \r
+# the group names will appear in their defined order.\r
+\r
+SORT_GROUP_NAMES       = NO\r
+\r
+# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be \r
+# sorted by fully-qualified names, including namespaces. If set to \r
+# NO (the default), the class list will be sorted only by class name, \r
+# not including the namespace part. \r
+# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.\r
+# Note: This option applies only to the class list, not to the \r
+# alphabetical list.\r
+\r
+SORT_BY_SCOPE_NAME     = NO\r
+\r
+# The GENERATE_TODOLIST tag can be used to enable (YES) or \r
+# disable (NO) the todo list. This list is created by putting \todo \r
+# commands in the documentation.\r
+\r
+GENERATE_TODOLIST      = NO\r
+\r
+# The GENERATE_TESTLIST tag can be used to enable (YES) or \r
+# disable (NO) the test list. This list is created by putting \test \r
+# commands in the documentation.\r
+\r
+GENERATE_TESTLIST      = NO\r
+\r
+# The GENERATE_BUGLIST tag can be used to enable (YES) or \r
+# disable (NO) the bug list. This list is created by putting \bug \r
+# commands in the documentation.\r
+\r
+GENERATE_BUGLIST       = NO\r
+\r
+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or \r
+# disable (NO) the deprecated list. This list is created by putting \r
+# \deprecated commands in the documentation.\r
+\r
+GENERATE_DEPRECATEDLIST= YES\r
+\r
+# The ENABLED_SECTIONS tag can be used to enable conditional \r
+# documentation sections, marked by \if sectionname ... \endif.\r
+\r
+ENABLED_SECTIONS       = \r
+\r
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines \r
+# the initial value of a variable or define consists of for it to appear in \r
+# the documentation. If the initializer consists of more lines than specified \r
+# here it will be hidden. Use a value of 0 to hide initializers completely. \r
+# The appearance of the initializer of individual variables and defines in the \r
+# documentation can be controlled using \showinitializer or \hideinitializer \r
+# command in the documentation regardless of this setting.\r
+\r
+MAX_INITIALIZER_LINES  = 30\r
+\r
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated \r
+# at the bottom of the documentation of classes and structs. If set to YES the \r
+# list will mention the files that were used to generate the documentation.\r
+\r
+SHOW_USED_FILES        = YES\r
+\r
+# If the sources in your project are distributed over multiple directories \r
+# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy \r
+# in the documentation. The default is NO.\r
+\r
+SHOW_DIRECTORIES       = YES\r
+\r
+# Set the SHOW_FILES tag to NO to disable the generation of the Files page.\r
+# This will remove the Files entry from the Quick Index and from the \r
+# Folder Tree View (if specified). The default is YES.\r
+\r
+SHOW_FILES             = YES\r
+\r
+# Set the SHOW_NAMESPACES tag to NO to disable the generation of the \r
+# Namespaces page.  This will remove the Namespaces entry from the Quick Index\r
+# and from the Folder Tree View (if specified). The default is YES.\r
+\r
+SHOW_NAMESPACES        = YES\r
+\r
+# The FILE_VERSION_FILTER tag can be used to specify a program or script that \r
+# doxygen should invoke to get the current version for each file (typically from \r
+# the version control system). Doxygen will invoke the program by executing (via \r
+# popen()) the command <command> <input-file>, where <command> is the value of \r
+# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file \r
+# provided by doxygen. Whatever the program writes to standard output \r
+# is used as the file version. See the manual for examples.\r
+\r
+FILE_VERSION_FILTER    = \r
+\r
+# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by \r
+# doxygen. The layout file controls the global structure of the generated output files \r
+# in an output format independent way. The create the layout file that represents \r
+# doxygen's defaults, run doxygen with the -l option. You can optionally specify a \r
+# file name after the option, if omitted DoxygenLayout.xml will be used as the name \r
+# of the layout file.\r
+\r
+LAYOUT_FILE            = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to warning and progress messages\r
+#---------------------------------------------------------------------------\r
+\r
+# The QUIET tag can be used to turn on/off the messages that are generated \r
+# by doxygen. Possible values are YES and NO. If left blank NO is used.\r
+\r
+QUIET                  = YES\r
+\r
+# The WARNINGS tag can be used to turn on/off the warning messages that are \r
+# generated by doxygen. Possible values are YES and NO. If left blank \r
+# NO is used.\r
+\r
+WARNINGS               = YES\r
+\r
+# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings \r
+# for undocumented members. If EXTRACT_ALL is set to YES then this flag will \r
+# automatically be disabled.\r
+\r
+WARN_IF_UNDOCUMENTED   = YES\r
+\r
+# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for \r
+# potential errors in the documentation, such as not documenting some \r
+# parameters in a documented function, or documenting parameters that \r
+# don't exist or using markup commands wrongly.\r
+\r
+WARN_IF_DOC_ERROR      = YES\r
+\r
+# This WARN_NO_PARAMDOC option can be abled to get warnings for \r
+# functions that are documented, but have no documentation for their parameters \r
+# or return value. If set to NO (the default) doxygen will only warn about \r
+# wrong or incomplete parameter documentation, but not about the absence of \r
+# documentation.\r
+\r
+WARN_NO_PARAMDOC       = YES\r
+\r
+# The WARN_FORMAT tag determines the format of the warning messages that \r
+# doxygen can produce. The string should contain the $file, $line, and $text \r
+# tags, which will be replaced by the file and line number from which the \r
+# warning originated and the warning text. Optionally the format may contain \r
+# $version, which will be replaced by the version of the file (if it could \r
+# be obtained via FILE_VERSION_FILTER)\r
+\r
+WARN_FORMAT            = "$file:$line: $text"\r
+\r
+# The WARN_LOGFILE tag can be used to specify a file to which warning \r
+# and error messages should be written. If left blank the output is written \r
+# to stderr.\r
+\r
+WARN_LOGFILE           = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the input files\r
+#---------------------------------------------------------------------------\r
+\r
+# The INPUT tag can be used to specify the files and/or directories that contain \r
+# documented source files. You may enter file names like "myfile.cpp" or \r
+# directories like "/usr/src/myproject". Separate the files or directories \r
+# with spaces.\r
+\r
+INPUT                  = ./\r
+\r
+# This tag can be used to specify the character encoding of the source files \r
+# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is \r
+# also the default input encoding. Doxygen uses libiconv (or the iconv built \r
+# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for \r
+# the list of possible encodings.\r
+\r
+INPUT_ENCODING         = UTF-8\r
+\r
+# If the value of the INPUT tag contains directories, you can use the \r
+# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \r
+# and *.h) to filter out the source-files in the directories. If left \r
+# blank the following patterns are tested: \r
+# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx \r
+# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90\r
+\r
+FILE_PATTERNS          = *.h \\r
+                         *.c \\r
+                                                *.txt\r
+\r
+# The RECURSIVE tag can be used to turn specify whether or not subdirectories \r
+# should be searched for input files as well. Possible values are YES and NO. \r
+# If left blank NO is used.\r
+\r
+RECURSIVE              = YES\r
+\r
+# The EXCLUDE tag can be used to specify files and/or directories that should \r
+# excluded from the INPUT source files. This way you can easily exclude a \r
+# subdirectory from a directory tree whose root is specified with the INPUT tag.\r
+\r
+EXCLUDE                = \r
+\r
+# The EXCLUDE_SYMLINKS tag can be used select whether or not files or \r
+# directories that are symbolic links (a Unix filesystem feature) are excluded \r
+# from the input.\r
+\r
+EXCLUDE_SYMLINKS       = NO\r
+\r
+# If the value of the INPUT tag contains directories, you can use the \r
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude \r
+# certain files from those directories. Note that the wildcards are matched \r
+# against the file with absolute path, so to exclude all test directories \r
+# for example use the pattern */test/*\r
+\r
+EXCLUDE_PATTERNS       = */LowLevel/USBMode.h\r
+\r
+# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names \r
+# (namespaces, classes, functions, etc.) that should be excluded from the \r
+# output. The symbol name can be a fully qualified name, a word, or if the \r
+# wildcard * is used, a substring. Examples: ANamespace, AClass, \r
+# AClass::ANamespace, ANamespace::*Test\r
+\r
+EXCLUDE_SYMBOLS        = __*\r
+\r
+# The EXAMPLE_PATH tag can be used to specify one or more files or \r
+# directories that contain example code fragments that are included (see \r
+# the \include command).\r
+\r
+EXAMPLE_PATH           = \r
+\r
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the \r
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \r
+# and *.h) to filter out the source-files in the directories. If left \r
+# blank all files are included.\r
+\r
+EXAMPLE_PATTERNS       = *\r
+\r
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be \r
+# searched for input files to be used with the \include or \dontinclude \r
+# commands irrespective of the value of the RECURSIVE tag. \r
+# Possible values are YES and NO. If left blank NO is used.\r
+\r
+EXAMPLE_RECURSIVE      = NO\r
+\r
+# The IMAGE_PATH tag can be used to specify one or more files or \r
+# directories that contain image that are included in the documentation (see \r
+# the \image command).\r
+\r
+IMAGE_PATH             = \r
+\r
+# The INPUT_FILTER tag can be used to specify a program that doxygen should \r
+# invoke to filter for each input file. Doxygen will invoke the filter program \r
+# by executing (via popen()) the command <filter> <input-file>, where <filter> \r
+# is the value of the INPUT_FILTER tag, and <input-file> is the name of an \r
+# input file. Doxygen will then use the output that the filter program writes \r
+# to standard output.  If FILTER_PATTERNS is specified, this tag will be \r
+# ignored.\r
+\r
+INPUT_FILTER           = \r
+\r
+# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern \r
+# basis.  Doxygen will compare the file name with each pattern and apply the \r
+# filter if there is a match.  The filters are a list of the form: \r
+# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further \r
+# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER \r
+# is applied to all files.\r
+\r
+FILTER_PATTERNS        = \r
+\r
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using \r
+# INPUT_FILTER) will be used to filter the input files when producing source \r
+# files to browse (i.e. when SOURCE_BROWSER is set to YES).\r
+\r
+FILTER_SOURCE_FILES    = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to source browsing\r
+#---------------------------------------------------------------------------\r
+\r
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will \r
+# be generated. Documented entities will be cross-referenced with these sources. \r
+# Note: To get rid of all source code in the generated output, make sure also \r
+# VERBATIM_HEADERS is set to NO.\r
+\r
+SOURCE_BROWSER         = NO\r
+\r
+# Setting the INLINE_SOURCES tag to YES will include the body \r
+# of functions and classes directly in the documentation.\r
+\r
+INLINE_SOURCES         = NO\r
+\r
+# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct \r
+# doxygen to hide any special comment blocks from generated source code \r
+# fragments. Normal C and C++ comments will always remain visible.\r
+\r
+STRIP_CODE_COMMENTS    = YES\r
+\r
+# If the REFERENCED_BY_RELATION tag is set to YES \r
+# then for each documented function all documented \r
+# functions referencing it will be listed.\r
+\r
+REFERENCED_BY_RELATION = NO\r
+\r
+# If the REFERENCES_RELATION tag is set to YES \r
+# then for each documented function all documented entities \r
+# called/used by that function will be listed.\r
+\r
+REFERENCES_RELATION    = NO\r
+\r
+# If the REFERENCES_LINK_SOURCE tag is set to YES (the default)\r
+# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from\r
+# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will\r
+# link to the source code.  Otherwise they will link to the documentstion.\r
+\r
+REFERENCES_LINK_SOURCE = NO\r
+\r
+# If the USE_HTAGS tag is set to YES then the references to source code \r
+# will point to the HTML generated by the htags(1) tool instead of doxygen \r
+# built-in source browser. The htags tool is part of GNU's global source \r
+# tagging system (see http://www.gnu.org/software/global/global.html). You \r
+# will need version 4.8.6 or higher.\r
+\r
+USE_HTAGS              = NO\r
+\r
+# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen \r
+# will generate a verbatim copy of the header file for each class for \r
+# which an include is specified. Set to NO to disable this.\r
+\r
+VERBATIM_HEADERS       = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the alphabetical class index\r
+#---------------------------------------------------------------------------\r
+\r
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index \r
+# of all compounds will be generated. Enable this if the project \r
+# contains a lot of classes, structs, unions or interfaces.\r
+\r
+ALPHABETICAL_INDEX     = YES\r
+\r
+# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then \r
+# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns \r
+# in which this list will be split (can be a number in the range [1..20])\r
+\r
+COLS_IN_ALPHA_INDEX    = 5\r
+\r
+# In case all classes in a project start with a common prefix, all \r
+# classes will be put under the same header in the alphabetical index. \r
+# The IGNORE_PREFIX tag can be used to specify one or more prefixes that \r
+# should be ignored while generating the index headers.\r
+\r
+IGNORE_PREFIX          = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the HTML output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_HTML tag is set to YES (the default) Doxygen will \r
+# generate HTML output.\r
+\r
+GENERATE_HTML          = YES\r
+\r
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `html' will be used as the default path.\r
+\r
+HTML_OUTPUT            = html\r
+\r
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for \r
+# each generated HTML page (for example: .htm,.php,.asp). If it is left blank \r
+# doxygen will generate files with .html extension.\r
+\r
+HTML_FILE_EXTENSION    = .html\r
+\r
+# The HTML_HEADER tag can be used to specify a personal HTML header for \r
+# each generated HTML page. If it is left blank doxygen will generate a \r
+# standard header.\r
+\r
+HTML_HEADER            = \r
+\r
+# The HTML_FOOTER tag can be used to specify a personal HTML footer for \r
+# each generated HTML page. If it is left blank doxygen will generate a \r
+# standard footer.\r
+\r
+HTML_FOOTER            = \r
+\r
+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading \r
+# style sheet that is used by each HTML page. It can be used to \r
+# fine-tune the look of the HTML output. If the tag is left blank doxygen \r
+# will generate a default style sheet. Note that doxygen will try to copy \r
+# the style sheet file to the HTML output directory, so don't put your own \r
+# stylesheet in the HTML output directory as well, or it will be erased!\r
+\r
+HTML_STYLESHEET        = \r
+\r
+# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, \r
+# files or namespaces will be aligned in HTML using tables. If set to \r
+# NO a bullet list will be used.\r
+\r
+HTML_ALIGN_MEMBERS     = YES\r
+\r
+# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML \r
+# documentation will contain sections that can be hidden and shown after the \r
+# page has loaded. For this to work a browser that supports \r
+# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox \r
+# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari).\r
+\r
+HTML_DYNAMIC_SECTIONS  = YES\r
+\r
+# If the GENERATE_DOCSET tag is set to YES, additional index files \r
+# will be generated that can be used as input for Apple's Xcode 3 \r
+# integrated development environment, introduced with OSX 10.5 (Leopard). \r
+# To create a documentation set, doxygen will generate a Makefile in the \r
+# HTML output directory. Running make will produce the docset in that \r
+# directory and running "make install" will install the docset in \r
+# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find \r
+# it at startup. \r
+# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information.\r
+\r
+GENERATE_DOCSET        = NO\r
+\r
+# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the \r
+# feed. A documentation feed provides an umbrella under which multiple \r
+# documentation sets from a single provider (such as a company or product suite) \r
+# can be grouped.\r
+\r
+DOCSET_FEEDNAME        = "Doxygen generated docs"\r
+\r
+# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that \r
+# should uniquely identify the documentation set bundle. This should be a \r
+# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen \r
+# will append .docset to the name.\r
+\r
+DOCSET_BUNDLE_ID       = org.doxygen.Project\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, additional index files \r
+# will be generated that can be used as input for tools like the \r
+# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) \r
+# of the generated HTML documentation.\r
+\r
+GENERATE_HTMLHELP      = NO\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can \r
+# be used to specify the file name of the resulting .chm file. You \r
+# can add a path in front of the file if the result should not be \r
+# written to the html output directory.\r
+\r
+CHM_FILE               = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can \r
+# be used to specify the location (absolute path including file name) of \r
+# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run \r
+# the HTML help compiler on the generated index.hhp.\r
+\r
+HHC_LOCATION           = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag \r
+# controls if a separate .chi index file is generated (YES) or that \r
+# it should be included in the master .chm file (NO).\r
+\r
+GENERATE_CHI           = NO\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING\r
+# is used to encode HtmlHelp index (hhk), content (hhc) and project file\r
+# content.\r
+\r
+CHM_INDEX_ENCODING     = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag \r
+# controls whether a binary table of contents is generated (YES) or a \r
+# normal table of contents (NO) in the .chm file.\r
+\r
+BINARY_TOC             = NO\r
+\r
+# The TOC_EXPAND flag can be set to YES to add extra items for group members \r
+# to the contents of the HTML help documentation and to the tree view.\r
+\r
+TOC_EXPAND             = YES\r
+\r
+# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER \r
+# are set, an additional index file will be generated that can be used as input for \r
+# Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated \r
+# HTML documentation.\r
+\r
+GENERATE_QHP           = NO\r
+\r
+# If the QHG_LOCATION tag is specified, the QCH_FILE tag can \r
+# be used to specify the file name of the resulting .qch file. \r
+# The path specified is relative to the HTML output folder.\r
+\r
+QCH_FILE               = \r
+\r
+# The QHP_NAMESPACE tag specifies the namespace to use when generating \r
+# Qt Help Project output. For more information please see \r
+# <a href="http://doc.trolltech.com/qthelpproject.html#namespace">Qt Help Project / Namespace</a>.\r
+\r
+QHP_NAMESPACE          = org.doxygen.Project\r
+\r
+# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating \r
+# Qt Help Project output. For more information please see \r
+# <a href="http://doc.trolltech.com/qthelpproject.html#virtual-folders">Qt Help Project / Virtual Folders</a>.\r
+\r
+QHP_VIRTUAL_FOLDER     = doc\r
+\r
+# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can \r
+# be used to specify the location of Qt's qhelpgenerator. \r
+# If non-empty doxygen will try to run qhelpgenerator on the generated \r
+# .qhp file .\r
+\r
+QHG_LOCATION           = \r
+\r
+# The DISABLE_INDEX tag can be used to turn on/off the condensed index at \r
+# top of each HTML page. The value NO (the default) enables the index and \r
+# the value YES disables it.\r
+\r
+DISABLE_INDEX          = NO\r
+\r
+# This tag can be used to set the number of enum values (range [1..20]) \r
+# that doxygen will group on one line in the generated HTML documentation.\r
+\r
+ENUM_VALUES_PER_LINE   = 1\r
+\r
+# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index\r
+# structure should be generated to display hierarchical information.\r
+# If the tag value is set to FRAME, a side panel will be generated\r
+# containing a tree-like index structure (just like the one that \r
+# is generated for HTML Help). For this to work a browser that supports \r
+# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, \r
+# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are \r
+# probably better off using the HTML help feature. Other possible values \r
+# for this tag are: HIERARCHIES, which will generate the Groups, Directories,\r
+# and Class Hierarchy pages using a tree view instead of an ordered list;\r
+# ALL, which combines the behavior of FRAME and HIERARCHIES; and NONE, which\r
+# disables this behavior completely. For backwards compatibility with previous\r
+# releases of Doxygen, the values YES and NO are equivalent to FRAME and NONE\r
+# respectively.\r
+\r
+GENERATE_TREEVIEW      = YES\r
+\r
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be \r
+# used to set the initial width (in pixels) of the frame in which the tree \r
+# is shown.\r
+\r
+TREEVIEW_WIDTH         = 250\r
+\r
+# Use this tag to change the font size of Latex formulas included \r
+# as images in the HTML documentation. The default is 10. Note that \r
+# when you change the font size after a successful doxygen run you need \r
+# to manually remove any form_*.png images from the HTML output directory \r
+# to force them to be regenerated.\r
+\r
+FORMULA_FONTSIZE       = 10\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the LaTeX output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will \r
+# generate Latex output.\r
+\r
+GENERATE_LATEX         = NO\r
+\r
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `latex' will be used as the default path.\r
+\r
+LATEX_OUTPUT           = latex\r
+\r
+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be \r
+# invoked. If left blank `latex' will be used as the default command name.\r
+\r
+LATEX_CMD_NAME         = latex\r
+\r
+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to \r
+# generate index for LaTeX. If left blank `makeindex' will be used as the \r
+# default command name.\r
+\r
+MAKEINDEX_CMD_NAME     = makeindex\r
+\r
+# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact \r
+# LaTeX documents. This may be useful for small projects and may help to \r
+# save some trees in general.\r
+\r
+COMPACT_LATEX          = NO\r
+\r
+# The PAPER_TYPE tag can be used to set the paper type that is used \r
+# by the printer. Possible values are: a4, a4wide, letter, legal and \r
+# executive. If left blank a4wide will be used.\r
+\r
+PAPER_TYPE             = a4wide\r
+\r
+# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX \r
+# packages that should be included in the LaTeX output.\r
+\r
+EXTRA_PACKAGES         = \r
+\r
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for \r
+# the generated latex document. The header should contain everything until \r
+# the first chapter. If it is left blank doxygen will generate a \r
+# standard header. Notice: only use this tag if you know what you are doing!\r
+\r
+LATEX_HEADER           = \r
+\r
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated \r
+# is prepared for conversion to pdf (using ps2pdf). The pdf file will \r
+# contain links (just like the HTML output) instead of page references \r
+# This makes the output suitable for online browsing using a pdf viewer.\r
+\r
+PDF_HYPERLINKS         = YES\r
+\r
+# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of \r
+# plain latex in the generated Makefile. Set this option to YES to get a \r
+# higher quality PDF documentation.\r
+\r
+USE_PDFLATEX           = YES\r
+\r
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. \r
+# command to the generated LaTeX files. This will instruct LaTeX to keep \r
+# running if errors occur, instead of asking the user for help. \r
+# This option is also used when generating formulas in HTML.\r
+\r
+LATEX_BATCHMODE        = NO\r
+\r
+# If LATEX_HIDE_INDICES is set to YES then doxygen will not \r
+# include the index chapters (such as File Index, Compound Index, etc.) \r
+# in the output.\r
+\r
+LATEX_HIDE_INDICES     = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the RTF output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output \r
+# The RTF output is optimized for Word 97 and may not look very pretty with \r
+# other RTF readers or editors.\r
+\r
+GENERATE_RTF           = NO\r
+\r
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `rtf' will be used as the default path.\r
+\r
+RTF_OUTPUT             = rtf\r
+\r
+# If the COMPACT_RTF tag is set to YES Doxygen generates more compact \r
+# RTF documents. This may be useful for small projects and may help to \r
+# save some trees in general.\r
+\r
+COMPACT_RTF            = NO\r
+\r
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated \r
+# will contain hyperlink fields. The RTF file will \r
+# contain links (just like the HTML output) instead of page references. \r
+# This makes the output suitable for online browsing using WORD or other \r
+# programs which support those fields. \r
+# Note: wordpad (write) and others do not support links.\r
+\r
+RTF_HYPERLINKS         = NO\r
+\r
+# Load stylesheet definitions from file. Syntax is similar to doxygen's \r
+# config file, i.e. a series of assignments. You only have to provide \r
+# replacements, missing definitions are set to their default value.\r
+\r
+RTF_STYLESHEET_FILE    = \r
+\r
+# Set optional variables used in the generation of an rtf document. \r
+# Syntax is similar to doxygen's config file.\r
+\r
+RTF_EXTENSIONS_FILE    = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the man page output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_MAN tag is set to YES (the default) Doxygen will \r
+# generate man pages\r
+\r
+GENERATE_MAN           = NO\r
+\r
+# The MAN_OUTPUT tag is used to specify where the man pages will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `man' will be used as the default path.\r
+\r
+MAN_OUTPUT             = man\r
+\r
+# The MAN_EXTENSION tag determines the extension that is added to \r
+# the generated man pages (default is the subroutine's section .3)\r
+\r
+MAN_EXTENSION          = .3\r
+\r
+# If the MAN_LINKS tag is set to YES and Doxygen generates man output, \r
+# then it will generate one additional man file for each entity \r
+# documented in the real man page(s). These additional files \r
+# only source the real man page, but without them the man command \r
+# would be unable to find the correct page. The default is NO.\r
+\r
+MAN_LINKS              = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the XML output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_XML tag is set to YES Doxygen will \r
+# generate an XML file that captures the structure of \r
+# the code including all documentation.\r
+\r
+GENERATE_XML           = NO\r
+\r
+# The XML_OUTPUT tag is used to specify where the XML pages will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `xml' will be used as the default path.\r
+\r
+XML_OUTPUT             = xml\r
+\r
+# The XML_SCHEMA tag can be used to specify an XML schema, \r
+# which can be used by a validating XML parser to check the \r
+# syntax of the XML files.\r
+\r
+XML_SCHEMA             = \r
+\r
+# The XML_DTD tag can be used to specify an XML DTD, \r
+# which can be used by a validating XML parser to check the \r
+# syntax of the XML files.\r
+\r
+XML_DTD                = \r
+\r
+# If the XML_PROGRAMLISTING tag is set to YES Doxygen will \r
+# dump the program listings (including syntax highlighting \r
+# and cross-referencing information) to the XML output. Note that \r
+# enabling this will significantly increase the size of the XML output.\r
+\r
+XML_PROGRAMLISTING     = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options for the AutoGen Definitions output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will \r
+# generate an AutoGen Definitions (see autogen.sf.net) file \r
+# that captures the structure of the code including all \r
+# documentation. Note that this feature is still experimental \r
+# and incomplete at the moment.\r
+\r
+GENERATE_AUTOGEN_DEF   = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the Perl module output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_PERLMOD tag is set to YES Doxygen will \r
+# generate a Perl module file that captures the structure of \r
+# the code including all documentation. Note that this \r
+# feature is still experimental and incomplete at the \r
+# moment.\r
+\r
+GENERATE_PERLMOD       = NO\r
+\r
+# If the PERLMOD_LATEX tag is set to YES Doxygen will generate \r
+# the necessary Makefile rules, Perl scripts and LaTeX code to be able \r
+# to generate PDF and DVI output from the Perl module output.\r
+\r
+PERLMOD_LATEX          = NO\r
+\r
+# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be \r
+# nicely formatted so it can be parsed by a human reader.  This is useful \r
+# if you want to understand what is going on.  On the other hand, if this \r
+# tag is set to NO the size of the Perl module output will be much smaller \r
+# and Perl will parse it just the same.\r
+\r
+PERLMOD_PRETTY         = YES\r
+\r
+# The names of the make variables in the generated doxyrules.make file \r
+# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. \r
+# This is useful so different doxyrules.make files included by the same \r
+# Makefile don't overwrite each other's variables.\r
+\r
+PERLMOD_MAKEVAR_PREFIX = \r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration options related to the preprocessor   \r
+#---------------------------------------------------------------------------\r
+\r
+# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will \r
+# evaluate all C-preprocessor directives found in the sources and include \r
+# files.\r
+\r
+ENABLE_PREPROCESSING   = YES\r
+\r
+# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro \r
+# names in the source code. If set to NO (the default) only conditional \r
+# compilation will be performed. Macro expansion can be done in a controlled \r
+# way by setting EXPAND_ONLY_PREDEF to YES.\r
+\r
+MACRO_EXPANSION        = YES\r
+\r
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES \r
+# then the macro expansion is limited to the macros specified with the \r
+# PREDEFINED and EXPAND_AS_DEFINED tags.\r
+\r
+EXPAND_ONLY_PREDEF     = YES\r
+\r
+# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files \r
+# in the INCLUDE_PATH (see below) will be search if a #include is found.\r
+\r
+SEARCH_INCLUDES        = YES\r
+\r
+# The INCLUDE_PATH tag can be used to specify one or more directories that \r
+# contain include files that are not input files but should be processed by \r
+# the preprocessor.\r
+\r
+INCLUDE_PATH           = \r
+\r
+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard \r
+# patterns (like *.h and *.hpp) to filter out the header-files in the \r
+# directories. If left blank, the patterns specified with FILE_PATTERNS will \r
+# be used.\r
+\r
+INCLUDE_FILE_PATTERNS  = \r
+\r
+# The PREDEFINED tag can be used to specify one or more macro names that \r
+# are defined before the preprocessor is started (similar to the -D option of \r
+# gcc). The argument of the tag is a list of macros of the form: name \r
+# or name=definition (no spaces). If the definition and the = are \r
+# omitted =1 is assumed. To prevent a macro definition from being \r
+# undefined via #undef or recursively expanded use the := operator \r
+# instead of the = operator.\r
+\r
+PREDEFINED             = __DOXYGEN__\r
+\r
+# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then \r
+# this tag can be used to specify a list of macro names that should be expanded. \r
+# The macro definition that is found in the sources will be used. \r
+# Use the PREDEFINED tag if you want to use a different macro definition.\r
+\r
+EXPAND_AS_DEFINED      = BUTTLOADTAG\r
+\r
+# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then \r
+# doxygen's preprocessor will remove all function-like macros that are alone \r
+# on a line, have an all uppercase name, and do not end with a semicolon. Such \r
+# function macros are typically used for boiler-plate code, and will confuse \r
+# the parser if not removed.\r
+\r
+SKIP_FUNCTION_MACROS   = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration::additions related to external references   \r
+#---------------------------------------------------------------------------\r
+\r
+# The TAGFILES option can be used to specify one or more tagfiles. \r
+# Optionally an initial location of the external documentation \r
+# can be added for each tagfile. The format of a tag file without \r
+# this location is as follows: \r
+#   TAGFILES = file1 file2 ... \r
+# Adding location for the tag files is done as follows: \r
+#   TAGFILES = file1=loc1 "file2 = loc2" ... \r
+# where "loc1" and "loc2" can be relative or absolute paths or \r
+# URLs. If a location is present for each tag, the installdox tool \r
+# does not have to be run to correct the links.\r
+# Note that each tag file must have a unique name\r
+# (where the name does NOT include the path)\r
+# If a tag file is not located in the directory in which doxygen \r
+# is run, you must also specify the path to the tagfile here.\r
+\r
+TAGFILES               = \r
+\r
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create \r
+# a tag file that is based on the input files it reads.\r
+\r
+GENERATE_TAGFILE       = \r
+\r
+# If the ALLEXTERNALS tag is set to YES all external classes will be listed \r
+# in the class index. If set to NO only the inherited external classes \r
+# will be listed.\r
+\r
+ALLEXTERNALS           = NO\r
+\r
+# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed \r
+# in the modules index. If set to NO, only the current project's groups will \r
+# be listed.\r
+\r
+EXTERNAL_GROUPS        = YES\r
+\r
+# The PERL_PATH should be the absolute path and name of the perl script \r
+# interpreter (i.e. the result of `which perl').\r
+\r
+PERL_PATH              = /usr/bin/perl\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration options related to the dot tool   \r
+#---------------------------------------------------------------------------\r
+\r
+# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will \r
+# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base \r
+# or super classes. Setting the tag to NO turns the diagrams off. Note that \r
+# this option is superseded by the HAVE_DOT option below. This is only a \r
+# fallback. It is recommended to install and use dot, since it yields more \r
+# powerful graphs.\r
+\r
+CLASS_DIAGRAMS         = NO\r
+\r
+# You can define message sequence charts within doxygen comments using the \msc \r
+# command. Doxygen will then run the mscgen tool (see \r
+# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the \r
+# documentation. The MSCGEN_PATH tag allows you to specify the directory where \r
+# the mscgen tool resides. If left empty the tool is assumed to be found in the \r
+# default search path.\r
+\r
+MSCGEN_PATH            = \r
+\r
+# If set to YES, the inheritance and collaboration graphs will hide \r
+# inheritance and usage relations if the target is undocumented \r
+# or is not a class.\r
+\r
+HIDE_UNDOC_RELATIONS   = YES\r
+\r
+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is \r
+# available from the path. This tool is part of Graphviz, a graph visualization \r
+# toolkit from AT&T and Lucent Bell Labs. The other options in this section \r
+# have no effect if this option is set to NO (the default)\r
+\r
+HAVE_DOT               = NO\r
+\r
+# By default doxygen will write a font called FreeSans.ttf to the output \r
+# directory and reference it in all dot files that doxygen generates. This \r
+# font does not include all possible unicode characters however, so when you need \r
+# these (or just want a differently looking font) you can specify the font name \r
+# using DOT_FONTNAME. You need need to make sure dot is able to find the font, \r
+# which can be done by putting it in a standard location or by setting the \r
+# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory \r
+# containing the font.\r
+\r
+DOT_FONTNAME           = FreeSans\r
+\r
+# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. \r
+# The default size is 10pt.\r
+\r
+DOT_FONTSIZE           = 10\r
+\r
+# By default doxygen will tell dot to use the output directory to look for the \r
+# FreeSans.ttf font (which doxygen will put there itself). If you specify a \r
+# different font using DOT_FONTNAME you can set the path where dot \r
+# can find it using this tag.\r
+\r
+DOT_FONTPATH           = \r
+\r
+# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for each documented class showing the direct and \r
+# indirect inheritance relations. Setting this tag to YES will force the \r
+# the CLASS_DIAGRAMS tag to NO.\r
+\r
+CLASS_GRAPH            = NO\r
+\r
+# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for each documented class showing the direct and \r
+# indirect implementation dependencies (inheritance, containment, and \r
+# class references variables) of the class with other documented classes.\r
+\r
+COLLABORATION_GRAPH    = NO\r
+\r
+# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for groups, showing the direct groups dependencies\r
+\r
+GROUP_GRAPHS           = NO\r
+\r
+# If the UML_LOOK tag is set to YES doxygen will generate inheritance and \r
+# collaboration diagrams in a style similar to the OMG's Unified Modeling \r
+# Language.\r
+\r
+UML_LOOK               = NO\r
+\r
+# If set to YES, the inheritance and collaboration graphs will show the \r
+# relations between templates and their instances.\r
+\r
+TEMPLATE_RELATIONS     = NO\r
+\r
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT \r
+# tags are set to YES then doxygen will generate a graph for each documented \r
+# file showing the direct and indirect include dependencies of the file with \r
+# other documented files.\r
+\r
+INCLUDE_GRAPH          = NO\r
+\r
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and \r
+# HAVE_DOT tags are set to YES then doxygen will generate a graph for each \r
+# documented header file showing the documented files that directly or \r
+# indirectly include this file.\r
+\r
+INCLUDED_BY_GRAPH      = NO\r
+\r
+# If the CALL_GRAPH and HAVE_DOT options are set to YES then \r
+# doxygen will generate a call dependency graph for every global function \r
+# or class method. Note that enabling this option will significantly increase \r
+# the time of a run. So in most cases it will be better to enable call graphs \r
+# for selected functions only using the \callgraph command.\r
+\r
+CALL_GRAPH             = NO\r
+\r
+# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then \r
+# doxygen will generate a caller dependency graph for every global function \r
+# or class method. Note that enabling this option will significantly increase \r
+# the time of a run. So in most cases it will be better to enable caller \r
+# graphs for selected functions only using the \callergraph command.\r
+\r
+CALLER_GRAPH           = NO\r
+\r
+# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen \r
+# will graphical hierarchy of all classes instead of a textual one.\r
+\r
+GRAPHICAL_HIERARCHY    = NO\r
+\r
+# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES \r
+# then doxygen will show the dependencies a directory has on other directories \r
+# in a graphical way. The dependency relations are determined by the #include\r
+# relations between the files in the directories.\r
+\r
+DIRECTORY_GRAPH        = NO\r
+\r
+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images \r
+# generated by dot. Possible values are png, jpg, or gif\r
+# If left blank png will be used.\r
+\r
+DOT_IMAGE_FORMAT       = png\r
+\r
+# The tag DOT_PATH can be used to specify the path where the dot tool can be \r
+# found. If left blank, it is assumed the dot tool can be found in the path.\r
+\r
+DOT_PATH               = "C:/Program Files/Graphviz2.18/bin"\r
+\r
+# The DOTFILE_DIRS tag can be used to specify one or more directories that \r
+# contain dot files that are included in the documentation (see the \r
+# \dotfile command).\r
+\r
+DOTFILE_DIRS           = \r
+\r
+# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of \r
+# nodes that will be shown in the graph. If the number of nodes in a graph \r
+# becomes larger than this value, doxygen will truncate the graph, which is \r
+# visualized by representing a node as a red box. Note that doxygen if the \r
+# number of direct children of the root node in a graph is already larger than \r
+# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note \r
+# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.\r
+\r
+DOT_GRAPH_MAX_NODES    = 15\r
+\r
+# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the \r
+# graphs generated by dot. A depth value of 3 means that only nodes reachable \r
+# from the root by following a path via at most 3 edges will be shown. Nodes \r
+# that lay further from the root node will be omitted. Note that setting this \r
+# option to 1 or 2 may greatly reduce the computation time needed for large \r
+# code bases. Also note that the size of a graph can be further restricted by \r
+# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.\r
+\r
+MAX_DOT_GRAPH_DEPTH    = 2\r
+\r
+# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent \r
+# background. This is disabled by default, because dot on Windows does not \r
+# seem to support this out of the box. Warning: Depending on the platform used, \r
+# enabling this option may lead to badly anti-aliased labels on the edges of \r
+# a graph (i.e. they become hard to read).\r
+\r
+DOT_TRANSPARENT        = YES\r
+\r
+# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output \r
+# files in one run (i.e. multiple -o and -T options on the command line). This \r
+# makes dot run faster, but since only newer versions of dot (>1.8.10) \r
+# support this, this feature is disabled by default.\r
+\r
+DOT_MULTI_TARGETS      = NO\r
+\r
+# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will \r
+# generate a legend page explaining the meaning of the various boxes and \r
+# arrows in the dot generated graphs.\r
+\r
+GENERATE_LEGEND        = YES\r
+\r
+# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will \r
+# remove the intermediate dot files that are used to generate \r
+# the various graphs.\r
+\r
+DOT_CLEANUP            = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration::additions related to the search engine   \r
+#---------------------------------------------------------------------------\r
+\r
+# The SEARCHENGINE tag specifies whether or not a search engine should be \r
+# used. If set to NO the values of all tags below this one will be ignored.\r
+\r
+SEARCHENGINE           = NO\r
diff --git a/Demos/Device/LowLevel/USBtoSerial/LUFA USBtoSerial.inf b/Demos/Device/LowLevel/USBtoSerial/LUFA USBtoSerial.inf
new file mode 100644 (file)
index 0000000..bd9c8bf
--- /dev/null
@@ -0,0 +1,55 @@
+;  Windows LUFA USB to Serial Setup File\r
+; Copyright (c) 2000 Microsoft Corporation\r
+\r
+[Version] \r
+Signature="$Windows NT$" \r
+Class=Ports\r
+ClassGuid={4D36E978-E325-11CE-BFC1-08002BE10318} \r
+Provider=%COMPANY% \r
+LayoutFile=layout.inf\r
+DriverVer=06/06/2006,1.0.0.0\r
+\r
+[Manufacturer] \r
+%MFGNAME% = ManufName\r
+\r
+[DestinationDirs] \r
+DefaultDestDir=12 \r
+\r
+[ManufName] \r
+%Modem3% = Modem3, USB\VID_03EB&PID_204B\r
+\r
+;------------------------------------------------------------------------------\r
+;  Windows 2000/XP Sections\r
+;------------------------------------------------------------------------------\r
+\r
+[Modem3.nt]\r
+CopyFiles=USBModemCopyFileSection\r
+AddReg=Modem3.nt.AddReg \r
+\r
+[USBModemCopyFileSection]\r
+usbser.sys,,,0x20\r
+\r
+[Modem3.nt.AddReg] \r
+HKR,,DevLoader,,*ntkern \r
+HKR,,NTMPDriver,,usbser.sys \r
+HKR,,EnumPropPages32,,"MsPorts.dll,SerialPortPropPageProvider" \r
+\r
+[Modem3.nt.Services] \r
+AddService=usbser, 0x00000002, DriverService\r
+\r
+[DriverService] \r
+DisplayName=%SERVICE%\r
+ServiceType=1\r
+StartType=3\r
+ErrorControl=1\r
+ServiceBinary=%12%\usbser.sys \r
+\r
+;------------------------------------------------------------------------------\r
+;  String Definitions\r
+;------------------------------------------------------------------------------\r
+\r
+[Strings] \r
+COMPANY="LUFA Library"\r
+MFGNAME="Dean Camera"\r
+Modem3="USB Virtual Serial Port" \r
+SERVICE="USB Virtual Serial Port CDC Driver"
\ No newline at end of file
diff --git a/Demos/Device/LowLevel/USBtoSerial/Lib/RingBuff.c b/Demos/Device/LowLevel/USBtoSerial/Lib/RingBuff.c
new file mode 100644 (file)
index 0000000..1f477f1
--- /dev/null
@@ -0,0 +1,120 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+#include "RingBuff.h"\r
+\r
+void Buffer_Initialize(RingBuff_t* Buffer)\r
+{\r
+       BUFF_ATOMIC_BLOCK\r
+       {\r
+               Buffer->InPtr    = (RingBuff_Data_t*)&Buffer->Buffer;\r
+               Buffer->OutPtr   = (RingBuff_Data_t*)&Buffer->Buffer;\r
+               Buffer->Elements = 0;\r
+       }\r
+}\r
+\r
+void Buffer_StoreElement(RingBuff_t* Buffer, RingBuff_Data_t Data)\r
+{\r
+       BUFF_ATOMIC_BLOCK\r
+       {\r
+       #if defined(BUFF_DROPOLD)\r
+               if (Buffer->Elements == BUFF_LENGTH)\r
+               {\r
+                       Buffer->OutPtr++;\r
+       \r
+                       if (Buffer->OutPtr == &Buffer->Buffer[BUFF_LENGTH])\r
+                         Buffer->OutPtr = (RingBuff_Data_t*)&Buffer->Buffer;\r
+               }\r
+               else\r
+               {\r
+                       Buffer->Elements++;\r
+               }\r
+       #elif defined(BUFF_DROPNEW)\r
+               if (Buffer->Elements == BUFF_LENGTH)\r
+                 return;\r
+       \r
+                 Buffer->Elements++;\r
+       #elif defined(BUFF_NODROPCHECK)\r
+                 Buffer->Elements++;\r
+       #endif\r
+       \r
+               *(Buffer->InPtr) = Data;\r
+               Buffer->InPtr++;\r
+       \r
+               if (Buffer->InPtr == &Buffer->Buffer[BUFF_LENGTH])\r
+                 Buffer->InPtr = (RingBuff_Data_t*)&Buffer->Buffer;\r
+       }\r
+}\r
+\r
+RingBuff_Data_t Buffer_GetElement(RingBuff_t* Buffer)\r
+{\r
+       RingBuff_Data_t BuffData;\r
+       \r
+       BUFF_ATOMIC_BLOCK\r
+       {\r
+#if defined(BUFF_EMPTYRETURNSZERO)\r
+               if (!(Buffer->Elements))\r
+                 return 0;\r
+#elif !defined(BUFF_NOEMPTYCHECK)\r
+       #error No empty buffer check behaviour specified.\r
+#endif\r
+\r
+               BuffData = *(Buffer->OutPtr);\r
+       \r
+               Buffer->OutPtr++;\r
+               Buffer->Elements--;\r
+       \r
+               if (Buffer->OutPtr == &Buffer->Buffer[BUFF_LENGTH])\r
+                 Buffer->OutPtr = (RingBuff_Data_t*)&Buffer->Buffer;\r
+       }\r
+       \r
+       return BuffData;\r
+}\r
+\r
+#if defined(BUFF_USEPEEK)\r
+RingBuff_Data_t Buffer_PeekElement(const RingBuff_t* Buffer)\r
+{\r
+       RingBuff_Data_t BuffData;\r
+\r
+       BUFF_ATOMIC_BLOCK\r
+       {\r
+#if defined(BUFF_EMPTYRETURNSZERO)\r
+               if (!(Buffer->Elements))\r
+                 return 0;\r
+#elif !defined(BUFF_NOEMPTYCHECK)\r
+       #error No empty buffer check behaviour specified.\r
+#endif\r
+\r
+               BuffData = *(Buffer->OutPtr);\r
+       }\r
+\r
+       return BuffData;\r
+}\r
+#endif\r
diff --git a/Demos/Device/LowLevel/USBtoSerial/Lib/RingBuff.h b/Demos/Device/LowLevel/USBtoSerial/Lib/RingBuff.h
new file mode 100644 (file)
index 0000000..23288d8
--- /dev/null
@@ -0,0 +1,116 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/* Buffer Configuration: */\r
+   /* Buffer length - select static size of created ring buffers: */\r
+        #define BUFF_STATICSIZE 128      // Set to the static ring buffer size for all ring buffers (place size after define)\r
+\r
+   /* Volatile mode - uncomment to make buffers volatile, for use in ISRs, etc: */\r
+        #define BUFF_VOLATILE            // Uncomment to cause all ring buffers to become volatile (and atomic if multi-byte) in access\r
+\r
+   /* Drop mode - select behaviour when Buffer_StoreElement called on a full buffer: */\r
+     #define BUFF_DROPOLD             // Uncomment to cause full ring buffers to drop the oldest character to make space when full\r
+     // #define BUFF_DROPNEW          // Uncomment to cause full ring buffers to drop the new character when full\r
+     // #define BUFF_NODROPCHECK      // Uncomment to ignore full ring buffer checks - checking left to user!\r
+\r
+   /* Underflow behaviour - select behaviour when Buffer_GetElement is called with an empty ring buffer: */\r
+     //#define BUFF_EMPTYRETURNSZERO  // Uncomment to return 0 when an empty ring buffer is read\r
+     #define BUFF_NOEMPTYCHECK        // Uncomment to disable checking of empty ring buffers - checking left to user!\r
+       \r
+   /* Buffer storage type - set the datatype for the stored data */\r
+     #define BUFF_DATATYPE uint8_t    // Change to the data type that is going to be stored into the buffer\r
+       \r
+   /* Peek routine - uncomment to include the peek routine (fetches next byte without removing it from the buffer */\r
+     //#define BUFF_USEPEEK\r
+               \r
+#ifndef _RINGBUFF_H_\r
+#define _RINGBUFF_H_\r
+\r
+       /* Includes: */\r
+       #include <avr/io.h>\r
+       #include <avr/interrupt.h>\r
+       #include <util/atomic.h>\r
+       #include <limits.h>\r
+\r
+       #include <LUFA/Common/Common.h>\r
+\r
+       /* Defines and checks: */\r
+       #if defined(BUFF_STATICSIZE)\r
+               #define BUFF_LENGTH BUFF_STATICSIZE\r
+       #else\r
+               #error No buffer length specified!\r
+       #endif\r
+\r
+       #if !(defined(BUFF_DROPOLD) || defined(BUFF_DROPNEW) || defined(BUFF_NODROPCHECK))\r
+               #error No buffer drop mode specified.\r
+       #endif\r
+\r
+       #if !defined(BUFF_DATATYPE)\r
+               #error Ringbuffer storage data type not specified.\r
+       #endif\r
+\r
+       #if defined(BUFF_VOLATILE)\r
+               #define BUFF_MODE            volatile\r
+               #define BUFF_ATOMIC_BLOCK    ATOMIC_BLOCK(ATOMIC_RESTORESTATE)\r
+       #else\r
+               #define BUFF_MODE\r
+               #define BUFF_ATOMIC_BLOCK\r
+       #endif\r
+\r
+       #if (BUFF_STATICSIZE   > LONG_MAX)\r
+               #define RingBuff_Elements_t uint64_t\r
+       #elif (BUFF_STATICSIZE > INT_MAX)\r
+               #define RingBuff_Elements_t uint32_t\r
+       #elif (BUFF_STATICSIZE > CHAR_MAX)\r
+               #define RingBuff_Elements_t uint16_t\r
+       #else\r
+               #define RingBuff_Elements_t uint8_t\r
+       #endif\r
+       \r
+       /* Type Defines: */\r
+       typedef BUFF_DATATYPE RingBuff_Data_t;\r
+\r
+       typedef BUFF_MODE struct\r
+       {\r
+               RingBuff_Data_t      Buffer[BUFF_LENGTH];\r
+               RingBuff_Data_t*     InPtr;\r
+               RingBuff_Data_t*     OutPtr;\r
+               RingBuff_Elements_t  Elements;\r
+       } RingBuff_t;\r
+               \r
+       /* Function Prototypes: */\r
+       void            Buffer_Initialize(RingBuff_t* Buff);\r
+       void            Buffer_StoreElement(RingBuff_t* Buffer, RingBuff_Data_t Data);\r
+       RingBuff_Data_t Buffer_GetElement(RingBuff_t* Buffer);\r
+       #if defined(BUFF_USEPEEK)\r
+               RingBuff_Data_t Buffer_PeekElement(const RingBuff_t* Buffer);\r
+       #endif\r
+       \r
+#endif\r
diff --git a/Demos/Device/LowLevel/USBtoSerial/USBtoSerial.aps b/Demos/Device/LowLevel/USBtoSerial/USBtoSerial.aps
new file mode 100644 (file)
index 0000000..2db4f97
--- /dev/null
@@ -0,0 +1 @@
+<AVRStudio><MANAGEMENT><ProjectName>USBtoSerial</ProjectName><Created>30-Sep-2008 14:18:39</Created><LastEdit>30-Sep-2008 14:18:52</LastEdit><ICON>241</ICON><ProjectType>0</ProjectType><Created>30-Sep-2008 14:18:39</Created><Version>4</Version><Build>4, 14, 0, 589</Build><ProjectTypeName>AVR GCC</ProjectTypeName></MANAGEMENT><CODE_CREATION><ObjectFile></ObjectFile><EntryFile></EntryFile><SaveFolder>C:\Users\Dean\Documents\Electronics\Projects\WORK\MyUSBWORK\Demos\USBtoSerial\</SaveFolder></CODE_CREATION><DEBUG_TARGET><CURRENT_TARGET></CURRENT_TARGET><CURRENT_PART></CURRENT_PART><BREAKPOINTS></BREAKPOINTS><IO_EXPAND><HIDE>false</HIDE></IO_EXPAND><REGISTERNAMES><Register>R00</Register><Register>R01</Register><Register>R02</Register><Register>R03</Register><Register>R04</Register><Register>R05</Register><Register>R06</Register><Register>R07</Register><Register>R08</Register><Register>R09</Register><Register>R10</Register><Register>R11</Register><Register>R12</Register><Register>R13</Register><Register>R14</Register><Register>R15</Register><Register>R16</Register><Register>R17</Register><Register>R18</Register><Register>R19</Register><Register>R20</Register><Register>R21</Register><Register>R22</Register><Register>R23</Register><Register>R24</Register><Register>R25</Register><Register>R26</Register><Register>R27</Register><Register>R28</Register><Register>R29</Register><Register>R30</Register><Register>R31</Register></REGISTERNAMES><COM>Auto</COM><COMType>0</COMType><WATCHNUM>0</WATCHNUM><WATCHNAMES><Pane0></Pane0><Pane1></Pane1><Pane2></Pane2><Pane3></Pane3></WATCHNAMES><BreakOnTrcaeFull>0</BreakOnTrcaeFull></DEBUG_TARGET><Debugger><Triggers></Triggers></Debugger><AVRGCCPLUGIN><FILES><SOURCEFILE>Descriptors.c</SOURCEFILE><SOURCEFILE>RingBuff.c</SOURCEFILE><SOURCEFILE>USBtoSerial.c</SOURCEFILE><HEADERFILE>Descriptors.h</HEADERFILE><HEADERFILE>RingBuff.h</HEADERFILE><HEADERFILE>USBtoSerial.h</HEADERFILE><OTHERFILE>makefile</OTHERFILE></FILES><CONFIGS><CONFIG><NAME>default</NAME><USESEXTERNALMAKEFILE>YES</USESEXTERNALMAKEFILE><EXTERNALMAKEFILE>makefile</EXTERNALMAKEFILE><PART>atmega128</PART><HEX>1</HEX><LIST>1</LIST><MAP>1</MAP><OUTPUTFILENAME>USBtoSerial.elf</OUTPUTFILENAME><OUTPUTDIR>default\</OUTPUTDIR><ISDIRTY>1</ISDIRTY><OPTIONS/><INCDIRS/><LIBDIRS/><LIBS/><LINKOBJECTS/><OPTIONSFORALL>-Wall -gdwarf-2 -std=gnu99 -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums</OPTIONSFORALL><LINKEROPTIONS></LINKEROPTIONS><SEGMENTS/></CONFIG></CONFIGS><LASTCONFIG>default</LASTCONFIG><USES_WINAVR>1</USES_WINAVR><GCC_LOC>C:\WinAVR-20080512\bin\avr-gcc.exe</GCC_LOC><MAKE_LOC>C:\WinAVR-20080512\utils\bin\make.exe</MAKE_LOC></AVRGCCPLUGIN><IOView><usergroups/><sort sorted="0" column="0" ordername="0" orderaddress="0" ordergroup="0"/></IOView><Files></Files><Events><Bookmarks></Bookmarks></Events><Trace><Filters></Filters></Trace></AVRStudio>\r
diff --git a/Demos/Device/LowLevel/USBtoSerial/USBtoSerial.c b/Demos/Device/LowLevel/USBtoSerial/USBtoSerial.c
new file mode 100644 (file)
index 0000000..7cef565
--- /dev/null
@@ -0,0 +1,373 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+#include "USBtoSerial.h"\r
+\r
+/* Scheduler Task List */\r
+TASK_LIST\r
+{\r
+       { .Task = USB_USBTask          , .TaskStatus = TASK_STOP },\r
+       { .Task = CDC_Task             , .TaskStatus = TASK_STOP },\r
+};\r
+\r
+/* Globals: */\r
+/** Contains the current baud rate and other settings of the virtual serial port.\r
+ *\r
+ *  These values are set by the host via a class-specific request, and the physical USART should be reconfigured to match the\r
+ *  new settings each time they are changed by the host.\r
+ */\r
+CDC_Line_Coding_t LineCoding = { .BaudRateBPS = 9600,\r
+                                 .CharFormat  = OneStopBit,\r
+                                 .ParityType  = Parity_None,\r
+                                 .DataBits    = 8            };\r
+\r
+/** Ring (circular) buffer to hold the RX data - data from the host to the attached device on the serial port. */\r
+RingBuff_t Rx_Buffer;\r
+\r
+/** Ring (circular) buffer to hold the TX data - data from the attached device on the serial port to the host. */\r
+RingBuff_t Tx_Buffer;\r
+\r
+/** Flag to indicate if the USART is currently transmitting data from the Rx_Buffer circular buffer. */\r
+volatile bool Transmitting = false;\r
+\r
+/** Main program entry point. This routine configures the hardware required by the application, then\r
+ *  starts the scheduler to run the application tasks.\r
+ */\r
+int main(void)\r
+{\r
+       /* Disable watchdog if enabled by bootloader/fuses */\r
+       MCUSR &= ~(1 << WDRF);\r
+       wdt_disable();\r
+\r
+       /* Disable clock division */\r
+       clock_prescale_set(clock_div_1);\r
+\r
+       /* Hardware Initialization */\r
+       LEDs_Init();\r
+       ReconfigureUSART();\r
+       \r
+       /* Ring buffer Initialization */\r
+       Buffer_Initialize(&Rx_Buffer);\r
+       Buffer_Initialize(&Tx_Buffer);\r
+       \r
+       /* Indicate USB not ready */\r
+       UpdateStatus(Status_USBNotReady);\r
+       \r
+       /* Initialize Scheduler so that it can be used */\r
+       Scheduler_Init();\r
+\r
+       /* Initialize USB Subsystem */\r
+       USB_Init();\r
+\r
+       /* Scheduling - routine never returns, so put this last in the main function */\r
+       Scheduler_Start();\r
+}\r
+\r
+/** Event handler for the USB_Connect event. This indicates that the device is enumerating via the status LEDs and\r
+ *  starts the library USB task to begin the enumeration and USB management process.\r
+ */\r
+void EVENT_USB_Connect(void)\r
+{\r
+       /* Start USB management task */\r
+       Scheduler_SetTaskMode(USB_USBTask, TASK_RUN);\r
+\r
+       /* Indicate USB enumerating */\r
+       UpdateStatus(Status_USBEnumerating);\r
+}\r
+\r
+/** Event handler for the USB_Disconnect event. This indicates that the device is no longer connected to a host via\r
+ *  the status LEDs and stops the USB management and CDC management tasks.\r
+ */\r
+void EVENT_USB_Disconnect(void)\r
+{\r
+       /* Stop running CDC and USB management tasks */\r
+       Scheduler_SetTaskMode(CDC_Task, TASK_STOP);\r
+       Scheduler_SetTaskMode(USB_USBTask, TASK_STOP);\r
+       \r
+       /* Reset Tx and Rx buffers, device disconnected */\r
+       Buffer_Initialize(&Rx_Buffer);\r
+       Buffer_Initialize(&Tx_Buffer);\r
+\r
+       /* Indicate USB not ready */\r
+       UpdateStatus(Status_USBNotReady);\r
+}\r
+\r
+/** Event handler for the USB_ConfigurationChanged event. This is fired when the host set the current configuration\r
+ *  of the USB device after enumeration - the device endpoints are configured and the CDC management task started.\r
+ */\r
+void EVENT_USB_ConfigurationChanged(void)\r
+{\r
+       /* Setup CDC Notification, Rx and Tx Endpoints */\r
+       Endpoint_ConfigureEndpoint(CDC_NOTIFICATION_EPNUM, EP_TYPE_INTERRUPT,\r
+                                      ENDPOINT_DIR_IN, CDC_NOTIFICATION_EPSIZE,\r
+                                  ENDPOINT_BANK_SINGLE);\r
+\r
+       Endpoint_ConfigureEndpoint(CDC_TX_EPNUM, EP_TYPE_BULK,\r
+                                      ENDPOINT_DIR_IN, CDC_TXRX_EPSIZE,\r
+                                  ENDPOINT_BANK_SINGLE);\r
+\r
+       Endpoint_ConfigureEndpoint(CDC_RX_EPNUM, EP_TYPE_BULK,\r
+                                      ENDPOINT_DIR_OUT, CDC_TXRX_EPSIZE,\r
+                                  ENDPOINT_BANK_SINGLE);\r
+\r
+       /* Indicate USB connected and ready */\r
+       UpdateStatus(Status_USBReady);\r
+\r
+       /* Start CDC task */\r
+       Scheduler_SetTaskMode(CDC_Task, TASK_RUN);\r
+}\r
+\r
+/** Event handler for the USB_UnhandledControlPacket event. This is used to catch standard and class specific\r
+ *  control requests that are not handled internally by the USB library (including the CDC control commands,\r
+ *  which are all issued via the control endpoint), so that they can be handled appropriately for the application.\r
+ */\r
+void EVENT_USB_UnhandledControlPacket(void)\r
+{\r
+       uint8_t* LineCodingData = (uint8_t*)&LineCoding;\r
+\r
+       /* Process CDC specific control requests */\r
+       switch (USB_ControlRequest.bRequest)\r
+       {\r
+               case REQ_GetLineEncoding:\r
+                       if (USB_ControlRequest.bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_INTERFACE))\r
+                       {       \r
+                               /* Acknowledge the SETUP packet, ready for data transfer */\r
+                               Endpoint_ClearSETUP();\r
+\r
+                               /* Write the line coding data to the control endpoint */\r
+                               Endpoint_Write_Control_Stream_LE(LineCodingData, sizeof(LineCoding));\r
+                               \r
+                               /* Finalize the stream transfer to send the last packet or clear the host abort */\r
+                               Endpoint_ClearOUT();\r
+                       }\r
+                       \r
+                       break;\r
+               case REQ_SetLineEncoding:\r
+                       if (USB_ControlRequest.bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE))\r
+                       {\r
+                               /* Acknowledge the SETUP packet, ready for data transfer */\r
+                               Endpoint_ClearSETUP();\r
+\r
+                               /* Read the line coding data in from the host into the global struct */\r
+                               Endpoint_Read_Control_Stream_LE(LineCodingData, sizeof(LineCoding));\r
+\r
+                               /* Finalize the stream transfer to clear the last packet from the host */\r
+                               Endpoint_ClearIN();\r
+                               \r
+                               /* Reconfigure the USART with the new settings */\r
+                               ReconfigureUSART();\r
+                       }\r
+       \r
+                       break;\r
+               case REQ_SetControlLineState:\r
+                       if (USB_ControlRequest.bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE))\r
+                       {                               \r
+                               /* Acknowledge the SETUP packet, ready for data transfer */\r
+                               Endpoint_ClearSETUP();\r
+                               \r
+                               /* NOTE: Here you can read in the line state mask from the host, to get the current state of the output handshake\r
+                                        lines. The mask is read in from the wValue parameter in USB_ControlRequest, and can be masked against the\r
+                                                CONTROL_LINE_OUT_* masks to determine the RTS and DTR line states using the following code:\r
+                               */\r
+\r
+                               /* Acknowledge status stage */\r
+                               while (!(Endpoint_IsINReady()));\r
+                               Endpoint_ClearIN();\r
+                       }\r
+       \r
+                       break;\r
+       }\r
+}\r
+\r
+/** Task to manage CDC data transmission and reception to and from the host, from and to the physical USART. */\r
+TASK(CDC_Task)\r
+{\r
+       if (USB_IsConnected)\r
+       {\r
+#if 0\r
+               /* NOTE: Here you can use the notification endpoint to send back line state changes to the host, for the special RS-232\r
+                                handshake signal lines (and some error states), via the CONTROL_LINE_IN_* masks and the following code:\r
+               */\r
+\r
+               USB_Notification_Header_t Notification = (USB_Notification_Header_t)\r
+                       {\r
+                               .NotificationType = (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_INTERFACE),\r
+                               .Notification     = NOTIF_SerialState,\r
+                               .wValue           = 0,\r
+                               .wIndex           = 0,\r
+                               .wLength          = sizeof(uint16_t),\r
+                       };\r
+                       \r
+               uint16_t LineStateMask;\r
+               \r
+               // Set LineStateMask here to a mask of CONTROL_LINE_IN_* masks to set the input handshake line states to send to the host\r
+               \r
+               Endpoint_SelectEndpoint(CDC_NOTIFICATION_EPNUM);\r
+               Endpoint_Write_Stream_LE(&Notification, sizeof(Notification));\r
+               Endpoint_Write_Stream_LE(&LineStateMask, sizeof(LineStateMask));\r
+               Endpoint_ClearIN();\r
+#endif\r
+\r
+               /* Select the Serial Rx Endpoint */\r
+               Endpoint_SelectEndpoint(CDC_RX_EPNUM);\r
+               \r
+               /* Check to see if a packet has been received from the host */\r
+               if (Endpoint_IsOUTReceived())\r
+               {\r
+                       /* Read the bytes in from the endpoint into the buffer while space is available */\r
+                       while (Endpoint_BytesInEndpoint() && (BUFF_STATICSIZE - Rx_Buffer.Elements))\r
+                       {\r
+                               /* Store each character from the endpoint */\r
+                               Buffer_StoreElement(&Rx_Buffer, Endpoint_Read_Byte());\r
+                       }\r
+                       \r
+                       /* Check to see if all bytes in the current packet have been read */\r
+                       if (!(Endpoint_BytesInEndpoint()))\r
+                       {\r
+                               /* Clear the endpoint buffer */\r
+                               Endpoint_ClearOUT();\r
+                       }\r
+               }\r
+               \r
+               /* Check if Rx buffer contains data - if so, send it */\r
+               if (Rx_Buffer.Elements)\r
+                 Serial_TxByte(Buffer_GetElement(&Rx_Buffer));\r
+\r
+               /* Select the Serial Tx Endpoint */\r
+               Endpoint_SelectEndpoint(CDC_TX_EPNUM);\r
+\r
+               /* Check if the Tx buffer contains anything to be sent to the host */\r
+               if (Tx_Buffer.Elements)\r
+               {\r
+                       /* Wait until Serial Tx Endpoint Ready for Read/Write */\r
+                       while (!(Endpoint_IsReadWriteAllowed()));\r
+                       \r
+                       /* Write the bytes from the buffer to the endpoint while space is available */\r
+                       while (Tx_Buffer.Elements && (Endpoint_BytesInEndpoint() < CDC_TXRX_EPSIZE))\r
+                       {\r
+                               /* Write each byte retreived from the buffer to the endpoint */\r
+                               Endpoint_Write_Byte(Buffer_GetElement(&Tx_Buffer));\r
+                       }\r
+                       \r
+                       /* Remember if the packet to send completely fills the endpoint */\r
+                       bool IsFull = (Endpoint_BytesInEndpoint() == CDC_TXRX_EPSIZE);\r
+                       \r
+                       /* Send the data */\r
+                       Endpoint_ClearIN();\r
+\r
+                       /* If no more data to send and the last packet filled the endpoint, send an empty packet to release\r
+                        * the buffer on the receiver (otherwise all data will be cached until a non-full packet is received) */\r
+                       if (IsFull && !(Tx_Buffer.Elements))\r
+                       {\r
+                               /* Wait until Serial Tx Endpoint Ready for Read/Write */\r
+                               while (!(Endpoint_IsReadWriteAllowed()));\r
+\r
+                               /* Send an empty packet to terminate the transfer */\r
+                               Endpoint_ClearIN();\r
+                       }\r
+               }\r
+       }\r
+}\r
+\r
+/** ISR to handle the USART receive complete interrupt, fired each time the USART has received a character. This stores the received\r
+ *  character into the Tx_Buffer circular buffer for later transmission to the host.\r
+ */\r
+ISR(USART1_RX_vect, ISR_BLOCK)\r
+{\r
+       /* Only store received characters if the USB interface is connected */\r
+       if (USB_IsConnected)\r
+       {\r
+               /* Character received, store it into the buffer */\r
+               Buffer_StoreElement(&Tx_Buffer, UDR1);\r
+       }\r
+}\r
+\r
+/** Function to manage status updates to the user. This is done via LEDs on the given board, if available, but may be changed to\r
+ *  log to a serial port, or anything else that is suitable for status updates.\r
+ *\r
+ *  \param CurrentStatus  Current status of the system, from the USBtoSerial_StatusCodes_t enum\r
+ */\r
+void UpdateStatus(uint8_t CurrentStatus)\r
+{\r
+       uint8_t LEDMask = LEDS_NO_LEDS;\r
+       \r
+       /* Set the LED mask to the appropriate LED mask based on the given status code */\r
+       switch (CurrentStatus)\r
+       {\r
+               case Status_USBNotReady:\r
+                       LEDMask = (LEDS_LED1);\r
+                       break;\r
+               case Status_USBEnumerating:\r
+                       LEDMask = (LEDS_LED1 | LEDS_LED2);\r
+                       break;\r
+               case Status_USBReady:\r
+                       LEDMask = (LEDS_LED2 | LEDS_LED4);\r
+                       break;\r
+       }\r
+       \r
+       /* Set the board LEDs to the new LED mask */\r
+       LEDs_SetAllLEDs(LEDMask);\r
+}\r
+\r
+/** Reconfigures the USART to match the current serial port settings issued by the host as closely as possible. */\r
+void ReconfigureUSART(void)\r
+{\r
+       uint8_t ConfigMask = 0;\r
+\r
+       /* Determine parity - non odd/even parity mode defaults to no parity */\r
+       if (LineCoding.ParityType == Parity_Odd)\r
+         ConfigMask = ((1 << UPM11) | (1 << UPM10));\r
+       else if (LineCoding.ParityType == Parity_Even)\r
+         ConfigMask = (1 << UPM11);\r
+\r
+       /* Determine stop bits - 1.5 stop bits is set as 1 stop bit due to hardware limitations */\r
+       if (LineCoding.CharFormat == TwoStopBits)\r
+         ConfigMask |= (1 << USBS1);\r
+\r
+       /* Determine data size - 5, 6, 7, or 8 bits are supported */\r
+       if (LineCoding.DataBits == 6)\r
+         ConfigMask |= (1 << UCSZ10);\r
+       else if (LineCoding.DataBits == 7)\r
+         ConfigMask |= (1 << UCSZ11);\r
+       else if (LineCoding.DataBits == 8)\r
+         ConfigMask |= ((1 << UCSZ11) | (1 << UCSZ10));\r
+       \r
+       /* Enable double speed, gives better error percentages at 8MHz */\r
+       UCSR1A = (1 << U2X1);\r
+       \r
+       /* Enable transmit and receive modules and interrupts */\r
+       UCSR1B = ((1 << RXCIE1) | (1 << TXEN1) | (1 << RXEN1));\r
+\r
+       /* Set the USART mode to the mask generated by the Line Coding options */\r
+       UCSR1C = ConfigMask;\r
+       \r
+       /* Set the USART baud rate register to the desired baud rate value */\r
+       UBRR1  = SERIAL_2X_UBBRVAL((uint16_t)LineCoding.BaudRateBPS);\r
+}\r
diff --git a/Demos/Device/LowLevel/USBtoSerial/USBtoSerial.h b/Demos/Device/LowLevel/USBtoSerial/USBtoSerial.h
new file mode 100644 (file)
index 0000000..8e7e8ae
--- /dev/null
@@ -0,0 +1,185 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  Header file for USBtoSerial.c.\r
+ */\r
+\r
+#ifndef _USB_SERIAL_H_\r
+#define _USB_SERIAL_H_\r
+\r
+       /* Includes: */\r
+               #include <avr/io.h>\r
+               #include <avr/wdt.h>\r
+               #include <avr/interrupt.h>\r
+               #include <avr/power.h>\r
+\r
+               #include "Descriptors.h"\r
+\r
+               #include "Lib/RingBuff.h"\r
+\r
+               #include <LUFA/Version.h>                         // Library Version Information\r
+               #include <LUFA/Drivers/USB/USB.h>                 // USB Functionality\r
+               #include <LUFA/Drivers/Peripheral/Serial.h>       // USART driver\r
+               #include <LUFA/Drivers/Board/LEDs.h>              // LEDs driver\r
+               #include <LUFA/Scheduler/Scheduler.h>             // Simple scheduler for task management\r
+\r
+       /* Macros: */\r
+               /** CDC Class specific request to get the current virtual serial port configuration settings. */\r
+               #define REQ_GetLineEncoding          0x21\r
+\r
+               /** CDC Class specific request to set the current virtual serial port configuration settings. */\r
+               #define REQ_SetLineEncoding          0x20\r
+\r
+               /** CDC Class specific request to set the current virtual serial port handshake line states. */\r
+               #define REQ_SetControlLineState      0x22\r
+               \r
+               /** Notification type constant for a change in the virtual serial port handshake line states, for\r
+                *  use with a USB_Notification_Header_t notification structure when sent to the host via the CDC \r
+                *  notification endpoint.\r
+                */\r
+               #define NOTIF_SerialState            0x20\r
+\r
+               /** Mask for the DTR handshake line for use with the REQ_SetControlLineState class specific request\r
+                *  from the host, to indicate that the DTR line state should be high.\r
+                */\r
+               #define CONTROL_LINE_OUT_DTR         (1 << 0)\r
+\r
+               /** Mask for the RTS handshake line for use with the REQ_SetControlLineState class specific request\r
+                *  from the host, to indicate that theRTS line state should be high.\r
+                */\r
+               #define CONTROL_LINE_OUT_RTS         (1 << 1)\r
+               \r
+               /** Mask for the DCD handshake line for use with the a NOTIF_SerialState class specific notification\r
+                *  from the device to the host, to indicate that the DCD line state is currently high.\r
+                */\r
+               #define CONTROL_LINE_IN_DCD          (1 << 0)\r
+\r
+               /** Mask for the DSR handshake line for use with the a NOTIF_SerialState class specific notification\r
+                *  from the device to the host, to indicate that the DSR line state is currently high.\r
+                */\r
+               #define CONTROL_LINE_IN_DSR          (1 << 1)\r
+\r
+               /** Mask for the BREAK handshake line for use with the a NOTIF_SerialState class specific notification\r
+                *  from the device to the host, to indicate that the BREAK line state is currently high.\r
+                */\r
+               #define CONTROL_LINE_IN_BREAK        (1 << 2)\r
+\r
+               /** Mask for the RING handshake line for use with the a NOTIF_SerialState class specific notification\r
+                *  from the device to the host, to indicate that the RING line state is currently high.\r
+                */\r
+               #define CONTROL_LINE_IN_RING         (1 << 3)\r
+\r
+               /** Mask for use with the a NOTIF_SerialState class specific notification from the device to the host,\r
+                *  to indicate that a framing error has occurred on the virtual serial port.\r
+                */\r
+               #define CONTROL_LINE_IN_FRAMEERROR   (1 << 4)\r
+\r
+               /** Mask for use with the a NOTIF_SerialState class specific notification from the device to the host,\r
+                *  to indicate that a parity error has occurred on the virtual serial port.\r
+                */\r
+               #define CONTROL_LINE_IN_PARITYERROR  (1 << 5)\r
+\r
+               /** Mask for use with the a NOTIF_SerialState class specific notification from the device to the host,\r
+                *  to indicate that a data overrun error has occurred on the virtual serial port.\r
+                */\r
+               #define CONTROL_LINE_IN_OVERRUNERROR (1 << 6)\r
+               \r
+       /* Type Defines: */\r
+               /** Type define for the virtual serial port line encoding settings, for storing the current USART configuration\r
+                *  as set by the host via a class specific request.\r
+                */\r
+               typedef struct\r
+               {\r
+                       uint32_t BaudRateBPS; /**< Baud rate of the virtual serial port, in bits per second */\r
+                       uint8_t  CharFormat; /**< Character format of the virtual serial port, a value from the\r
+                                             *   CDCDevice_CDC_LineCodingFormats_t enum\r
+                                             */\r
+                       uint8_t  ParityType; /**< Parity setting of the virtual serial port, a value from the\r
+                                             *   CDCDevice_LineCodingParity_t enum\r
+                                             */\r
+                       uint8_t  DataBits; /**< Bits of data per character of the virtual serial port */\r
+               } CDC_Line_Coding_t;\r
+               \r
+               /** Type define for a CDC notification, sent to the host via the CDC notification endpoint to indicate a\r
+                *  change in the device state asynchronously.\r
+                */\r
+               typedef struct\r
+               {\r
+                       uint8_t  NotificationType; /**< Notification type, a mask of REQDIR_*, REQTYPE_* and REQREC_* constants\r
+                                                   *   from the library StdRequestType.h header\r
+                                                   */\r
+                       uint8_t  Notification; /**< Notification value, a NOTIF_* constant */\r
+                       uint16_t wValue; /**< Notification wValue, notification-specific */\r
+                       uint16_t wIndex; /**< Notification wIndex, notification-specific */\r
+                       uint16_t wLength; /**< Notification wLength, notification-specific */\r
+               } USB_Notification_Header_t;\r
+               \r
+       /* Enums: */\r
+               /** Enum for the possible line encoding formats of a virtual serial port. */\r
+               enum CDCDevice_CDC_LineCodingFormats_t\r
+               {\r
+                       OneStopBit          = 0, /**< Each frame contains one stop bit */\r
+                       OneAndAHalfStopBits = 1, /**< Each frame contains one and a half stop bits */\r
+                       TwoStopBits         = 2, /**< Each frame contains two stop bits */\r
+               };\r
+               \r
+               /** Enum for the possible line encoding parity settings of a virtual serial port. */\r
+               enum CDCDevice_LineCodingParity_t\r
+               {\r
+                       Parity_None         = 0, /**< No parity bit mode on each frame */\r
+                       Parity_Odd          = 1, /**< Odd parity bit mode on each frame */\r
+                       Parity_Even         = 2, /**< Even parity bit mode on each frame */\r
+                       Parity_Mark         = 3, /**< Mark parity bit mode on each frame */\r
+                       Parity_Space        = 4, /**< Space parity bit mode on each frame */\r
+               };\r
+\r
+               /** Enum for the possible status codes for passing to the UpdateStatus() function. */\r
+               enum USBtoSerial_StatusCodes_t\r
+               {\r
+                       Status_USBNotReady    = 0, /**< USB is not ready (disconnected from a USB host) */\r
+                       Status_USBEnumerating = 1, /**< USB interface is enumerating */\r
+                       Status_USBReady       = 2, /**< USB interface is connected and ready */\r
+               };\r
+               \r
+       /* Tasks: */\r
+               TASK(CDC_Task);\r
+\r
+       /* Function Prototypes: */\r
+               void EVENT_USB_Connect(void);\r
+               void EVENT_USB_Disconnect(void);\r
+               void EVENT_USB_ConfigurationChanged(void);\r
+               void EVENT_USB_UnhandledControlPacket(void);\r
+\r
+               void ReconfigureUSART(void);\r
+               void UpdateStatus(uint8_t CurrentStatus);\r
+\r
+#endif\r
diff --git a/Demos/Device/LowLevel/USBtoSerial/USBtoSerial.txt b/Demos/Device/LowLevel/USBtoSerial/USBtoSerial.txt
new file mode 100644 (file)
index 0000000..e334672
--- /dev/null
@@ -0,0 +1,68 @@
+/** \file\r
+ *\r
+ *  This file contains special DoxyGen information for the generation of the main page and other special\r
+ *  documentation pages. It is not a project source file.\r
+ */\r
\r
+/** \mainpage USB to Serial Converter Demo (via CDC-ACM class)\r
+ *\r
+ *  \section SSec_Info USB Information:\r
+ *\r
+ *  The following table gives a rundown of the USB utilization of this demo.\r
+ *\r
+ *  <table>\r
+ *   <tr>\r
+ *    <td><b>USB Mode:</b></td>\r
+ *    <td>Device</td>\r
+ *   </tr>\r
+ *   <tr>\r
+ *    <td><b>USB Class:</b></td>\r
+ *    <td>Communications Device Class (CDC)</td>\r
+ *   </tr>\r
+ *   <tr> \r
+ *    <td><b>USB Subclass:</b></td>\r
+ *    <td>Abstract Control Model (ACM)</td>\r
+ *   </tr>\r
+ *   <tr>\r
+ *    <td><b>Relevant Standards:</b></td>\r
+ *    <td>USBIF CDC Class Standard</td>\r
+ *   </tr>\r
+ *   <tr>\r
+ *    <td><b>Usable Speeds:</b></td>\r
+ *    <td>Full Speed Mode</td>\r
+ *   </tr>\r
+ *  </table>\r
+ *\r
+ *  \section SSec_Description Project Description: \r
+ *\r
+ *  Communications Device Class demonstration application.\r
+ *  This gives a simple reference application for implementing\r
+ *  a USB to Serial converter using the CDC class. Sent and\r
+ *  received data on the serial port is communicated to the USB\r
+ *  host.\r
+ *  \r
+ *  After running this demo for the first time on a new computer,\r
+ *  you will need to supply the .INF file located in this demo\r
+ *  project's directory as the device's driver when running under\r
+ *  Windows. This will enable Windows to use its inbuilt CDC drivers,\r
+ *  negating the need for custom drivers for the device. Other\r
+ *  Operating Systems should automatically use their own inbuilt\r
+ *  CDC-ACM drivers.\r
+ *\r
+ *  \section SSec_Options Project Options\r
+ *\r
+ *  The following defines can be found in this demo, which can control the demo behaviour when defined, or changed in value.\r
+ *\r
+ *  <table>\r
+ *   <tr>\r
+ *    <td><b>Define Name:</b></td>\r
+ *    <td><b>Location:</b></td>\r
+ *    <td><b>Description:</b></td>\r
+ *   </tr>\r
+ *   <tr>\r
+ *    <td>BUFF_STATICSIZE</td>\r
+ *    <td>RingBuff.h</td>\r
+ *    <td>Defines the maximum number of bytes which can be buffered in each Ring Buffer.</td>\r
+ *   </tr>\r
+ *  </table>\r
+ */
\ No newline at end of file
diff --git a/Demos/Device/LowLevel/USBtoSerial/makefile b/Demos/Device/LowLevel/USBtoSerial/makefile
new file mode 100644 (file)
index 0000000..708e872
--- /dev/null
@@ -0,0 +1,735 @@
+# Hey Emacs, this is a -*- makefile -*-\r
+#----------------------------------------------------------------------------\r
+# WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al.\r
+#  >> Modified for use with the LUFA project. <<\r
+#\r
+# Released to the Public Domain\r
+#\r
+# Additional material for this makefile was written by:\r
+# Peter Fleury\r
+# Tim Henigan\r
+# Colin O'Flynn\r
+# Reiner Patommel\r
+# Markus Pfaff\r
+# Sander Pool\r
+# Frederik Rouleau\r
+# Carlos Lamas\r
+# Dean Camera\r
+# Opendous Inc.\r
+# Denver Gingerich\r
+#\r
+#----------------------------------------------------------------------------\r
+# On command line:\r
+#\r
+# make all = Make software.\r
+#\r
+# make clean = Clean out built project files.\r
+#\r
+# make coff = Convert ELF to AVR COFF.\r
+#\r
+# make extcoff = Convert ELF to AVR Extended COFF.\r
+#\r
+# make program = Download the hex file to the device, using avrdude.\r
+#                Please customize the avrdude settings below first!\r
+#\r
+# make dfu = Download the hex file to the device, using dfu-programmer (must\r
+#            have dfu-programmer installed).\r
+#\r
+# make flip = Download the hex file to the device, using Atmel FLIP (must\r
+#             have Atmel FLIP installed).\r
+#\r
+# make dfu-ee = Download the eeprom file to the device, using dfu-programmer\r
+#               (must have dfu-programmer installed).\r
+#\r
+# make flip-ee = Download the eeprom file to the device, using Atmel FLIP\r
+#                (must have Atmel FLIP installed).\r
+#\r
+# make doxygen = Generate DoxyGen documentation for the project (must have\r
+#                DoxyGen installed)\r
+#\r
+# make debug = Start either simulavr or avarice as specified for debugging, \r
+#              with avr-gdb or avr-insight as the front end for debugging.\r
+#\r
+# make filename.s = Just compile filename.c into the assembler code only.\r
+#\r
+# make filename.i = Create a preprocessed source file for use in submitting\r
+#                   bug reports to the GCC project.\r
+#\r
+# To rebuild project do "make clean" then "make all".\r
+#----------------------------------------------------------------------------\r
+\r
+\r
+# MCU name\r
+MCU = at90usb1287\r
+\r
+\r
+# Target board (see library "Board Types" documentation, USER or blank for projects not requiring\r
+# LUFA board drivers). If USER is selected, put custom board drivers in a directory called \r
+# "Board" inside the application directory.\r
+BOARD  = USBKEY\r
+\r
+\r
+# Processor frequency.\r
+#     This will define a symbol, F_CPU, in all source code files equal to the \r
+#     processor frequency. You can then use this symbol in your source code to \r
+#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done\r
+#     automatically to create a 32-bit value in your source code.\r
+#     Typical values are:\r
+#         F_CPU =  1000000\r
+#         F_CPU =  1843200\r
+#         F_CPU =  2000000\r
+#         F_CPU =  3686400\r
+#         F_CPU =  4000000\r
+#         F_CPU =  7372800\r
+#         F_CPU =  8000000\r
+#         F_CPU = 11059200\r
+#         F_CPU = 14745600\r
+#         F_CPU = 16000000\r
+#         F_CPU = 18432000\r
+#         F_CPU = 20000000\r
+F_CPU = 8000000\r
+\r
+\r
+# Input clock frequency.\r
+#     This will define a symbol, F_CLOCK, in all source code files equal to the \r
+#     input clock frequency (before any prescaling is performed). This value may\r
+#     differ from F_CPU if prescaling is used on the latter, and is required as the\r
+#     raw input clock is fed directly to the PLL sections of the AVR for high speed\r
+#     clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'\r
+#     at the end, this will be done automatically to create a 32-bit value in your\r
+#     source code.\r
+#\r
+#     If no clock division is performed on the input clock inside the AVR (via the\r
+#     CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.\r
+F_CLOCK = 8000000\r
+\r
+\r
+# Output format. (can be srec, ihex, binary)\r
+FORMAT = ihex\r
+\r
+\r
+# Target file name (without extension).\r
+TARGET = USBtoSerial\r
+\r
+\r
+# Object files directory\r
+#     To put object files in current directory, use a dot (.), do NOT make\r
+#     this an empty or blank macro!\r
+OBJDIR = .\r
+\r
+\r
+# Path to the LUFA library\r
+LUFA_PATH = ../../..\r
+\r
+\r
+# List C source files here. (C dependencies are automatically generated.)\r
+SRC = $(TARGET).c                                                 \\r
+         Descriptors.c                                               \\r
+         Lib/RingBuff.c                                              \\r
+         $(LUFA_PATH)/LUFA/Scheduler/Scheduler.c                     \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/DevChapter9.c        \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Endpoint.c           \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Host.c               \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/HostChapter9.c       \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/LowLevel.c           \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Pipe.c               \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/Events.c            \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBInterrupt.c      \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBTask.c           \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/ConfigDescriptor.c  \\r
+         $(LUFA_PATH)/LUFA/Drivers/USB/Class/HIDParser.c             \\r
+\r
+\r
+# List C++ source files here. (C dependencies are automatically generated.)\r
+CPPSRC = \r
+\r
+\r
+# List Assembler source files here.\r
+#     Make them always end in a capital .S.  Files ending in a lowercase .s\r
+#     will not be considered source files but generated files (assembler\r
+#     output from the compiler), and will be deleted upon "make clean"!\r
+#     Even though the DOS/Win* filesystem matches both .s and .S the same,\r
+#     it will preserve the spelling of the filenames, and gcc itself does\r
+#     care about how the name is spelled on its command-line.\r
+ASRC =\r
+\r
+\r
+# Optimization level, can be [0, 1, 2, 3, s]. \r
+#     0 = turn off optimization. s = optimize for size.\r
+#     (Note: 3 is not always the best optimization level. See avr-libc FAQ.)\r
+OPT = s\r
+\r
+\r
+# Debugging format.\r
+#     Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs.\r
+#     AVR Studio 4.10 requires dwarf-2.\r
+#     AVR [Extended] COFF format requires stabs, plus an avr-objcopy run.\r
+DEBUG = dwarf-2\r
+\r
+\r
+# List any extra directories to look for include files here.\r
+#     Each directory must be seperated by a space.\r
+#     Use forward slashes for directory separators.\r
+#     For a directory that has spaces, enclose it in quotes.\r
+EXTRAINCDIRS = $(LUFA_PATH)/\r
+\r
+\r
+# Compiler flag to set the C Standard level.\r
+#     c89   = "ANSI" C\r
+#     gnu89 = c89 plus GCC extensions\r
+#     c99   = ISO C99 standard (not yet fully implemented)\r
+#     gnu99 = c99 plus GCC extensions\r
+CSTANDARD = -std=gnu99\r
+\r
+\r
+# Place -D or -U options here for C sources\r
+CDEFS  = -DF_CPU=$(F_CPU)UL -DF_CLOCK=$(F_CLOCK)UL -DBOARD=BOARD_$(BOARD)\r
+CDEFS += -DUSE_NONSTANDARD_DESCRIPTOR_NAMES -DNO_STREAM_CALLBACKS -DUSB_DEVICE_ONLY\r
+CDEFS += -DFIXED_CONTROL_ENDPOINT_SIZE=8 -DUSE_SINGLE_DEVICE_CONFIGURATION\r
+CDEFS += -DUSE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)"\r
+\r
+\r
+# Place -D or -U options here for ASM sources\r
+ADEFS = -DF_CPU=$(F_CPU)\r
+\r
+\r
+# Place -D or -U options here for C++ sources\r
+CPPDEFS = -DF_CPU=$(F_CPU)UL\r
+#CPPDEFS += -D__STDC_LIMIT_MACROS\r
+#CPPDEFS += -D__STDC_CONSTANT_MACROS\r
+\r
+\r
+\r
+#---------------- Compiler Options C ----------------\r
+#  -g*:          generate debugging information\r
+#  -O*:          optimization level\r
+#  -f...:        tuning, see GCC manual and avr-libc documentation\r
+#  -Wall...:     warning level\r
+#  -Wa,...:      tell GCC to pass this to the assembler.\r
+#    -adhlns...: create assembler listing\r
+CFLAGS = -g$(DEBUG)\r
+CFLAGS += $(CDEFS)\r
+CFLAGS += -O$(OPT)\r
+CFLAGS += -funsigned-char\r
+CFLAGS += -funsigned-bitfields\r
+CFLAGS += -ffunction-sections\r
+CFLAGS += -fpack-struct\r
+CFLAGS += -fshort-enums\r
+CFLAGS += -finline-limit=20\r
+CFLAGS += -Wall\r
+CFLAGS += -Wstrict-prototypes\r
+CFLAGS += -Wundef\r
+#CFLAGS += -fno-unit-at-a-time\r
+#CFLAGS += -Wunreachable-code\r
+#CFLAGS += -Wsign-compare\r
+CFLAGS += -Wa,-adhlns=$(<:%.c=$(OBJDIR)/%.lst)\r
+CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))\r
+CFLAGS += $(CSTANDARD)\r
+\r
+\r
+#---------------- Compiler Options C++ ----------------\r
+#  -g*:          generate debugging information\r
+#  -O*:          optimization level\r
+#  -f...:        tuning, see GCC manual and avr-libc documentation\r
+#  -Wall...:     warning level\r
+#  -Wa,...:      tell GCC to pass this to the assembler.\r
+#    -adhlns...: create assembler listing\r
+CPPFLAGS = -g$(DEBUG)\r
+CPPFLAGS += $(CPPDEFS)\r
+CPPFLAGS += -O$(OPT)\r
+CPPFLAGS += -funsigned-char\r
+CPPFLAGS += -funsigned-bitfields\r
+CPPFLAGS += -fpack-struct\r
+CPPFLAGS += -fshort-enums\r
+CPPFLAGS += -fno-exceptions\r
+CPPFLAGS += -Wall\r
+CFLAGS += -Wundef\r
+#CPPFLAGS += -mshort-calls\r
+#CPPFLAGS += -fno-unit-at-a-time\r
+#CPPFLAGS += -Wstrict-prototypes\r
+#CPPFLAGS += -Wunreachable-code\r
+#CPPFLAGS += -Wsign-compare\r
+CPPFLAGS += -Wa,-adhlns=$(<:%.cpp=$(OBJDIR)/%.lst)\r
+CPPFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))\r
+#CPPFLAGS += $(CSTANDARD)\r
+\r
+\r
+#---------------- Assembler Options ----------------\r
+#  -Wa,...:   tell GCC to pass this to the assembler.\r
+#  -adhlns:   create listing\r
+#  -gstabs:   have the assembler create line number information; note that\r
+#             for use in COFF files, additional information about filenames\r
+#             and function names needs to be present in the assembler source\r
+#             files -- see avr-libc docs [FIXME: not yet described there]\r
+#  -listing-cont-lines: Sets the maximum number of continuation lines of hex \r
+#       dump that will be displayed for a given single line of source input.\r
+ASFLAGS = $(ADEFS) -Wa,-adhlns=$(<:%.S=$(OBJDIR)/%.lst),-gstabs,--listing-cont-lines=100\r
+\r
+\r
+#---------------- Library Options ----------------\r
+# Minimalistic printf version\r
+PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min\r
+\r
+# Floating point printf version (requires MATH_LIB = -lm below)\r
+PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt\r
+\r
+# If this is left blank, then it will use the Standard printf version.\r
+PRINTF_LIB = \r
+#PRINTF_LIB = $(PRINTF_LIB_MIN)\r
+#PRINTF_LIB = $(PRINTF_LIB_FLOAT)\r
+\r
+\r
+# Minimalistic scanf version\r
+SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min\r
+\r
+# Floating point + %[ scanf version (requires MATH_LIB = -lm below)\r
+SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt\r
+\r
+# If this is left blank, then it will use the Standard scanf version.\r
+SCANF_LIB = \r
+#SCANF_LIB = $(SCANF_LIB_MIN)\r
+#SCANF_LIB = $(SCANF_LIB_FLOAT)\r
+\r
+\r
+MATH_LIB = -lm\r
+\r
+\r
+# List any extra directories to look for libraries here.\r
+#     Each directory must be seperated by a space.\r
+#     Use forward slashes for directory separators.\r
+#     For a directory that has spaces, enclose it in quotes.\r
+EXTRALIBDIRS = \r
+\r
+\r
+\r
+#---------------- External Memory Options ----------------\r
+\r
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),\r
+# used for variables (.data/.bss) and heap (malloc()).\r
+#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff\r
+\r
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),\r
+# only used for heap (malloc()).\r
+#EXTMEMOPTS = -Wl,--section-start,.data=0x801100,--defsym=__heap_end=0x80ffff\r
+\r
+EXTMEMOPTS =\r
+\r
+\r
+\r
+#---------------- Linker Options ----------------\r
+#  -Wl,...:     tell GCC to pass this to linker.\r
+#    -Map:      create map file\r
+#    --cref:    add cross reference to  map file\r
+LDFLAGS = -Wl,-Map=$(TARGET).map,--cref\r
+LDFLAGS += -Wl,--relax \r
+LDFLAGS += -Wl,--gc-sections\r
+LDFLAGS += $(EXTMEMOPTS)\r
+LDFLAGS += $(patsubst %,-L%,$(EXTRALIBDIRS))\r
+LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)\r
+#LDFLAGS += -T linker_script.x\r
+\r
+\r
+\r
+#---------------- Programming Options (avrdude) ----------------\r
+\r
+# Programming hardware: alf avr910 avrisp bascom bsd \r
+# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500\r
+#\r
+# Type: avrdude -c ?\r
+# to get a full listing.\r
+#\r
+AVRDUDE_PROGRAMMER = jtagmkII\r
+\r
+# com1 = serial port. Use lpt1 to connect to parallel port.\r
+AVRDUDE_PORT = usb\r
+\r
+AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex\r
+#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep\r
+\r
+\r
+# Uncomment the following if you want avrdude's erase cycle counter.\r
+# Note that this counter needs to be initialized first using -Yn,\r
+# see avrdude manual.\r
+#AVRDUDE_ERASE_COUNTER = -y\r
+\r
+# Uncomment the following if you do /not/ wish a verification to be\r
+# performed after programming the device.\r
+#AVRDUDE_NO_VERIFY = -V\r
+\r
+# Increase verbosity level.  Please use this when submitting bug\r
+# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude> \r
+# to submit bug reports.\r
+#AVRDUDE_VERBOSE = -v -v\r
+\r
+AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)\r
+AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY)\r
+AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE)\r
+AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER)\r
+\r
+\r
+\r
+#---------------- Debugging Options ----------------\r
+\r
+# For simulavr only - target MCU frequency.\r
+DEBUG_MFREQ = $(F_CPU)\r
+\r
+# Set the DEBUG_UI to either gdb or insight.\r
+# DEBUG_UI = gdb\r
+DEBUG_UI = insight\r
+\r
+# Set the debugging back-end to either avarice, simulavr.\r
+DEBUG_BACKEND = avarice\r
+#DEBUG_BACKEND = simulavr\r
+\r
+# GDB Init Filename.\r
+GDBINIT_FILE = __avr_gdbinit\r
+\r
+# When using avarice settings for the JTAG\r
+JTAG_DEV = /dev/com1\r
+\r
+# Debugging port used to communicate between GDB / avarice / simulavr.\r
+DEBUG_PORT = 4242\r
+\r
+# Debugging host used to communicate between GDB / avarice / simulavr, normally\r
+#     just set to localhost unless doing some sort of crazy debugging when \r
+#     avarice is running on a different computer.\r
+DEBUG_HOST = localhost\r
+\r
+\r
+\r
+#============================================================================\r
+\r
+\r
+# Define programs and commands.\r
+SHELL = sh\r
+CC = avr-gcc\r
+OBJCOPY = avr-objcopy\r
+OBJDUMP = avr-objdump\r
+SIZE = avr-size\r
+AR = avr-ar rcs\r
+NM = avr-nm\r
+AVRDUDE = avrdude\r
+REMOVE = rm -f\r
+REMOVEDIR = rm -rf\r
+COPY = cp\r
+WINSHELL = cmd\r
+\r
+# Define Messages\r
+# English\r
+MSG_ERRORS_NONE = Errors: none\r
+MSG_BEGIN = -------- begin --------\r
+MSG_END = --------  end  --------\r
+MSG_SIZE_BEFORE = Size before: \r
+MSG_SIZE_AFTER = Size after:\r
+MSG_COFF = Converting to AVR COFF:\r
+MSG_EXTENDED_COFF = Converting to AVR Extended COFF:\r
+MSG_FLASH = Creating load file for Flash:\r
+MSG_EEPROM = Creating load file for EEPROM:\r
+MSG_EXTENDED_LISTING = Creating Extended Listing:\r
+MSG_SYMBOL_TABLE = Creating Symbol Table:\r
+MSG_LINKING = Linking:\r
+MSG_COMPILING = Compiling C:\r
+MSG_COMPILING_CPP = Compiling C++:\r
+MSG_ASSEMBLING = Assembling:\r
+MSG_CLEANING = Cleaning project:\r
+MSG_CREATING_LIBRARY = Creating library:\r
+\r
+\r
+\r
+\r
+# Define all object files.\r
+OBJ = $(SRC:%.c=$(OBJDIR)/%.o) $(CPPSRC:%.cpp=$(OBJDIR)/%.o) $(ASRC:%.S=$(OBJDIR)/%.o) \r
+\r
+# Define all listing files.\r
+LST = $(SRC:%.c=$(OBJDIR)/%.lst) $(CPPSRC:%.cpp=$(OBJDIR)/%.lst) $(ASRC:%.S=$(OBJDIR)/%.lst) \r
+\r
+\r
+# Compiler flags to generate dependency files.\r
+GENDEPFLAGS = -MMD -MP -MF .dep/$(@F).d\r
+\r
+\r
+# Combine all necessary flags and optional flags.\r
+# Add target processor to flags.\r
+ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS)\r
+ALL_CPPFLAGS = -mmcu=$(MCU) -I. -x c++ $(CPPFLAGS) $(GENDEPFLAGS)\r
+ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)\r
+\r
+\r
+\r
+\r
+\r
+# Default target.\r
+all: begin gccversion sizebefore build checkhooks checklibmode checkboard sizeafter end\r
+\r
+# Change the build target to build a HEX file or a library.\r
+build: elf hex eep lss sym\r
+#build: lib\r
+\r
+\r
+elf: $(TARGET).elf\r
+hex: $(TARGET).hex\r
+eep: $(TARGET).eep\r
+lss: $(TARGET).lss\r
+sym: $(TARGET).sym\r
+LIBNAME=lib$(TARGET).a\r
+lib: $(LIBNAME)\r
+\r
+\r
+\r
+# Eye candy.\r
+# AVR Studio 3.x does not check make's exit code but relies on\r
+# the following magic strings to be generated by the compile job.\r
+begin:\r
+       @echo\r
+       @echo $(MSG_BEGIN)\r
+\r
+end:\r
+       @echo $(MSG_END)\r
+       @echo\r
+\r
+\r
+# Display size of file.\r
+HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex\r
+ELFSIZE = $(SIZE) $(MCU_FLAG) $(FORMAT_FLAG) $(TARGET).elf\r
+MCU_FLAG = $(shell $(SIZE) --help | grep -- --mcu > /dev/null && echo --mcu=$(MCU) )\r
+FORMAT_FLAG = $(shell $(SIZE) --help | grep -- --format=.*avr > /dev/null && echo --format=avr )\r
+\r
+sizebefore:\r
+       @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \\r
+       2>/dev/null; echo; fi\r
+\r
+sizeafter:\r
+       @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \\r
+       2>/dev/null; echo; fi\r
+\r
+checkhooks: build\r
+       @echo\r
+       @echo ------- Unhooked LUFA Events -------\r
+       @$(shell) (grep -s '^EVENT_.*LUFA/.*\\.o' $(TARGET).map | \\r
+                  cut -d' ' -f1 | cut -d'_' -f2- | grep ".*") || \\r
+                          echo "(None)"\r
+       @echo ------------------------------------\r
+\r
+checklibmode:\r
+       @echo\r
+       @echo ----------- Library Mode -----------\r
+       @$(shell) ($(CC) $(ALL_CFLAGS) -E -dM - < /dev/null \\r
+                 | grep 'USB_\(DEVICE\|HOST\)_ONLY' | cut -d' ' -f2 | grep ".*") \\r
+                 || echo "No specific mode (both device and host mode allowable)."\r
+       @echo ------------------------------------\r
+\r
+checkboard:\r
+       @echo\r
+       @echo ---------- Selected Board ----------\r
+       @echo Selected board model is $(BOARD).\r
+       @echo ------------------------------------\r
+       \r
+# Display compiler version information.\r
+gccversion : \r
+       @$(CC) --version\r
+\r
+\r
+\r
+# Program the device.  \r
+program: $(TARGET).hex $(TARGET).eep\r
+       $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)\r
+\r
+flip: $(TARGET).hex\r
+       batchisp -hardware usb -device $(MCU) -operation erase f\r
+       batchisp -hardware usb -device $(MCU) -operation loadbuffer $(TARGET).hex program\r
+       batchisp -hardware usb -device $(MCU) -operation start reset 0\r
+\r
+dfu: $(TARGET).hex\r
+       dfu-programmer $(MCU) erase\r
+       dfu-programmer $(MCU) flash --debug 1 $(TARGET).hex\r
+       dfu-programmer $(MCU) reset\r
+\r
+flip-ee: $(TARGET).hex $(TARGET).eep\r
+       copy $(TARGET).eep $(TARGET)eep.hex\r
+       batchisp -hardware usb -device $(MCU) -operation memory EEPROM erase\r
+       batchisp -hardware usb -device $(MCU) -operation memory EEPROM loadbuffer $(TARGET)eep.hex program\r
+       batchisp -hardware usb -device $(MCU) -operation start reset 0\r
+\r
+dfu-ee: $(TARGET).hex $(TARGET).eep\r
+       dfu-programmer $(MCU) flash-eeprom --debug 1 --suppress-bootloader-mem $(TARGET).eep\r
+       dfu-programmer $(MCU) reset\r
+\r
+\r
+# Generate avr-gdb config/init file which does the following:\r
+#     define the reset signal, load the target file, connect to target, and set \r
+#     a breakpoint at main().\r
+gdb-config: \r
+       @$(REMOVE) $(GDBINIT_FILE)\r
+       @echo define reset >> $(GDBINIT_FILE)\r
+       @echo SIGNAL SIGHUP >> $(GDBINIT_FILE)\r
+       @echo end >> $(GDBINIT_FILE)\r
+       @echo file $(TARGET).elf >> $(GDBINIT_FILE)\r
+       @echo target remote $(DEBUG_HOST):$(DEBUG_PORT)  >> $(GDBINIT_FILE)\r
+ifeq ($(DEBUG_BACKEND),simulavr)\r
+       @echo load  >> $(GDBINIT_FILE)\r
+endif\r
+       @echo break main >> $(GDBINIT_FILE)\r
+\r
+debug: gdb-config $(TARGET).elf\r
+ifeq ($(DEBUG_BACKEND), avarice)\r
+       @echo Starting AVaRICE - Press enter when "waiting to connect" message displays.\r
+       @$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \\r
+       $(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT)\r
+       @$(WINSHELL) /c pause\r
+\r
+else\r
+       @$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \\r
+       $(DEBUG_MFREQ) --port $(DEBUG_PORT)\r
+endif\r
+       @$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE)\r
+\r
+\r
+\r
+\r
+# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.\r
+COFFCONVERT = $(OBJCOPY) --debugging\r
+COFFCONVERT += --change-section-address .data-0x800000\r
+COFFCONVERT += --change-section-address .bss-0x800000\r
+COFFCONVERT += --change-section-address .noinit-0x800000\r
+COFFCONVERT += --change-section-address .eeprom-0x810000\r
+\r
+\r
+\r
+coff: $(TARGET).elf\r
+       @echo\r
+       @echo $(MSG_COFF) $(TARGET).cof\r
+       $(COFFCONVERT) -O coff-avr $< $(TARGET).cof\r
+\r
+\r
+extcoff: $(TARGET).elf\r
+       @echo\r
+       @echo $(MSG_EXTENDED_COFF) $(TARGET).cof\r
+       $(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof\r
+\r
+\r
+\r
+# Create final output files (.hex, .eep) from ELF output file.\r
+%.hex: %.elf\r
+       @echo\r
+       @echo $(MSG_FLASH) $@\r
+       $(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@\r
+\r
+%.eep: %.elf\r
+       @echo\r
+       @echo $(MSG_EEPROM) $@\r
+       -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \\r
+       --change-section-lma .eeprom=0 --no-change-warnings -O $(FORMAT) $< $@ || exit 0\r
+\r
+# Create extended listing file from ELF output file.\r
+%.lss: %.elf\r
+       @echo\r
+       @echo $(MSG_EXTENDED_LISTING) $@\r
+       $(OBJDUMP) -h -z -S $< > $@\r
+\r
+# Create a symbol table from ELF output file.\r
+%.sym: %.elf\r
+       @echo\r
+       @echo $(MSG_SYMBOL_TABLE) $@\r
+       $(NM) -n $< > $@\r
+\r
+\r
+\r
+# Create library from object files.\r
+.SECONDARY : $(TARGET).a\r
+.PRECIOUS : $(OBJ)\r
+%.a: $(OBJ)\r
+       @echo\r
+       @echo $(MSG_CREATING_LIBRARY) $@\r
+       $(AR) $@ $(OBJ)\r
+\r
+\r
+# Link: create ELF output file from object files.\r
+.SECONDARY : $(TARGET).elf\r
+.PRECIOUS : $(OBJ)\r
+%.elf: $(OBJ)\r
+       @echo\r
+       @echo $(MSG_LINKING) $@\r
+       $(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)\r
+\r
+\r
+# Compile: create object files from C source files.\r
+$(OBJDIR)/%.o : %.c\r
+       @echo\r
+       @echo $(MSG_COMPILING) $<\r
+       $(CC) -c $(ALL_CFLAGS) $< -o $@ \r
+\r
+\r
+# Compile: create object files from C++ source files.\r
+$(OBJDIR)/%.o : %.cpp\r
+       @echo\r
+       @echo $(MSG_COMPILING_CPP) $<\r
+       $(CC) -c $(ALL_CPPFLAGS) $< -o $@ \r
+\r
+\r
+# Compile: create assembler files from C source files.\r
+%.s : %.c\r
+       $(CC) -S $(ALL_CFLAGS) $< -o $@\r
+\r
+\r
+# Compile: create assembler files from C++ source files.\r
+%.s : %.cpp\r
+       $(CC) -S $(ALL_CPPFLAGS) $< -o $@\r
+\r
+\r
+# Assemble: create object files from assembler source files.\r
+$(OBJDIR)/%.o : %.S\r
+       @echo\r
+       @echo $(MSG_ASSEMBLING) $<\r
+       $(CC) -c $(ALL_ASFLAGS) $< -o $@\r
+\r
+\r
+# Create preprocessed source for use in sending a bug report.\r
+%.i : %.c\r
+       $(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ \r
+       \r
+\r
+# Target: clean project.\r
+clean: begin clean_list clean_binary end\r
+\r
+clean_binary:\r
+       $(REMOVE) $(TARGET).hex\r
+       \r
+clean_list:\r
+       @echo $(MSG_CLEANING)\r
+       $(REMOVE) $(TARGET).eep\r
+       $(REMOVE) $(TARGET)eep.hex\r
+       $(REMOVE) $(TARGET).cof\r
+       $(REMOVE) $(TARGET).elf\r
+       $(REMOVE) $(TARGET).map\r
+       $(REMOVE) $(TARGET).sym\r
+       $(REMOVE) $(TARGET).lss\r
+       $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.o)\r
+       $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.lst)\r
+       $(REMOVE) $(SRC:.c=.s)\r
+       $(REMOVE) $(SRC:.c=.d)\r
+       $(REMOVE) $(SRC:.c=.i)\r
+       $(REMOVEDIR) .dep\r
+\r
+\r
+doxygen:\r
+       @echo Generating Project Documentation...\r
+       @doxygen Doxygen.conf\r
+       @echo Documentation Generation Complete.\r
+\r
+clean_doxygen:\r
+       rm -rf Documentation\r
+\r
+# Create object files directory\r
+$(shell mkdir $(OBJDIR) 2>/dev/null)\r
+\r
+\r
+# Include the dependency files.\r
+-include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)\r
+\r
+\r
+# Listing of phony targets.\r
+.PHONY : all checkhooks checklibmode checkboard   \\r
+begin finish end sizebefore sizeafter gccversion  \\r
+build elf hex eep lss sym coff extcoff clean      \\r
+clean_list clean_binary program debug gdb-config  \\r
+doxygen dfu flip flip-ee dfu-ee
\ No newline at end of file
diff --git a/Demos/Device/LowLevel/makefile b/Demos/Device/LowLevel/makefile
new file mode 100644 (file)
index 0000000..6c21911
--- /dev/null
@@ -0,0 +1,69 @@
+#
+#             LUFA Library
+#     Copyright (C) Dean Camera, 2009.
+#              
+#  dean [at] fourwalledcubicle [dot] com
+#      www.fourwalledcubicle.com
+#
+
+# Makefile to build all the LUFA Device Demos. Call with "make all" to
+# rebuild all Device demos.
+
+# Projects are pre-cleaned before each one is built, to ensure any
+# custom LUFA library build options are reflected in the compiled
+# code.
+
+all:
+       make -C AudioInput clean
+       make -C AudioInput all
+
+       make -C AudioOutput clean
+       make -C AudioOutput all
+
+       make -C CDC clean
+       make -C CDC all
+
+       make -C DualCDC clean
+       make -C DualCDC all
+
+       make -C GenericHID clean
+       make -C GenericHID all
+
+       make -C Joystick clean
+       make -C Joystick all
+
+       make -C Keyboard clean
+       make -C Keyboard all
+
+       make -C KeyboardMouse clean
+       make -C KeyboardMouse all
+
+       make -C MassStorage clean
+       make -C MassStorage all
+
+       make -C MIDI clean
+       make -C MIDI all
+
+       make -C Mouse clean
+       make -C Mouse all
+
+       make -C RNDISEthernet clean
+       make -C RNDISEthernet all
+
+       make -C USBtoSerial clean
+       make -C USBtoSerial all
+
+%:
+       make -C AudioInput $@
+       make -C AudioOutput $@
+       make -C CDC $@
+       make -C DualCDC $@
+       make -C GenericHID $@
+       make -C Joystick $@
+       make -C Keyboard $@
+       make -C KeyboardMouse $@
+       make -C MassStorage $@
+       make -C MIDI $@
+       make -C Mouse $@
+       make -C RNDISEthernet $@
+       make -C USBtoSerial $@
diff --git a/Demos/Device/MIDI/Descriptors.c b/Demos/Device/MIDI/Descriptors.c
deleted file mode 100644 (file)
index 6973a4c..0000000
+++ /dev/null
@@ -1,325 +0,0 @@
-/*\r
-             LUFA Library\r
-     Copyright (C) Dean Camera, 2009.\r
-              \r
-  dean [at] fourwalledcubicle [dot] com\r
-      www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
-  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
-  Permission to use, copy, modify, and distribute this software\r
-  and its documentation for any purpose and without fee is hereby\r
-  granted, provided that the above copyright notice appear in all\r
-  copies and that both that the copyright notice and this\r
-  permission notice and warranty disclaimer appear in supporting\r
-  documentation, and that the name of the author not be used in\r
-  advertising or publicity pertaining to distribution of the\r
-  software without specific, written prior permission.\r
-\r
-  The author disclaim all warranties with regard to this\r
-  software, including all implied warranties of merchantability\r
-  and fitness.  In no event shall the author be liable for any\r
-  special, indirect or consequential damages or any damages\r
-  whatsoever resulting from loss of use, data or profits, whether\r
-  in an action of contract, negligence or other tortious action,\r
-  arising out of or in connection with the use or performance of\r
-  this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- *  USB Device Descriptors, for library use when in USB device mode. Descriptors are special \r
- *  computer-readable structures which the host requests upon device enumeration, to determine\r
- *  the device's capabilities and functions.  \r
- */\r
\r
-#include "Descriptors.h"\r
-\r
-/** Device descriptor structure. This descriptor, located in FLASH memory, describes the overall\r
- *  device characteristics, including the supported USB version, control endpoint size and the\r
- *  number of device configurations. The descriptor is read out by the USB host when the enumeration\r
- *  process begins.\r
- */\r
-USB_Descriptor_Device_t PROGMEM DeviceDescriptor =\r
-{\r
-       .Header                 = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device},\r
-               \r
-       .USBSpecification       = VERSION_BCD(01.10),\r
-       .Class                  = 0x00,\r
-       .SubClass               = 0x00,\r
-       .Protocol               = 0x00,\r
-                               \r
-       .Endpoint0Size          = FIXED_CONTROL_ENDPOINT_SIZE,\r
-               \r
-       .VendorID               = 0x03EB,\r
-       .ProductID              = 0x2048,\r
-       .ReleaseNumber          = 0x0000,\r
-               \r
-       .ManufacturerStrIndex   = 0x01,\r
-       .ProductStrIndex        = 0x02,\r
-       .SerialNumStrIndex      = NO_DESCRIPTOR,\r
-               \r
-       .NumberOfConfigurations = 1\r
-};\r
-\r
-/** Configuration descriptor structure. This descriptor, located in FLASH memory, describes the usage\r
- *  of the device in one of its supported configurations, including information about any device interfaces\r
- *  and endpoints. The descriptor is read out by the USB host during the enumeration process when selecting\r
- *  a configuration so that the host may correctly communicate with the USB device.\r
- */\r
-USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =\r
-{\r
-       .Config = \r
-               {\r
-                       .Header                   = {.Size = sizeof(USB_Descriptor_Configuration_Header_t), .Type = DTYPE_Configuration},\r
-\r
-                       .TotalConfigurationSize   = sizeof(USB_Descriptor_Configuration_t),\r
-                       .TotalInterfaces          = 2,\r
-\r
-                       .ConfigurationNumber      = 1,\r
-                       .ConfigurationStrIndex    = NO_DESCRIPTOR,\r
-                               \r
-                       .ConfigAttributes         = (USB_CONFIG_ATTR_BUSPOWERED | USB_CONFIG_ATTR_SELFPOWERED),\r
-                       \r
-                       .MaxPowerConsumption      = USB_CONFIG_POWER_MA(100)\r
-               },\r
-               \r
-       .AudioControlInterface = \r
-               {\r
-                       .Header                   = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},\r
-\r
-                       .InterfaceNumber          = 0,\r
-                       .AlternateSetting         = 0,\r
-                       \r
-                       .TotalEndpoints           = 0,\r
-                               \r
-                       .Class                    = 0x01,\r
-                       .SubClass                 = 0x01,\r
-                       .Protocol                 = 0x00,\r
-                               \r
-                       .InterfaceStrIndex        = NO_DESCRIPTOR                       \r
-               },\r
-       \r
-       .AudioControlInterface_SPC = \r
-               {\r
-                       .Header                   = {.Size = sizeof(USB_AudioInterface_AC_t), .Type = DTYPE_AudioInterface},\r
-                       .Subtype                  = DSUBTYPE_Header,\r
-                       \r
-                       .ACSpecification          = VERSION_BCD(01.00),\r
-                       .TotalLength              = sizeof(USB_AudioInterface_AC_t),\r
-                       \r
-                       .InCollection             = 1,\r
-                       .InterfaceNumbers         = {1},                        \r
-               },\r
-\r
-       .AudioStreamInterface = \r
-               {\r
-                       .Header                   = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},\r
-\r
-                       .InterfaceNumber          = 1,\r
-                       .AlternateSetting         = 0,\r
-                       \r
-                       .TotalEndpoints           = 2,\r
-                               \r
-                       .Class                    = 0x01,\r
-                       .SubClass                 = 0x03,\r
-                       .Protocol                 = 0x00,\r
-                               \r
-                       .InterfaceStrIndex        = NO_DESCRIPTOR\r
-               },\r
-               \r
-       .AudioStreamInterface_SPC = \r
-               {\r
-                       .Header                   = {.Size = sizeof(USB_AudioInterface_MIDI_AS_t), .Type = DTYPE_AudioInterface},\r
-                       .Subtype                  = DSUBTYPE_General,\r
-\r
-                       .AudioSpecification       = VERSION_BCD(01.00),\r
-                       \r
-                       .TotalLength              = (sizeof(USB_Descriptor_Configuration_t) - offsetof(USB_Descriptor_Configuration_t, AudioStreamInterface_SPC))\r
-               },\r
-\r
-       .MIDI_In_Jack_Emb = \r
-               {\r
-                       .Header                   = {.Size = sizeof(USB_MIDI_In_Jack_t), .Type = DTYPE_AudioInterface},\r
-                       .Subtype                  = DSUBTYPE_InputJack,\r
-                       \r
-                       .JackType                 = MIDI_JACKTYPE_EMBEDDED,\r
-                       .JackID                   = 0x01,\r
-                       \r
-                       .JackStrIndex             = NO_DESCRIPTOR\r
-               },\r
-\r
-       .MIDI_In_Jack_Ext = \r
-               {\r
-                       .Header                   = {.Size = sizeof(USB_MIDI_In_Jack_t), .Type = DTYPE_AudioInterface},\r
-                       .Subtype                  = DSUBTYPE_InputJack,\r
-                       \r
-                       .JackType                 = MIDI_JACKTYPE_EXTERNAL,\r
-                       .JackID                   = 0x02,\r
-                       \r
-                       .JackStrIndex             = NO_DESCRIPTOR\r
-               },\r
-               \r
-       .MIDI_Out_Jack_Emb = \r
-               {\r
-                       .Header                   = {.Size = sizeof(USB_MIDI_Out_Jack_t), .Type = DTYPE_AudioInterface},\r
-                       .Subtype                  = DSUBTYPE_OutputJack,\r
-                       \r
-                       .JackType                 = MIDI_JACKTYPE_EMBEDDED,\r
-                       .JackID                   = 0x03,\r
-\r
-                       .NumberOfPins             = 1,\r
-                       .SourceJackID             = {0x02},\r
-                       .SourcePinID              = {0x01},\r
-                       \r
-                       .JackStrIndex             = NO_DESCRIPTOR\r
-               },\r
-\r
-       .MIDI_Out_Jack_Ext = \r
-               {\r
-                       .Header                   = {.Size = sizeof(USB_MIDI_Out_Jack_t), .Type = DTYPE_AudioInterface},\r
-                       .Subtype                  = DSUBTYPE_OutputJack,\r
-                       \r
-                       .JackType                 = MIDI_JACKTYPE_EXTERNAL,\r
-                       .JackID                   = 0x04,\r
-\r
-                       .NumberOfPins             = 1,\r
-                       .SourceJackID             = {0x01},\r
-                       .SourcePinID              = {0x01},\r
-                       \r
-                       .JackStrIndex             = NO_DESCRIPTOR\r
-               },\r
-\r
-       .MIDI_In_Jack_Endpoint = \r
-               {\r
-                       .Endpoint = \r
-                               {\r
-                                       .Header              = {.Size = sizeof(USB_AudioStreamEndpoint_Std_t), .Type = DTYPE_Endpoint},\r
-\r
-                                       .EndpointAddress     = (ENDPOINT_DESCRIPTOR_DIR_OUT | MIDI_STREAM_OUT_EPNUM),\r
-                                       .Attributes          = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA),\r
-                                       .EndpointSize        = MIDI_STREAM_EPSIZE,\r
-                                       .PollingIntervalMS   = 0\r
-                               },\r
-                       \r
-                       .Refresh                  = 0,\r
-                       .SyncEndpointNumber       = 0\r
-               },\r
-               \r
-       .MIDI_In_Jack_Endpoint_SPC = \r
-               {\r
-                       .Header                   = {.Size = sizeof(USB_MIDI_Jack_Endpoint_t), .Type = DTYPE_AudioEndpoint},\r
-                       .Subtype                  = DSUBTYPE_General,\r
-\r
-                       .TotalEmbeddedJacks       = 0x01,\r
-                       .AssociatedJackID         = {0x01}\r
-               },\r
-\r
-       .MIDI_Out_Jack_Endpoint = \r
-               {\r
-                       .Endpoint = \r
-                               {\r
-                                       .Header              = {.Size = sizeof(USB_AudioStreamEndpoint_Std_t), .Type = DTYPE_Endpoint},\r
-\r
-                                       .EndpointAddress     = (ENDPOINT_DESCRIPTOR_DIR_IN | MIDI_STREAM_IN_EPNUM),\r
-                                       .Attributes          = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA),\r
-                                       .EndpointSize        = MIDI_STREAM_EPSIZE,\r
-                                       .PollingIntervalMS   = 0\r
-                               },\r
-                       \r
-                       .Refresh                  = 0,\r
-                       .SyncEndpointNumber       = 0\r
-               },\r
-               \r
-       .MIDI_Out_Jack_Endpoint_SPC = \r
-               {\r
-                       .Header                   = {.Size = sizeof(USB_MIDI_Jack_Endpoint_t), .Type = DTYPE_AudioEndpoint},\r
-                       .Subtype                  = DSUBTYPE_General,\r
-\r
-                       .TotalEmbeddedJacks       = 0x01,\r
-                       .AssociatedJackID         = {0x03}\r
-               }\r
-};\r
-\r
-/** Language descriptor structure. This descriptor, located in FLASH memory, is returned when the host requests\r
- *  the string descriptor with index 0 (the first index). It is actually an array of 16-bit integers, which indicate\r
- *  via the language ID table available at USB.org what languages the device supports for its string descriptors.\r
- */\r
-USB_Descriptor_String_t PROGMEM LanguageString =\r
-{\r
-       .Header                 = {.Size = USB_STRING_LEN(1), .Type = DTYPE_String},\r
-               \r
-       .UnicodeString          = {LANGUAGE_ID_ENG}\r
-};\r
-\r
-/** Manufacturer descriptor string. This is a Unicode string containing the manufacturer's details in human readable\r
- *  form, and is read out upon request by the host when the appropriate string ID is requested, listed in the Device\r
- *  Descriptor.\r
- */\r
-USB_Descriptor_String_t PROGMEM ManufacturerString =\r
-{\r
-       .Header                 = {.Size = USB_STRING_LEN(11), .Type = DTYPE_String},\r
-               \r
-       .UnicodeString          = L"Dean Camera"\r
-};\r
-\r
-/** Product descriptor string. This is a Unicode string containing the product's details in human readable form,\r
- *  and is read out upon request by the host when the appropriate string ID is requested, listed in the Device\r
- *  Descriptor.\r
- */\r
-USB_Descriptor_String_t PROGMEM ProductString =\r
-{\r
-       .Header                 = {.Size = USB_STRING_LEN(14), .Type = DTYPE_String},\r
-               \r
-       .UnicodeString          = L"LUFA MIDI Demo"\r
-};\r
-\r
-/** This function is called by the library when in device mode, and must be overridden (see library "USB Descriptors"\r
- *  documentation) by the application code so that the address and size of a requested descriptor can be given\r
- *  to the USB library. When the device receives a Get Descriptor request on the control endpoint, this function\r
- *  is called so that the descriptor details can be passed back and the appropriate descriptor sent back to the\r
- *  USB host.\r
- */\r
-uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
-{\r
-       const uint8_t  DescriptorType   = (wValue >> 8);\r
-       const uint8_t  DescriptorNumber = (wValue & 0xFF);\r
-\r
-       void*    Address = NULL;\r
-       uint16_t Size    = NO_DESCRIPTOR;\r
-\r
-       switch (DescriptorType)\r
-       {\r
-               case DTYPE_Device: \r
-                       Address = (void*)&DeviceDescriptor;\r
-                       Size    = sizeof(USB_Descriptor_Device_t);\r
-                       break;\r
-               case DTYPE_Configuration: \r
-                       Address = (void*)&ConfigurationDescriptor;\r
-                       Size    = sizeof(USB_Descriptor_Configuration_t);\r
-                       break;\r
-               case DTYPE_String: \r
-                       switch (DescriptorNumber)\r
-                       {\r
-                               case 0x00: \r
-                                       Address = (void*)&LanguageString;\r
-                                       Size    = pgm_read_byte(&LanguageString.Header.Size);\r
-                                       break;\r
-                               case 0x01: \r
-                                       Address = (void*)&ManufacturerString;\r
-                                       Size    = pgm_read_byte(&ManufacturerString.Header.Size);\r
-                                       break;\r
-                               case 0x02: \r
-                                       Address = (void*)&ProductString;\r
-                                       Size    = pgm_read_byte(&ProductString.Header.Size);\r
-                                       break;\r
-                       }\r
-                       \r
-                       break;\r
-       }\r
-       \r
-       *DescriptorAddress = Address;\r
-       return Size;\r
-}\r
diff --git a/Demos/Device/MIDI/Descriptors.h b/Demos/Device/MIDI/Descriptors.h
deleted file mode 100644 (file)
index d9b1339..0000000
+++ /dev/null
@@ -1,81 +0,0 @@
-/*\r
-             LUFA Library\r
-     Copyright (C) Dean Camera, 2009.\r
-              \r
-  dean [at] fourwalledcubicle [dot] com\r
-      www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
-  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
-  Permission to use, copy, modify, and distribute this software\r
-  and its documentation for any purpose and without fee is hereby\r
-  granted, provided that the above copyright notice appear in all\r
-  copies and that both that the copyright notice and this\r
-  permission notice and warranty disclaimer appear in supporting\r
-  documentation, and that the name of the author not be used in\r
-  advertising or publicity pertaining to distribution of the\r
-  software without specific, written prior permission.\r
-\r
-  The author disclaim all warranties with regard to this\r
-  software, including all implied warranties of merchantability\r
-  and fitness.  In no event shall the author be liable for any\r
-  special, indirect or consequential damages or any damages\r
-  whatsoever resulting from loss of use, data or profits, whether\r
-  in an action of contract, negligence or other tortious action,\r
-  arising out of or in connection with the use or performance of\r
-  this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- *  Header file for Descriptors.c.\r
- */\r
\r
-#ifndef _DESCRIPTORS_H_\r
-#define _DESCRIPTORS_H_\r
-\r
-       /* Includes: */\r
-               #include <LUFA/Drivers/USB/USB.h>\r
-               #include <LUFA/Drivers/USB/Class/Device/MIDI.h>\r
-\r
-               #include <avr/pgmspace.h>\r
-\r
-       /* Macros: */\r
-               /** Endpoint number of the MIDI streaming data IN endpoint, for device-to-host data transfers. */\r
-               #define MIDI_STREAM_IN_EPNUM        2\r
-\r
-               /** Endpoint number of the MIDI streaming data OUT endpoint, for host-to-device data transfers. */\r
-               #define MIDI_STREAM_OUT_EPNUM       1\r
-\r
-               /** Endpoint size in bytes of the Audio isochronous streaming data IN and OUT endpoints. */\r
-               #define MIDI_STREAM_EPSIZE          64\r
-               \r
-       /* Type Defines: */\r
-               /** Type define for the device configuration descriptor structure. This must be defined in the\r
-                *  application code, as the configuration descriptor contains several sub-descriptors which\r
-                *  vary between devices, and which describe the device's usage to the host.\r
-                */\r
-               typedef struct\r
-               {\r
-                       USB_Descriptor_Configuration_Header_t Config;\r
-                       USB_Descriptor_Interface_t            AudioControlInterface;\r
-                       USB_AudioInterface_AC_t               AudioControlInterface_SPC;\r
-                       USB_Descriptor_Interface_t            AudioStreamInterface;\r
-                       USB_AudioInterface_MIDI_AS_t          AudioStreamInterface_SPC;\r
-                       USB_MIDI_In_Jack_t                    MIDI_In_Jack_Emb;\r
-                       USB_MIDI_In_Jack_t                    MIDI_In_Jack_Ext;\r
-                       USB_MIDI_Out_Jack_t                   MIDI_Out_Jack_Emb;\r
-                       USB_MIDI_Out_Jack_t                   MIDI_Out_Jack_Ext;\r
-                       USB_AudioStreamEndpoint_Std_t         MIDI_In_Jack_Endpoint;\r
-                       USB_MIDI_Jack_Endpoint_t              MIDI_In_Jack_Endpoint_SPC;\r
-                       USB_AudioStreamEndpoint_Std_t         MIDI_Out_Jack_Endpoint;\r
-                       USB_MIDI_Jack_Endpoint_t              MIDI_Out_Jack_Endpoint_SPC;\r
-               } USB_Descriptor_Configuration_t;\r
-               \r
-       /* Function Prototypes: */\r
-               uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
-                                                                                       ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);\r
-\r
-#endif\r
diff --git a/Demos/Device/MIDI/Doxygen.conf b/Demos/Device/MIDI/Doxygen.conf
deleted file mode 100644 (file)
index 7d36de8..0000000
+++ /dev/null
@@ -1,1485 +0,0 @@
-# Doxyfile 1.5.7.1\r
-\r
-# This file describes the settings to be used by the documentation system\r
-# doxygen (www.doxygen.org) for a project\r
-#\r
-# All text after a hash (#) is considered a comment and will be ignored\r
-# The format is:\r
-#       TAG = value [value, ...]\r
-# For lists items can also be appended using:\r
-#       TAG += value [value, ...]\r
-# Values that contain spaces should be placed between quotes (" ")\r
-\r
-#---------------------------------------------------------------------------\r
-# Project related configuration options\r
-#---------------------------------------------------------------------------\r
-\r
-# This tag specifies the encoding used for all characters in the config file \r
-# that follow. The default is UTF-8 which is also the encoding used for all \r
-# text before the first occurrence of this tag. Doxygen uses libiconv (or the \r
-# iconv built into libc) for the transcoding. See \r
-# http://www.gnu.org/software/libiconv for the list of possible encodings.\r
-\r
-DOXYFILE_ENCODING      = UTF-8\r
-\r
-# The PROJECT_NAME tag is a single word (or a sequence of words surrounded \r
-# by quotes) that should identify the project.\r
-\r
-PROJECT_NAME           = "LUFA Library - MIDI Device Demo"\r
-\r
-# The PROJECT_NUMBER tag can be used to enter a project or revision number. \r
-# This could be handy for archiving the generated documentation or \r
-# if some version control system is used.\r
-\r
-PROJECT_NUMBER         = 0.0.0\r
-\r
-# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) \r
-# base path where the generated documentation will be put. \r
-# If a relative path is entered, it will be relative to the location \r
-# where doxygen was started. If left blank the current directory will be used.\r
-\r
-OUTPUT_DIRECTORY       = ./Documentation/\r
-\r
-# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create \r
-# 4096 sub-directories (in 2 levels) under the output directory of each output \r
-# format and will distribute the generated files over these directories. \r
-# Enabling this option can be useful when feeding doxygen a huge amount of \r
-# source files, where putting all generated files in the same directory would \r
-# otherwise cause performance problems for the file system.\r
-\r
-CREATE_SUBDIRS         = YES\r
-\r
-# The OUTPUT_LANGUAGE tag is used to specify the language in which all \r
-# documentation generated by doxygen is written. Doxygen will use this \r
-# information to generate all constant output in the proper language. \r
-# The default language is English, other supported languages are: \r
-# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, \r
-# Croatian, Czech, Danish, Dutch, Farsi, Finnish, French, German, Greek, \r
-# Hungarian, Italian, Japanese, Japanese-en (Japanese with English messages), \r
-# Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, Polish, \r
-# Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, Slovene, \r
-# Spanish, Swedish, and Ukrainian.\r
-\r
-OUTPUT_LANGUAGE        = English\r
-\r
-# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will \r
-# include brief member descriptions after the members that are listed in \r
-# the file and class documentation (similar to JavaDoc). \r
-# Set to NO to disable this.\r
-\r
-BRIEF_MEMBER_DESC      = YES\r
-\r
-# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend \r
-# the brief description of a member or function before the detailed description. \r
-# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the \r
-# brief descriptions will be completely suppressed.\r
-\r
-REPEAT_BRIEF           = YES\r
-\r
-# This tag implements a quasi-intelligent brief description abbreviator \r
-# that is used to form the text in various listings. Each string \r
-# in this list, if found as the leading text of the brief description, will be \r
-# stripped from the text and the result after processing the whole list, is \r
-# used as the annotated text. Otherwise, the brief description is used as-is. \r
-# If left blank, the following values are used ("$name" is automatically \r
-# replaced with the name of the entity): "The $name class" "The $name widget" \r
-# "The $name file" "is" "provides" "specifies" "contains" \r
-# "represents" "a" "an" "the"\r
-\r
-ABBREVIATE_BRIEF       = "The $name class" \\r
-                         "The $name widget" \\r
-                         "The $name file" \\r
-                         is \\r
-                         provides \\r
-                         specifies \\r
-                         contains \\r
-                         represents \\r
-                         a \\r
-                         an \\r
-                         the\r
-\r
-# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then \r
-# Doxygen will generate a detailed section even if there is only a brief \r
-# description.\r
-\r
-ALWAYS_DETAILED_SEC    = NO\r
-\r
-# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all \r
-# inherited members of a class in the documentation of that class as if those \r
-# members were ordinary class members. Constructors, destructors and assignment \r
-# operators of the base classes will not be shown.\r
-\r
-INLINE_INHERITED_MEMB  = NO\r
-\r
-# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full \r
-# path before files name in the file list and in the header files. If set \r
-# to NO the shortest path that makes the file name unique will be used.\r
-\r
-FULL_PATH_NAMES        = YES\r
-\r
-# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag \r
-# can be used to strip a user-defined part of the path. Stripping is \r
-# only done if one of the specified strings matches the left-hand part of \r
-# the path. The tag can be used to show relative paths in the file list. \r
-# If left blank the directory from which doxygen is run is used as the \r
-# path to strip.\r
-\r
-STRIP_FROM_PATH        = \r
-\r
-# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of \r
-# the path mentioned in the documentation of a class, which tells \r
-# the reader which header file to include in order to use a class. \r
-# If left blank only the name of the header file containing the class \r
-# definition is used. Otherwise one should specify the include paths that \r
-# are normally passed to the compiler using the -I flag.\r
-\r
-STRIP_FROM_INC_PATH    = \r
-\r
-# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter \r
-# (but less readable) file names. This can be useful is your file systems \r
-# doesn't support long names like on DOS, Mac, or CD-ROM.\r
-\r
-SHORT_NAMES            = YES\r
-\r
-# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen \r
-# will interpret the first line (until the first dot) of a JavaDoc-style \r
-# comment as the brief description. If set to NO, the JavaDoc \r
-# comments will behave just like regular Qt-style comments \r
-# (thus requiring an explicit @brief command for a brief description.)\r
-\r
-JAVADOC_AUTOBRIEF      = NO\r
-\r
-# If the QT_AUTOBRIEF tag is set to YES then Doxygen will \r
-# interpret the first line (until the first dot) of a Qt-style \r
-# comment as the brief description. If set to NO, the comments \r
-# will behave just like regular Qt-style comments (thus requiring \r
-# an explicit \brief command for a brief description.)\r
-\r
-QT_AUTOBRIEF           = NO\r
-\r
-# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen \r
-# treat a multi-line C++ special comment block (i.e. a block of //! or /// \r
-# comments) as a brief description. This used to be the default behaviour. \r
-# The new default is to treat a multi-line C++ comment block as a detailed \r
-# description. Set this tag to YES if you prefer the old behaviour instead.\r
-\r
-MULTILINE_CPP_IS_BRIEF = NO\r
-\r
-# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented \r
-# member inherits the documentation from any documented member that it \r
-# re-implements.\r
-\r
-INHERIT_DOCS           = YES\r
-\r
-# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce \r
-# a new page for each member. If set to NO, the documentation of a member will \r
-# be part of the file/class/namespace that contains it.\r
-\r
-SEPARATE_MEMBER_PAGES  = NO\r
-\r
-# The TAB_SIZE tag can be used to set the number of spaces in a tab. \r
-# Doxygen uses this value to replace tabs by spaces in code fragments.\r
-\r
-TAB_SIZE               = 4\r
-\r
-# This tag can be used to specify a number of aliases that acts \r
-# as commands in the documentation. An alias has the form "name=value". \r
-# For example adding "sideeffect=\par Side Effects:\n" will allow you to \r
-# put the command \sideeffect (or @sideeffect) in the documentation, which \r
-# will result in a user-defined paragraph with heading "Side Effects:". \r
-# You can put \n's in the value part of an alias to insert newlines.\r
-\r
-ALIASES                = \r
-\r
-# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C \r
-# sources only. Doxygen will then generate output that is more tailored for C. \r
-# For instance, some of the names that are used will be different. The list \r
-# of all members will be omitted, etc.\r
-\r
-OPTIMIZE_OUTPUT_FOR_C  = YES\r
-\r
-# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java \r
-# sources only. Doxygen will then generate output that is more tailored for \r
-# Java. For instance, namespaces will be presented as packages, qualified \r
-# scopes will look different, etc.\r
-\r
-OPTIMIZE_OUTPUT_JAVA   = NO\r
-\r
-# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran \r
-# sources only. Doxygen will then generate output that is more tailored for \r
-# Fortran.\r
-\r
-OPTIMIZE_FOR_FORTRAN   = NO\r
-\r
-# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL \r
-# sources. Doxygen will then generate output that is tailored for \r
-# VHDL.\r
-\r
-OPTIMIZE_OUTPUT_VHDL   = NO\r
-\r
-# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want \r
-# to include (a tag file for) the STL sources as input, then you should \r
-# set this tag to YES in order to let doxygen match functions declarations and \r
-# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. \r
-# func(std::string) {}). This also make the inheritance and collaboration \r
-# diagrams that involve STL classes more complete and accurate.\r
-\r
-BUILTIN_STL_SUPPORT    = NO\r
-\r
-# If you use Microsoft's C++/CLI language, you should set this option to YES to\r
-# enable parsing support.\r
-\r
-CPP_CLI_SUPPORT        = NO\r
-\r
-# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. \r
-# Doxygen will parse them like normal C++ but will assume all classes use public \r
-# instead of private inheritance when no explicit protection keyword is present.\r
-\r
-SIP_SUPPORT            = NO\r
-\r
-# For Microsoft's IDL there are propget and propput attributes to indicate getter \r
-# and setter methods for a property. Setting this option to YES (the default) \r
-# will make doxygen to replace the get and set methods by a property in the \r
-# documentation. This will only work if the methods are indeed getting or \r
-# setting a simple type. If this is not the case, or you want to show the \r
-# methods anyway, you should set this option to NO.\r
-\r
-IDL_PROPERTY_SUPPORT   = YES\r
-\r
-# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC \r
-# tag is set to YES, then doxygen will reuse the documentation of the first \r
-# member in the group (if any) for the other members of the group. By default \r
-# all members of a group must be documented explicitly.\r
-\r
-DISTRIBUTE_GROUP_DOC   = NO\r
-\r
-# Set the SUBGROUPING tag to YES (the default) to allow class member groups of \r
-# the same type (for instance a group of public functions) to be put as a \r
-# subgroup of that type (e.g. under the Public Functions section). Set it to \r
-# NO to prevent subgrouping. Alternatively, this can be done per class using \r
-# the \nosubgrouping command.\r
-\r
-SUBGROUPING            = YES\r
-\r
-# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum \r
-# is documented as struct, union, or enum with the name of the typedef. So \r
-# typedef struct TypeS {} TypeT, will appear in the documentation as a struct \r
-# with name TypeT. When disabled the typedef will appear as a member of a file, \r
-# namespace, or class. And the struct will be named TypeS. This can typically \r
-# be useful for C code in case the coding convention dictates that all compound \r
-# types are typedef'ed and only the typedef is referenced, never the tag name.\r
-\r
-TYPEDEF_HIDES_STRUCT   = NO\r
-\r
-# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to \r
-# determine which symbols to keep in memory and which to flush to disk.\r
-# When the cache is full, less often used symbols will be written to disk.\r
-# For small to medium size projects (<1000 input files) the default value is \r
-# probably good enough. For larger projects a too small cache size can cause \r
-# doxygen to be busy swapping symbols to and from disk most of the time \r
-# causing a significant performance penality. \r
-# If the system has enough physical memory increasing the cache will improve the \r
-# performance by keeping more symbols in memory. Note that the value works on \r
-# a logarithmic scale so increasing the size by one will rougly double the \r
-# memory usage. The cache size is given by this formula: \r
-# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, \r
-# corresponding to a cache size of 2^16 = 65536 symbols\r
-\r
-SYMBOL_CACHE_SIZE      = 0\r
-\r
-#---------------------------------------------------------------------------\r
-# Build related configuration options\r
-#---------------------------------------------------------------------------\r
-\r
-# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in \r
-# documentation are documented, even if no documentation was available. \r
-# Private class members and static file members will be hidden unless \r
-# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES\r
-\r
-EXTRACT_ALL            = YES\r
-\r
-# If the EXTRACT_PRIVATE tag is set to YES all private members of a class \r
-# will be included in the documentation.\r
-\r
-EXTRACT_PRIVATE        = YES\r
-\r
-# If the EXTRACT_STATIC tag is set to YES all static members of a file \r
-# will be included in the documentation.\r
-\r
-EXTRACT_STATIC         = YES\r
-\r
-# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) \r
-# defined locally in source files will be included in the documentation. \r
-# If set to NO only classes defined in header files are included.\r
-\r
-EXTRACT_LOCAL_CLASSES  = YES\r
-\r
-# This flag is only useful for Objective-C code. When set to YES local \r
-# methods, which are defined in the implementation section but not in \r
-# the interface are included in the documentation. \r
-# If set to NO (the default) only methods in the interface are included.\r
-\r
-EXTRACT_LOCAL_METHODS  = NO\r
-\r
-# If this flag is set to YES, the members of anonymous namespaces will be \r
-# extracted and appear in the documentation as a namespace called \r
-# 'anonymous_namespace{file}', where file will be replaced with the base \r
-# name of the file that contains the anonymous namespace. By default \r
-# anonymous namespace are hidden.\r
-\r
-EXTRACT_ANON_NSPACES   = NO\r
-\r
-# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all \r
-# undocumented members of documented classes, files or namespaces. \r
-# If set to NO (the default) these members will be included in the \r
-# various overviews, but no documentation section is generated. \r
-# This option has no effect if EXTRACT_ALL is enabled.\r
-\r
-HIDE_UNDOC_MEMBERS     = NO\r
-\r
-# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all \r
-# undocumented classes that are normally visible in the class hierarchy. \r
-# If set to NO (the default) these classes will be included in the various \r
-# overviews. This option has no effect if EXTRACT_ALL is enabled.\r
-\r
-HIDE_UNDOC_CLASSES     = NO\r
-\r
-# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all \r
-# friend (class|struct|union) declarations. \r
-# If set to NO (the default) these declarations will be included in the \r
-# documentation.\r
-\r
-HIDE_FRIEND_COMPOUNDS  = NO\r
-\r
-# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any \r
-# documentation blocks found inside the body of a function. \r
-# If set to NO (the default) these blocks will be appended to the \r
-# function's detailed documentation block.\r
-\r
-HIDE_IN_BODY_DOCS      = NO\r
-\r
-# The INTERNAL_DOCS tag determines if documentation \r
-# that is typed after a \internal command is included. If the tag is set \r
-# to NO (the default) then the documentation will be excluded. \r
-# Set it to YES to include the internal documentation.\r
-\r
-INTERNAL_DOCS          = NO\r
-\r
-# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate \r
-# file names in lower-case letters. If set to YES upper-case letters are also \r
-# allowed. This is useful if you have classes or files whose names only differ \r
-# in case and if your file system supports case sensitive file names. Windows \r
-# and Mac users are advised to set this option to NO.\r
-\r
-CASE_SENSE_NAMES       = NO\r
-\r
-# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen \r
-# will show members with their full class and namespace scopes in the \r
-# documentation. If set to YES the scope will be hidden.\r
-\r
-HIDE_SCOPE_NAMES       = NO\r
-\r
-# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen \r
-# will put a list of the files that are included by a file in the documentation \r
-# of that file.\r
-\r
-SHOW_INCLUDE_FILES     = YES\r
-\r
-# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] \r
-# is inserted in the documentation for inline members.\r
-\r
-INLINE_INFO            = YES\r
-\r
-# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen \r
-# will sort the (detailed) documentation of file and class members \r
-# alphabetically by member name. If set to NO the members will appear in \r
-# declaration order.\r
-\r
-SORT_MEMBER_DOCS       = YES\r
-\r
-# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the \r
-# brief documentation of file, namespace and class members alphabetically \r
-# by member name. If set to NO (the default) the members will appear in \r
-# declaration order.\r
-\r
-SORT_BRIEF_DOCS        = NO\r
-\r
-# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the \r
-# hierarchy of group names into alphabetical order. If set to NO (the default) \r
-# the group names will appear in their defined order.\r
-\r
-SORT_GROUP_NAMES       = NO\r
-\r
-# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be \r
-# sorted by fully-qualified names, including namespaces. If set to \r
-# NO (the default), the class list will be sorted only by class name, \r
-# not including the namespace part. \r
-# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.\r
-# Note: This option applies only to the class list, not to the \r
-# alphabetical list.\r
-\r
-SORT_BY_SCOPE_NAME     = NO\r
-\r
-# The GENERATE_TODOLIST tag can be used to enable (YES) or \r
-# disable (NO) the todo list. This list is created by putting \todo \r
-# commands in the documentation.\r
-\r
-GENERATE_TODOLIST      = NO\r
-\r
-# The GENERATE_TESTLIST tag can be used to enable (YES) or \r
-# disable (NO) the test list. This list is created by putting \test \r
-# commands in the documentation.\r
-\r
-GENERATE_TESTLIST      = NO\r
-\r
-# The GENERATE_BUGLIST tag can be used to enable (YES) or \r
-# disable (NO) the bug list. This list is created by putting \bug \r
-# commands in the documentation.\r
-\r
-GENERATE_BUGLIST       = NO\r
-\r
-# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or \r
-# disable (NO) the deprecated list. This list is created by putting \r
-# \deprecated commands in the documentation.\r
-\r
-GENERATE_DEPRECATEDLIST= YES\r
-\r
-# The ENABLED_SECTIONS tag can be used to enable conditional \r
-# documentation sections, marked by \if sectionname ... \endif.\r
-\r
-ENABLED_SECTIONS       = \r
-\r
-# The MAX_INITIALIZER_LINES tag determines the maximum number of lines \r
-# the initial value of a variable or define consists of for it to appear in \r
-# the documentation. If the initializer consists of more lines than specified \r
-# here it will be hidden. Use a value of 0 to hide initializers completely. \r
-# The appearance of the initializer of individual variables and defines in the \r
-# documentation can be controlled using \showinitializer or \hideinitializer \r
-# command in the documentation regardless of this setting.\r
-\r
-MAX_INITIALIZER_LINES  = 30\r
-\r
-# Set the SHOW_USED_FILES tag to NO to disable the list of files generated \r
-# at the bottom of the documentation of classes and structs. If set to YES the \r
-# list will mention the files that were used to generate the documentation.\r
-\r
-SHOW_USED_FILES        = YES\r
-\r
-# If the sources in your project are distributed over multiple directories \r
-# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy \r
-# in the documentation. The default is NO.\r
-\r
-SHOW_DIRECTORIES       = YES\r
-\r
-# Set the SHOW_FILES tag to NO to disable the generation of the Files page.\r
-# This will remove the Files entry from the Quick Index and from the \r
-# Folder Tree View (if specified). The default is YES.\r
-\r
-SHOW_FILES             = YES\r
-\r
-# Set the SHOW_NAMESPACES tag to NO to disable the generation of the \r
-# Namespaces page.  This will remove the Namespaces entry from the Quick Index\r
-# and from the Folder Tree View (if specified). The default is YES.\r
-\r
-SHOW_NAMESPACES        = YES\r
-\r
-# The FILE_VERSION_FILTER tag can be used to specify a program or script that \r
-# doxygen should invoke to get the current version for each file (typically from \r
-# the version control system). Doxygen will invoke the program by executing (via \r
-# popen()) the command <command> <input-file>, where <command> is the value of \r
-# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file \r
-# provided by doxygen. Whatever the program writes to standard output \r
-# is used as the file version. See the manual for examples.\r
-\r
-FILE_VERSION_FILTER    = \r
-\r
-# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by \r
-# doxygen. The layout file controls the global structure of the generated output files \r
-# in an output format independent way. The create the layout file that represents \r
-# doxygen's defaults, run doxygen with the -l option. You can optionally specify a \r
-# file name after the option, if omitted DoxygenLayout.xml will be used as the name \r
-# of the layout file.\r
-\r
-LAYOUT_FILE            = \r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to warning and progress messages\r
-#---------------------------------------------------------------------------\r
-\r
-# The QUIET tag can be used to turn on/off the messages that are generated \r
-# by doxygen. Possible values are YES and NO. If left blank NO is used.\r
-\r
-QUIET                  = YES\r
-\r
-# The WARNINGS tag can be used to turn on/off the warning messages that are \r
-# generated by doxygen. Possible values are YES and NO. If left blank \r
-# NO is used.\r
-\r
-WARNINGS               = YES\r
-\r
-# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings \r
-# for undocumented members. If EXTRACT_ALL is set to YES then this flag will \r
-# automatically be disabled.\r
-\r
-WARN_IF_UNDOCUMENTED   = YES\r
-\r
-# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for \r
-# potential errors in the documentation, such as not documenting some \r
-# parameters in a documented function, or documenting parameters that \r
-# don't exist or using markup commands wrongly.\r
-\r
-WARN_IF_DOC_ERROR      = YES\r
-\r
-# This WARN_NO_PARAMDOC option can be abled to get warnings for \r
-# functions that are documented, but have no documentation for their parameters \r
-# or return value. If set to NO (the default) doxygen will only warn about \r
-# wrong or incomplete parameter documentation, but not about the absence of \r
-# documentation.\r
-\r
-WARN_NO_PARAMDOC       = YES\r
-\r
-# The WARN_FORMAT tag determines the format of the warning messages that \r
-# doxygen can produce. The string should contain the $file, $line, and $text \r
-# tags, which will be replaced by the file and line number from which the \r
-# warning originated and the warning text. Optionally the format may contain \r
-# $version, which will be replaced by the version of the file (if it could \r
-# be obtained via FILE_VERSION_FILTER)\r
-\r
-WARN_FORMAT            = "$file:$line: $text"\r
-\r
-# The WARN_LOGFILE tag can be used to specify a file to which warning \r
-# and error messages should be written. If left blank the output is written \r
-# to stderr.\r
-\r
-WARN_LOGFILE           = \r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the input files\r
-#---------------------------------------------------------------------------\r
-\r
-# The INPUT tag can be used to specify the files and/or directories that contain \r
-# documented source files. You may enter file names like "myfile.cpp" or \r
-# directories like "/usr/src/myproject". Separate the files or directories \r
-# with spaces.\r
-\r
-INPUT                  = ./\r
-\r
-# This tag can be used to specify the character encoding of the source files \r
-# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is \r
-# also the default input encoding. Doxygen uses libiconv (or the iconv built \r
-# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for \r
-# the list of possible encodings.\r
-\r
-INPUT_ENCODING         = UTF-8\r
-\r
-# If the value of the INPUT tag contains directories, you can use the \r
-# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \r
-# and *.h) to filter out the source-files in the directories. If left \r
-# blank the following patterns are tested: \r
-# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx \r
-# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90\r
-\r
-FILE_PATTERNS          = *.h \\r
-                         *.c \\r
-                                                *.txt\r
-\r
-# The RECURSIVE tag can be used to turn specify whether or not subdirectories \r
-# should be searched for input files as well. Possible values are YES and NO. \r
-# If left blank NO is used.\r
-\r
-RECURSIVE              = YES\r
-\r
-# The EXCLUDE tag can be used to specify files and/or directories that should \r
-# excluded from the INPUT source files. This way you can easily exclude a \r
-# subdirectory from a directory tree whose root is specified with the INPUT tag.\r
-\r
-EXCLUDE                = \r
-\r
-# The EXCLUDE_SYMLINKS tag can be used select whether or not files or \r
-# directories that are symbolic links (a Unix filesystem feature) are excluded \r
-# from the input.\r
-\r
-EXCLUDE_SYMLINKS       = NO\r
-\r
-# If the value of the INPUT tag contains directories, you can use the \r
-# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude \r
-# certain files from those directories. Note that the wildcards are matched \r
-# against the file with absolute path, so to exclude all test directories \r
-# for example use the pattern */test/*\r
-\r
-EXCLUDE_PATTERNS       = */LowLevel/USBMode.h\r
-\r
-# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names \r
-# (namespaces, classes, functions, etc.) that should be excluded from the \r
-# output. The symbol name can be a fully qualified name, a word, or if the \r
-# wildcard * is used, a substring. Examples: ANamespace, AClass, \r
-# AClass::ANamespace, ANamespace::*Test\r
-\r
-EXCLUDE_SYMBOLS        = __*\r
-\r
-# The EXAMPLE_PATH tag can be used to specify one or more files or \r
-# directories that contain example code fragments that are included (see \r
-# the \include command).\r
-\r
-EXAMPLE_PATH           = \r
-\r
-# If the value of the EXAMPLE_PATH tag contains directories, you can use the \r
-# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \r
-# and *.h) to filter out the source-files in the directories. If left \r
-# blank all files are included.\r
-\r
-EXAMPLE_PATTERNS       = *\r
-\r
-# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be \r
-# searched for input files to be used with the \include or \dontinclude \r
-# commands irrespective of the value of the RECURSIVE tag. \r
-# Possible values are YES and NO. If left blank NO is used.\r
-\r
-EXAMPLE_RECURSIVE      = NO\r
-\r
-# The IMAGE_PATH tag can be used to specify one or more files or \r
-# directories that contain image that are included in the documentation (see \r
-# the \image command).\r
-\r
-IMAGE_PATH             = \r
-\r
-# The INPUT_FILTER tag can be used to specify a program that doxygen should \r
-# invoke to filter for each input file. Doxygen will invoke the filter program \r
-# by executing (via popen()) the command <filter> <input-file>, where <filter> \r
-# is the value of the INPUT_FILTER tag, and <input-file> is the name of an \r
-# input file. Doxygen will then use the output that the filter program writes \r
-# to standard output.  If FILTER_PATTERNS is specified, this tag will be \r
-# ignored.\r
-\r
-INPUT_FILTER           = \r
-\r
-# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern \r
-# basis.  Doxygen will compare the file name with each pattern and apply the \r
-# filter if there is a match.  The filters are a list of the form: \r
-# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further \r
-# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER \r
-# is applied to all files.\r
-\r
-FILTER_PATTERNS        = \r
-\r
-# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using \r
-# INPUT_FILTER) will be used to filter the input files when producing source \r
-# files to browse (i.e. when SOURCE_BROWSER is set to YES).\r
-\r
-FILTER_SOURCE_FILES    = NO\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to source browsing\r
-#---------------------------------------------------------------------------\r
-\r
-# If the SOURCE_BROWSER tag is set to YES then a list of source files will \r
-# be generated. Documented entities will be cross-referenced with these sources. \r
-# Note: To get rid of all source code in the generated output, make sure also \r
-# VERBATIM_HEADERS is set to NO.\r
-\r
-SOURCE_BROWSER         = NO\r
-\r
-# Setting the INLINE_SOURCES tag to YES will include the body \r
-# of functions and classes directly in the documentation.\r
-\r
-INLINE_SOURCES         = NO\r
-\r
-# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct \r
-# doxygen to hide any special comment blocks from generated source code \r
-# fragments. Normal C and C++ comments will always remain visible.\r
-\r
-STRIP_CODE_COMMENTS    = YES\r
-\r
-# If the REFERENCED_BY_RELATION tag is set to YES \r
-# then for each documented function all documented \r
-# functions referencing it will be listed.\r
-\r
-REFERENCED_BY_RELATION = NO\r
-\r
-# If the REFERENCES_RELATION tag is set to YES \r
-# then for each documented function all documented entities \r
-# called/used by that function will be listed.\r
-\r
-REFERENCES_RELATION    = NO\r
-\r
-# If the REFERENCES_LINK_SOURCE tag is set to YES (the default)\r
-# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from\r
-# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will\r
-# link to the source code.  Otherwise they will link to the documentstion.\r
-\r
-REFERENCES_LINK_SOURCE = NO\r
-\r
-# If the USE_HTAGS tag is set to YES then the references to source code \r
-# will point to the HTML generated by the htags(1) tool instead of doxygen \r
-# built-in source browser. The htags tool is part of GNU's global source \r
-# tagging system (see http://www.gnu.org/software/global/global.html). You \r
-# will need version 4.8.6 or higher.\r
-\r
-USE_HTAGS              = NO\r
-\r
-# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen \r
-# will generate a verbatim copy of the header file for each class for \r
-# which an include is specified. Set to NO to disable this.\r
-\r
-VERBATIM_HEADERS       = NO\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the alphabetical class index\r
-#---------------------------------------------------------------------------\r
-\r
-# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index \r
-# of all compounds will be generated. Enable this if the project \r
-# contains a lot of classes, structs, unions or interfaces.\r
-\r
-ALPHABETICAL_INDEX     = YES\r
-\r
-# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then \r
-# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns \r
-# in which this list will be split (can be a number in the range [1..20])\r
-\r
-COLS_IN_ALPHA_INDEX    = 5\r
-\r
-# In case all classes in a project start with a common prefix, all \r
-# classes will be put under the same header in the alphabetical index. \r
-# The IGNORE_PREFIX tag can be used to specify one or more prefixes that \r
-# should be ignored while generating the index headers.\r
-\r
-IGNORE_PREFIX          = \r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the HTML output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_HTML tag is set to YES (the default) Doxygen will \r
-# generate HTML output.\r
-\r
-GENERATE_HTML          = YES\r
-\r
-# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. \r
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
-# put in front of it. If left blank `html' will be used as the default path.\r
-\r
-HTML_OUTPUT            = html\r
-\r
-# The HTML_FILE_EXTENSION tag can be used to specify the file extension for \r
-# each generated HTML page (for example: .htm,.php,.asp). If it is left blank \r
-# doxygen will generate files with .html extension.\r
-\r
-HTML_FILE_EXTENSION    = .html\r
-\r
-# The HTML_HEADER tag can be used to specify a personal HTML header for \r
-# each generated HTML page. If it is left blank doxygen will generate a \r
-# standard header.\r
-\r
-HTML_HEADER            = \r
-\r
-# The HTML_FOOTER tag can be used to specify a personal HTML footer for \r
-# each generated HTML page. If it is left blank doxygen will generate a \r
-# standard footer.\r
-\r
-HTML_FOOTER            = \r
-\r
-# The HTML_STYLESHEET tag can be used to specify a user-defined cascading \r
-# style sheet that is used by each HTML page. It can be used to \r
-# fine-tune the look of the HTML output. If the tag is left blank doxygen \r
-# will generate a default style sheet. Note that doxygen will try to copy \r
-# the style sheet file to the HTML output directory, so don't put your own \r
-# stylesheet in the HTML output directory as well, or it will be erased!\r
-\r
-HTML_STYLESHEET        = \r
-\r
-# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, \r
-# files or namespaces will be aligned in HTML using tables. If set to \r
-# NO a bullet list will be used.\r
-\r
-HTML_ALIGN_MEMBERS     = YES\r
-\r
-# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML \r
-# documentation will contain sections that can be hidden and shown after the \r
-# page has loaded. For this to work a browser that supports \r
-# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox \r
-# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari).\r
-\r
-HTML_DYNAMIC_SECTIONS  = YES\r
-\r
-# If the GENERATE_DOCSET tag is set to YES, additional index files \r
-# will be generated that can be used as input for Apple's Xcode 3 \r
-# integrated development environment, introduced with OSX 10.5 (Leopard). \r
-# To create a documentation set, doxygen will generate a Makefile in the \r
-# HTML output directory. Running make will produce the docset in that \r
-# directory and running "make install" will install the docset in \r
-# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find \r
-# it at startup. \r
-# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information.\r
-\r
-GENERATE_DOCSET        = NO\r
-\r
-# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the \r
-# feed. A documentation feed provides an umbrella under which multiple \r
-# documentation sets from a single provider (such as a company or product suite) \r
-# can be grouped.\r
-\r
-DOCSET_FEEDNAME        = "Doxygen generated docs"\r
-\r
-# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that \r
-# should uniquely identify the documentation set bundle. This should be a \r
-# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen \r
-# will append .docset to the name.\r
-\r
-DOCSET_BUNDLE_ID       = org.doxygen.Project\r
-\r
-# If the GENERATE_HTMLHELP tag is set to YES, additional index files \r
-# will be generated that can be used as input for tools like the \r
-# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) \r
-# of the generated HTML documentation.\r
-\r
-GENERATE_HTMLHELP      = NO\r
-\r
-# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can \r
-# be used to specify the file name of the resulting .chm file. You \r
-# can add a path in front of the file if the result should not be \r
-# written to the html output directory.\r
-\r
-CHM_FILE               = \r
-\r
-# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can \r
-# be used to specify the location (absolute path including file name) of \r
-# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run \r
-# the HTML help compiler on the generated index.hhp.\r
-\r
-HHC_LOCATION           = \r
-\r
-# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag \r
-# controls if a separate .chi index file is generated (YES) or that \r
-# it should be included in the master .chm file (NO).\r
-\r
-GENERATE_CHI           = NO\r
-\r
-# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING\r
-# is used to encode HtmlHelp index (hhk), content (hhc) and project file\r
-# content.\r
-\r
-CHM_INDEX_ENCODING     = \r
-\r
-# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag \r
-# controls whether a binary table of contents is generated (YES) or a \r
-# normal table of contents (NO) in the .chm file.\r
-\r
-BINARY_TOC             = NO\r
-\r
-# The TOC_EXPAND flag can be set to YES to add extra items for group members \r
-# to the contents of the HTML help documentation and to the tree view.\r
-\r
-TOC_EXPAND             = YES\r
-\r
-# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER \r
-# are set, an additional index file will be generated that can be used as input for \r
-# Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated \r
-# HTML documentation.\r
-\r
-GENERATE_QHP           = NO\r
-\r
-# If the QHG_LOCATION tag is specified, the QCH_FILE tag can \r
-# be used to specify the file name of the resulting .qch file. \r
-# The path specified is relative to the HTML output folder.\r
-\r
-QCH_FILE               = \r
-\r
-# The QHP_NAMESPACE tag specifies the namespace to use when generating \r
-# Qt Help Project output. For more information please see \r
-# <a href="http://doc.trolltech.com/qthelpproject.html#namespace">Qt Help Project / Namespace</a>.\r
-\r
-QHP_NAMESPACE          = org.doxygen.Project\r
-\r
-# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating \r
-# Qt Help Project output. For more information please see \r
-# <a href="http://doc.trolltech.com/qthelpproject.html#virtual-folders">Qt Help Project / Virtual Folders</a>.\r
-\r
-QHP_VIRTUAL_FOLDER     = doc\r
-\r
-# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can \r
-# be used to specify the location of Qt's qhelpgenerator. \r
-# If non-empty doxygen will try to run qhelpgenerator on the generated \r
-# .qhp file .\r
-\r
-QHG_LOCATION           = \r
-\r
-# The DISABLE_INDEX tag can be used to turn on/off the condensed index at \r
-# top of each HTML page. The value NO (the default) enables the index and \r
-# the value YES disables it.\r
-\r
-DISABLE_INDEX          = NO\r
-\r
-# This tag can be used to set the number of enum values (range [1..20]) \r
-# that doxygen will group on one line in the generated HTML documentation.\r
-\r
-ENUM_VALUES_PER_LINE   = 1\r
-\r
-# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index\r
-# structure should be generated to display hierarchical information.\r
-# If the tag value is set to FRAME, a side panel will be generated\r
-# containing a tree-like index structure (just like the one that \r
-# is generated for HTML Help). For this to work a browser that supports \r
-# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, \r
-# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are \r
-# probably better off using the HTML help feature. Other possible values \r
-# for this tag are: HIERARCHIES, which will generate the Groups, Directories,\r
-# and Class Hierarchy pages using a tree view instead of an ordered list;\r
-# ALL, which combines the behavior of FRAME and HIERARCHIES; and NONE, which\r
-# disables this behavior completely. For backwards compatibility with previous\r
-# releases of Doxygen, the values YES and NO are equivalent to FRAME and NONE\r
-# respectively.\r
-\r
-GENERATE_TREEVIEW      = YES\r
-\r
-# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be \r
-# used to set the initial width (in pixels) of the frame in which the tree \r
-# is shown.\r
-\r
-TREEVIEW_WIDTH         = 250\r
-\r
-# Use this tag to change the font size of Latex formulas included \r
-# as images in the HTML documentation. The default is 10. Note that \r
-# when you change the font size after a successful doxygen run you need \r
-# to manually remove any form_*.png images from the HTML output directory \r
-# to force them to be regenerated.\r
-\r
-FORMULA_FONTSIZE       = 10\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the LaTeX output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will \r
-# generate Latex output.\r
-\r
-GENERATE_LATEX         = NO\r
-\r
-# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. \r
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
-# put in front of it. If left blank `latex' will be used as the default path.\r
-\r
-LATEX_OUTPUT           = latex\r
-\r
-# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be \r
-# invoked. If left blank `latex' will be used as the default command name.\r
-\r
-LATEX_CMD_NAME         = latex\r
-\r
-# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to \r
-# generate index for LaTeX. If left blank `makeindex' will be used as the \r
-# default command name.\r
-\r
-MAKEINDEX_CMD_NAME     = makeindex\r
-\r
-# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact \r
-# LaTeX documents. This may be useful for small projects and may help to \r
-# save some trees in general.\r
-\r
-COMPACT_LATEX          = NO\r
-\r
-# The PAPER_TYPE tag can be used to set the paper type that is used \r
-# by the printer. Possible values are: a4, a4wide, letter, legal and \r
-# executive. If left blank a4wide will be used.\r
-\r
-PAPER_TYPE             = a4wide\r
-\r
-# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX \r
-# packages that should be included in the LaTeX output.\r
-\r
-EXTRA_PACKAGES         = \r
-\r
-# The LATEX_HEADER tag can be used to specify a personal LaTeX header for \r
-# the generated latex document. The header should contain everything until \r
-# the first chapter. If it is left blank doxygen will generate a \r
-# standard header. Notice: only use this tag if you know what you are doing!\r
-\r
-LATEX_HEADER           = \r
-\r
-# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated \r
-# is prepared for conversion to pdf (using ps2pdf). The pdf file will \r
-# contain links (just like the HTML output) instead of page references \r
-# This makes the output suitable for online browsing using a pdf viewer.\r
-\r
-PDF_HYPERLINKS         = YES\r
-\r
-# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of \r
-# plain latex in the generated Makefile. Set this option to YES to get a \r
-# higher quality PDF documentation.\r
-\r
-USE_PDFLATEX           = YES\r
-\r
-# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. \r
-# command to the generated LaTeX files. This will instruct LaTeX to keep \r
-# running if errors occur, instead of asking the user for help. \r
-# This option is also used when generating formulas in HTML.\r
-\r
-LATEX_BATCHMODE        = NO\r
-\r
-# If LATEX_HIDE_INDICES is set to YES then doxygen will not \r
-# include the index chapters (such as File Index, Compound Index, etc.) \r
-# in the output.\r
-\r
-LATEX_HIDE_INDICES     = NO\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the RTF output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output \r
-# The RTF output is optimized for Word 97 and may not look very pretty with \r
-# other RTF readers or editors.\r
-\r
-GENERATE_RTF           = NO\r
-\r
-# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. \r
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
-# put in front of it. If left blank `rtf' will be used as the default path.\r
-\r
-RTF_OUTPUT             = rtf\r
-\r
-# If the COMPACT_RTF tag is set to YES Doxygen generates more compact \r
-# RTF documents. This may be useful for small projects and may help to \r
-# save some trees in general.\r
-\r
-COMPACT_RTF            = NO\r
-\r
-# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated \r
-# will contain hyperlink fields. The RTF file will \r
-# contain links (just like the HTML output) instead of page references. \r
-# This makes the output suitable for online browsing using WORD or other \r
-# programs which support those fields. \r
-# Note: wordpad (write) and others do not support links.\r
-\r
-RTF_HYPERLINKS         = NO\r
-\r
-# Load stylesheet definitions from file. Syntax is similar to doxygen's \r
-# config file, i.e. a series of assignments. You only have to provide \r
-# replacements, missing definitions are set to their default value.\r
-\r
-RTF_STYLESHEET_FILE    = \r
-\r
-# Set optional variables used in the generation of an rtf document. \r
-# Syntax is similar to doxygen's config file.\r
-\r
-RTF_EXTENSIONS_FILE    = \r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the man page output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_MAN tag is set to YES (the default) Doxygen will \r
-# generate man pages\r
-\r
-GENERATE_MAN           = NO\r
-\r
-# The MAN_OUTPUT tag is used to specify where the man pages will be put. \r
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
-# put in front of it. If left blank `man' will be used as the default path.\r
-\r
-MAN_OUTPUT             = man\r
-\r
-# The MAN_EXTENSION tag determines the extension that is added to \r
-# the generated man pages (default is the subroutine's section .3)\r
-\r
-MAN_EXTENSION          = .3\r
-\r
-# If the MAN_LINKS tag is set to YES and Doxygen generates man output, \r
-# then it will generate one additional man file for each entity \r
-# documented in the real man page(s). These additional files \r
-# only source the real man page, but without them the man command \r
-# would be unable to find the correct page. The default is NO.\r
-\r
-MAN_LINKS              = NO\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the XML output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_XML tag is set to YES Doxygen will \r
-# generate an XML file that captures the structure of \r
-# the code including all documentation.\r
-\r
-GENERATE_XML           = NO\r
-\r
-# The XML_OUTPUT tag is used to specify where the XML pages will be put. \r
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
-# put in front of it. If left blank `xml' will be used as the default path.\r
-\r
-XML_OUTPUT             = xml\r
-\r
-# The XML_SCHEMA tag can be used to specify an XML schema, \r
-# which can be used by a validating XML parser to check the \r
-# syntax of the XML files.\r
-\r
-XML_SCHEMA             = \r
-\r
-# The XML_DTD tag can be used to specify an XML DTD, \r
-# which can be used by a validating XML parser to check the \r
-# syntax of the XML files.\r
-\r
-XML_DTD                = \r
-\r
-# If the XML_PROGRAMLISTING tag is set to YES Doxygen will \r
-# dump the program listings (including syntax highlighting \r
-# and cross-referencing information) to the XML output. Note that \r
-# enabling this will significantly increase the size of the XML output.\r
-\r
-XML_PROGRAMLISTING     = YES\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options for the AutoGen Definitions output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will \r
-# generate an AutoGen Definitions (see autogen.sf.net) file \r
-# that captures the structure of the code including all \r
-# documentation. Note that this feature is still experimental \r
-# and incomplete at the moment.\r
-\r
-GENERATE_AUTOGEN_DEF   = NO\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the Perl module output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_PERLMOD tag is set to YES Doxygen will \r
-# generate a Perl module file that captures the structure of \r
-# the code including all documentation. Note that this \r
-# feature is still experimental and incomplete at the \r
-# moment.\r
-\r
-GENERATE_PERLMOD       = NO\r
-\r
-# If the PERLMOD_LATEX tag is set to YES Doxygen will generate \r
-# the necessary Makefile rules, Perl scripts and LaTeX code to be able \r
-# to generate PDF and DVI output from the Perl module output.\r
-\r
-PERLMOD_LATEX          = NO\r
-\r
-# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be \r
-# nicely formatted so it can be parsed by a human reader.  This is useful \r
-# if you want to understand what is going on.  On the other hand, if this \r
-# tag is set to NO the size of the Perl module output will be much smaller \r
-# and Perl will parse it just the same.\r
-\r
-PERLMOD_PRETTY         = YES\r
-\r
-# The names of the make variables in the generated doxyrules.make file \r
-# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. \r
-# This is useful so different doxyrules.make files included by the same \r
-# Makefile don't overwrite each other's variables.\r
-\r
-PERLMOD_MAKEVAR_PREFIX = \r
-\r
-#---------------------------------------------------------------------------\r
-# Configuration options related to the preprocessor   \r
-#---------------------------------------------------------------------------\r
-\r
-# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will \r
-# evaluate all C-preprocessor directives found in the sources and include \r
-# files.\r
-\r
-ENABLE_PREPROCESSING   = YES\r
-\r
-# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro \r
-# names in the source code. If set to NO (the default) only conditional \r
-# compilation will be performed. Macro expansion can be done in a controlled \r
-# way by setting EXPAND_ONLY_PREDEF to YES.\r
-\r
-MACRO_EXPANSION        = YES\r
-\r
-# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES \r
-# then the macro expansion is limited to the macros specified with the \r
-# PREDEFINED and EXPAND_AS_DEFINED tags.\r
-\r
-EXPAND_ONLY_PREDEF     = YES\r
-\r
-# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files \r
-# in the INCLUDE_PATH (see below) will be search if a #include is found.\r
-\r
-SEARCH_INCLUDES        = YES\r
-\r
-# The INCLUDE_PATH tag can be used to specify one or more directories that \r
-# contain include files that are not input files but should be processed by \r
-# the preprocessor.\r
-\r
-INCLUDE_PATH           = \r
-\r
-# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard \r
-# patterns (like *.h and *.hpp) to filter out the header-files in the \r
-# directories. If left blank, the patterns specified with FILE_PATTERNS will \r
-# be used.\r
-\r
-INCLUDE_FILE_PATTERNS  = \r
-\r
-# The PREDEFINED tag can be used to specify one or more macro names that \r
-# are defined before the preprocessor is started (similar to the -D option of \r
-# gcc). The argument of the tag is a list of macros of the form: name \r
-# or name=definition (no spaces). If the definition and the = are \r
-# omitted =1 is assumed. To prevent a macro definition from being \r
-# undefined via #undef or recursively expanded use the := operator \r
-# instead of the = operator.\r
-\r
-PREDEFINED             = __DOXYGEN__\r
-\r
-# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then \r
-# this tag can be used to specify a list of macro names that should be expanded. \r
-# The macro definition that is found in the sources will be used. \r
-# Use the PREDEFINED tag if you want to use a different macro definition.\r
-\r
-EXPAND_AS_DEFINED      = BUTTLOADTAG\r
-\r
-# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then \r
-# doxygen's preprocessor will remove all function-like macros that are alone \r
-# on a line, have an all uppercase name, and do not end with a semicolon. Such \r
-# function macros are typically used for boiler-plate code, and will confuse \r
-# the parser if not removed.\r
-\r
-SKIP_FUNCTION_MACROS   = YES\r
-\r
-#---------------------------------------------------------------------------\r
-# Configuration::additions related to external references   \r
-#---------------------------------------------------------------------------\r
-\r
-# The TAGFILES option can be used to specify one or more tagfiles. \r
-# Optionally an initial location of the external documentation \r
-# can be added for each tagfile. The format of a tag file without \r
-# this location is as follows: \r
-#   TAGFILES = file1 file2 ... \r
-# Adding location for the tag files is done as follows: \r
-#   TAGFILES = file1=loc1 "file2 = loc2" ... \r
-# where "loc1" and "loc2" can be relative or absolute paths or \r
-# URLs. If a location is present for each tag, the installdox tool \r
-# does not have to be run to correct the links.\r
-# Note that each tag file must have a unique name\r
-# (where the name does NOT include the path)\r
-# If a tag file is not located in the directory in which doxygen \r
-# is run, you must also specify the path to the tagfile here.\r
-\r
-TAGFILES               = \r
-\r
-# When a file name is specified after GENERATE_TAGFILE, doxygen will create \r
-# a tag file that is based on the input files it reads.\r
-\r
-GENERATE_TAGFILE       = \r
-\r
-# If the ALLEXTERNALS tag is set to YES all external classes will be listed \r
-# in the class index. If set to NO only the inherited external classes \r
-# will be listed.\r
-\r
-ALLEXTERNALS           = NO\r
-\r
-# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed \r
-# in the modules index. If set to NO, only the current project's groups will \r
-# be listed.\r
-\r
-EXTERNAL_GROUPS        = YES\r
-\r
-# The PERL_PATH should be the absolute path and name of the perl script \r
-# interpreter (i.e. the result of `which perl').\r
-\r
-PERL_PATH              = /usr/bin/perl\r
-\r
-#---------------------------------------------------------------------------\r
-# Configuration options related to the dot tool   \r
-#---------------------------------------------------------------------------\r
-\r
-# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will \r
-# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base \r
-# or super classes. Setting the tag to NO turns the diagrams off. Note that \r
-# this option is superseded by the HAVE_DOT option below. This is only a \r
-# fallback. It is recommended to install and use dot, since it yields more \r
-# powerful graphs.\r
-\r
-CLASS_DIAGRAMS         = NO\r
-\r
-# You can define message sequence charts within doxygen comments using the \msc \r
-# command. Doxygen will then run the mscgen tool (see \r
-# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the \r
-# documentation. The MSCGEN_PATH tag allows you to specify the directory where \r
-# the mscgen tool resides. If left empty the tool is assumed to be found in the \r
-# default search path.\r
-\r
-MSCGEN_PATH            = \r
-\r
-# If set to YES, the inheritance and collaboration graphs will hide \r
-# inheritance and usage relations if the target is undocumented \r
-# or is not a class.\r
-\r
-HIDE_UNDOC_RELATIONS   = YES\r
-\r
-# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is \r
-# available from the path. This tool is part of Graphviz, a graph visualization \r
-# toolkit from AT&T and Lucent Bell Labs. The other options in this section \r
-# have no effect if this option is set to NO (the default)\r
-\r
-HAVE_DOT               = NO\r
-\r
-# By default doxygen will write a font called FreeSans.ttf to the output \r
-# directory and reference it in all dot files that doxygen generates. This \r
-# font does not include all possible unicode characters however, so when you need \r
-# these (or just want a differently looking font) you can specify the font name \r
-# using DOT_FONTNAME. You need need to make sure dot is able to find the font, \r
-# which can be done by putting it in a standard location or by setting the \r
-# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory \r
-# containing the font.\r
-\r
-DOT_FONTNAME           = FreeSans\r
-\r
-# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. \r
-# The default size is 10pt.\r
-\r
-DOT_FONTSIZE           = 10\r
-\r
-# By default doxygen will tell dot to use the output directory to look for the \r
-# FreeSans.ttf font (which doxygen will put there itself). If you specify a \r
-# different font using DOT_FONTNAME you can set the path where dot \r
-# can find it using this tag.\r
-\r
-DOT_FONTPATH           = \r
-\r
-# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen \r
-# will generate a graph for each documented class showing the direct and \r
-# indirect inheritance relations. Setting this tag to YES will force the \r
-# the CLASS_DIAGRAMS tag to NO.\r
-\r
-CLASS_GRAPH            = NO\r
-\r
-# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen \r
-# will generate a graph for each documented class showing the direct and \r
-# indirect implementation dependencies (inheritance, containment, and \r
-# class references variables) of the class with other documented classes.\r
-\r
-COLLABORATION_GRAPH    = NO\r
-\r
-# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen \r
-# will generate a graph for groups, showing the direct groups dependencies\r
-\r
-GROUP_GRAPHS           = NO\r
-\r
-# If the UML_LOOK tag is set to YES doxygen will generate inheritance and \r
-# collaboration diagrams in a style similar to the OMG's Unified Modeling \r
-# Language.\r
-\r
-UML_LOOK               = NO\r
-\r
-# If set to YES, the inheritance and collaboration graphs will show the \r
-# relations between templates and their instances.\r
-\r
-TEMPLATE_RELATIONS     = NO\r
-\r
-# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT \r
-# tags are set to YES then doxygen will generate a graph for each documented \r
-# file showing the direct and indirect include dependencies of the file with \r
-# other documented files.\r
-\r
-INCLUDE_GRAPH          = NO\r
-\r
-# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and \r
-# HAVE_DOT tags are set to YES then doxygen will generate a graph for each \r
-# documented header file showing the documented files that directly or \r
-# indirectly include this file.\r
-\r
-INCLUDED_BY_GRAPH      = NO\r
-\r
-# If the CALL_GRAPH and HAVE_DOT options are set to YES then \r
-# doxygen will generate a call dependency graph for every global function \r
-# or class method. Note that enabling this option will significantly increase \r
-# the time of a run. So in most cases it will be better to enable call graphs \r
-# for selected functions only using the \callgraph command.\r
-\r
-CALL_GRAPH             = NO\r
-\r
-# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then \r
-# doxygen will generate a caller dependency graph for every global function \r
-# or class method. Note that enabling this option will significantly increase \r
-# the time of a run. So in most cases it will be better to enable caller \r
-# graphs for selected functions only using the \callergraph command.\r
-\r
-CALLER_GRAPH           = NO\r
-\r
-# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen \r
-# will graphical hierarchy of all classes instead of a textual one.\r
-\r
-GRAPHICAL_HIERARCHY    = NO\r
-\r
-# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES \r
-# then doxygen will show the dependencies a directory has on other directories \r
-# in a graphical way. The dependency relations are determined by the #include\r
-# relations between the files in the directories.\r
-\r
-DIRECTORY_GRAPH        = NO\r
-\r
-# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images \r
-# generated by dot. Possible values are png, jpg, or gif\r
-# If left blank png will be used.\r
-\r
-DOT_IMAGE_FORMAT       = png\r
-\r
-# The tag DOT_PATH can be used to specify the path where the dot tool can be \r
-# found. If left blank, it is assumed the dot tool can be found in the path.\r
-\r
-DOT_PATH               = "C:/Program Files/Graphviz2.18/bin"\r
-\r
-# The DOTFILE_DIRS tag can be used to specify one or more directories that \r
-# contain dot files that are included in the documentation (see the \r
-# \dotfile command).\r
-\r
-DOTFILE_DIRS           = \r
-\r
-# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of \r
-# nodes that will be shown in the graph. If the number of nodes in a graph \r
-# becomes larger than this value, doxygen will truncate the graph, which is \r
-# visualized by representing a node as a red box. Note that doxygen if the \r
-# number of direct children of the root node in a graph is already larger than \r
-# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note \r
-# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.\r
-\r
-DOT_GRAPH_MAX_NODES    = 15\r
-\r
-# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the \r
-# graphs generated by dot. A depth value of 3 means that only nodes reachable \r
-# from the root by following a path via at most 3 edges will be shown. Nodes \r
-# that lay further from the root node will be omitted. Note that setting this \r
-# option to 1 or 2 may greatly reduce the computation time needed for large \r
-# code bases. Also note that the size of a graph can be further restricted by \r
-# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.\r
-\r
-MAX_DOT_GRAPH_DEPTH    = 2\r
-\r
-# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent \r
-# background. This is disabled by default, because dot on Windows does not \r
-# seem to support this out of the box. Warning: Depending on the platform used, \r
-# enabling this option may lead to badly anti-aliased labels on the edges of \r
-# a graph (i.e. they become hard to read).\r
-\r
-DOT_TRANSPARENT        = YES\r
-\r
-# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output \r
-# files in one run (i.e. multiple -o and -T options on the command line). This \r
-# makes dot run faster, but since only newer versions of dot (>1.8.10) \r
-# support this, this feature is disabled by default.\r
-\r
-DOT_MULTI_TARGETS      = NO\r
-\r
-# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will \r
-# generate a legend page explaining the meaning of the various boxes and \r
-# arrows in the dot generated graphs.\r
-\r
-GENERATE_LEGEND        = YES\r
-\r
-# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will \r
-# remove the intermediate dot files that are used to generate \r
-# the various graphs.\r
-\r
-DOT_CLEANUP            = YES\r
-\r
-#---------------------------------------------------------------------------\r
-# Configuration::additions related to the search engine   \r
-#---------------------------------------------------------------------------\r
-\r
-# The SEARCHENGINE tag specifies whether or not a search engine should be \r
-# used. If set to NO the values of all tags below this one will be ignored.\r
-\r
-SEARCHENGINE           = NO\r
diff --git a/Demos/Device/MIDI/MIDI.aps b/Demos/Device/MIDI/MIDI.aps
deleted file mode 100644 (file)
index e61e770..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<AVRStudio><MANAGEMENT><ProjectName>MIDI</ProjectName><Created>30-Sep-2008 14:13:12</Created><LastEdit>30-Sep-2008 14:13:33</LastEdit><ICON>241</ICON><ProjectType>0</ProjectType><Created>30-Sep-2008 14:13:12</Created><Version>4</Version><Build>4, 14, 0, 589</Build><ProjectTypeName>AVR GCC</ProjectTypeName></MANAGEMENT><CODE_CREATION><ObjectFile></ObjectFile><EntryFile></EntryFile><SaveFolder>C:\Users\Dean\Documents\Electronics\Projects\WORK\MyUSBWORK\Demos\MIDI\</SaveFolder></CODE_CREATION><DEBUG_TARGET><CURRENT_TARGET></CURRENT_TARGET><CURRENT_PART></CURRENT_PART><BREAKPOINTS></BREAKPOINTS><IO_EXPAND><HIDE>false</HIDE></IO_EXPAND><REGISTERNAMES><Register>R00</Register><Register>R01</Register><Register>R02</Register><Register>R03</Register><Register>R04</Register><Register>R05</Register><Register>R06</Register><Register>R07</Register><Register>R08</Register><Register>R09</Register><Register>R10</Register><Register>R11</Register><Register>R12</Register><Register>R13</Register><Register>R14</Register><Register>R15</Register><Register>R16</Register><Register>R17</Register><Register>R18</Register><Register>R19</Register><Register>R20</Register><Register>R21</Register><Register>R22</Register><Register>R23</Register><Register>R24</Register><Register>R25</Register><Register>R26</Register><Register>R27</Register><Register>R28</Register><Register>R29</Register><Register>R30</Register><Register>R31</Register></REGISTERNAMES><COM>Auto</COM><COMType>0</COMType><WATCHNUM>0</WATCHNUM><WATCHNAMES><Pane0></Pane0><Pane1></Pane1><Pane2></Pane2><Pane3></Pane3></WATCHNAMES><BreakOnTrcaeFull>0</BreakOnTrcaeFull></DEBUG_TARGET><Debugger><Triggers></Triggers></Debugger><AVRGCCPLUGIN><FILES><SOURCEFILE>Descriptors.c</SOURCEFILE><SOURCEFILE>MIDI.c</SOURCEFILE><HEADERFILE>Descriptors.h</HEADERFILE><HEADERFILE>MIDI.h</HEADERFILE><OTHERFILE>makefile</OTHERFILE></FILES><CONFIGS><CONFIG><NAME>default</NAME><USESEXTERNALMAKEFILE>YES</USESEXTERNALMAKEFILE><EXTERNALMAKEFILE>makefile</EXTERNALMAKEFILE><PART>atmega128</PART><HEX>1</HEX><LIST>1</LIST><MAP>1</MAP><OUTPUTFILENAME>MIDI.elf</OUTPUTFILENAME><OUTPUTDIR>default\</OUTPUTDIR><ISDIRTY>1</ISDIRTY><OPTIONS/><INCDIRS/><LIBDIRS/><LIBS/><LINKOBJECTS/><OPTIONSFORALL>-Wall -gdwarf-2 -std=gnu99 -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums</OPTIONSFORALL><LINKEROPTIONS></LINKEROPTIONS><SEGMENTS/></CONFIG></CONFIGS><LASTCONFIG>default</LASTCONFIG><USES_WINAVR>1</USES_WINAVR><GCC_LOC>C:\WinAVR-20080512\bin\avr-gcc.exe</GCC_LOC><MAKE_LOC>C:\WinAVR-20080512\utils\bin\make.exe</MAKE_LOC></AVRGCCPLUGIN><IOView><usergroups/><sort sorted="0" column="0" ordername="0" orderaddress="0" ordergroup="0"/></IOView><Files></Files><Events><Bookmarks></Bookmarks></Events><Trace><Filters></Filters></Trace></AVRStudio>\r
diff --git a/Demos/Device/MIDI/MIDI.c b/Demos/Device/MIDI/MIDI.c
deleted file mode 100644 (file)
index 8881d1d..0000000
+++ /dev/null
@@ -1,177 +0,0 @@
-/*\r
-             LUFA Library\r
-     Copyright (C) Dean Camera, 2009.\r
-              \r
-  dean [at] fourwalledcubicle [dot] com\r
-      www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
-  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
-  Permission to use, copy, modify, and distribute this software\r
-  and its documentation for any purpose and without fee is hereby\r
-  granted, provided that the above copyright notice appear in all\r
-  copies and that both that the copyright notice and this\r
-  permission notice and warranty disclaimer appear in supporting\r
-  documentation, and that the name of the author not be used in\r
-  advertising or publicity pertaining to distribution of the\r
-  software without specific, written prior permission.\r
-\r
-  The author disclaim all warranties with regard to this\r
-  software, including all implied warranties of merchantability\r
-  and fitness.  In no event shall the author be liable for any\r
-  special, indirect or consequential damages or any damages\r
-  whatsoever resulting from loss of use, data or profits, whether\r
-  in an action of contract, negligence or other tortious action,\r
-  arising out of or in connection with the use or performance of\r
-  this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- *  Main source file for the MIDI demo. This file contains the main tasks of\r
- *  the demo and is responsible for the initial application hardware configuration.\r
- */\r
-\r
-#include "MIDI.h"\r
-\r
-/** LUFA MIDI Class driver interface configuration and state information. This structure is\r
- *  passed to all MIDI Class driver functions, so that multiple instances of the same class\r
- *  within a device can be differentiated from one another.\r
- */\r
-USB_ClassInfo_MIDI_t Keyboard_MIDI_Interface =\r
-       {\r
-               .StreamingInterfaceNumber = 1,\r
-\r
-               .DataINEndpointNumber     = MIDI_STREAM_IN_EPNUM,\r
-               .DataINEndpointSize       = MIDI_STREAM_EPSIZE,\r
-\r
-               .DataOUTEndpointNumber    = MIDI_STREAM_OUT_EPNUM,\r
-               .DataOUTEndpointSize      = MIDI_STREAM_EPSIZE,\r
-       };\r
-\r
-/** Main program entry point. This routine contains the overall program flow, including initial\r
- *  setup of all components and the main program loop.\r
- */\r
-int main(void)\r
-{\r
-       SetupHardware();\r
-\r
-       LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);\r
-       \r
-       for (;;)\r
-       {\r
-               CheckJoystickMovement();\r
-       \r
-               USB_MIDI_USBTask(&Keyboard_MIDI_Interface);\r
-               USB_USBTask();\r
-       }\r
-}\r
-\r
-/** Configures the board hardware and chip peripherals for the demo's functionality. */\r
-void SetupHardware(void)\r
-{\r
-       /* Disable watchdog if enabled by bootloader/fuses */\r
-       MCUSR &= ~(1 << WDRF);\r
-       wdt_disable();\r
-\r
-       /* Disable clock division */\r
-       clock_prescale_set(clock_div_1);\r
-       \r
-       /* Hardware Initialization */\r
-       Joystick_Init();\r
-       LEDs_Init();\r
-       Buttons_Init();\r
-       USB_Init();\r
-}\r
-\r
-/** Checks for changes in the position of the board joystick, sending MIDI events to the host upon each change. */\r
-void CheckJoystickMovement(void)\r
-{\r
-       static uint8_t PrevJoystickStatus;\r
-\r
-       uint8_t MIDICommand = 0;\r
-       uint8_t MIDIPitch;\r
-       \r
-       /* Get current joystick mask, XOR with previous to detect joystick changes */\r
-       uint8_t JoystickStatus  = Joystick_GetStatus();\r
-       uint8_t JoystickChanges = (JoystickStatus ^ PrevJoystickStatus);\r
-               \r
-       /* Get board button status - if pressed use channel 10 (percussion), otherwise use channel 1 */\r
-       uint8_t Channel = ((Buttons_GetStatus() & BUTTONS_BUTTON1) ? MIDI_CHANNEL(10) : MIDI_CHANNEL(1));\r
-\r
-       if (JoystickChanges & JOY_LEFT)\r
-       {\r
-               MIDICommand = ((JoystickStatus & JOY_LEFT)? MIDI_COMMAND_NOTE_ON : MIDI_COMMAND_NOTE_OFF);\r
-               MIDIPitch   = 0x3C;\r
-       }\r
-\r
-       if (JoystickChanges & JOY_UP)\r
-       {\r
-               MIDICommand = ((JoystickStatus & JOY_UP)? MIDI_COMMAND_NOTE_ON : MIDI_COMMAND_NOTE_OFF);\r
-               MIDIPitch   = 0x3D;\r
-       }\r
-\r
-       if (JoystickChanges & JOY_RIGHT)\r
-       {\r
-               MIDICommand = ((JoystickStatus & JOY_RIGHT)? MIDI_COMMAND_NOTE_ON : MIDI_COMMAND_NOTE_OFF);\r
-               MIDIPitch   = 0x3E;\r
-       }\r
-       \r
-       if (JoystickChanges & JOY_DOWN)\r
-       {\r
-               MIDICommand = ((JoystickStatus & JOY_DOWN)? MIDI_COMMAND_NOTE_ON : MIDI_COMMAND_NOTE_OFF);\r
-               MIDIPitch   = 0x3F;\r
-       }\r
-\r
-       if (JoystickChanges & JOY_PRESS)\r
-       {\r
-               MIDICommand = ((JoystickStatus & JOY_PRESS)? MIDI_COMMAND_NOTE_ON : MIDI_COMMAND_NOTE_OFF);\r
-               MIDIPitch   = 0x3B;\r
-       }\r
-       \r
-       if (MIDICommand)\r
-       {\r
-               USB_MIDI_EventPacket_t MIDIEvent = (USB_MIDI_EventPacket_t)\r
-                       {\r
-                               .CableNumber = 0,\r
-                               .Command     = MIDICommand,\r
-                               \r
-                               .Data1       = (MIDICommand << 4) | Channel,\r
-                               .Data2       = MIDIPitch,\r
-                               .Data3       = MIDI_STANDARD_VELOCITY,                  \r
-                       };\r
-                       \r
-               USB_MIDI_SendEventPacket(&Keyboard_MIDI_Interface, &MIDIEvent);\r
-       }\r
-\r
-       PrevJoystickStatus = JoystickStatus;\r
-}\r
-\r
-/** Event handler for the library USB Connection event. */\r
-void EVENT_USB_Connect(void)\r
-{\r
-       LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING);\r
-}\r
-\r
-/** Event handler for the library USB Disconnection event. */\r
-void EVENT_USB_Disconnect(void)\r
-{\r
-       LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);\r
-}\r
-\r
-/** Event handler for the library USB Configuration Changed event. */\r
-void EVENT_USB_ConfigurationChanged(void)\r
-{\r
-       LEDs_SetAllLEDs(LEDMASK_USB_READY);\r
-       \r
-       if (!(USB_MIDI_ConfigureEndpoints(&Keyboard_MIDI_Interface)))\r
-         LEDs_SetAllLEDs(LEDMASK_USB_ERROR);\r
-}\r
-\r
-/** Event handler for the library USB Unhandled Control Packet event. */\r
-void EVENT_USB_UnhandledControlPacket(void)\r
-{\r
-       USB_MIDI_ProcessControlPacket(&Keyboard_MIDI_Interface);\r
-}\r
diff --git a/Demos/Device/MIDI/MIDI.h b/Demos/Device/MIDI/MIDI.h
deleted file mode 100644 (file)
index 913b318..0000000
+++ /dev/null
@@ -1,77 +0,0 @@
-/*\r
-             LUFA Library\r
-     Copyright (C) Dean Camera, 2009.\r
-              \r
-  dean [at] fourwalledcubicle [dot] com\r
-      www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
-  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
-  Permission to use, copy, modify, and distribute this software\r
-  and its documentation for any purpose and without fee is hereby\r
-  granted, provided that the above copyright notice appear in all\r
-  copies and that both that the copyright notice and this\r
-  permission notice and warranty disclaimer appear in supporting\r
-  documentation, and that the name of the author not be used in\r
-  advertising or publicity pertaining to distribution of the\r
-  software without specific, written prior permission.\r
-\r
-  The author disclaim all warranties with regard to this\r
-  software, including all implied warranties of merchantability\r
-  and fitness.  In no event shall the author be liable for any\r
-  special, indirect or consequential damages or any damages\r
-  whatsoever resulting from loss of use, data or profits, whether\r
-  in an action of contract, negligence or other tortious action,\r
-  arising out of or in connection with the use or performance of\r
-  this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- *  Header file for AudioOutput.c.\r
- */\r
\r
-#ifndef _AUDIO_OUTPUT_H_\r
-#define _AUDIO_OUTPUT_H_\r
-\r
-       /* Includes: */\r
-               #include <avr/io.h>\r
-               #include <avr/wdt.h>\r
-               #include <avr/power.h>\r
-               #include <stdbool.h>\r
-\r
-               #include "Descriptors.h"\r
-                               \r
-               #include <LUFA/Version.h>\r
-               #include <LUFA/Drivers/Board/LEDs.h>\r
-               #include <LUFA/Drivers/Board/Joystick.h>\r
-               #include <LUFA/Drivers/Board/Buttons.h>\r
-               #include <LUFA/Drivers/Peripheral/ADC.h>\r
-               #include <LUFA/Drivers/USB/USB.h>\r
-               #include <LUFA/Drivers/USB/Class/Device/MIDI.h>\r
-\r
-       /* Macros: */\r
-               /** LED mask for the library LED driver, to indicate that the USB interface is not ready. */\r
-               #define LEDMASK_USB_NOTREADY      LEDS_LED1\r
-\r
-               /** LED mask for the library LED driver, to indicate that the USB interface is enumerating. */\r
-               #define LEDMASK_USB_ENUMERATING  (LEDS_LED2 | LEDS_LED3)\r
-\r
-               /** LED mask for the library LED driver, to indicate that the USB interface is ready. */\r
-               #define LEDMASK_USB_READY        (LEDS_LED2 | LEDS_LED4)\r
-\r
-               /** LED mask for the library LED driver, to indicate that an error has occurred in the USB interface. */\r
-               #define LEDMASK_USB_ERROR        (LEDS_LED1 | LEDS_LED3)\r
-               \r
-       /* Function Prototypes: */\r
-               void SetupHardware(void);\r
-               void CheckJoystickMovement(void);\r
-               \r
-               void EVENT_USB_Connect(void);\r
-               void EVENT_USB_Disconnect(void);\r
-               void EVENT_USB_ConfigurationChanged(void);\r
-               void EVENT_USB_UnhandledControlPacket(void);\r
-               \r
-#endif\r
diff --git a/Demos/Device/MIDI/MIDI.txt b/Demos/Device/MIDI/MIDI.txt
deleted file mode 100644 (file)
index 5a31350..0000000
+++ /dev/null
@@ -1,65 +0,0 @@
-/** \file\r
- *\r
- *  This file contains special DoxyGen information for the generation of the main page and other special\r
- *  documentation pages. It is not a project source file.\r
- */\r
\r
-/** \mainpage MIDI Input Device Demo\r
- *\r
- *  \section SSec_Info USB Information:\r
- *\r
- *  The following table gives a rundown of the USB utilization of this demo.\r
- *\r
- *  <table>\r
- *   <tr>\r
- *    <td><b>USB Mode:</b></td>\r
- *    <td>Device</td>\r
- *   </tr>\r
- *   <tr>\r
- *    <td><b>USB Class:</b></td>\r
- *    <td>Audio Class</td>\r
- *   </tr>\r
- *   <tr> \r
- *    <td><b>USB Subclass:</b></td>\r
- *    <td>Standard Audio Device</td>\r
- *   </tr>\r
- *   <tr>\r
- *    <td><b>Relevant Standards:</b></td>\r
- *    <td>USBIF Audio Class Specification</td>\r
- *    <td>USB-MIDI Audio Class Extension Specification</td>\r
- *    <td>General MIDI Specification</td>\r
- *   </tr>\r
- *   <tr>\r
- *    <td><b>Usable Speeds:</b></td>\r
- *    <td>Full Speed Mode</td>\r
- *   </tr>\r
- *  </table>\r
- *\r
- *  \section SSec_Description Project Description: \r
- *\r
- *  MIDI demonstration application. This gives a simple reference\r
- *  application for implementing the USB-MIDI class in USB devices.\r
- *  It is built upon the USB Audio class.\r
- *  \r
- *  Joystick movements are translated into note on/off messages and\r
- *  are sent to the host PC as MIDI streams which can be read by any\r
- *  MIDI program supporting MIDI IN devices.\r
- *  \r
- *  If the HWB is not pressed, channel 1 (default piano) is used. If\r
- *  the HWB is set, then channel 10 (default percussion) is selected.\r
- *  \r
- *  This device implements MIDI-THRU mode, with the IN MIDI data being\r
- *  generated by the device itself. OUT MIDI data is discarded.\r
- *\r
- *  \section SSec_Options Project Options\r
- *\r
- *  The following defines can be found in this demo, which can control the demo behaviour when defined, or changed in value.\r
- *\r
- *  <table>\r
- *   <tr>\r
- *    <td>\r
- *     None\r
- *    </td>\r
- *   </tr>\r
- *  </table>\r
- */\r
diff --git a/Demos/Device/MIDI/makefile b/Demos/Device/MIDI/makefile
deleted file mode 100644 (file)
index f850421..0000000
+++ /dev/null
@@ -1,733 +0,0 @@
-# Hey Emacs, this is a -*- makefile -*-\r
-#----------------------------------------------------------------------------\r
-# WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al.\r
-#  >> Modified for use with the LUFA project. <<\r
-#\r
-# Released to the Public Domain\r
-#\r
-# Additional material for this makefile was written by:\r
-# Peter Fleury\r
-# Tim Henigan\r
-# Colin O'Flynn\r
-# Reiner Patommel\r
-# Markus Pfaff\r
-# Sander Pool\r
-# Frederik Rouleau\r
-# Carlos Lamas\r
-# Dean Camera\r
-# Opendous Inc.\r
-# Denver Gingerich\r
-#\r
-#----------------------------------------------------------------------------\r
-# On command line:\r
-#\r
-# make all = Make software.\r
-#\r
-# make clean = Clean out built project files.\r
-#\r
-# make coff = Convert ELF to AVR COFF.\r
-#\r
-# make extcoff = Convert ELF to AVR Extended COFF.\r
-#\r
-# make program = Download the hex file to the device, using avrdude.\r
-#                Please customize the avrdude settings below first!\r
-#\r
-# make dfu = Download the hex file to the device, using dfu-programmer (must\r
-#            have dfu-programmer installed).\r
-#\r
-# make flip = Download the hex file to the device, using Atmel FLIP (must\r
-#             have Atmel FLIP installed).\r
-#\r
-# make dfu-ee = Download the eeprom file to the device, using dfu-programmer\r
-#               (must have dfu-programmer installed).\r
-#\r
-# make flip-ee = Download the eeprom file to the device, using Atmel FLIP\r
-#                (must have Atmel FLIP installed).\r
-#\r
-# make doxygen = Generate DoxyGen documentation for the project (must have\r
-#                DoxyGen installed)\r
-#\r
-# make debug = Start either simulavr or avarice as specified for debugging, \r
-#              with avr-gdb or avr-insight as the front end for debugging.\r
-#\r
-# make filename.s = Just compile filename.c into the assembler code only.\r
-#\r
-# make filename.i = Create a preprocessed source file for use in submitting\r
-#                   bug reports to the GCC project.\r
-#\r
-# To rebuild project do "make clean" then "make all".\r
-#----------------------------------------------------------------------------\r
-\r
-\r
-# MCU name\r
-MCU = at90usb1287\r
-\r
-\r
-# Target board (see library "Board Types" documentation, USER or blank for projects not requiring\r
-# LUFA board drivers). If USER is selected, put custom board drivers in a directory called \r
-# "Board" inside the application directory.\r
-BOARD  = USBKEY\r
-\r
-\r
-# Processor frequency.\r
-#     This will define a symbol, F_CPU, in all source code files equal to the \r
-#     processor frequency. You can then use this symbol in your source code to \r
-#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done\r
-#     automatically to create a 32-bit value in your source code.\r
-#     Typical values are:\r
-#         F_CPU =  1000000\r
-#         F_CPU =  1843200\r
-#         F_CPU =  2000000\r
-#         F_CPU =  3686400\r
-#         F_CPU =  4000000\r
-#         F_CPU =  7372800\r
-#         F_CPU =  8000000\r
-#         F_CPU = 11059200\r
-#         F_CPU = 14745600\r
-#         F_CPU = 16000000\r
-#         F_CPU = 18432000\r
-#         F_CPU = 20000000\r
-F_CPU = 8000000\r
-\r
-\r
-# Input clock frequency.\r
-#     This will define a symbol, F_CLOCK, in all source code files equal to the \r
-#     input clock frequency (before any prescaling is performed). This value may\r
-#     differ from F_CPU if prescaling is used on the latter, and is required as the\r
-#     raw input clock is fed directly to the PLL sections of the AVR for high speed\r
-#     clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'\r
-#     at the end, this will be done automatically to create a 32-bit value in your\r
-#     source code.\r
-#\r
-#     If no clock division is performed on the input clock inside the AVR (via the\r
-#     CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.\r
-F_CLOCK = 8000000\r
-\r
-\r
-# Output format. (can be srec, ihex, binary)\r
-FORMAT = ihex\r
-\r
-\r
-# Target file name (without extension).\r
-TARGET = MIDI\r
-\r
-\r
-# Object files directory\r
-#     To put object files in current directory, use a dot (.), do NOT make\r
-#     this an empty or blank macro!\r
-OBJDIR = .\r
-\r
-\r
-# Path to the LUFA library\r
-LUFA_PATH = ../../..\r
-\r
-\r
-# List C source files here. (C dependencies are automatically generated.)\r
-SRC = $(TARGET).c                                                 \\r
-         Descriptors.c                                               \\r
-         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/DevChapter9.c        \\r
-         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Endpoint.c           \\r
-         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Host.c               \\r
-         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/HostChapter9.c       \\r
-         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/LowLevel.c           \\r
-         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Pipe.c               \\r
-         $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/Events.c            \\r
-         $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBInterrupt.c      \\r
-         $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBTask.c           \\r
-         $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/ConfigDescriptor.c  \\r
-         $(LUFA_PATH)/LUFA/Drivers/USB/Class/Device/MIDI.c           \\r
-\r
-\r
-# List C++ source files here. (C dependencies are automatically generated.)\r
-CPPSRC = \r
-\r
-\r
-# List Assembler source files here.\r
-#     Make them always end in a capital .S.  Files ending in a lowercase .s\r
-#     will not be considered source files but generated files (assembler\r
-#     output from the compiler), and will be deleted upon "make clean"!\r
-#     Even though the DOS/Win* filesystem matches both .s and .S the same,\r
-#     it will preserve the spelling of the filenames, and gcc itself does\r
-#     care about how the name is spelled on its command-line.\r
-ASRC =\r
-\r
-\r
-# Optimization level, can be [0, 1, 2, 3, s]. \r
-#     0 = turn off optimization. s = optimize for size.\r
-#     (Note: 3 is not always the best optimization level. See avr-libc FAQ.)\r
-OPT = s\r
-\r
-\r
-# Debugging format.\r
-#     Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs.\r
-#     AVR Studio 4.10 requires dwarf-2.\r
-#     AVR [Extended] COFF format requires stabs, plus an avr-objcopy run.\r
-DEBUG = dwarf-2\r
-\r
-\r
-# List any extra directories to look for include files here.\r
-#     Each directory must be seperated by a space.\r
-#     Use forward slashes for directory separators.\r
-#     For a directory that has spaces, enclose it in quotes.\r
-EXTRAINCDIRS = $(LUFA_PATH)/\r
-\r
-\r
-# Compiler flag to set the C Standard level.\r
-#     c89   = "ANSI" C\r
-#     gnu89 = c89 plus GCC extensions\r
-#     c99   = ISO C99 standard (not yet fully implemented)\r
-#     gnu99 = c99 plus GCC extensions\r
-CSTANDARD = -std=gnu99\r
-\r
-\r
-# Place -D or -U options here for C sources\r
-CDEFS  = -DF_CPU=$(F_CPU)UL -DF_CLOCK=$(F_CLOCK)UL -DBOARD=BOARD_$(BOARD)\r
-CDEFS += -DUSE_NONSTANDARD_DESCRIPTOR_NAMES -DUSB_DEVICE_ONLY\r
-CDEFS += -DFIXED_CONTROL_ENDPOINT_SIZE=8 -DUSE_SINGLE_DEVICE_CONFIGURATION\r
-CDEFS += -DUSE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)"\r
-\r
-\r
-# Place -D or -U options here for ASM sources\r
-ADEFS = -DF_CPU=$(F_CPU)\r
-\r
-\r
-# Place -D or -U options here for C++ sources\r
-CPPDEFS = -DF_CPU=$(F_CPU)UL\r
-#CPPDEFS += -D__STDC_LIMIT_MACROS\r
-#CPPDEFS += -D__STDC_CONSTANT_MACROS\r
-\r
-\r
-\r
-#---------------- Compiler Options C ----------------\r
-#  -g*:          generate debugging information\r
-#  -O*:          optimization level\r
-#  -f...:        tuning, see GCC manual and avr-libc documentation\r
-#  -Wall...:     warning level\r
-#  -Wa,...:      tell GCC to pass this to the assembler.\r
-#    -adhlns...: create assembler listing\r
-CFLAGS = -g$(DEBUG)\r
-CFLAGS += $(CDEFS)\r
-CFLAGS += -O$(OPT)\r
-CFLAGS += -funsigned-char\r
-CFLAGS += -funsigned-bitfields\r
-CFLAGS += -ffunction-sections\r
-CFLAGS += -fpack-struct\r
-CFLAGS += -fshort-enums\r
-CFLAGS += -finline-limit=20\r
-CFLAGS += -Wall\r
-CFLAGS += -Wstrict-prototypes\r
-CFLAGS += -Wundef\r
-#CFLAGS += -fno-unit-at-a-time\r
-#CFLAGS += -Wunreachable-code\r
-#CFLAGS += -Wsign-compare\r
-CFLAGS += -Wa,-adhlns=$(<:%.c=$(OBJDIR)/%.lst)\r
-CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))\r
-CFLAGS += $(CSTANDARD)\r
-\r
-\r
-#---------------- Compiler Options C++ ----------------\r
-#  -g*:          generate debugging information\r
-#  -O*:          optimization level\r
-#  -f...:        tuning, see GCC manual and avr-libc documentation\r
-#  -Wall...:     warning level\r
-#  -Wa,...:      tell GCC to pass this to the assembler.\r
-#    -adhlns...: create assembler listing\r
-CPPFLAGS = -g$(DEBUG)\r
-CPPFLAGS += $(CPPDEFS)\r
-CPPFLAGS += -O$(OPT)\r
-CPPFLAGS += -funsigned-char\r
-CPPFLAGS += -funsigned-bitfields\r
-CPPFLAGS += -fpack-struct\r
-CPPFLAGS += -fshort-enums\r
-CPPFLAGS += -fno-exceptions\r
-CPPFLAGS += -Wall\r
-CFLAGS += -Wundef\r
-#CPPFLAGS += -mshort-calls\r
-#CPPFLAGS += -fno-unit-at-a-time\r
-#CPPFLAGS += -Wstrict-prototypes\r
-#CPPFLAGS += -Wunreachable-code\r
-#CPPFLAGS += -Wsign-compare\r
-CPPFLAGS += -Wa,-adhlns=$(<:%.cpp=$(OBJDIR)/%.lst)\r
-CPPFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))\r
-#CPPFLAGS += $(CSTANDARD)\r
-\r
-\r
-#---------------- Assembler Options ----------------\r
-#  -Wa,...:   tell GCC to pass this to the assembler.\r
-#  -adhlns:   create listing\r
-#  -gstabs:   have the assembler create line number information; note that\r
-#             for use in COFF files, additional information about filenames\r
-#             and function names needs to be present in the assembler source\r
-#             files -- see avr-libc docs [FIXME: not yet described there]\r
-#  -listing-cont-lines: Sets the maximum number of continuation lines of hex \r
-#       dump that will be displayed for a given single line of source input.\r
-ASFLAGS = $(ADEFS) -Wa,-adhlns=$(<:%.S=$(OBJDIR)/%.lst),-gstabs,--listing-cont-lines=100\r
-\r
-\r
-#---------------- Library Options ----------------\r
-# Minimalistic printf version\r
-PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min\r
-\r
-# Floating point printf version (requires MATH_LIB = -lm below)\r
-PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt\r
-\r
-# If this is left blank, then it will use the Standard printf version.\r
-PRINTF_LIB = \r
-#PRINTF_LIB = $(PRINTF_LIB_MIN)\r
-#PRINTF_LIB = $(PRINTF_LIB_FLOAT)\r
-\r
-\r
-# Minimalistic scanf version\r
-SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min\r
-\r
-# Floating point + %[ scanf version (requires MATH_LIB = -lm below)\r
-SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt\r
-\r
-# If this is left blank, then it will use the Standard scanf version.\r
-SCANF_LIB = \r
-#SCANF_LIB = $(SCANF_LIB_MIN)\r
-#SCANF_LIB = $(SCANF_LIB_FLOAT)\r
-\r
-\r
-MATH_LIB = -lm\r
-\r
-\r
-# List any extra directories to look for libraries here.\r
-#     Each directory must be seperated by a space.\r
-#     Use forward slashes for directory separators.\r
-#     For a directory that has spaces, enclose it in quotes.\r
-EXTRALIBDIRS = \r
-\r
-\r
-\r
-#---------------- External Memory Options ----------------\r
-\r
-# 64 KB of external RAM, starting after internal RAM (ATmega128!),\r
-# used for variables (.data/.bss) and heap (malloc()).\r
-#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff\r
-\r
-# 64 KB of external RAM, starting after internal RAM (ATmega128!),\r
-# only used for heap (malloc()).\r
-#EXTMEMOPTS = -Wl,--section-start,.data=0x801100,--defsym=__heap_end=0x80ffff\r
-\r
-EXTMEMOPTS =\r
-\r
-\r
-\r
-#---------------- Linker Options ----------------\r
-#  -Wl,...:     tell GCC to pass this to linker.\r
-#    -Map:      create map file\r
-#    --cref:    add cross reference to  map file\r
-LDFLAGS = -Wl,-Map=$(TARGET).map,--cref\r
-LDFLAGS += -Wl,--relax \r
-LDFLAGS += -Wl,--gc-sections\r
-LDFLAGS += $(EXTMEMOPTS)\r
-LDFLAGS += $(patsubst %,-L%,$(EXTRALIBDIRS))\r
-LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)\r
-#LDFLAGS += -T linker_script.x\r
-\r
-\r
-\r
-#---------------- Programming Options (avrdude) ----------------\r
-\r
-# Programming hardware: alf avr910 avrisp bascom bsd \r
-# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500\r
-#\r
-# Type: avrdude -c ?\r
-# to get a full listing.\r
-#\r
-AVRDUDE_PROGRAMMER = jtagmkII\r
-\r
-# com1 = serial port. Use lpt1 to connect to parallel port.\r
-AVRDUDE_PORT = usb\r
-\r
-AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex\r
-#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep\r
-\r
-\r
-# Uncomment the following if you want avrdude's erase cycle counter.\r
-# Note that this counter needs to be initialized first using -Yn,\r
-# see avrdude manual.\r
-#AVRDUDE_ERASE_COUNTER = -y\r
-\r
-# Uncomment the following if you do /not/ wish a verification to be\r
-# performed after programming the device.\r
-#AVRDUDE_NO_VERIFY = -V\r
-\r
-# Increase verbosity level.  Please use this when submitting bug\r
-# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude> \r
-# to submit bug reports.\r
-#AVRDUDE_VERBOSE = -v -v\r
-\r
-AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)\r
-AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY)\r
-AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE)\r
-AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER)\r
-\r
-\r
-\r
-#---------------- Debugging Options ----------------\r
-\r
-# For simulavr only - target MCU frequency.\r
-DEBUG_MFREQ = $(F_CPU)\r
-\r
-# Set the DEBUG_UI to either gdb or insight.\r
-# DEBUG_UI = gdb\r
-DEBUG_UI = insight\r
-\r
-# Set the debugging back-end to either avarice, simulavr.\r
-DEBUG_BACKEND = avarice\r
-#DEBUG_BACKEND = simulavr\r
-\r
-# GDB Init Filename.\r
-GDBINIT_FILE = __avr_gdbinit\r
-\r
-# When using avarice settings for the JTAG\r
-JTAG_DEV = /dev/com1\r
-\r
-# Debugging port used to communicate between GDB / avarice / simulavr.\r
-DEBUG_PORT = 4242\r
-\r
-# Debugging host used to communicate between GDB / avarice / simulavr, normally\r
-#     just set to localhost unless doing some sort of crazy debugging when \r
-#     avarice is running on a different computer.\r
-DEBUG_HOST = localhost\r
-\r
-\r
-\r
-#============================================================================\r
-\r
-\r
-# Define programs and commands.\r
-SHELL = sh\r
-CC = avr-gcc\r
-OBJCOPY = avr-objcopy\r
-OBJDUMP = avr-objdump\r
-SIZE = avr-size\r
-AR = avr-ar rcs\r
-NM = avr-nm\r
-AVRDUDE = avrdude\r
-REMOVE = rm -f\r
-REMOVEDIR = rm -rf\r
-COPY = cp\r
-WINSHELL = cmd\r
-\r
-# Define Messages\r
-# English\r
-MSG_ERRORS_NONE = Errors: none\r
-MSG_BEGIN = -------- begin --------\r
-MSG_END = --------  end  --------\r
-MSG_SIZE_BEFORE = Size before: \r
-MSG_SIZE_AFTER = Size after:\r
-MSG_COFF = Converting to AVR COFF:\r
-MSG_EXTENDED_COFF = Converting to AVR Extended COFF:\r
-MSG_FLASH = Creating load file for Flash:\r
-MSG_EEPROM = Creating load file for EEPROM:\r
-MSG_EXTENDED_LISTING = Creating Extended Listing:\r
-MSG_SYMBOL_TABLE = Creating Symbol Table:\r
-MSG_LINKING = Linking:\r
-MSG_COMPILING = Compiling C:\r
-MSG_COMPILING_CPP = Compiling C++:\r
-MSG_ASSEMBLING = Assembling:\r
-MSG_CLEANING = Cleaning project:\r
-MSG_CREATING_LIBRARY = Creating library:\r
-\r
-\r
-\r
-\r
-# Define all object files.\r
-OBJ = $(SRC:%.c=$(OBJDIR)/%.o) $(CPPSRC:%.cpp=$(OBJDIR)/%.o) $(ASRC:%.S=$(OBJDIR)/%.o) \r
-\r
-# Define all listing files.\r
-LST = $(SRC:%.c=$(OBJDIR)/%.lst) $(CPPSRC:%.cpp=$(OBJDIR)/%.lst) $(ASRC:%.S=$(OBJDIR)/%.lst) \r
-\r
-\r
-# Compiler flags to generate dependency files.\r
-GENDEPFLAGS = -MMD -MP -MF .dep/$(@F).d\r
-\r
-\r
-# Combine all necessary flags and optional flags.\r
-# Add target processor to flags.\r
-ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS)\r
-ALL_CPPFLAGS = -mmcu=$(MCU) -I. -x c++ $(CPPFLAGS) $(GENDEPFLAGS)\r
-ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)\r
-\r
-\r
-\r
-\r
-\r
-# Default target.\r
-all: begin gccversion sizebefore build checkhooks checklibmode checkboard sizeafter end\r
-\r
-# Change the build target to build a HEX file or a library.\r
-build: elf hex eep lss sym\r
-#build: lib\r
-\r
-\r
-elf: $(TARGET).elf\r
-hex: $(TARGET).hex\r
-eep: $(TARGET).eep\r
-lss: $(TARGET).lss\r
-sym: $(TARGET).sym\r
-LIBNAME=lib$(TARGET).a\r
-lib: $(LIBNAME)\r
-\r
-\r
-\r
-# Eye candy.\r
-# AVR Studio 3.x does not check make's exit code but relies on\r
-# the following magic strings to be generated by the compile job.\r
-begin:\r
-       @echo\r
-       @echo $(MSG_BEGIN)\r
-\r
-end:\r
-       @echo $(MSG_END)\r
-       @echo\r
-\r
-\r
-# Display size of file.\r
-HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex\r
-ELFSIZE = $(SIZE) $(MCU_FLAG) $(FORMAT_FLAG) $(TARGET).elf\r
-MCU_FLAG = $(shell $(SIZE) --help | grep -- --mcu > /dev/null && echo --mcu=$(MCU) )\r
-FORMAT_FLAG = $(shell $(SIZE) --help | grep -- --format=.*avr > /dev/null && echo --format=avr )\r
-\r
-sizebefore:\r
-       @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \\r
-       2>/dev/null; echo; fi\r
-\r
-sizeafter:\r
-       @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \\r
-       2>/dev/null; echo; fi\r
-\r
-checkhooks: build\r
-       @echo\r
-       @echo ------- Unhooked LUFA Events -------\r
-       @$(shell) (grep -s '^EVENT_.*LUFA/.*\\.o' $(TARGET).map | \\r
-                  cut -d' ' -f1 | cut -d'_' -f2- | grep ".*") || \\r
-                          echo "(None)"\r
-       @echo ------------------------------------\r
-\r
-checklibmode:\r
-       @echo\r
-       @echo ----------- Library Mode -----------\r
-       @$(shell) ($(CC) $(ALL_CFLAGS) -E -dM - < /dev/null \\r
-                 | grep 'USB_\(DEVICE\|HOST\)_ONLY' | cut -d' ' -f2 | grep ".*") \\r
-                 || echo "No specific mode (both device and host mode allowable)."\r
-       @echo ------------------------------------\r
-\r
-checkboard:\r
-       @echo\r
-       @echo ---------- Selected Board ----------\r
-       @echo Selected board model is $(BOARD).\r
-       @echo ------------------------------------\r
-       \r
-# Display compiler version information.\r
-gccversion : \r
-       @$(CC) --version\r
-\r
-\r
-\r
-# Program the device.  \r
-program: $(TARGET).hex $(TARGET).eep\r
-       $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)\r
-\r
-flip: $(TARGET).hex\r
-       batchisp -hardware usb -device $(MCU) -operation erase f\r
-       batchisp -hardware usb -device $(MCU) -operation loadbuffer $(TARGET).hex program\r
-       batchisp -hardware usb -device $(MCU) -operation start reset 0\r
-\r
-dfu: $(TARGET).hex\r
-       dfu-programmer $(MCU) erase\r
-       dfu-programmer $(MCU) flash --debug 1 $(TARGET).hex\r
-       dfu-programmer $(MCU) reset\r
-\r
-flip-ee: $(TARGET).hex $(TARGET).eep\r
-       copy $(TARGET).eep $(TARGET)eep.hex\r
-       batchisp -hardware usb -device $(MCU) -operation memory EEPROM erase\r
-       batchisp -hardware usb -device $(MCU) -operation memory EEPROM loadbuffer $(TARGET)eep.hex program\r
-       batchisp -hardware usb -device $(MCU) -operation start reset 0\r
-\r
-dfu-ee: $(TARGET).hex $(TARGET).eep\r
-       dfu-programmer $(MCU) flash-eeprom --debug 1 --suppress-bootloader-mem $(TARGET).eep\r
-       dfu-programmer $(MCU) reset\r
-\r
-\r
-# Generate avr-gdb config/init file which does the following:\r
-#     define the reset signal, load the target file, connect to target, and set \r
-#     a breakpoint at main().\r
-gdb-config: \r
-       @$(REMOVE) $(GDBINIT_FILE)\r
-       @echo define reset >> $(GDBINIT_FILE)\r
-       @echo SIGNAL SIGHUP >> $(GDBINIT_FILE)\r
-       @echo end >> $(GDBINIT_FILE)\r
-       @echo file $(TARGET).elf >> $(GDBINIT_FILE)\r
-       @echo target remote $(DEBUG_HOST):$(DEBUG_PORT)  >> $(GDBINIT_FILE)\r
-ifeq ($(DEBUG_BACKEND),simulavr)\r
-       @echo load  >> $(GDBINIT_FILE)\r
-endif\r
-       @echo break main >> $(GDBINIT_FILE)\r
-\r
-debug: gdb-config $(TARGET).elf\r
-ifeq ($(DEBUG_BACKEND), avarice)\r
-       @echo Starting AVaRICE - Press enter when "waiting to connect" message displays.\r
-       @$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \\r
-       $(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT)\r
-       @$(WINSHELL) /c pause\r
-\r
-else\r
-       @$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \\r
-       $(DEBUG_MFREQ) --port $(DEBUG_PORT)\r
-endif\r
-       @$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE)\r
-\r
-\r
-\r
-\r
-# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.\r
-COFFCONVERT = $(OBJCOPY) --debugging\r
-COFFCONVERT += --change-section-address .data-0x800000\r
-COFFCONVERT += --change-section-address .bss-0x800000\r
-COFFCONVERT += --change-section-address .noinit-0x800000\r
-COFFCONVERT += --change-section-address .eeprom-0x810000\r
-\r
-\r
-\r
-coff: $(TARGET).elf\r
-       @echo\r
-       @echo $(MSG_COFF) $(TARGET).cof\r
-       $(COFFCONVERT) -O coff-avr $< $(TARGET).cof\r
-\r
-\r
-extcoff: $(TARGET).elf\r
-       @echo\r
-       @echo $(MSG_EXTENDED_COFF) $(TARGET).cof\r
-       $(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof\r
-\r
-\r
-\r
-# Create final output files (.hex, .eep) from ELF output file.\r
-%.hex: %.elf\r
-       @echo\r
-       @echo $(MSG_FLASH) $@\r
-       $(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@\r
-\r
-%.eep: %.elf\r
-       @echo\r
-       @echo $(MSG_EEPROM) $@\r
-       -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \\r
-       --change-section-lma .eeprom=0 --no-change-warnings -O $(FORMAT) $< $@ || exit 0\r
-\r
-# Create extended listing file from ELF output file.\r
-%.lss: %.elf\r
-       @echo\r
-       @echo $(MSG_EXTENDED_LISTING) $@\r
-       $(OBJDUMP) -h -z -S $< > $@\r
-\r
-# Create a symbol table from ELF output file.\r
-%.sym: %.elf\r
-       @echo\r
-       @echo $(MSG_SYMBOL_TABLE) $@\r
-       $(NM) -n $< > $@\r
-\r
-\r
-\r
-# Create library from object files.\r
-.SECONDARY : $(TARGET).a\r
-.PRECIOUS : $(OBJ)\r
-%.a: $(OBJ)\r
-       @echo\r
-       @echo $(MSG_CREATING_LIBRARY) $@\r
-       $(AR) $@ $(OBJ)\r
-\r
-\r
-# Link: create ELF output file from object files.\r
-.SECONDARY : $(TARGET).elf\r
-.PRECIOUS : $(OBJ)\r
-%.elf: $(OBJ)\r
-       @echo\r
-       @echo $(MSG_LINKING) $@\r
-       $(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)\r
-\r
-\r
-# Compile: create object files from C source files.\r
-$(OBJDIR)/%.o : %.c\r
-       @echo\r
-       @echo $(MSG_COMPILING) $<\r
-       $(CC) -c $(ALL_CFLAGS) $< -o $@ \r
-\r
-\r
-# Compile: create object files from C++ source files.\r
-$(OBJDIR)/%.o : %.cpp\r
-       @echo\r
-       @echo $(MSG_COMPILING_CPP) $<\r
-       $(CC) -c $(ALL_CPPFLAGS) $< -o $@ \r
-\r
-\r
-# Compile: create assembler files from C source files.\r
-%.s : %.c\r
-       $(CC) -S $(ALL_CFLAGS) $< -o $@\r
-\r
-\r
-# Compile: create assembler files from C++ source files.\r
-%.s : %.cpp\r
-       $(CC) -S $(ALL_CPPFLAGS) $< -o $@\r
-\r
-\r
-# Assemble: create object files from assembler source files.\r
-$(OBJDIR)/%.o : %.S\r
-       @echo\r
-       @echo $(MSG_ASSEMBLING) $<\r
-       $(CC) -c $(ALL_ASFLAGS) $< -o $@\r
-\r
-\r
-# Create preprocessed source for use in sending a bug report.\r
-%.i : %.c\r
-       $(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ \r
-       \r
-\r
-# Target: clean project.\r
-clean: begin clean_list clean_binary end\r
-\r
-clean_binary:\r
-       $(REMOVE) $(TARGET).hex\r
-       \r
-clean_list:\r
-       @echo $(MSG_CLEANING)\r
-       $(REMOVE) $(TARGET).eep\r
-       $(REMOVE) $(TARGET)eep.hex\r
-       $(REMOVE) $(TARGET).cof\r
-       $(REMOVE) $(TARGET).elf\r
-       $(REMOVE) $(TARGET).map\r
-       $(REMOVE) $(TARGET).sym\r
-       $(REMOVE) $(TARGET).lss\r
-       $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.o)\r
-       $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.lst)\r
-       $(REMOVE) $(SRC:.c=.s)\r
-       $(REMOVE) $(SRC:.c=.d)\r
-       $(REMOVE) $(SRC:.c=.i)\r
-       $(REMOVEDIR) .dep\r
-\r
-\r
-doxygen:\r
-       @echo Generating Project Documentation...\r
-       @doxygen Doxygen.conf\r
-       @echo Documentation Generation Complete.\r
-\r
-clean_doxygen:\r
-       rm -rf Documentation\r
-\r
-# Create object files directory\r
-$(shell mkdir $(OBJDIR) 2>/dev/null)\r
-\r
-\r
-# Include the dependency files.\r
--include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)\r
-\r
-\r
-# Listing of phony targets.\r
-.PHONY : all checkhooks checklibmode checkboard   \\r
-begin finish end sizebefore sizeafter gccversion  \\r
-build elf hex eep lss sym coff extcoff clean      \\r
-clean_list clean_binary program debug gdb-config  \\r
-doxygen dfu flip flip-ee dfu-ee
\ No newline at end of file
diff --git a/Demos/Device/MassStorage/Descriptors.c b/Demos/Device/MassStorage/Descriptors.c
deleted file mode 100644 (file)
index 6c02a6c..0000000
+++ /dev/null
@@ -1,223 +0,0 @@
-/*\r
-             LUFA Library\r
-     Copyright (C) Dean Camera, 2009.\r
-              \r
-  dean [at] fourwalledcubicle [dot] com\r
-      www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
-  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
-  Permission to use, copy, modify, and distribute this software\r
-  and its documentation for any purpose and without fee is hereby\r
-  granted, provided that the above copyright notice appear in all\r
-  copies and that both that the copyright notice and this\r
-  permission notice and warranty disclaimer appear in supporting\r
-  documentation, and that the name of the author not be used in\r
-  advertising or publicity pertaining to distribution of the\r
-  software without specific, written prior permission.\r
-\r
-  The author disclaim all warranties with regard to this\r
-  software, including all implied warranties of merchantability\r
-  and fitness.  In no event shall the author be liable for any\r
-  special, indirect or consequential damages or any damages\r
-  whatsoever resulting from loss of use, data or profits, whether\r
-  in an action of contract, negligence or other tortious action,\r
-  arising out of or in connection with the use or performance of\r
-  this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- *  USB Device Descriptors, for library use when in USB device mode. Descriptors are special \r
- *  computer-readable structures which the host requests upon device enumeration, to determine\r
- *  the device's capabilities and functions.  \r
- */\r
-\r
-#include "Descriptors.h"\r
-\r
-/** Device descriptor structure. This descriptor, located in FLASH memory, describes the overall\r
- *  device characteristics, including the supported USB version, control endpoint size and the\r
- *  number of device configurations. The descriptor is read out by the USB host when the enumeration\r
- *  process begins.\r
- */\r
-USB_Descriptor_Device_t PROGMEM DeviceDescriptor =\r
-{\r
-       .Header                 = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device},\r
-               \r
-       .USBSpecification       = VERSION_BCD(01.10),\r
-       .Class                  = 0x00,\r
-       .SubClass               = 0x00,\r
-       .Protocol               = 0x00,\r
-                               \r
-       .Endpoint0Size          = FIXED_CONTROL_ENDPOINT_SIZE,\r
-               \r
-       .VendorID               = 0x03EB,\r
-       .ProductID              = 0x2045,\r
-       .ReleaseNumber          = 0x0000,\r
-               \r
-       .ManufacturerStrIndex   = 0x01,\r
-       .ProductStrIndex        = 0x02,\r
-       .SerialNumStrIndex      = 0x03,\r
-               \r
-       .NumberOfConfigurations = 1\r
-};\r
-\r
-/** Configuration descriptor structure. This descriptor, located in FLASH memory, describes the usage\r
- *  of the device in one of its supported configurations, including information about any device interfaces\r
- *  and endpoints. The descriptor is read out by the USB host during the enumeration process when selecting\r
- *  a configuration so that the host may correctly communicate with the USB device.\r
- */\r
-USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =\r
-{\r
-       .Config = \r
-               {\r
-                       .Header                 = {.Size = sizeof(USB_Descriptor_Configuration_Header_t), .Type = DTYPE_Configuration},\r
-\r
-                       .TotalConfigurationSize = sizeof(USB_Descriptor_Configuration_t),\r
-                       .TotalInterfaces        = 1,\r
-                               \r
-                       .ConfigurationNumber    = 1,\r
-                       .ConfigurationStrIndex  = NO_DESCRIPTOR,\r
-                               \r
-                       .ConfigAttributes       = USB_CONFIG_ATTR_BUSPOWERED,\r
-                       \r
-                       .MaxPowerConsumption    = USB_CONFIG_POWER_MA(100)\r
-               },\r
-               \r
-       .Interface = \r
-               {\r
-                       .Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},\r
-\r
-                       .InterfaceNumber        = 0,\r
-                       .AlternateSetting       = 0,\r
-                       \r
-                       .TotalEndpoints         = 2,\r
-                               \r
-                       .Class                  = 0x08,\r
-                       .SubClass               = 0x06,\r
-                       .Protocol               = 0x50,\r
-                               \r
-                       .InterfaceStrIndex      = NO_DESCRIPTOR\r
-               },\r
-\r
-       .DataInEndpoint = \r
-               {\r
-                       .Header                 = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},\r
-\r
-                       .EndpointAddress        = (ENDPOINT_DESCRIPTOR_DIR_IN | MASS_STORAGE_IN_EPNUM),\r
-                       .Attributes             = EP_TYPE_BULK,\r
-                       .EndpointSize           = MASS_STORAGE_IO_EPSIZE,\r
-                       .PollingIntervalMS      = 0x00\r
-               },\r
-\r
-       .DataOutEndpoint = \r
-               {\r
-                       .Header                 = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},\r
-\r
-                       .EndpointAddress        = (ENDPOINT_DESCRIPTOR_DIR_OUT | MASS_STORAGE_OUT_EPNUM),\r
-                       .Attributes             = EP_TYPE_BULK,\r
-                       .EndpointSize           = MASS_STORAGE_IO_EPSIZE,\r
-                       .PollingIntervalMS      = 0x00\r
-               }\r
-};\r
-\r
-/** Language descriptor structure. This descriptor, located in FLASH memory, is returned when the host requests\r
- *  the string descriptor with index 0 (the first index). It is actually an array of 16-bit integers, which indicate\r
- *  via the language ID table available at USB.org what languages the device supports for its string descriptors.\r
- */\r
-USB_Descriptor_String_t PROGMEM LanguageString =\r
-{\r
-       .Header                 = {.Size = USB_STRING_LEN(1), .Type = DTYPE_String},\r
-               \r
-       .UnicodeString          = {LANGUAGE_ID_ENG}\r
-};\r
-\r
-/** Manufacturer descriptor string. This is a Unicode string containing the manufacturer's details in human readable\r
- *  form, and is read out upon request by the host when the appropriate string ID is requested, listed in the Device\r
- *  Descriptor.\r
- */\r
-USB_Descriptor_String_t PROGMEM ManufacturerString =\r
-{\r
-       .Header                 = {.Size = USB_STRING_LEN(11), .Type = DTYPE_String},\r
-               \r
-       .UnicodeString          = L"Dean Camera"\r
-};\r
-\r
-/** Product descriptor string. This is a Unicode string containing the product's details in human readable form,\r
- *  and is read out upon request by the host when the appropriate string ID is requested, listed in the Device\r
- *  Descriptor.\r
- */\r
-USB_Descriptor_String_t PROGMEM ProductString =\r
-{\r
-       .Header                 = {.Size = USB_STRING_LEN(22), .Type = DTYPE_String},\r
-               \r
-       .UnicodeString          = L"LUFA Mass Storage Demo"\r
-};\r
-\r
-/** Serial number descriptor string. This is a Unicode string containing a string of HEX characters at least 12\r
- *  digits in length to uniquely identify a device when concatenated with the device's Vendor and Product IDs. By\r
- *  using the unique serial number string to identify a device, the device drivers do not need to be reinstalled\r
- *  each time the device is inserted into a different USB port on the same system. <b>This should be unique between\r
- *  devices, or conflicts will occur if two devices sharing the same serial number are inserted into the same system\r
- *  at the same time.</b>\r
- */\r
-USB_Descriptor_String_t PROGMEM SerialNumberString =\r
-{\r
-       .Header                 = {.Size = USB_STRING_LEN(12), .Type = DTYPE_String},\r
-               \r
-       .UnicodeString          = L"000000000000"\r
-};\r
-\r
-/** This function is called by the library when in device mode, and must be overridden (see library "USB Descriptors"\r
- *  documentation) by the application code so that the address and size of a requested descriptor can be given\r
- *  to the USB library. When the device receives a Get Descriptor request on the control endpoint, this function\r
- *  is called so that the descriptor details can be passed back and the appropriate descriptor sent back to the\r
- *  USB host.\r
- */\r
-uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
-{\r
-       const uint8_t  DescriptorType   = (wValue >> 8);\r
-       const uint8_t  DescriptorNumber = (wValue & 0xFF);\r
-\r
-       void*    Address = NULL;\r
-       uint16_t Size    = NO_DESCRIPTOR;\r
-\r
-       switch (DescriptorType)\r
-       {\r
-               case DTYPE_Device: \r
-                       Address = (void*)&DeviceDescriptor;\r
-                       Size    = sizeof(USB_Descriptor_Device_t);\r
-                       break;\r
-               case DTYPE_Configuration: \r
-                       Address = (void*)&ConfigurationDescriptor;\r
-                       Size    = sizeof(USB_Descriptor_Configuration_t);\r
-                       break;\r
-               case DTYPE_String: \r
-                       switch (DescriptorNumber)\r
-                       {\r
-                               case 0x00: \r
-                                       Address = (void*)&LanguageString;\r
-                                       Size    = pgm_read_byte(&LanguageString.Header.Size);\r
-                                       break;\r
-                               case 0x01: \r
-                                       Address = (void*)&ManufacturerString;\r
-                                       Size    = pgm_read_byte(&ManufacturerString.Header.Size);\r
-                                       break;\r
-                               case 0x02: \r
-                                       Address = (void*)&ProductString;\r
-                                       Size    = pgm_read_byte(&ProductString.Header.Size);\r
-                                       break;\r
-                               case 0x03: \r
-                                       Address = (void*)&SerialNumberString;\r
-                                       Size    = pgm_read_byte(&SerialNumberString.Header.Size);\r
-                                       break;\r
-                       }\r
-                       \r
-                       break;\r
-       }\r
-       \r
-       *DescriptorAddress = Address;\r
-       return Size;\r
-}\r
diff --git a/Demos/Device/MassStorage/Descriptors.h b/Demos/Device/MassStorage/Descriptors.h
deleted file mode 100644 (file)
index 0fa147b..0000000
+++ /dev/null
@@ -1,71 +0,0 @@
-/*\r
-             LUFA Library\r
-     Copyright (C) Dean Camera, 2009.\r
-              \r
-  dean [at] fourwalledcubicle [dot] com\r
-      www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
-  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
-  Permission to use, copy, modify, and distribute this software\r
-  and its documentation for any purpose and without fee is hereby\r
-  granted, provided that the above copyright notice appear in all\r
-  copies and that both that the copyright notice and this\r
-  permission notice and warranty disclaimer appear in supporting\r
-  documentation, and that the name of the author not be used in\r
-  advertising or publicity pertaining to distribution of the\r
-  software without specific, written prior permission.\r
-\r
-  The author disclaim all warranties with regard to this\r
-  software, including all implied warranties of merchantability\r
-  and fitness.  In no event shall the author be liable for any\r
-  special, indirect or consequential damages or any damages\r
-  whatsoever resulting from loss of use, data or profits, whether\r
-  in an action of contract, negligence or other tortious action,\r
-  arising out of or in connection with the use or performance of\r
-  this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- *  Header file for Descriptors.c.\r
- */\r
\r
-#ifndef _DESCRIPTORS_H_\r
-#define _DESCRIPTORS_H_\r
-\r
-       /* Includes: */\r
-               #include <LUFA/Drivers/USB/USB.h>\r
-\r
-               #include <avr/pgmspace.h>\r
-\r
-       /* Macros: */\r
-               /** Endpoint number of the Mass Storage device-to-host data IN endpoint. */\r
-               #define MASS_STORAGE_IN_EPNUM          3        \r
-\r
-               /** Endpoint number of the Mass Storage host-to-device data OUT endpoint. */\r
-               #define MASS_STORAGE_OUT_EPNUM         4        \r
-\r
-               /** Size in bytes of the Mass Storage data endpoints. */\r
-               #define MASS_STORAGE_IO_EPSIZE         64\r
-               \r
-       /* Type Defines: */             \r
-               /** Type define for the device configuration descriptor structure. This must be defined in the\r
-                *  application code, as the configuration descriptor contains several sub-descriptors which\r
-                *  vary between devices, and which describe the device's usage to the host.\r
-                */\r
-               typedef struct\r
-               {\r
-                       USB_Descriptor_Configuration_Header_t Config;\r
-                       USB_Descriptor_Interface_t            Interface;\r
-                       USB_Descriptor_Endpoint_t             DataInEndpoint;\r
-                       USB_Descriptor_Endpoint_t             DataOutEndpoint;\r
-               } USB_Descriptor_Configuration_t;\r
-               \r
-       /* Function Prototypes: */\r
-               uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
-                                                                                       ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);\r
-\r
-#endif\r
diff --git a/Demos/Device/MassStorage/Doxygen.conf b/Demos/Device/MassStorage/Doxygen.conf
deleted file mode 100644 (file)
index a7b9001..0000000
+++ /dev/null
@@ -1,1485 +0,0 @@
-# Doxyfile 1.5.7.1\r
-\r
-# This file describes the settings to be used by the documentation system\r
-# doxygen (www.doxygen.org) for a project\r
-#\r
-# All text after a hash (#) is considered a comment and will be ignored\r
-# The format is:\r
-#       TAG = value [value, ...]\r
-# For lists items can also be appended using:\r
-#       TAG += value [value, ...]\r
-# Values that contain spaces should be placed between quotes (" ")\r
-\r
-#---------------------------------------------------------------------------\r
-# Project related configuration options\r
-#---------------------------------------------------------------------------\r
-\r
-# This tag specifies the encoding used for all characters in the config file \r
-# that follow. The default is UTF-8 which is also the encoding used for all \r
-# text before the first occurrence of this tag. Doxygen uses libiconv (or the \r
-# iconv built into libc) for the transcoding. See \r
-# http://www.gnu.org/software/libiconv for the list of possible encodings.\r
-\r
-DOXYFILE_ENCODING      = UTF-8\r
-\r
-# The PROJECT_NAME tag is a single word (or a sequence of words surrounded \r
-# by quotes) that should identify the project.\r
-\r
-PROJECT_NAME           = "LUFA Library - Mass Storage Device Demo"\r
-\r
-# The PROJECT_NUMBER tag can be used to enter a project or revision number. \r
-# This could be handy for archiving the generated documentation or \r
-# if some version control system is used.\r
-\r
-PROJECT_NUMBER         = 0.0.0\r
-\r
-# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) \r
-# base path where the generated documentation will be put. \r
-# If a relative path is entered, it will be relative to the location \r
-# where doxygen was started. If left blank the current directory will be used.\r
-\r
-OUTPUT_DIRECTORY       = ./Documentation/\r
-\r
-# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create \r
-# 4096 sub-directories (in 2 levels) under the output directory of each output \r
-# format and will distribute the generated files over these directories. \r
-# Enabling this option can be useful when feeding doxygen a huge amount of \r
-# source files, where putting all generated files in the same directory would \r
-# otherwise cause performance problems for the file system.\r
-\r
-CREATE_SUBDIRS         = YES\r
-\r
-# The OUTPUT_LANGUAGE tag is used to specify the language in which all \r
-# documentation generated by doxygen is written. Doxygen will use this \r
-# information to generate all constant output in the proper language. \r
-# The default language is English, other supported languages are: \r
-# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, \r
-# Croatian, Czech, Danish, Dutch, Farsi, Finnish, French, German, Greek, \r
-# Hungarian, Italian, Japanese, Japanese-en (Japanese with English messages), \r
-# Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, Polish, \r
-# Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, Slovene, \r
-# Spanish, Swedish, and Ukrainian.\r
-\r
-OUTPUT_LANGUAGE        = English\r
-\r
-# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will \r
-# include brief member descriptions after the members that are listed in \r
-# the file and class documentation (similar to JavaDoc). \r
-# Set to NO to disable this.\r
-\r
-BRIEF_MEMBER_DESC      = YES\r
-\r
-# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend \r
-# the brief description of a member or function before the detailed description. \r
-# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the \r
-# brief descriptions will be completely suppressed.\r
-\r
-REPEAT_BRIEF           = YES\r
-\r
-# This tag implements a quasi-intelligent brief description abbreviator \r
-# that is used to form the text in various listings. Each string \r
-# in this list, if found as the leading text of the brief description, will be \r
-# stripped from the text and the result after processing the whole list, is \r
-# used as the annotated text. Otherwise, the brief description is used as-is. \r
-# If left blank, the following values are used ("$name" is automatically \r
-# replaced with the name of the entity): "The $name class" "The $name widget" \r
-# "The $name file" "is" "provides" "specifies" "contains" \r
-# "represents" "a" "an" "the"\r
-\r
-ABBREVIATE_BRIEF       = "The $name class" \\r
-                         "The $name widget" \\r
-                         "The $name file" \\r
-                         is \\r
-                         provides \\r
-                         specifies \\r
-                         contains \\r
-                         represents \\r
-                         a \\r
-                         an \\r
-                         the\r
-\r
-# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then \r
-# Doxygen will generate a detailed section even if there is only a brief \r
-# description.\r
-\r
-ALWAYS_DETAILED_SEC    = NO\r
-\r
-# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all \r
-# inherited members of a class in the documentation of that class as if those \r
-# members were ordinary class members. Constructors, destructors and assignment \r
-# operators of the base classes will not be shown.\r
-\r
-INLINE_INHERITED_MEMB  = NO\r
-\r
-# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full \r
-# path before files name in the file list and in the header files. If set \r
-# to NO the shortest path that makes the file name unique will be used.\r
-\r
-FULL_PATH_NAMES        = YES\r
-\r
-# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag \r
-# can be used to strip a user-defined part of the path. Stripping is \r
-# only done if one of the specified strings matches the left-hand part of \r
-# the path. The tag can be used to show relative paths in the file list. \r
-# If left blank the directory from which doxygen is run is used as the \r
-# path to strip.\r
-\r
-STRIP_FROM_PATH        = \r
-\r
-# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of \r
-# the path mentioned in the documentation of a class, which tells \r
-# the reader which header file to include in order to use a class. \r
-# If left blank only the name of the header file containing the class \r
-# definition is used. Otherwise one should specify the include paths that \r
-# are normally passed to the compiler using the -I flag.\r
-\r
-STRIP_FROM_INC_PATH    = \r
-\r
-# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter \r
-# (but less readable) file names. This can be useful is your file systems \r
-# doesn't support long names like on DOS, Mac, or CD-ROM.\r
-\r
-SHORT_NAMES            = YES\r
-\r
-# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen \r
-# will interpret the first line (until the first dot) of a JavaDoc-style \r
-# comment as the brief description. If set to NO, the JavaDoc \r
-# comments will behave just like regular Qt-style comments \r
-# (thus requiring an explicit @brief command for a brief description.)\r
-\r
-JAVADOC_AUTOBRIEF      = NO\r
-\r
-# If the QT_AUTOBRIEF tag is set to YES then Doxygen will \r
-# interpret the first line (until the first dot) of a Qt-style \r
-# comment as the brief description. If set to NO, the comments \r
-# will behave just like regular Qt-style comments (thus requiring \r
-# an explicit \brief command for a brief description.)\r
-\r
-QT_AUTOBRIEF           = NO\r
-\r
-# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen \r
-# treat a multi-line C++ special comment block (i.e. a block of //! or /// \r
-# comments) as a brief description. This used to be the default behaviour. \r
-# The new default is to treat a multi-line C++ comment block as a detailed \r
-# description. Set this tag to YES if you prefer the old behaviour instead.\r
-\r
-MULTILINE_CPP_IS_BRIEF = NO\r
-\r
-# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented \r
-# member inherits the documentation from any documented member that it \r
-# re-implements.\r
-\r
-INHERIT_DOCS           = YES\r
-\r
-# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce \r
-# a new page for each member. If set to NO, the documentation of a member will \r
-# be part of the file/class/namespace that contains it.\r
-\r
-SEPARATE_MEMBER_PAGES  = NO\r
-\r
-# The TAB_SIZE tag can be used to set the number of spaces in a tab. \r
-# Doxygen uses this value to replace tabs by spaces in code fragments.\r
-\r
-TAB_SIZE               = 4\r
-\r
-# This tag can be used to specify a number of aliases that acts \r
-# as commands in the documentation. An alias has the form "name=value". \r
-# For example adding "sideeffect=\par Side Effects:\n" will allow you to \r
-# put the command \sideeffect (or @sideeffect) in the documentation, which \r
-# will result in a user-defined paragraph with heading "Side Effects:". \r
-# You can put \n's in the value part of an alias to insert newlines.\r
-\r
-ALIASES                = \r
-\r
-# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C \r
-# sources only. Doxygen will then generate output that is more tailored for C. \r
-# For instance, some of the names that are used will be different. The list \r
-# of all members will be omitted, etc.\r
-\r
-OPTIMIZE_OUTPUT_FOR_C  = YES\r
-\r
-# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java \r
-# sources only. Doxygen will then generate output that is more tailored for \r
-# Java. For instance, namespaces will be presented as packages, qualified \r
-# scopes will look different, etc.\r
-\r
-OPTIMIZE_OUTPUT_JAVA   = NO\r
-\r
-# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran \r
-# sources only. Doxygen will then generate output that is more tailored for \r
-# Fortran.\r
-\r
-OPTIMIZE_FOR_FORTRAN   = NO\r
-\r
-# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL \r
-# sources. Doxygen will then generate output that is tailored for \r
-# VHDL.\r
-\r
-OPTIMIZE_OUTPUT_VHDL   = NO\r
-\r
-# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want \r
-# to include (a tag file for) the STL sources as input, then you should \r
-# set this tag to YES in order to let doxygen match functions declarations and \r
-# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. \r
-# func(std::string) {}). This also make the inheritance and collaboration \r
-# diagrams that involve STL classes more complete and accurate.\r
-\r
-BUILTIN_STL_SUPPORT    = NO\r
-\r
-# If you use Microsoft's C++/CLI language, you should set this option to YES to\r
-# enable parsing support.\r
-\r
-CPP_CLI_SUPPORT        = NO\r
-\r
-# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. \r
-# Doxygen will parse them like normal C++ but will assume all classes use public \r
-# instead of private inheritance when no explicit protection keyword is present.\r
-\r
-SIP_SUPPORT            = NO\r
-\r
-# For Microsoft's IDL there are propget and propput attributes to indicate getter \r
-# and setter methods for a property. Setting this option to YES (the default) \r
-# will make doxygen to replace the get and set methods by a property in the \r
-# documentation. This will only work if the methods are indeed getting or \r
-# setting a simple type. If this is not the case, or you want to show the \r
-# methods anyway, you should set this option to NO.\r
-\r
-IDL_PROPERTY_SUPPORT   = YES\r
-\r
-# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC \r
-# tag is set to YES, then doxygen will reuse the documentation of the first \r
-# member in the group (if any) for the other members of the group. By default \r
-# all members of a group must be documented explicitly.\r
-\r
-DISTRIBUTE_GROUP_DOC   = NO\r
-\r
-# Set the SUBGROUPING tag to YES (the default) to allow class member groups of \r
-# the same type (for instance a group of public functions) to be put as a \r
-# subgroup of that type (e.g. under the Public Functions section). Set it to \r
-# NO to prevent subgrouping. Alternatively, this can be done per class using \r
-# the \nosubgrouping command.\r
-\r
-SUBGROUPING            = YES\r
-\r
-# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum \r
-# is documented as struct, union, or enum with the name of the typedef. So \r
-# typedef struct TypeS {} TypeT, will appear in the documentation as a struct \r
-# with name TypeT. When disabled the typedef will appear as a member of a file, \r
-# namespace, or class. And the struct will be named TypeS. This can typically \r
-# be useful for C code in case the coding convention dictates that all compound \r
-# types are typedef'ed and only the typedef is referenced, never the tag name.\r
-\r
-TYPEDEF_HIDES_STRUCT   = NO\r
-\r
-# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to \r
-# determine which symbols to keep in memory and which to flush to disk.\r
-# When the cache is full, less often used symbols will be written to disk.\r
-# For small to medium size projects (<1000 input files) the default value is \r
-# probably good enough. For larger projects a too small cache size can cause \r
-# doxygen to be busy swapping symbols to and from disk most of the time \r
-# causing a significant performance penality. \r
-# If the system has enough physical memory increasing the cache will improve the \r
-# performance by keeping more symbols in memory. Note that the value works on \r
-# a logarithmic scale so increasing the size by one will rougly double the \r
-# memory usage. The cache size is given by this formula: \r
-# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, \r
-# corresponding to a cache size of 2^16 = 65536 symbols\r
-\r
-SYMBOL_CACHE_SIZE      = 0\r
-\r
-#---------------------------------------------------------------------------\r
-# Build related configuration options\r
-#---------------------------------------------------------------------------\r
-\r
-# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in \r
-# documentation are documented, even if no documentation was available. \r
-# Private class members and static file members will be hidden unless \r
-# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES\r
-\r
-EXTRACT_ALL            = YES\r
-\r
-# If the EXTRACT_PRIVATE tag is set to YES all private members of a class \r
-# will be included in the documentation.\r
-\r
-EXTRACT_PRIVATE        = YES\r
-\r
-# If the EXTRACT_STATIC tag is set to YES all static members of a file \r
-# will be included in the documentation.\r
-\r
-EXTRACT_STATIC         = YES\r
-\r
-# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) \r
-# defined locally in source files will be included in the documentation. \r
-# If set to NO only classes defined in header files are included.\r
-\r
-EXTRACT_LOCAL_CLASSES  = YES\r
-\r
-# This flag is only useful for Objective-C code. When set to YES local \r
-# methods, which are defined in the implementation section but not in \r
-# the interface are included in the documentation. \r
-# If set to NO (the default) only methods in the interface are included.\r
-\r
-EXTRACT_LOCAL_METHODS  = NO\r
-\r
-# If this flag is set to YES, the members of anonymous namespaces will be \r
-# extracted and appear in the documentation as a namespace called \r
-# 'anonymous_namespace{file}', where file will be replaced with the base \r
-# name of the file that contains the anonymous namespace. By default \r
-# anonymous namespace are hidden.\r
-\r
-EXTRACT_ANON_NSPACES   = NO\r
-\r
-# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all \r
-# undocumented members of documented classes, files or namespaces. \r
-# If set to NO (the default) these members will be included in the \r
-# various overviews, but no documentation section is generated. \r
-# This option has no effect if EXTRACT_ALL is enabled.\r
-\r
-HIDE_UNDOC_MEMBERS     = NO\r
-\r
-# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all \r
-# undocumented classes that are normally visible in the class hierarchy. \r
-# If set to NO (the default) these classes will be included in the various \r
-# overviews. This option has no effect if EXTRACT_ALL is enabled.\r
-\r
-HIDE_UNDOC_CLASSES     = NO\r
-\r
-# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all \r
-# friend (class|struct|union) declarations. \r
-# If set to NO (the default) these declarations will be included in the \r
-# documentation.\r
-\r
-HIDE_FRIEND_COMPOUNDS  = NO\r
-\r
-# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any \r
-# documentation blocks found inside the body of a function. \r
-# If set to NO (the default) these blocks will be appended to the \r
-# function's detailed documentation block.\r
-\r
-HIDE_IN_BODY_DOCS      = NO\r
-\r
-# The INTERNAL_DOCS tag determines if documentation \r
-# that is typed after a \internal command is included. If the tag is set \r
-# to NO (the default) then the documentation will be excluded. \r
-# Set it to YES to include the internal documentation.\r
-\r
-INTERNAL_DOCS          = NO\r
-\r
-# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate \r
-# file names in lower-case letters. If set to YES upper-case letters are also \r
-# allowed. This is useful if you have classes or files whose names only differ \r
-# in case and if your file system supports case sensitive file names. Windows \r
-# and Mac users are advised to set this option to NO.\r
-\r
-CASE_SENSE_NAMES       = NO\r
-\r
-# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen \r
-# will show members with their full class and namespace scopes in the \r
-# documentation. If set to YES the scope will be hidden.\r
-\r
-HIDE_SCOPE_NAMES       = NO\r
-\r
-# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen \r
-# will put a list of the files that are included by a file in the documentation \r
-# of that file.\r
-\r
-SHOW_INCLUDE_FILES     = YES\r
-\r
-# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] \r
-# is inserted in the documentation for inline members.\r
-\r
-INLINE_INFO            = YES\r
-\r
-# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen \r
-# will sort the (detailed) documentation of file and class members \r
-# alphabetically by member name. If set to NO the members will appear in \r
-# declaration order.\r
-\r
-SORT_MEMBER_DOCS       = YES\r
-\r
-# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the \r
-# brief documentation of file, namespace and class members alphabetically \r
-# by member name. If set to NO (the default) the members will appear in \r
-# declaration order.\r
-\r
-SORT_BRIEF_DOCS        = NO\r
-\r
-# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the \r
-# hierarchy of group names into alphabetical order. If set to NO (the default) \r
-# the group names will appear in their defined order.\r
-\r
-SORT_GROUP_NAMES       = NO\r
-\r
-# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be \r
-# sorted by fully-qualified names, including namespaces. If set to \r
-# NO (the default), the class list will be sorted only by class name, \r
-# not including the namespace part. \r
-# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.\r
-# Note: This option applies only to the class list, not to the \r
-# alphabetical list.\r
-\r
-SORT_BY_SCOPE_NAME     = NO\r
-\r
-# The GENERATE_TODOLIST tag can be used to enable (YES) or \r
-# disable (NO) the todo list. This list is created by putting \todo \r
-# commands in the documentation.\r
-\r
-GENERATE_TODOLIST      = NO\r
-\r
-# The GENERATE_TESTLIST tag can be used to enable (YES) or \r
-# disable (NO) the test list. This list is created by putting \test \r
-# commands in the documentation.\r
-\r
-GENERATE_TESTLIST      = NO\r
-\r
-# The GENERATE_BUGLIST tag can be used to enable (YES) or \r
-# disable (NO) the bug list. This list is created by putting \bug \r
-# commands in the documentation.\r
-\r
-GENERATE_BUGLIST       = NO\r
-\r
-# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or \r
-# disable (NO) the deprecated list. This list is created by putting \r
-# \deprecated commands in the documentation.\r
-\r
-GENERATE_DEPRECATEDLIST= YES\r
-\r
-# The ENABLED_SECTIONS tag can be used to enable conditional \r
-# documentation sections, marked by \if sectionname ... \endif.\r
-\r
-ENABLED_SECTIONS       = \r
-\r
-# The MAX_INITIALIZER_LINES tag determines the maximum number of lines \r
-# the initial value of a variable or define consists of for it to appear in \r
-# the documentation. If the initializer consists of more lines than specified \r
-# here it will be hidden. Use a value of 0 to hide initializers completely. \r
-# The appearance of the initializer of individual variables and defines in the \r
-# documentation can be controlled using \showinitializer or \hideinitializer \r
-# command in the documentation regardless of this setting.\r
-\r
-MAX_INITIALIZER_LINES  = 30\r
-\r
-# Set the SHOW_USED_FILES tag to NO to disable the list of files generated \r
-# at the bottom of the documentation of classes and structs. If set to YES the \r
-# list will mention the files that were used to generate the documentation.\r
-\r
-SHOW_USED_FILES        = YES\r
-\r
-# If the sources in your project are distributed over multiple directories \r
-# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy \r
-# in the documentation. The default is NO.\r
-\r
-SHOW_DIRECTORIES       = YES\r
-\r
-# Set the SHOW_FILES tag to NO to disable the generation of the Files page.\r
-# This will remove the Files entry from the Quick Index and from the \r
-# Folder Tree View (if specified). The default is YES.\r
-\r
-SHOW_FILES             = YES\r
-\r
-# Set the SHOW_NAMESPACES tag to NO to disable the generation of the \r
-# Namespaces page.  This will remove the Namespaces entry from the Quick Index\r
-# and from the Folder Tree View (if specified). The default is YES.\r
-\r
-SHOW_NAMESPACES        = YES\r
-\r
-# The FILE_VERSION_FILTER tag can be used to specify a program or script that \r
-# doxygen should invoke to get the current version for each file (typically from \r
-# the version control system). Doxygen will invoke the program by executing (via \r
-# popen()) the command <command> <input-file>, where <command> is the value of \r
-# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file \r
-# provided by doxygen. Whatever the program writes to standard output \r
-# is used as the file version. See the manual for examples.\r
-\r
-FILE_VERSION_FILTER    = \r
-\r
-# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by \r
-# doxygen. The layout file controls the global structure of the generated output files \r
-# in an output format independent way. The create the layout file that represents \r
-# doxygen's defaults, run doxygen with the -l option. You can optionally specify a \r
-# file name after the option, if omitted DoxygenLayout.xml will be used as the name \r
-# of the layout file.\r
-\r
-LAYOUT_FILE            = \r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to warning and progress messages\r
-#---------------------------------------------------------------------------\r
-\r
-# The QUIET tag can be used to turn on/off the messages that are generated \r
-# by doxygen. Possible values are YES and NO. If left blank NO is used.\r
-\r
-QUIET                  = YES\r
-\r
-# The WARNINGS tag can be used to turn on/off the warning messages that are \r
-# generated by doxygen. Possible values are YES and NO. If left blank \r
-# NO is used.\r
-\r
-WARNINGS               = YES\r
-\r
-# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings \r
-# for undocumented members. If EXTRACT_ALL is set to YES then this flag will \r
-# automatically be disabled.\r
-\r
-WARN_IF_UNDOCUMENTED   = YES\r
-\r
-# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for \r
-# potential errors in the documentation, such as not documenting some \r
-# parameters in a documented function, or documenting parameters that \r
-# don't exist or using markup commands wrongly.\r
-\r
-WARN_IF_DOC_ERROR      = YES\r
-\r
-# This WARN_NO_PARAMDOC option can be abled to get warnings for \r
-# functions that are documented, but have no documentation for their parameters \r
-# or return value. If set to NO (the default) doxygen will only warn about \r
-# wrong or incomplete parameter documentation, but not about the absence of \r
-# documentation.\r
-\r
-WARN_NO_PARAMDOC       = YES\r
-\r
-# The WARN_FORMAT tag determines the format of the warning messages that \r
-# doxygen can produce. The string should contain the $file, $line, and $text \r
-# tags, which will be replaced by the file and line number from which the \r
-# warning originated and the warning text. Optionally the format may contain \r
-# $version, which will be replaced by the version of the file (if it could \r
-# be obtained via FILE_VERSION_FILTER)\r
-\r
-WARN_FORMAT            = "$file:$line: $text"\r
-\r
-# The WARN_LOGFILE tag can be used to specify a file to which warning \r
-# and error messages should be written. If left blank the output is written \r
-# to stderr.\r
-\r
-WARN_LOGFILE           = \r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the input files\r
-#---------------------------------------------------------------------------\r
-\r
-# The INPUT tag can be used to specify the files and/or directories that contain \r
-# documented source files. You may enter file names like "myfile.cpp" or \r
-# directories like "/usr/src/myproject". Separate the files or directories \r
-# with spaces.\r
-\r
-INPUT                  = ./\r
-\r
-# This tag can be used to specify the character encoding of the source files \r
-# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is \r
-# also the default input encoding. Doxygen uses libiconv (or the iconv built \r
-# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for \r
-# the list of possible encodings.\r
-\r
-INPUT_ENCODING         = UTF-8\r
-\r
-# If the value of the INPUT tag contains directories, you can use the \r
-# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \r
-# and *.h) to filter out the source-files in the directories. If left \r
-# blank the following patterns are tested: \r
-# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx \r
-# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90\r
-\r
-FILE_PATTERNS          = *.h \\r
-                         *.c \\r
-                                                *.txt\r
-\r
-# The RECURSIVE tag can be used to turn specify whether or not subdirectories \r
-# should be searched for input files as well. Possible values are YES and NO. \r
-# If left blank NO is used.\r
-\r
-RECURSIVE              = YES\r
-\r
-# The EXCLUDE tag can be used to specify files and/or directories that should \r
-# excluded from the INPUT source files. This way you can easily exclude a \r
-# subdirectory from a directory tree whose root is specified with the INPUT tag.\r
-\r
-EXCLUDE                = \r
-\r
-# The EXCLUDE_SYMLINKS tag can be used select whether or not files or \r
-# directories that are symbolic links (a Unix filesystem feature) are excluded \r
-# from the input.\r
-\r
-EXCLUDE_SYMLINKS       = NO\r
-\r
-# If the value of the INPUT tag contains directories, you can use the \r
-# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude \r
-# certain files from those directories. Note that the wildcards are matched \r
-# against the file with absolute path, so to exclude all test directories \r
-# for example use the pattern */test/*\r
-\r
-EXCLUDE_PATTERNS       = */LowLevel/USBMode.h\r
-\r
-# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names \r
-# (namespaces, classes, functions, etc.) that should be excluded from the \r
-# output. The symbol name can be a fully qualified name, a word, or if the \r
-# wildcard * is used, a substring. Examples: ANamespace, AClass, \r
-# AClass::ANamespace, ANamespace::*Test\r
-\r
-EXCLUDE_SYMBOLS        = __*\r
-\r
-# The EXAMPLE_PATH tag can be used to specify one or more files or \r
-# directories that contain example code fragments that are included (see \r
-# the \include command).\r
-\r
-EXAMPLE_PATH           = \r
-\r
-# If the value of the EXAMPLE_PATH tag contains directories, you can use the \r
-# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \r
-# and *.h) to filter out the source-files in the directories. If left \r
-# blank all files are included.\r
-\r
-EXAMPLE_PATTERNS       = *\r
-\r
-# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be \r
-# searched for input files to be used with the \include or \dontinclude \r
-# commands irrespective of the value of the RECURSIVE tag. \r
-# Possible values are YES and NO. If left blank NO is used.\r
-\r
-EXAMPLE_RECURSIVE      = NO\r
-\r
-# The IMAGE_PATH tag can be used to specify one or more files or \r
-# directories that contain image that are included in the documentation (see \r
-# the \image command).\r
-\r
-IMAGE_PATH             = \r
-\r
-# The INPUT_FILTER tag can be used to specify a program that doxygen should \r
-# invoke to filter for each input file. Doxygen will invoke the filter program \r
-# by executing (via popen()) the command <filter> <input-file>, where <filter> \r
-# is the value of the INPUT_FILTER tag, and <input-file> is the name of an \r
-# input file. Doxygen will then use the output that the filter program writes \r
-# to standard output.  If FILTER_PATTERNS is specified, this tag will be \r
-# ignored.\r
-\r
-INPUT_FILTER           = \r
-\r
-# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern \r
-# basis.  Doxygen will compare the file name with each pattern and apply the \r
-# filter if there is a match.  The filters are a list of the form: \r
-# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further \r
-# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER \r
-# is applied to all files.\r
-\r
-FILTER_PATTERNS        = \r
-\r
-# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using \r
-# INPUT_FILTER) will be used to filter the input files when producing source \r
-# files to browse (i.e. when SOURCE_BROWSER is set to YES).\r
-\r
-FILTER_SOURCE_FILES    = NO\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to source browsing\r
-#---------------------------------------------------------------------------\r
-\r
-# If the SOURCE_BROWSER tag is set to YES then a list of source files will \r
-# be generated. Documented entities will be cross-referenced with these sources. \r
-# Note: To get rid of all source code in the generated output, make sure also \r
-# VERBATIM_HEADERS is set to NO.\r
-\r
-SOURCE_BROWSER         = NO\r
-\r
-# Setting the INLINE_SOURCES tag to YES will include the body \r
-# of functions and classes directly in the documentation.\r
-\r
-INLINE_SOURCES         = NO\r
-\r
-# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct \r
-# doxygen to hide any special comment blocks from generated source code \r
-# fragments. Normal C and C++ comments will always remain visible.\r
-\r
-STRIP_CODE_COMMENTS    = YES\r
-\r
-# If the REFERENCED_BY_RELATION tag is set to YES \r
-# then for each documented function all documented \r
-# functions referencing it will be listed.\r
-\r
-REFERENCED_BY_RELATION = NO\r
-\r
-# If the REFERENCES_RELATION tag is set to YES \r
-# then for each documented function all documented entities \r
-# called/used by that function will be listed.\r
-\r
-REFERENCES_RELATION    = NO\r
-\r
-# If the REFERENCES_LINK_SOURCE tag is set to YES (the default)\r
-# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from\r
-# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will\r
-# link to the source code.  Otherwise they will link to the documentstion.\r
-\r
-REFERENCES_LINK_SOURCE = NO\r
-\r
-# If the USE_HTAGS tag is set to YES then the references to source code \r
-# will point to the HTML generated by the htags(1) tool instead of doxygen \r
-# built-in source browser. The htags tool is part of GNU's global source \r
-# tagging system (see http://www.gnu.org/software/global/global.html). You \r
-# will need version 4.8.6 or higher.\r
-\r
-USE_HTAGS              = NO\r
-\r
-# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen \r
-# will generate a verbatim copy of the header file for each class for \r
-# which an include is specified. Set to NO to disable this.\r
-\r
-VERBATIM_HEADERS       = NO\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the alphabetical class index\r
-#---------------------------------------------------------------------------\r
-\r
-# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index \r
-# of all compounds will be generated. Enable this if the project \r
-# contains a lot of classes, structs, unions or interfaces.\r
-\r
-ALPHABETICAL_INDEX     = YES\r
-\r
-# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then \r
-# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns \r
-# in which this list will be split (can be a number in the range [1..20])\r
-\r
-COLS_IN_ALPHA_INDEX    = 5\r
-\r
-# In case all classes in a project start with a common prefix, all \r
-# classes will be put under the same header in the alphabetical index. \r
-# The IGNORE_PREFIX tag can be used to specify one or more prefixes that \r
-# should be ignored while generating the index headers.\r
-\r
-IGNORE_PREFIX          = \r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the HTML output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_HTML tag is set to YES (the default) Doxygen will \r
-# generate HTML output.\r
-\r
-GENERATE_HTML          = YES\r
-\r
-# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. \r
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
-# put in front of it. If left blank `html' will be used as the default path.\r
-\r
-HTML_OUTPUT            = html\r
-\r
-# The HTML_FILE_EXTENSION tag can be used to specify the file extension for \r
-# each generated HTML page (for example: .htm,.php,.asp). If it is left blank \r
-# doxygen will generate files with .html extension.\r
-\r
-HTML_FILE_EXTENSION    = .html\r
-\r
-# The HTML_HEADER tag can be used to specify a personal HTML header for \r
-# each generated HTML page. If it is left blank doxygen will generate a \r
-# standard header.\r
-\r
-HTML_HEADER            = \r
-\r
-# The HTML_FOOTER tag can be used to specify a personal HTML footer for \r
-# each generated HTML page. If it is left blank doxygen will generate a \r
-# standard footer.\r
-\r
-HTML_FOOTER            = \r
-\r
-# The HTML_STYLESHEET tag can be used to specify a user-defined cascading \r
-# style sheet that is used by each HTML page. It can be used to \r
-# fine-tune the look of the HTML output. If the tag is left blank doxygen \r
-# will generate a default style sheet. Note that doxygen will try to copy \r
-# the style sheet file to the HTML output directory, so don't put your own \r
-# stylesheet in the HTML output directory as well, or it will be erased!\r
-\r
-HTML_STYLESHEET        = \r
-\r
-# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, \r
-# files or namespaces will be aligned in HTML using tables. If set to \r
-# NO a bullet list will be used.\r
-\r
-HTML_ALIGN_MEMBERS     = YES\r
-\r
-# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML \r
-# documentation will contain sections that can be hidden and shown after the \r
-# page has loaded. For this to work a browser that supports \r
-# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox \r
-# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari).\r
-\r
-HTML_DYNAMIC_SECTIONS  = YES\r
-\r
-# If the GENERATE_DOCSET tag is set to YES, additional index files \r
-# will be generated that can be used as input for Apple's Xcode 3 \r
-# integrated development environment, introduced with OSX 10.5 (Leopard). \r
-# To create a documentation set, doxygen will generate a Makefile in the \r
-# HTML output directory. Running make will produce the docset in that \r
-# directory and running "make install" will install the docset in \r
-# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find \r
-# it at startup. \r
-# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information.\r
-\r
-GENERATE_DOCSET        = NO\r
-\r
-# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the \r
-# feed. A documentation feed provides an umbrella under which multiple \r
-# documentation sets from a single provider (such as a company or product suite) \r
-# can be grouped.\r
-\r
-DOCSET_FEEDNAME        = "Doxygen generated docs"\r
-\r
-# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that \r
-# should uniquely identify the documentation set bundle. This should be a \r
-# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen \r
-# will append .docset to the name.\r
-\r
-DOCSET_BUNDLE_ID       = org.doxygen.Project\r
-\r
-# If the GENERATE_HTMLHELP tag is set to YES, additional index files \r
-# will be generated that can be used as input for tools like the \r
-# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) \r
-# of the generated HTML documentation.\r
-\r
-GENERATE_HTMLHELP      = NO\r
-\r
-# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can \r
-# be used to specify the file name of the resulting .chm file. You \r
-# can add a path in front of the file if the result should not be \r
-# written to the html output directory.\r
-\r
-CHM_FILE               = \r
-\r
-# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can \r
-# be used to specify the location (absolute path including file name) of \r
-# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run \r
-# the HTML help compiler on the generated index.hhp.\r
-\r
-HHC_LOCATION           = \r
-\r
-# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag \r
-# controls if a separate .chi index file is generated (YES) or that \r
-# it should be included in the master .chm file (NO).\r
-\r
-GENERATE_CHI           = NO\r
-\r
-# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING\r
-# is used to encode HtmlHelp index (hhk), content (hhc) and project file\r
-# content.\r
-\r
-CHM_INDEX_ENCODING     = \r
-\r
-# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag \r
-# controls whether a binary table of contents is generated (YES) or a \r
-# normal table of contents (NO) in the .chm file.\r
-\r
-BINARY_TOC             = NO\r
-\r
-# The TOC_EXPAND flag can be set to YES to add extra items for group members \r
-# to the contents of the HTML help documentation and to the tree view.\r
-\r
-TOC_EXPAND             = YES\r
-\r
-# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER \r
-# are set, an additional index file will be generated that can be used as input for \r
-# Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated \r
-# HTML documentation.\r
-\r
-GENERATE_QHP           = NO\r
-\r
-# If the QHG_LOCATION tag is specified, the QCH_FILE tag can \r
-# be used to specify the file name of the resulting .qch file. \r
-# The path specified is relative to the HTML output folder.\r
-\r
-QCH_FILE               = \r
-\r
-# The QHP_NAMESPACE tag specifies the namespace to use when generating \r
-# Qt Help Project output. For more information please see \r
-# <a href="http://doc.trolltech.com/qthelpproject.html#namespace">Qt Help Project / Namespace</a>.\r
-\r
-QHP_NAMESPACE          = org.doxygen.Project\r
-\r
-# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating \r
-# Qt Help Project output. For more information please see \r
-# <a href="http://doc.trolltech.com/qthelpproject.html#virtual-folders">Qt Help Project / Virtual Folders</a>.\r
-\r
-QHP_VIRTUAL_FOLDER     = doc\r
-\r
-# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can \r
-# be used to specify the location of Qt's qhelpgenerator. \r
-# If non-empty doxygen will try to run qhelpgenerator on the generated \r
-# .qhp file .\r
-\r
-QHG_LOCATION           = \r
-\r
-# The DISABLE_INDEX tag can be used to turn on/off the condensed index at \r
-# top of each HTML page. The value NO (the default) enables the index and \r
-# the value YES disables it.\r
-\r
-DISABLE_INDEX          = NO\r
-\r
-# This tag can be used to set the number of enum values (range [1..20]) \r
-# that doxygen will group on one line in the generated HTML documentation.\r
-\r
-ENUM_VALUES_PER_LINE   = 1\r
-\r
-# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index\r
-# structure should be generated to display hierarchical information.\r
-# If the tag value is set to FRAME, a side panel will be generated\r
-# containing a tree-like index structure (just like the one that \r
-# is generated for HTML Help). For this to work a browser that supports \r
-# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, \r
-# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are \r
-# probably better off using the HTML help feature. Other possible values \r
-# for this tag are: HIERARCHIES, which will generate the Groups, Directories,\r
-# and Class Hierarchy pages using a tree view instead of an ordered list;\r
-# ALL, which combines the behavior of FRAME and HIERARCHIES; and NONE, which\r
-# disables this behavior completely. For backwards compatibility with previous\r
-# releases of Doxygen, the values YES and NO are equivalent to FRAME and NONE\r
-# respectively.\r
-\r
-GENERATE_TREEVIEW      = YES\r
-\r
-# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be \r
-# used to set the initial width (in pixels) of the frame in which the tree \r
-# is shown.\r
-\r
-TREEVIEW_WIDTH         = 250\r
-\r
-# Use this tag to change the font size of Latex formulas included \r
-# as images in the HTML documentation. The default is 10. Note that \r
-# when you change the font size after a successful doxygen run you need \r
-# to manually remove any form_*.png images from the HTML output directory \r
-# to force them to be regenerated.\r
-\r
-FORMULA_FONTSIZE       = 10\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the LaTeX output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will \r
-# generate Latex output.\r
-\r
-GENERATE_LATEX         = NO\r
-\r
-# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. \r
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
-# put in front of it. If left blank `latex' will be used as the default path.\r
-\r
-LATEX_OUTPUT           = latex\r
-\r
-# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be \r
-# invoked. If left blank `latex' will be used as the default command name.\r
-\r
-LATEX_CMD_NAME         = latex\r
-\r
-# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to \r
-# generate index for LaTeX. If left blank `makeindex' will be used as the \r
-# default command name.\r
-\r
-MAKEINDEX_CMD_NAME     = makeindex\r
-\r
-# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact \r
-# LaTeX documents. This may be useful for small projects and may help to \r
-# save some trees in general.\r
-\r
-COMPACT_LATEX          = NO\r
-\r
-# The PAPER_TYPE tag can be used to set the paper type that is used \r
-# by the printer. Possible values are: a4, a4wide, letter, legal and \r
-# executive. If left blank a4wide will be used.\r
-\r
-PAPER_TYPE             = a4wide\r
-\r
-# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX \r
-# packages that should be included in the LaTeX output.\r
-\r
-EXTRA_PACKAGES         = \r
-\r
-# The LATEX_HEADER tag can be used to specify a personal LaTeX header for \r
-# the generated latex document. The header should contain everything until \r
-# the first chapter. If it is left blank doxygen will generate a \r
-# standard header. Notice: only use this tag if you know what you are doing!\r
-\r
-LATEX_HEADER           = \r
-\r
-# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated \r
-# is prepared for conversion to pdf (using ps2pdf). The pdf file will \r
-# contain links (just like the HTML output) instead of page references \r
-# This makes the output suitable for online browsing using a pdf viewer.\r
-\r
-PDF_HYPERLINKS         = YES\r
-\r
-# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of \r
-# plain latex in the generated Makefile. Set this option to YES to get a \r
-# higher quality PDF documentation.\r
-\r
-USE_PDFLATEX           = YES\r
-\r
-# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. \r
-# command to the generated LaTeX files. This will instruct LaTeX to keep \r
-# running if errors occur, instead of asking the user for help. \r
-# This option is also used when generating formulas in HTML.\r
-\r
-LATEX_BATCHMODE        = NO\r
-\r
-# If LATEX_HIDE_INDICES is set to YES then doxygen will not \r
-# include the index chapters (such as File Index, Compound Index, etc.) \r
-# in the output.\r
-\r
-LATEX_HIDE_INDICES     = NO\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the RTF output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output \r
-# The RTF output is optimized for Word 97 and may not look very pretty with \r
-# other RTF readers or editors.\r
-\r
-GENERATE_RTF           = NO\r
-\r
-# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. \r
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
-# put in front of it. If left blank `rtf' will be used as the default path.\r
-\r
-RTF_OUTPUT             = rtf\r
-\r
-# If the COMPACT_RTF tag is set to YES Doxygen generates more compact \r
-# RTF documents. This may be useful for small projects and may help to \r
-# save some trees in general.\r
-\r
-COMPACT_RTF            = NO\r
-\r
-# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated \r
-# will contain hyperlink fields. The RTF file will \r
-# contain links (just like the HTML output) instead of page references. \r
-# This makes the output suitable for online browsing using WORD or other \r
-# programs which support those fields. \r
-# Note: wordpad (write) and others do not support links.\r
-\r
-RTF_HYPERLINKS         = NO\r
-\r
-# Load stylesheet definitions from file. Syntax is similar to doxygen's \r
-# config file, i.e. a series of assignments. You only have to provide \r
-# replacements, missing definitions are set to their default value.\r
-\r
-RTF_STYLESHEET_FILE    = \r
-\r
-# Set optional variables used in the generation of an rtf document. \r
-# Syntax is similar to doxygen's config file.\r
-\r
-RTF_EXTENSIONS_FILE    = \r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the man page output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_MAN tag is set to YES (the default) Doxygen will \r
-# generate man pages\r
-\r
-GENERATE_MAN           = NO\r
-\r
-# The MAN_OUTPUT tag is used to specify where the man pages will be put. \r
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
-# put in front of it. If left blank `man' will be used as the default path.\r
-\r
-MAN_OUTPUT             = man\r
-\r
-# The MAN_EXTENSION tag determines the extension that is added to \r
-# the generated man pages (default is the subroutine's section .3)\r
-\r
-MAN_EXTENSION          = .3\r
-\r
-# If the MAN_LINKS tag is set to YES and Doxygen generates man output, \r
-# then it will generate one additional man file for each entity \r
-# documented in the real man page(s). These additional files \r
-# only source the real man page, but without them the man command \r
-# would be unable to find the correct page. The default is NO.\r
-\r
-MAN_LINKS              = NO\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the XML output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_XML tag is set to YES Doxygen will \r
-# generate an XML file that captures the structure of \r
-# the code including all documentation.\r
-\r
-GENERATE_XML           = NO\r
-\r
-# The XML_OUTPUT tag is used to specify where the XML pages will be put. \r
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
-# put in front of it. If left blank `xml' will be used as the default path.\r
-\r
-XML_OUTPUT             = xml\r
-\r
-# The XML_SCHEMA tag can be used to specify an XML schema, \r
-# which can be used by a validating XML parser to check the \r
-# syntax of the XML files.\r
-\r
-XML_SCHEMA             = \r
-\r
-# The XML_DTD tag can be used to specify an XML DTD, \r
-# which can be used by a validating XML parser to check the \r
-# syntax of the XML files.\r
-\r
-XML_DTD                = \r
-\r
-# If the XML_PROGRAMLISTING tag is set to YES Doxygen will \r
-# dump the program listings (including syntax highlighting \r
-# and cross-referencing information) to the XML output. Note that \r
-# enabling this will significantly increase the size of the XML output.\r
-\r
-XML_PROGRAMLISTING     = YES\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options for the AutoGen Definitions output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will \r
-# generate an AutoGen Definitions (see autogen.sf.net) file \r
-# that captures the structure of the code including all \r
-# documentation. Note that this feature is still experimental \r
-# and incomplete at the moment.\r
-\r
-GENERATE_AUTOGEN_DEF   = NO\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the Perl module output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_PERLMOD tag is set to YES Doxygen will \r
-# generate a Perl module file that captures the structure of \r
-# the code including all documentation. Note that this \r
-# feature is still experimental and incomplete at the \r
-# moment.\r
-\r
-GENERATE_PERLMOD       = NO\r
-\r
-# If the PERLMOD_LATEX tag is set to YES Doxygen will generate \r
-# the necessary Makefile rules, Perl scripts and LaTeX code to be able \r
-# to generate PDF and DVI output from the Perl module output.\r
-\r
-PERLMOD_LATEX          = NO\r
-\r
-# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be \r
-# nicely formatted so it can be parsed by a human reader.  This is useful \r
-# if you want to understand what is going on.  On the other hand, if this \r
-# tag is set to NO the size of the Perl module output will be much smaller \r
-# and Perl will parse it just the same.\r
-\r
-PERLMOD_PRETTY         = YES\r
-\r
-# The names of the make variables in the generated doxyrules.make file \r
-# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. \r
-# This is useful so different doxyrules.make files included by the same \r
-# Makefile don't overwrite each other's variables.\r
-\r
-PERLMOD_MAKEVAR_PREFIX = \r
-\r
-#---------------------------------------------------------------------------\r
-# Configuration options related to the preprocessor   \r
-#---------------------------------------------------------------------------\r
-\r
-# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will \r
-# evaluate all C-preprocessor directives found in the sources and include \r
-# files.\r
-\r
-ENABLE_PREPROCESSING   = YES\r
-\r
-# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro \r
-# names in the source code. If set to NO (the default) only conditional \r
-# compilation will be performed. Macro expansion can be done in a controlled \r
-# way by setting EXPAND_ONLY_PREDEF to YES.\r
-\r
-MACRO_EXPANSION        = YES\r
-\r
-# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES \r
-# then the macro expansion is limited to the macros specified with the \r
-# PREDEFINED and EXPAND_AS_DEFINED tags.\r
-\r
-EXPAND_ONLY_PREDEF     = YES\r
-\r
-# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files \r
-# in the INCLUDE_PATH (see below) will be search if a #include is found.\r
-\r
-SEARCH_INCLUDES        = YES\r
-\r
-# The INCLUDE_PATH tag can be used to specify one or more directories that \r
-# contain include files that are not input files but should be processed by \r
-# the preprocessor.\r
-\r
-INCLUDE_PATH           = \r
-\r
-# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard \r
-# patterns (like *.h and *.hpp) to filter out the header-files in the \r
-# directories. If left blank, the patterns specified with FILE_PATTERNS will \r
-# be used.\r
-\r
-INCLUDE_FILE_PATTERNS  = \r
-\r
-# The PREDEFINED tag can be used to specify one or more macro names that \r
-# are defined before the preprocessor is started (similar to the -D option of \r
-# gcc). The argument of the tag is a list of macros of the form: name \r
-# or name=definition (no spaces). If the definition and the = are \r
-# omitted =1 is assumed. To prevent a macro definition from being \r
-# undefined via #undef or recursively expanded use the := operator \r
-# instead of the = operator.\r
-\r
-PREDEFINED             = __DOXYGEN__\r
-\r
-# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then \r
-# this tag can be used to specify a list of macro names that should be expanded. \r
-# The macro definition that is found in the sources will be used. \r
-# Use the PREDEFINED tag if you want to use a different macro definition.\r
-\r
-EXPAND_AS_DEFINED      = BUTTLOADTAG\r
-\r
-# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then \r
-# doxygen's preprocessor will remove all function-like macros that are alone \r
-# on a line, have an all uppercase name, and do not end with a semicolon. Such \r
-# function macros are typically used for boiler-plate code, and will confuse \r
-# the parser if not removed.\r
-\r
-SKIP_FUNCTION_MACROS   = YES\r
-\r
-#---------------------------------------------------------------------------\r
-# Configuration::additions related to external references   \r
-#---------------------------------------------------------------------------\r
-\r
-# The TAGFILES option can be used to specify one or more tagfiles. \r
-# Optionally an initial location of the external documentation \r
-# can be added for each tagfile. The format of a tag file without \r
-# this location is as follows: \r
-#   TAGFILES = file1 file2 ... \r
-# Adding location for the tag files is done as follows: \r
-#   TAGFILES = file1=loc1 "file2 = loc2" ... \r
-# where "loc1" and "loc2" can be relative or absolute paths or \r
-# URLs. If a location is present for each tag, the installdox tool \r
-# does not have to be run to correct the links.\r
-# Note that each tag file must have a unique name\r
-# (where the name does NOT include the path)\r
-# If a tag file is not located in the directory in which doxygen \r
-# is run, you must also specify the path to the tagfile here.\r
-\r
-TAGFILES               = \r
-\r
-# When a file name is specified after GENERATE_TAGFILE, doxygen will create \r
-# a tag file that is based on the input files it reads.\r
-\r
-GENERATE_TAGFILE       = \r
-\r
-# If the ALLEXTERNALS tag is set to YES all external classes will be listed \r
-# in the class index. If set to NO only the inherited external classes \r
-# will be listed.\r
-\r
-ALLEXTERNALS           = NO\r
-\r
-# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed \r
-# in the modules index. If set to NO, only the current project's groups will \r
-# be listed.\r
-\r
-EXTERNAL_GROUPS        = YES\r
-\r
-# The PERL_PATH should be the absolute path and name of the perl script \r
-# interpreter (i.e. the result of `which perl').\r
-\r
-PERL_PATH              = /usr/bin/perl\r
-\r
-#---------------------------------------------------------------------------\r
-# Configuration options related to the dot tool   \r
-#---------------------------------------------------------------------------\r
-\r
-# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will \r
-# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base \r
-# or super classes. Setting the tag to NO turns the diagrams off. Note that \r
-# this option is superseded by the HAVE_DOT option below. This is only a \r
-# fallback. It is recommended to install and use dot, since it yields more \r
-# powerful graphs.\r
-\r
-CLASS_DIAGRAMS         = NO\r
-\r
-# You can define message sequence charts within doxygen comments using the \msc \r
-# command. Doxygen will then run the mscgen tool (see \r
-# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the \r
-# documentation. The MSCGEN_PATH tag allows you to specify the directory where \r
-# the mscgen tool resides. If left empty the tool is assumed to be found in the \r
-# default search path.\r
-\r
-MSCGEN_PATH            = \r
-\r
-# If set to YES, the inheritance and collaboration graphs will hide \r
-# inheritance and usage relations if the target is undocumented \r
-# or is not a class.\r
-\r
-HIDE_UNDOC_RELATIONS   = YES\r
-\r
-# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is \r
-# available from the path. This tool is part of Graphviz, a graph visualization \r
-# toolkit from AT&T and Lucent Bell Labs. The other options in this section \r
-# have no effect if this option is set to NO (the default)\r
-\r
-HAVE_DOT               = NO\r
-\r
-# By default doxygen will write a font called FreeSans.ttf to the output \r
-# directory and reference it in all dot files that doxygen generates. This \r
-# font does not include all possible unicode characters however, so when you need \r
-# these (or just want a differently looking font) you can specify the font name \r
-# using DOT_FONTNAME. You need need to make sure dot is able to find the font, \r
-# which can be done by putting it in a standard location or by setting the \r
-# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory \r
-# containing the font.\r
-\r
-DOT_FONTNAME           = FreeSans\r
-\r
-# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. \r
-# The default size is 10pt.\r
-\r
-DOT_FONTSIZE           = 10\r
-\r
-# By default doxygen will tell dot to use the output directory to look for the \r
-# FreeSans.ttf font (which doxygen will put there itself). If you specify a \r
-# different font using DOT_FONTNAME you can set the path where dot \r
-# can find it using this tag.\r
-\r
-DOT_FONTPATH           = \r
-\r
-# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen \r
-# will generate a graph for each documented class showing the direct and \r
-# indirect inheritance relations. Setting this tag to YES will force the \r
-# the CLASS_DIAGRAMS tag to NO.\r
-\r
-CLASS_GRAPH            = NO\r
-\r
-# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen \r
-# will generate a graph for each documented class showing the direct and \r
-# indirect implementation dependencies (inheritance, containment, and \r
-# class references variables) of the class with other documented classes.\r
-\r
-COLLABORATION_GRAPH    = NO\r
-\r
-# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen \r
-# will generate a graph for groups, showing the direct groups dependencies\r
-\r
-GROUP_GRAPHS           = NO\r
-\r
-# If the UML_LOOK tag is set to YES doxygen will generate inheritance and \r
-# collaboration diagrams in a style similar to the OMG's Unified Modeling \r
-# Language.\r
-\r
-UML_LOOK               = NO\r
-\r
-# If set to YES, the inheritance and collaboration graphs will show the \r
-# relations between templates and their instances.\r
-\r
-TEMPLATE_RELATIONS     = NO\r
-\r
-# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT \r
-# tags are set to YES then doxygen will generate a graph for each documented \r
-# file showing the direct and indirect include dependencies of the file with \r
-# other documented files.\r
-\r
-INCLUDE_GRAPH          = NO\r
-\r
-# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and \r
-# HAVE_DOT tags are set to YES then doxygen will generate a graph for each \r
-# documented header file showing the documented files that directly or \r
-# indirectly include this file.\r
-\r
-INCLUDED_BY_GRAPH      = NO\r
-\r
-# If the CALL_GRAPH and HAVE_DOT options are set to YES then \r
-# doxygen will generate a call dependency graph for every global function \r
-# or class method. Note that enabling this option will significantly increase \r
-# the time of a run. So in most cases it will be better to enable call graphs \r
-# for selected functions only using the \callgraph command.\r
-\r
-CALL_GRAPH             = NO\r
-\r
-# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then \r
-# doxygen will generate a caller dependency graph for every global function \r
-# or class method. Note that enabling this option will significantly increase \r
-# the time of a run. So in most cases it will be better to enable caller \r
-# graphs for selected functions only using the \callergraph command.\r
-\r
-CALLER_GRAPH           = NO\r
-\r
-# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen \r
-# will graphical hierarchy of all classes instead of a textual one.\r
-\r
-GRAPHICAL_HIERARCHY    = NO\r
-\r
-# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES \r
-# then doxygen will show the dependencies a directory has on other directories \r
-# in a graphical way. The dependency relations are determined by the #include\r
-# relations between the files in the directories.\r
-\r
-DIRECTORY_GRAPH        = NO\r
-\r
-# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images \r
-# generated by dot. Possible values are png, jpg, or gif\r
-# If left blank png will be used.\r
-\r
-DOT_IMAGE_FORMAT       = png\r
-\r
-# The tag DOT_PATH can be used to specify the path where the dot tool can be \r
-# found. If left blank, it is assumed the dot tool can be found in the path.\r
-\r
-DOT_PATH               = "C:/Program Files/Graphviz2.18/bin"\r
-\r
-# The DOTFILE_DIRS tag can be used to specify one or more directories that \r
-# contain dot files that are included in the documentation (see the \r
-# \dotfile command).\r
-\r
-DOTFILE_DIRS           = \r
-\r
-# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of \r
-# nodes that will be shown in the graph. If the number of nodes in a graph \r
-# becomes larger than this value, doxygen will truncate the graph, which is \r
-# visualized by representing a node as a red box. Note that doxygen if the \r
-# number of direct children of the root node in a graph is already larger than \r
-# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note \r
-# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.\r
-\r
-DOT_GRAPH_MAX_NODES    = 15\r
-\r
-# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the \r
-# graphs generated by dot. A depth value of 3 means that only nodes reachable \r
-# from the root by following a path via at most 3 edges will be shown. Nodes \r
-# that lay further from the root node will be omitted. Note that setting this \r
-# option to 1 or 2 may greatly reduce the computation time needed for large \r
-# code bases. Also note that the size of a graph can be further restricted by \r
-# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.\r
-\r
-MAX_DOT_GRAPH_DEPTH    = 2\r
-\r
-# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent \r
-# background. This is disabled by default, because dot on Windows does not \r
-# seem to support this out of the box. Warning: Depending on the platform used, \r
-# enabling this option may lead to badly anti-aliased labels on the edges of \r
-# a graph (i.e. they become hard to read).\r
-\r
-DOT_TRANSPARENT        = YES\r
-\r
-# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output \r
-# files in one run (i.e. multiple -o and -T options on the command line). This \r
-# makes dot run faster, but since only newer versions of dot (>1.8.10) \r
-# support this, this feature is disabled by default.\r
-\r
-DOT_MULTI_TARGETS      = NO\r
-\r
-# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will \r
-# generate a legend page explaining the meaning of the various boxes and \r
-# arrows in the dot generated graphs.\r
-\r
-GENERATE_LEGEND        = YES\r
-\r
-# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will \r
-# remove the intermediate dot files that are used to generate \r
-# the various graphs.\r
-\r
-DOT_CLEANUP            = YES\r
-\r
-#---------------------------------------------------------------------------\r
-# Configuration::additions related to the search engine   \r
-#---------------------------------------------------------------------------\r
-\r
-# The SEARCHENGINE tag specifies whether or not a search engine should be \r
-# used. If set to NO the values of all tags below this one will be ignored.\r
-\r
-SEARCHENGINE           = NO\r
diff --git a/Demos/Device/MassStorage/Lib/DataflashManager.c b/Demos/Device/MassStorage/Lib/DataflashManager.c
deleted file mode 100644 (file)
index 87edef1..0000000
+++ /dev/null
@@ -1,469 +0,0 @@
-/*\r
-             LUFA Library\r
-     Copyright (C) Dean Camera, 2009.\r
-              \r
-  dean [at] fourwalledcubicle [dot] com\r
-      www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
-  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
-  Permission to use, copy, modify, and distribute this software\r
-  and its documentation for any purpose and without fee is hereby\r
-  granted, provided that the above copyright notice appear in all\r
-  copies and that both that the copyright notice and this\r
-  permission notice and warranty disclaimer appear in supporting\r
-  documentation, and that the name of the author not be used in\r
-  advertising or publicity pertaining to distribution of the\r
-  software without specific, written prior permission.\r
-\r
-  The author disclaim all warranties with regard to this\r
-  software, including all implied warranties of merchantability\r
-  and fitness.  In no event shall the author be liable for any\r
-  special, indirect or consequential damages or any damages\r
-  whatsoever resulting from loss of use, data or profits, whether\r
-  in an action of contract, negligence or other tortious action,\r
-  arising out of or in connection with the use or performance of\r
-  this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- *  Functions to manage the physical dataflash media, including reading and writing of\r
- *  blocks of data. These functions are called by the SCSI layer when data must be stored\r
- *  or retrieved to/from the physical storage media. If a different media is used (such\r
- *  as a SD card or EEPROM), functions similar to these will need to be generated.\r
- */\r
-\r
-#define  INCLUDE_FROM_DATAFLASHMANAGER_C\r
-#include "DataflashManager.h"\r
-\r
-/** Writes blocks (OS blocks, not Dataflash pages) to the storage medium, the board dataflash IC(s), from\r
- *  the pre-selected data OUT endpoint. This routine reads in OS sized blocks from the endpoint and writes\r
- *  them to the dataflash in Dataflash page sized blocks.\r
- *\r
- *  \param BlockAddress  Data block starting address for the write sequence\r
- *  \param TotalBlocks   Number of blocks of data to write\r
- */\r
-void DataflashManager_WriteBlocks(USB_ClassInfo_MS_t* MSInterfaceInfo, const uint32_t BlockAddress, uint16_t TotalBlocks)\r
-{\r
-       uint16_t CurrDFPage          = ((BlockAddress * VIRTUAL_MEMORY_BLOCK_SIZE) / DATAFLASH_PAGE_SIZE);\r
-       uint16_t CurrDFPageByte      = ((BlockAddress * VIRTUAL_MEMORY_BLOCK_SIZE) % DATAFLASH_PAGE_SIZE);\r
-       uint8_t  CurrDFPageByteDiv16 = (CurrDFPageByte >> 4);\r
-\r
-       /* Copy selected dataflash's current page contents to the dataflash buffer */\r
-       Dataflash_SelectChipFromPage(CurrDFPage);\r
-       Dataflash_SendByte(DF_CMD_MAINMEMTOBUFF1);\r
-       Dataflash_SendAddressBytes(CurrDFPage, 0);\r
-       Dataflash_WaitWhileBusy();\r
-\r
-       /* Send the dataflash buffer write command */\r
-       Dataflash_ToggleSelectedChipCS();\r
-       Dataflash_SendByte(DF_CMD_BUFF1WRITE);\r
-       Dataflash_SendAddressBytes(0, CurrDFPageByte);\r
-\r
-       /* Wait until endpoint is ready before continuing */\r
-       while (!(Endpoint_IsReadWriteAllowed()));\r
-\r
-       while (TotalBlocks)\r
-       {\r
-               uint8_t BytesInBlockDiv16 = 0;\r
-               \r
-               /* Write an endpoint packet sized data block to the dataflash */\r
-               while (BytesInBlockDiv16 < (VIRTUAL_MEMORY_BLOCK_SIZE >> 4))\r
-               {\r
-                       /* Check if the endpoint is currently empty */\r
-                       if (!(Endpoint_IsReadWriteAllowed()))\r
-                       {\r
-                               /* Clear the current endpoint bank */\r
-                               Endpoint_ClearOUT();\r
-                               \r
-                               /* Wait until the host has sent another packet */\r
-                               while (!(Endpoint_IsReadWriteAllowed()));\r
-                       }\r
-\r
-                       /* Check if end of dataflash page reached */\r
-                       if (CurrDFPageByteDiv16 == (DATAFLASH_PAGE_SIZE >> 4))\r
-                       {\r
-                               /* Write the dataflash buffer contents back to the dataflash page */\r
-                               Dataflash_ToggleSelectedChipCS();\r
-                               Dataflash_SendByte(DF_CMD_BUFF1TOMAINMEMWITHERASE);\r
-                               Dataflash_SendAddressBytes(CurrDFPage, 0);\r
-\r
-                               /* Reset the dataflash buffer counter, increment the page counter */\r
-                               CurrDFPageByteDiv16 = 0;\r
-                               CurrDFPage++;\r
-\r
-                               /* Select the next dataflash chip based on the new dataflash page index */\r
-                               Dataflash_SelectChipFromPage(CurrDFPage);\r
-                               Dataflash_WaitWhileBusy();\r
-\r
-#if (DATAFLASH_PAGE_SIZE > VIRTUAL_MEMORY_BLOCK_SIZE)\r
-                               /* If less than one dataflash page remaining, copy over the existing page to preserve trailing data */\r
-                               if ((TotalBlocks * (VIRTUAL_MEMORY_BLOCK_SIZE >> 4)) < (DATAFLASH_PAGE_SIZE >> 4))\r
-                               {\r
-                                       /* Copy selected dataflash's current page contents to the dataflash buffer */\r
-                                       Dataflash_ToggleSelectedChipCS();\r
-                                       Dataflash_SendByte(DF_CMD_MAINMEMTOBUFF1);\r
-                                       Dataflash_SendAddressBytes(CurrDFPage, 0);\r
-                                       Dataflash_WaitWhileBusy();\r
-                               }\r
-#endif\r
-\r
-                               /* Send the dataflash buffer write command */\r
-                               Dataflash_ToggleSelectedChipCS();\r
-                               Dataflash_SendByte(DF_CMD_BUFF1WRITE);\r
-                               Dataflash_SendAddressBytes(0, 0);\r
-                       }\r
-\r
-                       /* Write one 16-byte chunk of data to the dataflash */\r
-                       Dataflash_SendByte(Endpoint_Read_Byte());\r
-                       Dataflash_SendByte(Endpoint_Read_Byte());\r
-                       Dataflash_SendByte(Endpoint_Read_Byte());\r
-                       Dataflash_SendByte(Endpoint_Read_Byte());\r
-                       Dataflash_SendByte(Endpoint_Read_Byte());\r
-                       Dataflash_SendByte(Endpoint_Read_Byte());\r
-                       Dataflash_SendByte(Endpoint_Read_Byte());\r
-                       Dataflash_SendByte(Endpoint_Read_Byte());\r
-                       Dataflash_SendByte(Endpoint_Read_Byte());\r
-                       Dataflash_SendByte(Endpoint_Read_Byte());\r
-                       Dataflash_SendByte(Endpoint_Read_Byte());\r
-                       Dataflash_SendByte(Endpoint_Read_Byte());\r
-                       Dataflash_SendByte(Endpoint_Read_Byte());\r
-                       Dataflash_SendByte(Endpoint_Read_Byte());\r
-                       Dataflash_SendByte(Endpoint_Read_Byte());\r
-                       Dataflash_SendByte(Endpoint_Read_Byte());\r
-                       \r
-                       /* Increment the dataflash page 16 byte block counter */\r
-                       CurrDFPageByteDiv16++;\r
-\r
-                       /* Increment the block 16 byte block counter */\r
-                       BytesInBlockDiv16++;\r
-\r
-                       /* Check if the current command is being aborted by the host */\r
-                       if (MSInterfaceInfo->IsMassStoreReset)\r
-                         return;                       \r
-               }\r
-                       \r
-               /* Decrement the blocks remaining counter and reset the sub block counter */\r
-               TotalBlocks--;\r
-       }\r
-\r
-       /* Write the dataflash buffer contents back to the dataflash page */\r
-       Dataflash_ToggleSelectedChipCS();\r
-       Dataflash_SendByte(DF_CMD_BUFF1TOMAINMEMWITHERASE);\r
-       Dataflash_SendAddressBytes(CurrDFPage, 0x00);\r
-       Dataflash_WaitWhileBusy();\r
-\r
-       /* If the endpoint is empty, clear it ready for the next packet from the host */\r
-       if (!(Endpoint_IsReadWriteAllowed()))\r
-         Endpoint_ClearOUT();\r
-\r
-       /* Deselect all dataflash chips */\r
-       Dataflash_DeselectChip();\r
-}\r
-\r
-/** Reads blocks (OS blocks, not Dataflash pages) from the storage medium, the board dataflash IC(s), into\r
- *  the pre-selected data IN endpoint. This routine reads in Dataflash page sized blocks from the Dataflash\r
- *  and writes them in OS sized blocks to the endpoint.\r
- *\r
- *  \param BlockAddress  Data block starting address for the read sequence\r
- *  \param TotalBlocks   Number of blocks of data to read\r
- */\r
-void DataflashManager_ReadBlocks(USB_ClassInfo_MS_t* MSInterfaceInfo, const uint32_t BlockAddress, uint16_t TotalBlocks)\r
-{\r
-       uint16_t CurrDFPage          = ((BlockAddress * VIRTUAL_MEMORY_BLOCK_SIZE) / DATAFLASH_PAGE_SIZE);\r
-       uint16_t CurrDFPageByte      = ((BlockAddress * VIRTUAL_MEMORY_BLOCK_SIZE) % DATAFLASH_PAGE_SIZE);\r
-       uint8_t  CurrDFPageByteDiv16 = (CurrDFPageByte >> 4);\r
-\r
-       /* Send the dataflash main memory page read command */\r
-       Dataflash_SelectChipFromPage(CurrDFPage);\r
-       Dataflash_SendByte(DF_CMD_MAINMEMPAGEREAD);\r
-       Dataflash_SendAddressBytes(CurrDFPage, CurrDFPageByte);\r
-       Dataflash_SendByte(0x00);\r
-       Dataflash_SendByte(0x00);\r
-       Dataflash_SendByte(0x00);\r
-       Dataflash_SendByte(0x00);\r
-       \r
-       /* Wait until endpoint is ready before continuing */\r
-       while (!(Endpoint_IsReadWriteAllowed()));\r
-       \r
-       while (TotalBlocks)\r
-       {\r
-               uint8_t BytesInBlockDiv16 = 0;\r
-               \r
-               /* Write an endpoint packet sized data block to the dataflash */\r
-               while (BytesInBlockDiv16 < (VIRTUAL_MEMORY_BLOCK_SIZE >> 4))\r
-               {\r
-                       /* Check if the endpoint is currently full */\r
-                       if (!(Endpoint_IsReadWriteAllowed()))\r
-                       {\r
-                               /* Clear the endpoint bank to send its contents to the host */\r
-                               Endpoint_ClearIN();\r
-                               \r
-                               /* Wait until the endpoint is ready for more data */\r
-                               while (!(Endpoint_IsReadWriteAllowed()));\r
-                       }\r
-                       \r
-                       /* Check if end of dataflash page reached */\r
-                       if (CurrDFPageByteDiv16 == (DATAFLASH_PAGE_SIZE >> 4))\r
-                       {\r
-                               /* Reset the dataflash buffer counter, increment the page counter */\r
-                               CurrDFPageByteDiv16 = 0;\r
-                               CurrDFPage++;\r
-\r
-                               /* Select the next dataflash chip based on the new dataflash page index */\r
-                               Dataflash_SelectChipFromPage(CurrDFPage);\r
-                               \r
-                               /* Send the dataflash main memory page read command */\r
-                               Dataflash_SendByte(DF_CMD_MAINMEMPAGEREAD);\r
-                               Dataflash_SendAddressBytes(CurrDFPage, 0);\r
-                               Dataflash_SendByte(0x00);\r
-                               Dataflash_SendByte(0x00);\r
-                               Dataflash_SendByte(0x00);\r
-                               Dataflash_SendByte(0x00);\r
-                       }       \r
-\r
-                       /* Read one 16-byte chunk of data from the dataflash */\r
-                       Endpoint_Write_Byte(Dataflash_ReceiveByte());\r
-                       Endpoint_Write_Byte(Dataflash_ReceiveByte());\r
-                       Endpoint_Write_Byte(Dataflash_ReceiveByte());\r
-                       Endpoint_Write_Byte(Dataflash_ReceiveByte());\r
-                       Endpoint_Write_Byte(Dataflash_ReceiveByte());\r
-                       Endpoint_Write_Byte(Dataflash_ReceiveByte());\r
-                       Endpoint_Write_Byte(Dataflash_ReceiveByte());\r
-                       Endpoint_Write_Byte(Dataflash_ReceiveByte());\r
-                       Endpoint_Write_Byte(Dataflash_ReceiveByte());\r
-                       Endpoint_Write_Byte(Dataflash_ReceiveByte());\r
-                       Endpoint_Write_Byte(Dataflash_ReceiveByte());\r
-                       Endpoint_Write_Byte(Dataflash_ReceiveByte());\r
-                       Endpoint_Write_Byte(Dataflash_ReceiveByte());\r
-                       Endpoint_Write_Byte(Dataflash_ReceiveByte());\r
-                       Endpoint_Write_Byte(Dataflash_ReceiveByte());\r
-                       Endpoint_Write_Byte(Dataflash_ReceiveByte());\r
-                       \r
-                       /* Increment the dataflash page 16 byte block counter */\r
-                       CurrDFPageByteDiv16++;\r
-                       \r
-                       /* Increment the block 16 byte block counter */\r
-                       BytesInBlockDiv16++;\r
-\r
-                       /* Check if the current command is being aborted by the host */\r
-                       if (MSInterfaceInfo->IsMassStoreReset)\r
-                         return;\r
-               }\r
-               \r
-               /* Decrement the blocks remaining counter */\r
-               TotalBlocks--;\r
-       }\r
-       \r
-       /* If the endpoint is full, send its contents to the host */\r
-       if (!(Endpoint_IsReadWriteAllowed()))\r
-         Endpoint_ClearIN();\r
-\r
-       /* Deselect all dataflash chips */\r
-       Dataflash_DeselectChip();\r
-}\r
-\r
-/** Writes blocks (OS blocks, not Dataflash pages) to the storage medium, the board dataflash IC(s), from\r
- *  the a given RAM buffer. This routine reads in OS sized blocks from the buffer and writes them to the\r
- *  dataflash in Dataflash page sized blocks. This can be linked to FAT libraries to write files to the\r
- *  dataflash.\r
- *\r
- *  \param BlockAddress  Data block starting address for the write sequence\r
- *  \param TotalBlocks   Number of blocks of data to write\r
- *  \param BufferPtr     Pointer to the data source RAM buffer\r
- */\r
-void DataflashManager_WriteBlocks_RAM(const uint32_t BlockAddress, uint16_t TotalBlocks, uint8_t* BufferPtr)\r
-{\r
-       uint16_t CurrDFPage          = ((BlockAddress * VIRTUAL_MEMORY_BLOCK_SIZE) / DATAFLASH_PAGE_SIZE);\r
-       uint16_t CurrDFPageByte      = ((BlockAddress * VIRTUAL_MEMORY_BLOCK_SIZE) % DATAFLASH_PAGE_SIZE);\r
-       uint8_t  CurrDFPageByteDiv16 = (CurrDFPageByte >> 4);\r
-\r
-       /* Copy selected dataflash's current page contents to the dataflash buffer */\r
-       Dataflash_SelectChipFromPage(CurrDFPage);\r
-       Dataflash_SendByte(DF_CMD_MAINMEMTOBUFF1);\r
-       Dataflash_SendAddressBytes(CurrDFPage, 0);\r
-       Dataflash_WaitWhileBusy();\r
-\r
-       /* Send the dataflash buffer write command */\r
-       Dataflash_ToggleSelectedChipCS();\r
-       Dataflash_SendByte(DF_CMD_BUFF1WRITE);\r
-       Dataflash_SendAddressBytes(0, CurrDFPageByte);\r
-\r
-       while (TotalBlocks)\r
-       {\r
-               uint8_t BytesInBlockDiv16 = 0;\r
-               \r
-               /* Write an endpoint packet sized data block to the dataflash */\r
-               while (BytesInBlockDiv16 < (VIRTUAL_MEMORY_BLOCK_SIZE >> 4))\r
-               {\r
-                       /* Check if end of dataflash page reached */\r
-                       if (CurrDFPageByteDiv16 == (DATAFLASH_PAGE_SIZE >> 4))\r
-                       {\r
-                               /* Write the dataflash buffer contents back to the dataflash page */\r
-                               Dataflash_ToggleSelectedChipCS();\r
-                               Dataflash_SendByte(DF_CMD_BUFF1TOMAINMEMWITHERASE);\r
-                               Dataflash_SendAddressBytes(CurrDFPage, 0);\r
-\r
-                               /* Reset the dataflash buffer counter, increment the page counter */\r
-                               CurrDFPageByteDiv16 = 0;\r
-                               CurrDFPage++;\r
-\r
-                               /* Select the next dataflash chip based on the new dataflash page index */\r
-                               Dataflash_SelectChipFromPage(CurrDFPage);\r
-                               Dataflash_WaitWhileBusy();\r
-\r
-#if (DATAFLASH_PAGE_SIZE > VIRTUAL_MEMORY_BLOCK_SIZE)\r
-                               /* If less than one dataflash page remaining, copy over the existing page to preserve trailing data */\r
-                               if ((TotalBlocks * (VIRTUAL_MEMORY_BLOCK_SIZE >> 4)) < (DATAFLASH_PAGE_SIZE >> 4))\r
-                               {\r
-                                       /* Copy selected dataflash's current page contents to the dataflash buffer */\r
-                                       Dataflash_ToggleSelectedChipCS();\r
-                                       Dataflash_SendByte(DF_CMD_MAINMEMTOBUFF1);\r
-                                       Dataflash_SendAddressBytes(CurrDFPage, 0);\r
-                                       Dataflash_WaitWhileBusy();\r
-                               }\r
-#endif\r
-\r
-                               /* Send the dataflash buffer write command */\r
-                               Dataflash_ToggleSelectedChipCS();\r
-                               Dataflash_SendByte(DF_CMD_BUFF1WRITE);\r
-                               Dataflash_SendAddressBytes(0, 0);\r
-                       }\r
-                       \r
-                       /* Write one 16-byte chunk of data to the dataflash */\r
-                       for (uint8_t ByteNum = 0; ByteNum < 16; ByteNum++)\r
-                         Dataflash_SendByte(*(BufferPtr++));\r
-                       \r
-                       /* Increment the dataflash page 16 byte block counter */\r
-                       CurrDFPageByteDiv16++;\r
-\r
-                       /* Increment the block 16 byte block counter */\r
-                       BytesInBlockDiv16++;            \r
-               }\r
-                       \r
-               /* Decrement the blocks remaining counter and reset the sub block counter */\r
-               TotalBlocks--;\r
-       }\r
-\r
-       /* Write the dataflash buffer contents back to the dataflash page */\r
-       Dataflash_ToggleSelectedChipCS();\r
-       Dataflash_SendByte(DF_CMD_BUFF1TOMAINMEMWITHERASE);\r
-       Dataflash_SendAddressBytes(CurrDFPage, 0x00);\r
-       Dataflash_WaitWhileBusy();\r
-\r
-       /* Deselect all dataflash chips */\r
-       Dataflash_DeselectChip();\r
-}\r
-\r
-/** Reads blocks (OS blocks, not Dataflash pages) from the storage medium, the board dataflash IC(s), into\r
- *  the a preallocated RAM buffer. This routine reads in Dataflash page sized blocks from the Dataflash\r
- *  and writes them in OS sized blocks to the given buffer. This can be linked to FAT libraries to read\r
- *  the files stored on the dataflash.\r
- *\r
- *  \param BlockAddress  Data block starting address for the read sequence\r
- *  \param TotalBlocks   Number of blocks of data to read\r
- *  \param BufferPtr     Pointer to the data destination RAM buffer\r
- */\r
-void DataflashManager_ReadBlocks_RAM(const uint32_t BlockAddress, uint16_t TotalBlocks, uint8_t* BufferPtr)\r
-{\r
-       uint16_t CurrDFPage          = ((BlockAddress * VIRTUAL_MEMORY_BLOCK_SIZE) / DATAFLASH_PAGE_SIZE);\r
-       uint16_t CurrDFPageByte      = ((BlockAddress * VIRTUAL_MEMORY_BLOCK_SIZE) % DATAFLASH_PAGE_SIZE);\r
-       uint8_t  CurrDFPageByteDiv16 = (CurrDFPageByte >> 4);\r
-\r
-       /* Send the dataflash main memory page read command */\r
-       Dataflash_SelectChipFromPage(CurrDFPage);\r
-       Dataflash_SendByte(DF_CMD_MAINMEMPAGEREAD);\r
-       Dataflash_SendAddressBytes(CurrDFPage, CurrDFPageByte);\r
-       Dataflash_SendByte(0x00);\r
-       Dataflash_SendByte(0x00);\r
-       Dataflash_SendByte(0x00);\r
-       Dataflash_SendByte(0x00);\r
-\r
-       while (TotalBlocks)\r
-       {\r
-               uint8_t BytesInBlockDiv16 = 0;\r
-               \r
-               /* Write an endpoint packet sized data block to the dataflash */\r
-               while (BytesInBlockDiv16 < (VIRTUAL_MEMORY_BLOCK_SIZE >> 4))\r
-               {\r
-                       /* Check if end of dataflash page reached */\r
-                       if (CurrDFPageByteDiv16 == (DATAFLASH_PAGE_SIZE >> 4))\r
-                       {\r
-                               /* Reset the dataflash buffer counter, increment the page counter */\r
-                               CurrDFPageByteDiv16 = 0;\r
-                               CurrDFPage++;\r
-\r
-                               /* Select the next dataflash chip based on the new dataflash page index */\r
-                               Dataflash_SelectChipFromPage(CurrDFPage);\r
-                               \r
-                               /* Send the dataflash main memory page read command */\r
-                               Dataflash_SendByte(DF_CMD_MAINMEMPAGEREAD);\r
-                               Dataflash_SendAddressBytes(CurrDFPage, 0);\r
-                               Dataflash_SendByte(0x00);\r
-                               Dataflash_SendByte(0x00);\r
-                               Dataflash_SendByte(0x00);\r
-                               Dataflash_SendByte(0x00);\r
-                       }       \r
-\r
-                       /* Read one 16-byte chunk of data from the dataflash */\r
-                       for (uint8_t ByteNum = 0; ByteNum < 16; ByteNum++)\r
-                         *(BufferPtr++) = Dataflash_ReceiveByte();\r
-                       \r
-                       /* Increment the dataflash page 16 byte block counter */\r
-                       CurrDFPageByteDiv16++;\r
-                       \r
-                       /* Increment the block 16 byte block counter */\r
-                       BytesInBlockDiv16++;\r
-               }\r
-               \r
-               /* Decrement the blocks remaining counter */\r
-               TotalBlocks--;\r
-       }\r
-\r
-       /* Deselect all dataflash chips */\r
-       Dataflash_DeselectChip();\r
-}\r
-\r
-/** Disables the dataflash memory write protection bits on the board Dataflash ICs, if enabled. */\r
-void DataflashManager_ResetDataflashProtections(void)\r
-{\r
-       /* Select first dataflash chip, send the read status register command */\r
-       Dataflash_SelectChip(DATAFLASH_CHIP1);\r
-       Dataflash_SendByte(DF_CMD_GETSTATUS);\r
-       \r
-       /* Check if sector protection is enabled */\r
-       if (Dataflash_ReceiveByte() & DF_STATUS_SECTORPROTECTION_ON)\r
-       {\r
-               Dataflash_ToggleSelectedChipCS();\r
-\r
-               /* Send the commands to disable sector protection */\r
-               Dataflash_SendByte(DF_CMD_SECTORPROTECTIONOFF[0]);\r
-               Dataflash_SendByte(DF_CMD_SECTORPROTECTIONOFF[1]);\r
-               Dataflash_SendByte(DF_CMD_SECTORPROTECTIONOFF[2]);\r
-               Dataflash_SendByte(DF_CMD_SECTORPROTECTIONOFF[3]);\r
-       }\r
-       \r
-       /* Select second dataflash chip (if present on selected board), send read status register command */\r
-       #if (DATAFLASH_TOTALCHIPS == 2)\r
-       Dataflash_SelectChip(DATAFLASH_CHIP2);\r
-       Dataflash_SendByte(DF_CMD_GETSTATUS);\r
-       \r
-       /* Check if sector protection is enabled */\r
-       if (Dataflash_ReceiveByte() & DF_STATUS_SECTORPROTECTION_ON)\r
-       {\r
-               Dataflash_ToggleSelectedChipCS();\r
-\r
-               /* Send the commands to disable sector protection */\r
-               Dataflash_SendByte(DF_CMD_SECTORPROTECTIONOFF[0]);\r
-               Dataflash_SendByte(DF_CMD_SECTORPROTECTIONOFF[1]);\r
-               Dataflash_SendByte(DF_CMD_SECTORPROTECTIONOFF[2]);\r
-               Dataflash_SendByte(DF_CMD_SECTORPROTECTIONOFF[3]);\r
-       }\r
-       #endif\r
-       \r
-       /* Deselect current dataflash chip */\r
-       Dataflash_DeselectChip();\r
-}\r
diff --git a/Demos/Device/MassStorage/Lib/DataflashManager.h b/Demos/Device/MassStorage/Lib/DataflashManager.h
deleted file mode 100644 (file)
index b828051..0000000
+++ /dev/null
@@ -1,75 +0,0 @@
-/*\r
-             LUFA Library\r
-     Copyright (C) Dean Camera, 2009.\r
-              \r
-  dean [at] fourwalledcubicle [dot] com\r
-      www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
-  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
-  Permission to use, copy, modify, and distribute this software\r
-  and its documentation for any purpose and without fee is hereby\r
-  granted, provided that the above copyright notice appear in all\r
-  copies and that both that the copyright notice and this\r
-  permission notice and warranty disclaimer appear in supporting\r
-  documentation, and that the name of the author not be used in\r
-  advertising or publicity pertaining to distribution of the\r
-  software without specific, written prior permission.\r
-\r
-  The author disclaim all warranties with regard to this\r
-  software, including all implied warranties of merchantability\r
-  and fitness.  In no event shall the author be liable for any\r
-  special, indirect or consequential damages or any damages\r
-  whatsoever resulting from loss of use, data or profits, whether\r
-  in an action of contract, negligence or other tortious action,\r
-  arising out of or in connection with the use or performance of\r
-  this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- *  Header file for DataflashManager.c.\r
- */\r
\r
-#ifndef _DATAFLASH_MANAGER_H\r
-#define _DATAFLASH_MANAGER_H\r
-\r
-       /* Includes: */\r
-               #include <avr/io.h>\r
-               \r
-               #include "MassStorage.h"\r
-               #include "Descriptors.h"\r
-\r
-               #include <LUFA/Common/Common.h>              // Function Attribute, Atomic, Debug and ISR Macros\r
-               #include <LUFA/Drivers/USB/USB.h>            // USB Functionality\r
-               #include <LUFA/Drivers/Board/Dataflash.h>    // Dataflash chip driver\r
-\r
-       /* Preprocessor Checks: */\r
-               #if (DATAFLASH_PAGE_SIZE % 16)\r
-                       #error Dataflash page size must be a multiple of 16 bytes.\r
-               #endif\r
-\r
-       /* Defines: */\r
-               /** Total number of bytes of the storage medium, comprised of one or more dataflash ICs. */\r
-               #define VIRTUAL_MEMORY_BYTES                ((uint32_t)DATAFLASH_PAGES * DATAFLASH_PAGE_SIZE * DATAFLASH_TOTALCHIPS)\r
-\r
-               /** Block size of the device. This is kept at 512 to remain compatible with the OS despite the underlying\r
-                *  storage media (Dataflash) using a different native block size.\r
-                */\r
-               #define VIRTUAL_MEMORY_BLOCK_SIZE           512\r
-               \r
-               /** Total number of blocks of the virtual memory for reporting to the host as the device's total capacity. */\r
-               #define VIRTUAL_MEMORY_BLOCKS               (VIRTUAL_MEMORY_BYTES / VIRTUAL_MEMORY_BLOCK_SIZE)\r
-               \r
-       /* Function Prototypes: */\r
-               void DataflashManager_WriteBlocks(USB_ClassInfo_MS_t* MSInterfaceInfo, const uint32_t BlockAddress, uint16_t TotalBlocks);\r
-               void DataflashManager_ReadBlocks(USB_ClassInfo_MS_t* MSInterfaceInfo, const uint32_t BlockAddress, uint16_t TotalBlocks);\r
-               void DataflashManager_WriteBlocks_RAM(const uint32_t BlockAddress, uint16_t TotalBlocks,\r
-                                                     uint8_t* BufferPtr) ATTR_NON_NULL_PTR_ARG(3);\r
-               void DataflashManager_ReadBlocks_RAM(const uint32_t BlockAddress, uint16_t TotalBlocks,\r
-                                                    uint8_t* BufferPtr) ATTR_NON_NULL_PTR_ARG(3);\r
-               void DataflashManager_ResetDataflashProtections(void);\r
-               \r
-#endif\r
diff --git a/Demos/Device/MassStorage/Lib/SCSI.c b/Demos/Device/MassStorage/Lib/SCSI.c
deleted file mode 100644 (file)
index d56e343..0000000
+++ /dev/null
@@ -1,345 +0,0 @@
-/*\r
-             LUFA Library\r
-     Copyright (C) Dean Camera, 2009.\r
-              \r
-  dean [at] fourwalledcubicle [dot] com\r
-      www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
-  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
-  Permission to use, copy, modify, and distribute this software\r
-  and its documentation for any purpose and without fee is hereby\r
-  granted, provided that the above copyright notice appear in all\r
-  copies and that both that the copyright notice and this\r
-  permission notice and warranty disclaimer appear in supporting\r
-  documentation, and that the name of the author not be used in\r
-  advertising or publicity pertaining to distribution of the\r
-  software without specific, written prior permission.\r
-\r
-  The author disclaim all warranties with regard to this\r
-  software, including all implied warranties of merchantability\r
-  and fitness.  In no event shall the author be liable for any\r
-  special, indirect or consequential damages or any damages\r
-  whatsoever resulting from loss of use, data or profits, whether\r
-  in an action of contract, negligence or other tortious action,\r
-  arising out of or in connection with the use or performance of\r
-  this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- *  SCSI command processing routines, for SCSI commands issued by the host. Mass Storage\r
- *  devices use a thin "Bulk-Only Transport" protocol for issuing commands and status information,\r
- *  which wrap around standard SCSI device commands for controlling the actual storage medium.\r
- */\r
\r
-#define  INCLUDE_FROM_SCSI_C\r
-#include "SCSI.h"\r
-\r
-/** Structure to hold the SCSI response data to a SCSI INQUIRY command. This gives information about the device's\r
- *  features and capabilities.\r
- */\r
-SCSI_Inquiry_Response_t InquiryData = \r
-       {\r
-               .DeviceType          = DEVICE_TYPE_BLOCK,\r
-               .PeripheralQualifier = 0,\r
-                       \r
-               .Removable           = true,\r
-                       \r
-               .Version             = 0,\r
-                       \r
-               .ResponseDataFormat  = 2,\r
-               .NormACA             = false,\r
-               .TrmTsk              = false,\r
-               .AERC                = false,\r
-\r
-               .AdditionalLength    = 0x1F,\r
-                       \r
-               .SoftReset           = false,\r
-               .CmdQue              = false,\r
-               .Linked              = false,\r
-               .Sync                = false,\r
-               .WideBus16Bit        = false,\r
-               .WideBus32Bit        = false,\r
-               .RelAddr             = false,\r
-               \r
-               .VendorID            = "LUFA",\r
-               .ProductID           = "Dataflash Disk",\r
-               .RevisionID          = {'0','.','0','0'},\r
-       };\r
-\r
-/** Structure to hold the sense data for the last issued SCSI command, which is returned to the host after a SCSI REQUEST SENSE\r
- *  command is issued. This gives information on exactly why the last command failed to complete.\r
- */\r
-SCSI_Request_Sense_Response_t SenseData =\r
-       {\r
-               .ResponseCode        = 0x70,\r
-               .AdditionalLength    = 0x0A,\r
-       };\r
-\r
-\r
-/** Main routine to process the SCSI command located in the Command Block Wrapper read from the host. This dispatches\r
- *  to the appropriate SCSI command handling routine if the issued command is supported by the device, else it returns\r
- *  a command failure due to a ILLEGAL REQUEST.\r
- *\r
- *  \param MSInterfaceInfo  Pointer to the Mass Storage class interface structure that the command is associated with\r
- */\r
-bool SCSI_DecodeSCSICommand(USB_ClassInfo_MS_t* MSInterfaceInfo)\r
-{\r
-       bool CommandSuccess = false;\r
-\r
-       /* Run the appropriate SCSI command hander function based on the passed command */\r
-       switch (MSInterfaceInfo->CommandBlock.SCSICommandData[0])\r
-       {\r
-               case SCSI_CMD_INQUIRY:\r
-                       CommandSuccess = SCSI_Command_Inquiry(MSInterfaceInfo);                 \r
-                       break;\r
-               case SCSI_CMD_REQUEST_SENSE:\r
-                       CommandSuccess = SCSI_Command_Request_Sense(MSInterfaceInfo);\r
-                       break;\r
-               case SCSI_CMD_READ_CAPACITY_10:\r
-                       CommandSuccess = SCSI_Command_Read_Capacity_10(MSInterfaceInfo);                        \r
-                       break;\r
-               case SCSI_CMD_SEND_DIAGNOSTIC:\r
-                       CommandSuccess = SCSI_Command_Send_Diagnostic(MSInterfaceInfo);\r
-                       break;\r
-               case SCSI_CMD_WRITE_10:\r
-                       CommandSuccess = SCSI_Command_ReadWrite_10(MSInterfaceInfo, DATA_WRITE);\r
-                       break;\r
-               case SCSI_CMD_READ_10:\r
-                       CommandSuccess = SCSI_Command_ReadWrite_10(MSInterfaceInfo, DATA_READ);\r
-                       break;\r
-               case SCSI_CMD_TEST_UNIT_READY:\r
-               case SCSI_CMD_PREVENT_ALLOW_MEDIUM_REMOVAL:\r
-               case SCSI_CMD_VERIFY_10:\r
-                       /* These commands should just succeed, no handling required */\r
-                       CommandSuccess = true;\r
-                       MSInterfaceInfo->CommandBlock.DataTransferLength = 0;\r
-                       break;\r
-               default:\r
-                       /* Update the SENSE key to reflect the invalid command */\r
-                       SCSI_SET_SENSE(SCSI_SENSE_KEY_ILLEGAL_REQUEST,\r
-                                  SCSI_ASENSE_INVALID_COMMAND,\r
-                                  SCSI_ASENSEQ_NO_QUALIFIER);\r
-                       break;\r
-       }\r
-\r
-       /* Check if command was successfully processed */\r
-       if (CommandSuccess)\r
-       {\r
-               SCSI_SET_SENSE(SCSI_SENSE_KEY_GOOD,\r
-                              SCSI_ASENSE_NO_ADDITIONAL_INFORMATION,\r
-                              SCSI_ASENSEQ_NO_QUALIFIER);\r
-               \r
-               return true;\r
-       }\r
-\r
-       return false;\r
-}\r
-\r
-/** Command processing for an issued SCSI INQUIRY command. This command returns information about the device's features\r
- *  and capabilities to the host.\r
- *\r
- *  \param MSInterfaceInfo  Pointer to the Mass Storage class interface structure that the command is associated with\r
- *\r
- *  \return Boolean true if the command completed successfully, false otherwise.\r
- */\r
-static bool SCSI_Command_Inquiry(USB_ClassInfo_MS_t* MSInterfaceInfo)\r
-{\r
-       uint16_t AllocationLength  = (((uint16_t)MSInterfaceInfo->CommandBlock.SCSICommandData[3] << 8) |\r
-                                                MSInterfaceInfo->CommandBlock.SCSICommandData[4]);\r
-       uint16_t BytesTransferred  = (AllocationLength < sizeof(InquiryData))? AllocationLength :\r
-                                                                              sizeof(InquiryData);\r
-\r
-       /* Only the standard INQUIRY data is supported, check if any optional INQUIRY bits set */\r
-       if ((MSInterfaceInfo->CommandBlock.SCSICommandData[1] & ((1 << 0) | (1 << 1))) ||\r
-            MSInterfaceInfo->CommandBlock.SCSICommandData[2])\r
-       {\r
-               /* Optional but unsupported bits set - update the SENSE key and fail the request */\r
-               SCSI_SET_SENSE(SCSI_SENSE_KEY_ILLEGAL_REQUEST,\r
-                              SCSI_ASENSE_INVALID_FIELD_IN_CDB,\r
-                              SCSI_ASENSEQ_NO_QUALIFIER);\r
-\r
-               return false;\r
-       }\r
-       \r
-       Endpoint_Write_Stream_LE(&InquiryData, BytesTransferred, NO_STREAM_CALLBACK);\r
-\r
-       uint8_t PadBytes[AllocationLength - BytesTransferred];\r
-       \r
-       /* Pad out remaining bytes with 0x00 */\r
-       Endpoint_Write_Stream_LE(&PadBytes, (AllocationLength - BytesTransferred), NO_STREAM_CALLBACK);\r
-\r
-       /* Finalize the stream transfer to send the last packet */\r
-       Endpoint_ClearIN();\r
-\r
-       /* Succeed the command and update the bytes transferred counter */\r
-       MSInterfaceInfo->CommandBlock.DataTransferLength -= BytesTransferred;\r
-       \r
-       return true;\r
-}\r
-\r
-/** Command processing for an issued SCSI REQUEST SENSE command. This command returns information about the last issued command,\r
- *  including the error code and additional error information so that the host can determine why a command failed to complete.\r
- *\r
- *  \param MSInterfaceInfo  Pointer to the Mass Storage class interface structure that the command is associated with\r
- *\r
- *  \return Boolean true if the command completed successfully, false otherwise.\r
- */\r
-static bool SCSI_Command_Request_Sense(USB_ClassInfo_MS_t* MSInterfaceInfo)\r
-{\r
-       uint8_t  AllocationLength = MSInterfaceInfo->CommandBlock.SCSICommandData[4];\r
-       uint8_t  BytesTransferred = (AllocationLength < sizeof(SenseData))? AllocationLength : sizeof(SenseData);\r
-       \r
-       uint8_t PadBytes[AllocationLength - BytesTransferred];\r
-\r
-       Endpoint_Write_Stream_LE(&SenseData, BytesTransferred, NO_STREAM_CALLBACK);\r
-       Endpoint_Write_Stream_LE(&PadBytes, (AllocationLength - BytesTransferred), NO_STREAM_CALLBACK);\r
-       Endpoint_ClearIN();\r
-\r
-       /* Succeed the command and update the bytes transferred counter */\r
-       MSInterfaceInfo->CommandBlock.DataTransferLength -= BytesTransferred;\r
-\r
-       return true;\r
-}\r
-\r
-/** Command processing for an issued SCSI READ CAPACITY (10) command. This command returns information about the device's capacity\r
- *  on the selected Logical Unit (drive), as a number of OS-sized blocks.\r
- *\r
- *  \param MSInterfaceInfo  Pointer to the Mass Storage class interface structure that the command is associated with\r
- *\r
- *  \return Boolean true if the command completed successfully, false otherwise.\r
- */\r
-static bool SCSI_Command_Read_Capacity_10(USB_ClassInfo_MS_t* MSInterfaceInfo)\r
-{\r
-       uint32_t TotalLUNs      = (LUN_MEDIA_BLOCKS - 1);\r
-       uint32_t MediaBlockSize = VIRTUAL_MEMORY_BLOCK_SIZE;\r
-\r
-       Endpoint_Write_Stream_BE(&TotalLUNs, sizeof(TotalLUNs), NO_STREAM_CALLBACK);\r
-       Endpoint_Write_Stream_BE(&MediaBlockSize, sizeof(MediaBlockSize), NO_STREAM_CALLBACK);\r
-       Endpoint_ClearIN();\r
-       \r
-       /* Succeed the command and update the bytes transferred counter */\r
-       MSInterfaceInfo->CommandBlock.DataTransferLength -= 8;\r
-       \r
-       return true;\r
-}\r
-\r
-/** Command processing for an issued SCSI SEND DIAGNOSTIC command. This command performs a quick check of the Dataflash ICs on the\r
- *  board, and indicates if they are present and functioning correctly. Only the Self-Test portion of the diagnostic command is\r
- *  supported.\r
- *\r
- *  \param MSInterfaceInfo  Pointer to the Mass Storage class interface structure that the command is associated with\r
- *\r
- *  \return Boolean true if the command completed successfully, false otherwise.\r
- */\r
-static bool SCSI_Command_Send_Diagnostic(USB_ClassInfo_MS_t* MSInterfaceInfo)\r
-{\r
-       uint8_t ReturnByte;\r
-\r
-       /* Check to see if the SELF TEST bit is not set */\r
-       if (!(MSInterfaceInfo->CommandBlock.SCSICommandData[1] & (1 << 2)))\r
-       {\r
-               /* Only self-test supported - update SENSE key and fail the command */\r
-               SCSI_SET_SENSE(SCSI_SENSE_KEY_ILLEGAL_REQUEST,\r
-                              SCSI_ASENSE_INVALID_FIELD_IN_CDB,\r
-                              SCSI_ASENSEQ_NO_QUALIFIER);\r
-\r
-               return false;\r
-       }\r
-       \r
-       /* Test first Dataflash IC is present and responding to commands */\r
-       Dataflash_SelectChip(DATAFLASH_CHIP1);\r
-       Dataflash_SendByte(DF_CMD_READMANUFACTURERDEVICEINFO);\r
-       ReturnByte = Dataflash_ReceiveByte();\r
-       Dataflash_DeselectChip();\r
-\r
-       /* If returned data is invalid, fail the command */\r
-       if (ReturnByte != DF_MANUFACTURER_ATMEL)\r
-       {\r
-               /* Update SENSE key with a hardware error condition and return command fail */\r
-               SCSI_SET_SENSE(SCSI_SENSE_KEY_HARDWARE_ERROR,\r
-                              SCSI_ASENSE_NO_ADDITIONAL_INFORMATION,\r
-                              SCSI_ASENSEQ_NO_QUALIFIER);      \r
-       \r
-               return false;\r
-       }\r
-\r
-       #if (DATAFLASH_TOTALCHIPS == 2)\r
-       /* Test second Dataflash IC is present and responding to commands */\r
-       Dataflash_SelectChip(DATAFLASH_CHIP2);\r
-       Dataflash_SendByte(DF_CMD_READMANUFACTURERDEVICEINFO);\r
-       ReturnByte = Dataflash_ReceiveByte();\r
-       Dataflash_DeselectChip();\r
-\r
-       /* If returned data is invalid, fail the command */\r
-       if (ReturnByte != DF_MANUFACTURER_ATMEL)\r
-       {\r
-               /* Update SENSE key with a hardware error condition and return command fail */\r
-               SCSI_SET_SENSE(SCSI_SENSE_KEY_HARDWARE_ERROR,\r
-                              SCSI_ASENSE_NO_ADDITIONAL_INFORMATION,\r
-                              SCSI_ASENSEQ_NO_QUALIFIER);      \r
-       \r
-               return false;\r
-       }\r
-       #endif\r
-       \r
-       /* Succeed the command and update the bytes transferred counter */\r
-       MSInterfaceInfo->CommandBlock.DataTransferLength = 0;\r
-       \r
-       return true;\r
-}\r
-\r
-/** Command processing for an issued SCSI READ (10) or WRITE (10) command. This command reads in the block start address\r
- *  and total number of blocks to process, then calls the appropriate low-level dataflash routine to handle the actual\r
- *  reading and writing of the data.\r
- *\r
- *  \param MSInterfaceInfo  Pointer to the Mass Storage class interface structure that the command is associated with\r
- *  \param IsDataRead  Indicates if the command is a READ (10) command or WRITE (10) command (DATA_READ or DATA_WRITE)\r
- *\r
- *  \return Boolean true if the command completed successfully, false otherwise.\r
- */\r
-static bool SCSI_Command_ReadWrite_10(USB_ClassInfo_MS_t* MSInterfaceInfo, const bool IsDataRead)\r
-{\r
-       uint32_t BlockAddress;\r
-       uint16_t TotalBlocks;\r
-       \r
-       /* Load in the 32-bit block address (SCSI uses big-endian, so have to do it byte-by-byte) */\r
-       ((uint8_t*)&BlockAddress)[3] = MSInterfaceInfo->CommandBlock.SCSICommandData[2];\r
-       ((uint8_t*)&BlockAddress)[2] = MSInterfaceInfo->CommandBlock.SCSICommandData[3];\r
-       ((uint8_t*)&BlockAddress)[1] = MSInterfaceInfo->CommandBlock.SCSICommandData[4];\r
-       ((uint8_t*)&BlockAddress)[0] = MSInterfaceInfo->CommandBlock.SCSICommandData[5];\r
-\r
-       /* Load in the 16-bit total blocks (SCSI uses big-endian, so have to do it byte-by-byte) */\r
-       ((uint8_t*)&TotalBlocks)[1]  = MSInterfaceInfo->CommandBlock.SCSICommandData[7];\r
-       ((uint8_t*)&TotalBlocks)[0]  = MSInterfaceInfo->CommandBlock.SCSICommandData[8];\r
-       \r
-       /* Check if the block address is outside the maximum allowable value for the LUN */\r
-       if (BlockAddress >= LUN_MEDIA_BLOCKS)\r
-       {\r
-               /* Block address is invalid, update SENSE key and return command fail */\r
-               SCSI_SET_SENSE(SCSI_SENSE_KEY_ILLEGAL_REQUEST,\r
-                              SCSI_ASENSE_LOGICAL_BLOCK_ADDRESS_OUT_OF_RANGE,\r
-                              SCSI_ASENSEQ_NO_QUALIFIER);\r
-\r
-               return false;\r
-       }\r
-\r
-       #if (TOTAL_LUNS > 1)\r
-       /* Adjust the given block address to the real media address based on the selected LUN */\r
-       BlockAddress += ((uint32_t)MSInterfaceInfo->CommandBlock.LUN * LUN_MEDIA_BLOCKS);\r
-       #endif\r
-       \r
-       /* Determine if the packet is a READ (10) or WRITE (10) command, call appropriate function */\r
-       if (IsDataRead == DATA_READ)\r
-         DataflashManager_ReadBlocks(MSInterfaceInfo, BlockAddress, TotalBlocks);\r
-       else\r
-         DataflashManager_WriteBlocks(MSInterfaceInfo, BlockAddress, TotalBlocks);\r
-\r
-       /* Update the bytes transferred counter and succeed the command */\r
-       MSInterfaceInfo->CommandBlock.DataTransferLength -= ((uint32_t)TotalBlocks * VIRTUAL_MEMORY_BLOCK_SIZE);\r
-       \r
-       return true;\r
-}\r
diff --git a/Demos/Device/MassStorage/Lib/SCSI.h b/Demos/Device/MassStorage/Lib/SCSI.h
deleted file mode 100644 (file)
index 3fd751d..0000000
+++ /dev/null
@@ -1,148 +0,0 @@
-/*\r
-             LUFA Library\r
-     Copyright (C) Dean Camera, 2009.\r
-              \r
-  dean [at] fourwalledcubicle [dot] com\r
-      www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
-  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
-  Permission to use, copy, modify, and distribute this software\r
-  and its documentation for any purpose and without fee is hereby\r
-  granted, provided that the above copyright notice appear in all\r
-  copies and that both that the copyright notice and this\r
-  permission notice and warranty disclaimer appear in supporting\r
-  documentation, and that the name of the author not be used in\r
-  advertising or publicity pertaining to distribution of the\r
-  software without specific, written prior permission.\r
-\r
-  The author disclaim all warranties with regard to this\r
-  software, including all implied warranties of merchantability\r
-  and fitness.  In no event shall the author be liable for any\r
-  special, indirect or consequential damages or any damages\r
-  whatsoever resulting from loss of use, data or profits, whether\r
-  in an action of contract, negligence or other tortious action,\r
-  arising out of or in connection with the use or performance of\r
-  this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- *  Header file for SCSI.c.\r
- */\r
\r
-#ifndef _SCSI_H_\r
-#define _SCSI_H_\r
-\r
-       /* Includes: */\r
-               #include <avr/io.h>\r
-               #include <avr/pgmspace.h>\r
-\r
-               #include <LUFA/Drivers/USB/USB.h>\r
-               #include <LUFA/Drivers/USB/Class/Device/MassStorage.h>\r
-\r
-               #include "MassStorage.h"\r
-               #include "Descriptors.h"\r
-               #include "DataflashManager.h"\r
-               #include "SCSI_Codes.h"\r
-       \r
-       /* Macros: */\r
-               /** Macro to set the current SCSI sense data to the given key, additional sense code and additional sense qualifier. This\r
-                *  is for convenience, as it allows for all three sense values (returned upon request to the host to give information about\r
-                *  the last command failure) in a quick and easy manner.\r
-                *\r
-                *  \param key    New SCSI sense key to set the sense code to\r
-                *  \param acode  New SCSI additional sense key to set the additional sense code to\r
-                *  \param aqual  New SCSI additional sense key qualifier to set the additional sense qualifier code to\r
-                */\r
-               #define SCSI_SET_SENSE(key, acode, aqual)  MACROS{ SenseData.SenseKey = key;              \\r
-                                                                  SenseData.AdditionalSenseCode = acode; \\r
-                                                                  SenseData.AdditionalSenseQualifier = aqual; }MACROE\r
-\r
-               /** Macro for the SCSI_Command_ReadWrite_10() function, to indicate that data is to be read from the storage medium. */\r
-               #define DATA_READ           true\r
-\r
-               /** Macro for the SCSI_Command_ReadWrite_10() function, to indicate that data is to be written to the storage medium. */\r
-               #define DATA_WRITE          false\r
-\r
-               /** Value for the DeviceType entry in the SCSI_Inquiry_Response_t enum, indicating a Block Media device. */\r
-               #define DEVICE_TYPE_BLOCK   0x00\r
-               \r
-               /** Value for the DeviceType entry in the SCSI_Inquiry_Response_t enum, indicating a CD-ROM device. */\r
-               #define DEVICE_TYPE_CDROM   0x05\r
-\r
-       /* Type Defines: */\r
-               /** Type define for a SCSI response structure to a SCSI INQUIRY command. For details of the\r
-                *  structure contents, refer to the SCSI specifications.\r
-                */\r
-               typedef struct\r
-               {\r
-                       unsigned char DeviceType          : 5;\r
-                       unsigned char PeripheralQualifier : 3;\r
-                       \r
-                       unsigned char _RESERVED1          : 7;\r
-                       unsigned char Removable           : 1;\r
-                       \r
-                       uint8_t      Version;\r
-                       \r
-                       unsigned char ResponseDataFormat  : 4;\r
-                       unsigned char _RESERVED2          : 1;\r
-                       unsigned char NormACA             : 1;\r
-                       unsigned char TrmTsk              : 1;\r
-                       unsigned char AERC                : 1;\r
-\r
-                       uint8_t      AdditionalLength;\r
-                       uint8_t      _RESERVED3[2];\r
-\r
-                       unsigned char SoftReset           : 1;\r
-                       unsigned char CmdQue              : 1;\r
-                       unsigned char _RESERVED4          : 1;\r
-                       unsigned char Linked              : 1;\r
-                       unsigned char Sync                : 1;\r
-                       unsigned char WideBus16Bit        : 1;\r
-                       unsigned char WideBus32Bit        : 1;\r
-                       unsigned char RelAddr             : 1;\r
-                       \r
-                       uint8_t      VendorID[8];\r
-                       uint8_t      ProductID[16];\r
-                       uint8_t      RevisionID[4];\r
-               } SCSI_Inquiry_Response_t;\r
-               \r
-               /** Type define for a SCSI sense structure to a SCSI REQUEST SENSE command. For details of the\r
-                *  structure contents, refer to the SCSI specifications.\r
-                */\r
-               typedef struct\r
-               {\r
-                       uint8_t       ResponseCode;\r
-                       \r
-                       uint8_t       SegmentNumber;\r
-                       \r
-                       unsigned char SenseKey            : 4;\r
-                       unsigned char _RESERVED1          : 1;\r
-                       unsigned char ILI                 : 1;\r
-                       unsigned char EOM                 : 1;\r
-                       unsigned char FileMark            : 1;\r
-                       \r
-                       uint8_t      Information[4];\r
-                       uint8_t      AdditionalLength;\r
-                       uint8_t      CmdSpecificInformation[4];\r
-                       uint8_t      AdditionalSenseCode;\r
-                       uint8_t      AdditionalSenseQualifier;\r
-                       uint8_t      FieldReplaceableUnitCode;\r
-                       uint8_t      SenseKeySpecific[3];\r
-               } SCSI_Request_Sense_Response_t;\r
-               \r
-       /* Function Prototypes: */\r
-               bool SCSI_DecodeSCSICommand(USB_ClassInfo_MS_t* MSInterfaceInfo);\r
-               \r
-               #if defined(INCLUDE_FROM_SCSI_C)\r
-                       static bool SCSI_Command_Inquiry(USB_ClassInfo_MS_t* MSInterfaceInfo);\r
-                       static bool SCSI_Command_Request_Sense(USB_ClassInfo_MS_t* MSInterfaceInfo);\r
-                       static bool SCSI_Command_Read_Capacity_10(USB_ClassInfo_MS_t* MSInterfaceInfo);\r
-                       static bool SCSI_Command_Send_Diagnostic(USB_ClassInfo_MS_t* MSInterfaceInfo);\r
-                       static bool SCSI_Command_ReadWrite_10(USB_ClassInfo_MS_t* MSInterfaceInfo, const bool IsDataRead);\r
-               #endif\r
-               \r
-#endif\r
diff --git a/Demos/Device/MassStorage/Lib/SCSI_Codes.h b/Demos/Device/MassStorage/Lib/SCSI_Codes.h
deleted file mode 100644 (file)
index 2b2213d..0000000
+++ /dev/null
@@ -1,85 +0,0 @@
-/*\r
-             LUFA Library\r
-     Copyright (C) Dean Camera, 2009.\r
-              \r
-  dean [at] fourwalledcubicle [dot] com\r
-      www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
-  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
-  Permission to use, copy, modify, and distribute this software\r
-  and its documentation for any purpose and without fee is hereby\r
-  granted, provided that the above copyright notice appear in all\r
-  copies and that both that the copyright notice and this\r
-  permission notice and warranty disclaimer appear in supporting\r
-  documentation, and that the name of the author not be used in\r
-  advertising or publicity pertaining to distribution of the\r
-  software without specific, written prior permission.\r
-\r
-  The author disclaim all warranties with regard to this\r
-  software, including all implied warranties of merchantability\r
-  and fitness.  In no event shall the author be liable for any\r
-  special, indirect or consequential damages or any damages\r
-  whatsoever resulting from loss of use, data or profits, whether\r
-  in an action of contract, negligence or other tortious action,\r
-  arising out of or in connection with the use or performance of\r
-  this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- *  Header containing macros for possible SCSI commands and SENSE data. Refer to\r
- *  the SCSI standard documentation for more information on each SCSI command and\r
- *  the SENSE data.\r
- */\r
\r
-#ifndef _SCSI_CODES_H_\r
-#define _SCSI_CODES_H_\r
-\r
-       /* Macros: */\r
-               #define SCSI_CMD_INQUIRY                               0x12\r
-               #define SCSI_CMD_REQUEST_SENSE                         0x03\r
-               #define SCSI_CMD_TEST_UNIT_READY                       0x00\r
-               #define SCSI_CMD_READ_CAPACITY_10                      0x25\r
-               #define SCSI_CMD_SEND_DIAGNOSTIC                       0x1D\r
-               #define SCSI_CMD_PREVENT_ALLOW_MEDIUM_REMOVAL          0x1E\r
-               #define SCSI_CMD_WRITE_10                              0x2A\r
-               #define SCSI_CMD_READ_10                               0x28\r
-               #define SCSI_CMD_WRITE_6                               0x0A\r
-               #define SCSI_CMD_READ_6                                0x08\r
-               #define SCSI_CMD_VERIFY_10                             0x2F\r
-               #define SCSI_CMD_MODE_SENSE_6                          0x1A\r
-               #define SCSI_CMD_MODE_SENSE_10                         0x5A\r
-\r
-               #define SCSI_SENSE_KEY_GOOD                            0x00\r
-               #define SCSI_SENSE_KEY_RECOVERED_ERROR                 0x01\r
-               #define SCSI_SENSE_KEY_NOT_READY                       0x02\r
-               #define SCSI_SENSE_KEY_MEDIUM_ERROR                    0x03\r
-               #define SCSI_SENSE_KEY_HARDWARE_ERROR                  0x04\r
-               #define SCSI_SENSE_KEY_ILLEGAL_REQUEST                 0x05\r
-               #define SCSI_SENSE_KEY_UNIT_ATTENTION                  0x06\r
-               #define SCSI_SENSE_KEY_DATA_PROTECT                    0x07\r
-               #define SCSI_SENSE_KEY_BLANK_CHECK                     0x08\r
-               #define SCSI_SENSE_KEY_VENDOR_SPECIFIC                 0x09\r
-               #define SCSI_SENSE_KEY_COPY_ABORTED                    0x0A\r
-               #define SCSI_SENSE_KEY_ABORTED_COMMAND                 0x0B\r
-               #define SCSI_SENSE_KEY_VOLUME_OVERFLOW                 0x0D\r
-               #define SCSI_SENSE_KEY_MISCOMPARE                      0x0E\r
-\r
-               #define SCSI_ASENSE_NO_ADDITIONAL_INFORMATION          0x00\r
-               #define SCSI_ASENSE_LOGICAL_UNIT_NOT_READY             0x04\r
-               #define SCSI_ASENSE_INVALID_FIELD_IN_CDB               0x24\r
-               #define SCSI_ASENSE_WRITE_PROTECTED                    0x27\r
-               #define SCSI_ASENSE_FORMAT_ERROR                       0x31\r
-               #define SCSI_ASENSE_INVALID_COMMAND                    0x20\r
-               #define SCSI_ASENSE_LOGICAL_BLOCK_ADDRESS_OUT_OF_RANGE 0x21\r
-               #define SCSI_ASENSE_MEDIUM_NOT_PRESENT                 0x3A\r
-\r
-               #define SCSI_ASENSEQ_NO_QUALIFIER                      0x00\r
-               #define SCSI_ASENSEQ_FORMAT_COMMAND_FAILED             0x01\r
-               #define SCSI_ASENSEQ_INITIALIZING_COMMAND_REQUIRED     0x02\r
-               #define SCSI_ASENSEQ_OPERATION_IN_PROGRESS             0x07\r
-\r
-#endif\r
diff --git a/Demos/Device/MassStorage/MassStorage.aps b/Demos/Device/MassStorage/MassStorage.aps
deleted file mode 100644 (file)
index 483bc4c..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<AVRStudio><MANAGEMENT><ProjectName>MassStorage</ProjectName><Created>30-Sep-2008 14:12:09</Created><LastEdit>30-Sep-2008 14:12:25</LastEdit><ICON>241</ICON><ProjectType>0</ProjectType><Created>30-Sep-2008 14:12:09</Created><Version>4</Version><Build>4, 14, 0, 589</Build><ProjectTypeName>AVR GCC</ProjectTypeName></MANAGEMENT><CODE_CREATION><ObjectFile></ObjectFile><EntryFile></EntryFile><SaveFolder>C:\Users\Dean\Documents\Electronics\Projects\WORK\MyUSBWORK\Demos\MassStorage\</SaveFolder></CODE_CREATION><DEBUG_TARGET><CURRENT_TARGET>JTAGICE mkII</CURRENT_TARGET><CURRENT_PART>AT90USB1287.xml</CURRENT_PART><BREAKPOINTS></BREAKPOINTS><IO_EXPAND><HIDE>false</HIDE></IO_EXPAND><REGISTERNAMES><Register>R00</Register><Register>R01</Register><Register>R02</Register><Register>R03</Register><Register>R04</Register><Register>R05</Register><Register>R06</Register><Register>R07</Register><Register>R08</Register><Register>R09</Register><Register>R10</Register><Register>R11</Register><Register>R12</Register><Register>R13</Register><Register>R14</Register><Register>R15</Register><Register>R16</Register><Register>R17</Register><Register>R18</Register><Register>R19</Register><Register>R20</Register><Register>R21</Register><Register>R22</Register><Register>R23</Register><Register>R24</Register><Register>R25</Register><Register>R26</Register><Register>R27</Register><Register>R28</Register><Register>R29</Register><Register>R30</Register><Register>R31</Register></REGISTERNAMES><COM>Auto</COM><COMType>0</COMType><WATCHNUM>0</WATCHNUM><WATCHNAMES><Pane0></Pane0><Pane1></Pane1><Pane2></Pane2><Pane3></Pane3></WATCHNAMES><BreakOnTrcaeFull>0</BreakOnTrcaeFull></DEBUG_TARGET><Debugger><Triggers></Triggers></Debugger><AVRGCCPLUGIN><FILES><SOURCEFILE>DataflashManager.c</SOURCEFILE><SOURCEFILE>Descriptors.c</SOURCEFILE><SOURCEFILE>MassStorage.c</SOURCEFILE><SOURCEFILE>SCSI.c</SOURCEFILE><HEADERFILE>DataflashManager.h</HEADERFILE><HEADERFILE>Descriptors.h</HEADERFILE><HEADERFILE>MassStorage.h</HEADERFILE><HEADERFILE>SCSI.h</HEADERFILE><HEADERFILE>SCSI_Codes.h</HEADERFILE><OTHERFILE>makefile</OTHERFILE></FILES><CONFIGS><CONFIG><NAME>default</NAME><USESEXTERNALMAKEFILE>YES</USESEXTERNALMAKEFILE><EXTERNALMAKEFILE>makefile</EXTERNALMAKEFILE><PART>at90usb1287</PART><HEX>1</HEX><LIST>1</LIST><MAP>1</MAP><OUTPUTFILENAME>MassStorage.elf</OUTPUTFILENAME><OUTPUTDIR>default\</OUTPUTDIR><ISDIRTY>1</ISDIRTY><OPTIONS/><INCDIRS/><LIBDIRS/><LIBS/><LINKOBJECTS/><OPTIONSFORALL>-Wall -gdwarf-2 -std=gnu99 -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums</OPTIONSFORALL><LINKEROPTIONS></LINKEROPTIONS><SEGMENTS/></CONFIG></CONFIGS><LASTCONFIG>default</LASTCONFIG><USES_WINAVR>1</USES_WINAVR><GCC_LOC>C:\WinAVR-20080512\bin\avr-gcc.exe</GCC_LOC><MAKE_LOC>C:\WinAVR-20080512\utils\bin\make.exe</MAKE_LOC></AVRGCCPLUGIN><IOView><usergroups/><sort sorted="0" column="0" ordername="0" orderaddress="0" ordergroup="0"/></IOView><Files></Files><Events><Bookmarks></Bookmarks></Events><Trace><Filters></Filters></Trace></AVRStudio>\r
diff --git a/Demos/Device/MassStorage/MassStorage.c b/Demos/Device/MassStorage/MassStorage.c
deleted file mode 100644 (file)
index 5dbc4a2..0000000
+++ /dev/null
@@ -1,131 +0,0 @@
-/*\r
-             LUFA Library\r
-     Copyright (C) Dean Camera, 2009.\r
-              \r
-  dean [at] fourwalledcubicle [dot] com\r
-      www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
-  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
-  Permission to use, copy, modify, and distribute this software\r
-  and its documentation for any purpose and without fee is hereby\r
-  granted, provided that the above copyright notice appear in all\r
-  copies and that both that the copyright notice and this\r
-  permission notice and warranty disclaimer appear in supporting\r
-  documentation, and that the name of the author not be used in\r
-  advertising or publicity pertaining to distribution of the\r
-  software without specific, written prior permission.\r
-\r
-  The author disclaim all warranties with regard to this\r
-  software, including all implied warranties of merchantability\r
-  and fitness.  In no event shall the author be liable for any\r
-  special, indirect or consequential damages or any damages\r
-  whatsoever resulting from loss of use, data or profits, whether\r
-  in an action of contract, negligence or other tortious action,\r
-  arising out of or in connection with the use or performance of\r
-  this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- *  Main source file for the MassStorage demo. This file contains the main tasks of\r
- *  the demo and is responsible for the initial application hardware configuration.\r
- */\r
-\r
-#include "MassStorage.h"\r
-\r
-/** LUFA Mass Storage Class driver interface configuration and state information. This structure is\r
- *  passed to all Mass Storage Class driver functions, so that multiple instances of the same class\r
- *  within a device can be differentiated from one another.\r
- */\r
-USB_ClassInfo_MS_t Disk_MS_Interface =\r
-       {\r
-               .InterfaceNumber        = 0,\r
-\r
-               .DataINEndpointNumber   = MASS_STORAGE_IN_EPNUM,\r
-               .DataINEndpointSize     = MASS_STORAGE_IO_EPSIZE,\r
-\r
-               .DataOUTEndpointNumber  = MASS_STORAGE_OUT_EPNUM,\r
-               .DataOUTEndpointSize    = MASS_STORAGE_IO_EPSIZE,\r
-\r
-               .TotalLUNs              = TOTAL_LUNS,\r
-       };\r
-\r
-/** Main program entry point. This routine contains the overall program flow, including initial\r
- *  setup of all components and the main program loop.\r
- */\r
-int main(void)\r
-{\r
-       SetupHardware();\r
-\r
-       LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);\r
-\r
-       for (;;)\r
-       {\r
-               USB_MS_USBTask(&Disk_MS_Interface);\r
-               USB_USBTask();\r
-       }\r
-}\r
-\r
-/** Configures the board hardware and chip peripherals for the demo's functionality. */\r
-void SetupHardware(void)\r
-{\r
-       /* Disable watchdog if enabled by bootloader/fuses */\r
-       MCUSR &= ~(1 << WDRF);\r
-       wdt_disable();\r
-\r
-       /* Disable clock division */\r
-       clock_prescale_set(clock_div_1);\r
-\r
-       /* Hardware Initialization */\r
-       LEDs_Init();\r
-       Dataflash_Init(SPI_SPEED_FCPU_DIV_2);\r
-       USB_Init();\r
-\r
-       /* Clear Dataflash sector protections, if enabled */\r
-       DataflashManager_ResetDataflashProtections();\r
-}\r
-\r
-/** Event handler for the library USB Connection event. */\r
-void EVENT_USB_Connect(void)\r
-{\r
-       LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING);\r
-}\r
-\r
-/** Event handler for the library USB Disconnection event. */\r
-void EVENT_USB_Disconnect(void)\r
-{\r
-       LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);\r
-}\r
-\r
-/** Event handler for the library USB Configuration Changed event. */\r
-void EVENT_USB_ConfigurationChanged(void)\r
-{\r
-       LEDs_SetAllLEDs(LEDMASK_USB_READY);\r
-\r
-       if (!(USB_MS_ConfigureEndpoints(&Disk_MS_Interface)))\r
-         LEDs_SetAllLEDs(LEDMASK_USB_ERROR);\r
-}\r
-\r
-/** Event handler for the library USB Unhandled Control Packet event. */\r
-void EVENT_USB_UnhandledControlPacket(void)\r
-{\r
-       USB_MS_ProcessControlPacket(&Disk_MS_Interface);\r
-}\r
-\r
-/** Mass Storage class driver callback function the reception of SCSI commands from the host, which must be processed.\r
- *\r
- *  \param MSInterfaceInfo  Pointer to the Mass Storage class interface configuration structure being referenced\r
- */\r
-bool CALLBACK_USB_MS_SCSICommandReceived(USB_ClassInfo_MS_t* MSInterfaceInfo)\r
-{\r
-       bool CommandSuccess;\r
-       \r
-       LEDs_SetAllLEDs(LEDMASK_USB_BUSY);\r
-       CommandSuccess = SCSI_DecodeSCSICommand(MSInterfaceInfo);\r
-       LEDs_SetAllLEDs(LEDMASK_USB_READY);\r
-       \r
-       return CommandSuccess;\r
-}\r
diff --git a/Demos/Device/MassStorage/MassStorage.h b/Demos/Device/MassStorage/MassStorage.h
deleted file mode 100644 (file)
index 50a7725..0000000
+++ /dev/null
@@ -1,88 +0,0 @@
-/*\r
-             LUFA Library\r
-     Copyright (C) Dean Camera, 2009.\r
-              \r
-  dean [at] fourwalledcubicle [dot] com\r
-      www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
-  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
-  Permission to use, copy, modify, and distribute this software\r
-  and its documentation for any purpose and without fee is hereby\r
-  granted, provided that the above copyright notice appear in all\r
-  copies and that both that the copyright notice and this\r
-  permission notice and warranty disclaimer appear in supporting\r
-  documentation, and that the name of the author not be used in\r
-  advertising or publicity pertaining to distribution of the\r
-  software without specific, written prior permission.\r
-\r
-  The author disclaim all warranties with regard to this\r
-  software, including all implied warranties of merchantability\r
-  and fitness.  In no event shall the author be liable for any\r
-  special, indirect or consequential damages or any damages\r
-  whatsoever resulting from loss of use, data or profits, whether\r
-  in an action of contract, negligence or other tortious action,\r
-  arising out of or in connection with the use or performance of\r
-  this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- *  Header file for MassStorage.c.\r
- */\r
-\r
-#ifndef _MASS_STORAGE_H_\r
-#define _MASS_STORAGE_H_\r
-\r
-       /* Includes: */\r
-               #include <avr/io.h>\r
-               #include <avr/wdt.h>\r
-               #include <avr/power.h>\r
-\r
-               #include "Descriptors.h"\r
-\r
-               #include "Lib/SCSI.h"\r
-               #include "Lib/DataflashManager.h"\r
-\r
-               #include <LUFA/Version.h>\r
-               #include <LUFA/Drivers/Board/Joystick.h>\r
-               #include <LUFA/Drivers/Board/LEDs.h>\r
-               #include <LUFA/Drivers/Board/Buttons.h>\r
-               #include <LUFA/Drivers/USB/USB.h>\r
-               #include <LUFA/Drivers/USB/Class/Device/MassStorage.h>
-\r
-       /* Macros: */\r
-               /** LED mask for the library LED driver, to indicate that the USB interface is not ready. */\r
-               #define LEDMASK_USB_NOTREADY      LEDS_LED1\r
-\r
-               /** LED mask for the library LED driver, to indicate that the USB interface is enumerating. */\r
-               #define LEDMASK_USB_ENUMERATING  (LEDS_LED2 | LEDS_LED3)\r
-\r
-               /** LED mask for the library LED driver, to indicate that the USB interface is ready. */\r
-               #define LEDMASK_USB_READY        (LEDS_LED2 | LEDS_LED4)\r
-\r
-               /** LED mask for the library LED driver, to indicate that an error has occurred in the USB interface. */\r
-               #define LEDMASK_USB_ERROR        (LEDS_LED1 | LEDS_LED3)\r
-\r
-               /** LED mask for the library LED driver, to indicate that the USB interface is busy. */\r
-               #define LEDMASK_USB_BUSY         (LEDS_LED2)\r
-               \r
-               /** Total number of logical drives within the device - must be non-zero. */\r
-               #define TOTAL_LUNS                2\r
-               \r
-               /** Blocks in each LUN, calculated from the total capacity divided by the total number of Logical Units in the device. */\r
-               #define LUN_MEDIA_BLOCKS         (VIRTUAL_MEMORY_BLOCKS / TOTAL_LUNS)\r
-               \r
-       /* Function Prototypes: */\r
-               void SetupHardware(void);\r
-\r
-               void EVENT_USB_Connect(void);\r
-               void EVENT_USB_Disconnect(void);\r
-               void EVENT_USB_ConfigurationChanged(void);\r
-               void EVENT_USB_UnhandledControlPacket(void);\r
-\r
-               bool CALLBACK_USB_MS_SCSICommandReceived(USB_ClassInfo_MS_t* MSInterfaceInfo);\r
-\r
-#endif\r
diff --git a/Demos/Device/MassStorage/MassStorage.txt b/Demos/Device/MassStorage/MassStorage.txt
deleted file mode 100644 (file)
index 1d06cb6..0000000
+++ /dev/null
@@ -1,83 +0,0 @@
-/** \file\r
- *\r
- *  This file contains special DoxyGen information for the generation of the main page and other special\r
- *  documentation pages. It is not a project source file.\r
- */\r
\r
-/** \mainpage Mass Storage Device Demo\r
- *\r
- *  \section SSec_Info USB Information:\r
- *\r
- *  The following table gives a rundown of the USB utilization of this demo.\r
- *\r
- *  <table>\r
- *   <tr>\r
- *    <td><b>USB Mode:</b></td>\r
- *    <td>Device</td>\r
- *   </tr>\r
- *   <tr>\r
- *    <td><b>USB Class:</b></td>\r
- *    <td>Mass Storage Device</td>\r
- *   </tr>\r
- *   <tr> \r
- *    <td><b>USB Subclass:</b></td>\r
- *    <td>Bulk-Only Transport</td>\r
- *   </tr>\r
- *   <tr>\r
- *    <td><b>Relevant Standards:</b></td>\r
- *    <td>USBIF Mass Storage Standard</td>\r
- *    <td>USB Bulk-Only Transport Standard</td>\r
- *    <td>SCSI Primary Commands Specification</td>\r
- *    <td>SCSI Block Commands Specification</td>\r
- *   </tr>\r
- *   <tr>\r
- *    <td><b>Usable Speeds:</b></td>\r
- *    <td>Full Speed Mode</td>\r
- *   </tr>\r
- *  </table>\r
- *\r
- *  \section SSec_Description Project Description: \r
- *\r
- *  Dual LUN Mass Storage demonstration application. This gives a simple\r
- *  reference application for implementing a multiple LUN USB Mass Storage\r
- *  device using the basic USB UFI drivers in all modern OSes (i.e. no\r
- *  special drivers required).\r
- *  \r
- *  On start-up the system will automatically enumerate and function as an\r
- *  external mass storage device with two LUNs (separate disks) which may\r
- *  be formatted and used in the same manner as commercial USB Mass Storage\r
- *  devices.\r
- *     \r
- *  You will need to format the mass storage drives upon first run of this\r
- *  demonstration - as the device acts only as a data block transport between\r
- *  the host and the storage media, it does not matter what file system is used,\r
- *  as the data interpretation is performed by the host and not the USB device.\r
- *  \r
- *  This demo is not restricted to only two LUNs; by changing the TOTAL_LUNS\r
- *  value in MassStorageDualLUN.h, any number of LUNs can be used (from 1 to\r
- *  255), with each LUN being allocated an equal portion of the available\r
- *  Dataflash memory.\r
- *\r
- *  The USB control endpoint is managed entirely by the library using endpoint\r
- *  interrupts, as the INTERRUPT_CONTROL_ENDPOINT option is enabled. This allows for\r
- *  the host to reset the Mass Storage device state during long transfers without\r
- *  the need for complicated polling logic.\r
- *\r
- *  \section SSec_Options Project Options\r
- *\r
- *  The following defines can be found in this demo, which can control the demo behaviour when defined, or changed in value.\r
- *\r
- *  <table>\r
- *   <tr>\r
- *    <td><b>Define Name:</b></td>\r
- *    <td><b>Location:</b></td>\r
- *    <td><b>Description:</b></td>\r
- *   </tr>\r
- *   <tr>\r
- *    <td>TOTAL_LUNS</td>\r
- *    <td>MassStorage.h</td>\r
- *    <td>Total number of Logical Units (drives) in the device. The total device capacity is shared equally between each drive\r
- *        - this can be set to any positive non-zero amount.</td>\r
- *   </tr>\r
- *  </table>\r
- */\r
diff --git a/Demos/Device/MassStorage/makefile b/Demos/Device/MassStorage/makefile
deleted file mode 100644 (file)
index c4adfc9..0000000
+++ /dev/null
@@ -1,735 +0,0 @@
-# Hey Emacs, this is a -*- makefile -*-\r
-#----------------------------------------------------------------------------\r
-# WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al.\r
-#  >> Modified for use with the LUFA project. <<\r
-#\r
-# Released to the Public Domain\r
-#\r
-# Additional material for this makefile was written by:\r
-# Peter Fleury\r
-# Tim Henigan\r
-# Colin O'Flynn\r
-# Reiner Patommel\r
-# Markus Pfaff\r
-# Sander Pool\r
-# Frederik Rouleau\r
-# Carlos Lamas\r
-# Dean Camera\r
-# Opendous Inc.\r
-# Denver Gingerich\r
-#\r
-#----------------------------------------------------------------------------\r
-# On command line:\r
-#\r
-# make all = Make software.\r
-#\r
-# make clean = Clean out built project files.\r
-#\r
-# make coff = Convert ELF to AVR COFF.\r
-#\r
-# make extcoff = Convert ELF to AVR Extended COFF.\r
-#\r
-# make program = Download the hex file to the device, using avrdude.\r
-#                Please customize the avrdude settings below first!\r
-#\r
-# make dfu = Download the hex file to the device, using dfu-programmer (must\r
-#            have dfu-programmer installed).\r
-#\r
-# make flip = Download the hex file to the device, using Atmel FLIP (must\r
-#             have Atmel FLIP installed).\r
-#\r
-# make dfu-ee = Download the eeprom file to the device, using dfu-programmer\r
-#               (must have dfu-programmer installed).\r
-#\r
-# make flip-ee = Download the eeprom file to the device, using Atmel FLIP\r
-#                (must have Atmel FLIP installed).\r
-#\r
-# make doxygen = Generate DoxyGen documentation for the project (must have\r
-#                DoxyGen installed)\r
-#\r
-# make debug = Start either simulavr or avarice as specified for debugging, \r
-#              with avr-gdb or avr-insight as the front end for debugging.\r
-#\r
-# make filename.s = Just compile filename.c into the assembler code only.\r
-#\r
-# make filename.i = Create a preprocessed source file for use in submitting\r
-#                   bug reports to the GCC project.\r
-#\r
-# To rebuild project do "make clean" then "make all".\r
-#----------------------------------------------------------------------------\r
-\r
-\r
-# MCU name\r
-MCU = at90usb1287\r
-\r
-\r
-# Target board (see library "Board Types" documentation, USER or blank for projects not requiring\r
-# LUFA board drivers). If USER is selected, put custom board drivers in a directory called \r
-# "Board" inside the application directory.\r
-BOARD  = USBKEY\r
-\r
-\r
-# Processor frequency.\r
-#     This will define a symbol, F_CPU, in all source code files equal to the \r
-#     processor frequency. You can then use this symbol in your source code to \r
-#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done\r
-#     automatically to create a 32-bit value in your source code.\r
-#     Typical values are:\r
-#         F_CPU =  1000000\r
-#         F_CPU =  1843200\r
-#         F_CPU =  2000000\r
-#         F_CPU =  3686400\r
-#         F_CPU =  4000000\r
-#         F_CPU =  7372800\r
-#         F_CPU =  8000000\r
-#         F_CPU = 11059200\r
-#         F_CPU = 14745600\r
-#         F_CPU = 16000000\r
-#         F_CPU = 18432000\r
-#         F_CPU = 20000000\r
-F_CPU = 8000000\r
-\r
-\r
-# Input clock frequency.\r
-#     This will define a symbol, F_CLOCK, in all source code files equal to the \r
-#     input clock frequency (before any prescaling is performed). This value may\r
-#     differ from F_CPU if prescaling is used on the latter, and is required as the\r
-#     raw input clock is fed directly to the PLL sections of the AVR for high speed\r
-#     clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'\r
-#     at the end, this will be done automatically to create a 32-bit value in your\r
-#     source code.\r
-#\r
-#     If no clock division is performed on the input clock inside the AVR (via the\r
-#     CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.\r
-F_CLOCK = 8000000\r
-\r
-\r
-# Output format. (can be srec, ihex, binary)\r
-FORMAT = ihex\r
-\r
-\r
-# Target file name (without extension).\r
-TARGET = MassStorage\r
-\r
-\r
-# Object files directory\r
-#     To put object files in current directory, use a dot (.), do NOT make\r
-#     this an empty or blank macro!\r
-OBJDIR = .\r
-\r
-\r
-# Path to the LUFA library\r
-LUFA_PATH = ../../..\r
-\r
-\r
-# List C source files here. (C dependencies are automatically generated.)\r
-SRC = $(TARGET).c                                                 \\r
-         Descriptors.c                                               \\r
-         Lib/SCSI.c                                                  \\r
-         Lib/DataflashManager.c                                      \\r
-         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/DevChapter9.c        \\r
-         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Endpoint.c           \\r
-         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Host.c               \\r
-         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/HostChapter9.c       \\r
-         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/LowLevel.c           \\r
-         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Pipe.c               \\r
-         $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/Events.c            \\r
-         $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBInterrupt.c      \\r
-         $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBTask.c           \\r
-         $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/ConfigDescriptor.c  \\r
-         $(LUFA_PATH)/LUFA/Drivers/USB/Class/Device/MassStorage.c    \\r
-\r
-\r
-# List C++ source files here. (C dependencies are automatically generated.)\r
-CPPSRC = \r
-\r
-\r
-# List Assembler source files here.\r
-#     Make them always end in a capital .S.  Files ending in a lowercase .s\r
-#     will not be considered source files but generated files (assembler\r
-#     output from the compiler), and will be deleted upon "make clean"!\r
-#     Even though the DOS/Win* filesystem matches both .s and .S the same,\r
-#     it will preserve the spelling of the filenames, and gcc itself does\r
-#     care about how the name is spelled on its command-line.\r
-ASRC =\r
-\r
-\r
-# Optimization level, can be [0, 1, 2, 3, s]. \r
-#     0 = turn off optimization. s = optimize for size.\r
-#     (Note: 3 is not always the best optimization level. See avr-libc FAQ.)\r
-OPT = s\r
-\r
-\r
-# Debugging format.\r
-#     Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs.\r
-#     AVR Studio 4.10 requires dwarf-2.\r
-#     AVR [Extended] COFF format requires stabs, plus an avr-objcopy run.\r
-DEBUG = dwarf-2\r
-\r
-\r
-# List any extra directories to look for include files here.\r
-#     Each directory must be seperated by a space.\r
-#     Use forward slashes for directory separators.\r
-#     For a directory that has spaces, enclose it in quotes.\r
-EXTRAINCDIRS = $(LUFA_PATH)/\r
-\r
-\r
-# Compiler flag to set the C Standard level.\r
-#     c89   = "ANSI" C\r
-#     gnu89 = c89 plus GCC extensions\r
-#     c99   = ISO C99 standard (not yet fully implemented)\r
-#     gnu99 = c99 plus GCC extensions\r
-CSTANDARD = -std=gnu99\r
-\r
-\r
-# Place -D or -U options here for C sources\r
-CDEFS  = -DF_CPU=$(F_CPU)UL -DF_CLOCK=$(F_CLOCK)UL -DBOARD=BOARD_$(BOARD)\r
-CDEFS += -DUSE_NONSTANDARD_DESCRIPTOR_NAMES -DUSB_DEVICE_ONLY\r
-CDEFS += -DFIXED_CONTROL_ENDPOINT_SIZE=8 -DUSE_SINGLE_DEVICE_CONFIGURATION\r
-CDEFS += -DUSE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)"\r
-\r
-\r
-# Place -D or -U options here for ASM sources\r
-ADEFS = -DF_CPU=$(F_CPU)\r
-\r
-\r
-# Place -D or -U options here for C++ sources\r
-CPPDEFS = -DF_CPU=$(F_CPU)UL\r
-#CPPDEFS += -D__STDC_LIMIT_MACROS\r
-#CPPDEFS += -D__STDC_CONSTANT_MACROS\r
-\r
-\r
-\r
-#---------------- Compiler Options C ----------------\r
-#  -g*:          generate debugging information\r
-#  -O*:          optimization level\r
-#  -f...:        tuning, see GCC manual and avr-libc documentation\r
-#  -Wall...:     warning level\r
-#  -Wa,...:      tell GCC to pass this to the assembler.\r
-#    -adhlns...: create assembler listing\r
-CFLAGS = -g$(DEBUG)\r
-CFLAGS += $(CDEFS)\r
-CFLAGS += -O$(OPT)\r
-CFLAGS += -funsigned-char\r
-CFLAGS += -funsigned-bitfields\r
-CFLAGS += -ffunction-sections\r
-CFLAGS += -fpack-struct\r
-CFLAGS += -fshort-enums\r
-CFLAGS += -finline-limit=20\r
-CFLAGS += -Wall\r
-CFLAGS += -Wstrict-prototypes\r
-CFLAGS += -Wundef\r
-#CFLAGS += -fno-unit-at-a-time\r
-#CFLAGS += -Wunreachable-code\r
-#CFLAGS += -Wsign-compare\r
-CFLAGS += -Wa,-adhlns=$(<:%.c=$(OBJDIR)/%.lst)\r
-CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))\r
-CFLAGS += $(CSTANDARD)\r
-\r
-\r
-#---------------- Compiler Options C++ ----------------\r
-#  -g*:          generate debugging information\r
-#  -O*:          optimization level\r
-#  -f...:        tuning, see GCC manual and avr-libc documentation\r
-#  -Wall...:     warning level\r
-#  -Wa,...:      tell GCC to pass this to the assembler.\r
-#    -adhlns...: create assembler listing\r
-CPPFLAGS = -g$(DEBUG)\r
-CPPFLAGS += $(CPPDEFS)\r
-CPPFLAGS += -O$(OPT)\r
-CPPFLAGS += -funsigned-char\r
-CPPFLAGS += -funsigned-bitfields\r
-CPPFLAGS += -fpack-struct\r
-CPPFLAGS += -fshort-enums\r
-CPPFLAGS += -fno-exceptions\r
-CPPFLAGS += -Wall\r
-CFLAGS += -Wundef\r
-#CPPFLAGS += -mshort-calls\r
-#CPPFLAGS += -fno-unit-at-a-time\r
-#CPPFLAGS += -Wstrict-prototypes\r
-#CPPFLAGS += -Wunreachable-code\r
-#CPPFLAGS += -Wsign-compare\r
-CPPFLAGS += -Wa,-adhlns=$(<:%.cpp=$(OBJDIR)/%.lst)\r
-CPPFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))\r
-#CPPFLAGS += $(CSTANDARD)\r
-\r
-\r
-#---------------- Assembler Options ----------------\r
-#  -Wa,...:   tell GCC to pass this to the assembler.\r
-#  -adhlns:   create listing\r
-#  -gstabs:   have the assembler create line number information; note that\r
-#             for use in COFF files, additional information about filenames\r
-#             and function names needs to be present in the assembler source\r
-#             files -- see avr-libc docs [FIXME: not yet described there]\r
-#  -listing-cont-lines: Sets the maximum number of continuation lines of hex \r
-#       dump that will be displayed for a given single line of source input.\r
-ASFLAGS = $(ADEFS) -Wa,-adhlns=$(<:%.S=$(OBJDIR)/%.lst),-gstabs,--listing-cont-lines=100\r
-\r
-\r
-#---------------- Library Options ----------------\r
-# Minimalistic printf version\r
-PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min\r
-\r
-# Floating point printf version (requires MATH_LIB = -lm below)\r
-PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt\r
-\r
-# If this is left blank, then it will use the Standard printf version.\r
-PRINTF_LIB = \r
-#PRINTF_LIB = $(PRINTF_LIB_MIN)\r
-#PRINTF_LIB = $(PRINTF_LIB_FLOAT)\r
-\r
-\r
-# Minimalistic scanf version\r
-SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min\r
-\r
-# Floating point + %[ scanf version (requires MATH_LIB = -lm below)\r
-SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt\r
-\r
-# If this is left blank, then it will use the Standard scanf version.\r
-SCANF_LIB = \r
-#SCANF_LIB = $(SCANF_LIB_MIN)\r
-#SCANF_LIB = $(SCANF_LIB_FLOAT)\r
-\r
-\r
-MATH_LIB = -lm\r
-\r
-\r
-# List any extra directories to look for libraries here.\r
-#     Each directory must be seperated by a space.\r
-#     Use forward slashes for directory separators.\r
-#     For a directory that has spaces, enclose it in quotes.\r
-EXTRALIBDIRS = \r
-\r
-\r
-\r
-#---------------- External Memory Options ----------------\r
-\r
-# 64 KB of external RAM, starting after internal RAM (ATmega128!),\r
-# used for variables (.data/.bss) and heap (malloc()).\r
-#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff\r
-\r
-# 64 KB of external RAM, starting after internal RAM (ATmega128!),\r
-# only used for heap (malloc()).\r
-#EXTMEMOPTS = -Wl,--section-start,.data=0x801100,--defsym=__heap_end=0x80ffff\r
-\r
-EXTMEMOPTS =\r
-\r
-\r
-\r
-#---------------- Linker Options ----------------\r
-#  -Wl,...:     tell GCC to pass this to linker.\r
-#    -Map:      create map file\r
-#    --cref:    add cross reference to  map file\r
-LDFLAGS = -Wl,-Map=$(TARGET).map,--cref\r
-LDFLAGS += -Wl,--relax\r
-LDFLAGS += -Wl,--gc-sections\r
-LDFLAGS += $(EXTMEMOPTS)\r
-LDFLAGS += $(patsubst %,-L%,$(EXTRALIBDIRS))\r
-LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)\r
-#LDFLAGS += -T linker_script.x\r
-\r
-\r
-\r
-#---------------- Programming Options (avrdude) ----------------\r
-\r
-# Programming hardware: alf avr910 avrisp bascom bsd \r
-# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500\r
-#\r
-# Type: avrdude -c ?\r
-# to get a full listing.\r
-#\r
-AVRDUDE_PROGRAMMER = jtagmkII\r
-\r
-# com1 = serial port. Use lpt1 to connect to parallel port.\r
-AVRDUDE_PORT = usb\r
-\r
-AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex\r
-#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep\r
-\r
-\r
-# Uncomment the following if you want avrdude's erase cycle counter.\r
-# Note that this counter needs to be initialized first using -Yn,\r
-# see avrdude manual.\r
-#AVRDUDE_ERASE_COUNTER = -y\r
-\r
-# Uncomment the following if you do /not/ wish a verification to be\r
-# performed after programming the device.\r
-#AVRDUDE_NO_VERIFY = -V\r
-\r
-# Increase verbosity level.  Please use this when submitting bug\r
-# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude> \r
-# to submit bug reports.\r
-#AVRDUDE_VERBOSE = -v -v\r
-\r
-AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)\r
-AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY)\r
-AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE)\r
-AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER)\r
-\r
-\r
-\r
-#---------------- Debugging Options ----------------\r
-\r
-# For simulavr only - target MCU frequency.\r
-DEBUG_MFREQ = $(F_CPU)\r
-\r
-# Set the DEBUG_UI to either gdb or insight.\r
-# DEBUG_UI = gdb\r
-DEBUG_UI = insight\r
-\r
-# Set the debugging back-end to either avarice, simulavr.\r
-DEBUG_BACKEND = avarice\r
-#DEBUG_BACKEND = simulavr\r
-\r
-# GDB Init Filename.\r
-GDBINIT_FILE = __avr_gdbinit\r
-\r
-# When using avarice settings for the JTAG\r
-JTAG_DEV = /dev/com1\r
-\r
-# Debugging port used to communicate between GDB / avarice / simulavr.\r
-DEBUG_PORT = 4242\r
-\r
-# Debugging host used to communicate between GDB / avarice / simulavr, normally\r
-#     just set to localhost unless doing some sort of crazy debugging when \r
-#     avarice is running on a different computer.\r
-DEBUG_HOST = localhost\r
-\r
-\r
-\r
-#============================================================================\r
-\r
-\r
-# Define programs and commands.\r
-SHELL = sh\r
-CC = avr-gcc\r
-OBJCOPY = avr-objcopy\r
-OBJDUMP = avr-objdump\r
-SIZE = avr-size\r
-AR = avr-ar rcs\r
-NM = avr-nm\r
-AVRDUDE = avrdude\r
-REMOVE = rm -f\r
-REMOVEDIR = rm -rf\r
-COPY = cp\r
-WINSHELL = cmd\r
-\r
-# Define Messages\r
-# English\r
-MSG_ERRORS_NONE = Errors: none\r
-MSG_BEGIN = -------- begin --------\r
-MSG_END = --------  end  --------\r
-MSG_SIZE_BEFORE = Size before: \r
-MSG_SIZE_AFTER = Size after:\r
-MSG_COFF = Converting to AVR COFF:\r
-MSG_EXTENDED_COFF = Converting to AVR Extended COFF:\r
-MSG_FLASH = Creating load file for Flash:\r
-MSG_EEPROM = Creating load file for EEPROM:\r
-MSG_EXTENDED_LISTING = Creating Extended Listing:\r
-MSG_SYMBOL_TABLE = Creating Symbol Table:\r
-MSG_LINKING = Linking:\r
-MSG_COMPILING = Compiling C:\r
-MSG_COMPILING_CPP = Compiling C++:\r
-MSG_ASSEMBLING = Assembling:\r
-MSG_CLEANING = Cleaning project:\r
-MSG_CREATING_LIBRARY = Creating library:\r
-\r
-\r
-\r
-\r
-# Define all object files.\r
-OBJ = $(SRC:%.c=$(OBJDIR)/%.o) $(CPPSRC:%.cpp=$(OBJDIR)/%.o) $(ASRC:%.S=$(OBJDIR)/%.o) \r
-\r
-# Define all listing files.\r
-LST = $(SRC:%.c=$(OBJDIR)/%.lst) $(CPPSRC:%.cpp=$(OBJDIR)/%.lst) $(ASRC:%.S=$(OBJDIR)/%.lst) \r
-\r
-\r
-# Compiler flags to generate dependency files.\r
-GENDEPFLAGS = -MMD -MP -MF .dep/$(@F).d\r
-\r
-\r
-# Combine all necessary flags and optional flags.\r
-# Add target processor to flags.\r
-ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS)\r
-ALL_CPPFLAGS = -mmcu=$(MCU) -I. -x c++ $(CPPFLAGS) $(GENDEPFLAGS)\r
-ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)\r
-\r
-\r
-\r
-\r
-\r
-# Default target.\r
-all: begin gccversion sizebefore build checkhooks checklibmode checkboard sizeafter end\r
-\r
-# Change the build target to build a HEX file or a library.\r
-build: elf hex eep lss sym\r
-#build: lib\r
-\r
-\r
-elf: $(TARGET).elf\r
-hex: $(TARGET).hex\r
-eep: $(TARGET).eep\r
-lss: $(TARGET).lss\r
-sym: $(TARGET).sym\r
-LIBNAME=lib$(TARGET).a\r
-lib: $(LIBNAME)\r
-\r
-\r
-\r
-# Eye candy.\r
-# AVR Studio 3.x does not check make's exit code but relies on\r
-# the following magic strings to be generated by the compile job.\r
-begin:\r
-       @echo\r
-       @echo $(MSG_BEGIN)\r
-\r
-end:\r
-       @echo $(MSG_END)\r
-       @echo\r
-\r
-\r
-# Display size of file.\r
-HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex\r
-ELFSIZE = $(SIZE) $(MCU_FLAG) $(FORMAT_FLAG) $(TARGET).elf\r
-MCU_FLAG = $(shell $(SIZE) --help | grep -- --mcu > /dev/null && echo --mcu=$(MCU) )\r
-FORMAT_FLAG = $(shell $(SIZE) --help | grep -- --format=.*avr > /dev/null && echo --format=avr )\r
-\r
-sizebefore:\r
-       @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \\r
-       2>/dev/null; echo; fi\r
-\r
-sizeafter:\r
-       @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \\r
-       2>/dev/null; echo; fi\r
-\r
-checkhooks: build\r
-       @echo\r
-       @echo ------- Unhooked LUFA Events -------\r
-       @$(shell) (grep -s '^EVENT_.*LUFA/.*\\.o' $(TARGET).map | \\r
-                  cut -d' ' -f1 | cut -d'_' -f2- | grep ".*") || \\r
-                          echo "(None)"\r
-       @echo ------------------------------------\r
-\r
-checklibmode:\r
-       @echo\r
-       @echo ----------- Library Mode -----------\r
-       @$(shell) ($(CC) $(ALL_CFLAGS) -E -dM - < /dev/null \\r
-                 | grep 'USB_\(DEVICE\|HOST\)_ONLY' | cut -d' ' -f2 | grep ".*") \\r
-                 || echo "No specific mode (both device and host mode allowable)."\r
-       @echo ------------------------------------\r
-\r
-checkboard:\r
-       @echo\r
-       @echo ---------- Selected Board ----------\r
-       @echo Selected board model is $(BOARD).\r
-       @echo ------------------------------------\r
-       \r
-# Display compiler version information.\r
-gccversion : \r
-       @$(CC) --version\r
-\r
-\r
-\r
-# Program the device.  \r
-program: $(TARGET).hex $(TARGET).eep\r
-       $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)\r
-\r
-flip: $(TARGET).hex\r
-       batchisp -hardware usb -device $(MCU) -operation erase f\r
-       batchisp -hardware usb -device $(MCU) -operation loadbuffer $(TARGET).hex program\r
-       batchisp -hardware usb -device $(MCU) -operation start reset 0\r
-\r
-dfu: $(TARGET).hex\r
-       dfu-programmer $(MCU) erase\r
-       dfu-programmer $(MCU) flash --debug 1 $(TARGET).hex\r
-       dfu-programmer $(MCU) reset\r
-\r
-flip-ee: $(TARGET).hex $(TARGET).eep\r
-       copy $(TARGET).eep $(TARGET)eep.hex\r
-       batchisp -hardware usb -device $(MCU) -operation memory EEPROM erase\r
-       batchisp -hardware usb -device $(MCU) -operation memory EEPROM loadbuffer $(TARGET)eep.hex program\r
-       batchisp -hardware usb -device $(MCU) -operation start reset 0\r
-\r
-dfu-ee: $(TARGET).hex $(TARGET).eep\r
-       dfu-programmer $(MCU) flash-eeprom --debug 1 --suppress-bootloader-mem $(TARGET).eep\r
-       dfu-programmer $(MCU) reset\r
-\r
-\r
-# Generate avr-gdb config/init file which does the following:\r
-#     define the reset signal, load the target file, connect to target, and set \r
-#     a breakpoint at main().\r
-gdb-config: \r
-       @$(REMOVE) $(GDBINIT_FILE)\r
-       @echo define reset >> $(GDBINIT_FILE)\r
-       @echo SIGNAL SIGHUP >> $(GDBINIT_FILE)\r
-       @echo end >> $(GDBINIT_FILE)\r
-       @echo file $(TARGET).elf >> $(GDBINIT_FILE)\r
-       @echo target remote $(DEBUG_HOST):$(DEBUG_PORT)  >> $(GDBINIT_FILE)\r
-ifeq ($(DEBUG_BACKEND),simulavr)\r
-       @echo load  >> $(GDBINIT_FILE)\r
-endif\r
-       @echo break main >> $(GDBINIT_FILE)\r
-\r
-debug: gdb-config $(TARGET).elf\r
-ifeq ($(DEBUG_BACKEND), avarice)\r
-       @echo Starting AVaRICE - Press enter when "waiting to connect" message displays.\r
-       @$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \\r
-       $(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT)\r
-       @$(WINSHELL) /c pause\r
-\r
-else\r
-       @$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \\r
-       $(DEBUG_MFREQ) --port $(DEBUG_PORT)\r
-endif\r
-       @$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE)\r
-\r
-\r
-\r
-\r
-# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.\r
-COFFCONVERT = $(OBJCOPY) --debugging\r
-COFFCONVERT += --change-section-address .data-0x800000\r
-COFFCONVERT += --change-section-address .bss-0x800000\r
-COFFCONVERT += --change-section-address .noinit-0x800000\r
-COFFCONVERT += --change-section-address .eeprom-0x810000\r
-\r
-\r
-\r
-coff: $(TARGET).elf\r
-       @echo\r
-       @echo $(MSG_COFF) $(TARGET).cof\r
-       $(COFFCONVERT) -O coff-avr $< $(TARGET).cof\r
-\r
-\r
-extcoff: $(TARGET).elf\r
-       @echo\r
-       @echo $(MSG_EXTENDED_COFF) $(TARGET).cof\r
-       $(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof\r
-\r
-\r
-\r
-# Create final output files (.hex, .eep) from ELF output file.\r
-%.hex: %.elf\r
-       @echo\r
-       @echo $(MSG_FLASH) $@\r
-       $(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@\r
-\r
-%.eep: %.elf\r
-       @echo\r
-       @echo $(MSG_EEPROM) $@\r
-       -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \\r
-       --change-section-lma .eeprom=0 --no-change-warnings -O $(FORMAT) $< $@ || exit 0\r
-\r
-# Create extended listing file from ELF output file.\r
-%.lss: %.elf\r
-       @echo\r
-       @echo $(MSG_EXTENDED_LISTING) $@\r
-       $(OBJDUMP) -h -z -S $< > $@\r
-\r
-# Create a symbol table from ELF output file.\r
-%.sym: %.elf\r
-       @echo\r
-       @echo $(MSG_SYMBOL_TABLE) $@\r
-       $(NM) -n $< > $@\r
-\r
-\r
-\r
-# Create library from object files.\r
-.SECONDARY : $(TARGET).a\r
-.PRECIOUS : $(OBJ)\r
-%.a: $(OBJ)\r
-       @echo\r
-       @echo $(MSG_CREATING_LIBRARY) $@\r
-       $(AR) $@ $(OBJ)\r
-\r
-\r
-# Link: create ELF output file from object files.\r
-.SECONDARY : $(TARGET).elf\r
-.PRECIOUS : $(OBJ)\r
-%.elf: $(OBJ)\r
-       @echo\r
-       @echo $(MSG_LINKING) $@\r
-       $(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)\r
-\r
-\r
-# Compile: create object files from C source files.\r
-$(OBJDIR)/%.o : %.c\r
-       @echo\r
-       @echo $(MSG_COMPILING) $<\r
-       $(CC) -c $(ALL_CFLAGS) $< -o $@ \r
-\r
-\r
-# Compile: create object files from C++ source files.\r
-$(OBJDIR)/%.o : %.cpp\r
-       @echo\r
-       @echo $(MSG_COMPILING_CPP) $<\r
-       $(CC) -c $(ALL_CPPFLAGS) $< -o $@ \r
-\r
-\r
-# Compile: create assembler files from C source files.\r
-%.s : %.c\r
-       $(CC) -S $(ALL_CFLAGS) $< -o $@\r
-\r
-\r
-# Compile: create assembler files from C++ source files.\r
-%.s : %.cpp\r
-       $(CC) -S $(ALL_CPPFLAGS) $< -o $@\r
-\r
-\r
-# Assemble: create object files from assembler source files.\r
-$(OBJDIR)/%.o : %.S\r
-       @echo\r
-       @echo $(MSG_ASSEMBLING) $<\r
-       $(CC) -c $(ALL_ASFLAGS) $< -o $@\r
-\r
-\r
-# Create preprocessed source for use in sending a bug report.\r
-%.i : %.c\r
-       $(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ \r
-       \r
-\r
-# Target: clean project.\r
-clean: begin clean_list clean_binary end\r
-\r
-clean_binary:\r
-       $(REMOVE) $(TARGET).hex\r
-       \r
-clean_list:\r
-       @echo $(MSG_CLEANING)\r
-       $(REMOVE) $(TARGET).eep\r
-       $(REMOVE) $(TARGET)eep.hex\r
-       $(REMOVE) $(TARGET).cof\r
-       $(REMOVE) $(TARGET).elf\r
-       $(REMOVE) $(TARGET).map\r
-       $(REMOVE) $(TARGET).sym\r
-       $(REMOVE) $(TARGET).lss\r
-       $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.o)\r
-       $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.lst)\r
-       $(REMOVE) $(SRC:.c=.s)\r
-       $(REMOVE) $(SRC:.c=.d)\r
-       $(REMOVE) $(SRC:.c=.i)\r
-       $(REMOVEDIR) .dep\r
-\r
-\r
-doxygen:\r
-       @echo Generating Project Documentation...\r
-       @doxygen Doxygen.conf\r
-       @echo Documentation Generation Complete.\r
-\r
-clean_doxygen:\r
-       rm -rf Documentation\r
-\r
-# Create object files directory\r
-$(shell mkdir $(OBJDIR) 2>/dev/null)\r
-\r
-\r
-# Include the dependency files.\r
--include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)\r
-\r
-\r
-# Listing of phony targets.\r
-.PHONY : all checkhooks checklibmode checkboard   \\r
-begin finish end sizebefore sizeafter gccversion  \\r
-build elf hex eep lss sym coff extcoff clean      \\r
-clean_list clean_binary program debug gdb-config  \\r
-doxygen dfu flip flip-ee dfu-ee
\ No newline at end of file
diff --git a/Demos/Device/Mouse/Descriptors.c b/Demos/Device/Mouse/Descriptors.c
deleted file mode 100644 (file)
index 8ac4570..0000000
+++ /dev/null
@@ -1,251 +0,0 @@
-/*\r
-             LUFA Library\r
-     Copyright (C) Dean Camera, 2009.\r
-              \r
-  dean [at] fourwalledcubicle [dot] com\r
-      www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
-  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
-  Permission to use, copy, modify, and distribute this software\r
-  and its documentation for any purpose and without fee is hereby\r
-  granted, provided that the above copyright notice appear in all\r
-  copies and that both that the copyright notice and this\r
-  permission notice and warranty disclaimer appear in supporting\r
-  documentation, and that the name of the author not be used in\r
-  advertising or publicity pertaining to distribution of the\r
-  software without specific, written prior permission.\r
-\r
-  The author disclaim all warranties with regard to this\r
-  software, including all implied warranties of merchantability\r
-  and fitness.  In no event shall the author be liable for any\r
-  special, indirect or consequential damages or any damages\r
-  whatsoever resulting from loss of use, data or profits, whether\r
-  in an action of contract, negligence or other tortious action,\r
-  arising out of or in connection with the use or performance of\r
-  this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- *  USB Device Descriptors, for library use when in USB device mode. Descriptors are special \r
- *  computer-readable structures which the host requests upon device enumeration, to determine\r
- *  the device's capabilities and functions.  \r
- */\r
-\r
-#include "Descriptors.h"\r
-\r
-/** HID class report descriptor. This is a special descriptor constructed with values from the\r
- *  USBIF HID class specification to describe the reports and capabilities of the HID device. This\r
- *  descriptor is parsed by the host and its contents used to determine what data (and in what encoding)\r
- *  the device will send, and what it may be sent back from the host. Refer to the HID specification for\r
- *  more details on HID report descriptors.\r
- */\r
-USB_Descriptor_HIDReport_Datatype_t PROGMEM MouseReport[] =\r
-{\r
-       0x05, 0x01,          /* Usage Page (Generic Desktop)             */\r
-       0x09, 0x02,          /* Usage (Mouse)                            */\r
-       0xA1, 0x01,          /* Collection (Application)                 */\r
-       0x09, 0x01,          /*   Usage (Pointer)                        */\r
-       0xA1, 0x00,          /*   Collection (Application)               */\r
-       0x95, 0x03,          /*     Report Count (3)                     */\r
-       0x75, 0x01,          /*     Report Size (1)                      */\r
-       0x05, 0x09,          /*     Usage Page (Button)                  */\r
-       0x19, 0x01,          /*     Usage Minimum (Button 1)             */\r
-       0x29, 0x03,          /*     Usage Maximum (Button 3)             */\r
-       0x15, 0x00,          /*     Logical Minimum (0)                  */\r
-       0x25, 0x01,          /*     Logical Maximum (1)                  */\r
-       0x81, 0x02,          /*     Input (Data, Variable, Absolute)     */\r
-       0x95, 0x01,          /*     Report Count (1)                     */\r
-       0x75, 0x05,          /*     Report Size (5)                      */\r
-       0x81, 0x01,          /*     Input (Constant)                     */\r
-       0x75, 0x08,          /*     Report Size (8)                      */\r
-       0x95, 0x02,          /*     Report Count (2)                     */\r
-       0x05, 0x01,          /*     Usage Page (Generic Desktop Control) */\r
-       0x09, 0x30,          /*     Usage X                              */\r
-       0x09, 0x31,          /*     Usage Y                              */\r
-       0x15, 0x81,          /*     Logical Minimum (-127)               */\r
-       0x25, 0x7F,          /*     Logical Maximum (127)                */\r
-       0x81, 0x06,          /*     Input (Data, Variable, Relative)     */\r
-       0xC0,                /*   End Collection                         */\r
-       0xC0                 /* End Collection                           */\r
-};\r
-\r
-/** Device descriptor structure. This descriptor, located in FLASH memory, describes the overall\r
- *  device characteristics, including the supported USB version, control endpoint size and the\r
- *  number of device configurations. The descriptor is read out by the USB host when the enumeration\r
- *  process begins.\r
- */\r
-USB_Descriptor_Device_t PROGMEM DeviceDescriptor =\r
-{\r
-       .Header                 = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device},\r
-               \r
-       .USBSpecification       = VERSION_BCD(01.10),\r
-       .Class                  = 0x00,\r
-       .SubClass               = 0x00,\r
-       .Protocol               = 0x00,\r
-                               \r
-       .Endpoint0Size          = FIXED_CONTROL_ENDPOINT_SIZE,\r
-               \r
-       .VendorID               = 0x03EB,\r
-       .ProductID              = 0x2041,\r
-       .ReleaseNumber          = 0x0000,\r
-               \r
-       .ManufacturerStrIndex   = 0x01,\r
-       .ProductStrIndex        = 0x02,\r
-       .SerialNumStrIndex      = NO_DESCRIPTOR,\r
-               \r
-       .NumberOfConfigurations = 1\r
-};\r
-\r
-/** Configuration descriptor structure. This descriptor, located in FLASH memory, describes the usage\r
- *  of the device in one of its supported configurations, including information about any device interfaces\r
- *  and endpoints. The descriptor is read out by the USB host during the enumeration process when selecting\r
- *  a configuration so that the host may correctly communicate with the USB device.\r
- */\r
-USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =\r
-{\r
-       .Config = \r
-               {\r
-                       .Header                 = {.Size = sizeof(USB_Descriptor_Configuration_Header_t), .Type = DTYPE_Configuration},\r
-\r
-                       .TotalConfigurationSize = sizeof(USB_Descriptor_Configuration_t),\r
-                       .TotalInterfaces        = 1,\r
-                               \r
-                       .ConfigurationNumber    = 1,\r
-                       .ConfigurationStrIndex  = NO_DESCRIPTOR,\r
-                               \r
-                       .ConfigAttributes       = (USB_CONFIG_ATTR_BUSPOWERED | USB_CONFIG_ATTR_SELFPOWERED),\r
-                       \r
-                       .MaxPowerConsumption    = USB_CONFIG_POWER_MA(100)\r
-               },\r
-               \r
-       .Interface = \r
-               {\r
-                       .Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},\r
-\r
-                       .InterfaceNumber        = 0x00,\r
-                       .AlternateSetting       = 0x00,\r
-                       \r
-                       .TotalEndpoints         = 1,\r
-                               \r
-                       .Class                  = 0x03,\r
-                       .SubClass               = 0x01,\r
-                       .Protocol               = 0x02,\r
-                               \r
-                       .InterfaceStrIndex      = NO_DESCRIPTOR\r
-               },\r
-\r
-       .MouseHID = \r
-               {\r
-                       .Header                 = {.Size = sizeof(USB_Descriptor_HID_t), .Type = DTYPE_HID},\r
-                                                                        \r
-                       .HIDSpec                = VERSION_BCD(01.11),\r
-                       .CountryCode            = 0x00,\r
-                       .TotalReportDescriptors = 1,\r
-                       .HIDReportType          = DTYPE_Report,\r
-                       .HIDReportLength        = sizeof(MouseReport)\r
-               },\r
-\r
-       .MouseEndpoint = \r
-               {\r
-                       .Header                 = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},\r
-                                                                                \r
-                       .EndpointAddress        = (ENDPOINT_DESCRIPTOR_DIR_IN | MOUSE_EPNUM),\r
-                       .Attributes             = EP_TYPE_INTERRUPT,\r
-                       .EndpointSize           = MOUSE_EPSIZE,\r
-                       .PollingIntervalMS      = 0x02\r
-               }       \r
-};\r
-\r
-/** Language descriptor structure. This descriptor, located in FLASH memory, is returned when the host requests\r
- *  the string descriptor with index 0 (the first index). It is actually an array of 16-bit integers, which indicate\r
- *  via the language ID table available at USB.org what languages the device supports for its string descriptors.\r
- */\r
-USB_Descriptor_String_t PROGMEM LanguageString =\r
-{\r
-       .Header                 = {.Size = USB_STRING_LEN(1), .Type = DTYPE_String},\r
-               \r
-       .UnicodeString          = {LANGUAGE_ID_ENG}\r
-};\r
-\r
-/** Manufacturer descriptor string. This is a Unicode string containing the manufacturer's details in human readable\r
- *  form, and is read out upon request by the host when the appropriate string ID is requested, listed in the Device\r
- *  Descriptor.\r
- */\r
-USB_Descriptor_String_t PROGMEM ManufacturerString =\r
-{\r
-       .Header                 = {.Size = USB_STRING_LEN(11), .Type = DTYPE_String},\r
-               \r
-       .UnicodeString          = L"Dean Camera"\r
-};\r
-\r
-/** Product descriptor string. This is a Unicode string containing the product's details in human readable form,\r
- *  and is read out upon request by the host when the appropriate string ID is requested, listed in the Device\r
- *  Descriptor.\r
- */\r
-USB_Descriptor_String_t PROGMEM ProductString =\r
-{\r
-       .Header                 = {.Size = USB_STRING_LEN(15), .Type = DTYPE_String},\r
-               \r
-       .UnicodeString          = L"LUFA Mouse Demo"\r
-};\r
-\r
-/** This function is called by the library when in device mode, and must be overridden (see library "USB Descriptors"\r
- *  documentation) by the application code so that the address and size of a requested descriptor can be given\r
- *  to the USB library. When the device receives a Get Descriptor request on the control endpoint, this function\r
- *  is called so that the descriptor details can be passed back and the appropriate descriptor sent back to the\r
- *  USB host.\r
- */\r
-uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
-{\r
-       const uint8_t  DescriptorType   = (wValue >> 8);\r
-       const uint8_t  DescriptorNumber = (wValue & 0xFF);\r
-\r
-       void*    Address = NULL;\r
-       uint16_t Size    = NO_DESCRIPTOR;\r
-\r
-       switch (DescriptorType)\r
-       {\r
-               case DTYPE_Device:\r
-                       Address = (void*)&DeviceDescriptor;\r
-                       Size    = sizeof(USB_Descriptor_Device_t);\r
-                       break;\r
-               case DTYPE_Configuration:\r
-                       Address = (void*)&ConfigurationDescriptor;\r
-                       Size    = sizeof(USB_Descriptor_Configuration_t);\r
-                       break;\r
-               case DTYPE_String:\r
-                       switch (DescriptorNumber)\r
-                       {\r
-                               case 0x00:\r
-                                       Address = (void*)&LanguageString;\r
-                                       Size    = pgm_read_byte(&LanguageString.Header.Size);\r
-                                       break;\r
-                               case 0x01:\r
-                                       Address = (void*)&ManufacturerString;\r
-                                       Size    = pgm_read_byte(&ManufacturerString.Header.Size);\r
-                                       break;\r
-                               case 0x02:\r
-                                       Address = (void*)&ProductString;\r
-                                       Size    = pgm_read_byte(&ProductString.Header.Size);\r
-                                       break;\r
-                       }\r
-                       \r
-                       break;\r
-               case DTYPE_HID: \r
-                       Address = (void*)&ConfigurationDescriptor.MouseHID;\r
-                       Size    = sizeof(USB_Descriptor_HID_t);\r
-                       break;\r
-               case DTYPE_Report: \r
-                       Address = (void*)&MouseReport;\r
-                       Size    = sizeof(MouseReport);\r
-                       break;\r
-       }\r
-       \r
-       *DescriptorAddress = Address;           \r
-       return Size;\r
-}\r
-\r
diff --git a/Demos/Device/Mouse/Descriptors.h b/Demos/Device/Mouse/Descriptors.h
deleted file mode 100644 (file)
index ef3215c..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-/*\r
-             LUFA Library\r
-     Copyright (C) Dean Camera, 2009.\r
-              \r
-  dean [at] fourwalledcubicle [dot] com\r
-      www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
-  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
-  Permission to use, copy, modify, and distribute this software\r
-  and its documentation for any purpose and without fee is hereby\r
-  granted, provided that the above copyright notice appear in all\r
-  copies and that both that the copyright notice and this\r
-  permission notice and warranty disclaimer appear in supporting\r
-  documentation, and that the name of the author not be used in\r
-  advertising or publicity pertaining to distribution of the\r
-  software without specific, written prior permission.\r
-\r
-  The author disclaim all warranties with regard to this\r
-  software, including all implied warranties of merchantability\r
-  and fitness.  In no event shall the author be liable for any\r
-  special, indirect or consequential damages or any damages\r
-  whatsoever resulting from loss of use, data or profits, whether\r
-  in an action of contract, negligence or other tortious action,\r
-  arising out of or in connection with the use or performance of\r
-  this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- *  Header file for Descriptors.c.\r
- */\r
\r
-#ifndef _DESCRIPTORS_H_\r
-#define _DESCRIPTORS_H_\r
-\r
-       /* Includes: */\r
-               #include <avr/pgmspace.h>\r
-\r
-               #include <LUFA/Drivers/USB/USB.h>\r
-               #include <LUFA/Drivers/USB/Class/Device/HID.h>\r
-\r
-       /* Type Defines: */\r
-               /** Type define for the device configuration descriptor structure. This must be defined in the\r
-                *  application code, as the configuration descriptor contains several sub-descriptors which\r
-                *  vary between devices, and which describe the device's usage to the host.\r
-                */\r
-               typedef struct\r
-               {\r
-                       USB_Descriptor_Configuration_Header_t Config;\r
-                       USB_Descriptor_Interface_t            Interface;\r
-                       USB_Descriptor_HID_t                  MouseHID;\r
-               USB_Descriptor_Endpoint_t             MouseEndpoint;\r
-               } USB_Descriptor_Configuration_t;\r
-                                       \r
-       /* Macros: */\r
-               /** Endpoint number of the Mouse HID reporting IN endpoint. */\r
-               #define MOUSE_EPNUM               1\r
-               \r
-               /** Size in bytes of the Mouse HID reporting IN endpoint. */\r
-               #define MOUSE_EPSIZE              8\r
-\r
-       /* Function Prototypes: */\r
-               uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
-                                                                                       ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);\r
-\r
-#endif\r
diff --git a/Demos/Device/Mouse/Doxygen.conf b/Demos/Device/Mouse/Doxygen.conf
deleted file mode 100644 (file)
index 62c4db1..0000000
+++ /dev/null
@@ -1,1485 +0,0 @@
-# Doxyfile 1.5.7.1\r
-\r
-# This file describes the settings to be used by the documentation system\r
-# doxygen (www.doxygen.org) for a project\r
-#\r
-# All text after a hash (#) is considered a comment and will be ignored\r
-# The format is:\r
-#       TAG = value [value, ...]\r
-# For lists items can also be appended using:\r
-#       TAG += value [value, ...]\r
-# Values that contain spaces should be placed between quotes (" ")\r
-\r
-#---------------------------------------------------------------------------\r
-# Project related configuration options\r
-#---------------------------------------------------------------------------\r
-\r
-# This tag specifies the encoding used for all characters in the config file \r
-# that follow. The default is UTF-8 which is also the encoding used for all \r
-# text before the first occurrence of this tag. Doxygen uses libiconv (or the \r
-# iconv built into libc) for the transcoding. See \r
-# http://www.gnu.org/software/libiconv for the list of possible encodings.\r
-\r
-DOXYFILE_ENCODING      = UTF-8\r
-\r
-# The PROJECT_NAME tag is a single word (or a sequence of words surrounded \r
-# by quotes) that should identify the project.\r
-\r
-PROJECT_NAME           = "LUFA Library - Mouse Device Demo"\r
-\r
-# The PROJECT_NUMBER tag can be used to enter a project or revision number. \r
-# This could be handy for archiving the generated documentation or \r
-# if some version control system is used.\r
-\r
-PROJECT_NUMBER         = 0.0.0\r
-\r
-# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) \r
-# base path where the generated documentation will be put. \r
-# If a relative path is entered, it will be relative to the location \r
-# where doxygen was started. If left blank the current directory will be used.\r
-\r
-OUTPUT_DIRECTORY       = ./Documentation/\r
-\r
-# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create \r
-# 4096 sub-directories (in 2 levels) under the output directory of each output \r
-# format and will distribute the generated files over these directories. \r
-# Enabling this option can be useful when feeding doxygen a huge amount of \r
-# source files, where putting all generated files in the same directory would \r
-# otherwise cause performance problems for the file system.\r
-\r
-CREATE_SUBDIRS         = YES\r
-\r
-# The OUTPUT_LANGUAGE tag is used to specify the language in which all \r
-# documentation generated by doxygen is written. Doxygen will use this \r
-# information to generate all constant output in the proper language. \r
-# The default language is English, other supported languages are: \r
-# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, \r
-# Croatian, Czech, Danish, Dutch, Farsi, Finnish, French, German, Greek, \r
-# Hungarian, Italian, Japanese, Japanese-en (Japanese with English messages), \r
-# Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, Polish, \r
-# Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, Slovene, \r
-# Spanish, Swedish, and Ukrainian.\r
-\r
-OUTPUT_LANGUAGE        = English\r
-\r
-# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will \r
-# include brief member descriptions after the members that are listed in \r
-# the file and class documentation (similar to JavaDoc). \r
-# Set to NO to disable this.\r
-\r
-BRIEF_MEMBER_DESC      = YES\r
-\r
-# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend \r
-# the brief description of a member or function before the detailed description. \r
-# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the \r
-# brief descriptions will be completely suppressed.\r
-\r
-REPEAT_BRIEF           = YES\r
-\r
-# This tag implements a quasi-intelligent brief description abbreviator \r
-# that is used to form the text in various listings. Each string \r
-# in this list, if found as the leading text of the brief description, will be \r
-# stripped from the text and the result after processing the whole list, is \r
-# used as the annotated text. Otherwise, the brief description is used as-is. \r
-# If left blank, the following values are used ("$name" is automatically \r
-# replaced with the name of the entity): "The $name class" "The $name widget" \r
-# "The $name file" "is" "provides" "specifies" "contains" \r
-# "represents" "a" "an" "the"\r
-\r
-ABBREVIATE_BRIEF       = "The $name class" \\r
-                         "The $name widget" \\r
-                         "The $name file" \\r
-                         is \\r
-                         provides \\r
-                         specifies \\r
-                         contains \\r
-                         represents \\r
-                         a \\r
-                         an \\r
-                         the\r
-\r
-# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then \r
-# Doxygen will generate a detailed section even if there is only a brief \r
-# description.\r
-\r
-ALWAYS_DETAILED_SEC    = NO\r
-\r
-# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all \r
-# inherited members of a class in the documentation of that class as if those \r
-# members were ordinary class members. Constructors, destructors and assignment \r
-# operators of the base classes will not be shown.\r
-\r
-INLINE_INHERITED_MEMB  = NO\r
-\r
-# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full \r
-# path before files name in the file list and in the header files. If set \r
-# to NO the shortest path that makes the file name unique will be used.\r
-\r
-FULL_PATH_NAMES        = YES\r
-\r
-# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag \r
-# can be used to strip a user-defined part of the path. Stripping is \r
-# only done if one of the specified strings matches the left-hand part of \r
-# the path. The tag can be used to show relative paths in the file list. \r
-# If left blank the directory from which doxygen is run is used as the \r
-# path to strip.\r
-\r
-STRIP_FROM_PATH        = \r
-\r
-# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of \r
-# the path mentioned in the documentation of a class, which tells \r
-# the reader which header file to include in order to use a class. \r
-# If left blank only the name of the header file containing the class \r
-# definition is used. Otherwise one should specify the include paths that \r
-# are normally passed to the compiler using the -I flag.\r
-\r
-STRIP_FROM_INC_PATH    = \r
-\r
-# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter \r
-# (but less readable) file names. This can be useful is your file systems \r
-# doesn't support long names like on DOS, Mac, or CD-ROM.\r
-\r
-SHORT_NAMES            = YES\r
-\r
-# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen \r
-# will interpret the first line (until the first dot) of a JavaDoc-style \r
-# comment as the brief description. If set to NO, the JavaDoc \r
-# comments will behave just like regular Qt-style comments \r
-# (thus requiring an explicit @brief command for a brief description.)\r
-\r
-JAVADOC_AUTOBRIEF      = NO\r
-\r
-# If the QT_AUTOBRIEF tag is set to YES then Doxygen will \r
-# interpret the first line (until the first dot) of a Qt-style \r
-# comment as the brief description. If set to NO, the comments \r
-# will behave just like regular Qt-style comments (thus requiring \r
-# an explicit \brief command for a brief description.)\r
-\r
-QT_AUTOBRIEF           = NO\r
-\r
-# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen \r
-# treat a multi-line C++ special comment block (i.e. a block of //! or /// \r
-# comments) as a brief description. This used to be the default behaviour. \r
-# The new default is to treat a multi-line C++ comment block as a detailed \r
-# description. Set this tag to YES if you prefer the old behaviour instead.\r
-\r
-MULTILINE_CPP_IS_BRIEF = NO\r
-\r
-# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented \r
-# member inherits the documentation from any documented member that it \r
-# re-implements.\r
-\r
-INHERIT_DOCS           = YES\r
-\r
-# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce \r
-# a new page for each member. If set to NO, the documentation of a member will \r
-# be part of the file/class/namespace that contains it.\r
-\r
-SEPARATE_MEMBER_PAGES  = NO\r
-\r
-# The TAB_SIZE tag can be used to set the number of spaces in a tab. \r
-# Doxygen uses this value to replace tabs by spaces in code fragments.\r
-\r
-TAB_SIZE               = 4\r
-\r
-# This tag can be used to specify a number of aliases that acts \r
-# as commands in the documentation. An alias has the form "name=value". \r
-# For example adding "sideeffect=\par Side Effects:\n" will allow you to \r
-# put the command \sideeffect (or @sideeffect) in the documentation, which \r
-# will result in a user-defined paragraph with heading "Side Effects:". \r
-# You can put \n's in the value part of an alias to insert newlines.\r
-\r
-ALIASES                = \r
-\r
-# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C \r
-# sources only. Doxygen will then generate output that is more tailored for C. \r
-# For instance, some of the names that are used will be different. The list \r
-# of all members will be omitted, etc.\r
-\r
-OPTIMIZE_OUTPUT_FOR_C  = YES\r
-\r
-# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java \r
-# sources only. Doxygen will then generate output that is more tailored for \r
-# Java. For instance, namespaces will be presented as packages, qualified \r
-# scopes will look different, etc.\r
-\r
-OPTIMIZE_OUTPUT_JAVA   = NO\r
-\r
-# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran \r
-# sources only. Doxygen will then generate output that is more tailored for \r
-# Fortran.\r
-\r
-OPTIMIZE_FOR_FORTRAN   = NO\r
-\r
-# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL \r
-# sources. Doxygen will then generate output that is tailored for \r
-# VHDL.\r
-\r
-OPTIMIZE_OUTPUT_VHDL   = NO\r
-\r
-# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want \r
-# to include (a tag file for) the STL sources as input, then you should \r
-# set this tag to YES in order to let doxygen match functions declarations and \r
-# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. \r
-# func(std::string) {}). This also make the inheritance and collaboration \r
-# diagrams that involve STL classes more complete and accurate.\r
-\r
-BUILTIN_STL_SUPPORT    = NO\r
-\r
-# If you use Microsoft's C++/CLI language, you should set this option to YES to\r
-# enable parsing support.\r
-\r
-CPP_CLI_SUPPORT        = NO\r
-\r
-# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. \r
-# Doxygen will parse them like normal C++ but will assume all classes use public \r
-# instead of private inheritance when no explicit protection keyword is present.\r
-\r
-SIP_SUPPORT            = NO\r
-\r
-# For Microsoft's IDL there are propget and propput attributes to indicate getter \r
-# and setter methods for a property. Setting this option to YES (the default) \r
-# will make doxygen to replace the get and set methods by a property in the \r
-# documentation. This will only work if the methods are indeed getting or \r
-# setting a simple type. If this is not the case, or you want to show the \r
-# methods anyway, you should set this option to NO.\r
-\r
-IDL_PROPERTY_SUPPORT   = YES\r
-\r
-# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC \r
-# tag is set to YES, then doxygen will reuse the documentation of the first \r
-# member in the group (if any) for the other members of the group. By default \r
-# all members of a group must be documented explicitly.\r
-\r
-DISTRIBUTE_GROUP_DOC   = NO\r
-\r
-# Set the SUBGROUPING tag to YES (the default) to allow class member groups of \r
-# the same type (for instance a group of public functions) to be put as a \r
-# subgroup of that type (e.g. under the Public Functions section). Set it to \r
-# NO to prevent subgrouping. Alternatively, this can be done per class using \r
-# the \nosubgrouping command.\r
-\r
-SUBGROUPING            = YES\r
-\r
-# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum \r
-# is documented as struct, union, or enum with the name of the typedef. So \r
-# typedef struct TypeS {} TypeT, will appear in the documentation as a struct \r
-# with name TypeT. When disabled the typedef will appear as a member of a file, \r
-# namespace, or class. And the struct will be named TypeS. This can typically \r
-# be useful for C code in case the coding convention dictates that all compound \r
-# types are typedef'ed and only the typedef is referenced, never the tag name.\r
-\r
-TYPEDEF_HIDES_STRUCT   = NO\r
-\r
-# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to \r
-# determine which symbols to keep in memory and which to flush to disk.\r
-# When the cache is full, less often used symbols will be written to disk.\r
-# For small to medium size projects (<1000 input files) the default value is \r
-# probably good enough. For larger projects a too small cache size can cause \r
-# doxygen to be busy swapping symbols to and from disk most of the time \r
-# causing a significant performance penality. \r
-# If the system has enough physical memory increasing the cache will improve the \r
-# performance by keeping more symbols in memory. Note that the value works on \r
-# a logarithmic scale so increasing the size by one will rougly double the \r
-# memory usage. The cache size is given by this formula: \r
-# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, \r
-# corresponding to a cache size of 2^16 = 65536 symbols\r
-\r
-SYMBOL_CACHE_SIZE      = 0\r
-\r
-#---------------------------------------------------------------------------\r
-# Build related configuration options\r
-#---------------------------------------------------------------------------\r
-\r
-# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in \r
-# documentation are documented, even if no documentation was available. \r
-# Private class members and static file members will be hidden unless \r
-# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES\r
-\r
-EXTRACT_ALL            = YES\r
-\r
-# If the EXTRACT_PRIVATE tag is set to YES all private members of a class \r
-# will be included in the documentation.\r
-\r
-EXTRACT_PRIVATE        = YES\r
-\r
-# If the EXTRACT_STATIC tag is set to YES all static members of a file \r
-# will be included in the documentation.\r
-\r
-EXTRACT_STATIC         = YES\r
-\r
-# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) \r
-# defined locally in source files will be included in the documentation. \r
-# If set to NO only classes defined in header files are included.\r
-\r
-EXTRACT_LOCAL_CLASSES  = YES\r
-\r
-# This flag is only useful for Objective-C code. When set to YES local \r
-# methods, which are defined in the implementation section but not in \r
-# the interface are included in the documentation. \r
-# If set to NO (the default) only methods in the interface are included.\r
-\r
-EXTRACT_LOCAL_METHODS  = NO\r
-\r
-# If this flag is set to YES, the members of anonymous namespaces will be \r
-# extracted and appear in the documentation as a namespace called \r
-# 'anonymous_namespace{file}', where file will be replaced with the base \r
-# name of the file that contains the anonymous namespace. By default \r
-# anonymous namespace are hidden.\r
-\r
-EXTRACT_ANON_NSPACES   = NO\r
-\r
-# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all \r
-# undocumented members of documented classes, files or namespaces. \r
-# If set to NO (the default) these members will be included in the \r
-# various overviews, but no documentation section is generated. \r
-# This option has no effect if EXTRACT_ALL is enabled.\r
-\r
-HIDE_UNDOC_MEMBERS     = NO\r
-\r
-# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all \r
-# undocumented classes that are normally visible in the class hierarchy. \r
-# If set to NO (the default) these classes will be included in the various \r
-# overviews. This option has no effect if EXTRACT_ALL is enabled.\r
-\r
-HIDE_UNDOC_CLASSES     = NO\r
-\r
-# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all \r
-# friend (class|struct|union) declarations. \r
-# If set to NO (the default) these declarations will be included in the \r
-# documentation.\r
-\r
-HIDE_FRIEND_COMPOUNDS  = NO\r
-\r
-# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any \r
-# documentation blocks found inside the body of a function. \r
-# If set to NO (the default) these blocks will be appended to the \r
-# function's detailed documentation block.\r
-\r
-HIDE_IN_BODY_DOCS      = NO\r
-\r
-# The INTERNAL_DOCS tag determines if documentation \r
-# that is typed after a \internal command is included. If the tag is set \r
-# to NO (the default) then the documentation will be excluded. \r
-# Set it to YES to include the internal documentation.\r
-\r
-INTERNAL_DOCS          = NO\r
-\r
-# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate \r
-# file names in lower-case letters. If set to YES upper-case letters are also \r
-# allowed. This is useful if you have classes or files whose names only differ \r
-# in case and if your file system supports case sensitive file names. Windows \r
-# and Mac users are advised to set this option to NO.\r
-\r
-CASE_SENSE_NAMES       = NO\r
-\r
-# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen \r
-# will show members with their full class and namespace scopes in the \r
-# documentation. If set to YES the scope will be hidden.\r
-\r
-HIDE_SCOPE_NAMES       = NO\r
-\r
-# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen \r
-# will put a list of the files that are included by a file in the documentation \r
-# of that file.\r
-\r
-SHOW_INCLUDE_FILES     = YES\r
-\r
-# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] \r
-# is inserted in the documentation for inline members.\r
-\r
-INLINE_INFO            = YES\r
-\r
-# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen \r
-# will sort the (detailed) documentation of file and class members \r
-# alphabetically by member name. If set to NO the members will appear in \r
-# declaration order.\r
-\r
-SORT_MEMBER_DOCS       = YES\r
-\r
-# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the \r
-# brief documentation of file, namespace and class members alphabetically \r
-# by member name. If set to NO (the default) the members will appear in \r
-# declaration order.\r
-\r
-SORT_BRIEF_DOCS        = NO\r
-\r
-# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the \r
-# hierarchy of group names into alphabetical order. If set to NO (the default) \r
-# the group names will appear in their defined order.\r
-\r
-SORT_GROUP_NAMES       = NO\r
-\r
-# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be \r
-# sorted by fully-qualified names, including namespaces. If set to \r
-# NO (the default), the class list will be sorted only by class name, \r
-# not including the namespace part. \r
-# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.\r
-# Note: This option applies only to the class list, not to the \r
-# alphabetical list.\r
-\r
-SORT_BY_SCOPE_NAME     = NO\r
-\r
-# The GENERATE_TODOLIST tag can be used to enable (YES) or \r
-# disable (NO) the todo list. This list is created by putting \todo \r
-# commands in the documentation.\r
-\r
-GENERATE_TODOLIST      = NO\r
-\r
-# The GENERATE_TESTLIST tag can be used to enable (YES) or \r
-# disable (NO) the test list. This list is created by putting \test \r
-# commands in the documentation.\r
-\r
-GENERATE_TESTLIST      = NO\r
-\r
-# The GENERATE_BUGLIST tag can be used to enable (YES) or \r
-# disable (NO) the bug list. This list is created by putting \bug \r
-# commands in the documentation.\r
-\r
-GENERATE_BUGLIST       = NO\r
-\r
-# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or \r
-# disable (NO) the deprecated list. This list is created by putting \r
-# \deprecated commands in the documentation.\r
-\r
-GENERATE_DEPRECATEDLIST= YES\r
-\r
-# The ENABLED_SECTIONS tag can be used to enable conditional \r
-# documentation sections, marked by \if sectionname ... \endif.\r
-\r
-ENABLED_SECTIONS       = \r
-\r
-# The MAX_INITIALIZER_LINES tag determines the maximum number of lines \r
-# the initial value of a variable or define consists of for it to appear in \r
-# the documentation. If the initializer consists of more lines than specified \r
-# here it will be hidden. Use a value of 0 to hide initializers completely. \r
-# The appearance of the initializer of individual variables and defines in the \r
-# documentation can be controlled using \showinitializer or \hideinitializer \r
-# command in the documentation regardless of this setting.\r
-\r
-MAX_INITIALIZER_LINES  = 30\r
-\r
-# Set the SHOW_USED_FILES tag to NO to disable the list of files generated \r
-# at the bottom of the documentation of classes and structs. If set to YES the \r
-# list will mention the files that were used to generate the documentation.\r
-\r
-SHOW_USED_FILES        = YES\r
-\r
-# If the sources in your project are distributed over multiple directories \r
-# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy \r
-# in the documentation. The default is NO.\r
-\r
-SHOW_DIRECTORIES       = YES\r
-\r
-# Set the SHOW_FILES tag to NO to disable the generation of the Files page.\r
-# This will remove the Files entry from the Quick Index and from the \r
-# Folder Tree View (if specified). The default is YES.\r
-\r
-SHOW_FILES             = YES\r
-\r
-# Set the SHOW_NAMESPACES tag to NO to disable the generation of the \r
-# Namespaces page.  This will remove the Namespaces entry from the Quick Index\r
-# and from the Folder Tree View (if specified). The default is YES.\r
-\r
-SHOW_NAMESPACES        = YES\r
-\r
-# The FILE_VERSION_FILTER tag can be used to specify a program or script that \r
-# doxygen should invoke to get the current version for each file (typically from \r
-# the version control system). Doxygen will invoke the program by executing (via \r
-# popen()) the command <command> <input-file>, where <command> is the value of \r
-# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file \r
-# provided by doxygen. Whatever the program writes to standard output \r
-# is used as the file version. See the manual for examples.\r
-\r
-FILE_VERSION_FILTER    = \r
-\r
-# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by \r
-# doxygen. The layout file controls the global structure of the generated output files \r
-# in an output format independent way. The create the layout file that represents \r
-# doxygen's defaults, run doxygen with the -l option. You can optionally specify a \r
-# file name after the option, if omitted DoxygenLayout.xml will be used as the name \r
-# of the layout file.\r
-\r
-LAYOUT_FILE            = \r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to warning and progress messages\r
-#---------------------------------------------------------------------------\r
-\r
-# The QUIET tag can be used to turn on/off the messages that are generated \r
-# by doxygen. Possible values are YES and NO. If left blank NO is used.\r
-\r
-QUIET                  = YES\r
-\r
-# The WARNINGS tag can be used to turn on/off the warning messages that are \r
-# generated by doxygen. Possible values are YES and NO. If left blank \r
-# NO is used.\r
-\r
-WARNINGS               = YES\r
-\r
-# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings \r
-# for undocumented members. If EXTRACT_ALL is set to YES then this flag will \r
-# automatically be disabled.\r
-\r
-WARN_IF_UNDOCUMENTED   = YES\r
-\r
-# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for \r
-# potential errors in the documentation, such as not documenting some \r
-# parameters in a documented function, or documenting parameters that \r
-# don't exist or using markup commands wrongly.\r
-\r
-WARN_IF_DOC_ERROR      = YES\r
-\r
-# This WARN_NO_PARAMDOC option can be abled to get warnings for \r
-# functions that are documented, but have no documentation for their parameters \r
-# or return value. If set to NO (the default) doxygen will only warn about \r
-# wrong or incomplete parameter documentation, but not about the absence of \r
-# documentation.\r
-\r
-WARN_NO_PARAMDOC       = YES\r
-\r
-# The WARN_FORMAT tag determines the format of the warning messages that \r
-# doxygen can produce. The string should contain the $file, $line, and $text \r
-# tags, which will be replaced by the file and line number from which the \r
-# warning originated and the warning text. Optionally the format may contain \r
-# $version, which will be replaced by the version of the file (if it could \r
-# be obtained via FILE_VERSION_FILTER)\r
-\r
-WARN_FORMAT            = "$file:$line: $text"\r
-\r
-# The WARN_LOGFILE tag can be used to specify a file to which warning \r
-# and error messages should be written. If left blank the output is written \r
-# to stderr.\r
-\r
-WARN_LOGFILE           = \r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the input files\r
-#---------------------------------------------------------------------------\r
-\r
-# The INPUT tag can be used to specify the files and/or directories that contain \r
-# documented source files. You may enter file names like "myfile.cpp" or \r
-# directories like "/usr/src/myproject". Separate the files or directories \r
-# with spaces.\r
-\r
-INPUT                  = ./\r
-\r
-# This tag can be used to specify the character encoding of the source files \r
-# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is \r
-# also the default input encoding. Doxygen uses libiconv (or the iconv built \r
-# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for \r
-# the list of possible encodings.\r
-\r
-INPUT_ENCODING         = UTF-8\r
-\r
-# If the value of the INPUT tag contains directories, you can use the \r
-# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \r
-# and *.h) to filter out the source-files in the directories. If left \r
-# blank the following patterns are tested: \r
-# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx \r
-# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90\r
-\r
-FILE_PATTERNS          = *.h \\r
-                         *.c \\r
-                                                *.txt\r
-\r
-# The RECURSIVE tag can be used to turn specify whether or not subdirectories \r
-# should be searched for input files as well. Possible values are YES and NO. \r
-# If left blank NO is used.\r
-\r
-RECURSIVE              = YES\r
-\r
-# The EXCLUDE tag can be used to specify files and/or directories that should \r
-# excluded from the INPUT source files. This way you can easily exclude a \r
-# subdirectory from a directory tree whose root is specified with the INPUT tag.\r
-\r
-EXCLUDE                = \r
-\r
-# The EXCLUDE_SYMLINKS tag can be used select whether or not files or \r
-# directories that are symbolic links (a Unix filesystem feature) are excluded \r
-# from the input.\r
-\r
-EXCLUDE_SYMLINKS       = NO\r
-\r
-# If the value of the INPUT tag contains directories, you can use the \r
-# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude \r
-# certain files from those directories. Note that the wildcards are matched \r
-# against the file with absolute path, so to exclude all test directories \r
-# for example use the pattern */test/*\r
-\r
-EXCLUDE_PATTERNS       = */LowLevel/USBMode.h\r
-\r
-# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names \r
-# (namespaces, classes, functions, etc.) that should be excluded from the \r
-# output. The symbol name can be a fully qualified name, a word, or if the \r
-# wildcard * is used, a substring. Examples: ANamespace, AClass, \r
-# AClass::ANamespace, ANamespace::*Test\r
-\r
-EXCLUDE_SYMBOLS        = __*\r
-\r
-# The EXAMPLE_PATH tag can be used to specify one or more files or \r
-# directories that contain example code fragments that are included (see \r
-# the \include command).\r
-\r
-EXAMPLE_PATH           = \r
-\r
-# If the value of the EXAMPLE_PATH tag contains directories, you can use the \r
-# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \r
-# and *.h) to filter out the source-files in the directories. If left \r
-# blank all files are included.\r
-\r
-EXAMPLE_PATTERNS       = *\r
-\r
-# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be \r
-# searched for input files to be used with the \include or \dontinclude \r
-# commands irrespective of the value of the RECURSIVE tag. \r
-# Possible values are YES and NO. If left blank NO is used.\r
-\r
-EXAMPLE_RECURSIVE      = NO\r
-\r
-# The IMAGE_PATH tag can be used to specify one or more files or \r
-# directories that contain image that are included in the documentation (see \r
-# the \image command).\r
-\r
-IMAGE_PATH             = \r
-\r
-# The INPUT_FILTER tag can be used to specify a program that doxygen should \r
-# invoke to filter for each input file. Doxygen will invoke the filter program \r
-# by executing (via popen()) the command <filter> <input-file>, where <filter> \r
-# is the value of the INPUT_FILTER tag, and <input-file> is the name of an \r
-# input file. Doxygen will then use the output that the filter program writes \r
-# to standard output.  If FILTER_PATTERNS is specified, this tag will be \r
-# ignored.\r
-\r
-INPUT_FILTER           = \r
-\r
-# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern \r
-# basis.  Doxygen will compare the file name with each pattern and apply the \r
-# filter if there is a match.  The filters are a list of the form: \r
-# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further \r
-# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER \r
-# is applied to all files.\r
-\r
-FILTER_PATTERNS        = \r
-\r
-# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using \r
-# INPUT_FILTER) will be used to filter the input files when producing source \r
-# files to browse (i.e. when SOURCE_BROWSER is set to YES).\r
-\r
-FILTER_SOURCE_FILES    = NO\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to source browsing\r
-#---------------------------------------------------------------------------\r
-\r
-# If the SOURCE_BROWSER tag is set to YES then a list of source files will \r
-# be generated. Documented entities will be cross-referenced with these sources. \r
-# Note: To get rid of all source code in the generated output, make sure also \r
-# VERBATIM_HEADERS is set to NO.\r
-\r
-SOURCE_BROWSER         = NO\r
-\r
-# Setting the INLINE_SOURCES tag to YES will include the body \r
-# of functions and classes directly in the documentation.\r
-\r
-INLINE_SOURCES         = NO\r
-\r
-# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct \r
-# doxygen to hide any special comment blocks from generated source code \r
-# fragments. Normal C and C++ comments will always remain visible.\r
-\r
-STRIP_CODE_COMMENTS    = YES\r
-\r
-# If the REFERENCED_BY_RELATION tag is set to YES \r
-# then for each documented function all documented \r
-# functions referencing it will be listed.\r
-\r
-REFERENCED_BY_RELATION = NO\r
-\r
-# If the REFERENCES_RELATION tag is set to YES \r
-# then for each documented function all documented entities \r
-# called/used by that function will be listed.\r
-\r
-REFERENCES_RELATION    = NO\r
-\r
-# If the REFERENCES_LINK_SOURCE tag is set to YES (the default)\r
-# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from\r
-# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will\r
-# link to the source code.  Otherwise they will link to the documentstion.\r
-\r
-REFERENCES_LINK_SOURCE = NO\r
-\r
-# If the USE_HTAGS tag is set to YES then the references to source code \r
-# will point to the HTML generated by the htags(1) tool instead of doxygen \r
-# built-in source browser. The htags tool is part of GNU's global source \r
-# tagging system (see http://www.gnu.org/software/global/global.html). You \r
-# will need version 4.8.6 or higher.\r
-\r
-USE_HTAGS              = NO\r
-\r
-# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen \r
-# will generate a verbatim copy of the header file for each class for \r
-# which an include is specified. Set to NO to disable this.\r
-\r
-VERBATIM_HEADERS       = NO\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the alphabetical class index\r
-#---------------------------------------------------------------------------\r
-\r
-# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index \r
-# of all compounds will be generated. Enable this if the project \r
-# contains a lot of classes, structs, unions or interfaces.\r
-\r
-ALPHABETICAL_INDEX     = YES\r
-\r
-# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then \r
-# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns \r
-# in which this list will be split (can be a number in the range [1..20])\r
-\r
-COLS_IN_ALPHA_INDEX    = 5\r
-\r
-# In case all classes in a project start with a common prefix, all \r
-# classes will be put under the same header in the alphabetical index. \r
-# The IGNORE_PREFIX tag can be used to specify one or more prefixes that \r
-# should be ignored while generating the index headers.\r
-\r
-IGNORE_PREFIX          = \r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the HTML output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_HTML tag is set to YES (the default) Doxygen will \r
-# generate HTML output.\r
-\r
-GENERATE_HTML          = YES\r
-\r
-# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. \r
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
-# put in front of it. If left blank `html' will be used as the default path.\r
-\r
-HTML_OUTPUT            = html\r
-\r
-# The HTML_FILE_EXTENSION tag can be used to specify the file extension for \r
-# each generated HTML page (for example: .htm,.php,.asp). If it is left blank \r
-# doxygen will generate files with .html extension.\r
-\r
-HTML_FILE_EXTENSION    = .html\r
-\r
-# The HTML_HEADER tag can be used to specify a personal HTML header for \r
-# each generated HTML page. If it is left blank doxygen will generate a \r
-# standard header.\r
-\r
-HTML_HEADER            = \r
-\r
-# The HTML_FOOTER tag can be used to specify a personal HTML footer for \r
-# each generated HTML page. If it is left blank doxygen will generate a \r
-# standard footer.\r
-\r
-HTML_FOOTER            = \r
-\r
-# The HTML_STYLESHEET tag can be used to specify a user-defined cascading \r
-# style sheet that is used by each HTML page. It can be used to \r
-# fine-tune the look of the HTML output. If the tag is left blank doxygen \r
-# will generate a default style sheet. Note that doxygen will try to copy \r
-# the style sheet file to the HTML output directory, so don't put your own \r
-# stylesheet in the HTML output directory as well, or it will be erased!\r
-\r
-HTML_STYLESHEET        = \r
-\r
-# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, \r
-# files or namespaces will be aligned in HTML using tables. If set to \r
-# NO a bullet list will be used.\r
-\r
-HTML_ALIGN_MEMBERS     = YES\r
-\r
-# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML \r
-# documentation will contain sections that can be hidden and shown after the \r
-# page has loaded. For this to work a browser that supports \r
-# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox \r
-# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari).\r
-\r
-HTML_DYNAMIC_SECTIONS  = YES\r
-\r
-# If the GENERATE_DOCSET tag is set to YES, additional index files \r
-# will be generated that can be used as input for Apple's Xcode 3 \r
-# integrated development environment, introduced with OSX 10.5 (Leopard). \r
-# To create a documentation set, doxygen will generate a Makefile in the \r
-# HTML output directory. Running make will produce the docset in that \r
-# directory and running "make install" will install the docset in \r
-# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find \r
-# it at startup. \r
-# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information.\r
-\r
-GENERATE_DOCSET        = NO\r
-\r
-# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the \r
-# feed. A documentation feed provides an umbrella under which multiple \r
-# documentation sets from a single provider (such as a company or product suite) \r
-# can be grouped.\r
-\r
-DOCSET_FEEDNAME        = "Doxygen generated docs"\r
-\r
-# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that \r
-# should uniquely identify the documentation set bundle. This should be a \r
-# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen \r
-# will append .docset to the name.\r
-\r
-DOCSET_BUNDLE_ID       = org.doxygen.Project\r
-\r
-# If the GENERATE_HTMLHELP tag is set to YES, additional index files \r
-# will be generated that can be used as input for tools like the \r
-# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) \r
-# of the generated HTML documentation.\r
-\r
-GENERATE_HTMLHELP      = NO\r
-\r
-# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can \r
-# be used to specify the file name of the resulting .chm file. You \r
-# can add a path in front of the file if the result should not be \r
-# written to the html output directory.\r
-\r
-CHM_FILE               = \r
-\r
-# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can \r
-# be used to specify the location (absolute path including file name) of \r
-# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run \r
-# the HTML help compiler on the generated index.hhp.\r
-\r
-HHC_LOCATION           = \r
-\r
-# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag \r
-# controls if a separate .chi index file is generated (YES) or that \r
-# it should be included in the master .chm file (NO).\r
-\r
-GENERATE_CHI           = NO\r
-\r
-# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING\r
-# is used to encode HtmlHelp index (hhk), content (hhc) and project file\r
-# content.\r
-\r
-CHM_INDEX_ENCODING     = \r
-\r
-# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag \r
-# controls whether a binary table of contents is generated (YES) or a \r
-# normal table of contents (NO) in the .chm file.\r
-\r
-BINARY_TOC             = NO\r
-\r
-# The TOC_EXPAND flag can be set to YES to add extra items for group members \r
-# to the contents of the HTML help documentation and to the tree view.\r
-\r
-TOC_EXPAND             = YES\r
-\r
-# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER \r
-# are set, an additional index file will be generated that can be used as input for \r
-# Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated \r
-# HTML documentation.\r
-\r
-GENERATE_QHP           = NO\r
-\r
-# If the QHG_LOCATION tag is specified, the QCH_FILE tag can \r
-# be used to specify the file name of the resulting .qch file. \r
-# The path specified is relative to the HTML output folder.\r
-\r
-QCH_FILE               = \r
-\r
-# The QHP_NAMESPACE tag specifies the namespace to use when generating \r
-# Qt Help Project output. For more information please see \r
-# <a href="http://doc.trolltech.com/qthelpproject.html#namespace">Qt Help Project / Namespace</a>.\r
-\r
-QHP_NAMESPACE          = org.doxygen.Project\r
-\r
-# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating \r
-# Qt Help Project output. For more information please see \r
-# <a href="http://doc.trolltech.com/qthelpproject.html#virtual-folders">Qt Help Project / Virtual Folders</a>.\r
-\r
-QHP_VIRTUAL_FOLDER     = doc\r
-\r
-# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can \r
-# be used to specify the location of Qt's qhelpgenerator. \r
-# If non-empty doxygen will try to run qhelpgenerator on the generated \r
-# .qhp file .\r
-\r
-QHG_LOCATION           = \r
-\r
-# The DISABLE_INDEX tag can be used to turn on/off the condensed index at \r
-# top of each HTML page. The value NO (the default) enables the index and \r
-# the value YES disables it.\r
-\r
-DISABLE_INDEX          = NO\r
-\r
-# This tag can be used to set the number of enum values (range [1..20]) \r
-# that doxygen will group on one line in the generated HTML documentation.\r
-\r
-ENUM_VALUES_PER_LINE   = 1\r
-\r
-# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index\r
-# structure should be generated to display hierarchical information.\r
-# If the tag value is set to FRAME, a side panel will be generated\r
-# containing a tree-like index structure (just like the one that \r
-# is generated for HTML Help). For this to work a browser that supports \r
-# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, \r
-# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are \r
-# probably better off using the HTML help feature. Other possible values \r
-# for this tag are: HIERARCHIES, which will generate the Groups, Directories,\r
-# and Class Hierarchy pages using a tree view instead of an ordered list;\r
-# ALL, which combines the behavior of FRAME and HIERARCHIES; and NONE, which\r
-# disables this behavior completely. For backwards compatibility with previous\r
-# releases of Doxygen, the values YES and NO are equivalent to FRAME and NONE\r
-# respectively.\r
-\r
-GENERATE_TREEVIEW      = YES\r
-\r
-# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be \r
-# used to set the initial width (in pixels) of the frame in which the tree \r
-# is shown.\r
-\r
-TREEVIEW_WIDTH         = 250\r
-\r
-# Use this tag to change the font size of Latex formulas included \r
-# as images in the HTML documentation. The default is 10. Note that \r
-# when you change the font size after a successful doxygen run you need \r
-# to manually remove any form_*.png images from the HTML output directory \r
-# to force them to be regenerated.\r
-\r
-FORMULA_FONTSIZE       = 10\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the LaTeX output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will \r
-# generate Latex output.\r
-\r
-GENERATE_LATEX         = NO\r
-\r
-# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. \r
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
-# put in front of it. If left blank `latex' will be used as the default path.\r
-\r
-LATEX_OUTPUT           = latex\r
-\r
-# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be \r
-# invoked. If left blank `latex' will be used as the default command name.\r
-\r
-LATEX_CMD_NAME         = latex\r
-\r
-# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to \r
-# generate index for LaTeX. If left blank `makeindex' will be used as the \r
-# default command name.\r
-\r
-MAKEINDEX_CMD_NAME     = makeindex\r
-\r
-# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact \r
-# LaTeX documents. This may be useful for small projects and may help to \r
-# save some trees in general.\r
-\r
-COMPACT_LATEX          = NO\r
-\r
-# The PAPER_TYPE tag can be used to set the paper type that is used \r
-# by the printer. Possible values are: a4, a4wide, letter, legal and \r
-# executive. If left blank a4wide will be used.\r
-\r
-PAPER_TYPE             = a4wide\r
-\r
-# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX \r
-# packages that should be included in the LaTeX output.\r
-\r
-EXTRA_PACKAGES         = \r
-\r
-# The LATEX_HEADER tag can be used to specify a personal LaTeX header for \r
-# the generated latex document. The header should contain everything until \r
-# the first chapter. If it is left blank doxygen will generate a \r
-# standard header. Notice: only use this tag if you know what you are doing!\r
-\r
-LATEX_HEADER           = \r
-\r
-# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated \r
-# is prepared for conversion to pdf (using ps2pdf). The pdf file will \r
-# contain links (just like the HTML output) instead of page references \r
-# This makes the output suitable for online browsing using a pdf viewer.\r
-\r
-PDF_HYPERLINKS         = YES\r
-\r
-# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of \r
-# plain latex in the generated Makefile. Set this option to YES to get a \r
-# higher quality PDF documentation.\r
-\r
-USE_PDFLATEX           = YES\r
-\r
-# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. \r
-# command to the generated LaTeX files. This will instruct LaTeX to keep \r
-# running if errors occur, instead of asking the user for help. \r
-# This option is also used when generating formulas in HTML.\r
-\r
-LATEX_BATCHMODE        = NO\r
-\r
-# If LATEX_HIDE_INDICES is set to YES then doxygen will not \r
-# include the index chapters (such as File Index, Compound Index, etc.) \r
-# in the output.\r
-\r
-LATEX_HIDE_INDICES     = NO\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the RTF output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output \r
-# The RTF output is optimized for Word 97 and may not look very pretty with \r
-# other RTF readers or editors.\r
-\r
-GENERATE_RTF           = NO\r
-\r
-# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. \r
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
-# put in front of it. If left blank `rtf' will be used as the default path.\r
-\r
-RTF_OUTPUT             = rtf\r
-\r
-# If the COMPACT_RTF tag is set to YES Doxygen generates more compact \r
-# RTF documents. This may be useful for small projects and may help to \r
-# save some trees in general.\r
-\r
-COMPACT_RTF            = NO\r
-\r
-# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated \r
-# will contain hyperlink fields. The RTF file will \r
-# contain links (just like the HTML output) instead of page references. \r
-# This makes the output suitable for online browsing using WORD or other \r
-# programs which support those fields. \r
-# Note: wordpad (write) and others do not support links.\r
-\r
-RTF_HYPERLINKS         = NO\r
-\r
-# Load stylesheet definitions from file. Syntax is similar to doxygen's \r
-# config file, i.e. a series of assignments. You only have to provide \r
-# replacements, missing definitions are set to their default value.\r
-\r
-RTF_STYLESHEET_FILE    = \r
-\r
-# Set optional variables used in the generation of an rtf document. \r
-# Syntax is similar to doxygen's config file.\r
-\r
-RTF_EXTENSIONS_FILE    = \r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the man page output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_MAN tag is set to YES (the default) Doxygen will \r
-# generate man pages\r
-\r
-GENERATE_MAN           = NO\r
-\r
-# The MAN_OUTPUT tag is used to specify where the man pages will be put. \r
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
-# put in front of it. If left blank `man' will be used as the default path.\r
-\r
-MAN_OUTPUT             = man\r
-\r
-# The MAN_EXTENSION tag determines the extension that is added to \r
-# the generated man pages (default is the subroutine's section .3)\r
-\r
-MAN_EXTENSION          = .3\r
-\r
-# If the MAN_LINKS tag is set to YES and Doxygen generates man output, \r
-# then it will generate one additional man file for each entity \r
-# documented in the real man page(s). These additional files \r
-# only source the real man page, but without them the man command \r
-# would be unable to find the correct page. The default is NO.\r
-\r
-MAN_LINKS              = NO\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the XML output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_XML tag is set to YES Doxygen will \r
-# generate an XML file that captures the structure of \r
-# the code including all documentation.\r
-\r
-GENERATE_XML           = NO\r
-\r
-# The XML_OUTPUT tag is used to specify where the XML pages will be put. \r
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
-# put in front of it. If left blank `xml' will be used as the default path.\r
-\r
-XML_OUTPUT             = xml\r
-\r
-# The XML_SCHEMA tag can be used to specify an XML schema, \r
-# which can be used by a validating XML parser to check the \r
-# syntax of the XML files.\r
-\r
-XML_SCHEMA             = \r
-\r
-# The XML_DTD tag can be used to specify an XML DTD, \r
-# which can be used by a validating XML parser to check the \r
-# syntax of the XML files.\r
-\r
-XML_DTD                = \r
-\r
-# If the XML_PROGRAMLISTING tag is set to YES Doxygen will \r
-# dump the program listings (including syntax highlighting \r
-# and cross-referencing information) to the XML output. Note that \r
-# enabling this will significantly increase the size of the XML output.\r
-\r
-XML_PROGRAMLISTING     = YES\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options for the AutoGen Definitions output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will \r
-# generate an AutoGen Definitions (see autogen.sf.net) file \r
-# that captures the structure of the code including all \r
-# documentation. Note that this feature is still experimental \r
-# and incomplete at the moment.\r
-\r
-GENERATE_AUTOGEN_DEF   = NO\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the Perl module output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_PERLMOD tag is set to YES Doxygen will \r
-# generate a Perl module file that captures the structure of \r
-# the code including all documentation. Note that this \r
-# feature is still experimental and incomplete at the \r
-# moment.\r
-\r
-GENERATE_PERLMOD       = NO\r
-\r
-# If the PERLMOD_LATEX tag is set to YES Doxygen will generate \r
-# the necessary Makefile rules, Perl scripts and LaTeX code to be able \r
-# to generate PDF and DVI output from the Perl module output.\r
-\r
-PERLMOD_LATEX          = NO\r
-\r
-# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be \r
-# nicely formatted so it can be parsed by a human reader.  This is useful \r
-# if you want to understand what is going on.  On the other hand, if this \r
-# tag is set to NO the size of the Perl module output will be much smaller \r
-# and Perl will parse it just the same.\r
-\r
-PERLMOD_PRETTY         = YES\r
-\r
-# The names of the make variables in the generated doxyrules.make file \r
-# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. \r
-# This is useful so different doxyrules.make files included by the same \r
-# Makefile don't overwrite each other's variables.\r
-\r
-PERLMOD_MAKEVAR_PREFIX = \r
-\r
-#---------------------------------------------------------------------------\r
-# Configuration options related to the preprocessor   \r
-#---------------------------------------------------------------------------\r
-\r
-# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will \r
-# evaluate all C-preprocessor directives found in the sources and include \r
-# files.\r
-\r
-ENABLE_PREPROCESSING   = YES\r
-\r
-# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro \r
-# names in the source code. If set to NO (the default) only conditional \r
-# compilation will be performed. Macro expansion can be done in a controlled \r
-# way by setting EXPAND_ONLY_PREDEF to YES.\r
-\r
-MACRO_EXPANSION        = YES\r
-\r
-# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES \r
-# then the macro expansion is limited to the macros specified with the \r
-# PREDEFINED and EXPAND_AS_DEFINED tags.\r
-\r
-EXPAND_ONLY_PREDEF     = YES\r
-\r
-# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files \r
-# in the INCLUDE_PATH (see below) will be search if a #include is found.\r
-\r
-SEARCH_INCLUDES        = YES\r
-\r
-# The INCLUDE_PATH tag can be used to specify one or more directories that \r
-# contain include files that are not input files but should be processed by \r
-# the preprocessor.\r
-\r
-INCLUDE_PATH           = \r
-\r
-# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard \r
-# patterns (like *.h and *.hpp) to filter out the header-files in the \r
-# directories. If left blank, the patterns specified with FILE_PATTERNS will \r
-# be used.\r
-\r
-INCLUDE_FILE_PATTERNS  = \r
-\r
-# The PREDEFINED tag can be used to specify one or more macro names that \r
-# are defined before the preprocessor is started (similar to the -D option of \r
-# gcc). The argument of the tag is a list of macros of the form: name \r
-# or name=definition (no spaces). If the definition and the = are \r
-# omitted =1 is assumed. To prevent a macro definition from being \r
-# undefined via #undef or recursively expanded use the := operator \r
-# instead of the = operator.\r
-\r
-PREDEFINED             = __DOXYGEN__\r
-\r
-# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then \r
-# this tag can be used to specify a list of macro names that should be expanded. \r
-# The macro definition that is found in the sources will be used. \r
-# Use the PREDEFINED tag if you want to use a different macro definition.\r
-\r
-EXPAND_AS_DEFINED      = BUTTLOADTAG\r
-\r
-# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then \r
-# doxygen's preprocessor will remove all function-like macros that are alone \r
-# on a line, have an all uppercase name, and do not end with a semicolon. Such \r
-# function macros are typically used for boiler-plate code, and will confuse \r
-# the parser if not removed.\r
-\r
-SKIP_FUNCTION_MACROS   = YES\r
-\r
-#---------------------------------------------------------------------------\r
-# Configuration::additions related to external references   \r
-#---------------------------------------------------------------------------\r
-\r
-# The TAGFILES option can be used to specify one or more tagfiles. \r
-# Optionally an initial location of the external documentation \r
-# can be added for each tagfile. The format of a tag file without \r
-# this location is as follows: \r
-#   TAGFILES = file1 file2 ... \r
-# Adding location for the tag files is done as follows: \r
-#   TAGFILES = file1=loc1 "file2 = loc2" ... \r
-# where "loc1" and "loc2" can be relative or absolute paths or \r
-# URLs. If a location is present for each tag, the installdox tool \r
-# does not have to be run to correct the links.\r
-# Note that each tag file must have a unique name\r
-# (where the name does NOT include the path)\r
-# If a tag file is not located in the directory in which doxygen \r
-# is run, you must also specify the path to the tagfile here.\r
-\r
-TAGFILES               = \r
-\r
-# When a file name is specified after GENERATE_TAGFILE, doxygen will create \r
-# a tag file that is based on the input files it reads.\r
-\r
-GENERATE_TAGFILE       = \r
-\r
-# If the ALLEXTERNALS tag is set to YES all external classes will be listed \r
-# in the class index. If set to NO only the inherited external classes \r
-# will be listed.\r
-\r
-ALLEXTERNALS           = NO\r
-\r
-# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed \r
-# in the modules index. If set to NO, only the current project's groups will \r
-# be listed.\r
-\r
-EXTERNAL_GROUPS        = YES\r
-\r
-# The PERL_PATH should be the absolute path and name of the perl script \r
-# interpreter (i.e. the result of `which perl').\r
-\r
-PERL_PATH              = /usr/bin/perl\r
-\r
-#---------------------------------------------------------------------------\r
-# Configuration options related to the dot tool   \r
-#---------------------------------------------------------------------------\r
-\r
-# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will \r
-# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base \r
-# or super classes. Setting the tag to NO turns the diagrams off. Note that \r
-# this option is superseded by the HAVE_DOT option below. This is only a \r
-# fallback. It is recommended to install and use dot, since it yields more \r
-# powerful graphs.\r
-\r
-CLASS_DIAGRAMS         = NO\r
-\r
-# You can define message sequence charts within doxygen comments using the \msc \r
-# command. Doxygen will then run the mscgen tool (see \r
-# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the \r
-# documentation. The MSCGEN_PATH tag allows you to specify the directory where \r
-# the mscgen tool resides. If left empty the tool is assumed to be found in the \r
-# default search path.\r
-\r
-MSCGEN_PATH            = \r
-\r
-# If set to YES, the inheritance and collaboration graphs will hide \r
-# inheritance and usage relations if the target is undocumented \r
-# or is not a class.\r
-\r
-HIDE_UNDOC_RELATIONS   = YES\r
-\r
-# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is \r
-# available from the path. This tool is part of Graphviz, a graph visualization \r
-# toolkit from AT&T and Lucent Bell Labs. The other options in this section \r
-# have no effect if this option is set to NO (the default)\r
-\r
-HAVE_DOT               = NO\r
-\r
-# By default doxygen will write a font called FreeSans.ttf to the output \r
-# directory and reference it in all dot files that doxygen generates. This \r
-# font does not include all possible unicode characters however, so when you need \r
-# these (or just want a differently looking font) you can specify the font name \r
-# using DOT_FONTNAME. You need need to make sure dot is able to find the font, \r
-# which can be done by putting it in a standard location or by setting the \r
-# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory \r
-# containing the font.\r
-\r
-DOT_FONTNAME           = FreeSans\r
-\r
-# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. \r
-# The default size is 10pt.\r
-\r
-DOT_FONTSIZE           = 10\r
-\r
-# By default doxygen will tell dot to use the output directory to look for the \r
-# FreeSans.ttf font (which doxygen will put there itself). If you specify a \r
-# different font using DOT_FONTNAME you can set the path where dot \r
-# can find it using this tag.\r
-\r
-DOT_FONTPATH           = \r
-\r
-# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen \r
-# will generate a graph for each documented class showing the direct and \r
-# indirect inheritance relations. Setting this tag to YES will force the \r
-# the CLASS_DIAGRAMS tag to NO.\r
-\r
-CLASS_GRAPH            = NO\r
-\r
-# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen \r
-# will generate a graph for each documented class showing the direct and \r
-# indirect implementation dependencies (inheritance, containment, and \r
-# class references variables) of the class with other documented classes.\r
-\r
-COLLABORATION_GRAPH    = NO\r
-\r
-# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen \r
-# will generate a graph for groups, showing the direct groups dependencies\r
-\r
-GROUP_GRAPHS           = NO\r
-\r
-# If the UML_LOOK tag is set to YES doxygen will generate inheritance and \r
-# collaboration diagrams in a style similar to the OMG's Unified Modeling \r
-# Language.\r
-\r
-UML_LOOK               = NO\r
-\r
-# If set to YES, the inheritance and collaboration graphs will show the \r
-# relations between templates and their instances.\r
-\r
-TEMPLATE_RELATIONS     = NO\r
-\r
-# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT \r
-# tags are set to YES then doxygen will generate a graph for each documented \r
-# file showing the direct and indirect include dependencies of the file with \r
-# other documented files.\r
-\r
-INCLUDE_GRAPH          = NO\r
-\r
-# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and \r
-# HAVE_DOT tags are set to YES then doxygen will generate a graph for each \r
-# documented header file showing the documented files that directly or \r
-# indirectly include this file.\r
-\r
-INCLUDED_BY_GRAPH      = NO\r
-\r
-# If the CALL_GRAPH and HAVE_DOT options are set to YES then \r
-# doxygen will generate a call dependency graph for every global function \r
-# or class method. Note that enabling this option will significantly increase \r
-# the time of a run. So in most cases it will be better to enable call graphs \r
-# for selected functions only using the \callgraph command.\r
-\r
-CALL_GRAPH             = NO\r
-\r
-# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then \r
-# doxygen will generate a caller dependency graph for every global function \r
-# or class method. Note that enabling this option will significantly increase \r
-# the time of a run. So in most cases it will be better to enable caller \r
-# graphs for selected functions only using the \callergraph command.\r
-\r
-CALLER_GRAPH           = NO\r
-\r
-# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen \r
-# will graphical hierarchy of all classes instead of a textual one.\r
-\r
-GRAPHICAL_HIERARCHY    = NO\r
-\r
-# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES \r
-# then doxygen will show the dependencies a directory has on other directories \r
-# in a graphical way. The dependency relations are determined by the #include\r
-# relations between the files in the directories.\r
-\r
-DIRECTORY_GRAPH        = NO\r
-\r
-# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images \r
-# generated by dot. Possible values are png, jpg, or gif\r
-# If left blank png will be used.\r
-\r
-DOT_IMAGE_FORMAT       = png\r
-\r
-# The tag DOT_PATH can be used to specify the path where the dot tool can be \r
-# found. If left blank, it is assumed the dot tool can be found in the path.\r
-\r
-DOT_PATH               = "C:/Program Files/Graphviz2.18/bin"\r
-\r
-# The DOTFILE_DIRS tag can be used to specify one or more directories that \r
-# contain dot files that are included in the documentation (see the \r
-# \dotfile command).\r
-\r
-DOTFILE_DIRS           = \r
-\r
-# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of \r
-# nodes that will be shown in the graph. If the number of nodes in a graph \r
-# becomes larger than this value, doxygen will truncate the graph, which is \r
-# visualized by representing a node as a red box. Note that doxygen if the \r
-# number of direct children of the root node in a graph is already larger than \r
-# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note \r
-# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.\r
-\r
-DOT_GRAPH_MAX_NODES    = 15\r
-\r
-# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the \r
-# graphs generated by dot. A depth value of 3 means that only nodes reachable \r
-# from the root by following a path via at most 3 edges will be shown. Nodes \r
-# that lay further from the root node will be omitted. Note that setting this \r
-# option to 1 or 2 may greatly reduce the computation time needed for large \r
-# code bases. Also note that the size of a graph can be further restricted by \r
-# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.\r
-\r
-MAX_DOT_GRAPH_DEPTH    = 2\r
-\r
-# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent \r
-# background. This is disabled by default, because dot on Windows does not \r
-# seem to support this out of the box. Warning: Depending on the platform used, \r
-# enabling this option may lead to badly anti-aliased labels on the edges of \r
-# a graph (i.e. they become hard to read).\r
-\r
-DOT_TRANSPARENT        = YES\r
-\r
-# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output \r
-# files in one run (i.e. multiple -o and -T options on the command line). This \r
-# makes dot run faster, but since only newer versions of dot (>1.8.10) \r
-# support this, this feature is disabled by default.\r
-\r
-DOT_MULTI_TARGETS      = NO\r
-\r
-# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will \r
-# generate a legend page explaining the meaning of the various boxes and \r
-# arrows in the dot generated graphs.\r
-\r
-GENERATE_LEGEND        = YES\r
-\r
-# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will \r
-# remove the intermediate dot files that are used to generate \r
-# the various graphs.\r
-\r
-DOT_CLEANUP            = YES\r
-\r
-#---------------------------------------------------------------------------\r
-# Configuration::additions related to the search engine   \r
-#---------------------------------------------------------------------------\r
-\r
-# The SEARCHENGINE tag specifies whether or not a search engine should be \r
-# used. If set to NO the values of all tags below this one will be ignored.\r
-\r
-SEARCHENGINE           = NO\r
diff --git a/Demos/Device/Mouse/Mouse.aps b/Demos/Device/Mouse/Mouse.aps
deleted file mode 100644 (file)
index 3ae1637..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<AVRStudio><MANAGEMENT><ProjectName>Mouse</ProjectName><Created>30-Sep-2008 14:13:52</Created><LastEdit>30-Sep-2008 14:14:08</LastEdit><ICON>241</ICON><ProjectType>0</ProjectType><Created>30-Sep-2008 14:13:52</Created><Version>4</Version><Build>4, 14, 0, 589</Build><ProjectTypeName>AVR GCC</ProjectTypeName></MANAGEMENT><CODE_CREATION><ObjectFile></ObjectFile><EntryFile></EntryFile><SaveFolder>C:\Users\Dean\Documents\Electronics\Projects\WORK\MyUSBWORK\Demos\Mouse\</SaveFolder></CODE_CREATION><DEBUG_TARGET><CURRENT_TARGET>JTAGICE mkII</CURRENT_TARGET><CURRENT_PART>AT90USB1287.xml</CURRENT_PART><BREAKPOINTS></BREAKPOINTS><IO_EXPAND><HIDE>false</HIDE></IO_EXPAND><REGISTERNAMES><Register>R00</Register><Register>R01</Register><Register>R02</Register><Register>R03</Register><Register>R04</Register><Register>R05</Register><Register>R06</Register><Register>R07</Register><Register>R08</Register><Register>R09</Register><Register>R10</Register><Register>R11</Register><Register>R12</Register><Register>R13</Register><Register>R14</Register><Register>R15</Register><Register>R16</Register><Register>R17</Register><Register>R18</Register><Register>R19</Register><Register>R20</Register><Register>R21</Register><Register>R22</Register><Register>R23</Register><Register>R24</Register><Register>R25</Register><Register>R26</Register><Register>R27</Register><Register>R28</Register><Register>R29</Register><Register>R30</Register><Register>R31</Register></REGISTERNAMES><COM>Auto</COM><COMType>0</COMType><WATCHNUM>0</WATCHNUM><WATCHNAMES><Pane0></Pane0><Pane1></Pane1><Pane2></Pane2><Pane3></Pane3></WATCHNAMES><BreakOnTrcaeFull>0</BreakOnTrcaeFull></DEBUG_TARGET><Debugger><Triggers></Triggers></Debugger><AVRGCCPLUGIN><FILES><SOURCEFILE>Descriptors.c</SOURCEFILE><SOURCEFILE>Mouse.c</SOURCEFILE><HEADERFILE>Descriptors.h</HEADERFILE><HEADERFILE>Mouse.h</HEADERFILE><OTHERFILE>makefile</OTHERFILE></FILES><CONFIGS><CONFIG><NAME>default</NAME><USESEXTERNALMAKEFILE>YES</USESEXTERNALMAKEFILE><EXTERNALMAKEFILE>makefile</EXTERNALMAKEFILE><PART>at90usb1287</PART><HEX>1</HEX><LIST>1</LIST><MAP>1</MAP><OUTPUTFILENAME>Mouse.elf</OUTPUTFILENAME><OUTPUTDIR>default\</OUTPUTDIR><ISDIRTY>1</ISDIRTY><OPTIONS/><INCDIRS/><LIBDIRS/><LIBS/><LINKOBJECTS/><OPTIONSFORALL>-Wall -gdwarf-2 -std=gnu99 -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums</OPTIONSFORALL><LINKEROPTIONS></LINKEROPTIONS><SEGMENTS/></CONFIG></CONFIGS><LASTCONFIG>default</LASTCONFIG><USES_WINAVR>1</USES_WINAVR><GCC_LOC>C:\WinAVR-20080512\bin\avr-gcc.exe</GCC_LOC><MAKE_LOC>C:\WinAVR-20080512\utils\bin\make.exe</MAKE_LOC></AVRGCCPLUGIN><IOView><usergroups/><sort sorted="0" column="0" ordername="0" orderaddress="0" ordergroup="0"/></IOView><Files></Files><Events><Bookmarks></Bookmarks></Events><Trace><Filters></Filters></Trace></AVRStudio>\r
diff --git a/Demos/Device/Mouse/Mouse.c b/Demos/Device/Mouse/Mouse.c
deleted file mode 100644 (file)
index f5bd931..0000000
+++ /dev/null
@@ -1,169 +0,0 @@
-/*\r
-             LUFA Library\r
-     Copyright (C) Dean Camera, 2009.\r
-              \r
-  dean [at] fourwalledcubicle [dot] com\r
-      www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
-  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
-  Permission to use, copy, modify, and distribute this software\r
-  and its documentation for any purpose and without fee is hereby\r
-  granted, provided that the above copyright notice appear in all\r
-  copies and that both that the copyright notice and this\r
-  permission notice and warranty disclaimer appear in supporting\r
-  documentation, and that the name of the author not be used in\r
-  advertising or publicity pertaining to distribution of the\r
-  software without specific, written prior permission.\r
-\r
-  The author disclaim all warranties with regard to this\r
-  software, including all implied warranties of merchantability\r
-  and fitness.  In no event shall the author be liable for any\r
-  special, indirect or consequential damages or any damages\r
-  whatsoever resulting from loss of use, data or profits, whether\r
-  in an action of contract, negligence or other tortious action,\r
-  arising out of or in connection with the use or performance of\r
-  this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- *  Main source file for the Mouse demo. This file contains the main tasks of\r
- *  the demo and is responsible for the initial application hardware configuration.\r
- */\r
-\r
-#include "Mouse.h"\r
-\r
-/** LUFA HID Class driver interface configuration and state information. This structure is\r
- *  passed to all HID Class driver functions, so that multiple instances of the same class\r
- *  within a device can be differentiated from one another.\r
- */\r
-USB_ClassInfo_HID_t Mouse_HID_Interface =\r
-       {\r
-               .InterfaceNumber         = 0,\r
-\r
-               .ReportINEndpointNumber  = MOUSE_EPNUM,\r
-               .ReportINEndpointSize    = MOUSE_EPSIZE,\r
-\r
-               .ReportINBufferSize      = sizeof(USB_MouseReport_Data_t),\r
-       };\r
-\r
-/** Main program entry point. This routine contains the overall program flow, including initial\r
- *  setup of all components and the main program loop.\r
- */\r
-int main(void)\r
-{      \r
-       SetupHardware();\r
-       \r
-       LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);\r
-\r
-       for (;;)\r
-       {\r
-               USB_HID_USBTask(&Mouse_HID_Interface);\r
-               USB_USBTask();\r
-       }\r
-}\r
-\r
-/** Configures the board hardware and chip peripherals for the demo's functionality. */\r
-void SetupHardware(void)\r
-{\r
-       /* Disable watchdog if enabled by bootloader/fuses */\r
-       MCUSR &= ~(1 << WDRF);\r
-       wdt_disable();\r
-\r
-       /* Disable clock division */\r
-       clock_prescale_set(clock_div_1);\r
-\r
-       /* Hardware Initialization */\r
-       Joystick_Init();\r
-       LEDs_Init();\r
-       Buttons_Init();\r
-       USB_Init();\r
-\r
-       /* Millisecond timer initialization, with output compare interrupt enabled for the idle timing */\r
-       OCR0A  = ((F_CPU / 64) / 1000);\r
-       TCCR0A = (1 << WGM01);\r
-       TCCR0B = ((1 << CS01) | (1 << CS00));\r
-       TIMSK0 = (1 << OCIE0A);\r
-}\r
-\r
-/** Event handler for the library USB Connection event. */\r
-void EVENT_USB_Connect(void)\r
-{\r
-    LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING);\r
-}\r
-\r
-/** Event handler for the library USB Disconnection event. */\r
-void EVENT_USB_Disconnect(void)\r
-{\r
-    LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);\r
-}\r
-\r
-/** Event handler for the library USB Configuration Changed event. */\r
-void EVENT_USB_ConfigurationChanged(void)\r
-{\r
-       LEDs_SetAllLEDs(LEDMASK_USB_READY);\r
-\r
-       if (!(USB_HID_ConfigureEndpoints(&Mouse_HID_Interface)))\r
-         LEDs_SetAllLEDs(LEDMASK_USB_ERROR);\r
-}\r
-\r
-/** Event handler for the library USB Unhandled Control Packet event. */\r
-void EVENT_USB_UnhandledControlPacket(void)\r
-{\r
-       USB_HID_ProcessControlPacket(&Mouse_HID_Interface);\r
-}\r
-\r
-/** ISR to keep track of each millisecond interrupt, for determining the HID class idle period remaining when set. */\r
-ISR(TIMER0_COMPA_vect, ISR_BLOCK)\r
-{\r
-       if (Mouse_HID_Interface.IdleMSRemaining)\r
-         Mouse_HID_Interface.IdleMSRemaining--;\r
-}\r
-\r
-/** HID class driver callback function for the creation of HID reports to the host.\r
- *\r
- *  \param HIDInterfaceInfo  Pointer to the HID class interface configuration structure being referenced\r
- *  \param ReportData  Pointer to a buffer where the created report should be stored\r
- *\r
- *  \return Number of bytes written in the report (or zero if no report is to be sent\r
- */\r
-uint16_t CALLBACK_USB_HID_CreateNextHIDReport(USB_ClassInfo_HID_t* HIDInterfaceInfo, uint8_t* ReportID, void* ReportData)\r
-{\r
-       USB_MouseReport_Data_t* MouseReport = (USB_MouseReport_Data_t*)ReportData;\r
-               \r
-       uint8_t JoyStatus_LCL    = Joystick_GetStatus();\r
-       uint8_t ButtonStatus_LCL = Buttons_GetStatus();\r
-\r
-       if (JoyStatus_LCL & JOY_UP)\r
-         MouseReport->Y = -1;\r
-       else if (JoyStatus_LCL & JOY_DOWN)\r
-         MouseReport->Y =  1;\r
-\r
-       if (JoyStatus_LCL & JOY_RIGHT)\r
-         MouseReport->X =  1;\r
-       else if (JoyStatus_LCL & JOY_LEFT)\r
-         MouseReport->X = -1;\r
-\r
-       if (JoyStatus_LCL & JOY_PRESS)\r
-         MouseReport->Button  = (1 << 0);\r
-         \r
-       if (ButtonStatus_LCL & BUTTONS_BUTTON1)\r
-         MouseReport->Button |= (1 << 1);\r
-       \r
-       return sizeof(USB_MouseReport_Data_t);\r
-}\r
-\r
-/** HID class driver callback function for the processing of HID reports from the host.\r
- *\r
- *  \param HIDInterfaceInfo  Pointer to the HID class interface configuration structure being referenced\r
- *  \param ReportData  Pointer to a buffer where the created report has been stored\r
- *  \param ReportSize  Size in bytes of the received HID report\r
- */\r
-void CALLBACK_USB_HID_ProcessReceivedHIDReport(USB_ClassInfo_HID_t* HIDInterfaceInfo, uint8_t ReportID,\r
-                                               void* ReportData, uint16_t ReportSize)\r
-{\r
-       // Unused (but mandatory for the HID class driver) in this demo, since there are no Host->Device reports\r
-}\r
diff --git a/Demos/Device/Mouse/Mouse.h b/Demos/Device/Mouse/Mouse.h
deleted file mode 100644 (file)
index 6de20ee..0000000
+++ /dev/null
@@ -1,92 +0,0 @@
-/*\r
-             LUFA Library\r
-     Copyright (C) Dean Camera, 2009.\r
-              \r
-  dean [at] fourwalledcubicle [dot] com\r
-      www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
-  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
-  Permission to use, copy, modify, and distribute this software\r
-  and its documentation for any purpose and without fee is hereby\r
-  granted, provided that the above copyright notice appear in all\r
-  copies and that both that the copyright notice and this\r
-  permission notice and warranty disclaimer appear in supporting\r
-  documentation, and that the name of the author not be used in\r
-  advertising or publicity pertaining to distribution of the\r
-  software without specific, written prior permission.\r
-\r
-  The author disclaim all warranties with regard to this\r
-  software, including all implied warranties of merchantability\r
-  and fitness.  In no event shall the author be liable for any\r
-  special, indirect or consequential damages or any damages\r
-  whatsoever resulting from loss of use, data or profits, whether\r
-  in an action of contract, negligence or other tortious action,\r
-  arising out of or in connection with the use or performance of\r
-  this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- *  Header file for Mouse.c.\r
- */\r
-\r
-#ifndef _MOUSE_H_\r
-#define _MOUSE_H_\r
-\r
-       /* Includes: */\r
-               #include <avr/io.h>\r
-               #include <avr/wdt.h>\r
-               #include <avr/interrupt.h>\r
-               #include <avr/power.h>\r
-               #include <stdbool.h>\r
-               #include <string.h>\r
-               \r
-               #include "Descriptors.h"\r
-\r
-               #include <LUFA/Version.h>\r
-               #include <LUFA/Drivers/Board/Joystick.h>\r
-               #include <LUFA/Drivers/Board/LEDs.h>\r
-               #include <LUFA/Drivers/Board/Buttons.h>\r
-               #include <LUFA/Drivers/USB/USB.h>\r
-               #include <LUFA/Drivers/USB/Class/Device/HID.h>\r
-\r
-       /* Type Defines: */\r
-               /** Type define for the mouse HID report structure, for creating and sending HID reports to the host PC.\r
-                *  This mirrors the layout described to the host in the HID report descriptor, in Descriptors.c.\r
-                */\r
-               typedef struct\r
-               {\r
-                       uint8_t Button; /**< Bit mask of the currently pressed mouse buttons */\r
-                       int8_t  X; /**< Current mouse delta X movement, as a signed 8-bit integer */\r
-                       int8_t  Y; /**< Current mouse delta Y movement, as a signed 8-bit integer */\r
-               } USB_MouseReport_Data_t;\r
-               \r
-       /* Macros: */\r
-               /** LED mask for the library LED driver, to indicate that the USB interface is not ready. */\r
-               #define LEDMASK_USB_NOTREADY      LEDS_LED1\r
-\r
-               /** LED mask for the library LED driver, to indicate that the USB interface is enumerating. */\r
-               #define LEDMASK_USB_ENUMERATING  (LEDS_LED2 | LEDS_LED3)\r
-\r
-               /** LED mask for the library LED driver, to indicate that the USB interface is ready. */\r
-               #define LEDMASK_USB_READY        (LEDS_LED2 | LEDS_LED4)\r
-\r
-               /** LED mask for the library LED driver, to indicate that an error has occurred in the USB interface. */\r
-               #define LEDMASK_USB_ERROR        (LEDS_LED1 | LEDS_LED3)\r
-                       \r
-       /* Function Prototypes: */\r
-               void SetupHardware(void);\r
-\r
-               void EVENT_USB_Connect(void);\r
-               void EVENT_USB_Disconnect(void);\r
-               void EVENT_USB_ConfigurationChanged(void);\r
-               void EVENT_USB_UnhandledControlPacket(void);\r
-\r
-               uint16_t CALLBACK_USB_HID_CreateNextHIDReport(USB_ClassInfo_HID_t* HIDInterfaceInfo, uint8_t* ReportID, void* ReportData);\r
-               void     CALLBACK_USB_HID_ProcessReceivedHIDReport(USB_ClassInfo_HID_t* HIDInterfaceInfo, uint8_t ReportID, \r
-                                                                  void* ReportData, uint16_t ReportSize);\r
-\r
-#endif\r
diff --git a/Demos/Device/Mouse/Mouse.txt b/Demos/Device/Mouse/Mouse.txt
deleted file mode 100644 (file)
index 07982a7..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
-/** \file\r
- *\r
- *  This file contains special DoxyGen information for the generation of the main page and other special\r
- *  documentation pages. It is not a project source file.\r
- */\r
\r
-/** \mainpage Mouse Device Demo\r
- *\r
- *  \section SSec_Info USB Information:\r
- *\r
- *  The following table gives a rundown of the USB utilization of this demo.\r
- *\r
- *  <table>\r
- *   <tr>\r
- *    <td><b>USB Mode:</b></td>\r
- *    <td>Device</td>\r
- *   </tr>\r
- *   <tr>\r
- *    <td><b>USB Class:</b></td>\r
- *    <td>Human Interface Device (HID)</td>\r
- *   </tr>\r
- *   <tr> \r
- *    <td><b>USB Subclass:</b></td>\r
- *    <td>N/A</td>\r
- *   </tr>\r
- *   <tr>\r
- *    <td><b>Relevant Standards:</b></td>\r
- *    <td>USBIF HID Specification, USBIF HID Usage Tables</td>\r
- *   </tr>\r
- *   <tr>\r
- *    <td><b>Usable Speeds:</b></td>\r
- *    <td>Low Speed Mode, Full Speed Mode</td>\r
- *   </tr>\r
- *  </table>\r
- *\r
- *  \section SSec_Description Project Description: \r
- *\r
- *  Mouse demonstration application. This gives a simple reference\r
- *  application for implementing a USB Mouse using the basic USB HID\r
- *  drivers in all modern OSes (i.e. no special drivers required). It is\r
- *  boot protocol compatible, and thus works under compatible BIOS as if\r
- *  it was a native mouse (e.g. PS/2).\r
- *  \r
- *  On start-up the system will automatically enumerate and function\r
- *  as a mouse when the USB connection to a host is present. To use\r
- *  the mouse, move the joystick to move the pointer, and push the\r
- *  joystick inwards to simulate a left-button click. The HWB serves as\r
- *  the right mouse button.\r
- *\r
- *  \section SSec_Options Project Options\r
- *\r
- *  The following defines can be found in this demo, which can control the demo behaviour when defined, or changed in value.\r
- *\r
- *  <table>\r
- *   <tr>\r
- *    <td>\r
- *     None\r
- *    </td>\r
- *   </tr>\r
- *  </table>\r
- */\r
diff --git a/Demos/Device/Mouse/makefile b/Demos/Device/Mouse/makefile
deleted file mode 100644 (file)
index 4c18f9d..0000000
+++ /dev/null
@@ -1,732 +0,0 @@
-# Hey Emacs, this is a -*- makefile -*-\r
-#----------------------------------------------------------------------------\r
-# WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al.\r
-#  >> Modified for use with the LUFA project. <<\r
-#\r
-# Released to the Public Domain\r
-#\r
-# Additional material for this makefile was written by:\r
-# Peter Fleury\r
-# Tim Henigan\r
-# Colin O'Flynn\r
-# Reiner Patommel\r
-# Markus Pfaff\r
-# Sander Pool\r
-# Frederik Rouleau\r
-# Carlos Lamas\r
-# Dean Camera\r
-# Opendous Inc.\r
-# Denver Gingerich\r
-#\r
-#----------------------------------------------------------------------------\r
-# On command line:\r
-#\r
-# make all = Make software.\r
-#\r
-# make clean = Clean out built project files.\r
-#\r
-# make coff = Convert ELF to AVR COFF.\r
-#\r
-# make extcoff = Convert ELF to AVR Extended COFF.\r
-#\r
-# make program = Download the hex file to the device, using avrdude.\r
-#                Please customize the avrdude settings below first!\r
-#\r
-# make dfu = Download the hex file to the device, using dfu-programmer (must\r
-#            have dfu-programmer installed).\r
-#\r
-# make flip = Download the hex file to the device, using Atmel FLIP (must\r
-#             have Atmel FLIP installed).\r
-#\r
-# make dfu-ee = Download the eeprom file to the device, using dfu-programmer\r
-#               (must have dfu-programmer installed).\r
-#\r
-# make flip-ee = Download the eeprom file to the device, using Atmel FLIP\r
-#                (must have Atmel FLIP installed).\r
-#\r
-# make doxygen = Generate DoxyGen documentation for the project (must have\r
-#                DoxyGen installed)\r
-#\r
-# make debug = Start either simulavr or avarice as specified for debugging, \r
-#              with avr-gdb or avr-insight as the front end for debugging.\r
-#\r
-# make filename.s = Just compile filename.c into the assembler code only.\r
-#\r
-# make filename.i = Create a preprocessed source file for use in submitting\r
-#                   bug reports to the GCC project.\r
-#\r
-# To rebuild project do "make clean" then "make all".\r
-#----------------------------------------------------------------------------\r
-\r
-\r
-# MCU name\r
-MCU = at90usb1287\r
-\r
-\r
-# Target board (see library "Board Types" documentation, USER or blank for projects not requiring\r
-# LUFA board drivers). If USER is selected, put custom board drivers in a directory called \r
-# "Board" inside the application directory.\r
-BOARD  = USBKEY\r
-\r
-\r
-# Processor frequency.\r
-#     This will define a symbol, F_CPU, in all source code files equal to the \r
-#     processor frequency. You can then use this symbol in your source code to \r
-#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done\r
-#     automatically to create a 32-bit value in your source code.\r
-#     Typical values are:\r
-#         F_CPU =  1000000\r
-#         F_CPU =  1843200\r
-#         F_CPU =  2000000\r
-#         F_CPU =  3686400\r
-#         F_CPU =  4000000\r
-#         F_CPU =  7372800\r
-#         F_CPU =  8000000\r
-#         F_CPU = 11059200\r
-#         F_CPU = 14745600\r
-#         F_CPU = 16000000\r
-#         F_CPU = 18432000\r
-#         F_CPU = 20000000\r
-F_CPU = 8000000\r
-\r
-\r
-# Input clock frequency.\r
-#     This will define a symbol, F_CLOCK, in all source code files equal to the \r
-#     input clock frequency (before any prescaling is performed). This value may\r
-#     differ from F_CPU if prescaling is used on the latter, and is required as the\r
-#     raw input clock is fed directly to the PLL sections of the AVR for high speed\r
-#     clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'\r
-#     at the end, this will be done automatically to create a 32-bit value in your\r
-#     source code.\r
-#\r
-#     If no clock division is performed on the input clock inside the AVR (via the\r
-#     CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.\r
-F_CLOCK = 8000000\r
-\r
-\r
-# Output format. (can be srec, ihex, binary)\r
-FORMAT = ihex\r
-\r
-\r
-# Target file name (without extension).\r
-TARGET = Mouse\r
-\r
-\r
-# Object files directory\r
-#     To put object files in current directory, use a dot (.), do NOT make\r
-#     this an empty or blank macro!\r
-OBJDIR = .\r
-\r
-\r
-# Path to the LUFA library\r
-LUFA_PATH = ../../..\r
-\r
-\r
-# List C source files here. (C dependencies are automatically generated.)\r
-SRC = $(TARGET).c                                                 \\r
-         Descriptors.c                                               \\r
-         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/DevChapter9.c        \\r
-         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Endpoint.c           \\r
-         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Host.c               \\r
-         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/HostChapter9.c       \\r
-         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/LowLevel.c           \\r
-         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Pipe.c               \\r
-         $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/Events.c            \\r
-         $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBInterrupt.c      \\r
-         $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBTask.c           \\r
-         $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/ConfigDescriptor.c  \\r
-         $(LUFA_PATH)/LUFA/Drivers/USB/Class/Device/HID.c            \\r
\r
-# List C++ source files here. (C dependencies are automatically generated.)\r
-CPPSRC = \r
-\r
-\r
-# List Assembler source files here.\r
-#     Make them always end in a capital .S.  Files ending in a lowercase .s\r
-#     will not be considered source files but generated files (assembler\r
-#     output from the compiler), and will be deleted upon "make clean"!\r
-#     Even though the DOS/Win* filesystem matches both .s and .S the same,\r
-#     it will preserve the spelling of the filenames, and gcc itself does\r
-#     care about how the name is spelled on its command-line.\r
-ASRC =\r
-\r
-\r
-# Optimization level, can be [0, 1, 2, 3, s]. \r
-#     0 = turn off optimization. s = optimize for size.\r
-#     (Note: 3 is not always the best optimization level. See avr-libc FAQ.)\r
-OPT = s\r
-\r
-\r
-# Debugging format.\r
-#     Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs.\r
-#     AVR Studio 4.10 requires dwarf-2.\r
-#     AVR [Extended] COFF format requires stabs, plus an avr-objcopy run.\r
-DEBUG = dwarf-2\r
-\r
-\r
-# List any extra directories to look for include files here.\r
-#     Each directory must be seperated by a space.\r
-#     Use forward slashes for directory separators.\r
-#     For a directory that has spaces, enclose it in quotes.\r
-EXTRAINCDIRS = $(LUFA_PATH)/\r
-\r
-\r
-# Compiler flag to set the C Standard level.\r
-#     c89   = "ANSI" C\r
-#     gnu89 = c89 plus GCC extensions\r
-#     c99   = ISO C99 standard (not yet fully implemented)\r
-#     gnu99 = c99 plus GCC extensions\r
-CSTANDARD = -std=gnu99\r
-\r
-\r
-# Place -D or -U options here for C sources\r
-CDEFS  = -DF_CPU=$(F_CPU)UL -DF_CLOCK=$(F_CLOCK)UL -DBOARD=BOARD_$(BOARD)\r
-CDEFS += -DUSE_NONSTANDARD_DESCRIPTOR_NAMES -DUSB_DEVICE_ONLY\r
-CDEFS += -DFIXED_CONTROL_ENDPOINT_SIZE=8 -DUSE_SINGLE_DEVICE_CONFIGURATION\r
-CDEFS += -DUSE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)"\r
-\r
-# Place -D or -U options here for ASM sources\r
-ADEFS = -DF_CPU=$(F_CPU)\r
-\r
-\r
-# Place -D or -U options here for C++ sources\r
-CPPDEFS = -DF_CPU=$(F_CPU)UL\r
-#CPPDEFS += -D__STDC_LIMIT_MACROS\r
-#CPPDEFS += -D__STDC_CONSTANT_MACROS\r
-\r
-\r
-\r
-#---------------- Compiler Options C ----------------\r
-#  -g*:          generate debugging information\r
-#  -O*:          optimization level\r
-#  -f...:        tuning, see GCC manual and avr-libc documentation\r
-#  -Wall...:     warning level\r
-#  -Wa,...:      tell GCC to pass this to the assembler.\r
-#    -adhlns...: create assembler listing\r
-CFLAGS = -g$(DEBUG)\r
-CFLAGS += $(CDEFS)\r
-CFLAGS += -O$(OPT)\r
-CFLAGS += -funsigned-char\r
-CFLAGS += -funsigned-bitfields\r
-CFLAGS += -ffunction-sections\r
-CFLAGS += -fpack-struct\r
-CFLAGS += -fshort-enums\r
-CFLAGS += -finline-limit=20\r
-CFLAGS += -Wall\r
-CFLAGS += -Wstrict-prototypes\r
-#CFLAGS += -mshort-calls\r
-CFLAGS += -Wundef\r
-#CFLAGS += -fno-unit-at-a-time\r
-#CFLAGS += -Wunreachable-code\r
-#CFLAGS += -Wsign-compare\r
-CFLAGS += -Wa,-adhlns=$(<:%.c=$(OBJDIR)/%.lst)\r
-CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))\r
-CFLAGS += $(CSTANDARD)\r
-\r
-\r
-#---------------- Compiler Options C++ ----------------\r
-#  -g*:          generate debugging information\r
-#  -O*:          optimization level\r
-#  -f...:        tuning, see GCC manual and avr-libc documentation\r
-#  -Wall...:     warning level\r
-#  -Wa,...:      tell GCC to pass this to the assembler.\r
-#    -adhlns...: create assembler listing\r
-CPPFLAGS = -g$(DEBUG)\r
-CPPFLAGS += $(CPPDEFS)\r
-CPPFLAGS += -O$(OPT)\r
-CPPFLAGS += -funsigned-char\r
-CPPFLAGS += -funsigned-bitfields\r
-CPPFLAGS += -fpack-struct\r
-CPPFLAGS += -fshort-enums\r
-CPPFLAGS += -fno-exceptions\r
-CPPFLAGS += -Wall\r
-CFLAGS += -Wundef\r
-#CPPFLAGS += -mshort-calls\r
-#CPPFLAGS += -fno-unit-at-a-time\r
-#CPPFLAGS += -Wstrict-prototypes\r
-#CPPFLAGS += -Wunreachable-code\r
-#CPPFLAGS += -Wsign-compare\r
-CPPFLAGS += -Wa,-adhlns=$(<:%.cpp=$(OBJDIR)/%.lst)\r
-CPPFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))\r
-#CPPFLAGS += $(CSTANDARD)\r
-\r
-\r
-#---------------- Assembler Options ----------------\r
-#  -Wa,...:   tell GCC to pass this to the assembler.\r
-#  -adhlns:   create listing\r
-#  -gstabs:   have the assembler create line number information; note that\r
-#             for use in COFF files, additional information about filenames\r
-#             and function names needs to be present in the assembler source\r
-#             files -- see avr-libc docs [FIXME: not yet described there]\r
-#  -listing-cont-lines: Sets the maximum number of continuation lines of hex \r
-#       dump that will be displayed for a given single line of source input.\r
-ASFLAGS = $(ADEFS) -Wa,-adhlns=$(<:%.S=$(OBJDIR)/%.lst),-gstabs,--listing-cont-lines=100\r
-\r
-\r
-#---------------- Library Options ----------------\r
-# Minimalistic printf version\r
-PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min\r
-\r
-# Floating point printf version (requires MATH_LIB = -lm below)\r
-PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt\r
-\r
-# If this is left blank, then it will use the Standard printf version.\r
-PRINTF_LIB = \r
-#PRINTF_LIB = $(PRINTF_LIB_MIN)\r
-#PRINTF_LIB = $(PRINTF_LIB_FLOAT)\r
-\r
-\r
-# Minimalistic scanf version\r
-SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min\r
-\r
-# Floating point + %[ scanf version (requires MATH_LIB = -lm below)\r
-SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt\r
-\r
-# If this is left blank, then it will use the Standard scanf version.\r
-SCANF_LIB = \r
-#SCANF_LIB = $(SCANF_LIB_MIN)\r
-#SCANF_LIB = $(SCANF_LIB_FLOAT)\r
-\r
-\r
-MATH_LIB = -lm\r
-\r
-\r
-# List any extra directories to look for libraries here.\r
-#     Each directory must be seperated by a space.\r
-#     Use forward slashes for directory separators.\r
-#     For a directory that has spaces, enclose it in quotes.\r
-EXTRALIBDIRS = \r
-\r
-\r
-\r
-#---------------- External Memory Options ----------------\r
-\r
-# 64 KB of external RAM, starting after internal RAM (ATmega128!),\r
-# used for variables (.data/.bss) and heap (malloc()).\r
-#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff\r
-\r
-# 64 KB of external RAM, starting after internal RAM (ATmega128!),\r
-# only used for heap (malloc()).\r
-#EXTMEMOPTS = -Wl,--section-start,.data=0x801100,--defsym=__heap_end=0x80ffff\r
-\r
-EXTMEMOPTS =\r
-\r
-\r
-\r
-#---------------- Linker Options ----------------\r
-#  -Wl,...:     tell GCC to pass this to linker.\r
-#    -Map:      create map file\r
-#    --cref:    add cross reference to  map file\r
-LDFLAGS = -Wl,-Map=$(TARGET).map,--cref\r
-LDFLAGS += -Wl,--relax \r
-LDFLAGS += -Wl,--gc-sections\r
-LDFLAGS += $(EXTMEMOPTS)\r
-LDFLAGS += $(patsubst %,-L%,$(EXTRALIBDIRS))\r
-LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)\r
-#LDFLAGS += -T linker_script.x\r
-\r
-\r
-\r
-#---------------- Programming Options (avrdude) ----------------\r
-\r
-# Programming hardware: alf avr910 avrisp bascom bsd \r
-# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500\r
-#\r
-# Type: avrdude -c ?\r
-# to get a full listing.\r
-#\r
-AVRDUDE_PROGRAMMER = jtagmkII\r
-\r
-# com1 = serial port. Use lpt1 to connect to parallel port.\r
-AVRDUDE_PORT = usb\r
-\r
-AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex\r
-#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep\r
-\r
-\r
-# Uncomment the following if you want avrdude's erase cycle counter.\r
-# Note that this counter needs to be initialized first using -Yn,\r
-# see avrdude manual.\r
-#AVRDUDE_ERASE_COUNTER = -y\r
-\r
-# Uncomment the following if you do /not/ wish a verification to be\r
-# performed after programming the device.\r
-#AVRDUDE_NO_VERIFY = -V\r
-\r
-# Increase verbosity level.  Please use this when submitting bug\r
-# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude> \r
-# to submit bug reports.\r
-#AVRDUDE_VERBOSE = -v -v\r
-\r
-AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)\r
-AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY)\r
-AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE)\r
-AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER)\r
-\r
-\r
-\r
-#---------------- Debugging Options ----------------\r
-\r
-# For simulavr only - target MCU frequency.\r
-DEBUG_MFREQ = $(F_CPU)\r
-\r
-# Set the DEBUG_UI to either gdb or insight.\r
-# DEBUG_UI = gdb\r
-DEBUG_UI = insight\r
-\r
-# Set the debugging back-end to either avarice, simulavr.\r
-DEBUG_BACKEND = avarice\r
-#DEBUG_BACKEND = simulavr\r
-\r
-# GDB Init Filename.\r
-GDBINIT_FILE = __avr_gdbinit\r
-\r
-# When using avarice settings for the JTAG\r
-JTAG_DEV = /dev/com1\r
-\r
-# Debugging port used to communicate between GDB / avarice / simulavr.\r
-DEBUG_PORT = 4242\r
-\r
-# Debugging host used to communicate between GDB / avarice / simulavr, normally\r
-#     just set to localhost unless doing some sort of crazy debugging when \r
-#     avarice is running on a different computer.\r
-DEBUG_HOST = localhost\r
-\r
-\r
-\r
-#============================================================================\r
-\r
-\r
-# Define programs and commands.\r
-SHELL = sh\r
-CC = avr-gcc\r
-OBJCOPY = avr-objcopy\r
-OBJDUMP = avr-objdump\r
-SIZE = avr-size\r
-AR = avr-ar rcs\r
-NM = avr-nm\r
-AVRDUDE = avrdude\r
-REMOVE = rm -f\r
-REMOVEDIR = rm -rf\r
-COPY = cp\r
-WINSHELL = cmd\r
-\r
-# Define Messages\r
-# English\r
-MSG_ERRORS_NONE = Errors: none\r
-MSG_BEGIN = -------- begin --------\r
-MSG_END = --------  end  --------\r
-MSG_SIZE_BEFORE = Size before: \r
-MSG_SIZE_AFTER = Size after:\r
-MSG_COFF = Converting to AVR COFF:\r
-MSG_EXTENDED_COFF = Converting to AVR Extended COFF:\r
-MSG_FLASH = Creating load file for Flash:\r
-MSG_EEPROM = Creating load file for EEPROM:\r
-MSG_EXTENDED_LISTING = Creating Extended Listing:\r
-MSG_SYMBOL_TABLE = Creating Symbol Table:\r
-MSG_LINKING = Linking:\r
-MSG_COMPILING = Compiling C:\r
-MSG_COMPILING_CPP = Compiling C++:\r
-MSG_ASSEMBLING = Assembling:\r
-MSG_CLEANING = Cleaning project:\r
-MSG_CREATING_LIBRARY = Creating library:\r
-\r
-\r
-\r
-\r
-# Define all object files.\r
-OBJ = $(SRC:%.c=$(OBJDIR)/%.o) $(CPPSRC:%.cpp=$(OBJDIR)/%.o) $(ASRC:%.S=$(OBJDIR)/%.o) \r
-\r
-# Define all listing files.\r
-LST = $(SRC:%.c=$(OBJDIR)/%.lst) $(CPPSRC:%.cpp=$(OBJDIR)/%.lst) $(ASRC:%.S=$(OBJDIR)/%.lst) \r
-\r
-\r
-# Compiler flags to generate dependency files.\r
-GENDEPFLAGS = -MMD -MP -MF .dep/$(@F).d\r
-\r
-\r
-# Combine all necessary flags and optional flags.\r
-# Add target processor to flags.\r
-ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS)\r
-ALL_CPPFLAGS = -mmcu=$(MCU) -I. -x c++ $(CPPFLAGS) $(GENDEPFLAGS)\r
-ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)\r
-\r
-\r
-\r
-\r
-\r
-# Default target.\r
-all: begin gccversion sizebefore build checkhooks checklibmode checkboard sizeafter end\r
-\r
-# Change the build target to build a HEX file or a library.\r
-build: elf hex eep lss sym\r
-#build: lib\r
-\r
-\r
-elf: $(TARGET).elf\r
-hex: $(TARGET).hex\r
-eep: $(TARGET).eep\r
-lss: $(TARGET).lss\r
-sym: $(TARGET).sym\r
-LIBNAME=lib$(TARGET).a\r
-lib: $(LIBNAME)\r
-\r
-\r
-\r
-# Eye candy.\r
-# AVR Studio 3.x does not check make's exit code but relies on\r
-# the following magic strings to be generated by the compile job.\r
-begin:\r
-       @echo\r
-       @echo $(MSG_BEGIN)\r
-\r
-end:\r
-       @echo $(MSG_END)\r
-       @echo\r
-\r
-\r
-# Display size of file.\r
-HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex\r
-ELFSIZE = $(SIZE) $(MCU_FLAG) $(FORMAT_FLAG) $(TARGET).elf\r
-MCU_FLAG = $(shell $(SIZE) --help | grep -- --mcu > /dev/null && echo --mcu=$(MCU) )\r
-FORMAT_FLAG = $(shell $(SIZE) --help | grep -- --format=.*avr > /dev/null && echo --format=avr )\r
-\r
-sizebefore:\r
-       @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \\r
-       2>/dev/null; echo; fi\r
-\r
-sizeafter:\r
-       @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \\r
-       2>/dev/null; echo; fi\r
-\r
-checkhooks: build\r
-       @echo\r
-       @echo ------- Unhooked LUFA Events -------\r
-       @$(shell) (grep -s '^EVENT_.*LUFA/.*\\.o' $(TARGET).map | \\r
-                  cut -d' ' -f1 | cut -d'_' -f2- | grep ".*") || \\r
-                          echo "(None)"\r
-       @echo ------------------------------------\r
-\r
-checklibmode:\r
-       @echo\r
-       @echo ----------- Library Mode -----------\r
-       @$(shell) ($(CC) $(ALL_CFLAGS) -E -dM - < /dev/null \\r
-                 | grep 'USB_\(DEVICE\|HOST\)_ONLY' | cut -d' ' -f2 | grep ".*") \\r
-                 || echo "No specific mode (both device and host mode allowable)."\r
-       @echo ------------------------------------\r
-\r
-checkboard:\r
-       @echo\r
-       @echo ---------- Selected Board ----------\r
-       @echo Selected board model is $(BOARD).\r
-       @echo ------------------------------------\r
-       \r
-# Display compiler version information.\r
-gccversion : \r
-       @$(CC) --version\r
-\r
-\r
-\r
-# Program the device.  \r
-program: $(TARGET).hex $(TARGET).eep\r
-       $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)\r
-\r
-flip: $(TARGET).hex\r
-       batchisp -hardware usb -device $(MCU) -operation erase f\r
-       batchisp -hardware usb -device $(MCU) -operation loadbuffer $(TARGET).hex program\r
-       batchisp -hardware usb -device $(MCU) -operation start reset 0\r
-\r
-dfu: $(TARGET).hex\r
-       dfu-programmer $(MCU) erase\r
-       dfu-programmer $(MCU) flash --debug 1 $(TARGET).hex\r
-       dfu-programmer $(MCU) reset\r
-\r
-flip-ee: $(TARGET).hex $(TARGET).eep\r
-       copy $(TARGET).eep $(TARGET)eep.hex\r
-       batchisp -hardware usb -device $(MCU) -operation memory EEPROM erase\r
-       batchisp -hardware usb -device $(MCU) -operation memory EEPROM loadbuffer $(TARGET)eep.hex program\r
-       batchisp -hardware usb -device $(MCU) -operation start reset 0\r
-\r
-dfu-ee: $(TARGET).hex $(TARGET).eep\r
-       dfu-programmer $(MCU) flash-eeprom --debug 1 --suppress-bootloader-mem $(TARGET).eep\r
-       dfu-programmer $(MCU) reset\r
-\r
-\r
-# Generate avr-gdb config/init file which does the following:\r
-#     define the reset signal, load the target file, connect to target, and set \r
-#     a breakpoint at main().\r
-gdb-config: \r
-       @$(REMOVE) $(GDBINIT_FILE)\r
-       @echo define reset >> $(GDBINIT_FILE)\r
-       @echo SIGNAL SIGHUP >> $(GDBINIT_FILE)\r
-       @echo end >> $(GDBINIT_FILE)\r
-       @echo file $(TARGET).elf >> $(GDBINIT_FILE)\r
-       @echo target remote $(DEBUG_HOST):$(DEBUG_PORT)  >> $(GDBINIT_FILE)\r
-ifeq ($(DEBUG_BACKEND),simulavr)\r
-       @echo load  >> $(GDBINIT_FILE)\r
-endif\r
-       @echo break main >> $(GDBINIT_FILE)\r
-\r
-debug: gdb-config $(TARGET).elf\r
-ifeq ($(DEBUG_BACKEND), avarice)\r
-       @echo Starting AVaRICE - Press enter when "waiting to connect" message displays.\r
-       @$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \\r
-       $(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT)\r
-       @$(WINSHELL) /c pause\r
-\r
-else\r
-       @$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \\r
-       $(DEBUG_MFREQ) --port $(DEBUG_PORT)\r
-endif\r
-       @$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE)\r
-\r
-\r
-\r
-\r
-# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.\r
-COFFCONVERT = $(OBJCOPY) --debugging\r
-COFFCONVERT += --change-section-address .data-0x800000\r
-COFFCONVERT += --change-section-address .bss-0x800000\r
-COFFCONVERT += --change-section-address .noinit-0x800000\r
-COFFCONVERT += --change-section-address .eeprom-0x810000\r
-\r
-\r
-\r
-coff: $(TARGET).elf\r
-       @echo\r
-       @echo $(MSG_COFF) $(TARGET).cof\r
-       $(COFFCONVERT) -O coff-avr $< $(TARGET).cof\r
-\r
-\r
-extcoff: $(TARGET).elf\r
-       @echo\r
-       @echo $(MSG_EXTENDED_COFF) $(TARGET).cof\r
-       $(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof\r
-\r
-\r
-\r
-# Create final output files (.hex, .eep) from ELF output file.\r
-%.hex: %.elf\r
-       @echo\r
-       @echo $(MSG_FLASH) $@\r
-       $(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@\r
-\r
-%.eep: %.elf\r
-       @echo\r
-       @echo $(MSG_EEPROM) $@\r
-       -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \\r
-       --change-section-lma .eeprom=0 --no-change-warnings -O $(FORMAT) $< $@ || exit 0\r
-\r
-# Create extended listing file from ELF output file.\r
-%.lss: %.elf\r
-       @echo\r
-       @echo $(MSG_EXTENDED_LISTING) $@\r
-       $(OBJDUMP) -h -z -S $< > $@\r
-\r
-# Create a symbol table from ELF output file.\r
-%.sym: %.elf\r
-       @echo\r
-       @echo $(MSG_SYMBOL_TABLE) $@\r
-       $(NM) -n $< > $@\r
-\r
-\r
-\r
-# Create library from object files.\r
-.SECONDARY : $(TARGET).a\r
-.PRECIOUS : $(OBJ)\r
-%.a: $(OBJ)\r
-       @echo\r
-       @echo $(MSG_CREATING_LIBRARY) $@\r
-       $(AR) $@ $(OBJ)\r
-\r
-\r
-# Link: create ELF output file from object files.\r
-.SECONDARY : $(TARGET).elf\r
-.PRECIOUS : $(OBJ)\r
-%.elf: $(OBJ)\r
-       @echo\r
-       @echo $(MSG_LINKING) $@\r
-       $(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)\r
-\r
-\r
-# Compile: create object files from C source files.\r
-$(OBJDIR)/%.o : %.c\r
-       @echo\r
-       @echo $(MSG_COMPILING) $<\r
-       $(CC) -c $(ALL_CFLAGS) $< -o $@ \r
-\r
-\r
-# Compile: create object files from C++ source files.\r
-$(OBJDIR)/%.o : %.cpp\r
-       @echo\r
-       @echo $(MSG_COMPILING_CPP) $<\r
-       $(CC) -c $(ALL_CPPFLAGS) $< -o $@ \r
-\r
-\r
-# Compile: create assembler files from C source files.\r
-%.s : %.c\r
-       $(CC) -S $(ALL_CFLAGS) $< -o $@\r
-\r
-\r
-# Compile: create assembler files from C++ source files.\r
-%.s : %.cpp\r
-       $(CC) -S $(ALL_CPPFLAGS) $< -o $@\r
-\r
-\r
-# Assemble: create object files from assembler source files.\r
-$(OBJDIR)/%.o : %.S\r
-       @echo\r
-       @echo $(MSG_ASSEMBLING) $<\r
-       $(CC) -c $(ALL_ASFLAGS) $< -o $@\r
-\r
-\r
-# Create preprocessed source for use in sending a bug report.\r
-%.i : %.c\r
-       $(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ \r
-       \r
-\r
-# Target: clean project.\r
-clean: begin clean_list clean_binary end\r
-\r
-clean_binary:\r
-       $(REMOVE) $(TARGET).hex\r
-       \r
-clean_list:\r
-       @echo $(MSG_CLEANING)\r
-       $(REMOVE) $(TARGET).eep\r
-       $(REMOVE) $(TARGET)eep.hex\r
-       $(REMOVE) $(TARGET).cof\r
-       $(REMOVE) $(TARGET).elf\r
-       $(REMOVE) $(TARGET).map\r
-       $(REMOVE) $(TARGET).sym\r
-       $(REMOVE) $(TARGET).lss\r
-       $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.o)\r
-       $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.lst)\r
-       $(REMOVE) $(SRC:.c=.s)\r
-       $(REMOVE) $(SRC:.c=.d)\r
-       $(REMOVE) $(SRC:.c=.i)\r
-       $(REMOVEDIR) .dep\r
-\r
-\r
-doxygen:\r
-       @echo Generating Project Documentation...\r
-       @doxygen Doxygen.conf\r
-       @echo Documentation Generation Complete.\r
-\r
-clean_doxygen:\r
-       rm -rf Documentation\r
-\r
-# Create object files directory\r
-$(shell mkdir $(OBJDIR) 2>/dev/null)\r
-\r
-\r
-# Include the dependency files.\r
--include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)\r
-\r
-\r
-# Listing of phony targets.\r
-.PHONY : all checkhooks checklibmode checkboard   \\r
-begin finish end sizebefore sizeafter gccversion  \\r
-build elf hex eep lss sym coff extcoff clean      \\r
-clean_list clean_binary program debug gdb-config  \\r
-doxygen dfu flip flip-ee dfu-ee
\ No newline at end of file
diff --git a/Demos/Device/RNDISEthernet/Descriptors.c b/Demos/Device/RNDISEthernet/Descriptors.c
deleted file mode 100644 (file)
index 1be5bfd..0000000
+++ /dev/null
@@ -1,263 +0,0 @@
-/*\r
-             LUFA Library\r
-     Copyright (C) Dean Camera, 2009.\r
-              \r
-  dean [at] fourwalledcubicle [dot] com\r
-      www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
-  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
-  Permission to use, copy, modify, and distribute this software\r
-  and its documentation for any purpose and without fee is hereby\r
-  granted, provided that the above copyright notice appear in all\r
-  copies and that both that the copyright notice and this\r
-  permission notice and warranty disclaimer appear in supporting\r
-  documentation, and that the name of the author not be used in\r
-  advertising or publicity pertaining to distribution of the\r
-  software without specific, written prior permission.\r
-\r
-  The author disclaim all warranties with regard to this\r
-  software, including all implied warranties of merchantability\r
-  and fitness.  In no event shall the author be liable for any\r
-  special, indirect or consequential damages or any damages\r
-  whatsoever resulting from loss of use, data or profits, whether\r
-  in an action of contract, negligence or other tortious action,\r
-  arising out of or in connection with the use or performance of\r
-  this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- *  USB Device Descriptors, for library use when in USB device mode. Descriptors are special \r
- *  computer-readable structures which the host requests upon device enumeration, to determine\r
- *  the device's capabilities and functions.  \r
- */\r
\r
-#include "Descriptors.h"\r
-\r
-/** Device descriptor structure. This descriptor, located in FLASH memory, describes the overall\r
- *  device characteristics, including the supported USB version, control endpoint size and the\r
- *  number of device configurations. The descriptor is read out by the USB host when the enumeration\r
- *  process begins.\r
- */\r
-USB_Descriptor_Device_t PROGMEM DeviceDescriptor =\r
-{\r
-       .Header                 = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device},\r
-               \r
-       .USBSpecification       = VERSION_BCD(01.10),\r
-       .Class                  = 0x02,\r
-       .SubClass               = 0x00,\r
-       .Protocol               = 0x00,\r
-                               \r
-       .Endpoint0Size          = FIXED_CONTROL_ENDPOINT_SIZE,\r
-               \r
-       .VendorID               = 0x03EB,\r
-       .ProductID              = 0x204C,\r
-       .ReleaseNumber          = 0x0000,\r
-               \r
-       .ManufacturerStrIndex   = 0x01,\r
-       .ProductStrIndex        = 0x02,\r
-       .SerialNumStrIndex      = NO_DESCRIPTOR,\r
-               \r
-       .NumberOfConfigurations = 1\r
-};\r
-\r
-/** Configuration descriptor structure. This descriptor, located in FLASH memory, describes the usage\r
- *  of the device in one of its supported configurations, including information about any device interfaces\r
- *  and endpoints. The descriptor is read out by the USB host during the enumeration process when selecting\r
- *  a configuration so that the host may correctly communicate with the USB device.\r
- */\r
-USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =\r
-{\r
-       .Config = \r
-               {\r
-                       .Header                 = {.Size = sizeof(USB_Descriptor_Configuration_Header_t), .Type = DTYPE_Configuration},\r
-\r
-                       .TotalConfigurationSize = sizeof(USB_Descriptor_Configuration_t),\r
-                       .TotalInterfaces        = 2,\r
-                               \r
-                       .ConfigurationNumber    = 1,\r
-                       .ConfigurationStrIndex  = NO_DESCRIPTOR,\r
-                               \r
-                       .ConfigAttributes       = (USB_CONFIG_ATTR_BUSPOWERED | USB_CONFIG_ATTR_SELFPOWERED),\r
-                       \r
-                       .MaxPowerConsumption    = USB_CONFIG_POWER_MA(100)\r
-               },\r
-               \r
-       .CCI_Interface = \r
-               {\r
-                       .Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},\r
-\r
-                       .InterfaceNumber        = 0,\r
-                       .AlternateSetting       = 0,\r
-                       \r
-                       .TotalEndpoints         = 1,\r
-                               \r
-                       .Class                  = 0x02,\r
-                       .SubClass               = 0x02,\r
-                       .Protocol               = 0xFF,\r
-                               \r
-                       .InterfaceStrIndex      = NO_DESCRIPTOR\r
-               },\r
-\r
-       .CDC_Functional_Header = \r
-               {\r
-                       .Header                 = {.Size = sizeof(CDC_FUNCTIONAL_DESCRIPTOR(2)), .Type = 0x24},\r
-                       .SubType                = 0x00,\r
-                       \r
-                       .Data                   = {0x01, 0x10}\r
-               },\r
-               \r
-       .CDC_Functional_CallManagement= \r
-               {\r
-                       .Header                 = {.Size = sizeof(CDC_FUNCTIONAL_DESCRIPTOR(2)), .Type = 0x24},\r
-                       .SubType                = 0x01,\r
-                       \r
-                       .Data                   = {0x00, 0x00}\r
-               },\r
-               \r
-       .CDC_Functional_AbstractControlManagement = \r
-               {\r
-                       .Header                 = {.Size = sizeof(CDC_FUNCTIONAL_DESCRIPTOR(1)), .Type = 0x24},\r
-                       .SubType                = 0x02,\r
-                       \r
-                       .Data                   = {0x00}\r
-               },\r
-       \r
-       .CDC_Functional_Union = \r
-               {\r
-                       .Header                 = {.Size = sizeof(CDC_FUNCTIONAL_DESCRIPTOR(2)), .Type = 0x24},\r
-                       .SubType                = 0x06,\r
-                       \r
-                       .Data                   = {0x00, 0x01}\r
-               },\r
-\r
-       .ManagementEndpoint = \r
-               {\r
-                       .Header                 = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},\r
-                                                                                \r
-                       .EndpointAddress        = (ENDPOINT_DESCRIPTOR_DIR_IN | CDC_NOTIFICATION_EPNUM),\r
-                       .Attributes             = EP_TYPE_INTERRUPT,\r
-                       .EndpointSize           = CDC_NOTIFICATION_EPSIZE,\r
-                       .PollingIntervalMS      = 0x02\r
-               },\r
-\r
-       .DCI_Interface = \r
-               {\r
-                       .Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},\r
-\r
-                       .InterfaceNumber        = 1,\r
-                       .AlternateSetting       = 0,\r
-                       \r
-                       .TotalEndpoints         = 2,\r
-                               \r
-                       .Class                  = 0x0A,\r
-                       .SubClass               = 0x00,\r
-                       .Protocol               = 0x00,\r
-                               \r
-                       .InterfaceStrIndex      = NO_DESCRIPTOR\r
-               },\r
-\r
-       .DataOutEndpoint = \r
-               {\r
-                       .Header                 = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},\r
-                                                                                \r
-                       .EndpointAddress        = (ENDPOINT_DESCRIPTOR_DIR_OUT | CDC_RX_EPNUM),\r
-                       .Attributes             = EP_TYPE_BULK,\r
-                       .EndpointSize           = CDC_TXRX_EPSIZE,\r
-                       .PollingIntervalMS      = 0x00\r
-               },\r
-               \r
-       .DataInEndpoint = \r
-               {\r
-                       .Header                 = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},\r
-                                                                                \r
-                       .EndpointAddress        = (ENDPOINT_DESCRIPTOR_DIR_IN | CDC_TX_EPNUM),\r
-                       .Attributes             = EP_TYPE_BULK,\r
-                       .EndpointSize           = CDC_TXRX_EPSIZE,\r
-                       .PollingIntervalMS      = 0x00\r
-               }\r
-};\r
-\r
-/** Language descriptor structure. This descriptor, located in FLASH memory, is returned when the host requests\r
- *  the string descriptor with index 0 (the first index). It is actually an array of 16-bit integers, which indicate\r
- *  via the language ID table available at USB.org what languages the device supports for its string descriptors.\r
- */\r
-USB_Descriptor_String_t PROGMEM LanguageString =\r
-{\r
-       .Header                 = {.Size = USB_STRING_LEN(1), .Type = DTYPE_String},\r
-               \r
-       .UnicodeString          = {LANGUAGE_ID_ENG}\r
-};\r
-\r
-/** Manufacturer descriptor string. This is a Unicode string containing the manufacturer's details in human readable\r
- *  form, and is read out upon request by the host when the appropriate string ID is requested, listed in the Device\r
- *  Descriptor.\r
- */\r
-USB_Descriptor_String_t PROGMEM ManufacturerString =\r
-{\r
-       .Header                 = {.Size = USB_STRING_LEN(11), .Type = DTYPE_String},\r
-               \r
-       .UnicodeString          = L"Dean Camera"\r
-};\r
-\r
-/** Product descriptor string. This is a Unicode string containing the product's details in human readable form,\r
- *  and is read out upon request by the host when the appropriate string ID is requested, listed in the Device\r
- *  Descriptor.\r
- */\r
-USB_Descriptor_String_t PROGMEM ProductString =\r
-{\r
-       .Header                 = {.Size = USB_STRING_LEN(19), .Type = DTYPE_String},\r
-               \r
-       .UnicodeString          = L"LUFA RNDIS CDC Demo"\r
-};\r
-\r
-/** This function is called by the library when in device mode, and must be overridden (see library "USB Descriptors"\r
- *  documentation) by the application code so that the address and size of a requested descriptor can be given\r
- *  to the USB library. When the device receives a Get Descriptor request on the control endpoint, this function\r
- *  is called so that the descriptor details can be passed back and the appropriate descriptor sent back to the\r
- *  USB host.\r
- */\r
-uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
-{\r
-       const uint8_t  DescriptorType   = (wValue >> 8);\r
-       const uint8_t  DescriptorNumber = (wValue & 0xFF);\r
-\r
-       void*    Address = NULL;\r
-       uint16_t Size    = NO_DESCRIPTOR;\r
-\r
-       switch (DescriptorType)\r
-       {\r
-               case DTYPE_Device:\r
-                       Address = (void*)&DeviceDescriptor;\r
-                       Size    = sizeof(USB_Descriptor_Device_t);\r
-                       break;\r
-               case DTYPE_Configuration: \r
-                       Address = (void*)&ConfigurationDescriptor;\r
-                       Size    = sizeof(USB_Descriptor_Configuration_t);\r
-                       break;\r
-               case DTYPE_String:\r
-                       switch (DescriptorNumber)\r
-                       {\r
-                               case 0x00:\r
-                                       Address = (void*)&LanguageString;\r
-                                       Size    = pgm_read_byte(&LanguageString.Header.Size);\r
-                                       break;\r
-                               case 0x01:\r
-                                       Address = (void*)&ManufacturerString;\r
-                                       Size    = pgm_read_byte(&ManufacturerString.Header.Size);\r
-                                       break;\r
-                               case 0x02:\r
-                                       Address = (void*)&ProductString;\r
-                                       Size    = pgm_read_byte(&ProductString.Header.Size);\r
-                                       break;\r
-                       }\r
-                       \r
-                       break;\r
-       }\r
-       \r
-       *DescriptorAddress = Address;\r
-       return Size;\r
-}\r
diff --git a/Demos/Device/RNDISEthernet/Descriptors.h b/Demos/Device/RNDISEthernet/Descriptors.h
deleted file mode 100644 (file)
index eb43735..0000000
+++ /dev/null
@@ -1,98 +0,0 @@
-/*\r
-             LUFA Library\r
-     Copyright (C) Dean Camera, 2009.\r
-              \r
-  dean [at] fourwalledcubicle [dot] com\r
-      www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
-  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
-  Permission to use, copy, modify, and distribute this software\r
-  and its documentation for any purpose and without fee is hereby\r
-  granted, provided that the above copyright notice appear in all\r
-  copies and that both that the copyright notice and this\r
-  permission notice and warranty disclaimer appear in supporting\r
-  documentation, and that the name of the author not be used in\r
-  advertising or publicity pertaining to distribution of the\r
-  software without specific, written prior permission.\r
-\r
-  The author disclaim all warranties with regard to this\r
-  software, including all implied warranties of merchantability\r
-  and fitness.  In no event shall the author be liable for any\r
-  special, indirect or consequential damages or any damages\r
-  whatsoever resulting from loss of use, data or profits, whether\r
-  in an action of contract, negligence or other tortious action,\r
-  arising out of or in connection with the use or performance of\r
-  this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- *  Header file for Descriptors.c.\r
- */\r
-\r
-#ifndef _DESCRIPTORS_H_\r
-#define _DESCRIPTORS_H_\r
-\r
-       /* Includes: */\r
-               #include <LUFA/Drivers/USB/USB.h>\r
-\r
-               #include <avr/pgmspace.h>\r
-\r
-       /* Macros: */\r
-               /** Macro to define a CDC class-specific functional descriptor. CDC functional descriptors have a\r
-                *  uniform structure but variable sized data payloads, thus cannot be represented accurately by\r
-                *  a single typedef struct. A macro is used instead so that functional descriptors can be created\r
-                *  easily by specifying the size of the payload. This allows sizeof() to work correctly.\r
-                *\r
-                *  \param DataSize  Size in bytes of the CDC functional descriptor's data payload\r
-                */             \r
-               #define CDC_FUNCTIONAL_DESCRIPTOR(DataSize)        \\r
-                    struct                                        \\r
-                    {                                             \\r
-                         USB_Descriptor_Header_t Header;          \\r
-                             uint8_t                 SubType;         \\r
-                         uint8_t                 Data[DataSize];  \\r
-                    }\r
-\r
-               /** Endpoint number of the CDC device-to-host notification IN endpoint. */\r
-               #define CDC_NOTIFICATION_EPNUM         3\r
-\r
-               /** Endpoint number of the CDC device-to-host data IN endpoint. */\r
-               #define CDC_TX_EPNUM                   1        \r
-\r
-               /** Endpoint number of the CDC host-to-device data OUT endpoint. */\r
-               #define CDC_RX_EPNUM                   2        \r
-\r
-               /** Size in bytes of the CDC device-to-host notification IN endpoint. */\r
-               #define CDC_NOTIFICATION_EPSIZE        8\r
-\r
-               /** Size in bytes of the CDC data IN and OUT endpoints. */\r
-               #define CDC_TXRX_EPSIZE                64\r
-\r
-       /* Type Defines: */\r
-               /** Type define for the device configuration descriptor structure. This must be defined in the\r
-                *  application code, as the configuration descriptor contains several sub-descriptors which\r
-                *  vary between devices, and which describe the device's usage to the host.\r
-                */\r
-               typedef struct\r
-               {\r
-                       USB_Descriptor_Configuration_Header_t    Config;\r
-                       USB_Descriptor_Interface_t               CCI_Interface;\r
-                       CDC_FUNCTIONAL_DESCRIPTOR(2)             CDC_Functional_Header;\r
-                       CDC_FUNCTIONAL_DESCRIPTOR(2)             CDC_Functional_CallManagement;\r
-                       CDC_FUNCTIONAL_DESCRIPTOR(1)             CDC_Functional_AbstractControlManagement;\r
-                       CDC_FUNCTIONAL_DESCRIPTOR(2)             CDC_Functional_Union;\r
-                       USB_Descriptor_Endpoint_t                ManagementEndpoint;\r
-                       USB_Descriptor_Interface_t               DCI_Interface;\r
-                       USB_Descriptor_Endpoint_t                DataOutEndpoint;\r
-                       USB_Descriptor_Endpoint_t                DataInEndpoint;\r
-               } USB_Descriptor_Configuration_t;\r
-\r
-       /* Function Prototypes: */\r
-               uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
-                                                                                       ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);\r
-\r
-#endif\r
diff --git a/Demos/Device/RNDISEthernet/Doxygen.conf b/Demos/Device/RNDISEthernet/Doxygen.conf
deleted file mode 100644 (file)
index 9d7973b..0000000
+++ /dev/null
@@ -1,1485 +0,0 @@
-# Doxyfile 1.5.7.1\r
-\r
-# This file describes the settings to be used by the documentation system\r
-# doxygen (www.doxygen.org) for a project\r
-#\r
-# All text after a hash (#) is considered a comment and will be ignored\r
-# The format is:\r
-#       TAG = value [value, ...]\r
-# For lists items can also be appended using:\r
-#       TAG += value [value, ...]\r
-# Values that contain spaces should be placed between quotes (" ")\r
-\r
-#---------------------------------------------------------------------------\r
-# Project related configuration options\r
-#---------------------------------------------------------------------------\r
-\r
-# This tag specifies the encoding used for all characters in the config file \r
-# that follow. The default is UTF-8 which is also the encoding used for all \r
-# text before the first occurrence of this tag. Doxygen uses libiconv (or the \r
-# iconv built into libc) for the transcoding. See \r
-# http://www.gnu.org/software/libiconv for the list of possible encodings.\r
-\r
-DOXYFILE_ENCODING      = UTF-8\r
-\r
-# The PROJECT_NAME tag is a single word (or a sequence of words surrounded \r
-# by quotes) that should identify the project.\r
-\r
-PROJECT_NAME           = "LUFA Library - RNDIS Ethernet Demo"\r
-\r
-# The PROJECT_NUMBER tag can be used to enter a project or revision number. \r
-# This could be handy for archiving the generated documentation or \r
-# if some version control system is used.\r
-\r
-PROJECT_NUMBER         = 0.0.0\r
-\r
-# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) \r
-# base path where the generated documentation will be put. \r
-# If a relative path is entered, it will be relative to the location \r
-# where doxygen was started. If left blank the current directory will be used.\r
-\r
-OUTPUT_DIRECTORY       = ./Documentation/\r
-\r
-# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create \r
-# 4096 sub-directories (in 2 levels) under the output directory of each output \r
-# format and will distribute the generated files over these directories. \r
-# Enabling this option can be useful when feeding doxygen a huge amount of \r
-# source files, where putting all generated files in the same directory would \r
-# otherwise cause performance problems for the file system.\r
-\r
-CREATE_SUBDIRS         = YES\r
-\r
-# The OUTPUT_LANGUAGE tag is used to specify the language in which all \r
-# documentation generated by doxygen is written. Doxygen will use this \r
-# information to generate all constant output in the proper language. \r
-# The default language is English, other supported languages are: \r
-# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, \r
-# Croatian, Czech, Danish, Dutch, Farsi, Finnish, French, German, Greek, \r
-# Hungarian, Italian, Japanese, Japanese-en (Japanese with English messages), \r
-# Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, Polish, \r
-# Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, Slovene, \r
-# Spanish, Swedish, and Ukrainian.\r
-\r
-OUTPUT_LANGUAGE        = English\r
-\r
-# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will \r
-# include brief member descriptions after the members that are listed in \r
-# the file and class documentation (similar to JavaDoc). \r
-# Set to NO to disable this.\r
-\r
-BRIEF_MEMBER_DESC      = YES\r
-\r
-# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend \r
-# the brief description of a member or function before the detailed description. \r
-# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the \r
-# brief descriptions will be completely suppressed.\r
-\r
-REPEAT_BRIEF           = YES\r
-\r
-# This tag implements a quasi-intelligent brief description abbreviator \r
-# that is used to form the text in various listings. Each string \r
-# in this list, if found as the leading text of the brief description, will be \r
-# stripped from the text and the result after processing the whole list, is \r
-# used as the annotated text. Otherwise, the brief description is used as-is. \r
-# If left blank, the following values are used ("$name" is automatically \r
-# replaced with the name of the entity): "The $name class" "The $name widget" \r
-# "The $name file" "is" "provides" "specifies" "contains" \r
-# "represents" "a" "an" "the"\r
-\r
-ABBREVIATE_BRIEF       = "The $name class" \\r
-                         "The $name widget" \\r
-                         "The $name file" \\r
-                         is \\r
-                         provides \\r
-                         specifies \\r
-                         contains \\r
-                         represents \\r
-                         a \\r
-                         an \\r
-                         the\r
-\r
-# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then \r
-# Doxygen will generate a detailed section even if there is only a brief \r
-# description.\r
-\r
-ALWAYS_DETAILED_SEC    = NO\r
-\r
-# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all \r
-# inherited members of a class in the documentation of that class as if those \r
-# members were ordinary class members. Constructors, destructors and assignment \r
-# operators of the base classes will not be shown.\r
-\r
-INLINE_INHERITED_MEMB  = NO\r
-\r
-# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full \r
-# path before files name in the file list and in the header files. If set \r
-# to NO the shortest path that makes the file name unique will be used.\r
-\r
-FULL_PATH_NAMES        = YES\r
-\r
-# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag \r
-# can be used to strip a user-defined part of the path. Stripping is \r
-# only done if one of the specified strings matches the left-hand part of \r
-# the path. The tag can be used to show relative paths in the file list. \r
-# If left blank the directory from which doxygen is run is used as the \r
-# path to strip.\r
-\r
-STRIP_FROM_PATH        = \r
-\r
-# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of \r
-# the path mentioned in the documentation of a class, which tells \r
-# the reader which header file to include in order to use a class. \r
-# If left blank only the name of the header file containing the class \r
-# definition is used. Otherwise one should specify the include paths that \r
-# are normally passed to the compiler using the -I flag.\r
-\r
-STRIP_FROM_INC_PATH    = \r
-\r
-# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter \r
-# (but less readable) file names. This can be useful is your file systems \r
-# doesn't support long names like on DOS, Mac, or CD-ROM.\r
-\r
-SHORT_NAMES            = YES\r
-\r
-# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen \r
-# will interpret the first line (until the first dot) of a JavaDoc-style \r
-# comment as the brief description. If set to NO, the JavaDoc \r
-# comments will behave just like regular Qt-style comments \r
-# (thus requiring an explicit @brief command for a brief description.)\r
-\r
-JAVADOC_AUTOBRIEF      = NO\r
-\r
-# If the QT_AUTOBRIEF tag is set to YES then Doxygen will \r
-# interpret the first line (until the first dot) of a Qt-style \r
-# comment as the brief description. If set to NO, the comments \r
-# will behave just like regular Qt-style comments (thus requiring \r
-# an explicit \brief command for a brief description.)\r
-\r
-QT_AUTOBRIEF           = NO\r
-\r
-# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen \r
-# treat a multi-line C++ special comment block (i.e. a block of //! or /// \r
-# comments) as a brief description. This used to be the default behaviour. \r
-# The new default is to treat a multi-line C++ comment block as a detailed \r
-# description. Set this tag to YES if you prefer the old behaviour instead.\r
-\r
-MULTILINE_CPP_IS_BRIEF = NO\r
-\r
-# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented \r
-# member inherits the documentation from any documented member that it \r
-# re-implements.\r
-\r
-INHERIT_DOCS           = YES\r
-\r
-# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce \r
-# a new page for each member. If set to NO, the documentation of a member will \r
-# be part of the file/class/namespace that contains it.\r
-\r
-SEPARATE_MEMBER_PAGES  = NO\r
-\r
-# The TAB_SIZE tag can be used to set the number of spaces in a tab. \r
-# Doxygen uses this value to replace tabs by spaces in code fragments.\r
-\r
-TAB_SIZE               = 4\r
-\r
-# This tag can be used to specify a number of aliases that acts \r
-# as commands in the documentation. An alias has the form "name=value". \r
-# For example adding "sideeffect=\par Side Effects:\n" will allow you to \r
-# put the command \sideeffect (or @sideeffect) in the documentation, which \r
-# will result in a user-defined paragraph with heading "Side Effects:". \r
-# You can put \n's in the value part of an alias to insert newlines.\r
-\r
-ALIASES                = \r
-\r
-# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C \r
-# sources only. Doxygen will then generate output that is more tailored for C. \r
-# For instance, some of the names that are used will be different. The list \r
-# of all members will be omitted, etc.\r
-\r
-OPTIMIZE_OUTPUT_FOR_C  = YES\r
-\r
-# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java \r
-# sources only. Doxygen will then generate output that is more tailored for \r
-# Java. For instance, namespaces will be presented as packages, qualified \r
-# scopes will look different, etc.\r
-\r
-OPTIMIZE_OUTPUT_JAVA   = NO\r
-\r
-# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran \r
-# sources only. Doxygen will then generate output that is more tailored for \r
-# Fortran.\r
-\r
-OPTIMIZE_FOR_FORTRAN   = NO\r
-\r
-# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL \r
-# sources. Doxygen will then generate output that is tailored for \r
-# VHDL.\r
-\r
-OPTIMIZE_OUTPUT_VHDL   = NO\r
-\r
-# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want \r
-# to include (a tag file for) the STL sources as input, then you should \r
-# set this tag to YES in order to let doxygen match functions declarations and \r
-# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. \r
-# func(std::string) {}). This also make the inheritance and collaboration \r
-# diagrams that involve STL classes more complete and accurate.\r
-\r
-BUILTIN_STL_SUPPORT    = NO\r
-\r
-# If you use Microsoft's C++/CLI language, you should set this option to YES to\r
-# enable parsing support.\r
-\r
-CPP_CLI_SUPPORT        = NO\r
-\r
-# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. \r
-# Doxygen will parse them like normal C++ but will assume all classes use public \r
-# instead of private inheritance when no explicit protection keyword is present.\r
-\r
-SIP_SUPPORT            = NO\r
-\r
-# For Microsoft's IDL there are propget and propput attributes to indicate getter \r
-# and setter methods for a property. Setting this option to YES (the default) \r
-# will make doxygen to replace the get and set methods by a property in the \r
-# documentation. This will only work if the methods are indeed getting or \r
-# setting a simple type. If this is not the case, or you want to show the \r
-# methods anyway, you should set this option to NO.\r
-\r
-IDL_PROPERTY_SUPPORT   = YES\r
-\r
-# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC \r
-# tag is set to YES, then doxygen will reuse the documentation of the first \r
-# member in the group (if any) for the other members of the group. By default \r
-# all members of a group must be documented explicitly.\r
-\r
-DISTRIBUTE_GROUP_DOC   = NO\r
-\r
-# Set the SUBGROUPING tag to YES (the default) to allow class member groups of \r
-# the same type (for instance a group of public functions) to be put as a \r
-# subgroup of that type (e.g. under the Public Functions section). Set it to \r
-# NO to prevent subgrouping. Alternatively, this can be done per class using \r
-# the \nosubgrouping command.\r
-\r
-SUBGROUPING            = YES\r
-\r
-# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum \r
-# is documented as struct, union, or enum with the name of the typedef. So \r
-# typedef struct TypeS {} TypeT, will appear in the documentation as a struct \r
-# with name TypeT. When disabled the typedef will appear as a member of a file, \r
-# namespace, or class. And the struct will be named TypeS. This can typically \r
-# be useful for C code in case the coding convention dictates that all compound \r
-# types are typedef'ed and only the typedef is referenced, never the tag name.\r
-\r
-TYPEDEF_HIDES_STRUCT   = NO\r
-\r
-# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to \r
-# determine which symbols to keep in memory and which to flush to disk.\r
-# When the cache is full, less often used symbols will be written to disk.\r
-# For small to medium size projects (<1000 input files) the default value is \r
-# probably good enough. For larger projects a too small cache size can cause \r
-# doxygen to be busy swapping symbols to and from disk most of the time \r
-# causing a significant performance penality. \r
-# If the system has enough physical memory increasing the cache will improve the \r
-# performance by keeping more symbols in memory. Note that the value works on \r
-# a logarithmic scale so increasing the size by one will rougly double the \r
-# memory usage. The cache size is given by this formula: \r
-# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, \r
-# corresponding to a cache size of 2^16 = 65536 symbols\r
-\r
-SYMBOL_CACHE_SIZE      = 0\r
-\r
-#---------------------------------------------------------------------------\r
-# Build related configuration options\r
-#---------------------------------------------------------------------------\r
-\r
-# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in \r
-# documentation are documented, even if no documentation was available. \r
-# Private class members and static file members will be hidden unless \r
-# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES\r
-\r
-EXTRACT_ALL            = YES\r
-\r
-# If the EXTRACT_PRIVATE tag is set to YES all private members of a class \r
-# will be included in the documentation.\r
-\r
-EXTRACT_PRIVATE        = YES\r
-\r
-# If the EXTRACT_STATIC tag is set to YES all static members of a file \r
-# will be included in the documentation.\r
-\r
-EXTRACT_STATIC         = YES\r
-\r
-# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) \r
-# defined locally in source files will be included in the documentation. \r
-# If set to NO only classes defined in header files are included.\r
-\r
-EXTRACT_LOCAL_CLASSES  = YES\r
-\r
-# This flag is only useful for Objective-C code. When set to YES local \r
-# methods, which are defined in the implementation section but not in \r
-# the interface are included in the documentation. \r
-# If set to NO (the default) only methods in the interface are included.\r
-\r
-EXTRACT_LOCAL_METHODS  = NO\r
-\r
-# If this flag is set to YES, the members of anonymous namespaces will be \r
-# extracted and appear in the documentation as a namespace called \r
-# 'anonymous_namespace{file}', where file will be replaced with the base \r
-# name of the file that contains the anonymous namespace. By default \r
-# anonymous namespace are hidden.\r
-\r
-EXTRACT_ANON_NSPACES   = NO\r
-\r
-# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all \r
-# undocumented members of documented classes, files or namespaces. \r
-# If set to NO (the default) these members will be included in the \r
-# various overviews, but no documentation section is generated. \r
-# This option has no effect if EXTRACT_ALL is enabled.\r
-\r
-HIDE_UNDOC_MEMBERS     = NO\r
-\r
-# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all \r
-# undocumented classes that are normally visible in the class hierarchy. \r
-# If set to NO (the default) these classes will be included in the various \r
-# overviews. This option has no effect if EXTRACT_ALL is enabled.\r
-\r
-HIDE_UNDOC_CLASSES     = NO\r
-\r
-# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all \r
-# friend (class|struct|union) declarations. \r
-# If set to NO (the default) these declarations will be included in the \r
-# documentation.\r
-\r
-HIDE_FRIEND_COMPOUNDS  = NO\r
-\r
-# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any \r
-# documentation blocks found inside the body of a function. \r
-# If set to NO (the default) these blocks will be appended to the \r
-# function's detailed documentation block.\r
-\r
-HIDE_IN_BODY_DOCS      = NO\r
-\r
-# The INTERNAL_DOCS tag determines if documentation \r
-# that is typed after a \internal command is included. If the tag is set \r
-# to NO (the default) then the documentation will be excluded. \r
-# Set it to YES to include the internal documentation.\r
-\r
-INTERNAL_DOCS          = NO\r
-\r
-# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate \r
-# file names in lower-case letters. If set to YES upper-case letters are also \r
-# allowed. This is useful if you have classes or files whose names only differ \r
-# in case and if your file system supports case sensitive file names. Windows \r
-# and Mac users are advised to set this option to NO.\r
-\r
-CASE_SENSE_NAMES       = NO\r
-\r
-# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen \r
-# will show members with their full class and namespace scopes in the \r
-# documentation. If set to YES the scope will be hidden.\r
-\r
-HIDE_SCOPE_NAMES       = NO\r
-\r
-# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen \r
-# will put a list of the files that are included by a file in the documentation \r
-# of that file.\r
-\r
-SHOW_INCLUDE_FILES     = YES\r
-\r
-# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] \r
-# is inserted in the documentation for inline members.\r
-\r
-INLINE_INFO            = YES\r
-\r
-# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen \r
-# will sort the (detailed) documentation of file and class members \r
-# alphabetically by member name. If set to NO the members will appear in \r
-# declaration order.\r
-\r
-SORT_MEMBER_DOCS       = YES\r
-\r
-# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the \r
-# brief documentation of file, namespace and class members alphabetically \r
-# by member name. If set to NO (the default) the members will appear in \r
-# declaration order.\r
-\r
-SORT_BRIEF_DOCS        = NO\r
-\r
-# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the \r
-# hierarchy of group names into alphabetical order. If set to NO (the default) \r
-# the group names will appear in their defined order.\r
-\r
-SORT_GROUP_NAMES       = NO\r
-\r
-# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be \r
-# sorted by fully-qualified names, including namespaces. If set to \r
-# NO (the default), the class list will be sorted only by class name, \r
-# not including the namespace part. \r
-# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.\r
-# Note: This option applies only to the class list, not to the \r
-# alphabetical list.\r
-\r
-SORT_BY_SCOPE_NAME     = NO\r
-\r
-# The GENERATE_TODOLIST tag can be used to enable (YES) or \r
-# disable (NO) the todo list. This list is created by putting \todo \r
-# commands in the documentation.\r
-\r
-GENERATE_TODOLIST      = NO\r
-\r
-# The GENERATE_TESTLIST tag can be used to enable (YES) or \r
-# disable (NO) the test list. This list is created by putting \test \r
-# commands in the documentation.\r
-\r
-GENERATE_TESTLIST      = NO\r
-\r
-# The GENERATE_BUGLIST tag can be used to enable (YES) or \r
-# disable (NO) the bug list. This list is created by putting \bug \r
-# commands in the documentation.\r
-\r
-GENERATE_BUGLIST       = NO\r
-\r
-# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or \r
-# disable (NO) the deprecated list. This list is created by putting \r
-# \deprecated commands in the documentation.\r
-\r
-GENERATE_DEPRECATEDLIST= YES\r
-\r
-# The ENABLED_SECTIONS tag can be used to enable conditional \r
-# documentation sections, marked by \if sectionname ... \endif.\r
-\r
-ENABLED_SECTIONS       = \r
-\r
-# The MAX_INITIALIZER_LINES tag determines the maximum number of lines \r
-# the initial value of a variable or define consists of for it to appear in \r
-# the documentation. If the initializer consists of more lines than specified \r
-# here it will be hidden. Use a value of 0 to hide initializers completely. \r
-# The appearance of the initializer of individual variables and defines in the \r
-# documentation can be controlled using \showinitializer or \hideinitializer \r
-# command in the documentation regardless of this setting.\r
-\r
-MAX_INITIALIZER_LINES  = 30\r
-\r
-# Set the SHOW_USED_FILES tag to NO to disable the list of files generated \r
-# at the bottom of the documentation of classes and structs. If set to YES the \r
-# list will mention the files that were used to generate the documentation.\r
-\r
-SHOW_USED_FILES        = YES\r
-\r
-# If the sources in your project are distributed over multiple directories \r
-# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy \r
-# in the documentation. The default is NO.\r
-\r
-SHOW_DIRECTORIES       = YES\r
-\r
-# Set the SHOW_FILES tag to NO to disable the generation of the Files page.\r
-# This will remove the Files entry from the Quick Index and from the \r
-# Folder Tree View (if specified). The default is YES.\r
-\r
-SHOW_FILES             = YES\r
-\r
-# Set the SHOW_NAMESPACES tag to NO to disable the generation of the \r
-# Namespaces page.  This will remove the Namespaces entry from the Quick Index\r
-# and from the Folder Tree View (if specified). The default is YES.\r
-\r
-SHOW_NAMESPACES        = YES\r
-\r
-# The FILE_VERSION_FILTER tag can be used to specify a program or script that \r
-# doxygen should invoke to get the current version for each file (typically from \r
-# the version control system). Doxygen will invoke the program by executing (via \r
-# popen()) the command <command> <input-file>, where <command> is the value of \r
-# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file \r
-# provided by doxygen. Whatever the program writes to standard output \r
-# is used as the file version. See the manual for examples.\r
-\r
-FILE_VERSION_FILTER    = \r
-\r
-# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by \r
-# doxygen. The layout file controls the global structure of the generated output files \r
-# in an output format independent way. The create the layout file that represents \r
-# doxygen's defaults, run doxygen with the -l option. You can optionally specify a \r
-# file name after the option, if omitted DoxygenLayout.xml will be used as the name \r
-# of the layout file.\r
-\r
-LAYOUT_FILE            = \r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to warning and progress messages\r
-#---------------------------------------------------------------------------\r
-\r
-# The QUIET tag can be used to turn on/off the messages that are generated \r
-# by doxygen. Possible values are YES and NO. If left blank NO is used.\r
-\r
-QUIET                  = YES\r
-\r
-# The WARNINGS tag can be used to turn on/off the warning messages that are \r
-# generated by doxygen. Possible values are YES and NO. If left blank \r
-# NO is used.\r
-\r
-WARNINGS               = YES\r
-\r
-# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings \r
-# for undocumented members. If EXTRACT_ALL is set to YES then this flag will \r
-# automatically be disabled.\r
-\r
-WARN_IF_UNDOCUMENTED   = YES\r
-\r
-# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for \r
-# potential errors in the documentation, such as not documenting some \r
-# parameters in a documented function, or documenting parameters that \r
-# don't exist or using markup commands wrongly.\r
-\r
-WARN_IF_DOC_ERROR      = YES\r
-\r
-# This WARN_NO_PARAMDOC option can be abled to get warnings for \r
-# functions that are documented, but have no documentation for their parameters \r
-# or return value. If set to NO (the default) doxygen will only warn about \r
-# wrong or incomplete parameter documentation, but not about the absence of \r
-# documentation.\r
-\r
-WARN_NO_PARAMDOC       = YES\r
-\r
-# The WARN_FORMAT tag determines the format of the warning messages that \r
-# doxygen can produce. The string should contain the $file, $line, and $text \r
-# tags, which will be replaced by the file and line number from which the \r
-# warning originated and the warning text. Optionally the format may contain \r
-# $version, which will be replaced by the version of the file (if it could \r
-# be obtained via FILE_VERSION_FILTER)\r
-\r
-WARN_FORMAT            = "$file:$line: $text"\r
-\r
-# The WARN_LOGFILE tag can be used to specify a file to which warning \r
-# and error messages should be written. If left blank the output is written \r
-# to stderr.\r
-\r
-WARN_LOGFILE           = \r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the input files\r
-#---------------------------------------------------------------------------\r
-\r
-# The INPUT tag can be used to specify the files and/or directories that contain \r
-# documented source files. You may enter file names like "myfile.cpp" or \r
-# directories like "/usr/src/myproject". Separate the files or directories \r
-# with spaces.\r
-\r
-INPUT                  = ./\r
-\r
-# This tag can be used to specify the character encoding of the source files \r
-# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is \r
-# also the default input encoding. Doxygen uses libiconv (or the iconv built \r
-# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for \r
-# the list of possible encodings.\r
-\r
-INPUT_ENCODING         = UTF-8\r
-\r
-# If the value of the INPUT tag contains directories, you can use the \r
-# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \r
-# and *.h) to filter out the source-files in the directories. If left \r
-# blank the following patterns are tested: \r
-# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx \r
-# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90\r
-\r
-FILE_PATTERNS          = *.h \\r
-                         *.c \\r
-                                                *.txt\r
-\r
-# The RECURSIVE tag can be used to turn specify whether or not subdirectories \r
-# should be searched for input files as well. Possible values are YES and NO. \r
-# If left blank NO is used.\r
-\r
-RECURSIVE              = YES\r
-\r
-# The EXCLUDE tag can be used to specify files and/or directories that should \r
-# excluded from the INPUT source files. This way you can easily exclude a \r
-# subdirectory from a directory tree whose root is specified with the INPUT tag.\r
-\r
-EXCLUDE                = \r
-\r
-# The EXCLUDE_SYMLINKS tag can be used select whether or not files or \r
-# directories that are symbolic links (a Unix filesystem feature) are excluded \r
-# from the input.\r
-\r
-EXCLUDE_SYMLINKS       = NO\r
-\r
-# If the value of the INPUT tag contains directories, you can use the \r
-# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude \r
-# certain files from those directories. Note that the wildcards are matched \r
-# against the file with absolute path, so to exclude all test directories \r
-# for example use the pattern */test/*\r
-\r
-EXCLUDE_PATTERNS       = */LowLevel/USBMode.h\r
-\r
-# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names \r
-# (namespaces, classes, functions, etc.) that should be excluded from the \r
-# output. The symbol name can be a fully qualified name, a word, or if the \r
-# wildcard * is used, a substring. Examples: ANamespace, AClass, \r
-# AClass::ANamespace, ANamespace::*Test\r
-\r
-EXCLUDE_SYMBOLS        = __*\r
-\r
-# The EXAMPLE_PATH tag can be used to specify one or more files or \r
-# directories that contain example code fragments that are included (see \r
-# the \include command).\r
-\r
-EXAMPLE_PATH           = \r
-\r
-# If the value of the EXAMPLE_PATH tag contains directories, you can use the \r
-# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \r
-# and *.h) to filter out the source-files in the directories. If left \r
-# blank all files are included.\r
-\r
-EXAMPLE_PATTERNS       = *\r
-\r
-# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be \r
-# searched for input files to be used with the \include or \dontinclude \r
-# commands irrespective of the value of the RECURSIVE tag. \r
-# Possible values are YES and NO. If left blank NO is used.\r
-\r
-EXAMPLE_RECURSIVE      = NO\r
-\r
-# The IMAGE_PATH tag can be used to specify one or more files or \r
-# directories that contain image that are included in the documentation (see \r
-# the \image command).\r
-\r
-IMAGE_PATH             = \r
-\r
-# The INPUT_FILTER tag can be used to specify a program that doxygen should \r
-# invoke to filter for each input file. Doxygen will invoke the filter program \r
-# by executing (via popen()) the command <filter> <input-file>, where <filter> \r
-# is the value of the INPUT_FILTER tag, and <input-file> is the name of an \r
-# input file. Doxygen will then use the output that the filter program writes \r
-# to standard output.  If FILTER_PATTERNS is specified, this tag will be \r
-# ignored.\r
-\r
-INPUT_FILTER           = \r
-\r
-# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern \r
-# basis.  Doxygen will compare the file name with each pattern and apply the \r
-# filter if there is a match.  The filters are a list of the form: \r
-# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further \r
-# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER \r
-# is applied to all files.\r
-\r
-FILTER_PATTERNS        = \r
-\r
-# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using \r
-# INPUT_FILTER) will be used to filter the input files when producing source \r
-# files to browse (i.e. when SOURCE_BROWSER is set to YES).\r
-\r
-FILTER_SOURCE_FILES    = NO\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to source browsing\r
-#---------------------------------------------------------------------------\r
-\r
-# If the SOURCE_BROWSER tag is set to YES then a list of source files will \r
-# be generated. Documented entities will be cross-referenced with these sources. \r
-# Note: To get rid of all source code in the generated output, make sure also \r
-# VERBATIM_HEADERS is set to NO.\r
-\r
-SOURCE_BROWSER         = NO\r
-\r
-# Setting the INLINE_SOURCES tag to YES will include the body \r
-# of functions and classes directly in the documentation.\r
-\r
-INLINE_SOURCES         = NO\r
-\r
-# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct \r
-# doxygen to hide any special comment blocks from generated source code \r
-# fragments. Normal C and C++ comments will always remain visible.\r
-\r
-STRIP_CODE_COMMENTS    = YES\r
-\r
-# If the REFERENCED_BY_RELATION tag is set to YES \r
-# then for each documented function all documented \r
-# functions referencing it will be listed.\r
-\r
-REFERENCED_BY_RELATION = NO\r
-\r
-# If the REFERENCES_RELATION tag is set to YES \r
-# then for each documented function all documented entities \r
-# called/used by that function will be listed.\r
-\r
-REFERENCES_RELATION    = NO\r
-\r
-# If the REFERENCES_LINK_SOURCE tag is set to YES (the default)\r
-# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from\r
-# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will\r
-# link to the source code.  Otherwise they will link to the documentstion.\r
-\r
-REFERENCES_LINK_SOURCE = NO\r
-\r
-# If the USE_HTAGS tag is set to YES then the references to source code \r
-# will point to the HTML generated by the htags(1) tool instead of doxygen \r
-# built-in source browser. The htags tool is part of GNU's global source \r
-# tagging system (see http://www.gnu.org/software/global/global.html). You \r
-# will need version 4.8.6 or higher.\r
-\r
-USE_HTAGS              = NO\r
-\r
-# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen \r
-# will generate a verbatim copy of the header file for each class for \r
-# which an include is specified. Set to NO to disable this.\r
-\r
-VERBATIM_HEADERS       = NO\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the alphabetical class index\r
-#---------------------------------------------------------------------------\r
-\r
-# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index \r
-# of all compounds will be generated. Enable this if the project \r
-# contains a lot of classes, structs, unions or interfaces.\r
-\r
-ALPHABETICAL_INDEX     = YES\r
-\r
-# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then \r
-# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns \r
-# in which this list will be split (can be a number in the range [1..20])\r
-\r
-COLS_IN_ALPHA_INDEX    = 5\r
-\r
-# In case all classes in a project start with a common prefix, all \r
-# classes will be put under the same header in the alphabetical index. \r
-# The IGNORE_PREFIX tag can be used to specify one or more prefixes that \r
-# should be ignored while generating the index headers.\r
-\r
-IGNORE_PREFIX          = \r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the HTML output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_HTML tag is set to YES (the default) Doxygen will \r
-# generate HTML output.\r
-\r
-GENERATE_HTML          = YES\r
-\r
-# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. \r
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
-# put in front of it. If left blank `html' will be used as the default path.\r
-\r
-HTML_OUTPUT            = html\r
-\r
-# The HTML_FILE_EXTENSION tag can be used to specify the file extension for \r
-# each generated HTML page (for example: .htm,.php,.asp). If it is left blank \r
-# doxygen will generate files with .html extension.\r
-\r
-HTML_FILE_EXTENSION    = .html\r
-\r
-# The HTML_HEADER tag can be used to specify a personal HTML header for \r
-# each generated HTML page. If it is left blank doxygen will generate a \r
-# standard header.\r
-\r
-HTML_HEADER            = \r
-\r
-# The HTML_FOOTER tag can be used to specify a personal HTML footer for \r
-# each generated HTML page. If it is left blank doxygen will generate a \r
-# standard footer.\r
-\r
-HTML_FOOTER            = \r
-\r
-# The HTML_STYLESHEET tag can be used to specify a user-defined cascading \r
-# style sheet that is used by each HTML page. It can be used to \r
-# fine-tune the look of the HTML output. If the tag is left blank doxygen \r
-# will generate a default style sheet. Note that doxygen will try to copy \r
-# the style sheet file to the HTML output directory, so don't put your own \r
-# stylesheet in the HTML output directory as well, or it will be erased!\r
-\r
-HTML_STYLESHEET        = \r
-\r
-# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, \r
-# files or namespaces will be aligned in HTML using tables. If set to \r
-# NO a bullet list will be used.\r
-\r
-HTML_ALIGN_MEMBERS     = YES\r
-\r
-# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML \r
-# documentation will contain sections that can be hidden and shown after the \r
-# page has loaded. For this to work a browser that supports \r
-# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox \r
-# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari).\r
-\r
-HTML_DYNAMIC_SECTIONS  = YES\r
-\r
-# If the GENERATE_DOCSET tag is set to YES, additional index files \r
-# will be generated that can be used as input for Apple's Xcode 3 \r
-# integrated development environment, introduced with OSX 10.5 (Leopard). \r
-# To create a documentation set, doxygen will generate a Makefile in the \r
-# HTML output directory. Running make will produce the docset in that \r
-# directory and running "make install" will install the docset in \r
-# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find \r
-# it at startup. \r
-# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information.\r
-\r
-GENERATE_DOCSET        = NO\r
-\r
-# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the \r
-# feed. A documentation feed provides an umbrella under which multiple \r
-# documentation sets from a single provider (such as a company or product suite) \r
-# can be grouped.\r
-\r
-DOCSET_FEEDNAME        = "Doxygen generated docs"\r
-\r
-# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that \r
-# should uniquely identify the documentation set bundle. This should be a \r
-# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen \r
-# will append .docset to the name.\r
-\r
-DOCSET_BUNDLE_ID       = org.doxygen.Project\r
-\r
-# If the GENERATE_HTMLHELP tag is set to YES, additional index files \r
-# will be generated that can be used as input for tools like the \r
-# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) \r
-# of the generated HTML documentation.\r
-\r
-GENERATE_HTMLHELP      = NO\r
-\r
-# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can \r
-# be used to specify the file name of the resulting .chm file. You \r
-# can add a path in front of the file if the result should not be \r
-# written to the html output directory.\r
-\r
-CHM_FILE               = \r
-\r
-# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can \r
-# be used to specify the location (absolute path including file name) of \r
-# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run \r
-# the HTML help compiler on the generated index.hhp.\r
-\r
-HHC_LOCATION           = \r
-\r
-# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag \r
-# controls if a separate .chi index file is generated (YES) or that \r
-# it should be included in the master .chm file (NO).\r
-\r
-GENERATE_CHI           = NO\r
-\r
-# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING\r
-# is used to encode HtmlHelp index (hhk), content (hhc) and project file\r
-# content.\r
-\r
-CHM_INDEX_ENCODING     = \r
-\r
-# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag \r
-# controls whether a binary table of contents is generated (YES) or a \r
-# normal table of contents (NO) in the .chm file.\r
-\r
-BINARY_TOC             = NO\r
-\r
-# The TOC_EXPAND flag can be set to YES to add extra items for group members \r
-# to the contents of the HTML help documentation and to the tree view.\r
-\r
-TOC_EXPAND             = YES\r
-\r
-# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER \r
-# are set, an additional index file will be generated that can be used as input for \r
-# Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated \r
-# HTML documentation.\r
-\r
-GENERATE_QHP           = NO\r
-\r
-# If the QHG_LOCATION tag is specified, the QCH_FILE tag can \r
-# be used to specify the file name of the resulting .qch file. \r
-# The path specified is relative to the HTML output folder.\r
-\r
-QCH_FILE               = \r
-\r
-# The QHP_NAMESPACE tag specifies the namespace to use when generating \r
-# Qt Help Project output. For more information please see \r
-# <a href="http://doc.trolltech.com/qthelpproject.html#namespace">Qt Help Project / Namespace</a>.\r
-\r
-QHP_NAMESPACE          = org.doxygen.Project\r
-\r
-# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating \r
-# Qt Help Project output. For more information please see \r
-# <a href="http://doc.trolltech.com/qthelpproject.html#virtual-folders">Qt Help Project / Virtual Folders</a>.\r
-\r
-QHP_VIRTUAL_FOLDER     = doc\r
-\r
-# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can \r
-# be used to specify the location of Qt's qhelpgenerator. \r
-# If non-empty doxygen will try to run qhelpgenerator on the generated \r
-# .qhp file .\r
-\r
-QHG_LOCATION           = \r
-\r
-# The DISABLE_INDEX tag can be used to turn on/off the condensed index at \r
-# top of each HTML page. The value NO (the default) enables the index and \r
-# the value YES disables it.\r
-\r
-DISABLE_INDEX          = NO\r
-\r
-# This tag can be used to set the number of enum values (range [1..20]) \r
-# that doxygen will group on one line in the generated HTML documentation.\r
-\r
-ENUM_VALUES_PER_LINE   = 1\r
-\r
-# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index\r
-# structure should be generated to display hierarchical information.\r
-# If the tag value is set to FRAME, a side panel will be generated\r
-# containing a tree-like index structure (just like the one that \r
-# is generated for HTML Help). For this to work a browser that supports \r
-# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, \r
-# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are \r
-# probably better off using the HTML help feature. Other possible values \r
-# for this tag are: HIERARCHIES, which will generate the Groups, Directories,\r
-# and Class Hierarchy pages using a tree view instead of an ordered list;\r
-# ALL, which combines the behavior of FRAME and HIERARCHIES; and NONE, which\r
-# disables this behavior completely. For backwards compatibility with previous\r
-# releases of Doxygen, the values YES and NO are equivalent to FRAME and NONE\r
-# respectively.\r
-\r
-GENERATE_TREEVIEW      = YES\r
-\r
-# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be \r
-# used to set the initial width (in pixels) of the frame in which the tree \r
-# is shown.\r
-\r
-TREEVIEW_WIDTH         = 250\r
-\r
-# Use this tag to change the font size of Latex formulas included \r
-# as images in the HTML documentation. The default is 10. Note that \r
-# when you change the font size after a successful doxygen run you need \r
-# to manually remove any form_*.png images from the HTML output directory \r
-# to force them to be regenerated.\r
-\r
-FORMULA_FONTSIZE       = 10\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the LaTeX output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will \r
-# generate Latex output.\r
-\r
-GENERATE_LATEX         = NO\r
-\r
-# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. \r
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
-# put in front of it. If left blank `latex' will be used as the default path.\r
-\r
-LATEX_OUTPUT           = latex\r
-\r
-# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be \r
-# invoked. If left blank `latex' will be used as the default command name.\r
-\r
-LATEX_CMD_NAME         = latex\r
-\r
-# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to \r
-# generate index for LaTeX. If left blank `makeindex' will be used as the \r
-# default command name.\r
-\r
-MAKEINDEX_CMD_NAME     = makeindex\r
-\r
-# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact \r
-# LaTeX documents. This may be useful for small projects and may help to \r
-# save some trees in general.\r
-\r
-COMPACT_LATEX          = NO\r
-\r
-# The PAPER_TYPE tag can be used to set the paper type that is used \r
-# by the printer. Possible values are: a4, a4wide, letter, legal and \r
-# executive. If left blank a4wide will be used.\r
-\r
-PAPER_TYPE             = a4wide\r
-\r
-# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX \r
-# packages that should be included in the LaTeX output.\r
-\r
-EXTRA_PACKAGES         = \r
-\r
-# The LATEX_HEADER tag can be used to specify a personal LaTeX header for \r
-# the generated latex document. The header should contain everything until \r
-# the first chapter. If it is left blank doxygen will generate a \r
-# standard header. Notice: only use this tag if you know what you are doing!\r
-\r
-LATEX_HEADER           = \r
-\r
-# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated \r
-# is prepared for conversion to pdf (using ps2pdf). The pdf file will \r
-# contain links (just like the HTML output) instead of page references \r
-# This makes the output suitable for online browsing using a pdf viewer.\r
-\r
-PDF_HYPERLINKS         = YES\r
-\r
-# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of \r
-# plain latex in the generated Makefile. Set this option to YES to get a \r
-# higher quality PDF documentation.\r
-\r
-USE_PDFLATEX           = YES\r
-\r
-# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. \r
-# command to the generated LaTeX files. This will instruct LaTeX to keep \r
-# running if errors occur, instead of asking the user for help. \r
-# This option is also used when generating formulas in HTML.\r
-\r
-LATEX_BATCHMODE        = NO\r
-\r
-# If LATEX_HIDE_INDICES is set to YES then doxygen will not \r
-# include the index chapters (such as File Index, Compound Index, etc.) \r
-# in the output.\r
-\r
-LATEX_HIDE_INDICES     = NO\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the RTF output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output \r
-# The RTF output is optimized for Word 97 and may not look very pretty with \r
-# other RTF readers or editors.\r
-\r
-GENERATE_RTF           = NO\r
-\r
-# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. \r
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
-# put in front of it. If left blank `rtf' will be used as the default path.\r
-\r
-RTF_OUTPUT             = rtf\r
-\r
-# If the COMPACT_RTF tag is set to YES Doxygen generates more compact \r
-# RTF documents. This may be useful for small projects and may help to \r
-# save some trees in general.\r
-\r
-COMPACT_RTF            = NO\r
-\r
-# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated \r
-# will contain hyperlink fields. The RTF file will \r
-# contain links (just like the HTML output) instead of page references. \r
-# This makes the output suitable for online browsing using WORD or other \r
-# programs which support those fields. \r
-# Note: wordpad (write) and others do not support links.\r
-\r
-RTF_HYPERLINKS         = NO\r
-\r
-# Load stylesheet definitions from file. Syntax is similar to doxygen's \r
-# config file, i.e. a series of assignments. You only have to provide \r
-# replacements, missing definitions are set to their default value.\r
-\r
-RTF_STYLESHEET_FILE    = \r
-\r
-# Set optional variables used in the generation of an rtf document. \r
-# Syntax is similar to doxygen's config file.\r
-\r
-RTF_EXTENSIONS_FILE    = \r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the man page output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_MAN tag is set to YES (the default) Doxygen will \r
-# generate man pages\r
-\r
-GENERATE_MAN           = NO\r
-\r
-# The MAN_OUTPUT tag is used to specify where the man pages will be put. \r
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
-# put in front of it. If left blank `man' will be used as the default path.\r
-\r
-MAN_OUTPUT             = man\r
-\r
-# The MAN_EXTENSION tag determines the extension that is added to \r
-# the generated man pages (default is the subroutine's section .3)\r
-\r
-MAN_EXTENSION          = .3\r
-\r
-# If the MAN_LINKS tag is set to YES and Doxygen generates man output, \r
-# then it will generate one additional man file for each entity \r
-# documented in the real man page(s). These additional files \r
-# only source the real man page, but without them the man command \r
-# would be unable to find the correct page. The default is NO.\r
-\r
-MAN_LINKS              = NO\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the XML output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_XML tag is set to YES Doxygen will \r
-# generate an XML file that captures the structure of \r
-# the code including all documentation.\r
-\r
-GENERATE_XML           = NO\r
-\r
-# The XML_OUTPUT tag is used to specify where the XML pages will be put. \r
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
-# put in front of it. If left blank `xml' will be used as the default path.\r
-\r
-XML_OUTPUT             = xml\r
-\r
-# The XML_SCHEMA tag can be used to specify an XML schema, \r
-# which can be used by a validating XML parser to check the \r
-# syntax of the XML files.\r
-\r
-XML_SCHEMA             = \r
-\r
-# The XML_DTD tag can be used to specify an XML DTD, \r
-# which can be used by a validating XML parser to check the \r
-# syntax of the XML files.\r
-\r
-XML_DTD                = \r
-\r
-# If the XML_PROGRAMLISTING tag is set to YES Doxygen will \r
-# dump the program listings (including syntax highlighting \r
-# and cross-referencing information) to the XML output. Note that \r
-# enabling this will significantly increase the size of the XML output.\r
-\r
-XML_PROGRAMLISTING     = YES\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options for the AutoGen Definitions output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will \r
-# generate an AutoGen Definitions (see autogen.sf.net) file \r
-# that captures the structure of the code including all \r
-# documentation. Note that this feature is still experimental \r
-# and incomplete at the moment.\r
-\r
-GENERATE_AUTOGEN_DEF   = NO\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the Perl module output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_PERLMOD tag is set to YES Doxygen will \r
-# generate a Perl module file that captures the structure of \r
-# the code including all documentation. Note that this \r
-# feature is still experimental and incomplete at the \r
-# moment.\r
-\r
-GENERATE_PERLMOD       = NO\r
-\r
-# If the PERLMOD_LATEX tag is set to YES Doxygen will generate \r
-# the necessary Makefile rules, Perl scripts and LaTeX code to be able \r
-# to generate PDF and DVI output from the Perl module output.\r
-\r
-PERLMOD_LATEX          = NO\r
-\r
-# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be \r
-# nicely formatted so it can be parsed by a human reader.  This is useful \r
-# if you want to understand what is going on.  On the other hand, if this \r
-# tag is set to NO the size of the Perl module output will be much smaller \r
-# and Perl will parse it just the same.\r
-\r
-PERLMOD_PRETTY         = YES\r
-\r
-# The names of the make variables in the generated doxyrules.make file \r
-# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. \r
-# This is useful so different doxyrules.make files included by the same \r
-# Makefile don't overwrite each other's variables.\r
-\r
-PERLMOD_MAKEVAR_PREFIX = \r
-\r
-#---------------------------------------------------------------------------\r
-# Configuration options related to the preprocessor   \r
-#---------------------------------------------------------------------------\r
-\r
-# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will \r
-# evaluate all C-preprocessor directives found in the sources and include \r
-# files.\r
-\r
-ENABLE_PREPROCESSING   = YES\r
-\r
-# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro \r
-# names in the source code. If set to NO (the default) only conditional \r
-# compilation will be performed. Macro expansion can be done in a controlled \r
-# way by setting EXPAND_ONLY_PREDEF to YES.\r
-\r
-MACRO_EXPANSION        = YES\r
-\r
-# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES \r
-# then the macro expansion is limited to the macros specified with the \r
-# PREDEFINED and EXPAND_AS_DEFINED tags.\r
-\r
-EXPAND_ONLY_PREDEF     = YES\r
-\r
-# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files \r
-# in the INCLUDE_PATH (see below) will be search if a #include is found.\r
-\r
-SEARCH_INCLUDES        = YES\r
-\r
-# The INCLUDE_PATH tag can be used to specify one or more directories that \r
-# contain include files that are not input files but should be processed by \r
-# the preprocessor.\r
-\r
-INCLUDE_PATH           = \r
-\r
-# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard \r
-# patterns (like *.h and *.hpp) to filter out the header-files in the \r
-# directories. If left blank, the patterns specified with FILE_PATTERNS will \r
-# be used.\r
-\r
-INCLUDE_FILE_PATTERNS  = \r
-\r
-# The PREDEFINED tag can be used to specify one or more macro names that \r
-# are defined before the preprocessor is started (similar to the -D option of \r
-# gcc). The argument of the tag is a list of macros of the form: name \r
-# or name=definition (no spaces). If the definition and the = are \r
-# omitted =1 is assumed. To prevent a macro definition from being \r
-# undefined via #undef or recursively expanded use the := operator \r
-# instead of the = operator.\r
-\r
-PREDEFINED             = __DOXYGEN__\r
-\r
-# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then \r
-# this tag can be used to specify a list of macro names that should be expanded. \r
-# The macro definition that is found in the sources will be used. \r
-# Use the PREDEFINED tag if you want to use a different macro definition.\r
-\r
-EXPAND_AS_DEFINED      = BUTTLOADTAG\r
-\r
-# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then \r
-# doxygen's preprocessor will remove all function-like macros that are alone \r
-# on a line, have an all uppercase name, and do not end with a semicolon. Such \r
-# function macros are typically used for boiler-plate code, and will confuse \r
-# the parser if not removed.\r
-\r
-SKIP_FUNCTION_MACROS   = YES\r
-\r
-#---------------------------------------------------------------------------\r
-# Configuration::additions related to external references   \r
-#---------------------------------------------------------------------------\r
-\r
-# The TAGFILES option can be used to specify one or more tagfiles. \r
-# Optionally an initial location of the external documentation \r
-# can be added for each tagfile. The format of a tag file without \r
-# this location is as follows: \r
-#   TAGFILES = file1 file2 ... \r
-# Adding location for the tag files is done as follows: \r
-#   TAGFILES = file1=loc1 "file2 = loc2" ... \r
-# where "loc1" and "loc2" can be relative or absolute paths or \r
-# URLs. If a location is present for each tag, the installdox tool \r
-# does not have to be run to correct the links.\r
-# Note that each tag file must have a unique name\r
-# (where the name does NOT include the path)\r
-# If a tag file is not located in the directory in which doxygen \r
-# is run, you must also specify the path to the tagfile here.\r
-\r
-TAGFILES               = \r
-\r
-# When a file name is specified after GENERATE_TAGFILE, doxygen will create \r
-# a tag file that is based on the input files it reads.\r
-\r
-GENERATE_TAGFILE       = \r
-\r
-# If the ALLEXTERNALS tag is set to YES all external classes will be listed \r
-# in the class index. If set to NO only the inherited external classes \r
-# will be listed.\r
-\r
-ALLEXTERNALS           = NO\r
-\r
-# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed \r
-# in the modules index. If set to NO, only the current project's groups will \r
-# be listed.\r
-\r
-EXTERNAL_GROUPS        = YES\r
-\r
-# The PERL_PATH should be the absolute path and name of the perl script \r
-# interpreter (i.e. the result of `which perl').\r
-\r
-PERL_PATH              = /usr/bin/perl\r
-\r
-#---------------------------------------------------------------------------\r
-# Configuration options related to the dot tool   \r
-#---------------------------------------------------------------------------\r
-\r
-# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will \r
-# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base \r
-# or super classes. Setting the tag to NO turns the diagrams off. Note that \r
-# this option is superseded by the HAVE_DOT option below. This is only a \r
-# fallback. It is recommended to install and use dot, since it yields more \r
-# powerful graphs.\r
-\r
-CLASS_DIAGRAMS         = NO\r
-\r
-# You can define message sequence charts within doxygen comments using the \msc \r
-# command. Doxygen will then run the mscgen tool (see \r
-# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the \r
-# documentation. The MSCGEN_PATH tag allows you to specify the directory where \r
-# the mscgen tool resides. If left empty the tool is assumed to be found in the \r
-# default search path.\r
-\r
-MSCGEN_PATH            = \r
-\r
-# If set to YES, the inheritance and collaboration graphs will hide \r
-# inheritance and usage relations if the target is undocumented \r
-# or is not a class.\r
-\r
-HIDE_UNDOC_RELATIONS   = YES\r
-\r
-# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is \r
-# available from the path. This tool is part of Graphviz, a graph visualization \r
-# toolkit from AT&T and Lucent Bell Labs. The other options in this section \r
-# have no effect if this option is set to NO (the default)\r
-\r
-HAVE_DOT               = NO\r
-\r
-# By default doxygen will write a font called FreeSans.ttf to the output \r
-# directory and reference it in all dot files that doxygen generates. This \r
-# font does not include all possible unicode characters however, so when you need \r
-# these (or just want a differently looking font) you can specify the font name \r
-# using DOT_FONTNAME. You need need to make sure dot is able to find the font, \r
-# which can be done by putting it in a standard location or by setting the \r
-# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory \r
-# containing the font.\r
-\r
-DOT_FONTNAME           = FreeSans\r
-\r
-# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. \r
-# The default size is 10pt.\r
-\r
-DOT_FONTSIZE           = 10\r
-\r
-# By default doxygen will tell dot to use the output directory to look for the \r
-# FreeSans.ttf font (which doxygen will put there itself). If you specify a \r
-# different font using DOT_FONTNAME you can set the path where dot \r
-# can find it using this tag.\r
-\r
-DOT_FONTPATH           = \r
-\r
-# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen \r
-# will generate a graph for each documented class showing the direct and \r
-# indirect inheritance relations. Setting this tag to YES will force the \r
-# the CLASS_DIAGRAMS tag to NO.\r
-\r
-CLASS_GRAPH            = NO\r
-\r
-# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen \r
-# will generate a graph for each documented class showing the direct and \r
-# indirect implementation dependencies (inheritance, containment, and \r
-# class references variables) of the class with other documented classes.\r
-\r
-COLLABORATION_GRAPH    = NO\r
-\r
-# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen \r
-# will generate a graph for groups, showing the direct groups dependencies\r
-\r
-GROUP_GRAPHS           = NO\r
-\r
-# If the UML_LOOK tag is set to YES doxygen will generate inheritance and \r
-# collaboration diagrams in a style similar to the OMG's Unified Modeling \r
-# Language.\r
-\r
-UML_LOOK               = NO\r
-\r
-# If set to YES, the inheritance and collaboration graphs will show the \r
-# relations between templates and their instances.\r
-\r
-TEMPLATE_RELATIONS     = NO\r
-\r
-# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT \r
-# tags are set to YES then doxygen will generate a graph for each documented \r
-# file showing the direct and indirect include dependencies of the file with \r
-# other documented files.\r
-\r
-INCLUDE_GRAPH          = NO\r
-\r
-# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and \r
-# HAVE_DOT tags are set to YES then doxygen will generate a graph for each \r
-# documented header file showing the documented files that directly or \r
-# indirectly include this file.\r
-\r
-INCLUDED_BY_GRAPH      = NO\r
-\r
-# If the CALL_GRAPH and HAVE_DOT options are set to YES then \r
-# doxygen will generate a call dependency graph for every global function \r
-# or class method. Note that enabling this option will significantly increase \r
-# the time of a run. So in most cases it will be better to enable call graphs \r
-# for selected functions only using the \callgraph command.\r
-\r
-CALL_GRAPH             = NO\r
-\r
-# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then \r
-# doxygen will generate a caller dependency graph for every global function \r
-# or class method. Note that enabling this option will significantly increase \r
-# the time of a run. So in most cases it will be better to enable caller \r
-# graphs for selected functions only using the \callergraph command.\r
-\r
-CALLER_GRAPH           = NO\r
-\r
-# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen \r
-# will graphical hierarchy of all classes instead of a textual one.\r
-\r
-GRAPHICAL_HIERARCHY    = NO\r
-\r
-# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES \r
-# then doxygen will show the dependencies a directory has on other directories \r
-# in a graphical way. The dependency relations are determined by the #include\r
-# relations between the files in the directories.\r
-\r
-DIRECTORY_GRAPH        = NO\r
-\r
-# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images \r
-# generated by dot. Possible values are png, jpg, or gif\r
-# If left blank png will be used.\r
-\r
-DOT_IMAGE_FORMAT       = png\r
-\r
-# The tag DOT_PATH can be used to specify the path where the dot tool can be \r
-# found. If left blank, it is assumed the dot tool can be found in the path.\r
-\r
-DOT_PATH               = "C:/Program Files/Graphviz2.18/bin"\r
-\r
-# The DOTFILE_DIRS tag can be used to specify one or more directories that \r
-# contain dot files that are included in the documentation (see the \r
-# \dotfile command).\r
-\r
-DOTFILE_DIRS           = \r
-\r
-# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of \r
-# nodes that will be shown in the graph. If the number of nodes in a graph \r
-# becomes larger than this value, doxygen will truncate the graph, which is \r
-# visualized by representing a node as a red box. Note that doxygen if the \r
-# number of direct children of the root node in a graph is already larger than \r
-# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note \r
-# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.\r
-\r
-DOT_GRAPH_MAX_NODES    = 15\r
-\r
-# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the \r
-# graphs generated by dot. A depth value of 3 means that only nodes reachable \r
-# from the root by following a path via at most 3 edges will be shown. Nodes \r
-# that lay further from the root node will be omitted. Note that setting this \r
-# option to 1 or 2 may greatly reduce the computation time needed for large \r
-# code bases. Also note that the size of a graph can be further restricted by \r
-# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.\r
-\r
-MAX_DOT_GRAPH_DEPTH    = 2\r
-\r
-# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent \r
-# background. This is disabled by default, because dot on Windows does not \r
-# seem to support this out of the box. Warning: Depending on the platform used, \r
-# enabling this option may lead to badly anti-aliased labels on the edges of \r
-# a graph (i.e. they become hard to read).\r
-\r
-DOT_TRANSPARENT        = YES\r
-\r
-# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output \r
-# files in one run (i.e. multiple -o and -T options on the command line). This \r
-# makes dot run faster, but since only newer versions of dot (>1.8.10) \r
-# support this, this feature is disabled by default.\r
-\r
-DOT_MULTI_TARGETS      = NO\r
-\r
-# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will \r
-# generate a legend page explaining the meaning of the various boxes and \r
-# arrows in the dot generated graphs.\r
-\r
-GENERATE_LEGEND        = YES\r
-\r
-# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will \r
-# remove the intermediate dot files that are used to generate \r
-# the various graphs.\r
-\r
-DOT_CLEANUP            = YES\r
-\r
-#---------------------------------------------------------------------------\r
-# Configuration::additions related to the search engine   \r
-#---------------------------------------------------------------------------\r
-\r
-# The SEARCHENGINE tag specifies whether or not a search engine should be \r
-# used. If set to NO the values of all tags below this one will be ignored.\r
-\r
-SEARCHENGINE           = NO\r
diff --git a/Demos/Device/RNDISEthernet/LUFA RNDIS.inf b/Demos/Device/RNDISEthernet/LUFA RNDIS.inf
deleted file mode 100644 (file)
index a124afe..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-;     Windows LUFA RNDIS Setup File\r
-; Copyright (c) 2000 Microsoft Corporation\r
-\r
-[Version]\r
-Signature           = "$Windows NT$"\r
-Class               = Net\r
-ClassGUID           = {4d36e972-e325-11ce-bfc1-08002be10318}\r
-Provider            = %COMPANY%\r
-DriverVer           = 06/21/2006,6.0.6000.16384\r
-;CatalogFile        = device.cat\r
-\r
-[Manufacturer]\r
-%COMPANY%         = RndisDevices,NTx86,NTamd64,NTia64\r
-\r
-; Decoration for x86 architecture\r
-[RndisDevices.NTx86]\r
-%RNDISDEV%    = RNDIS.NT.5.1, USB\VID_03EB&PID_204C\r
-\r
-; Decoration for x64 architecture\r
-[RndisDevices.NTamd64]\r
-%RNDISDEV%    = RNDIS.NT.5.1, USB\VID_03EB&PID_204C\r
-\r
-; Decoration for ia64 architecture\r
-[RndisDevices.NTia64]\r
-%RNDISDEV%    = RNDIS.NT.5.1, USB\VID_03EB&PID_204C\r
-\r
-;@@@ This is the common setting for setup\r
-[ControlFlags]\r
-ExcludeFromSelect=*\r
-\r
-; DDInstall section\r
-; References the in-build Netrndis.inf\r
-[RNDIS.NT.5.1]\r
-Characteristics = 0x84   ; NCF_PHYSICAL + NCF_HAS_UI\r
-BusType         = 15\r
-; NEVER REMOVE THE FOLLOWING REFERENCE FOR NETRNDIS.INF\r
-include         = netrndis.inf\r
-needs           = Usb_Rndis.ndi\r
-AddReg          = Rndis_AddReg_Vista\r
-\r
-; DDInstal.Services section\r
-[RNDIS.NT.5.1.Services]\r
-include     = netrndis.inf\r
-needs       = Usb_Rndis.ndi.Services\r
-\r
-; No sys copyfiles - the sys files are already in-build \r
-; (part of the operating system).\r
-\r
-; Modify these strings for your device as needed.\r
-[Strings] \r
-COMPANY="LUFA Library"\r
-RNDISDEV="LUFA USB RNDIS Demo"
\ No newline at end of file
diff --git a/Demos/Device/RNDISEthernet/Lib/ARP.c b/Demos/Device/RNDISEthernet/Lib/ARP.c
deleted file mode 100644 (file)
index 0f108c2..0000000
+++ /dev/null
@@ -1,85 +0,0 @@
-/*\r
-             LUFA Library\r
-     Copyright (C) Dean Camera, 2009.\r
-              \r
-  dean [at] fourwalledcubicle [dot] com\r
-      www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
-  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
-  Permission to use, copy, modify, and distribute this software\r
-  and its documentation for any purpose and without fee is hereby\r
-  granted, provided that the above copyright notice appear in all\r
-  copies and that both that the copyright notice and this\r
-  permission notice and warranty disclaimer appear in supporting\r
-  documentation, and that the name of the author not be used in\r
-  advertising or publicity pertaining to distribution of the\r
-  software without specific, written prior permission.\r
-\r
-  The author disclaim all warranties with regard to this\r
-  software, including all implied warranties of merchantability\r
-  and fitness.  In no event shall the author be liable for any\r
-  special, indirect or consequential damages or any damages\r
-  whatsoever resulting from loss of use, data or profits, whether\r
-  in an action of contract, negligence or other tortious action,\r
-  arising out of or in connection with the use or performance of\r
-  this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- *  Address Resolution Protocol (ARP) packet handling routines. This protocol handles the\r
- *  conversion of physical MAC addresses to protocol IP addresses between the host and the\r
- *  device.\r
- */\r
\r
-#include "ARP.h"\r
-\r
-/** Processes an ARP packet inside an Ethernet frame, and writes the appropriate response\r
- *  to the output Ethernet frame if the host is requesting the IP or MAC address of the\r
- *  virtual server device on the network.\r
- *\r
- *  \param InDataStart   Pointer to the start of the incoming packet's ARP header\r
- *  \param OutDataStart  Pointer to the start of the outgoing packet's ARP header\r
- *\r
- *  \return The number of bytes written to the out Ethernet frame if any, NO_RESPONSE otherwise\r
- */\r
-int16_t ARP_ProcessARPPacket(void* InDataStart, void* OutDataStart)\r
-{\r
-       DecodeARPHeader(InDataStart);\r
-\r
-       ARP_Header_t* ARPHeaderIN  = (ARP_Header_t*)InDataStart;\r
-       ARP_Header_t* ARPHeaderOUT = (ARP_Header_t*)OutDataStart;\r
-\r
-       /* Ensure that the ARP request is a IPv4 request packet */\r
-       if ((SwapEndian_16(ARPHeaderIN->ProtocolType) == ETHERTYPE_IPV4) &&\r
-           (SwapEndian_16(ARPHeaderIN->Operation) == ARP_OPERATION_REQUEST))\r
-       {\r
-               /* If the ARP packet is requesting the MAC or IP of the virtual webserver, return the response */\r
-               if (IP_COMPARE(&ARPHeaderIN->TPA, &ServerIPAddress) || \r
-                   MAC_COMPARE(&ARPHeaderIN->THA, &ServerMACAddress))\r
-               {\r
-                       /* Fill out the ARP response header */\r
-                       ARPHeaderOUT->HardwareType = ARPHeaderIN->HardwareType;\r
-                       ARPHeaderOUT->ProtocolType = ARPHeaderIN->ProtocolType;\r
-                       ARPHeaderOUT->HLEN         = ARPHeaderIN->HLEN;\r
-                       ARPHeaderOUT->PLEN         = ARPHeaderIN->PLEN;\r
-                       ARPHeaderOUT->Operation    = SwapEndian_16(ARP_OPERATION_REPLY);\r
-\r
-                       /* Copy over the sender MAC/IP to the target fields for the response */\r
-                       ARPHeaderOUT->THA = ARPHeaderIN->SHA;\r
-                       ARPHeaderOUT->TPA = ARPHeaderIN->SPA;\r
-\r
-                       /* Copy over the new sender MAC/IP - MAC and IP addresses of the virtual webserver */\r
-                       ARPHeaderOUT->SHA = ServerMACAddress;\r
-                       ARPHeaderOUT->SPA = ServerIPAddress;\r
-\r
-                       /* Return the size of the response so far */\r
-                       return sizeof(ARP_Header_t);\r
-               }\r
-       }\r
-       \r
-       return NO_RESPONSE;\r
-}\r
diff --git a/Demos/Device/RNDISEthernet/Lib/ARP.h b/Demos/Device/RNDISEthernet/Lib/ARP.h
deleted file mode 100644 (file)
index f05d8f0..0000000
+++ /dev/null
@@ -1,74 +0,0 @@
-/*\r
-             LUFA Library\r
-     Copyright (C) Dean Camera, 2009.\r
-              \r
-  dean [at] fourwalledcubicle [dot] com\r
-      www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
-  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
-  Permission to use, copy, modify, and distribute this software\r
-  and its documentation for any purpose and without fee is hereby\r
-  granted, provided that the above copyright notice appear in all\r
-  copies and that both that the copyright notice and this\r
-  permission notice and warranty disclaimer appear in supporting\r
-  documentation, and that the name of the author not be used in\r
-  advertising or publicity pertaining to distribution of the\r
-  software without specific, written prior permission.\r
-\r
-  The author disclaim all warranties with regard to this\r
-  software, including all implied warranties of merchantability\r
-  and fitness.  In no event shall the author be liable for any\r
-  special, indirect or consequential damages or any damages\r
-  whatsoever resulting from loss of use, data or profits, whether\r
-  in an action of contract, negligence or other tortious action,\r
-  arising out of or in connection with the use or performance of\r
-  this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- *  Header file for ARP.c.\r
- */\r
\r
-#ifndef _ARP_H_\r
-#define _ARP_H_\r
-\r
-       /* Includes: */\r
-               #include <avr/io.h>\r
-               #include <string.h>
-               \r
-               #include "EthernetProtocols.h"\r
-               #include "Ethernet.h"\r
-               #include "ProtocolDecoders.h"\r
-               \r
-       /* Macros: */\r
-               /** ARP header operation constant, indicating a request from a host for an address translation */\r
-               #define ARP_OPERATION_REQUEST            1\r
-\r
-               /** ARP header operation constant, indicating a reply from a host giving an address translation */\r
-               #define ARP_OPERATION_REPLY              2\r
-\r
-       /* Type Defines: */\r
-               /** Type define for an ARP packet inside an Ethernet frame. */\r
-               typedef struct\r
-               {\r
-                       uint16_t      HardwareType; /**< Hardware type constant, indicating the hardware used */\r
-                       uint16_t      ProtocolType; /**< Protocol being resolved, usually ETHERTYPE_IPV4 */\r
-                       \r
-                       uint8_t       HLEN; /**< Length in bytes of the source/destination hardware addresses */\r
-                       uint8_t       PLEN; /**< Length in bytes of the source/destination protocol addresses */\r
-                       uint16_t      Operation; /**< Type of operation, either ARP_OPERATION_REQUEST or ARP_OPERATION_REPLY */\r
-                       \r
-                       MAC_Address_t SHA; /**< Sender's hardware address */\r
-                       IP_Address_t  SPA; /**< Sender's protocol address */\r
-                       MAC_Address_t THA; /**< Target's hardware address */\r
-                       IP_Address_t  TPA; /**< Target's protocol address */\r
-               } ARP_Header_t;\r
-               \r
-       /* Function Prototypes: */\r
-               int16_t ARP_ProcessARPPacket(void* InDataStart, void* OutDataStart);\r
-\r
-#endif\r
diff --git a/Demos/Device/RNDISEthernet/Lib/DHCP.c b/Demos/Device/RNDISEthernet/Lib/DHCP.c
deleted file mode 100644 (file)
index 76711fb..0000000
+++ /dev/null
@@ -1,118 +0,0 @@
-/*\r
-             LUFA Library\r
-     Copyright (C) Dean Camera, 2009.\r
-              \r
-  dean [at] fourwalledcubicle [dot] com\r
-      www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
-  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
-  Permission to use, copy, modify, and distribute this software\r
-  and its documentation for any purpose and without fee is hereby\r
-  granted, provided that the above copyright notice appear in all\r
-  copies and that both that the copyright notice and this\r
-  permission notice and warranty disclaimer appear in supporting\r
-  documentation, and that the name of the author not be used in\r
-  advertising or publicity pertaining to distribution of the\r
-  software without specific, written prior permission.\r
-\r
-  The author disclaim all warranties with regard to this\r
-  software, including all implied warranties of merchantability\r
-  and fitness.  In no event shall the author be liable for any\r
-  special, indirect or consequential damages or any damages\r
-  whatsoever resulting from loss of use, data or profits, whether\r
-  in an action of contract, negligence or other tortious action,\r
-  arising out of or in connection with the use or performance of\r
-  this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- *  Dynamic Host Configuration Protocol (DHCP) packet handling routines. This protocol\r
- *  handles the automatic IP negotiation to the host, so that the host will use the provided\r
- *  IP address given to it by the device.\r
- */\r
\r
-#include "DHCP.h"\r
-\r
-/** Processes a DHCP packet inside an Ethernet frame, and writes the appropriate response\r
- *  to the output Ethernet frame if the host is requesting or accepting an IP address.\r
- *\r
- *  \param IPHeaderInStart     Pointer to the start of the incoming packet's IP header\r
- *  \param DHCPHeaderInStart   Pointer to the start of the incoming packet's DHCP header\r
- *  \param DHCPHeaderOutStart  Pointer to the start of the outgoing packet's DHCP header\r
- *\r
- *  \return The number of bytes written to the out Ethernet frame if any, NO_RESPONSE otherwise\r
- */\r
-int16_t DHCP_ProcessDHCPPacket(void* IPHeaderInStart, void* DHCPHeaderInStart, void* DHCPHeaderOutStart)\r
-{\r
-       IP_Header_t*   IPHeaderIN    = (IP_Header_t*)IPHeaderInStart;\r
-       DHCP_Header_t* DHCPHeaderIN  = (DHCP_Header_t*)DHCPHeaderInStart;\r
-       DHCP_Header_t* DHCPHeaderOUT = (DHCP_Header_t*)DHCPHeaderOutStart;\r
-       \r
-       uint8_t* DHCPOptionsINStart  = (uint8_t*)(DHCPHeaderInStart  + sizeof(DHCP_Header_t));\r
-       uint8_t* DHCPOptionsOUTStart = (uint8_t*)(DHCPHeaderOutStart + sizeof(DHCP_Header_t));\r
-\r
-       DecodeDHCPHeader(DHCPHeaderInStart);\r
-\r
-       /* Zero out the response DHCP packet, as much of it legacy and left at 0 */\r
-       memset(DHCPHeaderOUT, 0, sizeof(DHCP_Header_t));\r
-\r
-       /* Fill out the response DHCP packet */\r
-       DHCPHeaderOUT->HardwareType          = DHCPHeaderIN->HardwareType;\r
-       DHCPHeaderOUT->Operation             = DHCP_OP_BOOTREPLY;\r
-       DHCPHeaderOUT->HardwareAddressLength = DHCPHeaderIN->HardwareAddressLength;\r
-       DHCPHeaderOUT->Hops                  = 0;\r
-       DHCPHeaderOUT->TransactionID         = DHCPHeaderIN->TransactionID;\r
-       DHCPHeaderOUT->ElapsedSeconds        = 0;\r
-       DHCPHeaderOUT->Flags                 = DHCPHeaderIN->Flags;\r
-       DHCPHeaderOUT->YourIP                = ClientIPAddress;\r
-       memcpy(&DHCPHeaderOUT->ClientHardwareAddress, &DHCPHeaderIN->ClientHardwareAddress, sizeof(MAC_Address_t));\r
-       DHCPHeaderOUT->Cookie                = SwapEndian_32(DHCP_MAGIC_COOKIE);\r
-       \r
-       /* Alter the incoming IP packet header so that the corrected IP source and destinations are used - this means that\r
-          when the response IP header is generated, it will use the corrected addresses and not the null/broatcast addresses */\r
-       IPHeaderIN->SourceAddress      = ClientIPAddress;\r
-       IPHeaderIN->DestinationAddress = ServerIPAddress;\r
-\r
-       /* Process the incoming DHCP packet options */\r
-       while (DHCPOptionsINStart[0] != DHCP_OPTION_END)\r
-       {       \r
-               /* Find the Message Type DHCP option, to determine the type of DHCP packet */\r
-               if (DHCPOptionsINStart[0] == DHCP_OPTION_MESSAGETYPE)\r
-               {\r
-                       if ((DHCPOptionsINStart[2] == DHCP_MESSAGETYPE_DISCOVER) || (DHCPOptionsINStart[2] == DHCP_MESSAGETYPE_REQUEST))\r
-                       {\r
-                               /* Fill out the response DHCP packet options for a DHCP OFFER or ACK response */\r
-\r
-                               *(DHCPOptionsOUTStart++) = DHCP_OPTION_MESSAGETYPE;\r
-                               *(DHCPOptionsOUTStart++) = 1;\r
-                               *(DHCPOptionsOUTStart++) = (DHCPOptionsINStart[2] == DHCP_MESSAGETYPE_DISCOVER) ? DHCP_MESSAGETYPE_OFFER\r
-                                                                                                                                                                                               : DHCP_MESSAGETYPE_ACK;\r
-\r
-                               *(DHCPOptionsOUTStart++) = DHCP_OPTION_SUBNETMASK;\r
-                               *(DHCPOptionsOUTStart++) = 4;\r
-                               *(DHCPOptionsOUTStart++) = 0xFF;\r
-                               *(DHCPOptionsOUTStart++) = 0xFF;\r
-                               *(DHCPOptionsOUTStart++) = 0xFF;\r
-                               *(DHCPOptionsOUTStart++) = 0x00;\r
-\r
-                               *(DHCPOptionsOUTStart++) = DHCP_OPTION_DHCPSERVER;\r
-                               *(DHCPOptionsOUTStart++) = sizeof(IP_Address_t);\r
-                               memcpy(DHCPOptionsOUTStart, &ServerIPAddress, sizeof(IP_Address_t));\r
-                               DHCPOptionsOUTStart     += sizeof(IP_Address_t);\r
-\r
-                               *(DHCPOptionsOUTStart++) = DHCP_OPTION_END;\r
-                               \r
-                               return (sizeof(DHCP_Header_t) + 12 + sizeof(IP_Address_t));\r
-                       }\r
-               }\r
-               \r
-               /* Go to the next DHCP option - skip one byte if option is a padding byte, else skip the complete option's size */\r
-               DHCPOptionsINStart += ((DHCPOptionsINStart[0] == DHCP_OPTION_PAD) ? 1 : (DHCPOptionsINStart[1] + 2));\r
-       }\r
-       \r
-       return NO_RESPONSE;\r
-}\r
diff --git a/Demos/Device/RNDISEthernet/Lib/DHCP.h b/Demos/Device/RNDISEthernet/Lib/DHCP.h
deleted file mode 100644 (file)
index f0e68b9..0000000
+++ /dev/null
@@ -1,125 +0,0 @@
-/*\r
-             LUFA Library\r
-     Copyright (C) Dean Camera, 2009.\r
-              \r
-  dean [at] fourwalledcubicle [dot] com\r
-      www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
-  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
-  Permission to use, copy, modify, and distribute this software\r
-  and its documentation for any purpose and without fee is hereby\r
-  granted, provided that the above copyright notice appear in all\r
-  copies and that both that the copyright notice and this\r
-  permission notice and warranty disclaimer appear in supporting\r
-  documentation, and that the name of the author not be used in\r
-  advertising or publicity pertaining to distribution of the\r
-  software without specific, written prior permission.\r
-\r
-  The author disclaim all warranties with regard to this\r
-  software, including all implied warranties of merchantability\r
-  and fitness.  In no event shall the author be liable for any\r
-  special, indirect or consequential damages or any damages\r
-  whatsoever resulting from loss of use, data or profits, whether\r
-  in an action of contract, negligence or other tortious action,\r
-  arising out of or in connection with the use or performance of\r
-  this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- *  Header file for DHCP.c.\r
- */\r
\r
-#ifndef _DHCP_H_\r
-#define _DHCP_H_\r
-\r
-       /* Includes: */\r
-               #include <avr/io.h>\r
-               #include <string.h>\r
-       \r
-               #include "EthernetProtocols.h"\r
-               #include "Ethernet.h"\r
-               #include "ProtocolDecoders.h"\r
-\r
-       /* Macros: */\r
-               /** DHCP operation constant, indicating a request from a host to a DHCP server */\r
-               #define DHCP_OP_BOOTREQUEST       0x01\r
-\r
-               /** DHCP operation constant, indicating a reply from a DHCP server to a host */\r
-               #define DHCP_OP_BOOTREPLY         0x02\r
-               \r
-               /** Hardware type constant, indicating Ethernet as a carrier */\r
-               #define DHCP_HTYPE_ETHERNET       0x01\r
-               \r
-               /** Magic boot protocol "cookie", inserted into all BOOTP packets (BOOTP is the carrier of DHCP) */\r
-               #define DHCP_MAGIC_COOKIE         0x63825363\r
-               \r
-               /** DHCP option list entry header, indicating that a subnet mask will follow */\r
-               #define DHCP_OPTION_SUBNETMASK    1\r
-\r
-               /** DHCP option list entry header, indicating that the DHCP message type constant will follow */\r
-               #define DHCP_OPTION_MESSAGETYPE   53\r
-\r
-               /** DHCP option list entry header, indicating that the IP address of the DHCP server will follow */\r
-               #define DHCP_OPTION_DHCPSERVER    54\r
-\r
-               /** DHCP option list entry header, used to pad out option data */\r
-               #define DHCP_OPTION_PAD           0\r
-\r
-               /** DHCP option list entry header, indicating the end of option data */\r
-               #define DHCP_OPTION_END           255\r
-                       \r
-               /** Message type constant, used in the DHCP option data field, requesting that a DHCP server offer an IP address */\r
-               #define DHCP_MESSAGETYPE_DISCOVER 1\r
-\r
-               /** Message type constant, used in the DHCP option data field, indicating that a DHCP server is offering an IP address */\r
-               #define DHCP_MESSAGETYPE_OFFER    2\r
-\r
-               /** Message type constant, used in the DHCP option data field, requesting that a DHCP server lease a given IP address */\r
-               #define DHCP_MESSAGETYPE_REQUEST  3\r
-\r
-               /** Message type constant, used in the DHCP option data field, declining an offered DHCP server IP address lease */\r
-               #define DHCP_MESSAGETYPE_DECLINE  4\r
-\r
-               /** Message type constant, used in the DHCP option data field, ACKing a host IP lease request */\r
-               #define DHCP_MESSAGETYPE_ACK      5\r
-\r
-               /** Message type constant, used in the DHCP option data field, NACKing a host IP lease request */\r
-               #define DHCP_MESSAGETYPE_NACK     6\r
-\r
-               /** Message type constant, used in the DHCP option data field, indicating that a host is releasing a leased IP address */\r
-               #define DHCP_MESSAGETYPE_RELEASE  7\r
-\r
-       /* Type Defines: */\r
-               /** Type define for a DHCP packet inside an Ethernet frame. */\r
-               typedef struct\r
-               {\r
-                       uint8_t  Operation; /**< DHCP operation, either DHCP_OP_BOOTREQUEST or DHCP_OP_BOOTREPLY */\r
-                       uint8_t  HardwareType; /**< Hardware carrier type constant */\r
-                       uint8_t  HardwareAddressLength;  /**< Length in bytes of a hardware (MAC) address on the network */\r
-                       uint8_t  Hops; /**< Number of hops required to reach the server, unused */\r
-\r
-                       uint32_t TransactionID; /**< Unique ID of the DHCP packet, for positive matching between sent and received packets */\r
-\r
-                       uint16_t ElapsedSeconds; /**< Elapsed seconds since the request was made */\r
-                       uint16_t Flags; /**< BOOTP packet flags */\r
-                       \r
-                       IP_Address_t ClientIP; /**< Client IP address, if already leased an IP */\r
-                       IP_Address_t YourIP; /**< Client IP address */\r
-                       IP_Address_t NextServerIP; /**< Legacy BOOTP protocol field, unused for DHCP */\r
-                       IP_Address_t RelayAgentIP; /**< Legacy BOOTP protocol field, unused for DHCP */\r
-                       \r
-                       uint8_t ClientHardwareAddress[16]; /**< Hardware (MAC) address of the client making a request to the DHCP server */\r
-                       uint8_t ServerHostnameString[64]; /**< Legacy BOOTP protocol field, unused for DHCP */\r
-                       uint8_t BootFileName[128]; /**< Legacy BOOTP protocol field, unused for DHCP */\r
-                       \r
-                       uint32_t Cookie; /**< Magic BOOTP protocol cookie to indicate a valid packet */\r
-               } DHCP_Header_t;\r
-\r
-       /* Function Prototypes: */\r
-               int16_t DHCP_ProcessDHCPPacket(void* IPHeaderInStart, void* DHCPHeaderInStart, void* DHCPHeaderOutStart);\r
-\r
-#endif\r
diff --git a/Demos/Device/RNDISEthernet/Lib/Ethernet.c b/Demos/Device/RNDISEthernet/Lib/Ethernet.c
deleted file mode 100644 (file)
index 57380a0..0000000
+++ /dev/null
@@ -1,130 +0,0 @@
-/*\r
-             LUFA Library\r
-     Copyright (C) Dean Camera, 2009.\r
-              \r
-  dean [at] fourwalledcubicle [dot] com\r
-      www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
-  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
-  Permission to use, copy, modify, and distribute this software\r
-  and its documentation for any purpose and without fee is hereby\r
-  granted, provided that the above copyright notice appear in all\r
-  copies and that both that the copyright notice and this\r
-  permission notice and warranty disclaimer appear in supporting\r
-  documentation, and that the name of the author not be used in\r
-  advertising or publicity pertaining to distribution of the\r
-  software without specific, written prior permission.\r
-\r
-  The author disclaim all warranties with regard to this\r
-  software, including all implied warranties of merchantability\r
-  and fitness.  In no event shall the author be liable for any\r
-  special, indirect or consequential damages or any damages\r
-  whatsoever resulting from loss of use, data or profits, whether\r
-  in an action of contract, negligence or other tortious action,\r
-  arising out of or in connection with the use or performance of\r
-  this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- *  Ethernet frame packet handling routines. This protocol handles the processing of raw Ethernet\r
- *  frames sent and received, deferring the processing of subpacket protocols to the appropriate\r
- *  protocol handlers, such as DHCP or ARP.\r
- */\r
\r
-#include "Ethernet.h"\r
-\r
-/* Global Variables: */\r
-/** Constant for convenience when checking against or setting a MAC address to the virtual server MAC address. */\r
-const MAC_Address_t ServerMACAddress    = {SERVER_MAC_ADDRESS};\r
-\r
-/** Constant for convenience when checking against or setting an IP address to the virtual server IP address. */\r
-const IP_Address_t  ServerIPAddress     = {SERVER_IP_ADDRESS};\r
-\r
-/** Constant for convenience when checking against or setting a MAC address to the broadcast MAC address. */\r
-const MAC_Address_t BroadcastMACAddress = {BROADCAST_MAC_ADDRESS};\r
-\r
-/** Constant for convenience when checking against or setting a IP address to the broadcast IP address. */\r
-const IP_Address_t  BroadcastIPAddress  = {BROADCAST_IP_ADDRESS};\r
-\r
-/** Constant for convenience when checking against or setting an IP address to the client (host) IP address. */\r
-const IP_Address_t  ClientIPAddress     = {CLIENT_IP_ADDRESS};\r
-\r
-\r
-/** Processes an incoming Ethernet frame, and writes the appropriate response to the output Ethernet\r
- *  frame buffer if the sub protocol handlers create a valid response.\r
- */\r
-void Ethernet_ProcessPacket(Ethernet_Frame_Info_t* FrameIN, Ethernet_Frame_Info_t* FrameOUT)\r
-{\r
-       DecodeEthernetFrameHeader(FrameIN->FrameData);\r
-\r
-       /* Cast the incoming Ethernet frame to the Ethernet header type */\r
-       Ethernet_Frame_Header_t* FrameINHeader  = (Ethernet_Frame_Header_t*)&FrameIN->FrameData;\r
-       Ethernet_Frame_Header_t* FrameOUTHeader = (Ethernet_Frame_Header_t*)&FrameOUT->FrameData;\r
-       \r
-       int16_t                  RetSize        = NO_RESPONSE;\r
-       \r
-       /* Ensure frame is addressed to either all (broadcast) or the virtual webserver, and is a type II frame */\r
-       if ((MAC_COMPARE(&FrameINHeader->Destination, &ServerMACAddress) ||\r
-            MAC_COMPARE(&FrameINHeader->Destination, &BroadcastMACAddress)))\r
-       {\r
-               /* Process the packet depending on its protocol */\r
-               switch (SwapEndian_16(FrameINHeader->EtherType))\r
-               {\r
-                       case ETHERTYPE_ARP:\r
-                               RetSize = ARP_ProcessARPPacket(&FrameIN->FrameData[sizeof(Ethernet_Frame_Header_t)],\r
-                                                              &FrameOUT->FrameData[sizeof(Ethernet_Frame_Header_t)]);\r
-                               break;          \r
-                       case ETHERTYPE_IPV4:\r
-                               RetSize = IP_ProcessIPPacket(FrameIN,\r
-                                                            &FrameIN->FrameData[sizeof(Ethernet_Frame_Header_t)],\r
-                                                            &FrameOUT->FrameData[sizeof(Ethernet_Frame_Header_t)]);\r
-                               break;\r
-               }\r
-               \r
-               /* Protocol processing routine has filled a response, complete the ethernet frame header */\r
-               if (RetSize > 0)\r
-               {\r
-                       /* Fill out the response Ethernet frame header */\r
-                       FrameOUTHeader->Source          = ServerMACAddress;\r
-                       FrameOUTHeader->Destination     = FrameINHeader->Source;\r
-                       FrameOUTHeader->EtherType       = FrameINHeader->EtherType;\r
-                       \r
-                       /* Set the response length in the buffer and indicate that a response is ready to be sent */\r
-                       FrameOUT->FrameLength           = (sizeof(Ethernet_Frame_Header_t) + RetSize);\r
-                       FrameOUT->FrameInBuffer         = true;\r
-               }\r
-       }\r
-\r
-       /* Check if the packet was processed */\r
-       if (RetSize != NO_PROCESS)\r
-       {\r
-               /* Clear the frame buffer */\r
-               FrameIN->FrameInBuffer = false;\r
-       }\r
-}\r
-\r
-/** Calculates the appropriate ethernet checksum, consisting of the addition of the one's\r
- *  compliment of each word, complimented.\r
- *\r
- *  \param Data   Pointer to the packet buffer data whose checksum must be calculated\r
- *  \param Bytes  Number of bytes in the data buffer to process\r
- *\r
- *  \return A 16-bit Ethernet checksum value\r
- */\r
-uint16_t Ethernet_Checksum16(void* Data, uint16_t Bytes)\r
-{\r
-       uint16_t* Words    = (uint16_t*)Data;\r
-       uint32_t  Checksum = 0;\r
-\r
-       for (uint8_t CurrWord = 0; CurrWord < (Bytes >> 1); CurrWord++)\r
-         Checksum += Words[CurrWord];\r
-         \r
-       while (Checksum & 0xFFFF0000)\r
-         Checksum = ((Checksum & 0xFFFF) + (Checksum >> 16));\r
-       \r
-       return ~Checksum;\r
-}\r
diff --git a/Demos/Device/RNDISEthernet/Lib/Ethernet.h b/Demos/Device/RNDISEthernet/Lib/Ethernet.h
deleted file mode 100644 (file)
index b300252..0000000
+++ /dev/null
@@ -1,104 +0,0 @@
-/*\r
-             LUFA Library\r
-     Copyright (C) Dean Camera, 2009.\r
-              \r
-  dean [at] fourwalledcubicle [dot] com\r
-      www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
-  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
-  Permission to use, copy, modify, and distribute this software\r
-  and its documentation for any purpose and without fee is hereby\r
-  granted, provided that the above copyright notice appear in all\r
-  copies and that both that the copyright notice and this\r
-  permission notice and warranty disclaimer appear in supporting\r
-  documentation, and that the name of the author not be used in\r
-  advertising or publicity pertaining to distribution of the\r
-  software without specific, written prior permission.\r
-\r
-  The author disclaim all warranties with regard to this\r
-  software, including all implied warranties of merchantability\r
-  and fitness.  In no event shall the author be liable for any\r
-  special, indirect or consequential damages or any damages\r
-  whatsoever resulting from loss of use, data or profits, whether\r
-  in an action of contract, negligence or other tortious action,\r
-  arising out of or in connection with the use or performance of\r
-  this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- *  Header file for Ethernet.c.\r
- */\r
\r
-#ifndef _ETHERNET_H_\r
-#define _ETHERNET_H_\r
-\r
-       /* Includes: */\r
-               #include <avr/io.h>\r
-               #include <string.h>\r
-               \r
-               #include <LUFA/Drivers/USB/Class/Device/RNDIS.h>\r
-\r
-               #include "EthernetProtocols.h"\r
-               #include "ProtocolDecoders.h"\r
-               #include "ICMP.h"\r
-               #include "TCP.h"\r
-               #include "UDP.h"\r
-               #include "DHCP.h"\r
-               #include "ARP.h"\r
-               #include "IP.h"\r
-               \r
-       /* Macros: */\r
-               /** Physical MAC address of the USB RNDIS network adapter */\r
-               #define ADAPTER_MAC_ADDRESS              {0x00, 0x02, 0x00, 0x02, 0x00, 0x02}           \r
-\r
-               /** Physical MAC address of the virtual server on the network */\r
-               #define SERVER_MAC_ADDRESS               {0x00, 0x01, 0x00, 0x01, 0x00, 0x01}           \r
-\r
-               /** Physical MAC address of the network broadcast address */\r
-               #define BROADCAST_MAC_ADDRESS            {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}\r
-       \r
-               /** Performs a comparison between two MAC addresses, indicating if they are identical.\r
-                *  \r
-                *  \param MAC1  First MAC address\r
-                *  \param MAC2  Second MAC address\r
-                *\r
-                *  \return True if the addresses match, false otherwise\r
-                */\r
-               #define MAC_COMPARE(MAC1, MAC2)          (memcmp(MAC1, MAC2, sizeof(MAC_Address_t)) == 0)\r
-               \r
-               /** Return value for all sub protocol handling routines, indicating that no response packet has been generated */\r
-               #define NO_RESPONSE                      0              \r
-\r
-               /** Return value for all sub protocol handling routines, indicating that the packet has not yet been handled */\r
-               #define NO_PROCESS                       -1\r
-\r
-       /* Type Defines: */\r
-               /** Type define for an Ethernet frame header */\r
-               typedef struct\r
-               {\r
-                       MAC_Address_t Destination; /**< Physical MAC address of the packet recipient */\r
-                       MAC_Address_t Source; /**< Physics MAC address of the packet source */\r
-                       \r
-                       union\r
-                       {\r
-                               uint16_t  EtherType; /**< Ethernet packet subprotocol type, for Ethernet V2 packets */\r
-                               uint16_t  Length; /**< Ethernet frame length, for Ethernet V1 packets */\r
-                       };\r
-               } Ethernet_Frame_Header_t;\r
-               \r
-       /* External Variables: */\r
-               extern const MAC_Address_t ServerMACAddress;\r
-               extern const IP_Address_t  ServerIPAddress;\r
-               extern const MAC_Address_t BroadcastMACAddress;\r
-               extern const IP_Address_t  BroadcastIPAddress;\r
-               extern const IP_Address_t  ClientIPAddress;\r
-               \r
-       /* Function Prototypes: */\r
-               void     Ethernet_ProcessPacket(Ethernet_Frame_Info_t* FrameIN, Ethernet_Frame_Info_t* FrameOUT);\r
-               uint16_t Ethernet_Checksum16(void* Data, uint16_t Bytes);\r
-               \r
-#endif\r
diff --git a/Demos/Device/RNDISEthernet/Lib/EthernetProtocols.h b/Demos/Device/RNDISEthernet/Lib/EthernetProtocols.h
deleted file mode 100644 (file)
index 1ec5961..0000000
+++ /dev/null
@@ -1,81 +0,0 @@
-/*\r
-             LUFA Library\r
-     Copyright (C) Dean Camera, 2009.\r
-              \r
-  dean [at] fourwalledcubicle [dot] com\r
-      www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
-  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
-  Permission to use, copy, modify, and distribute this software\r
-  and its documentation for any purpose and without fee is hereby\r
-  granted, provided that the above copyright notice appear in all\r
-  copies and that both that the copyright notice and this\r
-  permission notice and warranty disclaimer appear in supporting\r
-  documentation, and that the name of the author not be used in\r
-  advertising or publicity pertaining to distribution of the\r
-  software without specific, written prior permission.\r
-\r
-  The author disclaim all warranties with regard to this\r
-  software, including all implied warranties of merchantability\r
-  and fitness.  In no event shall the author be liable for any\r
-  special, indirect or consequential damages or any damages\r
-  whatsoever resulting from loss of use, data or profits, whether\r
-  in an action of contract, negligence or other tortious action,\r
-  arising out of or in connection with the use or performance of\r
-  this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- *  General Ethernet protocol constants and type defines, for use by\r
- *  all network protocol portions of the TCP/IP stack.\r
- */\r
-\r
-#ifndef _ETHERNET_PROTOCOLS_H_\r
-#define _ETHERNET_PROTOCOLS_H_\r
-\r
-       /* Macros: */\r
-               #define ETHERTYPE_IPV4                   0x0800\r
-               #define ETHERTYPE_ARP                    0x0806\r
-               #define ETHERTYPE_RARP                   0x8035\r
-               #define ETHERTYPE_APPLETALK              0x809b\r
-               #define ETHERTYPE_APPLETALKARP           0x80f3\r
-               #define ETHERTYPE_IEEE8021Q              0x8100\r
-               #define ETHERTYPE_NOVELLIPX              0x8137\r
-               #define ETHERTYPE_NOVELL                 0x8138\r
-               #define ETHERTYPE_IPV6                   0x86DD\r
-               #define ETHERTYPE_COBRANET               0x8819\r
-               #define ETHERTYPE_PROVIDERBRIDGING       0x88a8\r
-               #define ETHERTYPE_MPLSUNICAST            0x8847\r
-               #define ETHERTYPE_MPLSMULTICAST          0x8848\r
-               #define ETHERTYPE_PPPoEDISCOVERY         0x8863\r
-               #define ETHERTYPE_PPPoESESSION           0x8864\r
-               #define ETHERTYPE_EAPOVERLAN             0x888E\r
-               #define ETHERTYPE_HYPERSCSI              0x889A\r
-               #define ETHERTYPE_ATAOVERETHERNET        0x88A2\r
-               #define ETHERTYPE_ETHERCAT               0x88A4\r
-               #define ETHERTYPE_SERCOSIII              0x88CD\r
-               #define ETHERTYPE_CESoE                  0x88D8\r
-               #define ETHERTYPE_MACSECURITY            0x88E5\r
-               #define ETHERTYPE_FIBRECHANNEL           0x8906\r
-               #define ETHERTYPE_QINQ                   0x9100\r
-               #define ETHERTYPE_VLLT                   0xCAFE\r
-               \r
-               #define PROTOCOL_ICMP                    1\r
-               #define PROTOCOL_IGMP                    2\r
-               #define PROTOCOL_TCP                     6\r
-               #define PROTOCOL_UDP                     17\r
-               #define PROTOCOL_OSPF                    89\r
-               #define PROTOCOL_SCTP                    132\r
-\r
-       /* Type Defines: */             \r
-               /** Type define for a protocol IP address of a device on a network */\r
-               typedef struct\r
-               {\r
-                       uint8_t       Octets[4]; /**< Individual bytes of an IP address */\r
-               } IP_Address_t;\r
-\r
-#endif\r
diff --git a/Demos/Device/RNDISEthernet/Lib/ICMP.c b/Demos/Device/RNDISEthernet/Lib/ICMP.c
deleted file mode 100644 (file)
index ee87f83..0000000
+++ /dev/null
@@ -1,80 +0,0 @@
-/*\r
-             LUFA Library\r
-     Copyright (C) Dean Camera, 2009.\r
-              \r
-  dean [at] fourwalledcubicle [dot] com\r
-      www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
-  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
-  Permission to use, copy, modify, and distribute this software\r
-  and its documentation for any purpose and without fee is hereby\r
-  granted, provided that the above copyright notice appear in all\r
-  copies and that both that the copyright notice and this\r
-  permission notice and warranty disclaimer appear in supporting\r
-  documentation, and that the name of the author not be used in\r
-  advertising or publicity pertaining to distribution of the\r
-  software without specific, written prior permission.\r
-\r
-  The author disclaim all warranties with regard to this\r
-  software, including all implied warranties of merchantability\r
-  and fitness.  In no event shall the author be liable for any\r
-  special, indirect or consequential damages or any damages\r
-  whatsoever resulting from loss of use, data or profits, whether\r
-  in an action of contract, negligence or other tortious action,\r
-  arising out of or in connection with the use or performance of\r
-  this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- *  Internet Control Message Protocol (ICMP) packet handling routines. This protocol handles\r
- *  Echo requests from the host, to indicate a successful network connection between the host\r
- *  and the virtual server.\r
- */\r
\r
-#include "ICMP.h"\r
-\r
-/** Processes an ICMP packet inside an Ethernet frame, and writes the appropriate response\r
- *  to the output Ethernet frame if the host is issuing a ICMP ECHO request.\r
- *\r
- *  \param FrameIN  Pointer to the incomming Ethernet frame information structure\r
- *  \param InDataStart   Pointer to the start of the incoming packet's ICMP header\r
- *  \param OutDataStart  Pointer to the start of the outgoing packet's ICMP header\r
- *\r
- *  \return The number of bytes written to the out Ethernet frame if any, NO_RESPONSE otherwise\r
- */\r
-int16_t ICMP_ProcessICMPPacket(Ethernet_Frame_Info_t* FrameIN, void* InDataStart, void* OutDataStart)\r
-{\r
-       ICMP_Header_t* ICMPHeaderIN  = (ICMP_Header_t*)InDataStart;\r
-       ICMP_Header_t* ICMPHeaderOUT = (ICMP_Header_t*)OutDataStart;\r
-\r
-       DecodeICMPHeader(InDataStart);\r
-\r
-       /* Determine if the ICMP packet is an echo request (ping) */\r
-       if (ICMPHeaderIN->Type == ICMP_TYPE_ECHOREQUEST)\r
-       {\r
-               /* Fill out the ICMP response packet */\r
-               ICMPHeaderOUT->Type     = ICMP_TYPE_ECHOREPLY;\r
-               ICMPHeaderOUT->Code     = 0;\r
-               ICMPHeaderOUT->Checksum = 0;\r
-               ICMPHeaderOUT->Id       = ICMPHeaderIN->Id;\r
-               ICMPHeaderOUT->Sequence = ICMPHeaderIN->Sequence;\r
-               \r
-               uint16_t DataSize = FrameIN->FrameLength - ((((uint16_t)InDataStart + sizeof(ICMP_Header_t)) - (uint16_t)FrameIN->FrameData));\r
-               \r
-               /* Copy the remaining payload to the response - echo requests should echo back any sent data */\r
-               memcpy(&((uint8_t*)OutDataStart)[sizeof(ICMP_Header_t)],\r
-                      &((uint8_t*)InDataStart)[sizeof(ICMP_Header_t)],\r
-                          DataSize);\r
-\r
-               ICMPHeaderOUT->Checksum = Ethernet_Checksum16(ICMPHeaderOUT, (DataSize + sizeof(ICMP_Header_t)));\r
-\r
-               /* Return the size of the response so far */\r
-               return (DataSize + sizeof(ICMP_Header_t));\r
-       }\r
-       \r
-       return NO_RESPONSE;\r
-}\r
diff --git a/Demos/Device/RNDISEthernet/Lib/ICMP.h b/Demos/Device/RNDISEthernet/Lib/ICMP.h
deleted file mode 100644 (file)
index 56749c0..0000000
+++ /dev/null
@@ -1,80 +0,0 @@
-/*\r
-             LUFA Library\r
-     Copyright (C) Dean Camera, 2009.\r
-              \r
-  dean [at] fourwalledcubicle [dot] com\r
-      www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
-  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
-  Permission to use, copy, modify, and distribute this software\r
-  and its documentation for any purpose and without fee is hereby\r
-  granted, provided that the above copyright notice appear in all\r
-  copies and that both that the copyright notice and this\r
-  permission notice and warranty disclaimer appear in supporting\r
-  documentation, and that the name of the author not be used in\r
-  advertising or publicity pertaining to distribution of the\r
-  software without specific, written prior permission.\r
-\r
-  The author disclaim all warranties with regard to this\r
-  software, including all implied warranties of merchantability\r
-  and fitness.  In no event shall the author be liable for any\r
-  special, indirect or consequential damages or any damages\r
-  whatsoever resulting from loss of use, data or profits, whether\r
-  in an action of contract, negligence or other tortious action,\r
-  arising out of or in connection with the use or performance of\r
-  this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- *  Header file for ICMP.c.\r
- */\r
-\r
-#ifndef _ICMP_H_\r
-#define _ICMP_H_\r
-\r
-       /* Includes: */\r
-               #include <avr/io.h>\r
-               #include <string.h>\r
-               \r
-               #include "EthernetProtocols.h"\r
-               #include "Ethernet.h"\r
-               #include "ProtocolDecoders.h"\r
-       \r
-       /* Macros: */\r
-               /** ICMP message type constant, indicating an ICMP ECHO Reply message */\r
-               #define ICMP_TYPE_ECHOREPLY              0\r
-\r
-               /** ICMP message type constant, indicating a packet destination is unreachable */\r
-               #define ICMP_TYPE_DESTINATIONUNREACHABLE 3\r
-               \r
-               /** ICMP message type constant, indicating an ICMP Source Quench message */\r
-               #define ICMP_TYPE_SOURCEQUENCH           4\r
-\r
-               /** ICMP message type constant, indicating an ICMP Redirect message */\r
-               #define ICMP_TYPE_REDIRECTMESSAGE        5\r
-\r
-               /** ICMP message type constant, indicating an ICMP ECHO Request message */\r
-               #define ICMP_TYPE_ECHOREQUEST            8\r
-\r
-               /** ICMP message type constant, indicating an ICMP Time Exceeded message */\r
-               #define ICMP_TYPE_TIMEEXCEEDED           11\r
-       \r
-       /* Type Defines: */\r
-               /** Type define for an ICMP message header. */\r
-               typedef struct\r
-               {\r
-                       uint8_t       Type; /**< ICMP message type, a ICMP_TYPE_* constant */\r
-                       uint8_t       Code; /**< ICMP message code, indicating the message value */\r
-                       uint16_t      Checksum; /**< Ethernet checksum of the ICMP message */\r
-                       uint16_t      Id; /**< Id of the ICMP message */\r
-                       uint16_t      Sequence; /**< Sequence number of the ICMP message, to link together message responses */\r
-               } ICMP_Header_t;\r
-               \r
-       /* Function Prototypes: */\r
-               int16_t ICMP_ProcessICMPPacket(Ethernet_Frame_Info_t* FrameIN, void* InDataStart, void* OutDataStart);\r
-\r
-#endif\r
diff --git a/Demos/Device/RNDISEthernet/Lib/IP.c b/Demos/Device/RNDISEthernet/Lib/IP.c
deleted file mode 100644 (file)
index c5c38fc..0000000
+++ /dev/null
@@ -1,113 +0,0 @@
-/*\r
-             LUFA Library\r
-     Copyright (C) Dean Camera, 2009.\r
-              \r
-  dean [at] fourwalledcubicle [dot] com\r
-      www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
-  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
-  Permission to use, copy, modify, and distribute this software\r
-  and its documentation for any purpose and without fee is hereby\r
-  granted, provided that the above copyright notice appear in all\r
-  copies and that both that the copyright notice and this\r
-  permission notice and warranty disclaimer appear in supporting\r
-  documentation, and that the name of the author not be used in\r
-  advertising or publicity pertaining to distribution of the\r
-  software without specific, written prior permission.\r
-\r
-  The author disclaim all warranties with regard to this\r
-  software, including all implied warranties of merchantability\r
-  and fitness.  In no event shall the author be liable for any\r
-  special, indirect or consequential damages or any damages\r
-  whatsoever resulting from loss of use, data or profits, whether\r
-  in an action of contract, negligence or other tortious action,\r
-  arising out of or in connection with the use or performance of\r
-  this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- *  Internet Protocol (IP) packet handling routines. This protocol handles IP packets from the\r
- *  host which typically encapsulate other protocols such as ICMP, UDP and TCP.\r
- */\r
\r
-#include "IP.h"\r
-\r
-/** Processes an IP packet inside an Ethernet frame, and writes the appropriate response\r
- *  to the output Ethernet frame if one is created by a subprotocol handler.\r
- *\r
- *  \param FrameIN       Pointer to the incomming Ethernet frame information structure\r
- *  \param InDataStart   Pointer to the start of the incoming packet's IP header\r
- *  \param OutDataStart  Pointer to the start of the outgoing packet's IP header\r
- *\r
- *  \return The number of bytes written to the out Ethernet frame if any, NO_RESPONSE if no\r
- *           response was generated, NO_PROCESS if the packet processing was deferred until the\r
- *           next Ethernet packet handler iteration\r
- */\r
-int16_t IP_ProcessIPPacket(Ethernet_Frame_Info_t* FrameIN, void* InDataStart, void* OutDataStart)\r
-{\r
-       DecodeIPHeader(InDataStart);\r
-\r
-       IP_Header_t* IPHeaderIN  = (IP_Header_t*)InDataStart;\r
-       IP_Header_t* IPHeaderOUT = (IP_Header_t*)OutDataStart;\r
-\r
-       /* Header length is specified in number of longs in the packet header, convert to bytes */\r
-       uint16_t HeaderLengthBytes = (IPHeaderIN->HeaderLength * sizeof(uint32_t));\r
-\r
-       int16_t  RetSize = NO_RESPONSE;\r
-\r
-       /* Check to ensure the IP packet is addressed to the virtual webserver's IP or the broadcast IP address */\r
-       if (!(IP_COMPARE(&IPHeaderIN->DestinationAddress, &ServerIPAddress)) &&\r
-           !(IP_COMPARE(&IPHeaderIN->DestinationAddress, &BroadcastIPAddress)))\r
-       {\r
-               return NO_RESPONSE;\r
-       }\r
-       \r
-       /* Pass off the IP payload to the appropriate protocol processing routine */\r
-       switch (IPHeaderIN->Protocol)\r
-       {\r
-               case PROTOCOL_ICMP:\r
-                       RetSize = ICMP_ProcessICMPPacket(FrameIN,\r
-                                                        &((uint8_t*)InDataStart)[HeaderLengthBytes],\r
-                                                        &((uint8_t*)OutDataStart)[sizeof(IP_Header_t)]);\r
-                       break;\r
-               case PROTOCOL_TCP:\r
-                       RetSize = TCP_ProcessTCPPacket(InDataStart,\r
-                                                      &((uint8_t*)InDataStart)[HeaderLengthBytes],\r
-                                                      &((uint8_t*)OutDataStart)[sizeof(IP_Header_t)]);         \r
-                       break;\r
-               case PROTOCOL_UDP:\r
-                       RetSize = UDP_ProcessUDPPacket(InDataStart,\r
-                                                      &((uint8_t*)InDataStart)[HeaderLengthBytes],\r
-                                                      &((uint8_t*)OutDataStart)[sizeof(IP_Header_t)]);         \r
-                       break;\r
-       }\r
-       \r
-       /* Check to see if the protocol processing routine has filled out a response */\r
-       if (RetSize > 0)\r
-       {\r
-               /* Fill out the response IP packet header */\r
-               IPHeaderOUT->TotalLength        = SwapEndian_16(sizeof(IP_Header_t) + RetSize);\r
-               IPHeaderOUT->TypeOfService      = 0;\r
-               IPHeaderOUT->HeaderLength       = (sizeof(IP_Header_t) / sizeof(uint32_t));\r
-               IPHeaderOUT->Version            = 4;\r
-               IPHeaderOUT->Flags              = 0;\r
-               IPHeaderOUT->FragmentOffset     = 0;\r
-               IPHeaderOUT->Identification     = 0;\r
-               IPHeaderOUT->HeaderChecksum     = 0;\r
-               IPHeaderOUT->Protocol           = IPHeaderIN->Protocol;\r
-               IPHeaderOUT->TTL                = DEFAULT_TTL;\r
-               IPHeaderOUT->SourceAddress      = IPHeaderIN->DestinationAddress;\r
-               IPHeaderOUT->DestinationAddress = IPHeaderIN->SourceAddress;\r
-               \r
-               IPHeaderOUT->HeaderChecksum     = Ethernet_Checksum16(IPHeaderOUT, sizeof(IP_Header_t));\r
-                                               \r
-               /* Return the size of the response so far */\r
-               return (sizeof(IP_Header_t) + RetSize);\r
-       }\r
-       \r
-       return RetSize;\r
-}\r
diff --git a/Demos/Device/RNDISEthernet/Lib/IP.h b/Demos/Device/RNDISEthernet/Lib/IP.h
deleted file mode 100644 (file)
index f77c772..0000000
+++ /dev/null
@@ -1,93 +0,0 @@
-/*\r
-             LUFA Library\r
-     Copyright (C) Dean Camera, 2009.\r
-              \r
-  dean [at] fourwalledcubicle [dot] com\r
-      www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
-  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
-  Permission to use, copy, modify, and distribute this software\r
-  and its documentation for any purpose and without fee is hereby\r
-  granted, provided that the above copyright notice appear in all\r
-  copies and that both that the copyright notice and this\r
-  permission notice and warranty disclaimer appear in supporting\r
-  documentation, and that the name of the author not be used in\r
-  advertising or publicity pertaining to distribution of the\r
-  software without specific, written prior permission.\r
-\r
-  The author disclaim all warranties with regard to this\r
-  software, including all implied warranties of merchantability\r
-  and fitness.  In no event shall the author be liable for any\r
-  special, indirect or consequential damages or any damages\r
-  whatsoever resulting from loss of use, data or profits, whether\r
-  in an action of contract, negligence or other tortious action,\r
-  arising out of or in connection with the use or performance of\r
-  this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- *  Header file for IP.c.\r
- */\r
\r
-#ifndef _IP_H_\r
-#define _IP_H_\r
-\r
-       /* Includes: */\r
-               #include <avr/io.h>\r
-               #include <string.h>\r
-               \r
-               #include "EthernetProtocols.h"\r
-               #include "Ethernet.h"\r
-               #include "ProtocolDecoders.h"\r
-       \r
-       /* Macros: */\r
-               /** Protocol IP address of the host (client) machine, once assigned by DHCP */\r
-               #define CLIENT_IP_ADDRESS                { 10,     0,    0,    1}\r
-\r
-               /** Protocol IP address of the virtual server machine */\r
-               #define SERVER_IP_ADDRESS                { 10,     0,    0,    2}\r
-\r
-               /** Protocol IP address of the broadcast address */\r
-               #define BROADCAST_IP_ADDRESS             {0xFF, 0xFF, 0xFF, 0xFF}\r
-\r
-               /** Default Time To Live (TTL) value for sent packets, indicating the maximum allowable hops until their destination is reached */\r
-               #define DEFAULT_TTL                      128\r
-               \r
-               /** Performs a comparison between two IP addresses, indicating if they are identical.\r
-                *  \r
-                *  \param IP1  First IP address\r
-                *  \param IP2  Second IP address\r
-                *\r
-                *  \return True if the addresses match, false otherwise\r
-                */\r
-               #define IP_COMPARE(IP1, IP2)             (memcmp(IP1, IP2, sizeof(IP_Address_t)) == 0)\r
-               \r
-       /* Type Defines: */\r
-               /** Type define of an IP packet header. */\r
-               typedef struct\r
-               {\r
-                       unsigned char  HeaderLength   : 4; /**< Total length of the packet header, in 4-byte blocks */\r
-                       unsigned char  Version        : 4; /**< IP protocol version */\r
-                       uint8_t        TypeOfService; /**< Special service type identifier, indicating delay/throughput/reliability levels */\r
-                       uint16_t       TotalLength; /**< Total length of the IP packet, in bytes */\r
-\r
-                       uint16_t       Identification; /**< Identification value for identifying fragmented packets */\r
-                       unsigned int   FragmentOffset : 13; /**< Offset of this IP fragment */\r
-                       unsigned int   Flags          : 3; /**< Fragment flags, to indicate if a packet is fragmented */\r
-\r
-                       uint8_t        TTL; /**< Maximum allowable number of hops to reach the packet destination */\r
-                       uint8_t        Protocol; /**< Encapsulated protocol type */\r
-                       uint16_t       HeaderChecksum; /**< Ethernet checksum of the IP header */\r
-                       \r
-                       IP_Address_t  SourceAddress; /**< Source protocol IP address of the packet */\r
-                       IP_Address_t  DestinationAddress; /**< Destination protocol IP address of the packet */\r
-               } IP_Header_t;\r
-               \r
-       /* Function Prototypes: */\r
-               int16_t IP_ProcessIPPacket(Ethernet_Frame_Info_t* FrameIN, void* InDataStart, void* OutDataStart);\r
-\r
-#endif\r
diff --git a/Demos/Device/RNDISEthernet/Lib/ProtocolDecoders.c b/Demos/Device/RNDISEthernet/Lib/ProtocolDecoders.c
deleted file mode 100644 (file)
index add0333..0000000
+++ /dev/null
@@ -1,280 +0,0 @@
-/*\r
-             LUFA Library\r
-     Copyright (C) Dean Camera, 2009.\r
-              \r
-  dean [at] fourwalledcubicle [dot] com\r
-      www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
-  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
-  Permission to use, copy, modify, and distribute this software\r
-  and its documentation for any purpose and without fee is hereby\r
-  granted, provided that the above copyright notice appear in all\r
-  copies and that both that the copyright notice and this\r
-  permission notice and warranty disclaimer appear in supporting\r
-  documentation, and that the name of the author not be used in\r
-  advertising or publicity pertaining to distribution of the\r
-  software without specific, written prior permission.\r
-\r
-  The author disclaim all warranties with regard to this\r
-  software, including all implied warranties of merchantability\r
-  and fitness.  In no event shall the author be liable for any\r
-  special, indirect or consequential damages or any damages\r
-  whatsoever resulting from loss of use, data or profits, whether\r
-  in an action of contract, negligence or other tortious action,\r
-  arising out of or in connection with the use or performance of\r
-  this software.\r
-*/\r
-\r
-/* Protocol decoders for Ethernet, TCP, IP, ICMP and ARP. Each of these routines\r
-   accepts a header to the appropriate protocol and prints out pertinent information\r
-   on the packet through the serial port.\r
-   \r
-   To disable printing of a specific protocol, define the token NO_DECODE_{Protocol}\r
-   in the project makefile, and pass it to the compiler using the -D switch.\r
-*/\r
-\r
-/** \file\r
- *\r
- *  Protocol decoding routines, for the plain-text decoding of Ethernet frames for debugging purposes.\r
- *  Enabled protocol decoders will print incoming Ethernet frame contents through the USART in a human\r
- *  readable format.\r
- *\r
- *  Note that the USART is a slow transmission medium, and will slow down packet processing considerably.\r
- *  Packet decoding routines can be disabled by defining NO_DECODE_{Protocol Name} in the project makefile\r
- *  and passing it to the compiler via the -D switch.\r
- */\r
\r
-#include "ProtocolDecoders.h"\r
-\r
-/** Decodes an Ethernet frame header and prints its contents to through the USART in a human readable format.\r
- *\r
- *  \param InDataStart  Pointer to the start of an Ethernet frame header\r
- */\r
-void DecodeEthernetFrameHeader(void* InDataStart)\r
-{\r
-       #if !defined(NO_DECODE_ETHERNET)\r
-       Ethernet_Frame_Header_t* FrameHeader = (Ethernet_Frame_Header_t*)InDataStart;\r
-       \r
-       printf_P(PSTR("\r\n"));\r
-       \r
-       printf_P(PSTR("  ETHERNET\r\n"));\r
-       printf_P(PSTR("  + Frame Size: %u\r\n"), FrameIN.FrameLength);\r
-\r
-       if (!(MAC_COMPARE(&FrameHeader->Destination, &ServerMACAddress)) &&\r
-           !(MAC_COMPARE(&FrameHeader->Destination, &BroadcastMACAddress)))\r
-       {\r
-               printf_P(PSTR("  + NOT ADDRESSED TO DEVICE\r\n"));\r
-               return;\r
-       }\r
-\r
-       printf_P(PSTR("  + MAC Source : %02X:%02X:%02X:%02X:%02X:%02X\r\n"), FrameHeader->Source.Octets[0],\r
-                                                                            FrameHeader->Source.Octets[1],\r
-                                                                            FrameHeader->Source.Octets[2],\r
-                                                                            FrameHeader->Source.Octets[3],\r
-                                                                            FrameHeader->Source.Octets[4],\r
-                                                                            FrameHeader->Source.Octets[5]);\r
-\r
-       printf_P(PSTR("  + MAC Dest: %02X:%02X:%02X:%02X:%02X:%02X\r\n"),    FrameHeader->Destination.Octets[0],\r
-                                                                            FrameHeader->Destination.Octets[1],\r
-                                                                            FrameHeader->Destination.Octets[2],\r
-                                                                            FrameHeader->Destination.Octets[3],\r
-                                                                            FrameHeader->Destination.Octets[4],\r
-                                                                            FrameHeader->Destination.Octets[5]);\r
-\r
-       if (SwapEndian_16(FrameIN.FrameLength) > ETHERNET_VER2_MINSIZE)\r
-         printf_P(PSTR("  + Protocol: 0x%04x\r\n"), SwapEndian_16(FrameHeader->EtherType));\r
-       else\r
-         printf_P(PSTR("  + Protocol: UNKNOWN E1\r\n"));\r
-       #endif\r
-}\r
-\r
-/** Decodes an ARP header and prints its contents to through the USART in a human readable format.\r
- *\r
- *  \param InDataStart  Pointer to the start of an ARP packet header\r
- */\r
-void DecodeARPHeader(void* InDataStart)\r
-{\r
-       #if !defined(NO_DECODE_ARP)\r
-       ARP_Header_t* ARPHeader = (ARP_Header_t*)InDataStart;   \r
-\r
-       printf_P(PSTR("   \\\r\n    ARP\r\n"));\r
-\r
-       if (!(IP_COMPARE(&ARPHeader->TPA, &ServerIPAddress)) &&\r
-           !(MAC_COMPARE(&ARPHeader->THA, &ServerMACAddress)))\r
-       {\r
-               printf_P(PSTR("    + NOT ADDRESSED TO DEVICE\r\n"));\r
-               return;         \r
-       }\r
-\r
-       printf_P(PSTR("    + Protocol: %x\r\n"), SwapEndian_16(ARPHeader->ProtocolType));\r
-       printf_P(PSTR("    + Operation: %u\r\n"), SwapEndian_16(ARPHeader->Operation));\r
-       \r
-       if (SwapEndian_16(ARPHeader->ProtocolType) == ETHERTYPE_IPV4)\r
-       {\r
-               printf_P(PSTR("    + SHA MAC: %02X:%02X:%02X:%02X:%02X:%02X\r\n"), ARPHeader->SHA.Octets[0],\r
-                                                                                  ARPHeader->SHA.Octets[1],\r
-                                                                                  ARPHeader->SHA.Octets[2],\r
-                                                                                  ARPHeader->SHA.Octets[3],\r
-                                                                                  ARPHeader->SHA.Octets[4],\r
-                                                                                  ARPHeader->SHA.Octets[5]);\r
-\r
-               printf_P(PSTR("    + SPA IP: %u.%u.%u.%u\r\n"), ARPHeader->SPA.Octets[0],\r
-                                                               ARPHeader->SPA.Octets[1],\r
-                                                               ARPHeader->SPA.Octets[2],\r
-                                                               ARPHeader->SPA.Octets[3]);\r
-\r
-               printf_P(PSTR("    + THA MAC: %02X:%02X:%02X:%02X:%02X:%02X\r\n"), ARPHeader->THA.Octets[0],\r
-                                                                                  ARPHeader->THA.Octets[1],\r
-                                                                                  ARPHeader->THA.Octets[2],\r
-                                                                                  ARPHeader->THA.Octets[3],\r
-                                                                                  ARPHeader->THA.Octets[4],\r
-                                                                                  ARPHeader->THA.Octets[5]);\r
-\r
-               printf_P(PSTR("    + TPA IP: %u.%u.%u.%u\r\n"), ARPHeader->TPA.Octets[0],\r
-                                                               ARPHeader->TPA.Octets[1],\r
-                                                               ARPHeader->TPA.Octets[2],\r
-                                                               ARPHeader->TPA.Octets[3]);\r
-       }\r
-       #endif\r
-}\r
-\r
-/** Decodes an IP header and prints its contents to through the USART in a human readable format.\r
- *\r
- *  \param InDataStart  Pointer to the start of an IP packet header\r
- */\r
-void DecodeIPHeader(void* InDataStart)\r
-{\r
-       #if !defined(NO_DECODE_IP)\r
-       IP_Header_t* IPHeader  = (IP_Header_t*)InDataStart;\r
-\r
-       uint16_t HeaderLengthBytes = (IPHeader->HeaderLength * sizeof(uint32_t));\r
-\r
-       printf_P(PSTR("   \\\r\n    IP\r\n"));\r
-\r
-       if (!(IP_COMPARE(&IPHeader->DestinationAddress, &ServerIPAddress)))\r
-       {\r
-               printf_P(PSTR("    + NOT ADDRESSED TO DEVICE\r\n"));\r
-               return;\r
-       }\r
-\r
-       printf_P(PSTR("    + Header Length: %u Bytes\r\n"), HeaderLengthBytes);\r
-       printf_P(PSTR("    + Packet Version: %u\r\n"), IPHeader->Version);\r
-       printf_P(PSTR("    + Total Length: %u\r\n"), SwapEndian_16(IPHeader->TotalLength));\r
-       \r
-       printf_P(PSTR("    + Protocol: %u\r\n"), IPHeader->Protocol);\r
-       printf_P(PSTR("    + TTL: %u\r\n"), IPHeader->TTL);\r
-       \r
-       printf_P(PSTR("    + IP Src: %u.%u.%u.%u\r\n"), IPHeader->SourceAddress.Octets[0],\r
-                                                       IPHeader->SourceAddress.Octets[1],\r
-                                                       IPHeader->SourceAddress.Octets[2],\r
-                                                       IPHeader->SourceAddress.Octets[3]);     \r
-\r
-       printf_P(PSTR("    + IP Dst: %u.%u.%u.%u\r\n"), IPHeader->DestinationAddress.Octets[0],\r
-                                                       IPHeader->DestinationAddress.Octets[1],\r
-                                                       IPHeader->DestinationAddress.Octets[2],\r
-                                                       IPHeader->DestinationAddress.Octets[3]);\r
-       #endif\r
-}\r
-\r
-/** Decodes an ICMP header and prints its contents to through the USART in a human readable format.\r
- *\r
- *  \param InDataStart  Pointer to the start of an ICMP packet header\r
- */\r
-void DecodeICMPHeader(void* InDataStart)\r
-{\r
-       #if !defined(NO_DECODE_ICMP)\r
-       ICMP_Header_t* ICMPHeader  = (ICMP_Header_t*)InDataStart;\r
-\r
-       printf_P(PSTR("    \\\r\n     ICMP\r\n"));\r
-\r
-       printf_P(PSTR("     + Type: %u\r\n"), ICMPHeader->Type);\r
-       printf_P(PSTR("     + Code: %u\r\n"), ICMPHeader->Code);\r
-       #endif\r
-}\r
-\r
-/** Decodes a TCP header and prints its contents to through the USART in a human readable format.\r
- *\r
- *  \param InDataStart  Pointer to the start of a TCP packet header\r
- */\r
-void DecodeTCPHeader(void* InDataStart)\r
-{\r
-       #if !defined(NO_DECODE_TCP)\r
-       TCP_Header_t* TCPHeader  = (TCP_Header_t*)InDataStart;\r
-\r
-       uint16_t               HeaderLengthBytes = (TCPHeader->DataOffset * sizeof(uint32_t));\r
-\r
-       printf_P(PSTR("    \\\r\n     TCP\r\n"));\r
-\r
-       printf_P(PSTR("     + Header Length: %u Bytes\r\n"), HeaderLengthBytes);\r
-\r
-       printf_P(PSTR("     + Source Port: %u\r\n"), SwapEndian_16(TCPHeader->SourcePort));\r
-       printf_P(PSTR("     + Destination Port: %u\r\n"), SwapEndian_16(TCPHeader->DestinationPort));\r
-\r
-       printf_P(PSTR("     + Sequence Number: %lu\r\n"), SwapEndian_32(TCPHeader->SequenceNumber));\r
-       printf_P(PSTR("     + Acknowledgment Number: %lu\r\n"), SwapEndian_32(TCPHeader->AcknowledgmentNumber));\r
-       \r
-       printf_P(PSTR("     + Flags: 0x%02X\r\n"), TCPHeader->Flags);\r
-       \r
-       if (TCP_GetPortState(TCPHeader->DestinationPort) == TCP_Port_Closed)\r
-         printf_P(PSTR("     + NOT LISTENING ON DESTINATION PORT\r\n"));\r
-       #endif\r
-}\r
-\r
-/** Decodes an UDP header and prints its contents to through the USART in a human readable format.\r
- *\r
- *  \param InDataStart  Pointer to the start of a UDP packet header\r
- */\r
-void DecodeUDPHeader(void* InDataStart)\r
-{\r
-       #if !defined(NO_DECODE_UDP)\r
-       UDP_Header_t* UDPHeader = (UDP_Header_t*)InDataStart;\r
-\r
-       printf_P(PSTR("    \\\r\n     UDP\r\n"));\r
-\r
-       printf_P(PSTR("     + Source Port: %u\r\n"), SwapEndian_16(UDPHeader->SourcePort));\r
-       printf_P(PSTR("     + Destination Port: %u\r\n"), SwapEndian_16(UDPHeader->DestinationPort));\r
-\r
-       printf_P(PSTR("     + Data Length: %d\r\n"), SwapEndian_16(UDPHeader->Length));\r
-       #endif\r
-}\r
-\r
-/** Decodes an DHCP header and prints its contents to through the USART in a human readable format.\r
- *\r
- *  \param InDataStart  Pointer to the start of a DHCP packet header\r
- */\r
-void DecodeDHCPHeader(void* InDataStart)\r
-{\r
-       #if !defined(NO_DECODE_DHCP)\r
-       uint8_t* DHCPOptions = (InDataStart + sizeof(DHCP_Header_t));\r
-\r
-       printf_P(PSTR("     \\\r\n      DHCP\r\n"));\r
-\r
-       while (DHCPOptions[0] != DHCP_OPTION_END)\r
-       {\r
-               if (DHCPOptions[0] == DHCP_OPTION_MESSAGETYPE)\r
-               {\r
-                       switch (DHCPOptions[2])\r
-                       {\r
-                               case DHCP_MESSAGETYPE_DISCOVER:\r
-                                       printf_P(PSTR("      + DISCOVER\r\n"));\r
-                                       break;\r
-                               case DHCP_MESSAGETYPE_REQUEST:\r
-                                       printf_P(PSTR("      + REQUEST\r\n"));\r
-                                       break;\r
-                               case DHCP_MESSAGETYPE_RELEASE:\r
-                                       printf_P(PSTR("      + RELEASE\r\n"));\r
-                                       break;\r
-                               case DHCP_MESSAGETYPE_DECLINE:\r
-                                       printf_P(PSTR("      + DECLINE\r\n"));\r
-                                       break;\r
-                       }\r
-               }\r
-               \r
-               DHCPOptions += ((DHCPOptions[0] == DHCP_OPTION_PAD) ? 1 : (DHCPOptions[1] + 2));\r
-       }\r
-\r
-       #endif\r
-}\r
diff --git a/Demos/Device/RNDISEthernet/Lib/ProtocolDecoders.h b/Demos/Device/RNDISEthernet/Lib/ProtocolDecoders.h
deleted file mode 100644 (file)
index fa0a869..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-/*\r
-             LUFA Library\r
-     Copyright (C) Dean Camera, 2009.\r
-              \r
-  dean [at] fourwalledcubicle [dot] com\r
-      www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
-  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
-  Permission to use, copy, modify, and distribute this software\r
-  and its documentation for any purpose and without fee is hereby\r
-  granted, provided that the above copyright notice appear in all\r
-  copies and that both that the copyright notice and this\r
-  permission notice and warranty disclaimer appear in supporting\r
-  documentation, and that the name of the author not be used in\r
-  advertising or publicity pertaining to distribution of the\r
-  software without specific, written prior permission.\r
-\r
-  The author disclaim all warranties with regard to this\r
-  software, including all implied warranties of merchantability\r
-  and fitness.  In no event shall the author be liable for any\r
-  special, indirect or consequential damages or any damages\r
-  whatsoever resulting from loss of use, data or profits, whether\r
-  in an action of contract, negligence or other tortious action,\r
-  arising out of or in connection with the use or performance of\r
-  this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- *  Header file for ProtocolDecoders.c.\r
- */\r
-\r
-#ifndef _PROTOCOL_DECODERS_H_\r
-#define _PROTOCOL_DECODERS_H_\r
-\r
-       /* Includes: */\r
-               #include <avr/io.h>\r
-               \r
-               #include <LUFA/Drivers/Peripheral/SerialStream.h>\r
-               \r
-               #include "EthernetProtocols.h"\r
-               #include "Ethernet.h"\r
-               \r
-       /* Function Prototypes: */\r
-               void DecodeEthernetFrameHeader(void* InDataStart);\r
-               void DecodeARPHeader(void* InDataStart);\r
-               void DecodeIPHeader(void* InDataStart);\r
-               void DecodeICMPHeader(void* InDataStart);\r
-               void DecodeTCPHeader(void* InDataStart);\r
-               void DecodeUDPHeader(void* InDataStart);\r
-               void DecodeDHCPHeader(void* InDataStart);\r
-\r
-#endif\r
diff --git a/Demos/Device/RNDISEthernet/Lib/TCP.c b/Demos/Device/RNDISEthernet/Lib/TCP.c
deleted file mode 100644 (file)
index 7c3f3b4..0000000
+++ /dev/null
@@ -1,614 +0,0 @@
-/*\r
-             LUFA Library\r
-     Copyright (C) Dean Camera, 2009.\r
-              \r
-  dean [at] fourwalledcubicle [dot] com\r
-      www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
-  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
-  Permission to use, copy, modify, and distribute this software\r
-  and its documentation for any purpose and without fee is hereby\r
-  granted, provided that the above copyright notice appear in all\r
-  copies and that both that the copyright notice and this\r
-  permission notice and warranty disclaimer appear in supporting\r
-  documentation, and that the name of the author not be used in\r
-  advertising or publicity pertaining to distribution of the\r
-  software without specific, written prior permission.\r
-\r
-  The author disclaim all warranties with regard to this\r
-  software, including all implied warranties of merchantability\r
-  and fitness.  In no event shall the author be liable for any\r
-  special, indirect or consequential damages or any damages\r
-  whatsoever resulting from loss of use, data or profits, whether\r
-  in an action of contract, negligence or other tortious action,\r
-  arising out of or in connection with the use or performance of\r
-  this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- *  Transmission Control Protocol (TCP) packet handling routines. This protocol handles the reliable in-order transmission\r
- *  and reception of packets to and from devices on a network, to "ports" on the device. It is used in situations where data\r
- *  delivery must be reliable and correct, e.g. HTTP, TELNET and most other non-streaming protocols.\r
- */\r
\r
-#define  INCLUDE_FROM_TCP_C\r
-#include "TCP.h"\r
-\r
-/* Global Variables: */\r
-/** Port state table array. This contains the current status of TCP ports in the device. To save on space, only open ports are\r
- *  stored - closed ports may be overwritten at any time, and the system will assume any ports not present in the array are closed. This\r
- *  allows for MAX_OPEN_TCP_PORTS to be less than the number of ports used by the application if desired.\r
- */\r
-TCP_PortState_t        PortStateTable[MAX_OPEN_TCP_PORTS];\r
-\r
-/** Connection state table array. This contains the current status of TCP connections in the device. To save on space, only active\r
- *  (non-closed) connections are stored - closed connections may be overwritten at any time, and the system will assume any connections\r
- *  not present in the array are closed.\r
- */\r
-TCP_ConnectionState_t  ConnectionStateTable[MAX_TCP_CONNECTIONS];\r
-\r
-\r
-/** Task to handle the calling of each registered application's callback function, to process and generate TCP packets at the application\r
- *  level. If an application produces a response, this task constructs the appropriate Ethernet frame and places it into the Ethernet OUT\r
- *  buffer for later transmission.\r
- */\r
-void TCP_TCPTask(USB_ClassInfo_RNDIS_t* RNDISInterfaceInfo)\r
-{\r
-       /* Task to hand off TCP packets to and from the listening applications. */\r
-\r
-       /* Run each application in sequence, to process incoming and generate outgoing packets */\r
-       for (uint8_t CSTableEntry = 0; CSTableEntry < MAX_TCP_CONNECTIONS; CSTableEntry++)\r
-       {\r
-               /* Find the corresponding port entry in the port table */\r
-               for (uint8_t PTableEntry = 0; PTableEntry < MAX_TCP_CONNECTIONS; PTableEntry++)\r
-               {\r
-                       /* Run the application handler for the port */\r
-                       if ((PortStateTable[PTableEntry].Port  == ConnectionStateTable[CSTableEntry].Port) && \r
-                           (PortStateTable[PTableEntry].State == TCP_Port_Open))\r
-                       {\r
-                               PortStateTable[PTableEntry].ApplicationHandler(&ConnectionStateTable[CSTableEntry], &ConnectionStateTable[CSTableEntry].Info.Buffer);\r
-                       }\r
-               }\r
-       }\r
-       \r
-       /* Bail out early if there is already a frame waiting to be sent in the Ethernet OUT buffer */\r
-       if (RNDISInterfaceInfo->FrameOUT.FrameInBuffer)\r
-         return;\r
-       \r
-       /* Send response packets from each application as the TCP packet buffers are filled by the applications */\r
-       for (uint8_t CSTableEntry = 0; CSTableEntry < MAX_TCP_CONNECTIONS; CSTableEntry++)\r
-       {\r
-               /* For each completely received packet, pass it along to the listening application */\r
-               if ((ConnectionStateTable[CSTableEntry].Info.Buffer.Direction == TCP_PACKETDIR_OUT) &&\r
-                   (ConnectionStateTable[CSTableEntry].Info.Buffer.Ready))\r
-               {\r
-                       Ethernet_Frame_Header_t* FrameOUTHeader = (Ethernet_Frame_Header_t*)&RNDISInterfaceInfo->FrameOUT.FrameData;\r
-                       IP_Header_t*    IPHeaderOUT  = (IP_Header_t*)&RNDISInterfaceInfo->FrameOUT.FrameData[sizeof(Ethernet_Frame_Header_t)];\r
-                       TCP_Header_t*   TCPHeaderOUT = (TCP_Header_t*)&RNDISInterfaceInfo->FrameOUT.FrameData[sizeof(Ethernet_Frame_Header_t) +\r
-                                                                                                             sizeof(IP_Header_t)];                                             \r
-                       void*           TCPDataOUT     = &RNDISInterfaceInfo->FrameOUT.FrameData[sizeof(Ethernet_Frame_Header_t) +\r
-                                                                                                sizeof(IP_Header_t) +\r
-                                                                                                sizeof(TCP_Header_t)];\r
-\r
-                       uint16_t PacketSize = ConnectionStateTable[CSTableEntry].Info.Buffer.Length;\r
-\r
-                       /* Fill out the TCP data */\r
-                       TCPHeaderOUT->SourcePort           = ConnectionStateTable[CSTableEntry].Port;\r
-                       TCPHeaderOUT->DestinationPort      = ConnectionStateTable[CSTableEntry].RemotePort;\r
-                       TCPHeaderOUT->SequenceNumber       = SwapEndian_32(ConnectionStateTable[CSTableEntry].Info.SequenceNumberOut);\r
-                       TCPHeaderOUT->AcknowledgmentNumber = SwapEndian_32(ConnectionStateTable[CSTableEntry].Info.SequenceNumberIn);\r
-                       TCPHeaderOUT->DataOffset           = (sizeof(TCP_Header_t) / sizeof(uint32_t));\r
-                       TCPHeaderOUT->WindowSize           = SwapEndian_16(TCP_WINDOW_SIZE);\r
-\r
-                       TCPHeaderOUT->Flags                = TCP_FLAG_ACK;\r
-                       TCPHeaderOUT->UrgentPointer        = 0;\r
-                       TCPHeaderOUT->Checksum             = 0;\r
-                       TCPHeaderOUT->Reserved             = 0;\r
-\r
-                       memcpy(TCPDataOUT, ConnectionStateTable[CSTableEntry].Info.Buffer.Data, PacketSize);\r
-                       \r
-                       ConnectionStateTable[CSTableEntry].Info.SequenceNumberOut += PacketSize;\r
-\r
-                       TCPHeaderOUT->Checksum             = TCP_Checksum16(TCPHeaderOUT, ServerIPAddress,\r
-                                                                           ConnectionStateTable[CSTableEntry].RemoteAddress,\r
-                                                                           (sizeof(TCP_Header_t) + PacketSize));\r
-\r
-                       PacketSize += sizeof(TCP_Header_t);\r
-\r
-                       /* Fill out the response IP header */\r
-                       IPHeaderOUT->TotalLength        = SwapEndian_16(sizeof(IP_Header_t) + PacketSize);\r
-                       IPHeaderOUT->TypeOfService      = 0;\r
-                       IPHeaderOUT->HeaderLength       = (sizeof(IP_Header_t) / sizeof(uint32_t));\r
-                       IPHeaderOUT->Version            = 4;\r
-                       IPHeaderOUT->Flags              = 0;\r
-                       IPHeaderOUT->FragmentOffset     = 0;\r
-                       IPHeaderOUT->Identification     = 0;\r
-                       IPHeaderOUT->HeaderChecksum     = 0;\r
-                       IPHeaderOUT->Protocol           = PROTOCOL_TCP;\r
-                       IPHeaderOUT->TTL                = DEFAULT_TTL;\r
-                       IPHeaderOUT->SourceAddress      = ServerIPAddress;\r
-                       IPHeaderOUT->DestinationAddress = ConnectionStateTable[CSTableEntry].RemoteAddress;\r
-                       \r
-                       IPHeaderOUT->HeaderChecksum     = Ethernet_Checksum16(IPHeaderOUT, sizeof(IP_Header_t));\r
-               \r
-                       PacketSize += sizeof(IP_Header_t);\r
-               \r
-                       /* Fill out the response Ethernet frame header */\r
-                       FrameOUTHeader->Source          = ServerMACAddress;\r
-                       FrameOUTHeader->Destination     = (MAC_Address_t){{0x02, 0x00, 0x02, 0x00, 0x02, 0x00}};\r
-                       FrameOUTHeader->EtherType       = SwapEndian_16(ETHERTYPE_IPV4);\r
-\r
-                       PacketSize += sizeof(Ethernet_Frame_Header_t);\r
-\r
-                       /* Set the response length in the buffer and indicate that a response is ready to be sent */\r
-                       RNDISInterfaceInfo->FrameOUT.FrameLength   = PacketSize;\r
-                       RNDISInterfaceInfo->FrameOUT.FrameInBuffer = true;\r
-                       \r
-                       ConnectionStateTable[CSTableEntry].Info.Buffer.Ready = false;\r
-                       \r
-                       break;\r
-               }\r
-       }\r
-}\r
-\r
-/** Initializes the TCP protocol handler, clearing the port and connection state tables. This must be called before TCP packets are\r
- *  processed.\r
- */\r
-void TCP_Init(void)\r
-{\r
-       /* Initialize the port state table with all CLOSED entries */\r
-       for (uint8_t PTableEntry = 0; PTableEntry < MAX_OPEN_TCP_PORTS; PTableEntry++)\r
-         PortStateTable[PTableEntry].State = TCP_Port_Closed;\r
-\r
-       /* Initialize the connection table with all CLOSED entries */\r
-       for (uint8_t CSTableEntry = 0; CSTableEntry < MAX_TCP_CONNECTIONS; CSTableEntry++)\r
-         ConnectionStateTable[CSTableEntry].State = TCP_Connection_Closed;\r
-}\r
-\r
-/** Sets the state and callback handler of the given port, specified in big endian to the given state.\r
- *\r
- *  \param Port     Port whose state and callback function to set, specified in big endian\r
- *  \param State    New state of the port, a value from the TCP_PortStates_t enum\r
- *  \param Handler  Application callback handler for the port\r
- *\r
- *  \return Boolean true if the port state was set, false otherwise (no more space in the port state table)\r
- */\r
-bool TCP_SetPortState(uint16_t Port, uint8_t State, void (*Handler)(TCP_ConnectionState_t*, TCP_ConnectionBuffer_t*))\r
-{\r
-       /* Note, Port number should be specified in BIG endian to simplify network code */\r
-\r
-       /* Check to see if the port entry is already in the port state table */\r
-       for (uint8_t PTableEntry = 0; PTableEntry < MAX_TCP_CONNECTIONS; PTableEntry++)\r
-       {\r
-               /* Find existing entry for the port in the table, update it if found */\r
-               if (PortStateTable[PTableEntry].Port == Port)\r
-               {\r
-                       PortStateTable[PTableEntry].State = State;\r
-                       PortStateTable[PTableEntry].ApplicationHandler = Handler;\r
-                       return true;\r
-               }\r
-       }\r
-\r
-       /* Check if trying to open the port -- if so we need to find an unused (closed) entry and replace it */\r
-       if (State == TCP_Port_Open)\r
-       {\r
-               for (uint8_t PTableEntry = 0; PTableEntry < MAX_TCP_CONNECTIONS; PTableEntry++)\r
-               {\r
-                       /* Find a closed port entry in the table, change it to the given port and state */\r
-                       if (PortStateTable[PTableEntry].State == TCP_Port_Closed)\r
-                       {\r
-                               PortStateTable[PTableEntry].Port  = Port;\r
-                               PortStateTable[PTableEntry].State = State;\r
-                               PortStateTable[PTableEntry].ApplicationHandler = Handler;\r
-                               return true;\r
-                       }\r
-               }\r
-               \r
-               /* Port not in table and no room to add it, return failure */\r
-               return false;\r
-       }\r
-       else\r
-       {\r
-               /* Port not in table but trying to close it, so operation successful */\r
-               return true;\r
-       }\r
-}\r
-\r
-/** Retrieves the current state of a given TCP port, specified in big endian.\r
- *\r
- *  \param Port  TCP port whose state is to be retrieved, given in big-endian\r
- *\r
- *  \return A value from the TCP_PortStates_t enum\r
- */\r
-uint8_t TCP_GetPortState(uint16_t Port)\r
-{\r
-       /* Note, Port number should be specified in BIG endian to simplify network code */\r
-\r
-       for (uint8_t PTableEntry = 0; PTableEntry < MAX_TCP_CONNECTIONS; PTableEntry++)\r
-       {\r
-               /* Find existing entry for the port in the table, return the port status if found */\r
-               if (PortStateTable[PTableEntry].Port == Port)\r
-                 return PortStateTable[PTableEntry].State;\r
-       }\r
-       \r
-       /* Port not in table, assume closed */\r
-       return TCP_Port_Closed;\r
-}\r
-\r
-/** Sets the connection state of the given port, remote address and remote port to the given TCP connection state. If the\r
- *  connection exists in the connection state table it is updated, otherwise it is created if possible.\r
- *\r
- *  \param Port           TCP port of the connection on the device, specified in big endian\r
- *  \param RemoteAddress  Remote protocol IP address of the connected device\r
- *  \param RemotePort     TCP port of the remote device in the connection, specified in big endian\r
- *  \param State          TCP connection state, a value from the TCP_ConnectionStates_t enum\r
- *\r
- *  \return Boolean true if the connection was updated or created, false otherwise (no more space in the connection state table)\r
- */\r
-bool TCP_SetConnectionState(uint16_t Port, IP_Address_t RemoteAddress, uint16_t RemotePort, uint8_t State)\r
-{\r
-       /* Note, Port number should be specified in BIG endian to simplify network code */\r
-\r
-       for (uint8_t CSTableEntry = 0; CSTableEntry < MAX_TCP_CONNECTIONS; CSTableEntry++)\r
-       {\r
-               /* Find port entry in the table */\r
-               if ((ConnectionStateTable[CSTableEntry].Port == Port) &&\r
-                    IP_COMPARE(&ConnectionStateTable[CSTableEntry].RemoteAddress, &RemoteAddress) &&\r
-                        ConnectionStateTable[CSTableEntry].RemotePort == RemotePort)\r
-               {\r
-                       ConnectionStateTable[CSTableEntry].State = State;\r
-                       return true;\r
-               }\r
-       }\r
-       \r
-       for (uint8_t CSTableEntry = 0; CSTableEntry < MAX_TCP_CONNECTIONS; CSTableEntry++)\r
-       {\r
-               /* Find empty entry in the table */\r
-               if (ConnectionStateTable[CSTableEntry].State == TCP_Connection_Closed)\r
-               {\r
-                       ConnectionStateTable[CSTableEntry].Port          = Port;\r
-                       ConnectionStateTable[CSTableEntry].RemoteAddress = RemoteAddress;                       \r
-                       ConnectionStateTable[CSTableEntry].RemotePort    = RemotePort;\r
-                       ConnectionStateTable[CSTableEntry].State         = State;\r
-                       return true;\r
-               }\r
-       }\r
-       \r
-       return false;\r
-}\r
-\r
-/** Retrieves the current state of a given TCP connection to a host.\r
- *\r
- *  \param Port           TCP port on the device in the connection, specified in big endian\r
- *  \param RemoteAddress  Remote protocol IP address of the connected host\r
- *  \param RemotePort     Remote TCP port of the connected host, specified in big endian\r
- *\r
- *  \return A value from the TCP_ConnectionStates_t enum\r
- */\r
-uint8_t TCP_GetConnectionState(uint16_t Port, IP_Address_t RemoteAddress, uint16_t RemotePort)\r
-{\r
-       /* Note, Port number should be specified in BIG endian to simplify network code */\r
-\r
-       for (uint8_t CSTableEntry = 0; CSTableEntry < MAX_TCP_CONNECTIONS; CSTableEntry++)\r
-       {\r
-               /* Find port entry in the table */\r
-               if ((ConnectionStateTable[CSTableEntry].Port == Port) &&\r
-                    IP_COMPARE(&ConnectionStateTable[CSTableEntry].RemoteAddress, &RemoteAddress) &&\r
-                        ConnectionStateTable[CSTableEntry].RemotePort == RemotePort)\r
-                        \r
-               {\r
-                       return ConnectionStateTable[CSTableEntry].State;\r
-               }\r
-       }\r
-       \r
-       return TCP_Connection_Closed;\r
-}\r
-\r
-/** Retrieves the connection info structure of a given connection to a host.\r
- *\r
- *  \param Port           TCP port on the device in the connection, specified in big endian\r
- *  \param RemoteAddress  Remote protocol IP address of the connected host\r
- *  \param RemotePort     Remote TCP port of the connected host, specified in big endian\r
- *\r
- *  \return ConnectionInfo structure of the connection if found, NULL otherwise\r
- */\r
-TCP_ConnectionInfo_t* TCP_GetConnectionInfo(uint16_t Port, IP_Address_t RemoteAddress, uint16_t RemotePort)\r
-{\r
-       /* Note, Port number should be specified in BIG endian to simplify network code */\r
-\r
-       for (uint8_t CSTableEntry = 0; CSTableEntry < MAX_TCP_CONNECTIONS; CSTableEntry++)\r
-       {\r
-               /* Find port entry in the table */\r
-               if ((ConnectionStateTable[CSTableEntry].Port == Port) &&\r
-                    IP_COMPARE(&ConnectionStateTable[CSTableEntry].RemoteAddress, &RemoteAddress) &&\r
-                        ConnectionStateTable[CSTableEntry].RemotePort == RemotePort)\r
-               {\r
-                       return &ConnectionStateTable[CSTableEntry].Info;\r
-               }\r
-       }\r
-       \r
-       return NULL;\r
-}\r
-\r
-/** Processes a TCP packet inside an Ethernet frame, and writes the appropriate response\r
- *  to the output Ethernet frame if one is created by a application handler.\r
- *\r
- *  \param IPHeaderInStart    Pointer to the start of the incoming packet's IP header\r
- *  \param TCPHeaderInStart   Pointer to the start of the incoming packet's TCP header\r
- *  \param TCPHeaderOutStart  Pointer to the start of the outgoing packet's TCP header\r
- *\r
- *  \return The number of bytes written to the out Ethernet frame if any, NO_RESPONSE if no\r
- *           response was generated, NO_PROCESS if the packet processing was deferred until the\r
- *           next Ethernet packet handler iteration\r
- */\r
-int16_t TCP_ProcessTCPPacket(void* IPHeaderInStart, void* TCPHeaderInStart, void* TCPHeaderOutStart)\r
-{\r
-       IP_Header_t*  IPHeaderIN   = (IP_Header_t*)IPHeaderInStart;\r
-       TCP_Header_t* TCPHeaderIN  = (TCP_Header_t*)TCPHeaderInStart;\r
-       TCP_Header_t* TCPHeaderOUT = (TCP_Header_t*)TCPHeaderOutStart;\r
-\r
-       TCP_ConnectionInfo_t* ConnectionInfo;\r
-       \r
-       DecodeTCPHeader(TCPHeaderInStart);\r
-\r
-       bool PacketResponse = false;\r
-               \r
-       /* Check if the destination port is open and allows incoming connections */\r
-       if (TCP_GetPortState(TCPHeaderIN->DestinationPort) == TCP_Port_Open)\r
-       {\r
-               /* Detect SYN from host to start a connection */\r
-               if (TCPHeaderIN->Flags & TCP_FLAG_SYN)\r
-                 TCP_SetConnectionState(TCPHeaderIN->DestinationPort, IPHeaderIN->SourceAddress, TCPHeaderIN->SourcePort, TCP_Connection_Listen);\r
-\r
-               /* Detect RST from host to abort existing connection */\r
-               if (TCPHeaderIN->Flags & TCP_FLAG_RST)\r
-               {\r
-                       TCPHeaderOUT->Flags = (TCP_FLAG_RST | TCP_FLAG_ACK);                            \r
-                       PacketResponse = true;\r
-                       \r
-                       TCP_SetConnectionState(TCPHeaderIN->DestinationPort, IPHeaderIN->SourceAddress,\r
-                                              TCPHeaderIN->SourcePort, TCP_Connection_Closed);                 \r
-               }\r
-               else\r
-               {\r
-                       /* Process the incoming TCP packet based on the current connection state for the sender and port */\r
-                       switch (TCP_GetConnectionState(TCPHeaderIN->DestinationPort, IPHeaderIN->SourceAddress, TCPHeaderIN->SourcePort))\r
-                       {\r
-                               case TCP_Connection_Listen:\r
-                                       if (TCPHeaderIN->Flags == TCP_FLAG_SYN)\r
-                                       {\r
-                                               /* SYN connection when closed starts a connection with a peer */\r
-\r
-                                               TCPHeaderOUT->Flags = (TCP_FLAG_SYN | TCP_FLAG_ACK);                            \r
-                                               PacketResponse      = true;\r
-                                                                       \r
-                                               TCP_SetConnectionState(TCPHeaderIN->DestinationPort, IPHeaderIN->SourceAddress, TCPHeaderIN->SourcePort,\r
-                                                                                          TCP_Connection_SYNReceived);\r
-                                                                                          \r
-                                               ConnectionInfo = TCP_GetConnectionInfo(TCPHeaderIN->DestinationPort, IPHeaderIN->SourceAddress, TCPHeaderIN->SourcePort);\r
-\r
-                                               ConnectionInfo->SequenceNumberIn  = (SwapEndian_32(TCPHeaderIN->SequenceNumber) + 1);\r
-                                               ConnectionInfo->SequenceNumberOut = 0;\r
-                                               ConnectionInfo->Buffer.InUse      = false;\r
-                                       }\r
-                                       \r
-                                       break;\r
-                               case TCP_Connection_SYNReceived:\r
-                                       if (TCPHeaderIN->Flags == TCP_FLAG_ACK)\r
-                                       {\r
-                                               /* ACK during the connection process completes the connection to a peer */\r
-\r
-                                               TCP_SetConnectionState(TCPHeaderIN->DestinationPort, IPHeaderIN->SourceAddress,\r
-                                                                                          TCPHeaderIN->SourcePort, TCP_Connection_Established);\r
-\r
-                                               ConnectionInfo = TCP_GetConnectionInfo(TCPHeaderIN->DestinationPort, IPHeaderIN->SourceAddress,\r
-                                                                                                                          TCPHeaderIN->SourcePort);\r
-                                                                                                                          \r
-                                               ConnectionInfo->SequenceNumberOut++;\r
-                                       }\r
-                                       \r
-                                       break;\r
-                               case TCP_Connection_Established:\r
-                                       if (TCPHeaderIN->Flags == (TCP_FLAG_FIN | TCP_FLAG_ACK))\r
-                                       {\r
-                                               /* FIN ACK when connected to a peer starts the finalization process */\r
-                                       \r
-                                               TCPHeaderOUT->Flags = (TCP_FLAG_FIN | TCP_FLAG_ACK);                            \r
-                                               PacketResponse      = true;\r
-                                               \r
-                                               TCP_SetConnectionState(TCPHeaderIN->DestinationPort, IPHeaderIN->SourceAddress,\r
-                                                                                          TCPHeaderIN->SourcePort, TCP_Connection_CloseWait);\r
-\r
-                                               ConnectionInfo = TCP_GetConnectionInfo(TCPHeaderIN->DestinationPort, IPHeaderIN->SourceAddress,\r
-                                                                                                                          TCPHeaderIN->SourcePort);\r
-\r
-                                               ConnectionInfo->SequenceNumberIn++;\r
-                                               ConnectionInfo->SequenceNumberOut++;\r
-                                       }\r
-                                       else if ((TCPHeaderIN->Flags == TCP_FLAG_ACK) || (TCPHeaderIN->Flags == (TCP_FLAG_ACK | TCP_FLAG_PSH)))\r
-                                       {\r
-                                               ConnectionInfo = TCP_GetConnectionInfo(TCPHeaderIN->DestinationPort, IPHeaderIN->SourceAddress,\r
-                                                                                                                          TCPHeaderIN->SourcePort);\r
-\r
-                                               /* Check if the buffer is currently in use either by a buffered data to send, or receive */             \r
-                                               if ((ConnectionInfo->Buffer.InUse == false) && (ConnectionInfo->Buffer.Ready == false))\r
-                                               {                                               \r
-                                                       ConnectionInfo->Buffer.Direction = TCP_PACKETDIR_IN;\r
-                                                       ConnectionInfo->Buffer.InUse     = true;\r
-                                                       ConnectionInfo->Buffer.Length    = 0;\r
-                                               }\r
-                                               \r
-                                               /* Check if the buffer has been claimed by us to read in data from the peer */\r
-                                               if ((ConnectionInfo->Buffer.Direction == TCP_PACKETDIR_IN) &&\r
-                                                       (ConnectionInfo->Buffer.Length != TCP_WINDOW_SIZE))\r
-                                               {\r
-                                                       uint16_t IPOffset   = (IPHeaderIN->HeaderLength * sizeof(uint32_t));\r
-                                                       uint16_t TCPOffset  = (TCPHeaderIN->DataOffset * sizeof(uint32_t));\r
-                                                       uint16_t DataLength = (SwapEndian_16(IPHeaderIN->TotalLength) - IPOffset - TCPOffset);\r
-\r
-                                                       /* Copy the packet data into the buffer */\r
-                                                       memcpy(&ConnectionInfo->Buffer.Data[ConnectionInfo->Buffer.Length],\r
-                                                                  &((uint8_t*)TCPHeaderInStart)[TCPOffset],\r
-                                                                  DataLength);\r
-\r
-                                                       ConnectionInfo->SequenceNumberIn += DataLength;\r
-                                                       ConnectionInfo->Buffer.Length    += DataLength;\r
-                                                       \r
-                                                       /* Check if the buffer is full or if the PSH flag is set, if so indicate buffer ready */\r
-                                                       if ((!(TCP_WINDOW_SIZE - ConnectionInfo->Buffer.Length)) || (TCPHeaderIN->Flags & TCP_FLAG_PSH))\r
-                                                       {\r
-                                                               ConnectionInfo->Buffer.InUse = false;\r
-                                                               ConnectionInfo->Buffer.Ready = true;\r
-\r
-                                                               TCPHeaderOUT->Flags = TCP_FLAG_ACK;\r
-                                                               PacketResponse      = true;\r
-                                                       }\r
-                                               }\r
-                                               else\r
-                                               {\r
-                                                       /* Buffer is currently in use by the application, defer processing of the incoming packet */\r
-                                                       return NO_PROCESS;\r
-                                               }\r
-                                       }\r
-                                       \r
-                                       break;\r
-                               case TCP_Connection_Closing:\r
-                                               ConnectionInfo = TCP_GetConnectionInfo(TCPHeaderIN->DestinationPort, IPHeaderIN->SourceAddress,\r
-                                                                                                                          TCPHeaderIN->SourcePort);\r
-\r
-                                               TCPHeaderOUT->Flags = (TCP_FLAG_ACK | TCP_FLAG_FIN);\r
-                                               PacketResponse      = true;\r
-                                               \r
-                                               ConnectionInfo->Buffer.InUse = false;\r
-                                               \r
-                                               TCP_SetConnectionState(TCPHeaderIN->DestinationPort, IPHeaderIN->SourceAddress,\r
-                                                                                          TCPHeaderIN->SourcePort, TCP_Connection_FINWait1);\r
-\r
-                                       break;\r
-                               case TCP_Connection_FINWait1:\r
-                                       if (TCPHeaderIN->Flags == (TCP_FLAG_FIN | TCP_FLAG_ACK))\r
-                                       {\r
-                                               ConnectionInfo = TCP_GetConnectionInfo(TCPHeaderIN->DestinationPort, IPHeaderIN->SourceAddress,\r
-                                                                                                                          TCPHeaderIN->SourcePort);\r
-\r
-                                               TCPHeaderOUT->Flags = TCP_FLAG_ACK;\r
-                                               PacketResponse      = true;\r
-\r
-                                               ConnectionInfo->SequenceNumberIn++;\r
-                                               ConnectionInfo->SequenceNumberOut++;\r
-                                               \r
-                                               TCP_SetConnectionState(TCPHeaderIN->DestinationPort, IPHeaderIN->SourceAddress,\r
-                                                                                          TCPHeaderIN->SourcePort, TCP_Connection_Closed);\r
-                                       }\r
-                                       else if (TCPHeaderIN->Flags == TCP_FLAG_ACK)\r
-                                       {\r
-                                               TCP_SetConnectionState(TCPHeaderIN->DestinationPort, IPHeaderIN->SourceAddress,\r
-                                                                                          TCPHeaderIN->SourcePort, TCP_Connection_FINWait2);\r
-                                       }\r
-                                       \r
-                                       break;\r
-                               case TCP_Connection_FINWait2:\r
-                                       if (TCPHeaderIN->Flags == (TCP_FLAG_FIN | TCP_FLAG_ACK))\r
-                                       {\r
-                                               ConnectionInfo = TCP_GetConnectionInfo(TCPHeaderIN->DestinationPort, IPHeaderIN->SourceAddress,\r
-                                                                                                                          TCPHeaderIN->SourcePort);\r
-\r
-                                               TCPHeaderOUT->Flags = TCP_FLAG_ACK;\r
-                                               PacketResponse      = true;\r
-\r
-                                               ConnectionInfo->SequenceNumberIn++;\r
-                                               ConnectionInfo->SequenceNumberOut++;\r
-                                               \r
-                                               TCP_SetConnectionState(TCPHeaderIN->DestinationPort, IPHeaderIN->SourceAddress,\r
-                                                                                          TCPHeaderIN->SourcePort, TCP_Connection_Closed);\r
-                                       }\r
-                               \r
-                                       break;\r
-                               case TCP_Connection_CloseWait:\r
-                                       if (TCPHeaderIN->Flags == TCP_FLAG_ACK)\r
-                                       {\r
-                                               TCP_SetConnectionState(TCPHeaderIN->DestinationPort, IPHeaderIN->SourceAddress,\r
-                                                                                          TCPHeaderIN->SourcePort, TCP_Connection_Closed);\r
-                                       }\r
-                                       \r
-                                       break;\r
-                       }\r
-               }\r
-       }\r
-       else\r
-       {\r
-               /* Port is not open, indicate via a RST/ACK response to the sender */\r
-               TCPHeaderOUT->Flags = (TCP_FLAG_RST | TCP_FLAG_ACK);                            \r
-               PacketResponse      = true;\r
-       }\r
-       \r
-       /* Check if we need to respond to the sent packet */\r
-       if (PacketResponse)\r
-       {\r
-               ConnectionInfo = TCP_GetConnectionInfo(TCPHeaderIN->DestinationPort, IPHeaderIN->SourceAddress,\r
-                                                      TCPHeaderIN->SourcePort);\r
-\r
-               TCPHeaderOUT->SourcePort           = TCPHeaderIN->DestinationPort;\r
-               TCPHeaderOUT->DestinationPort      = TCPHeaderIN->SourcePort;\r
-               TCPHeaderOUT->SequenceNumber       = SwapEndian_32(ConnectionInfo->SequenceNumberOut);\r
-               TCPHeaderOUT->AcknowledgmentNumber = SwapEndian_32(ConnectionInfo->SequenceNumberIn);\r
-               TCPHeaderOUT->DataOffset           = (sizeof(TCP_Header_t) / sizeof(uint32_t));\r
-               \r
-               if (!(ConnectionInfo->Buffer.InUse))\r
-                 TCPHeaderOUT->WindowSize         = SwapEndian_16(TCP_WINDOW_SIZE);\r
-               else\r
-                 TCPHeaderOUT->WindowSize         = SwapEndian_16(TCP_WINDOW_SIZE - ConnectionInfo->Buffer.Length);\r
-\r
-               TCPHeaderOUT->UrgentPointer        = 0;\r
-               TCPHeaderOUT->Checksum             = 0;\r
-               TCPHeaderOUT->Reserved             = 0;\r
-               \r
-               TCPHeaderOUT->Checksum             = TCP_Checksum16(TCPHeaderOUT, IPHeaderIN->DestinationAddress,\r
-                                                                   IPHeaderIN->SourceAddress, sizeof(TCP_Header_t));                                   \r
-\r
-               return sizeof(TCP_Header_t);    \r
-       }\r
-\r
-       return NO_RESPONSE;\r
-}\r
-\r
-/** Calculates the appropriate TCP checksum, consisting of the addition of the one's compliment of each word,\r
- *  complimented.\r
- *\r
- *  \param TCPHeaderOutStart  Pointer to the start of the packet's outgoing TCP header\r
- *  \param SourceAddress      Source protocol IP address of the outgoing IP header\r
- *  \param DestinationAddress DestinationAddress protocol IP address of the outgoing IP header\r
- *  \param TCPOutSize         Size in bytes of the TCP data header and payload\r
- *\r
- *  \return A 16-bit TCP checksum value\r
- */\r
-static uint16_t TCP_Checksum16(void* TCPHeaderOutStart, IP_Address_t SourceAddress,\r
-                               IP_Address_t DestinationAddress, uint16_t TCPOutSize)\r
-{\r
-       uint32_t Checksum = 0;\r
-       \r
-       /* TCP/IP checksums are the addition of the one's compliment of each word including the IP pseudo-header,\r
-          complimented */\r
-       \r
-       Checksum += ((uint16_t*)&SourceAddress)[0];\r
-       Checksum += ((uint16_t*)&SourceAddress)[1];\r
-       Checksum += ((uint16_t*)&DestinationAddress)[0];\r
-       Checksum += ((uint16_t*)&DestinationAddress)[1];\r
-       Checksum += SwapEndian_16(PROTOCOL_TCP);\r
-       Checksum += SwapEndian_16(TCPOutSize);\r
-\r
-       for (uint8_t CurrWord = 0; CurrWord < (TCPOutSize >> 1); CurrWord++)\r
-         Checksum += ((uint16_t*)TCPHeaderOutStart)[CurrWord];\r
-       \r
-       if (TCPOutSize & 0x01)\r
-         Checksum += (((uint16_t*)TCPHeaderOutStart)[TCPOutSize >> 1] & 0x00FF);\r
-         \r
-       while (Checksum & 0xFFFF0000)\r
-         Checksum = ((Checksum & 0xFFFF) + (Checksum >> 16));\r
-       \r
-       return ~Checksum;\r
-}\r
diff --git a/Demos/Device/RNDISEthernet/Lib/TCP.h b/Demos/Device/RNDISEthernet/Lib/TCP.h
deleted file mode 100644 (file)
index 3448245..0000000
+++ /dev/null
@@ -1,249 +0,0 @@
-/*\r
-             LUFA Library\r
-     Copyright (C) Dean Camera, 2009.\r
-              \r
-  dean [at] fourwalledcubicle [dot] com\r
-      www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
-  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
-  Permission to use, copy, modify, and distribute this software\r
-  and its documentation for any purpose and without fee is hereby\r
-  granted, provided that the above copyright notice appear in all\r
-  copies and that both that the copyright notice and this\r
-  permission notice and warranty disclaimer appear in supporting\r
-  documentation, and that the name of the author not be used in\r
-  advertising or publicity pertaining to distribution of the\r
-  software without specific, written prior permission.\r
-\r
-  The author disclaim all warranties with regard to this\r
-  software, including all implied warranties of merchantability\r
-  and fitness.  In no event shall the author be liable for any\r
-  special, indirect or consequential damages or any damages\r
-  whatsoever resulting from loss of use, data or profits, whether\r
-  in an action of contract, negligence or other tortious action,\r
-  arising out of or in connection with the use or performance of\r
-  this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- *  Header file for TCP.c.\r
- */\r
-\r
-#ifndef _TCP_H_\r
-#define _TCP_H_\r
-\r
-       /* Includes: */\r
-               #include <avr/io.h>\r
-               #include <stdbool.h>
-               \r
-               #include "EthernetProtocols.h"\r
-               #include "Ethernet.h"\r
-               #include "ProtocolDecoders.h"\r
-               \r
-       /* Macros: */\r
-               /** Maximum number of TCP ports which can be open at the one time */\r
-               #define MAX_OPEN_TCP_PORTS              1\r
-\r
-               /** Maximum number of TCP connections which can be sustained at the one time */\r
-               #define MAX_TCP_CONNECTIONS             1\r
-\r
-               /** TCP window size, giving the maximum number of bytes which can be buffered at the one time */\r
-               #define TCP_WINDOW_SIZE                 1024\r
-               \r
-               /** Port number for HTTP transmissions */\r
-               #define TCP_PORT_HTTP                   SwapEndian_16(80)\r
-               \r
-               /** Data direction indicator for a TCP application buffer, indicating data from host-to-device */\r
-               #define TCP_PACKETDIR_IN                false\r
-\r
-               /** Data direction indicator for a TCP application buffer, indicating data from device-to-host */\r
-               #define TCP_PACKETDIR_OUT               true\r
-               \r
-               /** Congestion Window Reduced TCP flag mask */\r
-               #define TCP_FLAG_CWR                    (1 << 7)\r
-\r
-               /** Explicit Congestion Notification TCP flag mask */\r
-               #define TCP_FLAG_ECE                    (1 << 6)\r
-\r
-               /** Urgent TCP flag mask */\r
-               #define TCP_FLAG_URG                    (1 << 5)\r
-\r
-               /** Data Acknowledge TCP flag mask */\r
-               #define TCP_FLAG_ACK                    (1 << 4)\r
-\r
-               /** Data Push TCP flag mask */\r
-               #define TCP_FLAG_PSH                    (1 << 3)\r
-\r
-               /** Reset TCP flag mask */\r
-               #define TCP_FLAG_RST                    (1 << 2)\r
-\r
-               /** Synchronize TCP flag mask */\r
-               #define TCP_FLAG_SYN                    (1 << 1)\r
-\r
-               /** Connection Finalize TCP flag mask */\r
-               #define TCP_FLAG_FIN                    (1 << 0)\r
-               \r
-               /** Application macro: Determines if the given application buffer contains a packet received from the host\r
-                *\r
-                *  \param Buffer  Application buffer to check\r
-                *\r
-                *  \return Boolean true if the buffer contains a packet from the host, false otherwise\r
-                */\r
-               #define TCP_APP_HAS_RECEIVED_PACKET(Buffer)  (Buffer->Ready && (Buffer->Direction == TCP_PACKETDIR_IN))\r
-\r
-               /** Application macro: Indicates if the application buffer is currently locked by the application for device-to-host transfers.\r
-                *\r
-                *  \param Buffer  Application buffer to check\r
-                *\r
-                *  \return Boolean true if the buffer has been captured by the application for device-to-host transmissions, false otherwise\r
-                */\r
-               #define TCP_APP_HAVE_CAPTURED_BUFFER(Buffer) (!(Buffer->Ready) && Buffer->InUse && \\r
-                                                             (Buffer->Direction == TCP_PACKETDIR_OUT))\r
-\r
-               /** Application macro: Indicates if the application can lock the buffer for multiple continued device-to-host transmissions.\r
-                *\r
-                *  \param Buffer  Application buffer to check\r
-                *\r
-                *  \return Boolean true if the buffer may be captured by the application for device-to-host transmissions, false otherwise\r
-                */\r
-               #define TCP_APP_CAN_CAPTURE_BUFFER(Buffer)   Buffer->InUse\r
-\r
-               /** Application macro: Captures the application buffer, locking it for device-to-host transmissions only. This should be\r
-                *  performed when the application needs to transmit several packets worth of data in succession with no interruptions from the host.\r
-                *\r
-                *  \note The application must check that the buffer can be locked first using TCP_APP_CAN_CAPTURE_BUFFER().\r
-                *\r
-                *  \param Buffer  Application buffer to lock\r
-                */\r
-               #define TCP_APP_CAPTURE_BUFFER(Buffer)       MACROS{ Buffer->Direction = TCP_PACKETDIR_OUT; Buffer->InUse = true; }MACROE\r
-\r
-               /** Application macro: Releases a captured application buffer, allowing for host-to-device packets to be received.\r
-                *\r
-                *  \param Buffer  Application buffer to release\r
-                */\r
-               #define TCP_APP_RELEASE_BUFFER(Buffer)       MACROS{ Buffer->InUse = false; }MACROE\r
-\r
-               /** Application macro: Sends the contents of the given application buffer to the host.\r
-                *\r
-                *  \param Buffer  Application buffer to send\r
-                *  \param Len     Length of data contained in the buffer\r
-                */\r
-               #define TCP_APP_SEND_BUFFER(Buffer, Len)     MACROS{ Buffer->Direction = TCP_PACKETDIR_OUT; Buffer->Length = Len; Buffer->Ready = true; }MACROE\r
-\r
-               /** Application macro: Clears the application buffer, ready for a packet to be written to it.\r
-                *\r
-                *  \param Buffer  Application buffer to clear\r
-                */\r
-               #define TCP_APP_CLEAR_BUFFER(Buffer)         MACROS{ Buffer->Ready = false; Buffer->Length = 0; }MACROE\r
-               \r
-               /** Application macro: Closes an open connection to a host.\r
-                *\r
-                *  \param Connection  Open TCP connection to close\r
-                */\r
-               #define TCP_APP_CLOSECONNECTION(Connection)  MACROS{ Connection->State = TCP_Connection_Closing;  }MACROE\r
-\r
-       /* Enums: */\r
-               /** Enum for possible TCP port states */\r
-               enum TCP_PortStates_t\r
-               {\r
-                       TCP_Port_Closed            = 0, /**< TCP port closed, no connections to a host may be made on this port. */\r
-                       TCP_Port_Open              = 1, /**< TCP port open, connections to a host may be made on this port. */\r
-               };\r
-       \r
-               /** Enum for possible TCP connection states */\r
-               enum TCP_ConnectionStates_t\r
-               {\r
-                       TCP_Connection_Listen      = 0, /**< Listening for a connection from a host */\r
-                       TCP_Connection_SYNSent     = 1, /**< Unused */\r
-                       TCP_Connection_SYNReceived = 2, /**< SYN received, waiting for ACK */\r
-                       TCP_Connection_Established = 3, /**< Connection established in both directions */\r
-                       TCP_Connection_FINWait1    = 4, /**< Closing, waiting for ACK */\r
-                       TCP_Connection_FINWait2    = 5, /**< Closing, waiting for FIN ACK */\r
-                       TCP_Connection_CloseWait   = 6, /**< Closing, waiting for ACK */\r
-                       TCP_Connection_Closing     = 7, /**< Unused */\r
-                       TCP_Connection_LastACK     = 8, /**< Unused */\r
-                       TCP_Connection_TimeWait    = 9, /**< Unused */\r
-                       TCP_Connection_Closed      = 10, /**< Connection closed in both directions */                   \r
-               };\r
-       \r
-       /* Type Defines: */\r
-               /** Type define for a TCP connection buffer structure, including size, data and direction */\r
-               typedef struct\r
-               {\r
-                       uint16_t               Length; /**< Length of data in the TCP application buffer */\r
-                       uint8_t                Data[TCP_WINDOW_SIZE]; /**< TCP application data buffer */\r
-                       bool                   Direction; /**< Buffer transmission direction, either TCP_PACKETDIR_IN  or TCP_PACKETDIR_OUT */\r
-                       bool                   Ready; /**< If data from host, indicates buffer ready to be read, otherwise indicates\r
-                                                      *   buffer ready to be sent to the host\r
-                                                      */\r
-                       bool                   InUse; /** Indicates if the buffer is locked to to the current direction, and cannot be changed */\r
-               } TCP_ConnectionBuffer_t;\r
-\r
-               /** Type define for a TCP connection information structure */\r
-               typedef struct\r
-               {\r
-                       uint32_t               SequenceNumberIn; /**< Current TCP sequence number for host-to-device */ \r
-                       uint32_t               SequenceNumberOut; /**< Current TCP sequence number for device-to-host */\r
-                       TCP_ConnectionBuffer_t Buffer; /**< Connection application data buffer */\r
-               } TCP_ConnectionInfo_t;\r
-\r
-               /** Type define for a complete TCP connection state */\r
-               typedef struct\r
-               {\r
-                       uint16_t               Port; /**< Connection port number on the device */\r
-                       uint16_t               RemotePort; /**< Connection port number on the host */\r
-                       IP_Address_t           RemoteAddress; /**< Connection protocol IP address of the host */\r
-                       TCP_ConnectionInfo_t   Info; /**< Connection information, including application buffer */\r
-                       uint8_t                State; /**< Current connection state, a value from the TCP_ConnectionStates_t enum */\r
-               } TCP_ConnectionState_t;\r
-\r
-               /** Type define for a TCP port state */\r
-               typedef struct\r
-               {\r
-                       uint16_t               Port; /**< TCP port number on the device */\r
-                       uint8_t                State; /**< Current port state, a value from the TCP_PortStates_t enum */\r
-                       void                   (*ApplicationHandler) (TCP_ConnectionState_t* ConnectionState,\r
-                                                                     TCP_ConnectionBuffer_t* Buffer); /**< Port application handler */\r
-               } TCP_PortState_t;\r
-\r
-               /** Type define for a TCP packet header */\r
-               typedef struct\r
-               {\r
-                       uint16_t               SourcePort; /**< Source port of the TCP packet */\r
-                       uint16_t               DestinationPort; /**< Destination port of the TCP packet */\r
-                       \r
-                       uint32_t               SequenceNumber; /**< Data sequence number of the packet */\r
-                       uint32_t               AcknowledgmentNumber; /**< Data acknowledgment number of the packet */\r
-                       \r
-                       unsigned char          Reserved : 4; /**< Reserved, must be all 0 */\r
-                       unsigned char          DataOffset : 4; /**< Offset of the data from the start of the header, in 4 byte chunks */\r
-                       uint8_t                Flags; /**< TCP packet flags */\r
-                       uint16_t               WindowSize; /**< Current data window size (bytes remaining in reception buffer) */\r
-                       \r
-                       uint16_t               Checksum; /**< TCP checksum */\r
-                       uint16_t               UrgentPointer; /**< Urgent data pointer */\r
-               } TCP_Header_t;\r
-               \r
-       /* External Variables: */\r
-               TCP_PortState_t PortStateTable[MAX_OPEN_TCP_PORTS];\r
-\r
-       /* Function Prototypes: */\r
-               void                  TCP_TCPTask(USB_ClassInfo_RNDIS_t* RNDISInterfaceInfo);\r
-               void                  TCP_Init(void);\r
-               bool                  TCP_SetPortState(uint16_t Port, uint8_t State, void (*Handler)(TCP_ConnectionState_t*, TCP_ConnectionBuffer_t*));\r
-               uint8_t               TCP_GetPortState(uint16_t Port);\r
-               bool                  TCP_SetConnectionState(uint16_t Port, IP_Address_t RemoteAddress, uint16_t RemotePort, uint8_t State);\r
-               uint8_t               TCP_GetConnectionState(uint16_t Port, IP_Address_t RemoteAddress, uint16_t RemotePort);\r
-               TCP_ConnectionInfo_t* TCP_GetConnectionInfo(uint16_t Port, IP_Address_t RemoteAddress, uint16_t RemotePort);\r
-               int16_t               TCP_ProcessTCPPacket(void* IPHeaderInStart, void* TCPHeaderInStart, void* TCPHeaderOutStart);\r
-\r
-               #if defined(INCLUDE_FROM_TCP_C)\r
-                       static uint16_t TCP_Checksum16(void* TCPHeaderOutStart, IP_Address_t SourceAddress,\r
-                                                                                  IP_Address_t DestinationAddress, uint16_t TCPOutSize);\r
-               #endif\r
-\r
-#endif\r
diff --git a/Demos/Device/RNDISEthernet/Lib/UDP.c b/Demos/Device/RNDISEthernet/Lib/UDP.c
deleted file mode 100644 (file)
index 1f571c3..0000000
+++ /dev/null
@@ -1,80 +0,0 @@
-/*\r
-             LUFA Library\r
-     Copyright (C) Dean Camera, 2009.\r
-              \r
-  dean [at] fourwalledcubicle [dot] com\r
-      www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
-  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
-  Permission to use, copy, modify, and distribute this software\r
-  and its documentation for any purpose and without fee is hereby\r
-  granted, provided that the above copyright notice appear in all\r
-  copies and that both that the copyright notice and this\r
-  permission notice and warranty disclaimer appear in supporting\r
-  documentation, and that the name of the author not be used in\r
-  advertising or publicity pertaining to distribution of the\r
-  software without specific, written prior permission.\r
-\r
-  The author disclaim all warranties with regard to this\r
-  software, including all implied warranties of merchantability\r
-  and fitness.  In no event shall the author be liable for any\r
-  special, indirect or consequential damages or any damages\r
-  whatsoever resulting from loss of use, data or profits, whether\r
-  in an action of contract, negligence or other tortious action,\r
-  arising out of or in connection with the use or performance of\r
-  this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- *  User Datagram Protocol (UDP) packet handling routines. This protocol handles high throughput, low\r
- *  reliability packets which are typically used to encapsulate streaming data.\r
- */\r
\r
-#define  INCLUDE_FROM_UDP_C\r
-#include "UDP.h"\r
-\r
-/** Processes a UDP packet inside an Ethernet frame, and writes the appropriate response\r
- *  to the output Ethernet frame if a subprotocol handler has created a response packet.\r
- *\r
- *  \param IPHeaderInStart    Pointer to the start of the incoming packet's IP header\r
- *  \param UDPHeaderInStart   Pointer to the start of the incoming packet's UDP header\r
- *  \param UDPHeaderOutStart  Pointer to the start of the outgoing packet's UDP header\r
- *\r
- *  \return The number of bytes written to the out Ethernet frame if any, NO_RESPONSE otherwise\r
- */\r
-int16_t UDP_ProcessUDPPacket(void* IPHeaderInStart, void* UDPHeaderInStart, void* UDPHeaderOutStart)\r
-{\r
-       UDP_Header_t* UDPHeaderIN  = (UDP_Header_t*)UDPHeaderInStart;\r
-       UDP_Header_t* UDPHeaderOUT = (UDP_Header_t*)UDPHeaderOutStart;\r
-       \r
-       int16_t RetSize = NO_RESPONSE;\r
-       \r
-       DecodeUDPHeader(UDPHeaderInStart);\r
-       \r
-       /* Check to see if the UDP packet is a DHCP packet */\r
-       if (SwapEndian_16(UDPHeaderIN->DestinationPort) == UDP_PORT_DHCP_REQUEST)\r
-       {\r
-               RetSize = DHCP_ProcessDHCPPacket(IPHeaderInStart,\r
-                                                &((uint8_t*)UDPHeaderInStart)[sizeof(UDP_Header_t)],\r
-                                            &((uint8_t*)UDPHeaderOutStart)[sizeof(UDP_Header_t)]);\r
-       }\r
-       \r
-       /* Check to see if the protocol processing routine has filled out a response */\r
-       if (RetSize > 0)\r
-       {\r
-               /* Fill out the response UDP packet header */\r
-               UDPHeaderOUT->SourcePort      = UDPHeaderIN->DestinationPort;\r
-               UDPHeaderOUT->DestinationPort = UDPHeaderIN->SourcePort;\r
-               UDPHeaderOUT->Checksum        = 0;\r
-               UDPHeaderOUT->Length          = SwapEndian_16(sizeof(UDP_Header_t) + RetSize);\r
-\r
-               /* Return the size of the response so far */\r
-               return (sizeof(UDP_Header_t) + RetSize);\r
-       }\r
-       \r
-       return NO_RESPONSE;\r
-}\r
diff --git a/Demos/Device/RNDISEthernet/Lib/UDP.h b/Demos/Device/RNDISEthernet/Lib/UDP.h
deleted file mode 100644 (file)
index 60bbe21..0000000
+++ /dev/null
@@ -1,66 +0,0 @@
-/*\r
-             LUFA Library\r
-     Copyright (C) Dean Camera, 2009.\r
-              \r
-  dean [at] fourwalledcubicle [dot] com\r
-      www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
-  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
-  Permission to use, copy, modify, and distribute this software\r
-  and its documentation for any purpose and without fee is hereby\r
-  granted, provided that the above copyright notice appear in all\r
-  copies and that both that the copyright notice and this\r
-  permission notice and warranty disclaimer appear in supporting\r
-  documentation, and that the name of the author not be used in\r
-  advertising or publicity pertaining to distribution of the\r
-  software without specific, written prior permission.\r
-\r
-  The author disclaim all warranties with regard to this\r
-  software, including all implied warranties of merchantability\r
-  and fitness.  In no event shall the author be liable for any\r
-  special, indirect or consequential damages or any damages\r
-  whatsoever resulting from loss of use, data or profits, whether\r
-  in an action of contract, negligence or other tortious action,\r
-  arising out of or in connection with the use or performance of\r
-  this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- *  Header file for IP.c.\r
- */\r
-\r
-#ifndef _UDP_H_\r
-#define _UDP_H_\r
-\r
-       /* Includes: */\r
-               #include <avr/io.h>\r
-       \r
-               #include "EthernetProtocols.h"\r
-               #include "Ethernet.h"\r
-               #include "ProtocolDecoders.h"\r
-       \r
-       /* Macros: */\r
-               /** Source UDP port for a DHCP request */\r
-               #define UDP_PORT_DHCP_REQUEST 67\r
-\r
-               /** Destination UDP port for a DHCP reply */\r
-               #define UDP_PORT_DHCP_REPLY   68\r
-                       \r
-       /* Type Defines: */\r
-               /** Type define for a UDP packet header */\r
-               typedef struct\r
-               {\r
-                       uint16_t SourcePort; /**< Packet source port */\r
-                       uint16_t DestinationPort; /**< Packet destination port */\r
-                       uint16_t Length; /**< Total packet length, in bytes */\r
-                       uint16_t Checksum; /**< Optional UDP packet checksum */\r
-               } UDP_Header_t;\r
-               \r
-       /* Function Prototypes: */\r
-               int16_t UDP_ProcessUDPPacket(void* IPHeaderInStart, void* UDPHeaderInStart, void* UDPHeaderOutStart);\r
-\r
-#endif\r
diff --git a/Demos/Device/RNDISEthernet/Lib/Webserver.c b/Demos/Device/RNDISEthernet/Lib/Webserver.c
deleted file mode 100644 (file)
index c07f2c8..0000000
+++ /dev/null
@@ -1,162 +0,0 @@
-/*\r
-             LUFA Library\r
-     Copyright (C) Dean Camera, 2009.\r
-              \r
-  dean [at] fourwalledcubicle [dot] com\r
-      www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
-  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
-  Permission to use, copy, modify, and distribute this software\r
-  and its documentation for any purpose and without fee is hereby\r
-  granted, provided that the above copyright notice appear in all\r
-  copies and that both that the copyright notice and this\r
-  permission notice and warranty disclaimer appear in supporting\r
-  documentation, and that the name of the author not be used in\r
-  advertising or publicity pertaining to distribution of the\r
-  software without specific, written prior permission.\r
-\r
-  The author disclaim all warranties with regard to this\r
-  software, including all implied warranties of merchantability\r
-  and fitness.  In no event shall the author be liable for any\r
-  special, indirect or consequential damages or any damages\r
-  whatsoever resulting from loss of use, data or profits, whether\r
-  in an action of contract, negligence or other tortious action,\r
-  arising out of or in connection with the use or performance of\r
-  this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- *  Simple webserver application for demonstrating the RNDIS demo and TCP/IP stack. This\r
- *  application will serve up a static HTTP webpage when requested by the host.\r
- */\r
-\r
-#include "Webserver.h"\r
-\r
-/** HTTP server response header, for transmission before the page contents. This indicates to the host that a page exists at the\r
- *  given location, and gives extra connection information.\r
- */\r
-char PROGMEM HTTPHeader[] = "HTTP/1.1 200 OK\r\n"\r
-                            "Server: LUFA RNDIS\r\n"\r
-                            "Content-type: text/html\r\n"\r
-                            "Connection: close\r\n\r\n";\r
-\r
-/** HTTP page to serve to the host when a HTTP request is made. This page is too long for a single response, thus it is automatically\r
- *  broken up into smaller blocks and sent as a series of packets each time the webserver application callback is run.\r
- */\r
-char PROGMEM HTTPPage[]   = \r
-               "<html>"\r
-               "       <head>"\r
-               "               <title>"\r
-               "                       LUFA Webserver Demo"\r
-               "               </title>"\r
-               "       </head>"\r
-               "       <body>"\r
-               "               <h1>Hello from your USB AVR!</h1>"\r
-               "               <p>"\r
-               "                       Hello! Welcome to the LUFA RNDIS Demo Webserver test page, running on your USB AVR via the LUFA library. This demonstrates the HTTP webserver, TCP/IP stack and RNDIS demo all running atop the LUFA USB stack."\r
-               "                       <br /><br />"\r
-               "                       <small>Project Information: <a href=\"http://www.fourwalledcubicle.com/LUFA.php\">http://www.fourwalledcubicle.com/LUFA.php</a>.</small>"\r
-               "                       <hr />"\r
-               "                       <i>LUFA Version: </i>" LUFA_VERSION_STRING\r
-               "               </p>"\r
-               "       </body>"\r
-               "</html>";\r
-\r
-\r
-/** Initializes the Webserver application, opening the appropriate HTTP port in the TCP handler and registering the application\r
- *  callback routine for packets sent to the HTTP protocol port.\r
- */\r
-void Webserver_Init(void)\r
-{\r
-       /* Open the HTTP port in the TCP protocol so that HTTP connections to the device can be established */\r
-       TCP_SetPortState(TCP_PORT_HTTP, TCP_Port_Open, Webserver_ApplicationCallback);\r
-}\r
-\r
-/** Indicates if a given request equals the given HTTP command.\r
- *\r
- *  \param RequestHeader  HTTP request made by the host\r
- *  \param Command        HTTP command to compare the request to\r
- *\r
- *  \return Boolean true if the command matches the request, false otherwise\r
- */\r
-static bool IsHTTPCommand(uint8_t* RequestHeader, char* Command)\r
-{\r
-       /* Returns true if the non null terminated string in RequestHeader matches the null terminated string Command */\r
-       return (strncmp((char*)RequestHeader, Command, strlen(Command)) == 0);\r
-}\r
-\r
-/** Application callback routine, executed each time the TCP processing task runs. This callback determines what request\r
- *  has been made (if any), and serves up appropriate responses.\r
- *\r
- *  \param ConnectionState  Pointer to a TCP Connection State structure giving connection information\r
- *  \param Buffer           Pointer to the application's send/receive packet buffer\r
- */\r
-void Webserver_ApplicationCallback(TCP_ConnectionState_t* ConnectionState, TCP_ConnectionBuffer_t* Buffer)\r
-{\r
-       char*          BufferDataStr = (char*)Buffer->Data;\r
-       static uint8_t PageBlock     = 0;\r
-       \r
-       /* Check to see if a packet has been received on the HTTP port from a remote host */\r
-       if (TCP_APP_HAS_RECEIVED_PACKET(Buffer))\r
-       {\r
-               if (IsHTTPCommand(Buffer->Data, "GET"))\r
-               {\r
-                       PageBlock = 0;\r
-\r
-                       /* Copy the HTTP response header into the packet buffer */\r
-                       strcpy_P(BufferDataStr, HTTPHeader);\r
-                       \r
-                       /* Send the buffer contents to the host */\r
-                       TCP_APP_SEND_BUFFER(Buffer, strlen(BufferDataStr));\r
-\r
-                       /* Lock the buffer to Device->Host transmissions only while we send the page contents */\r
-                       TCP_APP_CAPTURE_BUFFER(Buffer);\r
-               }\r
-               else if (IsHTTPCommand(Buffer->Data, "HEAD"))\r
-               {\r
-                       /* Copy the HTTP response header into the packet buffer */\r
-                       strcpy_P(BufferDataStr, HTTPHeader);\r
-\r
-                       /* Send the buffer contents to the host */\r
-                       TCP_APP_SEND_BUFFER(Buffer, strlen(BufferDataStr));\r
-               }\r
-               else if (IsHTTPCommand(Buffer->Data, "TRACE"))\r
-               {\r
-                       /* Echo the host's query back to the host */\r
-                       TCP_APP_SEND_BUFFER(Buffer, Buffer->Length);\r
-               }\r
-               else\r
-               {\r
-                       /* Unknown request, just clear the buffer (drop the packet) */\r
-                       TCP_APP_CLEAR_BUFFER(Buffer);\r
-               }\r
-       }\r
-       else if (TCP_APP_HAVE_CAPTURED_BUFFER(Buffer))\r
-       {\r
-               uint16_t RemLength = strlen_P(&HTTPPage[PageBlock * HTTP_REPLY_BLOCK_SIZE]);\r
-               uint16_t Length;\r
-       \r
-               /* Determine the length of the loaded block */\r
-               Length = ((RemLength > HTTP_REPLY_BLOCK_SIZE) ? HTTP_REPLY_BLOCK_SIZE : RemLength);\r
-\r
-               /* Copy the next buffer sized block of the page to the packet buffer */\r
-               strncpy_P(BufferDataStr, &HTTPPage[PageBlock * HTTP_REPLY_BLOCK_SIZE], Length);\r
-               \r
-               /* Send the buffer contents to the host */\r
-               TCP_APP_SEND_BUFFER(Buffer, Length);\r
-\r
-               /* Check to see if the entire page has been sent */\r
-               if (PageBlock++ == (sizeof(HTTPPage) / HTTP_REPLY_BLOCK_SIZE))\r
-               {\r
-                       /* Unlock the buffer so that the host can fill it with future packets */\r
-                       TCP_APP_RELEASE_BUFFER(Buffer);\r
-                       \r
-                       /* Close the connection to the host */\r
-                       TCP_APP_CLOSECONNECTION(ConnectionState);\r
-               }\r
-       }\r
-}\r
diff --git a/Demos/Device/RNDISEthernet/Lib/Webserver.h b/Demos/Device/RNDISEthernet/Lib/Webserver.h
deleted file mode 100644 (file)
index b2193ad..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-/*\r
-             LUFA Library\r
-     Copyright (C) Dean Camera, 2009.\r
-              \r
-  dean [at] fourwalledcubicle [dot] com\r
-      www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
-  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
-  Permission to use, copy, modify, and distribute this software\r
-  and its documentation for any purpose and without fee is hereby\r
-  granted, provided that the above copyright notice appear in all\r
-  copies and that both that the copyright notice and this\r
-  permission notice and warranty disclaimer appear in supporting\r
-  documentation, and that the name of the author not be used in\r
-  advertising or publicity pertaining to distribution of the\r
-  software without specific, written prior permission.\r
-\r
-  The author disclaim all warranties with regard to this\r
-  software, including all implied warranties of merchantability\r
-  and fitness.  In no event shall the author be liable for any\r
-  special, indirect or consequential damages or any damages\r
-  whatsoever resulting from loss of use, data or profits, whether\r
-  in an action of contract, negligence or other tortious action,\r
-  arising out of or in connection with the use or performance of\r
-  this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- *  Header file for Webserver.c.\r
- */\r
\r
-#ifndef _WEBSERVER_H_\r
-#define _WEBSERVER_H_\r
-\r
-       /* Includes: */\r
-               #include <avr/io.h>\r
-               #include <avr/pgmspace.h>\r
-               \r
-               #include <LUFA/Version.h>\r
-               \r
-               #include "TCP.h"\r
-       \r
-       /* Macros: */\r
-               /** Maximum size of a HTTP response per transmission */\r
-               #define  HTTP_REPLY_BLOCK_SIZE     128\r
-       \r
-       /* Function Prototypes: */\r
-               void Webserver_Init(void);\r
-               void Webserver_ApplicationCallback(TCP_ConnectionState_t* ConnectionState, TCP_ConnectionBuffer_t* Buffer);\r
-\r
-#endif\r
diff --git a/Demos/Device/RNDISEthernet/RNDISEthernet.aps b/Demos/Device/RNDISEthernet/RNDISEthernet.aps
deleted file mode 100644 (file)
index b5d21c1..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<AVRStudio><MANAGEMENT><ProjectName>RNDISEthernet</ProjectName><Created>30-Sep-2008 14:17:05</Created><LastEdit>22-Jan-2009 17:52:35</LastEdit><ICON>241</ICON><ProjectType>0</ProjectType><Created>30-Sep-2008 14:17:05</Created><Version>4</Version><Build>4, 14, 0, 589</Build><ProjectTypeName>AVR GCC</ProjectTypeName></MANAGEMENT><CODE_CREATION><ObjectFile></ObjectFile><EntryFile></EntryFile><SaveFolder>C:\Users\Dean\Documents\Electronics\Projects\WORK\LUFAWORK\Demos\RNDISEthernet\</SaveFolder></CODE_CREATION><DEBUG_TARGET><CURRENT_TARGET>JTAGICE mkII</CURRENT_TARGET><CURRENT_PART>AT90USB1287.xml</CURRENT_PART><BREAKPOINTS></BREAKPOINTS><IO_EXPAND><HIDE>false</HIDE></IO_EXPAND><REGISTERNAMES><Register>R00</Register><Register>R01</Register><Register>R02</Register><Register>R03</Register><Register>R04</Register><Register>R05</Register><Register>R06</Register><Register>R07</Register><Register>R08</Register><Register>R09</Register><Register>R10</Register><Register>R11</Register><Register>R12</Register><Register>R13</Register><Register>R14</Register><Register>R15</Register><Register>R16</Register><Register>R17</Register><Register>R18</Register><Register>R19</Register><Register>R20</Register><Register>R21</Register><Register>R22</Register><Register>R23</Register><Register>R24</Register><Register>R25</Register><Register>R26</Register><Register>R27</Register><Register>R28</Register><Register>R29</Register><Register>R30</Register><Register>R31</Register></REGISTERNAMES><COM>Auto</COM><COMType>0</COMType><WATCHNUM>0</WATCHNUM><WATCHNAMES><Pane0></Pane0><Pane1></Pane1><Pane2></Pane2><Pane3></Pane3></WATCHNAMES><BreakOnTrcaeFull>0</BreakOnTrcaeFull></DEBUG_TARGET><Debugger><Triggers></Triggers></Debugger><AVRGCCPLUGIN><FILES><SOURCEFILE>ARP.c</SOURCEFILE><SOURCEFILE>Descriptors.c</SOURCEFILE><SOURCEFILE>Ethernet.c</SOURCEFILE><SOURCEFILE>ICMP.c</SOURCEFILE><SOURCEFILE>IP.c</SOURCEFILE><SOURCEFILE>ProtocolDecoders.c</SOURCEFILE><SOURCEFILE>RNDIS.c</SOURCEFILE><SOURCEFILE>RNDISEthernet.c</SOURCEFILE><SOURCEFILE>TCP.c</SOURCEFILE><SOURCEFILE>Webserver.c</SOURCEFILE><HEADERFILE>ARP.h</HEADERFILE><HEADERFILE>Descriptors.h</HEADERFILE><HEADERFILE>Ethernet.h</HEADERFILE><HEADERFILE>EthernetProtocols.h</HEADERFILE><HEADERFILE>ICMP.h</HEADERFILE><HEADERFILE>IP.h</HEADERFILE><HEADERFILE>ProtocolDecoders.h</HEADERFILE><HEADERFILE>RNDIS.h</HEADERFILE><HEADERFILE>RNDISEthernet.h</HEADERFILE><HEADERFILE>TCP.h</HEADERFILE><HEADERFILE>Webserver.h</HEADERFILE><OTHERFILE>makefile</OTHERFILE></FILES><CONFIGS><CONFIG><NAME>default</NAME><USESEXTERNALMAKEFILE>YES</USESEXTERNALMAKEFILE><EXTERNALMAKEFILE>makefile</EXTERNALMAKEFILE><PART>at90usb1287</PART><HEX>1</HEX><LIST>1</LIST><MAP>1</MAP><OUTPUTFILENAME>RNDISEthernet.elf</OUTPUTFILENAME><OUTPUTDIR>default\</OUTPUTDIR><ISDIRTY>1</ISDIRTY><OPTIONS/><INCDIRS/><LIBDIRS/><LIBS/><LINKOBJECTS/><OPTIONSFORALL>-Wall -gdwarf-2 -std=gnu99 -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums</OPTIONSFORALL><LINKEROPTIONS></LINKEROPTIONS><SEGMENTS/></CONFIG></CONFIGS><LASTCONFIG>default</LASTCONFIG><USES_WINAVR>1</USES_WINAVR><GCC_LOC>C:\WinAVR-20081205\bin\avr-gcc.exe</GCC_LOC><MAKE_LOC>C:\WinAVR-20081205\utils\bin\make.exe</MAKE_LOC></AVRGCCPLUGIN><ProjectFiles><Files><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\LUFAWORK\Demos\RNDISEthernet\ARP.h</Name><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\LUFAWORK\Demos\RNDISEthernet\Descriptors.h</Name><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\LUFAWORK\Demos\RNDISEthernet\Ethernet.h</Name><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\LUFAWORK\Demos\RNDISEthernet\EthernetProtocols.h</Name><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\LUFAWORK\Demos\RNDISEthernet\ICMP.h</Name><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\LUFAWORK\Demos\RNDISEthernet\IP.h</Name><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\LUFAWORK\Demos\RNDISEthernet\ProtocolDecoders.h</Name><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\LUFAWORK\Demos\RNDISEthernet\RNDIS.h</Name><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\LUFAWORK\Demos\RNDISEthernet\RNDISEthernet.h</Name><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\LUFAWORK\Demos\RNDISEthernet\TCP.h</Name><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\LUFAWORK\Demos\RNDISEthernet\Telnet.h</Name><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\LUFAWORK\Demos\RNDISEthernet\Webserver.h</Name><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\LUFAWORK\Demos\RNDISEthernet\ARP.c</Name><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\LUFAWORK\Demos\RNDISEthernet\Descriptors.c</Name><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\LUFAWORK\Demos\RNDISEthernet\Ethernet.c</Name><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\LUFAWORK\Demos\RNDISEthernet\ICMP.c</Name><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\LUFAWORK\Demos\RNDISEthernet\IP.c</Name><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\LUFAWORK\Demos\RNDISEthernet\ProtocolDecoders.c</Name><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\LUFAWORK\Demos\RNDISEthernet\RNDIS.c</Name><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\LUFAWORK\Demos\RNDISEthernet\RNDISEthernet.c</Name><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\LUFAWORK\Demos\RNDISEthernet\TCP.c</Name><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\LUFAWORK\Demos\RNDISEthernet\Telnet.c</Name><Name>C:\Users\Dean\Documents\Electronics\Projects\WORK\LUFAWORK\Demos\RNDISEthernet\Webserver.c</Name></Files></ProjectFiles><IOView><usergroups/><sort sorted="0" column="0" ordername="1" orderaddress="1" ordergroup="1"/></IOView><Files></Files><Events><Bookmarks></Bookmarks></Events><Trace><Filters></Filters></Trace></AVRStudio>\r
diff --git a/Demos/Device/RNDISEthernet/RNDISEthernet.c b/Demos/Device/RNDISEthernet/RNDISEthernet.c
deleted file mode 100644 (file)
index 7c85719..0000000
+++ /dev/null
@@ -1,131 +0,0 @@
-/*\r
-             LUFA Library\r
-     Copyright (C) Dean Camera, 2009.\r
-              \r
-  dean [at] fourwalledcubicle [dot] com\r
-      www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
-  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
-  Permission to use, copy, modify, and distribute this software\r
-  and its documentation for any purpose and without fee is hereby\r
-  granted, provided that the above copyright notice appear in all\r
-  copies and that both that the copyright notice and this\r
-  permission notice and warranty disclaimer appear in supporting\r
-  documentation, and that the name of the author not be used in\r
-  advertising or publicity pertaining to distribution of the\r
-  software without specific, written prior permission.\r
-\r
-  The author disclaim all warranties with regard to this\r
-  software, including all implied warranties of merchantability\r
-  and fitness.  In no event shall the author be liable for any\r
-  special, indirect or consequential damages or any damages\r
-  whatsoever resulting from loss of use, data or profits, whether\r
-  in an action of contract, negligence or other tortious action,\r
-  arising out of or in connection with the use or performance of\r
-  this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- *  Main source file for the RNDISEthernet demo. This file contains the main tasks of\r
- *  the demo and is responsible for the initial application hardware configuration.\r
- */\r
-\r
-#include "RNDISEthernet.h"\r
-\r
-/** LUFA RNDIS Class driver interface configuration and state information. This structure is\r
- *  passed to all RNDIS Class driver functions, so that multiple instances of the same class\r
- *  within a device can be differentiated from one another.\r
- */\r
-USB_ClassInfo_RNDIS_t Ethernet_RNDIS_Interface =\r
-       {\r
-               .ControlInterfaceNumber     = 0,\r
-\r
-               .DataINEndpointNumber       = CDC_TX_EPNUM,\r
-               .DataINEndpointSize         = CDC_TXRX_EPSIZE,\r
-\r
-               .DataOUTEndpointNumber      = CDC_RX_EPNUM,\r
-               .DataOUTEndpointSize        = CDC_TXRX_EPSIZE,\r
-\r
-               .NotificationEndpointNumber = CDC_NOTIFICATION_EPNUM,\r
-               .NotificationEndpointSize   = CDC_NOTIFICATION_EPSIZE,\r
-               \r
-               .AdapterVendorDescription   = "LUFA RNDIS Demo Adapter",\r
-               .AdapterMACAddress          = {ADAPTER_MAC_ADDRESS},\r
-       };\r
-\r
-/** Main program entry point. This routine contains the overall program flow, including initial\r
- *  setup of all components and the main program loop.\r
- */\r
-int main(void)\r
-{\r
-       SetupHardware();\r
-\r
-       LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);\r
-       \r
-       TCP_Init();\r
-       Webserver_Init();\r
-\r
-       printf_P(PSTR("\r\n\r\n****** RNDIS Demo running. ******\r\n"));\r
-\r
-       for (;;)\r
-       {\r
-               if (Ethernet_RNDIS_Interface.FrameIN.FrameInBuffer)\r
-               {\r
-                       LEDs_SetAllLEDs(LEDMASK_USB_BUSY);\r
-                       Ethernet_ProcessPacket(&Ethernet_RNDIS_Interface.FrameIN, &Ethernet_RNDIS_Interface.FrameOUT);\r
-                       LEDs_SetAllLEDs(LEDMASK_USB_READY);\r
-               }\r
-\r
-               TCP_TCPTask(&Ethernet_RNDIS_Interface);\r
-\r
-               USB_RNDIS_USBTask(&Ethernet_RNDIS_Interface);\r
-               USB_USBTask();\r
-       }\r
-}\r
-\r
-/** Configures the board hardware and chip peripherals for the demo's functionality. */\r
-void SetupHardware(void)\r
-{\r
-       /* Disable watchdog if enabled by bootloader/fuses */\r
-       MCUSR &= ~(1 << WDRF);\r
-       wdt_disable();\r
-\r
-       /* Disable clock division */\r
-       clock_prescale_set(clock_div_1);\r
-\r
-       /* Hardware Initialization */\r
-       LEDs_Init();\r
-       SerialStream_Init(9600, false);\r
-       USB_Init();\r
-}\r
-\r
-/** Event handler for the library USB Connection event. */\r
-void EVENT_USB_Connect(void)\r
-{\r
-    LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING);\r
-}\r
-\r
-/** Event handler for the library USB Disconnection event. */\r
-void EVENT_USB_Disconnect(void)\r
-{\r
-    LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);\r
-}\r
-\r
-/** Event handler for the library USB Configuration Changed event. */\r
-void EVENT_USB_ConfigurationChanged(void)\r
-{\r
-       LEDs_SetAllLEDs(LEDMASK_USB_READY);\r
-\r
-       if (!(USB_RNDIS_ConfigureEndpoints(&Ethernet_RNDIS_Interface)))\r
-         LEDs_SetAllLEDs(LEDMASK_USB_ERROR);\r
-}\r
-\r
-/** Event handler for the library USB Unhandled Control Packet event. */\r
-void EVENT_USB_UnhandledControlPacket(void)\r
-{\r
-       USB_RNDIS_ProcessControlPacket(&Ethernet_RNDIS_Interface);\r
-}\r
diff --git a/Demos/Device/RNDISEthernet/RNDISEthernet.h b/Demos/Device/RNDISEthernet/RNDISEthernet.h
deleted file mode 100644 (file)
index f0ba75a..0000000
+++ /dev/null
@@ -1,86 +0,0 @@
-/*\r
-             LUFA Library\r
-     Copyright (C) Dean Camera, 2009.\r
-              \r
-  dean [at] fourwalledcubicle [dot] com\r
-      www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
-  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
-  Permission to use, copy, modify, and distribute this software\r
-  and its documentation for any purpose and without fee is hereby\r
-  granted, provided that the above copyright notice appear in all\r
-  copies and that both that the copyright notice and this\r
-  permission notice and warranty disclaimer appear in supporting\r
-  documentation, and that the name of the author not be used in\r
-  advertising or publicity pertaining to distribution of the\r
-  software without specific, written prior permission.\r
-\r
-  The author disclaim all warranties with regard to this\r
-  software, including all implied warranties of merchantability\r
-  and fitness.  In no event shall the author be liable for any\r
-  special, indirect or consequential damages or any damages\r
-  whatsoever resulting from loss of use, data or profits, whether\r
-  in an action of contract, negligence or other tortious action,\r
-  arising out of or in connection with the use or performance of\r
-  this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- *  Header file for RNDISEthernet.c.\r
- */\r
\r
-#ifndef _RNDISETHERNET_H_\r
-#define _RNDISETHERNET_H_\r
-\r
-       /* Includes: */\r
-               #include <avr/io.h>\r
-               #include <avr/wdt.h>\r
-               #include <avr/pgmspace.h>\r
-               #include <avr/power.h>\r
-               #include <string.h>\r
-               #include <stdio.h>\r
-\r
-               #include "Descriptors.h"\r
-
-               #include "Lib/Ethernet.h"\r
-               #include "Lib/TCP.h"\r
-               #include "Lib/ARP.h"\r
-               #include "Lib/Webserver.h"\r
-\r
-               #include <LUFA/Version.h>\r
-               #include <LUFA/Drivers/Board/LEDs.h>\r
-               #include <LUFA/Drivers/Board/Joystick.h>\r
-               #include <LUFA/Drivers/USB/USB.h>\r
-               #include <LUFA/Drivers/USB/Class/Device/RNDIS.h>\r
-\r
-       /* Macros: */\r
-               /** LED mask for the library LED driver, to indicate that the USB interface is not ready. */\r
-               #define LEDMASK_USB_NOTREADY      LEDS_LED1\r
-\r
-               /** LED mask for the library LED driver, to indicate that the USB interface is enumerating. */\r
-               #define LEDMASK_USB_ENUMERATING  (LEDS_LED2 | LEDS_LED3)\r
-\r
-               /** LED mask for the library LED driver, to indicate that the USB interface is ready. */\r
-               #define LEDMASK_USB_READY        (LEDS_LED2 | LEDS_LED4)\r
-\r
-               /** LED mask for the library LED driver, to indicate that an error has occurred in the USB interface. */\r
-               #define LEDMASK_USB_ERROR        (LEDS_LED1 | LEDS_LED3)\r
-\r
-               /** LED mask for the library LED driver, to indicate that the USB interface is busy. */\r
-               #define LEDMASK_USB_BUSY         (LEDS_LED2)\r
-               \r
-       /* Function Prototypes: */\r
-               void SetupHardware(void);\r
-\r
-               void EVENT_USB_Connect(void);\r
-               void EVENT_USB_Disconnect(void);\r
-               void EVENT_USB_ConfigurationChanged(void);\r
-               void EVENT_USB_UnhandledControlPacket(void);\r
-               \r
-               void CALLBACK_USB_RNDIS_ProcessRNDISControlMessage(USB_ClassInfo_RNDIS_t* RNDISInterfaceInfo);\r
-       \r
-#endif\r
diff --git a/Demos/Device/RNDISEthernet/RNDISEthernet.txt b/Demos/Device/RNDISEthernet/RNDISEthernet.txt
deleted file mode 100644 (file)
index 306cf85..0000000
+++ /dev/null
@@ -1,115 +0,0 @@
-/** \file\r
- *\r
- *  This file contains special DoxyGen information for the generation of the main page and other special\r
- *  documentation pages. It is not a project source file.\r
- */\r
\r
-/** \mainpage RNDIS Class Ethernet Demo (with Webserver/Telnet)\r
- *\r
- *  \section SSec_Info USB Information:\r
- *\r
- *  The following table gives a rundown of the USB utilization of this demo.\r
- *\r
- *  Remote Network Driver Interface demonstration application.\r
- *  This gives a simple reference application for implementing\r
- *  a CDC RNDIS device acting as a simple network interface for\r
- *  ethernet packet exchange. RNDIS is a proprietary Microsoft\r
- *  standard; this demo will only work on Windows 2000 (manually\r
- *  patched with the Microsoft RNDIS hotfix) and above (with no\r
- *  manual patches), or on the latest Linux kernels.\r
- *  \r
- *  Before running, you will need to install the INF file that\r
- *  is located in the RNDISEthernet project directory. This will\r
- *  enable Windows to use its inbuilt RNDIS drivers, negating the\r
- *  need for special Windows drivers for the device. To install,\r
- *  right-click the .INF file and choose the Install option. If\r
- *  Windows 2000 is used, the Microsoft INF file in the hotfix\r
- *  will need to be altered to use the VID/PID of the demo and\r
- *  then chosen instead of the LUFA RNDIS INF file when prompted.\r
- *  \r
- *  When enumerated, this demo will install as a new network\r
- *  adapter which ethernet packets can be sent to and received\r
- *  from. Running on top of the adapter is a very simple TCP/IP\r
- *  stack with a HTTP webserver and TELNET host which can be\r
- *  accessed through a web browser at IP address 10.0.0.2:80 or\r
- *  through a TELNET client at 10.0.0.2:25. This device also supports\r
- *  ping echos via the ICMP protocol.\r
- *  \r
- *  \note The TCP/IP stack in this demo has a number of limitations\r
- *  and should serve as an example only - it is not fully featured nor\r
- *  compliant to the TCP/IP specification. For complete projects, it is \r
- *  recommended that it be replaced with an external open source TCP/IP\r
- *  stack that is feature complete, such as the uIP stack.\r
- *\r
- *  \section SSec_Description Project Description: \r
- *\r
- *  <table>\r
- *   <tr>\r
- *    <td><b>USB Mode:</b></td>\r
- *    <td>Device</td>\r
- *   </tr>\r
- *   <tr>\r
- *    <td><b>USB Class:</b></td>\r
- *    <td>Communications Device Class (CDC)</td>\r
- *   </tr>\r
- *   <tr> \r
- *    <td><b>USB Subclass:</b></td>\r
- *    <td>Remote NDIS (Microsoft Proprietary CDC Class Networking Standard)</td>\r
- *   </tr>\r
- *   <tr>\r
- *    <td><b>Relevant Standards:</b></td>\r
- *    <td>Microsoft RNDIS Specification</td>\r
- *   </tr>\r
- *   <tr>\r
- *    <td><b>Usable Speeds:</b></td>\r
- *    <td>Full Speed Mode</td>\r
- *   </tr>\r
- *  </table>\r
- *\r
- *  \section SSec_Options Project Options\r
- *\r
- *  The following defines can be found in this demo, which can control the demo behaviour when defined, or changed in value.\r
- *\r
- *  <table>\r
- *   <tr>\r
- *    <td><b>Define Name:</b></td>\r
- *    <td><b>Location:</b></td>\r
- *    <td><b>Description:</b></td>\r
- *   </tr>\r
- *   <tr>\r
- *    <td>NO_DECODE_ETHERNET</td>\r
- *    <td>Makefile CDEFS</td>\r
- *    <td>When defined, received Ethernet headers will not be decoded and printed to the device serial port.</td>\r
- *   </tr>\r
- *   <tr>\r
- *    <td>NO_DECODE_ARP</td>\r
- *    <td>Makefile CDEFS</td>\r
- *    <td>When defined, received ARP headers will not be decoded and printed to the device serial port.</td>\r
- *   </tr>\r
- *   <tr>\r
- *    <td>NO_DECODE_IP</td>\r
- *    <td>Makefile CDEFS</td>\r
- *    <td>When defined, received IP headers will not be decoded and printed to the device serial port.</td>\r
- *   </tr>\r
- *   <tr>\r
- *    <td>NO_DECODE_ICMP</td>\r
- *    <td>Makefile CDEFS</td>\r
- *    <td>When defined, received ICMP headers will not be decoded and printed to the device serial port.</td>\r
- *   </tr>\r
- *   <tr>\r
- *    <td>NO_DECODE_TCP</td>\r
- *    <td>Makefile CDEFS</td>\r
- *    <td>When defined, received TCP headers will not be decoded and printed to the device serial port.</td>\r
- *   </tr>\r
- *   <tr>\r
- *    <td>NO_DECODE_UDP</td>\r
- *    <td>Makefile CDEFS</td>\r
- *    <td>When defined, received UDP headers will not be decoded and printed to the device serial port.</td>\r
- *   </tr>\r
- *   <tr>\r
- *    <td>NO_DECODE_DHCP</td>\r
- *    <td>Makefile CDEFS</td>\r
- *    <td>When defined, received DHCP headers will not be decoded and printed to the device serial port.</td>\r
- *   </tr>\r
- *  </table>\r
- */
\ No newline at end of file
diff --git a/Demos/Device/RNDISEthernet/makefile b/Demos/Device/RNDISEthernet/makefile
deleted file mode 100644 (file)
index 3bcc37c..0000000
+++ /dev/null
@@ -1,745 +0,0 @@
-# Hey Emacs, this is a -*- makefile -*-\r
-#----------------------------------------------------------------------------\r
-# WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al.\r
-#  >> Modified for use with the LUFA project. <<\r
-#\r
-# Released to the Public Domain\r
-#\r
-# Additional material for this makefile was written by:\r
-# Peter Fleury\r
-# Tim Henigan\r
-# Colin O'Flynn\r
-# Reiner Patommel\r
-# Markus Pfaff\r
-# Sander Pool\r
-# Frederik Rouleau\r
-# Carlos Lamas\r
-# Dean Camera\r
-# Opendous Inc.\r
-# Denver Gingerich\r
-#\r
-#----------------------------------------------------------------------------\r
-# On command line:\r
-#\r
-# make all = Make software.\r
-#\r
-# make clean = Clean out built project files.\r
-#\r
-# make coff = Convert ELF to AVR COFF.\r
-#\r
-# make extcoff = Convert ELF to AVR Extended COFF.\r
-#\r
-# make program = Download the hex file to the device, using avrdude.\r
-#                Please customize the avrdude settings below first!\r
-#\r
-# make dfu = Download the hex file to the device, using dfu-programmer (must\r
-#            have dfu-programmer installed).\r
-#\r
-# make flip = Download the hex file to the device, using Atmel FLIP (must\r
-#             have Atmel FLIP installed).\r
-#\r
-# make dfu-ee = Download the eeprom file to the device, using dfu-programmer\r
-#               (must have dfu-programmer installed).\r
-#\r
-# make flip-ee = Download the eeprom file to the device, using Atmel FLIP\r
-#                (must have Atmel FLIP installed).\r
-#\r
-# make doxygen = Generate DoxyGen documentation for the project (must have\r
-#                DoxyGen installed)\r
-#\r
-# make debug = Start either simulavr or avarice as specified for debugging, \r
-#              with avr-gdb or avr-insight as the front end for debugging.\r
-#\r
-# make filename.s = Just compile filename.c into the assembler code only.\r
-#\r
-# make filename.i = Create a preprocessed source file for use in submitting\r
-#                   bug reports to the GCC project.\r
-#\r
-# To rebuild project do "make clean" then "make all".\r
-#----------------------------------------------------------------------------\r
-\r
-\r
-# MCU name\r
-MCU = at90usb1287\r
-\r
-\r
-# Target board (see library "Board Types" documentation, USER or blank for projects not requiring\r
-# LUFA board drivers). If USER is selected, put custom board drivers in a directory called \r
-# "Board" inside the application directory.\r
-BOARD  = USBKEY\r
-\r
-\r
-# Processor frequency.\r
-#     This will define a symbol, F_CPU, in all source code files equal to the \r
-#     processor frequency. You can then use this symbol in your source code to \r
-#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done\r
-#     automatically to create a 32-bit value in your source code.\r
-#     Typical values are:\r
-#         F_CPU =  1000000\r
-#         F_CPU =  1843200\r
-#         F_CPU =  2000000\r
-#         F_CPU =  3686400\r
-#         F_CPU =  4000000\r
-#         F_CPU =  7372800\r
-#         F_CPU =  8000000\r
-#         F_CPU = 11059200\r
-#         F_CPU = 14745600\r
-#         F_CPU = 16000000\r
-#         F_CPU = 18432000\r
-#         F_CPU = 20000000\r
-F_CPU = 8000000\r
-\r
-\r
-# Input clock frequency.\r
-#     This will define a symbol, F_CLOCK, in all source code files equal to the \r
-#     input clock frequency (before any prescaling is performed). This value may\r
-#     differ from F_CPU if prescaling is used on the latter, and is required as the\r
-#     raw input clock is fed directly to the PLL sections of the AVR for high speed\r
-#     clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'\r
-#     at the end, this will be done automatically to create a 32-bit value in your\r
-#     source code.\r
-#\r
-#     If no clock division is performed on the input clock inside the AVR (via the\r
-#     CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.\r
-F_CLOCK = 8000000\r
-\r
-\r
-# Output format. (can be srec, ihex, binary)\r
-FORMAT = ihex\r
-\r
-\r
-# Target file name (without extension).\r
-TARGET = RNDISEthernet\r
-\r
-\r
-# Object files directory\r
-#     To put object files in current directory, use a dot (.), do NOT make\r
-#     this an empty or blank macro!\r
-OBJDIR = .\r
-\r
-\r
-# Path to the LUFA library\r
-LUFA_PATH = ../../..\r
-\r
-\r
-# List C source files here. (C dependencies are automatically generated.)\r
-SRC = $(TARGET).c                                                 \\r
-      Descriptors.c                                               \\r
-         Lib/Ethernet.c                                              \\r
-         Lib/ProtocolDecoders.c                                      \\r
-         Lib/ICMP.c                                                  \\r
-         Lib/TCP.c                                                   \\r
-         Lib/UDP.c                                                   \\r
-         Lib/DHCP.c                                                  \\r
-         Lib/ARP.c                                                   \\r
-         Lib/IP.c                                                    \\r
-         Lib/Webserver.c                                             \\r
-         $(LUFA_PATH)/LUFA/Drivers/Peripheral/SerialStream.c         \\r
-         $(LUFA_PATH)/LUFA/Drivers/Peripheral/Serial.c               \\r
-         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/DevChapter9.c        \\r
-         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Endpoint.c           \\r
-         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Host.c               \\r
-         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/HostChapter9.c       \\r
-         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/LowLevel.c           \\r
-         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Pipe.c               \\r
-         $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/Events.c            \\r
-         $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBInterrupt.c      \\r
-         $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBTask.c           \\r
-         $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/ConfigDescriptor.c  \\r
-         $(LUFA_PATH)/LUFA/Drivers/USB/Class/Device/RNDIS.c          \\r
-\r
-\r
-# List C++ source files here. (C dependencies are automatically generated.)\r
-CPPSRC = \r
-\r
-\r
-# List Assembler source files here.\r
-#     Make them always end in a capital .S.  Files ending in a lowercase .s\r
-#     will not be considered source files but generated files (assembler\r
-#     output from the compiler), and will be deleted upon "make clean"!\r
-#     Even though the DOS/Win* filesystem matches both .s and .S the same,\r
-#     it will preserve the spelling of the filenames, and gcc itself does\r
-#     care about how the name is spelled on its command-line.\r
-ASRC =\r
-\r
-\r
-# Optimization level, can be [0, 1, 2, 3, s]. \r
-#     0 = turn off optimization. s = optimize for size.\r
-#     (Note: 3 is not always the best optimization level. See avr-libc FAQ.)\r
-OPT = s\r
-\r
-\r
-# Debugging format.\r
-#     Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs.\r
-#     AVR Studio 4.10 requires dwarf-2.\r
-#     AVR [Extended] COFF format requires stabs, plus an avr-objcopy run.\r
-DEBUG = dwarf-2\r
-\r
-\r
-# List any extra directories to look for include files here.\r
-#     Each directory must be seperated by a space.\r
-#     Use forward slashes for directory separators.\r
-#     For a directory that has spaces, enclose it in quotes.\r
-EXTRAINCDIRS = $(LUFA_PATH)/\r
-\r
-\r
-# Compiler flag to set the C Standard level.\r
-#     c89   = "ANSI" C\r
-#     gnu89 = c89 plus GCC extensions\r
-#     c99   = ISO C99 standard (not yet fully implemented)\r
-#     gnu99 = c99 plus GCC extensions\r
-CSTANDARD = -std=gnu99\r
-\r
-\r
-# Place -D or -U options here for C sources\r
-CDEFS  = -DF_CPU=$(F_CPU)UL -DF_CLOCK=$(F_CLOCK)UL -DBOARD=BOARD_$(BOARD)\r
-CDEFS += -DUSE_NONSTANDARD_DESCRIPTOR_NAMES -DUSB_DEVICE_ONLY\r
-CDEFS += -DFIXED_CONTROL_ENDPOINT_SIZE=8 -DUSE_SINGLE_DEVICE_CONFIGURATION\r
-CDEFS += -DUSE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)"\r
-CDEFS += -DNO_DECODE_ETHERNET -DNO_DECODE_ARP -DNO_DECODE_ICMP -DNO_DECODE_IP -DNO_DECODE_TCP -DNO_DECODE_UDP -DNO_DECODE_DHCP\r
-\r
-\r
-# Place -D or -U options here for ASM sources\r
-ADEFS = -DF_CPU=$(F_CPU)\r
-\r
-\r
-# Place -D or -U options here for C++ sources\r
-CPPDEFS = -DF_CPU=$(F_CPU)UL\r
-#CPPDEFS += -D__STDC_LIMIT_MACROS\r
-#CPPDEFS += -D__STDC_CONSTANT_MACROS\r
-\r
-\r
-\r
-#---------------- Compiler Options C ----------------\r
-#  -g*:          generate debugging information\r
-#  -O*:          optimization level\r
-#  -f...:        tuning, see GCC manual and avr-libc documentation\r
-#  -Wall...:     warning level\r
-#  -Wa,...:      tell GCC to pass this to the assembler.\r
-#    -adhlns...: create assembler listing\r
-CFLAGS = -g$(DEBUG)\r
-CFLAGS += $(CDEFS)\r
-CFLAGS += -O$(OPT)\r
-CFLAGS += -funsigned-char\r
-CFLAGS += -funsigned-bitfields\r
-CFLAGS += -ffunction-sections\r
-CFLAGS += -fpack-struct\r
-CFLAGS += -fshort-enums\r
-CFLAGS += -finline-limit=20\r
-CFLAGS += -Wall\r
-CFLAGS += -Wstrict-prototypes\r
-CFLAGS += -Wundef\r
-#CFLAGS += -fno-unit-at-a-time\r
-#CFLAGS += -Wunreachable-code\r
-#CFLAGS += -Wsign-compare\r
-CFLAGS += -Wa,-adhlns=$(<:%.c=$(OBJDIR)/%.lst)\r
-CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))\r
-CFLAGS += $(CSTANDARD)\r
-\r
-\r
-#---------------- Compiler Options C++ ----------------\r
-#  -g*:          generate debugging information\r
-#  -O*:          optimization level\r
-#  -f...:        tuning, see GCC manual and avr-libc documentation\r
-#  -Wall...:     warning level\r
-#  -Wa,...:      tell GCC to pass this to the assembler.\r
-#    -adhlns...: create assembler listing\r
-CPPFLAGS = -g$(DEBUG)\r
-CPPFLAGS += $(CPPDEFS)\r
-CPPFLAGS += -O$(OPT)\r
-CPPFLAGS += -funsigned-char\r
-CPPFLAGS += -funsigned-bitfields\r
-CPPFLAGS += -fpack-struct\r
-CPPFLAGS += -fshort-enums\r
-CPPFLAGS += -fno-exceptions\r
-CPPFLAGS += -Wall\r
-CFLAGS += -Wundef\r
-#CPPFLAGS += -mshort-calls\r
-#CPPFLAGS += -fno-unit-at-a-time\r
-#CPPFLAGS += -Wstrict-prototypes\r
-#CPPFLAGS += -Wunreachable-code\r
-#CPPFLAGS += -Wsign-compare\r
-CPPFLAGS += -Wa,-adhlns=$(<:%.cpp=$(OBJDIR)/%.lst)\r
-CPPFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))\r
-#CPPFLAGS += $(CSTANDARD)\r
-\r
-\r
-#---------------- Assembler Options ----------------\r
-#  -Wa,...:   tell GCC to pass this to the assembler.\r
-#  -adhlns:   create listing\r
-#  -gstabs:   have the assembler create line number information; note that\r
-#             for use in COFF files, additional information about filenames\r
-#             and function names needs to be present in the assembler source\r
-#             files -- see avr-libc docs [FIXME: not yet described there]\r
-#  -listing-cont-lines: Sets the maximum number of continuation lines of hex \r
-#       dump that will be displayed for a given single line of source input.\r
-ASFLAGS = $(ADEFS) -Wa,-adhlns=$(<:%.S=$(OBJDIR)/%.lst),-gstabs,--listing-cont-lines=100\r
-\r
-\r
-#---------------- Library Options ----------------\r
-# Minimalistic printf version\r
-PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min\r
-\r
-# Floating point printf version (requires MATH_LIB = -lm below)\r
-PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt\r
-\r
-# If this is left blank, then it will use the Standard printf version.\r
-PRINTF_LIB = \r
-#PRINTF_LIB = $(PRINTF_LIB_MIN)\r
-#PRINTF_LIB = $(PRINTF_LIB_FLOAT)\r
-\r
-\r
-# Minimalistic scanf version\r
-SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min\r
-\r
-# Floating point + %[ scanf version (requires MATH_LIB = -lm below)\r
-SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt\r
-\r
-# If this is left blank, then it will use the Standard scanf version.\r
-SCANF_LIB = \r
-#SCANF_LIB = $(SCANF_LIB_MIN)\r
-#SCANF_LIB = $(SCANF_LIB_FLOAT)\r
-\r
-\r
-MATH_LIB = -lm\r
-\r
-\r
-# List any extra directories to look for libraries here.\r
-#     Each directory must be seperated by a space.\r
-#     Use forward slashes for directory separators.\r
-#     For a directory that has spaces, enclose it in quotes.\r
-EXTRALIBDIRS = \r
-\r
-\r
-\r
-#---------------- External Memory Options ----------------\r
-\r
-# 64 KB of external RAM, starting after internal RAM (ATmega128!),\r
-# used for variables (.data/.bss) and heap (malloc()).\r
-#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff\r
-\r
-# 64 KB of external RAM, starting after internal RAM (ATmega128!),\r
-# only used for heap (malloc()).\r
-#EXTMEMOPTS = -Wl,--section-start,.data=0x801100,--defsym=__heap_end=0x80ffff\r
-\r
-EXTMEMOPTS =\r
-\r
-\r
-\r
-#---------------- Linker Options ----------------\r
-#  -Wl,...:     tell GCC to pass this to linker.\r
-#    -Map:      create map file\r
-#    --cref:    add cross reference to  map file\r
-LDFLAGS = -Wl,-Map=$(TARGET).map,--cref\r
-LDFLAGS += -Wl,--relax \r
-LDFLAGS += -Wl,--gc-sections\r
-LDFLAGS += $(EXTMEMOPTS)\r
-LDFLAGS += $(patsubst %,-L%,$(EXTRALIBDIRS))\r
-LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)\r
-#LDFLAGS += -T linker_script.x\r
-\r
-\r
-\r
-#---------------- Programming Options (avrdude) ----------------\r
-\r
-# Programming hardware: alf avr910 avrisp bascom bsd \r
-# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500\r
-#\r
-# Type: avrdude -c ?\r
-# to get a full listing.\r
-#\r
-AVRDUDE_PROGRAMMER = jtagmkII\r
-\r
-# com1 = serial port. Use lpt1 to connect to parallel port.\r
-AVRDUDE_PORT = usb\r
-\r
-AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex\r
-#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep\r
-\r
-\r
-# Uncomment the following if you want avrdude's erase cycle counter.\r
-# Note that this counter needs to be initialized first using -Yn,\r
-# see avrdude manual.\r
-#AVRDUDE_ERASE_COUNTER = -y\r
-\r
-# Uncomment the following if you do /not/ wish a verification to be\r
-# performed after programming the device.\r
-#AVRDUDE_NO_VERIFY = -V\r
-\r
-# Increase verbosity level.  Please use this when submitting bug\r
-# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude> \r
-# to submit bug reports.\r
-#AVRDUDE_VERBOSE = -v -v\r
-\r
-AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)\r
-AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY)\r
-AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE)\r
-AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER)\r
-\r
-\r
-\r
-#---------------- Debugging Options ----------------\r
-\r
-# For simulavr only - target MCU frequency.\r
-DEBUG_MFREQ = $(F_CPU)\r
-\r
-# Set the DEBUG_UI to either gdb or insight.\r
-# DEBUG_UI = gdb\r
-DEBUG_UI = insight\r
-\r
-# Set the debugging back-end to either avarice, simulavr.\r
-DEBUG_BACKEND = avarice\r
-#DEBUG_BACKEND = simulavr\r
-\r
-# GDB Init Filename.\r
-GDBINIT_FILE = __avr_gdbinit\r
-\r
-# When using avarice settings for the JTAG\r
-JTAG_DEV = /dev/com1\r
-\r
-# Debugging port used to communicate between GDB / avarice / simulavr.\r
-DEBUG_PORT = 4242\r
-\r
-# Debugging host used to communicate between GDB / avarice / simulavr, normally\r
-#     just set to localhost unless doing some sort of crazy debugging when \r
-#     avarice is running on a different computer.\r
-DEBUG_HOST = localhost\r
-\r
-\r
-\r
-#============================================================================\r
-\r
-\r
-# Define programs and commands.\r
-SHELL = sh\r
-CC = avr-gcc\r
-OBJCOPY = avr-objcopy\r
-OBJDUMP = avr-objdump\r
-SIZE = avr-size\r
-AR = avr-ar rcs\r
-NM = avr-nm\r
-AVRDUDE = avrdude\r
-REMOVE = rm -f\r
-REMOVEDIR = rm -rf\r
-COPY = cp\r
-WINSHELL = cmd\r
-\r
-# Define Messages\r
-# English\r
-MSG_ERRORS_NONE = Errors: none\r
-MSG_BEGIN = -------- begin --------\r
-MSG_END = --------  end  --------\r
-MSG_SIZE_BEFORE = Size before: \r
-MSG_SIZE_AFTER = Size after:\r
-MSG_COFF = Converting to AVR COFF:\r
-MSG_EXTENDED_COFF = Converting to AVR Extended COFF:\r
-MSG_FLASH = Creating load file for Flash:\r
-MSG_EEPROM = Creating load file for EEPROM:\r
-MSG_EXTENDED_LISTING = Creating Extended Listing:\r
-MSG_SYMBOL_TABLE = Creating Symbol Table:\r
-MSG_LINKING = Linking:\r
-MSG_COMPILING = Compiling C:\r
-MSG_COMPILING_CPP = Compiling C++:\r
-MSG_ASSEMBLING = Assembling:\r
-MSG_CLEANING = Cleaning project:\r
-MSG_CREATING_LIBRARY = Creating library:\r
-\r
-\r
-\r
-\r
-# Define all object files.\r
-OBJ = $(SRC:%.c=$(OBJDIR)/%.o) $(CPPSRC:%.cpp=$(OBJDIR)/%.o) $(ASRC:%.S=$(OBJDIR)/%.o) \r
-\r
-# Define all listing files.\r
-LST = $(SRC:%.c=$(OBJDIR)/%.lst) $(CPPSRC:%.cpp=$(OBJDIR)/%.lst) $(ASRC:%.S=$(OBJDIR)/%.lst) \r
-\r
-\r
-# Compiler flags to generate dependency files.\r
-GENDEPFLAGS = -MMD -MP -MF .dep/$(@F).d\r
-\r
-\r
-# Combine all necessary flags and optional flags.\r
-# Add target processor to flags.\r
-ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS)\r
-ALL_CPPFLAGS = -mmcu=$(MCU) -I. -x c++ $(CPPFLAGS) $(GENDEPFLAGS)\r
-ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)\r
-\r
-\r
-\r
-\r
-\r
-# Default target.\r
-all: begin gccversion sizebefore build checkhooks checklibmode checkboard sizeafter end\r
-\r
-# Change the build target to build a HEX file or a library.\r
-build: elf hex eep lss sym\r
-#build: lib\r
-\r
-\r
-elf: $(TARGET).elf\r
-hex: $(TARGET).hex\r
-eep: $(TARGET).eep\r
-lss: $(TARGET).lss\r
-sym: $(TARGET).sym\r
-LIBNAME=lib$(TARGET).a\r
-lib: $(LIBNAME)\r
-\r
-\r
-\r
-# Eye candy.\r
-# AVR Studio 3.x does not check make's exit code but relies on\r
-# the following magic strings to be generated by the compile job.\r
-begin:\r
-       @echo\r
-       @echo $(MSG_BEGIN)\r
-\r
-end:\r
-       @echo $(MSG_END)\r
-       @echo\r
-\r
-\r
-# Display size of file.\r
-HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex\r
-ELFSIZE = $(SIZE) $(MCU_FLAG) $(FORMAT_FLAG) $(TARGET).elf\r
-MCU_FLAG = $(shell $(SIZE) --help | grep -- --mcu > /dev/null && echo --mcu=$(MCU) )\r
-FORMAT_FLAG = $(shell $(SIZE) --help | grep -- --format=.*avr > /dev/null && echo --format=avr )\r
-\r
-sizebefore:\r
-       @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \\r
-       2>/dev/null; echo; fi\r
-\r
-sizeafter:\r
-       @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \\r
-       2>/dev/null; echo; fi\r
-\r
-checkhooks: build\r
-       @echo\r
-       @echo ------- Unhooked LUFA Events -------\r
-       @$(shell) (grep -s '^EVENT_.*LUFA/.*\\.o' $(TARGET).map | \\r
-                  cut -d' ' -f1 | cut -d'_' -f2- | grep ".*") || \\r
-                          echo "(None)"\r
-       @echo ------------------------------------\r
-\r
-checklibmode:\r
-       @echo\r
-       @echo ----------- Library Mode -----------\r
-       @$(shell) ($(CC) $(ALL_CFLAGS) -E -dM - < /dev/null \\r
-                 | grep 'USB_\(DEVICE\|HOST\)_ONLY' | cut -d' ' -f2 | grep ".*") \\r
-                 || echo "No specific mode (both device and host mode allowable)."\r
-       @echo ------------------------------------\r
-\r
-checkboard:\r
-       @echo\r
-       @echo ---------- Selected Board ----------\r
-       @echo Selected board model is $(BOARD).\r
-       @echo ------------------------------------\r
-       \r
-# Display compiler version information.\r
-gccversion : \r
-       @$(CC) --version\r
-\r
-\r
-\r
-# Program the device.  \r
-program: $(TARGET).hex $(TARGET).eep\r
-       $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)\r
-\r
-flip: $(TARGET).hex\r
-       batchisp -hardware usb -device $(MCU) -operation erase f\r
-       batchisp -hardware usb -device $(MCU) -operation loadbuffer $(TARGET).hex program\r
-       batchisp -hardware usb -device $(MCU) -operation start reset 0\r
-\r
-dfu: $(TARGET).hex\r
-       dfu-programmer $(MCU) erase\r
-       dfu-programmer $(MCU) flash --debug 1 $(TARGET).hex\r
-       dfu-programmer $(MCU) reset\r
-\r
-flip-ee: $(TARGET).hex $(TARGET).eep\r
-       copy $(TARGET).eep $(TARGET)eep.hex\r
-       batchisp -hardware usb -device $(MCU) -operation memory EEPROM erase\r
-       batchisp -hardware usb -device $(MCU) -operation memory EEPROM loadbuffer $(TARGET)eep.hex program\r
-       batchisp -hardware usb -device $(MCU) -operation start reset 0\r
-\r
-dfu-ee: $(TARGET).hex $(TARGET).eep\r
-       dfu-programmer $(MCU) flash-eeprom --debug 1 --suppress-bootloader-mem $(TARGET).eep\r
-       dfu-programmer $(MCU) reset\r
-\r
-\r
-# Generate avr-gdb config/init file which does the following:\r
-#     define the reset signal, load the target file, connect to target, and set \r
-#     a breakpoint at main().\r
-gdb-config: \r
-       @$(REMOVE) $(GDBINIT_FILE)\r
-       @echo define reset >> $(GDBINIT_FILE)\r
-       @echo SIGNAL SIGHUP >> $(GDBINIT_FILE)\r
-       @echo end >> $(GDBINIT_FILE)\r
-       @echo file $(TARGET).elf >> $(GDBINIT_FILE)\r
-       @echo target remote $(DEBUG_HOST):$(DEBUG_PORT)  >> $(GDBINIT_FILE)\r
-ifeq ($(DEBUG_BACKEND),simulavr)\r
-       @echo load  >> $(GDBINIT_FILE)\r
-endif\r
-       @echo break main >> $(GDBINIT_FILE)\r
-\r
-debug: gdb-config $(TARGET).elf\r
-ifeq ($(DEBUG_BACKEND), avarice)\r
-       @echo Starting AVaRICE - Press enter when "waiting to connect" message displays.\r
-       @$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \\r
-       $(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT)\r
-       @$(WINSHELL) /c pause\r
-\r
-else\r
-       @$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \\r
-       $(DEBUG_MFREQ) --port $(DEBUG_PORT)\r
-endif\r
-       @$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE)\r
-\r
-\r
-\r
-\r
-# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.\r
-COFFCONVERT = $(OBJCOPY) --debugging\r
-COFFCONVERT += --change-section-address .data-0x800000\r
-COFFCONVERT += --change-section-address .bss-0x800000\r
-COFFCONVERT += --change-section-address .noinit-0x800000\r
-COFFCONVERT += --change-section-address .eeprom-0x810000\r
-\r
-\r
-\r
-coff: $(TARGET).elf\r
-       @echo\r
-       @echo $(MSG_COFF) $(TARGET).cof\r
-       $(COFFCONVERT) -O coff-avr $< $(TARGET).cof\r
-\r
-\r
-extcoff: $(TARGET).elf\r
-       @echo\r
-       @echo $(MSG_EXTENDED_COFF) $(TARGET).cof\r
-       $(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof\r
-\r
-\r
-\r
-# Create final output files (.hex, .eep) from ELF output file.\r
-%.hex: %.elf\r
-       @echo\r
-       @echo $(MSG_FLASH) $@\r
-       $(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@\r
-\r
-%.eep: %.elf\r
-       @echo\r
-       @echo $(MSG_EEPROM) $@\r
-       -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \\r
-       --change-section-lma .eeprom=0 --no-change-warnings -O $(FORMAT) $< $@ || exit 0\r
-\r
-# Create extended listing file from ELF output file.\r
-%.lss: %.elf\r
-       @echo\r
-       @echo $(MSG_EXTENDED_LISTING) $@\r
-       $(OBJDUMP) -h -z -S $< > $@\r
-\r
-# Create a symbol table from ELF output file.\r
-%.sym: %.elf\r
-       @echo\r
-       @echo $(MSG_SYMBOL_TABLE) $@\r
-       $(NM) -n $< > $@\r
-\r
-\r
-\r
-# Create library from object files.\r
-.SECONDARY : $(TARGET).a\r
-.PRECIOUS : $(OBJ)\r
-%.a: $(OBJ)\r
-       @echo\r
-       @echo $(MSG_CREATING_LIBRARY) $@\r
-       $(AR) $@ $(OBJ)\r
-\r
-\r
-# Link: create ELF output file from object files.\r
-.SECONDARY : $(TARGET).elf\r
-.PRECIOUS : $(OBJ)\r
-%.elf: $(OBJ)\r
-       @echo\r
-       @echo $(MSG_LINKING) $@\r
-       $(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)\r
-\r
-\r
-# Compile: create object files from C source files.\r
-$(OBJDIR)/%.o : %.c\r
-       @echo\r
-       @echo $(MSG_COMPILING) $<\r
-       $(CC) -c $(ALL_CFLAGS) $< -o $@ \r
-\r
-\r
-# Compile: create object files from C++ source files.\r
-$(OBJDIR)/%.o : %.cpp\r
-       @echo\r
-       @echo $(MSG_COMPILING_CPP) $<\r
-       $(CC) -c $(ALL_CPPFLAGS) $< -o $@ \r
-\r
-\r
-# Compile: create assembler files from C source files.\r
-%.s : %.c\r
-       $(CC) -S $(ALL_CFLAGS) $< -o $@\r
-\r
-\r
-# Compile: create assembler files from C++ source files.\r
-%.s : %.cpp\r
-       $(CC) -S $(ALL_CPPFLAGS) $< -o $@\r
-\r
-\r
-# Assemble: create object files from assembler source files.\r
-$(OBJDIR)/%.o : %.S\r
-       @echo\r
-       @echo $(MSG_ASSEMBLING) $<\r
-       $(CC) -c $(ALL_ASFLAGS) $< -o $@\r
-\r
-\r
-# Create preprocessed source for use in sending a bug report.\r
-%.i : %.c\r
-       $(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ \r
-       \r
-\r
-# Target: clean project.\r
-clean: begin clean_list clean_binary end\r
-\r
-clean_binary:\r
-       $(REMOVE) $(TARGET).hex\r
-       \r
-clean_list:\r
-       @echo $(MSG_CLEANING)\r
-       $(REMOVE) $(TARGET).eep\r
-       $(REMOVE) $(TARGET)eep.hex\r
-       $(REMOVE) $(TARGET).cof\r
-       $(REMOVE) $(TARGET).elf\r
-       $(REMOVE) $(TARGET).map\r
-       $(REMOVE) $(TARGET).sym\r
-       $(REMOVE) $(TARGET).lss\r
-       $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.o)\r
-       $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.lst)\r
-       $(REMOVE) $(SRC:.c=.s)\r
-       $(REMOVE) $(SRC:.c=.d)\r
-       $(REMOVE) $(SRC:.c=.i)\r
-       $(REMOVEDIR) .dep\r
-\r
-\r
-doxygen:\r
-       @echo Generating Project Documentation...\r
-       @doxygen Doxygen.conf\r
-       @echo Documentation Generation Complete.\r
-\r
-clean_doxygen:\r
-       rm -rf Documentation\r
-\r
-# Create object files directory\r
-$(shell mkdir $(OBJDIR) 2>/dev/null)\r
-\r
-\r
-# Include the dependency files.\r
--include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)\r
-\r
-\r
-# Listing of phony targets.\r
-.PHONY : all checkhooks checklibmode checkboard   \\r
-begin finish end sizebefore sizeafter gccversion  \\r
-build elf hex eep lss sym coff extcoff clean      \\r
-clean_list clean_binary program debug gdb-config  \\r
-doxygen dfu flip flip-ee dfu-ee
\ No newline at end of file
diff --git a/Demos/Device/USBtoSerial/Descriptors.c b/Demos/Device/USBtoSerial/Descriptors.c
deleted file mode 100644 (file)
index c369d16..0000000
+++ /dev/null
@@ -1,263 +0,0 @@
-/*\r
-             LUFA Library\r
-     Copyright (C) Dean Camera, 2009.\r
-              \r
-  dean [at] fourwalledcubicle [dot] com\r
-      www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
-  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
-  Permission to use, copy, modify, and distribute this software\r
-  and its documentation for any purpose and without fee is hereby\r
-  granted, provided that the above copyright notice appear in all\r
-  copies and that both that the copyright notice and this\r
-  permission notice and warranty disclaimer appear in supporting\r
-  documentation, and that the name of the author not be used in\r
-  advertising or publicity pertaining to distribution of the\r
-  software without specific, written prior permission.\r
-\r
-  The author disclaim all warranties with regard to this\r
-  software, including all implied warranties of merchantability\r
-  and fitness.  In no event shall the author be liable for any\r
-  special, indirect or consequential damages or any damages\r
-  whatsoever resulting from loss of use, data or profits, whether\r
-  in an action of contract, negligence or other tortious action,\r
-  arising out of or in connection with the use or performance of\r
-  this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- *  USB Device Descriptors, for library use when in USB device mode. Descriptors are special \r
- *  computer-readable structures which the host requests upon device enumeration, to determine\r
- *  the device's capabilities and functions.  \r
- */\r
-\r
-#include "Descriptors.h"\r
-\r
-/** Device descriptor structure. This descriptor, located in FLASH memory, describes the overall\r
- *  device characteristics, including the supported USB version, control endpoint size and the\r
- *  number of device configurations. The descriptor is read out by the USB host when the enumeration\r
- *  process begins.\r
- */\r
-USB_Descriptor_Device_t PROGMEM DeviceDescriptor =\r
-{\r
-       .Header                 = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device},\r
-               \r
-       .USBSpecification       = VERSION_BCD(01.10),\r
-       .Class                  = 0x02,\r
-       .SubClass               = 0x00,\r
-       .Protocol               = 0x00,\r
-                               \r
-       .Endpoint0Size          = FIXED_CONTROL_ENDPOINT_SIZE,\r
-               \r
-       .VendorID               = 0x03EB,\r
-       .ProductID              = 0x204B,\r
-       .ReleaseNumber          = 0x0000,\r
-               \r
-       .ManufacturerStrIndex   = 0x01,\r
-       .ProductStrIndex        = 0x02,\r
-       .SerialNumStrIndex      = NO_DESCRIPTOR,\r
-               \r
-       .NumberOfConfigurations = 1\r
-};\r
-\r
-/** Configuration descriptor structure. This descriptor, located in FLASH memory, describes the usage\r
- *  of the device in one of its supported configurations, including information about any device interfaces\r
- *  and endpoints. The descriptor is read out by the USB host during the enumeration process when selecting\r
- *  a configuration so that the host may correctly communicate with the USB device.\r
- */\r
-USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =\r
-{\r
-       .Config = \r
-               {\r
-                       .Header                 = {.Size = sizeof(USB_Descriptor_Configuration_Header_t), .Type = DTYPE_Configuration},\r
-\r
-                       .TotalConfigurationSize = sizeof(USB_Descriptor_Configuration_t),\r
-                       .TotalInterfaces        = 2,\r
-                               \r
-                       .ConfigurationNumber    = 1,\r
-                       .ConfigurationStrIndex  = NO_DESCRIPTOR,\r
-                               \r
-                       .ConfigAttributes       = (USB_CONFIG_ATTR_BUSPOWERED | USB_CONFIG_ATTR_SELFPOWERED),\r
-                       \r
-                       .MaxPowerConsumption    = USB_CONFIG_POWER_MA(100)\r
-               },\r
-               \r
-       .CCI_Interface = \r
-               {\r
-                       .Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},\r
-\r
-                       .InterfaceNumber        = 0,\r
-                       .AlternateSetting       = 0,\r
-                       \r
-                       .TotalEndpoints         = 1,\r
-                               \r
-                       .Class                  = 0x02,\r
-                       .SubClass               = 0x02,\r
-                       .Protocol               = 0x01,\r
-                               \r
-                       .InterfaceStrIndex      = NO_DESCRIPTOR\r
-               },\r
-\r
-       .CDC_Functional_IntHeader = \r
-               {\r
-                       .Header                 = {.Size = sizeof(CDC_FUNCTIONAL_DESCRIPTOR(2)), .Type = 0x24},\r
-                       .SubType                = 0x00,\r
-                       \r
-                       .Data                   = {0x01, 0x10}\r
-               },\r
-\r
-       .CDC_Functional_CallManagement = \r
-               {\r
-                       .Header                 = {.Size = sizeof(CDC_FUNCTIONAL_DESCRIPTOR(2)), .Type = 0x24},\r
-                       .SubType                = 0x01,\r
-                       \r
-                       .Data                   = {0x03, 0x01}\r
-               },\r
-\r
-       .CDC_Functional_AbstractControlManagement = \r
-               {\r
-                       .Header                 = {.Size = sizeof(CDC_FUNCTIONAL_DESCRIPTOR(1)), .Type = 0x24},\r
-                       .SubType                = 0x02,\r
-                       \r
-                       .Data                   = {0x06}\r
-               },\r
-               \r
-       .CDC_Functional_Union= \r
-               {\r
-                       .Header                 = {.Size = sizeof(CDC_FUNCTIONAL_DESCRIPTOR(2)), .Type = 0x24},\r
-                       .SubType                = 0x06,\r
-                       \r
-                       .Data                   = {0x00, 0x01}\r
-               },\r
-\r
-       .ManagementEndpoint = \r
-               {\r
-                       .Header                 = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},\r
-                                                                                \r
-                       .EndpointAddress        = (ENDPOINT_DESCRIPTOR_DIR_IN | CDC_NOTIFICATION_EPNUM),\r
-                       .Attributes             = EP_TYPE_INTERRUPT,\r
-                       .EndpointSize           = CDC_NOTIFICATION_EPSIZE,\r
-                       .PollingIntervalMS      = 0xFF\r
-               },\r
-\r
-       .DCI_Interface = \r
-               {\r
-                       .Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},\r
-\r
-                       .InterfaceNumber        = 1,\r
-                       .AlternateSetting       = 0,\r
-                       \r
-                       .TotalEndpoints         = 2,\r
-                               \r
-                       .Class                  = 0x0A,\r
-                       .SubClass               = 0x00,\r
-                       .Protocol               = 0x00,\r
-                               \r
-                       .InterfaceStrIndex      = NO_DESCRIPTOR\r
-               },\r
-\r
-       .DataOutEndpoint = \r
-               {\r
-                       .Header                 = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},\r
-                                                                                \r
-                       .EndpointAddress        = (ENDPOINT_DESCRIPTOR_DIR_OUT | CDC_RX_EPNUM),\r
-                       .Attributes             = EP_TYPE_BULK,\r
-                       .EndpointSize           = CDC_TXRX_EPSIZE,\r
-                       .PollingIntervalMS      = 0x00\r
-               },\r
-               \r
-       .DataInEndpoint = \r
-               {\r
-                       .Header                 = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},\r
-                                                                                \r
-                       .EndpointAddress        = (ENDPOINT_DESCRIPTOR_DIR_IN | CDC_TX_EPNUM),\r
-                       .Attributes       =             EP_TYPE_BULK,\r
-                       .EndpointSize           = CDC_TXRX_EPSIZE,\r
-                       .PollingIntervalMS=             0x00\r
-               }\r
-};\r
-\r
-/** Language descriptor structure. This descriptor, located in FLASH memory, is returned when the host requests\r
- *  the string descriptor with index 0 (the first index). It is actually an array of 16-bit integers, which indicate\r
- *  via the language ID table available at USB.org what languages the device supports for its string descriptors.\r
- */\r
-USB_Descriptor_String_t PROGMEM LanguageString =\r
-{\r
-       .Header                 = {.Size = USB_STRING_LEN(1), .Type = DTYPE_String},\r
-               \r
-       .UnicodeString          = {LANGUAGE_ID_ENG}\r
-};\r
-\r
-/** Manufacturer descriptor string. This is a Unicode string containing the manufacturer's details in human readable\r
- *  form, and is read out upon request by the host when the appropriate string ID is requested, listed in the Device\r
- *  Descriptor.\r
- */\r
-USB_Descriptor_String_t PROGMEM ManufacturerString =\r
-{\r
-       .Header                 = {.Size = USB_STRING_LEN(11), .Type = DTYPE_String},\r
-               \r
-       .UnicodeString          = L"Dean Camera"\r
-};\r
-\r
-/** Product descriptor string. This is a Unicode string containing the product's details in human readable form,\r
- *  and is read out upon request by the host when the appropriate string ID is requested, listed in the Device\r
- *  Descriptor.\r
- */\r
-USB_Descriptor_String_t PROGMEM ProductString =\r
-{\r
-       .Header                 = {.Size = USB_STRING_LEN(19), .Type = DTYPE_String},\r
-               \r
-       .UnicodeString          = L"LUFA USB-RS232 Demo"\r
-};\r
-\r
-/** This function is called by the library when in device mode, and must be overridden (see library "USB Descriptors"\r
- *  documentation) by the application code so that the address and size of a requested descriptor can be given\r
- *  to the USB library. When the device receives a Get Descriptor request on the control endpoint, this function\r
- *  is called so that the descriptor details can be passed back and the appropriate descriptor sent back to the\r
- *  USB host.\r
- */\r
-uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
-{\r
-       const uint8_t  DescriptorType   = (wValue >> 8);\r
-       const uint8_t  DescriptorNumber = (wValue & 0xFF);\r
-\r
-       void*    Address = NULL;\r
-       uint16_t Size    = NO_DESCRIPTOR;\r
-\r
-       switch (DescriptorType)\r
-       {\r
-               case DTYPE_Device: \r
-                       Address = (void*)&DeviceDescriptor;\r
-                       Size    = sizeof(USB_Descriptor_Device_t);\r
-                       break;\r
-               case DTYPE_Configuration: \r
-                       Address = (void*)&ConfigurationDescriptor;\r
-                       Size    = sizeof(USB_Descriptor_Configuration_t);\r
-                       break;\r
-               case DTYPE_String: \r
-                       switch (DescriptorNumber)\r
-                       {\r
-                               case 0x00: \r
-                                       Address = (void*)&LanguageString;\r
-                                       Size    = pgm_read_byte(&LanguageString.Header.Size);\r
-                                       break;\r
-                               case 0x01: \r
-                                       Address = (void*)&ManufacturerString;\r
-                                       Size    = pgm_read_byte(&ManufacturerString.Header.Size);\r
-                                       break;\r
-                               case 0x02: \r
-                                       Address = (void*)&ProductString;\r
-                                       Size    = pgm_read_byte(&ProductString.Header.Size);\r
-                                       break;\r
-                       }\r
-                       \r
-                       break;\r
-       }\r
-       \r
-       *DescriptorAddress = Address;\r
-       return Size;\r
-}\r
diff --git a/Demos/Device/USBtoSerial/Descriptors.h b/Demos/Device/USBtoSerial/Descriptors.h
deleted file mode 100644 (file)
index 9e372e3..0000000
+++ /dev/null
@@ -1,84 +0,0 @@
-/*\r
-             LUFA Library\r
-     Copyright (C) Dean Camera, 2009.\r
-              \r
-  dean [at] fourwalledcubicle [dot] com\r
-      www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
-  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
-  Permission to use, copy, modify, and distribute this software\r
-  and its documentation for any purpose and without fee is hereby\r
-  granted, provided that the above copyright notice appear in all\r
-  copies and that both that the copyright notice and this\r
-  permission notice and warranty disclaimer appear in supporting\r
-  documentation, and that the name of the author not be used in\r
-  advertising or publicity pertaining to distribution of the\r
-  software without specific, written prior permission.\r
-\r
-  The author disclaim all warranties with regard to this\r
-  software, including all implied warranties of merchantability\r
-  and fitness.  In no event shall the author be liable for any\r
-  special, indirect or consequential damages or any damages\r
-  whatsoever resulting from loss of use, data or profits, whether\r
-  in an action of contract, negligence or other tortious action,\r
-  arising out of or in connection with the use or performance of\r
-  this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- *  Header file for Descriptors.c.\r
- */\r
\r
-#ifndef _DESCRIPTORS_H_\r
-#define _DESCRIPTORS_H_\r
-\r
-       /* Includes: */\r
-               #include <avr/pgmspace.h>\r
-\r
-               #include <LUFA/Drivers/USB/USB.h>\r
-               #include <LUFA/Drivers/USB/Class/Device/CDC.h>\r
-\r
-       /* Macros: */\r
-               /** Endpoint number of the CDC device-to-host notification IN endpoint. */\r
-               #define CDC_NOTIFICATION_EPNUM         2\r
-\r
-               /** Endpoint number of the CDC device-to-host data IN endpoint. */\r
-               #define CDC_TX_EPNUM                   3        \r
-\r
-               /** Endpoint number of the CDC host-to-device data OUT endpoint. */\r
-               #define CDC_RX_EPNUM                   4        \r
-\r
-               /** Size in bytes of the CDC device-to-host notification IN endpoint. */\r
-               #define CDC_NOTIFICATION_EPSIZE        8\r
-\r
-               /** Size in bytes of the CDC data IN and OUT endpoints. */\r
-               #define CDC_TXRX_EPSIZE                16       \r
-\r
-       /* Type Defines: */\r
-               /** Type define for the device configuration descriptor structure. This must be defined in the\r
-                *  application code, as the configuration descriptor contains several sub-descriptors which\r
-                *  vary between devices, and which describe the device's usage to the host.\r
-                */\r
-               typedef struct\r
-               {\r
-                       USB_Descriptor_Configuration_Header_t    Config;\r
-                       USB_Descriptor_Interface_t               CCI_Interface;\r
-                       CDC_FUNCTIONAL_DESCRIPTOR(2)             CDC_Functional_IntHeader;\r
-                       CDC_FUNCTIONAL_DESCRIPTOR(2)             CDC_Functional_CallManagement;\r
-                       CDC_FUNCTIONAL_DESCRIPTOR(1)             CDC_Functional_AbstractControlManagement;\r
-                       CDC_FUNCTIONAL_DESCRIPTOR(2)             CDC_Functional_Union;\r
-                       USB_Descriptor_Endpoint_t                ManagementEndpoint;\r
-                       USB_Descriptor_Interface_t               DCI_Interface;\r
-                       USB_Descriptor_Endpoint_t                DataOutEndpoint;\r
-                       USB_Descriptor_Endpoint_t                DataInEndpoint;\r
-               } USB_Descriptor_Configuration_t;\r
-\r
-       /* Function Prototypes: */\r
-               uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
-                                                                                       ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);\r
-\r
-#endif\r
diff --git a/Demos/Device/USBtoSerial/Doxygen.conf b/Demos/Device/USBtoSerial/Doxygen.conf
deleted file mode 100644 (file)
index 1eb8c54..0000000
+++ /dev/null
@@ -1,1485 +0,0 @@
-# Doxyfile 1.5.7.1\r
-\r
-# This file describes the settings to be used by the documentation system\r
-# doxygen (www.doxygen.org) for a project\r
-#\r
-# All text after a hash (#) is considered a comment and will be ignored\r
-# The format is:\r
-#       TAG = value [value, ...]\r
-# For lists items can also be appended using:\r
-#       TAG += value [value, ...]\r
-# Values that contain spaces should be placed between quotes (" ")\r
-\r
-#---------------------------------------------------------------------------\r
-# Project related configuration options\r
-#---------------------------------------------------------------------------\r
-\r
-# This tag specifies the encoding used for all characters in the config file \r
-# that follow. The default is UTF-8 which is also the encoding used for all \r
-# text before the first occurrence of this tag. Doxygen uses libiconv (or the \r
-# iconv built into libc) for the transcoding. See \r
-# http://www.gnu.org/software/libiconv for the list of possible encodings.\r
-\r
-DOXYFILE_ENCODING      = UTF-8\r
-\r
-# The PROJECT_NAME tag is a single word (or a sequence of words surrounded \r
-# by quotes) that should identify the project.\r
-\r
-PROJECT_NAME           = "LUFA Library - USB to Serial Device Demo"\r
-\r
-# The PROJECT_NUMBER tag can be used to enter a project or revision number. \r
-# This could be handy for archiving the generated documentation or \r
-# if some version control system is used.\r
-\r
-PROJECT_NUMBER         = 0.0.0\r
-\r
-# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) \r
-# base path where the generated documentation will be put. \r
-# If a relative path is entered, it will be relative to the location \r
-# where doxygen was started. If left blank the current directory will be used.\r
-\r
-OUTPUT_DIRECTORY       = ./Documentation/\r
-\r
-# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create \r
-# 4096 sub-directories (in 2 levels) under the output directory of each output \r
-# format and will distribute the generated files over these directories. \r
-# Enabling this option can be useful when feeding doxygen a huge amount of \r
-# source files, where putting all generated files in the same directory would \r
-# otherwise cause performance problems for the file system.\r
-\r
-CREATE_SUBDIRS         = YES\r
-\r
-# The OUTPUT_LANGUAGE tag is used to specify the language in which all \r
-# documentation generated by doxygen is written. Doxygen will use this \r
-# information to generate all constant output in the proper language. \r
-# The default language is English, other supported languages are: \r
-# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, \r
-# Croatian, Czech, Danish, Dutch, Farsi, Finnish, French, German, Greek, \r
-# Hungarian, Italian, Japanese, Japanese-en (Japanese with English messages), \r
-# Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, Polish, \r
-# Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, Slovene, \r
-# Spanish, Swedish, and Ukrainian.\r
-\r
-OUTPUT_LANGUAGE        = English\r
-\r
-# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will \r
-# include brief member descriptions after the members that are listed in \r
-# the file and class documentation (similar to JavaDoc). \r
-# Set to NO to disable this.\r
-\r
-BRIEF_MEMBER_DESC      = YES\r
-\r
-# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend \r
-# the brief description of a member or function before the detailed description. \r
-# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the \r
-# brief descriptions will be completely suppressed.\r
-\r
-REPEAT_BRIEF           = YES\r
-\r
-# This tag implements a quasi-intelligent brief description abbreviator \r
-# that is used to form the text in various listings. Each string \r
-# in this list, if found as the leading text of the brief description, will be \r
-# stripped from the text and the result after processing the whole list, is \r
-# used as the annotated text. Otherwise, the brief description is used as-is. \r
-# If left blank, the following values are used ("$name" is automatically \r
-# replaced with the name of the entity): "The $name class" "The $name widget" \r
-# "The $name file" "is" "provides" "specifies" "contains" \r
-# "represents" "a" "an" "the"\r
-\r
-ABBREVIATE_BRIEF       = "The $name class" \\r
-                         "The $name widget" \\r
-                         "The $name file" \\r
-                         is \\r
-                         provides \\r
-                         specifies \\r
-                         contains \\r
-                         represents \\r
-                         a \\r
-                         an \\r
-                         the\r
-\r
-# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then \r
-# Doxygen will generate a detailed section even if there is only a brief \r
-# description.\r
-\r
-ALWAYS_DETAILED_SEC    = NO\r
-\r
-# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all \r
-# inherited members of a class in the documentation of that class as if those \r
-# members were ordinary class members. Constructors, destructors and assignment \r
-# operators of the base classes will not be shown.\r
-\r
-INLINE_INHERITED_MEMB  = NO\r
-\r
-# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full \r
-# path before files name in the file list and in the header files. If set \r
-# to NO the shortest path that makes the file name unique will be used.\r
-\r
-FULL_PATH_NAMES        = YES\r
-\r
-# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag \r
-# can be used to strip a user-defined part of the path. Stripping is \r
-# only done if one of the specified strings matches the left-hand part of \r
-# the path. The tag can be used to show relative paths in the file list. \r
-# If left blank the directory from which doxygen is run is used as the \r
-# path to strip.\r
-\r
-STRIP_FROM_PATH        = \r
-\r
-# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of \r
-# the path mentioned in the documentation of a class, which tells \r
-# the reader which header file to include in order to use a class. \r
-# If left blank only the name of the header file containing the class \r
-# definition is used. Otherwise one should specify the include paths that \r
-# are normally passed to the compiler using the -I flag.\r
-\r
-STRIP_FROM_INC_PATH    = \r
-\r
-# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter \r
-# (but less readable) file names. This can be useful is your file systems \r
-# doesn't support long names like on DOS, Mac, or CD-ROM.\r
-\r
-SHORT_NAMES            = YES\r
-\r
-# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen \r
-# will interpret the first line (until the first dot) of a JavaDoc-style \r
-# comment as the brief description. If set to NO, the JavaDoc \r
-# comments will behave just like regular Qt-style comments \r
-# (thus requiring an explicit @brief command for a brief description.)\r
-\r
-JAVADOC_AUTOBRIEF      = NO\r
-\r
-# If the QT_AUTOBRIEF tag is set to YES then Doxygen will \r
-# interpret the first line (until the first dot) of a Qt-style \r
-# comment as the brief description. If set to NO, the comments \r
-# will behave just like regular Qt-style comments (thus requiring \r
-# an explicit \brief command for a brief description.)\r
-\r
-QT_AUTOBRIEF           = NO\r
-\r
-# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen \r
-# treat a multi-line C++ special comment block (i.e. a block of //! or /// \r
-# comments) as a brief description. This used to be the default behaviour. \r
-# The new default is to treat a multi-line C++ comment block as a detailed \r
-# description. Set this tag to YES if you prefer the old behaviour instead.\r
-\r
-MULTILINE_CPP_IS_BRIEF = NO\r
-\r
-# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented \r
-# member inherits the documentation from any documented member that it \r
-# re-implements.\r
-\r
-INHERIT_DOCS           = YES\r
-\r
-# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce \r
-# a new page for each member. If set to NO, the documentation of a member will \r
-# be part of the file/class/namespace that contains it.\r
-\r
-SEPARATE_MEMBER_PAGES  = NO\r
-\r
-# The TAB_SIZE tag can be used to set the number of spaces in a tab. \r
-# Doxygen uses this value to replace tabs by spaces in code fragments.\r
-\r
-TAB_SIZE               = 4\r
-\r
-# This tag can be used to specify a number of aliases that acts \r
-# as commands in the documentation. An alias has the form "name=value". \r
-# For example adding "sideeffect=\par Side Effects:\n" will allow you to \r
-# put the command \sideeffect (or @sideeffect) in the documentation, which \r
-# will result in a user-defined paragraph with heading "Side Effects:". \r
-# You can put \n's in the value part of an alias to insert newlines.\r
-\r
-ALIASES                = \r
-\r
-# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C \r
-# sources only. Doxygen will then generate output that is more tailored for C. \r
-# For instance, some of the names that are used will be different. The list \r
-# of all members will be omitted, etc.\r
-\r
-OPTIMIZE_OUTPUT_FOR_C  = YES\r
-\r
-# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java \r
-# sources only. Doxygen will then generate output that is more tailored for \r
-# Java. For instance, namespaces will be presented as packages, qualified \r
-# scopes will look different, etc.\r
-\r
-OPTIMIZE_OUTPUT_JAVA   = NO\r
-\r
-# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran \r
-# sources only. Doxygen will then generate output that is more tailored for \r
-# Fortran.\r
-\r
-OPTIMIZE_FOR_FORTRAN   = NO\r
-\r
-# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL \r
-# sources. Doxygen will then generate output that is tailored for \r
-# VHDL.\r
-\r
-OPTIMIZE_OUTPUT_VHDL   = NO\r
-\r
-# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want \r
-# to include (a tag file for) the STL sources as input, then you should \r
-# set this tag to YES in order to let doxygen match functions declarations and \r
-# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. \r
-# func(std::string) {}). This also make the inheritance and collaboration \r
-# diagrams that involve STL classes more complete and accurate.\r
-\r
-BUILTIN_STL_SUPPORT    = NO\r
-\r
-# If you use Microsoft's C++/CLI language, you should set this option to YES to\r
-# enable parsing support.\r
-\r
-CPP_CLI_SUPPORT        = NO\r
-\r
-# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. \r
-# Doxygen will parse them like normal C++ but will assume all classes use public \r
-# instead of private inheritance when no explicit protection keyword is present.\r
-\r
-SIP_SUPPORT            = NO\r
-\r
-# For Microsoft's IDL there are propget and propput attributes to indicate getter \r
-# and setter methods for a property. Setting this option to YES (the default) \r
-# will make doxygen to replace the get and set methods by a property in the \r
-# documentation. This will only work if the methods are indeed getting or \r
-# setting a simple type. If this is not the case, or you want to show the \r
-# methods anyway, you should set this option to NO.\r
-\r
-IDL_PROPERTY_SUPPORT   = YES\r
-\r
-# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC \r
-# tag is set to YES, then doxygen will reuse the documentation of the first \r
-# member in the group (if any) for the other members of the group. By default \r
-# all members of a group must be documented explicitly.\r
-\r
-DISTRIBUTE_GROUP_DOC   = NO\r
-\r
-# Set the SUBGROUPING tag to YES (the default) to allow class member groups of \r
-# the same type (for instance a group of public functions) to be put as a \r
-# subgroup of that type (e.g. under the Public Functions section). Set it to \r
-# NO to prevent subgrouping. Alternatively, this can be done per class using \r
-# the \nosubgrouping command.\r
-\r
-SUBGROUPING            = YES\r
-\r
-# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum \r
-# is documented as struct, union, or enum with the name of the typedef. So \r
-# typedef struct TypeS {} TypeT, will appear in the documentation as a struct \r
-# with name TypeT. When disabled the typedef will appear as a member of a file, \r
-# namespace, or class. And the struct will be named TypeS. This can typically \r
-# be useful for C code in case the coding convention dictates that all compound \r
-# types are typedef'ed and only the typedef is referenced, never the tag name.\r
-\r
-TYPEDEF_HIDES_STRUCT   = NO\r
-\r
-# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to \r
-# determine which symbols to keep in memory and which to flush to disk.\r
-# When the cache is full, less often used symbols will be written to disk.\r
-# For small to medium size projects (<1000 input files) the default value is \r
-# probably good enough. For larger projects a too small cache size can cause \r
-# doxygen to be busy swapping symbols to and from disk most of the time \r
-# causing a significant performance penality. \r
-# If the system has enough physical memory increasing the cache will improve the \r
-# performance by keeping more symbols in memory. Note that the value works on \r
-# a logarithmic scale so increasing the size by one will rougly double the \r
-# memory usage. The cache size is given by this formula: \r
-# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, \r
-# corresponding to a cache size of 2^16 = 65536 symbols\r
-\r
-SYMBOL_CACHE_SIZE      = 0\r
-\r
-#---------------------------------------------------------------------------\r
-# Build related configuration options\r
-#---------------------------------------------------------------------------\r
-\r
-# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in \r
-# documentation are documented, even if no documentation was available. \r
-# Private class members and static file members will be hidden unless \r
-# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES\r
-\r
-EXTRACT_ALL            = YES\r
-\r
-# If the EXTRACT_PRIVATE tag is set to YES all private members of a class \r
-# will be included in the documentation.\r
-\r
-EXTRACT_PRIVATE        = YES\r
-\r
-# If the EXTRACT_STATIC tag is set to YES all static members of a file \r
-# will be included in the documentation.\r
-\r
-EXTRACT_STATIC         = YES\r
-\r
-# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) \r
-# defined locally in source files will be included in the documentation. \r
-# If set to NO only classes defined in header files are included.\r
-\r
-EXTRACT_LOCAL_CLASSES  = YES\r
-\r
-# This flag is only useful for Objective-C code. When set to YES local \r
-# methods, which are defined in the implementation section but not in \r
-# the interface are included in the documentation. \r
-# If set to NO (the default) only methods in the interface are included.\r
-\r
-EXTRACT_LOCAL_METHODS  = NO\r
-\r
-# If this flag is set to YES, the members of anonymous namespaces will be \r
-# extracted and appear in the documentation as a namespace called \r
-# 'anonymous_namespace{file}', where file will be replaced with the base \r
-# name of the file that contains the anonymous namespace. By default \r
-# anonymous namespace are hidden.\r
-\r
-EXTRACT_ANON_NSPACES   = NO\r
-\r
-# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all \r
-# undocumented members of documented classes, files or namespaces. \r
-# If set to NO (the default) these members will be included in the \r
-# various overviews, but no documentation section is generated. \r
-# This option has no effect if EXTRACT_ALL is enabled.\r
-\r
-HIDE_UNDOC_MEMBERS     = NO\r
-\r
-# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all \r
-# undocumented classes that are normally visible in the class hierarchy. \r
-# If set to NO (the default) these classes will be included in the various \r
-# overviews. This option has no effect if EXTRACT_ALL is enabled.\r
-\r
-HIDE_UNDOC_CLASSES     = NO\r
-\r
-# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all \r
-# friend (class|struct|union) declarations. \r
-# If set to NO (the default) these declarations will be included in the \r
-# documentation.\r
-\r
-HIDE_FRIEND_COMPOUNDS  = NO\r
-\r
-# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any \r
-# documentation blocks found inside the body of a function. \r
-# If set to NO (the default) these blocks will be appended to the \r
-# function's detailed documentation block.\r
-\r
-HIDE_IN_BODY_DOCS      = NO\r
-\r
-# The INTERNAL_DOCS tag determines if documentation \r
-# that is typed after a \internal command is included. If the tag is set \r
-# to NO (the default) then the documentation will be excluded. \r
-# Set it to YES to include the internal documentation.\r
-\r
-INTERNAL_DOCS          = NO\r
-\r
-# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate \r
-# file names in lower-case letters. If set to YES upper-case letters are also \r
-# allowed. This is useful if you have classes or files whose names only differ \r
-# in case and if your file system supports case sensitive file names. Windows \r
-# and Mac users are advised to set this option to NO.\r
-\r
-CASE_SENSE_NAMES       = NO\r
-\r
-# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen \r
-# will show members with their full class and namespace scopes in the \r
-# documentation. If set to YES the scope will be hidden.\r
-\r
-HIDE_SCOPE_NAMES       = NO\r
-\r
-# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen \r
-# will put a list of the files that are included by a file in the documentation \r
-# of that file.\r
-\r
-SHOW_INCLUDE_FILES     = YES\r
-\r
-# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] \r
-# is inserted in the documentation for inline members.\r
-\r
-INLINE_INFO            = YES\r
-\r
-# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen \r
-# will sort the (detailed) documentation of file and class members \r
-# alphabetically by member name. If set to NO the members will appear in \r
-# declaration order.\r
-\r
-SORT_MEMBER_DOCS       = YES\r
-\r
-# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the \r
-# brief documentation of file, namespace and class members alphabetically \r
-# by member name. If set to NO (the default) the members will appear in \r
-# declaration order.\r
-\r
-SORT_BRIEF_DOCS        = NO\r
-\r
-# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the \r
-# hierarchy of group names into alphabetical order. If set to NO (the default) \r
-# the group names will appear in their defined order.\r
-\r
-SORT_GROUP_NAMES       = NO\r
-\r
-# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be \r
-# sorted by fully-qualified names, including namespaces. If set to \r
-# NO (the default), the class list will be sorted only by class name, \r
-# not including the namespace part. \r
-# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.\r
-# Note: This option applies only to the class list, not to the \r
-# alphabetical list.\r
-\r
-SORT_BY_SCOPE_NAME     = NO\r
-\r
-# The GENERATE_TODOLIST tag can be used to enable (YES) or \r
-# disable (NO) the todo list. This list is created by putting \todo \r
-# commands in the documentation.\r
-\r
-GENERATE_TODOLIST      = NO\r
-\r
-# The GENERATE_TESTLIST tag can be used to enable (YES) or \r
-# disable (NO) the test list. This list is created by putting \test \r
-# commands in the documentation.\r
-\r
-GENERATE_TESTLIST      = NO\r
-\r
-# The GENERATE_BUGLIST tag can be used to enable (YES) or \r
-# disable (NO) the bug list. This list is created by putting \bug \r
-# commands in the documentation.\r
-\r
-GENERATE_BUGLIST       = NO\r
-\r
-# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or \r
-# disable (NO) the deprecated list. This list is created by putting \r
-# \deprecated commands in the documentation.\r
-\r
-GENERATE_DEPRECATEDLIST= YES\r
-\r
-# The ENABLED_SECTIONS tag can be used to enable conditional \r
-# documentation sections, marked by \if sectionname ... \endif.\r
-\r
-ENABLED_SECTIONS       = \r
-\r
-# The MAX_INITIALIZER_LINES tag determines the maximum number of lines \r
-# the initial value of a variable or define consists of for it to appear in \r
-# the documentation. If the initializer consists of more lines than specified \r
-# here it will be hidden. Use a value of 0 to hide initializers completely. \r
-# The appearance of the initializer of individual variables and defines in the \r
-# documentation can be controlled using \showinitializer or \hideinitializer \r
-# command in the documentation regardless of this setting.\r
-\r
-MAX_INITIALIZER_LINES  = 30\r
-\r
-# Set the SHOW_USED_FILES tag to NO to disable the list of files generated \r
-# at the bottom of the documentation of classes and structs. If set to YES the \r
-# list will mention the files that were used to generate the documentation.\r
-\r
-SHOW_USED_FILES        = YES\r
-\r
-# If the sources in your project are distributed over multiple directories \r
-# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy \r
-# in the documentation. The default is NO.\r
-\r
-SHOW_DIRECTORIES       = YES\r
-\r
-# Set the SHOW_FILES tag to NO to disable the generation of the Files page.\r
-# This will remove the Files entry from the Quick Index and from the \r
-# Folder Tree View (if specified). The default is YES.\r
-\r
-SHOW_FILES             = YES\r
-\r
-# Set the SHOW_NAMESPACES tag to NO to disable the generation of the \r
-# Namespaces page.  This will remove the Namespaces entry from the Quick Index\r
-# and from the Folder Tree View (if specified). The default is YES.\r
-\r
-SHOW_NAMESPACES        = YES\r
-\r
-# The FILE_VERSION_FILTER tag can be used to specify a program or script that \r
-# doxygen should invoke to get the current version for each file (typically from \r
-# the version control system). Doxygen will invoke the program by executing (via \r
-# popen()) the command <command> <input-file>, where <command> is the value of \r
-# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file \r
-# provided by doxygen. Whatever the program writes to standard output \r
-# is used as the file version. See the manual for examples.\r
-\r
-FILE_VERSION_FILTER    = \r
-\r
-# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by \r
-# doxygen. The layout file controls the global structure of the generated output files \r
-# in an output format independent way. The create the layout file that represents \r
-# doxygen's defaults, run doxygen with the -l option. You can optionally specify a \r
-# file name after the option, if omitted DoxygenLayout.xml will be used as the name \r
-# of the layout file.\r
-\r
-LAYOUT_FILE            = \r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to warning and progress messages\r
-#---------------------------------------------------------------------------\r
-\r
-# The QUIET tag can be used to turn on/off the messages that are generated \r
-# by doxygen. Possible values are YES and NO. If left blank NO is used.\r
-\r
-QUIET                  = YES\r
-\r
-# The WARNINGS tag can be used to turn on/off the warning messages that are \r
-# generated by doxygen. Possible values are YES and NO. If left blank \r
-# NO is used.\r
-\r
-WARNINGS               = YES\r
-\r
-# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings \r
-# for undocumented members. If EXTRACT_ALL is set to YES then this flag will \r
-# automatically be disabled.\r
-\r
-WARN_IF_UNDOCUMENTED   = YES\r
-\r
-# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for \r
-# potential errors in the documentation, such as not documenting some \r
-# parameters in a documented function, or documenting parameters that \r
-# don't exist or using markup commands wrongly.\r
-\r
-WARN_IF_DOC_ERROR      = YES\r
-\r
-# This WARN_NO_PARAMDOC option can be abled to get warnings for \r
-# functions that are documented, but have no documentation for their parameters \r
-# or return value. If set to NO (the default) doxygen will only warn about \r
-# wrong or incomplete parameter documentation, but not about the absence of \r
-# documentation.\r
-\r
-WARN_NO_PARAMDOC       = YES\r
-\r
-# The WARN_FORMAT tag determines the format of the warning messages that \r
-# doxygen can produce. The string should contain the $file, $line, and $text \r
-# tags, which will be replaced by the file and line number from which the \r
-# warning originated and the warning text. Optionally the format may contain \r
-# $version, which will be replaced by the version of the file (if it could \r
-# be obtained via FILE_VERSION_FILTER)\r
-\r
-WARN_FORMAT            = "$file:$line: $text"\r
-\r
-# The WARN_LOGFILE tag can be used to specify a file to which warning \r
-# and error messages should be written. If left blank the output is written \r
-# to stderr.\r
-\r
-WARN_LOGFILE           = \r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the input files\r
-#---------------------------------------------------------------------------\r
-\r
-# The INPUT tag can be used to specify the files and/or directories that contain \r
-# documented source files. You may enter file names like "myfile.cpp" or \r
-# directories like "/usr/src/myproject". Separate the files or directories \r
-# with spaces.\r
-\r
-INPUT                  = ./\r
-\r
-# This tag can be used to specify the character encoding of the source files \r
-# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is \r
-# also the default input encoding. Doxygen uses libiconv (or the iconv built \r
-# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for \r
-# the list of possible encodings.\r
-\r
-INPUT_ENCODING         = UTF-8\r
-\r
-# If the value of the INPUT tag contains directories, you can use the \r
-# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \r
-# and *.h) to filter out the source-files in the directories. If left \r
-# blank the following patterns are tested: \r
-# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx \r
-# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90\r
-\r
-FILE_PATTERNS          = *.h \\r
-                         *.c \\r
-                                                *.txt\r
-\r
-# The RECURSIVE tag can be used to turn specify whether or not subdirectories \r
-# should be searched for input files as well. Possible values are YES and NO. \r
-# If left blank NO is used.\r
-\r
-RECURSIVE              = YES\r
-\r
-# The EXCLUDE tag can be used to specify files and/or directories that should \r
-# excluded from the INPUT source files. This way you can easily exclude a \r
-# subdirectory from a directory tree whose root is specified with the INPUT tag.\r
-\r
-EXCLUDE                = \r
-\r
-# The EXCLUDE_SYMLINKS tag can be used select whether or not files or \r
-# directories that are symbolic links (a Unix filesystem feature) are excluded \r
-# from the input.\r
-\r
-EXCLUDE_SYMLINKS       = NO\r
-\r
-# If the value of the INPUT tag contains directories, you can use the \r
-# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude \r
-# certain files from those directories. Note that the wildcards are matched \r
-# against the file with absolute path, so to exclude all test directories \r
-# for example use the pattern */test/*\r
-\r
-EXCLUDE_PATTERNS       = */LowLevel/USBMode.h\r
-\r
-# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names \r
-# (namespaces, classes, functions, etc.) that should be excluded from the \r
-# output. The symbol name can be a fully qualified name, a word, or if the \r
-# wildcard * is used, a substring. Examples: ANamespace, AClass, \r
-# AClass::ANamespace, ANamespace::*Test\r
-\r
-EXCLUDE_SYMBOLS        = __*\r
-\r
-# The EXAMPLE_PATH tag can be used to specify one or more files or \r
-# directories that contain example code fragments that are included (see \r
-# the \include command).\r
-\r
-EXAMPLE_PATH           = \r
-\r
-# If the value of the EXAMPLE_PATH tag contains directories, you can use the \r
-# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \r
-# and *.h) to filter out the source-files in the directories. If left \r
-# blank all files are included.\r
-\r
-EXAMPLE_PATTERNS       = *\r
-\r
-# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be \r
-# searched for input files to be used with the \include or \dontinclude \r
-# commands irrespective of the value of the RECURSIVE tag. \r
-# Possible values are YES and NO. If left blank NO is used.\r
-\r
-EXAMPLE_RECURSIVE      = NO\r
-\r
-# The IMAGE_PATH tag can be used to specify one or more files or \r
-# directories that contain image that are included in the documentation (see \r
-# the \image command).\r
-\r
-IMAGE_PATH             = \r
-\r
-# The INPUT_FILTER tag can be used to specify a program that doxygen should \r
-# invoke to filter for each input file. Doxygen will invoke the filter program \r
-# by executing (via popen()) the command <filter> <input-file>, where <filter> \r
-# is the value of the INPUT_FILTER tag, and <input-file> is the name of an \r
-# input file. Doxygen will then use the output that the filter program writes \r
-# to standard output.  If FILTER_PATTERNS is specified, this tag will be \r
-# ignored.\r
-\r
-INPUT_FILTER           = \r
-\r
-# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern \r
-# basis.  Doxygen will compare the file name with each pattern and apply the \r
-# filter if there is a match.  The filters are a list of the form: \r
-# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further \r
-# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER \r
-# is applied to all files.\r
-\r
-FILTER_PATTERNS        = \r
-\r
-# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using \r
-# INPUT_FILTER) will be used to filter the input files when producing source \r
-# files to browse (i.e. when SOURCE_BROWSER is set to YES).\r
-\r
-FILTER_SOURCE_FILES    = NO\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to source browsing\r
-#---------------------------------------------------------------------------\r
-\r
-# If the SOURCE_BROWSER tag is set to YES then a list of source files will \r
-# be generated. Documented entities will be cross-referenced with these sources. \r
-# Note: To get rid of all source code in the generated output, make sure also \r
-# VERBATIM_HEADERS is set to NO.\r
-\r
-SOURCE_BROWSER         = NO\r
-\r
-# Setting the INLINE_SOURCES tag to YES will include the body \r
-# of functions and classes directly in the documentation.\r
-\r
-INLINE_SOURCES         = NO\r
-\r
-# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct \r
-# doxygen to hide any special comment blocks from generated source code \r
-# fragments. Normal C and C++ comments will always remain visible.\r
-\r
-STRIP_CODE_COMMENTS    = YES\r
-\r
-# If the REFERENCED_BY_RELATION tag is set to YES \r
-# then for each documented function all documented \r
-# functions referencing it will be listed.\r
-\r
-REFERENCED_BY_RELATION = NO\r
-\r
-# If the REFERENCES_RELATION tag is set to YES \r
-# then for each documented function all documented entities \r
-# called/used by that function will be listed.\r
-\r
-REFERENCES_RELATION    = NO\r
-\r
-# If the REFERENCES_LINK_SOURCE tag is set to YES (the default)\r
-# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from\r
-# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will\r
-# link to the source code.  Otherwise they will link to the documentstion.\r
-\r
-REFERENCES_LINK_SOURCE = NO\r
-\r
-# If the USE_HTAGS tag is set to YES then the references to source code \r
-# will point to the HTML generated by the htags(1) tool instead of doxygen \r
-# built-in source browser. The htags tool is part of GNU's global source \r
-# tagging system (see http://www.gnu.org/software/global/global.html). You \r
-# will need version 4.8.6 or higher.\r
-\r
-USE_HTAGS              = NO\r
-\r
-# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen \r
-# will generate a verbatim copy of the header file for each class for \r
-# which an include is specified. Set to NO to disable this.\r
-\r
-VERBATIM_HEADERS       = NO\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the alphabetical class index\r
-#---------------------------------------------------------------------------\r
-\r
-# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index \r
-# of all compounds will be generated. Enable this if the project \r
-# contains a lot of classes, structs, unions or interfaces.\r
-\r
-ALPHABETICAL_INDEX     = YES\r
-\r
-# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then \r
-# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns \r
-# in which this list will be split (can be a number in the range [1..20])\r
-\r
-COLS_IN_ALPHA_INDEX    = 5\r
-\r
-# In case all classes in a project start with a common prefix, all \r
-# classes will be put under the same header in the alphabetical index. \r
-# The IGNORE_PREFIX tag can be used to specify one or more prefixes that \r
-# should be ignored while generating the index headers.\r
-\r
-IGNORE_PREFIX          = \r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the HTML output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_HTML tag is set to YES (the default) Doxygen will \r
-# generate HTML output.\r
-\r
-GENERATE_HTML          = YES\r
-\r
-# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. \r
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
-# put in front of it. If left blank `html' will be used as the default path.\r
-\r
-HTML_OUTPUT            = html\r
-\r
-# The HTML_FILE_EXTENSION tag can be used to specify the file extension for \r
-# each generated HTML page (for example: .htm,.php,.asp). If it is left blank \r
-# doxygen will generate files with .html extension.\r
-\r
-HTML_FILE_EXTENSION    = .html\r
-\r
-# The HTML_HEADER tag can be used to specify a personal HTML header for \r
-# each generated HTML page. If it is left blank doxygen will generate a \r
-# standard header.\r
-\r
-HTML_HEADER            = \r
-\r
-# The HTML_FOOTER tag can be used to specify a personal HTML footer for \r
-# each generated HTML page. If it is left blank doxygen will generate a \r
-# standard footer.\r
-\r
-HTML_FOOTER            = \r
-\r
-# The HTML_STYLESHEET tag can be used to specify a user-defined cascading \r
-# style sheet that is used by each HTML page. It can be used to \r
-# fine-tune the look of the HTML output. If the tag is left blank doxygen \r
-# will generate a default style sheet. Note that doxygen will try to copy \r
-# the style sheet file to the HTML output directory, so don't put your own \r
-# stylesheet in the HTML output directory as well, or it will be erased!\r
-\r
-HTML_STYLESHEET        = \r
-\r
-# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, \r
-# files or namespaces will be aligned in HTML using tables. If set to \r
-# NO a bullet list will be used.\r
-\r
-HTML_ALIGN_MEMBERS     = YES\r
-\r
-# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML \r
-# documentation will contain sections that can be hidden and shown after the \r
-# page has loaded. For this to work a browser that supports \r
-# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox \r
-# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari).\r
-\r
-HTML_DYNAMIC_SECTIONS  = YES\r
-\r
-# If the GENERATE_DOCSET tag is set to YES, additional index files \r
-# will be generated that can be used as input for Apple's Xcode 3 \r
-# integrated development environment, introduced with OSX 10.5 (Leopard). \r
-# To create a documentation set, doxygen will generate a Makefile in the \r
-# HTML output directory. Running make will produce the docset in that \r
-# directory and running "make install" will install the docset in \r
-# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find \r
-# it at startup. \r
-# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information.\r
-\r
-GENERATE_DOCSET        = NO\r
-\r
-# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the \r
-# feed. A documentation feed provides an umbrella under which multiple \r
-# documentation sets from a single provider (such as a company or product suite) \r
-# can be grouped.\r
-\r
-DOCSET_FEEDNAME        = "Doxygen generated docs"\r
-\r
-# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that \r
-# should uniquely identify the documentation set bundle. This should be a \r
-# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen \r
-# will append .docset to the name.\r
-\r
-DOCSET_BUNDLE_ID       = org.doxygen.Project\r
-\r
-# If the GENERATE_HTMLHELP tag is set to YES, additional index files \r
-# will be generated that can be used as input for tools like the \r
-# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) \r
-# of the generated HTML documentation.\r
-\r
-GENERATE_HTMLHELP      = NO\r
-\r
-# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can \r
-# be used to specify the file name of the resulting .chm file. You \r
-# can add a path in front of the file if the result should not be \r
-# written to the html output directory.\r
-\r
-CHM_FILE               = \r
-\r
-# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can \r
-# be used to specify the location (absolute path including file name) of \r
-# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run \r
-# the HTML help compiler on the generated index.hhp.\r
-\r
-HHC_LOCATION           = \r
-\r
-# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag \r
-# controls if a separate .chi index file is generated (YES) or that \r
-# it should be included in the master .chm file (NO).\r
-\r
-GENERATE_CHI           = NO\r
-\r
-# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING\r
-# is used to encode HtmlHelp index (hhk), content (hhc) and project file\r
-# content.\r
-\r
-CHM_INDEX_ENCODING     = \r
-\r
-# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag \r
-# controls whether a binary table of contents is generated (YES) or a \r
-# normal table of contents (NO) in the .chm file.\r
-\r
-BINARY_TOC             = NO\r
-\r
-# The TOC_EXPAND flag can be set to YES to add extra items for group members \r
-# to the contents of the HTML help documentation and to the tree view.\r
-\r
-TOC_EXPAND             = YES\r
-\r
-# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER \r
-# are set, an additional index file will be generated that can be used as input for \r
-# Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated \r
-# HTML documentation.\r
-\r
-GENERATE_QHP           = NO\r
-\r
-# If the QHG_LOCATION tag is specified, the QCH_FILE tag can \r
-# be used to specify the file name of the resulting .qch file. \r
-# The path specified is relative to the HTML output folder.\r
-\r
-QCH_FILE               = \r
-\r
-# The QHP_NAMESPACE tag specifies the namespace to use when generating \r
-# Qt Help Project output. For more information please see \r
-# <a href="http://doc.trolltech.com/qthelpproject.html#namespace">Qt Help Project / Namespace</a>.\r
-\r
-QHP_NAMESPACE          = org.doxygen.Project\r
-\r
-# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating \r
-# Qt Help Project output. For more information please see \r
-# <a href="http://doc.trolltech.com/qthelpproject.html#virtual-folders">Qt Help Project / Virtual Folders</a>.\r
-\r
-QHP_VIRTUAL_FOLDER     = doc\r
-\r
-# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can \r
-# be used to specify the location of Qt's qhelpgenerator. \r
-# If non-empty doxygen will try to run qhelpgenerator on the generated \r
-# .qhp file .\r
-\r
-QHG_LOCATION           = \r
-\r
-# The DISABLE_INDEX tag can be used to turn on/off the condensed index at \r
-# top of each HTML page. The value NO (the default) enables the index and \r
-# the value YES disables it.\r
-\r
-DISABLE_INDEX          = NO\r
-\r
-# This tag can be used to set the number of enum values (range [1..20]) \r
-# that doxygen will group on one line in the generated HTML documentation.\r
-\r
-ENUM_VALUES_PER_LINE   = 1\r
-\r
-# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index\r
-# structure should be generated to display hierarchical information.\r
-# If the tag value is set to FRAME, a side panel will be generated\r
-# containing a tree-like index structure (just like the one that \r
-# is generated for HTML Help). For this to work a browser that supports \r
-# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, \r
-# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are \r
-# probably better off using the HTML help feature. Other possible values \r
-# for this tag are: HIERARCHIES, which will generate the Groups, Directories,\r
-# and Class Hierarchy pages using a tree view instead of an ordered list;\r
-# ALL, which combines the behavior of FRAME and HIERARCHIES; and NONE, which\r
-# disables this behavior completely. For backwards compatibility with previous\r
-# releases of Doxygen, the values YES and NO are equivalent to FRAME and NONE\r
-# respectively.\r
-\r
-GENERATE_TREEVIEW      = YES\r
-\r
-# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be \r
-# used to set the initial width (in pixels) of the frame in which the tree \r
-# is shown.\r
-\r
-TREEVIEW_WIDTH         = 250\r
-\r
-# Use this tag to change the font size of Latex formulas included \r
-# as images in the HTML documentation. The default is 10. Note that \r
-# when you change the font size after a successful doxygen run you need \r
-# to manually remove any form_*.png images from the HTML output directory \r
-# to force them to be regenerated.\r
-\r
-FORMULA_FONTSIZE       = 10\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the LaTeX output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will \r
-# generate Latex output.\r
-\r
-GENERATE_LATEX         = NO\r
-\r
-# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. \r
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
-# put in front of it. If left blank `latex' will be used as the default path.\r
-\r
-LATEX_OUTPUT           = latex\r
-\r
-# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be \r
-# invoked. If left blank `latex' will be used as the default command name.\r
-\r
-LATEX_CMD_NAME         = latex\r
-\r
-# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to \r
-# generate index for LaTeX. If left blank `makeindex' will be used as the \r
-# default command name.\r
-\r
-MAKEINDEX_CMD_NAME     = makeindex\r
-\r
-# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact \r
-# LaTeX documents. This may be useful for small projects and may help to \r
-# save some trees in general.\r
-\r
-COMPACT_LATEX          = NO\r
-\r
-# The PAPER_TYPE tag can be used to set the paper type that is used \r
-# by the printer. Possible values are: a4, a4wide, letter, legal and \r
-# executive. If left blank a4wide will be used.\r
-\r
-PAPER_TYPE             = a4wide\r
-\r
-# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX \r
-# packages that should be included in the LaTeX output.\r
-\r
-EXTRA_PACKAGES         = \r
-\r
-# The LATEX_HEADER tag can be used to specify a personal LaTeX header for \r
-# the generated latex document. The header should contain everything until \r
-# the first chapter. If it is left blank doxygen will generate a \r
-# standard header. Notice: only use this tag if you know what you are doing!\r
-\r
-LATEX_HEADER           = \r
-\r
-# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated \r
-# is prepared for conversion to pdf (using ps2pdf). The pdf file will \r
-# contain links (just like the HTML output) instead of page references \r
-# This makes the output suitable for online browsing using a pdf viewer.\r
-\r
-PDF_HYPERLINKS         = YES\r
-\r
-# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of \r
-# plain latex in the generated Makefile. Set this option to YES to get a \r
-# higher quality PDF documentation.\r
-\r
-USE_PDFLATEX           = YES\r
-\r
-# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. \r
-# command to the generated LaTeX files. This will instruct LaTeX to keep \r
-# running if errors occur, instead of asking the user for help. \r
-# This option is also used when generating formulas in HTML.\r
-\r
-LATEX_BATCHMODE        = NO\r
-\r
-# If LATEX_HIDE_INDICES is set to YES then doxygen will not \r
-# include the index chapters (such as File Index, Compound Index, etc.) \r
-# in the output.\r
-\r
-LATEX_HIDE_INDICES     = NO\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the RTF output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output \r
-# The RTF output is optimized for Word 97 and may not look very pretty with \r
-# other RTF readers or editors.\r
-\r
-GENERATE_RTF           = NO\r
-\r
-# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. \r
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
-# put in front of it. If left blank `rtf' will be used as the default path.\r
-\r
-RTF_OUTPUT             = rtf\r
-\r
-# If the COMPACT_RTF tag is set to YES Doxygen generates more compact \r
-# RTF documents. This may be useful for small projects and may help to \r
-# save some trees in general.\r
-\r
-COMPACT_RTF            = NO\r
-\r
-# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated \r
-# will contain hyperlink fields. The RTF file will \r
-# contain links (just like the HTML output) instead of page references. \r
-# This makes the output suitable for online browsing using WORD or other \r
-# programs which support those fields. \r
-# Note: wordpad (write) and others do not support links.\r
-\r
-RTF_HYPERLINKS         = NO\r
-\r
-# Load stylesheet definitions from file. Syntax is similar to doxygen's \r
-# config file, i.e. a series of assignments. You only have to provide \r
-# replacements, missing definitions are set to their default value.\r
-\r
-RTF_STYLESHEET_FILE    = \r
-\r
-# Set optional variables used in the generation of an rtf document. \r
-# Syntax is similar to doxygen's config file.\r
-\r
-RTF_EXTENSIONS_FILE    = \r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the man page output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_MAN tag is set to YES (the default) Doxygen will \r
-# generate man pages\r
-\r
-GENERATE_MAN           = NO\r
-\r
-# The MAN_OUTPUT tag is used to specify where the man pages will be put. \r
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
-# put in front of it. If left blank `man' will be used as the default path.\r
-\r
-MAN_OUTPUT             = man\r
-\r
-# The MAN_EXTENSION tag determines the extension that is added to \r
-# the generated man pages (default is the subroutine's section .3)\r
-\r
-MAN_EXTENSION          = .3\r
-\r
-# If the MAN_LINKS tag is set to YES and Doxygen generates man output, \r
-# then it will generate one additional man file for each entity \r
-# documented in the real man page(s). These additional files \r
-# only source the real man page, but without them the man command \r
-# would be unable to find the correct page. The default is NO.\r
-\r
-MAN_LINKS              = NO\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the XML output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_XML tag is set to YES Doxygen will \r
-# generate an XML file that captures the structure of \r
-# the code including all documentation.\r
-\r
-GENERATE_XML           = NO\r
-\r
-# The XML_OUTPUT tag is used to specify where the XML pages will be put. \r
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
-# put in front of it. If left blank `xml' will be used as the default path.\r
-\r
-XML_OUTPUT             = xml\r
-\r
-# The XML_SCHEMA tag can be used to specify an XML schema, \r
-# which can be used by a validating XML parser to check the \r
-# syntax of the XML files.\r
-\r
-XML_SCHEMA             = \r
-\r
-# The XML_DTD tag can be used to specify an XML DTD, \r
-# which can be used by a validating XML parser to check the \r
-# syntax of the XML files.\r
-\r
-XML_DTD                = \r
-\r
-# If the XML_PROGRAMLISTING tag is set to YES Doxygen will \r
-# dump the program listings (including syntax highlighting \r
-# and cross-referencing information) to the XML output. Note that \r
-# enabling this will significantly increase the size of the XML output.\r
-\r
-XML_PROGRAMLISTING     = YES\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options for the AutoGen Definitions output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will \r
-# generate an AutoGen Definitions (see autogen.sf.net) file \r
-# that captures the structure of the code including all \r
-# documentation. Note that this feature is still experimental \r
-# and incomplete at the moment.\r
-\r
-GENERATE_AUTOGEN_DEF   = NO\r
-\r
-#---------------------------------------------------------------------------\r
-# configuration options related to the Perl module output\r
-#---------------------------------------------------------------------------\r
-\r
-# If the GENERATE_PERLMOD tag is set to YES Doxygen will \r
-# generate a Perl module file that captures the structure of \r
-# the code including all documentation. Note that this \r
-# feature is still experimental and incomplete at the \r
-# moment.\r
-\r
-GENERATE_PERLMOD       = NO\r
-\r
-# If the PERLMOD_LATEX tag is set to YES Doxygen will generate \r
-# the necessary Makefile rules, Perl scripts and LaTeX code to be able \r
-# to generate PDF and DVI output from the Perl module output.\r
-\r
-PERLMOD_LATEX          = NO\r
-\r
-# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be \r
-# nicely formatted so it can be parsed by a human reader.  This is useful \r
-# if you want to understand what is going on.  On the other hand, if this \r
-# tag is set to NO the size of the Perl module output will be much smaller \r
-# and Perl will parse it just the same.\r
-\r
-PERLMOD_PRETTY         = YES\r
-\r
-# The names of the make variables in the generated doxyrules.make file \r
-# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. \r
-# This is useful so different doxyrules.make files included by the same \r
-# Makefile don't overwrite each other's variables.\r
-\r
-PERLMOD_MAKEVAR_PREFIX = \r
-\r
-#---------------------------------------------------------------------------\r
-# Configuration options related to the preprocessor   \r
-#---------------------------------------------------------------------------\r
-\r
-# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will \r
-# evaluate all C-preprocessor directives found in the sources and include \r
-# files.\r
-\r
-ENABLE_PREPROCESSING   = YES\r
-\r
-# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro \r
-# names in the source code. If set to NO (the default) only conditional \r
-# compilation will be performed. Macro expansion can be done in a controlled \r
-# way by setting EXPAND_ONLY_PREDEF to YES.\r
-\r
-MACRO_EXPANSION        = YES\r
-\r
-# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES \r
-# then the macro expansion is limited to the macros specified with the \r
-# PREDEFINED and EXPAND_AS_DEFINED tags.\r
-\r
-EXPAND_ONLY_PREDEF     = YES\r
-\r
-# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files \r
-# in the INCLUDE_PATH (see below) will be search if a #include is found.\r
-\r
-SEARCH_INCLUDES        = YES\r
-\r
-# The INCLUDE_PATH tag can be used to specify one or more directories that \r
-# contain include files that are not input files but should be processed by \r
-# the preprocessor.\r
-\r
-INCLUDE_PATH           = \r
-\r
-# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard \r
-# patterns (like *.h and *.hpp) to filter out the header-files in the \r
-# directories. If left blank, the patterns specified with FILE_PATTERNS will \r
-# be used.\r
-\r
-INCLUDE_FILE_PATTERNS  = \r
-\r
-# The PREDEFINED tag can be used to specify one or more macro names that \r
-# are defined before the preprocessor is started (similar to the -D option of \r
-# gcc). The argument of the tag is a list of macros of the form: name \r
-# or name=definition (no spaces). If the definition and the = are \r
-# omitted =1 is assumed. To prevent a macro definition from being \r
-# undefined via #undef or recursively expanded use the := operator \r
-# instead of the = operator.\r
-\r
-PREDEFINED             = __DOXYGEN__\r
-\r
-# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then \r
-# this tag can be used to specify a list of macro names that should be expanded. \r
-# The macro definition that is found in the sources will be used. \r
-# Use the PREDEFINED tag if you want to use a different macro definition.\r
-\r
-EXPAND_AS_DEFINED      = BUTTLOADTAG\r
-\r
-# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then \r
-# doxygen's preprocessor will remove all function-like macros that are alone \r
-# on a line, have an all uppercase name, and do not end with a semicolon. Such \r
-# function macros are typically used for boiler-plate code, and will confuse \r
-# the parser if not removed.\r
-\r
-SKIP_FUNCTION_MACROS   = YES\r
-\r
-#---------------------------------------------------------------------------\r
-# Configuration::additions related to external references   \r
-#---------------------------------------------------------------------------\r
-\r
-# The TAGFILES option can be used to specify one or more tagfiles. \r
-# Optionally an initial location of the external documentation \r
-# can be added for each tagfile. The format of a tag file without \r
-# this location is as follows: \r
-#   TAGFILES = file1 file2 ... \r
-# Adding location for the tag files is done as follows: \r
-#   TAGFILES = file1=loc1 "file2 = loc2" ... \r
-# where "loc1" and "loc2" can be relative or absolute paths or \r
-# URLs. If a location is present for each tag, the installdox tool \r
-# does not have to be run to correct the links.\r
-# Note that each tag file must have a unique name\r
-# (where the name does NOT include the path)\r
-# If a tag file is not located in the directory in which doxygen \r
-# is run, you must also specify the path to the tagfile here.\r
-\r
-TAGFILES               = \r
-\r
-# When a file name is specified after GENERATE_TAGFILE, doxygen will create \r
-# a tag file that is based on the input files it reads.\r
-\r
-GENERATE_TAGFILE       = \r
-\r
-# If the ALLEXTERNALS tag is set to YES all external classes will be listed \r
-# in the class index. If set to NO only the inherited external classes \r
-# will be listed.\r
-\r
-ALLEXTERNALS           = NO\r
-\r
-# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed \r
-# in the modules index. If set to NO, only the current project's groups will \r
-# be listed.\r
-\r
-EXTERNAL_GROUPS        = YES\r
-\r
-# The PERL_PATH should be the absolute path and name of the perl script \r
-# interpreter (i.e. the result of `which perl').\r
-\r
-PERL_PATH              = /usr/bin/perl\r
-\r
-#---------------------------------------------------------------------------\r
-# Configuration options related to the dot tool   \r
-#---------------------------------------------------------------------------\r
-\r
-# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will \r
-# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base \r
-# or super classes. Setting the tag to NO turns the diagrams off. Note that \r
-# this option is superseded by the HAVE_DOT option below. This is only a \r
-# fallback. It is recommended to install and use dot, since it yields more \r
-# powerful graphs.\r
-\r
-CLASS_DIAGRAMS         = NO\r
-\r
-# You can define message sequence charts within doxygen comments using the \msc \r
-# command. Doxygen will then run the mscgen tool (see \r
-# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the \r
-# documentation. The MSCGEN_PATH tag allows you to specify the directory where \r
-# the mscgen tool resides. If left empty the tool is assumed to be found in the \r
-# default search path.\r
-\r
-MSCGEN_PATH            = \r
-\r
-# If set to YES, the inheritance and collaboration graphs will hide \r
-# inheritance and usage relations if the target is undocumented \r
-# or is not a class.\r
-\r
-HIDE_UNDOC_RELATIONS   = YES\r
-\r
-# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is \r
-# available from the path. This tool is part of Graphviz, a graph visualization \r
-# toolkit from AT&T and Lucent Bell Labs. The other options in this section \r
-# have no effect if this option is set to NO (the default)\r
-\r
-HAVE_DOT               = NO\r
-\r
-# By default doxygen will write a font called FreeSans.ttf to the output \r
-# directory and reference it in all dot files that doxygen generates. This \r
-# font does not include all possible unicode characters however, so when you need \r
-# these (or just want a differently looking font) you can specify the font name \r
-# using DOT_FONTNAME. You need need to make sure dot is able to find the font, \r
-# which can be done by putting it in a standard location or by setting the \r
-# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory \r
-# containing the font.\r
-\r
-DOT_FONTNAME           = FreeSans\r
-\r
-# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. \r
-# The default size is 10pt.\r
-\r
-DOT_FONTSIZE           = 10\r
-\r
-# By default doxygen will tell dot to use the output directory to look for the \r
-# FreeSans.ttf font (which doxygen will put there itself). If you specify a \r
-# different font using DOT_FONTNAME you can set the path where dot \r
-# can find it using this tag.\r
-\r
-DOT_FONTPATH           = \r
-\r
-# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen \r
-# will generate a graph for each documented class showing the direct and \r
-# indirect inheritance relations. Setting this tag to YES will force the \r
-# the CLASS_DIAGRAMS tag to NO.\r
-\r
-CLASS_GRAPH            = NO\r
-\r
-# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen \r
-# will generate a graph for each documented class showing the direct and \r
-# indirect implementation dependencies (inheritance, containment, and \r
-# class references variables) of the class with other documented classes.\r
-\r
-COLLABORATION_GRAPH    = NO\r
-\r
-# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen \r
-# will generate a graph for groups, showing the direct groups dependencies\r
-\r
-GROUP_GRAPHS           = NO\r
-\r
-# If the UML_LOOK tag is set to YES doxygen will generate inheritance and \r
-# collaboration diagrams in a style similar to the OMG's Unified Modeling \r
-# Language.\r
-\r
-UML_LOOK               = NO\r
-\r
-# If set to YES, the inheritance and collaboration graphs will show the \r
-# relations between templates and their instances.\r
-\r
-TEMPLATE_RELATIONS     = NO\r
-\r
-# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT \r
-# tags are set to YES then doxygen will generate a graph for each documented \r
-# file showing the direct and indirect include dependencies of the file with \r
-# other documented files.\r
-\r
-INCLUDE_GRAPH          = NO\r
-\r
-# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and \r
-# HAVE_DOT tags are set to YES then doxygen will generate a graph for each \r
-# documented header file showing the documented files that directly or \r
-# indirectly include this file.\r
-\r
-INCLUDED_BY_GRAPH      = NO\r
-\r
-# If the CALL_GRAPH and HAVE_DOT options are set to YES then \r
-# doxygen will generate a call dependency graph for every global function \r
-# or class method. Note that enabling this option will significantly increase \r
-# the time of a run. So in most cases it will be better to enable call graphs \r
-# for selected functions only using the \callgraph command.\r
-\r
-CALL_GRAPH             = NO\r
-\r
-# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then \r
-# doxygen will generate a caller dependency graph for every global function \r
-# or class method. Note that enabling this option will significantly increase \r
-# the time of a run. So in most cases it will be better to enable caller \r
-# graphs for selected functions only using the \callergraph command.\r
-\r
-CALLER_GRAPH           = NO\r
-\r
-# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen \r
-# will graphical hierarchy of all classes instead of a textual one.\r
-\r
-GRAPHICAL_HIERARCHY    = NO\r
-\r
-# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES \r
-# then doxygen will show the dependencies a directory has on other directories \r
-# in a graphical way. The dependency relations are determined by the #include\r
-# relations between the files in the directories.\r
-\r
-DIRECTORY_GRAPH        = NO\r
-\r
-# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images \r
-# generated by dot. Possible values are png, jpg, or gif\r
-# If left blank png will be used.\r
-\r
-DOT_IMAGE_FORMAT       = png\r
-\r
-# The tag DOT_PATH can be used to specify the path where the dot tool can be \r
-# found. If left blank, it is assumed the dot tool can be found in the path.\r
-\r
-DOT_PATH               = "C:/Program Files/Graphviz2.18/bin"\r
-\r
-# The DOTFILE_DIRS tag can be used to specify one or more directories that \r
-# contain dot files that are included in the documentation (see the \r
-# \dotfile command).\r
-\r
-DOTFILE_DIRS           = \r
-\r
-# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of \r
-# nodes that will be shown in the graph. If the number of nodes in a graph \r
-# becomes larger than this value, doxygen will truncate the graph, which is \r
-# visualized by representing a node as a red box. Note that doxygen if the \r
-# number of direct children of the root node in a graph is already larger than \r
-# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note \r
-# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.\r
-\r
-DOT_GRAPH_MAX_NODES    = 15\r
-\r
-# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the \r
-# graphs generated by dot. A depth value of 3 means that only nodes reachable \r
-# from the root by following a path via at most 3 edges will be shown. Nodes \r
-# that lay further from the root node will be omitted. Note that setting this \r
-# option to 1 or 2 may greatly reduce the computation time needed for large \r
-# code bases. Also note that the size of a graph can be further restricted by \r
-# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.\r
-\r
-MAX_DOT_GRAPH_DEPTH    = 2\r
-\r
-# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent \r
-# background. This is disabled by default, because dot on Windows does not \r
-# seem to support this out of the box. Warning: Depending on the platform used, \r
-# enabling this option may lead to badly anti-aliased labels on the edges of \r
-# a graph (i.e. they become hard to read).\r
-\r
-DOT_TRANSPARENT        = YES\r
-\r
-# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output \r
-# files in one run (i.e. multiple -o and -T options on the command line). This \r
-# makes dot run faster, but since only newer versions of dot (>1.8.10) \r
-# support this, this feature is disabled by default.\r
-\r
-DOT_MULTI_TARGETS      = NO\r
-\r
-# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will \r
-# generate a legend page explaining the meaning of the various boxes and \r
-# arrows in the dot generated graphs.\r
-\r
-GENERATE_LEGEND        = YES\r
-\r
-# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will \r
-# remove the intermediate dot files that are used to generate \r
-# the various graphs.\r
-\r
-DOT_CLEANUP            = YES\r
-\r
-#---------------------------------------------------------------------------\r
-# Configuration::additions related to the search engine   \r
-#---------------------------------------------------------------------------\r
-\r
-# The SEARCHENGINE tag specifies whether or not a search engine should be \r
-# used. If set to NO the values of all tags below this one will be ignored.\r
-\r
-SEARCHENGINE           = NO\r
diff --git a/Demos/Device/USBtoSerial/LUFA USBtoSerial.inf b/Demos/Device/USBtoSerial/LUFA USBtoSerial.inf
deleted file mode 100644 (file)
index bd9c8bf..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-;  Windows LUFA USB to Serial Setup File\r
-; Copyright (c) 2000 Microsoft Corporation\r
-\r
-[Version] \r
-Signature="$Windows NT$" \r
-Class=Ports\r
-ClassGuid={4D36E978-E325-11CE-BFC1-08002BE10318} \r
-Provider=%COMPANY% \r
-LayoutFile=layout.inf\r
-DriverVer=06/06/2006,1.0.0.0\r
-\r
-[Manufacturer] \r
-%MFGNAME% = ManufName\r
-\r
-[DestinationDirs] \r
-DefaultDestDir=12 \r
-\r
-[ManufName] \r
-%Modem3% = Modem3, USB\VID_03EB&PID_204B\r
-\r
-;------------------------------------------------------------------------------\r
-;  Windows 2000/XP Sections\r
-;------------------------------------------------------------------------------\r
-\r
-[Modem3.nt]\r
-CopyFiles=USBModemCopyFileSection\r
-AddReg=Modem3.nt.AddReg \r
-\r
-[USBModemCopyFileSection]\r
-usbser.sys,,,0x20\r
-\r
-[Modem3.nt.AddReg] \r
-HKR,,DevLoader,,*ntkern \r
-HKR,,NTMPDriver,,usbser.sys \r
-HKR,,EnumPropPages32,,"MsPorts.dll,SerialPortPropPageProvider" \r
-\r
-[Modem3.nt.Services] \r
-AddService=usbser, 0x00000002, DriverService\r
-\r
-[DriverService] \r
-DisplayName=%SERVICE%\r
-ServiceType=1\r
-StartType=3\r
-ErrorControl=1\r
-ServiceBinary=%12%\usbser.sys \r
-\r
-;------------------------------------------------------------------------------\r
-;  String Definitions\r
-;------------------------------------------------------------------------------\r
-\r
-[Strings] \r
-COMPANY="LUFA Library"\r
-MFGNAME="Dean Camera"\r
-Modem3="USB Virtual Serial Port" \r
-SERVICE="USB Virtual Serial Port CDC Driver"
\ No newline at end of file
diff --git a/Demos/Device/USBtoSerial/Lib/RingBuff.c b/Demos/Device/USBtoSerial/Lib/RingBuff.c
deleted file mode 100644 (file)
index 1f477f1..0000000
+++ /dev/null
@@ -1,120 +0,0 @@
-/*\r
-             LUFA Library\r
-     Copyright (C) Dean Camera, 2009.\r
-              \r
-  dean [at] fourwalledcubicle [dot] com\r
-      www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
-  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
-  Permission to use, copy, modify, and distribute this software\r
-  and its documentation for any purpose and without fee is hereby\r
-  granted, provided that the above copyright notice appear in all\r
-  copies and that both that the copyright notice and this\r
-  permission notice and warranty disclaimer appear in supporting\r
-  documentation, and that the name of the author not be used in\r
-  advertising or publicity pertaining to distribution of the\r
-  software without specific, written prior permission.\r
-\r
-  The author disclaim all warranties with regard to this\r
-  software, including all implied warranties of merchantability\r
-  and fitness.  In no event shall the author be liable for any\r
-  special, indirect or consequential damages or any damages\r
-  whatsoever resulting from loss of use, data or profits, whether\r
-  in an action of contract, negligence or other tortious action,\r
-  arising out of or in connection with the use or performance of\r
-  this software.\r
-*/\r
-\r
-#include "RingBuff.h"\r
-\r
-void Buffer_Initialize(RingBuff_t* Buffer)\r
-{\r
-       BUFF_ATOMIC_BLOCK\r
-       {\r
-               Buffer->InPtr    = (RingBuff_Data_t*)&Buffer->Buffer;\r
-               Buffer->OutPtr   = (RingBuff_Data_t*)&Buffer->Buffer;\r
-               Buffer->Elements = 0;\r
-       }\r
-}\r
-\r
-void Buffer_StoreElement(RingBuff_t* Buffer, RingBuff_Data_t Data)\r
-{\r
-       BUFF_ATOMIC_BLOCK\r
-       {\r
-       #if defined(BUFF_DROPOLD)\r
-               if (Buffer->Elements == BUFF_LENGTH)\r
-               {\r
-                       Buffer->OutPtr++;\r
-       \r
-                       if (Buffer->OutPtr == &Buffer->Buffer[BUFF_LENGTH])\r
-                         Buffer->OutPtr = (RingBuff_Data_t*)&Buffer->Buffer;\r
-               }\r
-               else\r
-               {\r
-                       Buffer->Elements++;\r
-               }\r
-       #elif defined(BUFF_DROPNEW)\r
-               if (Buffer->Elements == BUFF_LENGTH)\r
-                 return;\r
-       \r
-                 Buffer->Elements++;\r
-       #elif defined(BUFF_NODROPCHECK)\r
-                 Buffer->Elements++;\r
-       #endif\r
-       \r
-               *(Buffer->InPtr) = Data;\r
-               Buffer->InPtr++;\r
-       \r
-               if (Buffer->InPtr == &Buffer->Buffer[BUFF_LENGTH])\r
-                 Buffer->InPtr = (RingBuff_Data_t*)&Buffer->Buffer;\r
-       }\r
-}\r
-\r
-RingBuff_Data_t Buffer_GetElement(RingBuff_t* Buffer)\r
-{\r
-       RingBuff_Data_t BuffData;\r
-       \r
-       BUFF_ATOMIC_BLOCK\r
-       {\r
-#if defined(BUFF_EMPTYRETURNSZERO)\r
-               if (!(Buffer->Elements))\r
-                 return 0;\r
-#elif !defined(BUFF_NOEMPTYCHECK)\r
-       #error No empty buffer check behaviour specified.\r
-#endif\r
-\r
-               BuffData = *(Buffer->OutPtr);\r
-       \r
-               Buffer->OutPtr++;\r
-               Buffer->Elements--;\r
-       \r
-               if (Buffer->OutPtr == &Buffer->Buffer[BUFF_LENGTH])\r
-                 Buffer->OutPtr = (RingBuff_Data_t*)&Buffer->Buffer;\r
-       }\r
-       \r
-       return BuffData;\r
-}\r
-\r
-#if defined(BUFF_USEPEEK)\r
-RingBuff_Data_t Buffer_PeekElement(const RingBuff_t* Buffer)\r
-{\r
-       RingBuff_Data_t BuffData;\r
-\r
-       BUFF_ATOMIC_BLOCK\r
-       {\r
-#if defined(BUFF_EMPTYRETURNSZERO)\r
-               if (!(Buffer->Elements))\r
-                 return 0;\r
-#elif !defined(BUFF_NOEMPTYCHECK)\r
-       #error No empty buffer check behaviour specified.\r
-#endif\r
-\r
-               BuffData = *(Buffer->OutPtr);\r
-       }\r
-\r
-       return BuffData;\r
-}\r
-#endif\r
diff --git a/Demos/Device/USBtoSerial/Lib/RingBuff.h b/Demos/Device/USBtoSerial/Lib/RingBuff.h
deleted file mode 100644 (file)
index 23288d8..0000000
+++ /dev/null
@@ -1,116 +0,0 @@
-/*\r
-             LUFA Library\r
-     Copyright (C) Dean Camera, 2009.\r
-              \r
-  dean [at] fourwalledcubicle [dot] com\r
-      www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
-  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
-  Permission to use, copy, modify, and distribute this software\r
-  and its documentation for any purpose and without fee is hereby\r
-  granted, provided that the above copyright notice appear in all\r
-  copies and that both that the copyright notice and this\r
-  permission notice and warranty disclaimer appear in supporting\r
-  documentation, and that the name of the author not be used in\r
-  advertising or publicity pertaining to distribution of the\r
-  software without specific, written prior permission.\r
-\r
-  The author disclaim all warranties with regard to this\r
-  software, including all implied warranties of merchantability\r
-  and fitness.  In no event shall the author be liable for any\r
-  special, indirect or consequential damages or any damages\r
-  whatsoever resulting from loss of use, data or profits, whether\r
-  in an action of contract, negligence or other tortious action,\r
-  arising out of or in connection with the use or performance of\r
-  this software.\r
-*/\r
-\r
-/* Buffer Configuration: */\r
-   /* Buffer length - select static size of created ring buffers: */\r
-        #define BUFF_STATICSIZE 128      // Set to the static ring buffer size for all ring buffers (place size after define)\r
-\r
-   /* Volatile mode - uncomment to make buffers volatile, for use in ISRs, etc: */\r
-        #define BUFF_VOLATILE            // Uncomment to cause all ring buffers to become volatile (and atomic if multi-byte) in access\r
-\r
-   /* Drop mode - select behaviour when Buffer_StoreElement called on a full buffer: */\r
-     #define BUFF_DROPOLD             // Uncomment to cause full ring buffers to drop the oldest character to make space when full\r
-     // #define BUFF_DROPNEW          // Uncomment to cause full ring buffers to drop the new character when full\r
-     // #define BUFF_NODROPCHECK      // Uncomment to ignore full ring buffer checks - checking left to user!\r
-\r
-   /* Underflow behaviour - select behaviour when Buffer_GetElement is called with an empty ring buffer: */\r
-     //#define BUFF_EMPTYRETURNSZERO  // Uncomment to return 0 when an empty ring buffer is read\r
-     #define BUFF_NOEMPTYCHECK        // Uncomment to disable checking of empty ring buffers - checking left to user!\r
-       \r
-   /* Buffer storage type - set the datatype for the stored data */\r
-     #define BUFF_DATATYPE uint8_t    // Change to the data type that is going to be stored into the buffer\r
-       \r
-   /* Peek routine - uncomment to include the peek routine (fetches next byte without removing it from the buffer */\r
-     //#define BUFF_USEPEEK\r
-               \r
-#ifndef _RINGBUFF_H_\r
-#define _RINGBUFF_H_\r
-\r
-       /* Includes: */\r
-       #include <avr/io.h>\r
-       #include <avr/interrupt.h>\r
-       #include <util/atomic.h>\r
-       #include <limits.h>\r
-\r
-       #include <LUFA/Common/Common.h>\r
-\r
-       /* Defines and checks: */\r
-       #if defined(BUFF_STATICSIZE)\r
-               #define BUFF_LENGTH BUFF_STATICSIZE\r
-       #else\r
-               #error No buffer length specified!\r
-       #endif\r
-\r
-       #if !(defined(BUFF_DROPOLD) || defined(BUFF_DROPNEW) || defined(BUFF_NODROPCHECK))\r
-               #error No buffer drop mode specified.\r
-       #endif\r
-\r
-       #if !defined(BUFF_DATATYPE)\r
-               #error Ringbuffer storage data type not specified.\r
-       #endif\r
-\r
-       #if defined(BUFF_VOLATILE)\r
-               #define BUFF_MODE            volatile\r
-               #define BUFF_ATOMIC_BLOCK    ATOMIC_BLOCK(ATOMIC_RESTORESTATE)\r
-       #else\r
-               #define BUFF_MODE\r
-               #define BUFF_ATOMIC_BLOCK\r
-       #endif\r
-\r
-       #if (BUFF_STATICSIZE   > LONG_MAX)\r
-               #define RingBuff_Elements_t uint64_t\r
-       #elif (BUFF_STATICSIZE > INT_MAX)\r
-               #define RingBuff_Elements_t uint32_t\r
-       #elif (BUFF_STATICSIZE > CHAR_MAX)\r
-               #define RingBuff_Elements_t uint16_t\r
-       #else\r
-               #define RingBuff_Elements_t uint8_t\r
-       #endif\r
-       \r
-       /* Type Defines: */\r
-       typedef BUFF_DATATYPE RingBuff_Data_t;\r
-\r
-       typedef BUFF_MODE struct\r
-       {\r
-               RingBuff_Data_t      Buffer[BUFF_LENGTH];\r
-               RingBuff_Data_t*     InPtr;\r
-               RingBuff_Data_t*     OutPtr;\r
-               RingBuff_Elements_t  Elements;\r
-       } RingBuff_t;\r
-               \r
-       /* Function Prototypes: */\r
-       void            Buffer_Initialize(RingBuff_t* Buff);\r
-       void            Buffer_StoreElement(RingBuff_t* Buffer, RingBuff_Data_t Data);\r
-       RingBuff_Data_t Buffer_GetElement(RingBuff_t* Buffer);\r
-       #if defined(BUFF_USEPEEK)\r
-               RingBuff_Data_t Buffer_PeekElement(const RingBuff_t* Buffer);\r
-       #endif\r
-       \r
-#endif\r
diff --git a/Demos/Device/USBtoSerial/USBtoSerial.aps b/Demos/Device/USBtoSerial/USBtoSerial.aps
deleted file mode 100644 (file)
index 2db4f97..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<AVRStudio><MANAGEMENT><ProjectName>USBtoSerial</ProjectName><Created>30-Sep-2008 14:18:39</Created><LastEdit>30-Sep-2008 14:18:52</LastEdit><ICON>241</ICON><ProjectType>0</ProjectType><Created>30-Sep-2008 14:18:39</Created><Version>4</Version><Build>4, 14, 0, 589</Build><ProjectTypeName>AVR GCC</ProjectTypeName></MANAGEMENT><CODE_CREATION><ObjectFile></ObjectFile><EntryFile></EntryFile><SaveFolder>C:\Users\Dean\Documents\Electronics\Projects\WORK\MyUSBWORK\Demos\USBtoSerial\</SaveFolder></CODE_CREATION><DEBUG_TARGET><CURRENT_TARGET></CURRENT_TARGET><CURRENT_PART></CURRENT_PART><BREAKPOINTS></BREAKPOINTS><IO_EXPAND><HIDE>false</HIDE></IO_EXPAND><REGISTERNAMES><Register>R00</Register><Register>R01</Register><Register>R02</Register><Register>R03</Register><Register>R04</Register><Register>R05</Register><Register>R06</Register><Register>R07</Register><Register>R08</Register><Register>R09</Register><Register>R10</Register><Register>R11</Register><Register>R12</Register><Register>R13</Register><Register>R14</Register><Register>R15</Register><Register>R16</Register><Register>R17</Register><Register>R18</Register><Register>R19</Register><Register>R20</Register><Register>R21</Register><Register>R22</Register><Register>R23</Register><Register>R24</Register><Register>R25</Register><Register>R26</Register><Register>R27</Register><Register>R28</Register><Register>R29</Register><Register>R30</Register><Register>R31</Register></REGISTERNAMES><COM>Auto</COM><COMType>0</COMType><WATCHNUM>0</WATCHNUM><WATCHNAMES><Pane0></Pane0><Pane1></Pane1><Pane2></Pane2><Pane3></Pane3></WATCHNAMES><BreakOnTrcaeFull>0</BreakOnTrcaeFull></DEBUG_TARGET><Debugger><Triggers></Triggers></Debugger><AVRGCCPLUGIN><FILES><SOURCEFILE>Descriptors.c</SOURCEFILE><SOURCEFILE>RingBuff.c</SOURCEFILE><SOURCEFILE>USBtoSerial.c</SOURCEFILE><HEADERFILE>Descriptors.h</HEADERFILE><HEADERFILE>RingBuff.h</HEADERFILE><HEADERFILE>USBtoSerial.h</HEADERFILE><OTHERFILE>makefile</OTHERFILE></FILES><CONFIGS><CONFIG><NAME>default</NAME><USESEXTERNALMAKEFILE>YES</USESEXTERNALMAKEFILE><EXTERNALMAKEFILE>makefile</EXTERNALMAKEFILE><PART>atmega128</PART><HEX>1</HEX><LIST>1</LIST><MAP>1</MAP><OUTPUTFILENAME>USBtoSerial.elf</OUTPUTFILENAME><OUTPUTDIR>default\</OUTPUTDIR><ISDIRTY>1</ISDIRTY><OPTIONS/><INCDIRS/><LIBDIRS/><LIBS/><LINKOBJECTS/><OPTIONSFORALL>-Wall -gdwarf-2 -std=gnu99 -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums</OPTIONSFORALL><LINKEROPTIONS></LINKEROPTIONS><SEGMENTS/></CONFIG></CONFIGS><LASTCONFIG>default</LASTCONFIG><USES_WINAVR>1</USES_WINAVR><GCC_LOC>C:\WinAVR-20080512\bin\avr-gcc.exe</GCC_LOC><MAKE_LOC>C:\WinAVR-20080512\utils\bin\make.exe</MAKE_LOC></AVRGCCPLUGIN><IOView><usergroups/><sort sorted="0" column="0" ordername="0" orderaddress="0" ordergroup="0"/></IOView><Files></Files><Events><Bookmarks></Bookmarks></Events><Trace><Filters></Filters></Trace></AVRStudio>\r
diff --git a/Demos/Device/USBtoSerial/USBtoSerial.c b/Demos/Device/USBtoSerial/USBtoSerial.c
deleted file mode 100644 (file)
index 85826c2..0000000
+++ /dev/null
@@ -1,175 +0,0 @@
-/*\r
-             LUFA Library\r
-     Copyright (C) Dean Camera, 2009.\r
-              \r
-  dean [at] fourwalledcubicle [dot] com\r
-      www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
-  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
-  Permission to use, copy, modify, and distribute this software\r
-  and its documentation for any purpose and without fee is hereby\r
-  granted, provided that the above copyright notice appear in all\r
-  copies and that both that the copyright notice and this\r
-  permission notice and warranty disclaimer appear in supporting\r
-  documentation, and that the name of the author not be used in\r
-  advertising or publicity pertaining to distribution of the\r
-  software without specific, written prior permission.\r
-\r
-  The author disclaim all warranties with regard to this\r
-  software, including all implied warranties of merchantability\r
-  and fitness.  In no event shall the author be liable for any\r
-  special, indirect or consequential damages or any damages\r
-  whatsoever resulting from loss of use, data or profits, whether\r
-  in an action of contract, negligence or other tortious action,\r
-  arising out of or in connection with the use or performance of\r
-  this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- *  Main source file for the USBtoSerial demo. This file contains the main tasks of\r
- *  the demo and is responsible for the initial application hardware configuration.\r
- */\r
-\r
-#include "USBtoSerial.h"\r
-\r
-/** Circular buffer to hold data from the host before it is sent to the device via the serial port. */\r
-RingBuff_t Rx_Buffer;\r
-\r
-/** Circular buffer to hold data from the serial port before it is sent to the host. */\r
-RingBuff_t Tx_Buffer;\r
-\r
-/** LUFA CDC Class driver interface configuration and state information. This structure is\r
- *  passed to all CDC Class driver functions, so that multiple instances of the same class\r
- *  within a device can be differentiated from one another.\r
- */\r
-USB_ClassInfo_CDC_t VirtualSerial_CDC_Interface =\r
-       {\r
-               .ControlInterfaceNumber     = 0,\r
-\r
-               .DataINEndpointNumber       = CDC_TX_EPNUM,\r
-               .DataINEndpointSize         = CDC_TXRX_EPSIZE,\r
-\r
-               .DataOUTEndpointNumber      = CDC_RX_EPNUM,\r
-               .DataOUTEndpointSize        = CDC_TXRX_EPSIZE,\r
-\r
-               .NotificationEndpointNumber = CDC_NOTIFICATION_EPNUM,\r
-               .NotificationEndpointSize   = CDC_NOTIFICATION_EPSIZE,\r
-       };\r
-\r
-/** Main program entry point. This routine contains the overall program flow, including initial\r
- *  setup of all components and the main program loop.\r
- */\r
-int main(void)\r
-{\r
-       SetupHardware();\r
-       \r
-       Buffer_Initialize(&Rx_Buffer);\r
-       Buffer_Initialize(&Tx_Buffer);\r
-\r
-       LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);\r
-\r
-       for (;;)\r
-       {\r
-               for (uint8_t DataBytesRem = USB_CDC_BytesReceived(&VirtualSerial_CDC_Interface); DataBytesRem != 0; DataBytesRem--)\r
-               {\r
-                       if (!(BUFF_STATICSIZE - Rx_Buffer.Elements))\r
-                         break;\r
-                         \r
-                       Buffer_StoreElement(&Rx_Buffer, USB_CDC_ReceiveByte(&VirtualSerial_CDC_Interface));\r
-               }\r
-               \r
-               if (Tx_Buffer.Elements)\r
-                 USB_CDC_SendByte(&VirtualSerial_CDC_Interface, Buffer_GetElement(&Rx_Buffer));\r
-                 \r
-               if (Rx_Buffer.Elements)\r
-                 Serial_TxByte(Buffer_GetElement(&Rx_Buffer));\r
-               \r
-               USB_CDC_USBTask(&VirtualSerial_CDC_Interface);\r
-               USB_USBTask();\r
-       }\r
-}\r
-\r
-/** Configures the board hardware and chip peripherals for the demo's functionality. */\r
-void SetupHardware(void)\r
-{\r
-       /* Disable watchdog if enabled by bootloader/fuses */\r
-       MCUSR &= ~(1 << WDRF);\r
-       wdt_disable();\r
-\r
-       /* Disable clock division */\r
-       clock_prescale_set(clock_div_1);\r
-\r
-       /* Hardware Initialization */\r
-       Joystick_Init();\r
-       LEDs_Init();\r
-       USB_Init();\r
-}\r
-\r
-/** Event handler for the library USB Connection event. */\r
-void EVENT_USB_Connect(void)\r
-{\r
-       LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING);\r
-}\r
-\r
-/** Event handler for the library USB Disconnection event. */\r
-void EVENT_USB_Disconnect(void)\r
-{\r
-       LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);\r
-}\r
-\r
-/** Event handler for the library USB Configuration Changed event. */\r
-void EVENT_USB_ConfigurationChanged(void)\r
-{\r
-       LEDs_SetAllLEDs(LEDMASK_USB_READY);\r
-\r
-       if (!(USB_CDC_ConfigureEndpoints(&VirtualSerial_CDC_Interface)))\r
-         LEDs_SetAllLEDs(LEDMASK_USB_ERROR);\r
-}\r
-\r
-/** Event handler for the library USB Unhandled Control Packet event. */\r
-void EVENT_USB_UnhandledControlPacket(void)\r
-{\r
-       USB_CDC_ProcessControlPacket(&VirtualSerial_CDC_Interface);\r
-}\r
-\r
-/** ISR to manage the reception of data from the serial port, placing received bytes into a circular buffer\r
- *  for later transmission to the host.\r
- */\r
-ISR(USART1_RX_vect, ISR_BLOCK)\r
-{\r
-       if (USB_IsConnected)\r
-         Buffer_StoreElement(&Tx_Buffer, UDR1);\r
-}\r
-\r
-/** Event handler for the CDC Class driver Line Encoding Changed event.\r
- *\r
- *  \param CDCInterfaceInfo  Pointer to the CDC class interface configuration structure being referenced\r
- */\r
-void EVENT_USB_CDC_LineEncodingChanged(USB_ClassInfo_CDC_t* CDCInterfaceInfo)\r
-{\r
-       uint8_t ConfigMask = 0;\r
-\r
-       if (CDCInterfaceInfo->LineEncoding.ParityType == CDC_PARITY_Odd)\r
-         ConfigMask = ((1 << UPM11) | (1 << UPM10));\r
-       else if (CDCInterfaceInfo->LineEncoding.ParityType == CDC_PARITY_Even)\r
-         ConfigMask = (1 << UPM11);\r
-\r
-       if (CDCInterfaceInfo->LineEncoding.CharFormat == CDC_LINEENCODING_TwoStopBits)\r
-         ConfigMask |= (1 << USBS1);\r
-\r
-       if (CDCInterfaceInfo->LineEncoding.DataBits == 6)\r
-         ConfigMask |= (1 << UCSZ10);\r
-       else if (CDCInterfaceInfo->LineEncoding.DataBits == 7)\r
-         ConfigMask |= (1 << UCSZ11);\r
-       else if (CDCInterfaceInfo->LineEncoding.DataBits == 8)\r
-         ConfigMask |= ((1 << UCSZ11) | (1 << UCSZ10));\r
-       \r
-       UCSR1A = (1 << U2X1);   \r
-       UCSR1B = ((1 << RXCIE1) | (1 << TXEN1) | (1 << RXEN1));\r
-       UCSR1C = ConfigMask;    \r
-       UBRR1  = SERIAL_2X_UBBRVAL((uint16_t)CDCInterfaceInfo->LineEncoding.BaudRateBPS);\r
-}\r
diff --git a/Demos/Device/USBtoSerial/USBtoSerial.h b/Demos/Device/USBtoSerial/USBtoSerial.h
deleted file mode 100644 (file)
index 9660381..0000000
+++ /dev/null
@@ -1,79 +0,0 @@
-/*\r
-             LUFA Library\r
-     Copyright (C) Dean Camera, 2009.\r
-              \r
-  dean [at] fourwalledcubicle [dot] com\r
-      www.fourwalledcubicle.com\r
-*/\r
-\r
-/*\r
-  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
-  Permission to use, copy, modify, and distribute this software\r
-  and its documentation for any purpose and without fee is hereby\r
-  granted, provided that the above copyright notice appear in all\r
-  copies and that both that the copyright notice and this\r
-  permission notice and warranty disclaimer appear in supporting\r
-  documentation, and that the name of the author not be used in\r
-  advertising or publicity pertaining to distribution of the\r
-  software without specific, written prior permission.\r
-\r
-  The author disclaim all warranties with regard to this\r
-  software, including all implied warranties of merchantability\r
-  and fitness.  In no event shall the author be liable for any\r
-  special, indirect or consequential damages or any damages\r
-  whatsoever resulting from loss of use, data or profits, whether\r
-  in an action of contract, negligence or other tortious action,\r
-  arising out of or in connection with the use or performance of\r
-  this software.\r
-*/\r
-\r
-/** \file\r
- *\r
- *  Header file for USBtoSerial.c.\r
- */\r
-\r
-#ifndef _USB_SERIAL_H_\r
-#define _USB_SERIAL_H_\r
-\r
-       /* Includes: */\r
-               #include <avr/io.h>\r
-               #include <avr/wdt.h>\r
-               #include <avr/interrupt.h>\r
-               #include <avr/power.h>\r
-\r
-               #include "Descriptors.h"\r
-\r
-               #include "Lib/RingBuff.h"\r
-\r
-               #include <LUFA/Version.h>\r
-               #include <LUFA/Drivers/Board/LEDs.h>\r
-               #include <LUFA/Drivers/Board/Joystick.h>\r
-               #include <LUFA/Drivers/Peripheral/Serial.h>\r
-               #include <LUFA/Drivers/USB/USB.h>\r
-               #include <LUFA/Drivers/USB/Class/Device/CDC.h>\r
-\r
-       /* Macros: */\r
-               /** LED mask for the library LED driver, to indicate that the USB interface is not ready. */\r
-               #define LEDMASK_USB_NOTREADY      LEDS_LED1\r
-\r
-               /** LED mask for the library LED driver, to indicate that the USB interface is enumerating. */\r
-               #define LEDMASK_USB_ENUMERATING  (LEDS_LED2 | LEDS_LED3)\r
-\r
-               /** LED mask for the library LED driver, to indicate that the USB interface is ready. */\r
-               #define LEDMASK_USB_READY        (LEDS_LED2 | LEDS_LED4)\r
-\r
-               /** LED mask for the library LED driver, to indicate that an error has occurred in the USB interface. */\r
-               #define LEDMASK_USB_ERROR        (LEDS_LED1 | LEDS_LED3)\r
-               \r
-       /* Function Prototypes: */\r
-               void SetupHardware(void);\r
-\r
-               void EVENT_USB_Connect(void);\r
-               void EVENT_USB_Disconnect(void);\r
-               void EVENT_USB_ConfigurationChanged(void);\r
-               void EVENT_USB_UnhandledControlPacket(void);\r
-               \r
-               void EVENT_USB_CDC_LineEncodingChanged(USB_ClassInfo_CDC_t* CDCInterfaceInfo);\r
-\r
-#endif\r
diff --git a/Demos/Device/USBtoSerial/USBtoSerial.txt b/Demos/Device/USBtoSerial/USBtoSerial.txt
deleted file mode 100644 (file)
index e334672..0000000
+++ /dev/null
@@ -1,68 +0,0 @@
-/** \file\r
- *\r
- *  This file contains special DoxyGen information for the generation of the main page and other special\r
- *  documentation pages. It is not a project source file.\r
- */\r
\r
-/** \mainpage USB to Serial Converter Demo (via CDC-ACM class)\r
- *\r
- *  \section SSec_Info USB Information:\r
- *\r
- *  The following table gives a rundown of the USB utilization of this demo.\r
- *\r
- *  <table>\r
- *   <tr>\r
- *    <td><b>USB Mode:</b></td>\r
- *    <td>Device</td>\r
- *   </tr>\r
- *   <tr>\r
- *    <td><b>USB Class:</b></td>\r
- *    <td>Communications Device Class (CDC)</td>\r
- *   </tr>\r
- *   <tr> \r
- *    <td><b>USB Subclass:</b></td>\r
- *    <td>Abstract Control Model (ACM)</td>\r
- *   </tr>\r
- *   <tr>\r
- *    <td><b>Relevant Standards:</b></td>\r
- *    <td>USBIF CDC Class Standard</td>\r
- *   </tr>\r
- *   <tr>\r
- *    <td><b>Usable Speeds:</b></td>\r
- *    <td>Full Speed Mode</td>\r
- *   </tr>\r
- *  </table>\r
- *\r
- *  \section SSec_Description Project Description: \r
- *\r
- *  Communications Device Class demonstration application.\r
- *  This gives a simple reference application for implementing\r
- *  a USB to Serial converter using the CDC class. Sent and\r
- *  received data on the serial port is communicated to the USB\r
- *  host.\r
- *  \r
- *  After running this demo for the first time on a new computer,\r
- *  you will need to supply the .INF file located in this demo\r
- *  project's directory as the device's driver when running under\r
- *  Windows. This will enable Windows to use its inbuilt CDC drivers,\r
- *  negating the need for custom drivers for the device. Other\r
- *  Operating Systems should automatically use their own inbuilt\r
- *  CDC-ACM drivers.\r
- *\r
- *  \section SSec_Options Project Options\r
- *\r
- *  The following defines can be found in this demo, which can control the demo behaviour when defined, or changed in value.\r
- *\r
- *  <table>\r
- *   <tr>\r
- *    <td><b>Define Name:</b></td>\r
- *    <td><b>Location:</b></td>\r
- *    <td><b>Description:</b></td>\r
- *   </tr>\r
- *   <tr>\r
- *    <td>BUFF_STATICSIZE</td>\r
- *    <td>RingBuff.h</td>\r
- *    <td>Defines the maximum number of bytes which can be buffered in each Ring Buffer.</td>\r
- *   </tr>\r
- *  </table>\r
- */
\ No newline at end of file
diff --git a/Demos/Device/USBtoSerial/makefile b/Demos/Device/USBtoSerial/makefile
deleted file mode 100644 (file)
index 5cf9c61..0000000
+++ /dev/null
@@ -1,734 +0,0 @@
-# Hey Emacs, this is a -*- makefile -*-\r
-#----------------------------------------------------------------------------\r
-# WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al.\r
-#  >> Modified for use with the LUFA project. <<\r
-#\r
-# Released to the Public Domain\r
-#\r
-# Additional material for this makefile was written by:\r
-# Peter Fleury\r
-# Tim Henigan\r
-# Colin O'Flynn\r
-# Reiner Patommel\r
-# Markus Pfaff\r
-# Sander Pool\r
-# Frederik Rouleau\r
-# Carlos Lamas\r
-# Dean Camera\r
-# Opendous Inc.\r
-# Denver Gingerich\r
-#\r
-#----------------------------------------------------------------------------\r
-# On command line:\r
-#\r
-# make all = Make software.\r
-#\r
-# make clean = Clean out built project files.\r
-#\r
-# make coff = Convert ELF to AVR COFF.\r
-#\r
-# make extcoff = Convert ELF to AVR Extended COFF.\r
-#\r
-# make program = Download the hex file to the device, using avrdude.\r
-#                Please customize the avrdude settings below first!\r
-#\r
-# make dfu = Download the hex file to the device, using dfu-programmer (must\r
-#            have dfu-programmer installed).\r
-#\r
-# make flip = Download the hex file to the device, using Atmel FLIP (must\r
-#             have Atmel FLIP installed).\r
-#\r
-# make dfu-ee = Download the eeprom file to the device, using dfu-programmer\r
-#               (must have dfu-programmer installed).\r
-#\r
-# make flip-ee = Download the eeprom file to the device, using Atmel FLIP\r
-#                (must have Atmel FLIP installed).\r
-#\r
-# make doxygen = Generate DoxyGen documentation for the project (must have\r
-#                DoxyGen installed)\r
-#\r
-# make debug = Start either simulavr or avarice as specified for debugging, \r
-#              with avr-gdb or avr-insight as the front end for debugging.\r
-#\r
-# make filename.s = Just compile filename.c into the assembler code only.\r
-#\r
-# make filename.i = Create a preprocessed source file for use in submitting\r
-#                   bug reports to the GCC project.\r
-#\r
-# To rebuild project do "make clean" then "make all".\r
-#----------------------------------------------------------------------------\r
-\r
-\r
-# MCU name\r
-MCU = at90usb1287\r
-\r
-\r
-# Target board (see library "Board Types" documentation, USER or blank for projects not requiring\r
-# LUFA board drivers). If USER is selected, put custom board drivers in a directory called \r
-# "Board" inside the application directory.\r
-BOARD  = USBKEY\r
-\r
-\r
-# Processor frequency.\r
-#     This will define a symbol, F_CPU, in all source code files equal to the \r
-#     processor frequency. You can then use this symbol in your source code to \r
-#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done\r
-#     automatically to create a 32-bit value in your source code.\r
-#     Typical values are:\r
-#         F_CPU =  1000000\r
-#         F_CPU =  1843200\r
-#         F_CPU =  2000000\r
-#         F_CPU =  3686400\r
-#         F_CPU =  4000000\r
-#         F_CPU =  7372800\r
-#         F_CPU =  8000000\r
-#         F_CPU = 11059200\r
-#         F_CPU = 14745600\r
-#         F_CPU = 16000000\r
-#         F_CPU = 18432000\r
-#         F_CPU = 20000000\r
-F_CPU = 8000000\r
-\r
-\r
-# Input clock frequency.\r
-#     This will define a symbol, F_CLOCK, in all source code files equal to the \r
-#     input clock frequency (before any prescaling is performed). This value may\r
-#     differ from F_CPU if prescaling is used on the latter, and is required as the\r
-#     raw input clock is fed directly to the PLL sections of the AVR for high speed\r
-#     clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'\r
-#     at the end, this will be done automatically to create a 32-bit value in your\r
-#     source code.\r
-#\r
-#     If no clock division is performed on the input clock inside the AVR (via the\r
-#     CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.\r
-F_CLOCK = 8000000\r
-\r
-\r
-# Output format. (can be srec, ihex, binary)\r
-FORMAT = ihex\r
-\r
-\r
-# Target file name (without extension).\r
-TARGET = USBtoSerial\r
-\r
-\r
-# Object files directory\r
-#     To put object files in current directory, use a dot (.), do NOT make\r
-#     this an empty or blank macro!\r
-OBJDIR = .\r
-\r
-\r
-# Path to the LUFA library\r
-LUFA_PATH = ../../..\r
-\r
-\r
-# List C source files here. (C dependencies are automatically generated.)\r
-SRC = $(TARGET).c                                                 \\r
-         Descriptors.c                                               \\r
-         Lib/RingBuff.c                                              \\r
-         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/DevChapter9.c        \\r
-         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Endpoint.c           \\r
-         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Host.c               \\r
-         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/HostChapter9.c       \\r
-         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/LowLevel.c           \\r
-         $(LUFA_PATH)/LUFA/Drivers/USB/LowLevel/Pipe.c               \\r
-         $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/Events.c            \\r
-         $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBInterrupt.c      \\r
-         $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/USBTask.c           \\r
-         $(LUFA_PATH)/LUFA/Drivers/USB/HighLevel/ConfigDescriptor.c  \\r
-         $(LUFA_PATH)/LUFA/Drivers/USB/Class/Device/CDC.c            \\r
-\r
-\r
-# List C++ source files here. (C dependencies are automatically generated.)\r
-CPPSRC = \r
-\r
-\r
-# List Assembler source files here.\r
-#     Make them always end in a capital .S.  Files ending in a lowercase .s\r
-#     will not be considered source files but generated files (assembler\r
-#     output from the compiler), and will be deleted upon "make clean"!\r
-#     Even though the DOS/Win* filesystem matches both .s and .S the same,\r
-#     it will preserve the spelling of the filenames, and gcc itself does\r
-#     care about how the name is spelled on its command-line.\r
-ASRC =\r
-\r
-\r
-# Optimization level, can be [0, 1, 2, 3, s]. \r
-#     0 = turn off optimization. s = optimize for size.\r
-#     (Note: 3 is not always the best optimization level. See avr-libc FAQ.)\r
-OPT = s\r
-\r
-\r
-# Debugging format.\r
-#     Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs.\r
-#     AVR Studio 4.10 requires dwarf-2.\r
-#     AVR [Extended] COFF format requires stabs, plus an avr-objcopy run.\r
-DEBUG = dwarf-2\r
-\r
-\r
-# List any extra directories to look for include files here.\r
-#     Each directory must be seperated by a space.\r
-#     Use forward slashes for directory separators.\r
-#     For a directory that has spaces, enclose it in quotes.\r
-EXTRAINCDIRS = $(LUFA_PATH)/\r
-\r
-\r
-# Compiler flag to set the C Standard level.\r
-#     c89   = "ANSI" C\r
-#     gnu89 = c89 plus GCC extensions\r
-#     c99   = ISO C99 standard (not yet fully implemented)\r
-#     gnu99 = c99 plus GCC extensions\r
-CSTANDARD = -std=gnu99\r
-\r
-\r
-# Place -D or -U options here for C sources\r
-CDEFS  = -DF_CPU=$(F_CPU)UL -DF_CLOCK=$(F_CLOCK)UL -DBOARD=BOARD_$(BOARD)\r
-CDEFS += -DUSE_NONSTANDARD_DESCRIPTOR_NAMES -DUSB_DEVICE_ONLY\r
-CDEFS += -DFIXED_CONTROL_ENDPOINT_SIZE=8 -DUSE_SINGLE_DEVICE_CONFIGURATION\r
-CDEFS += -DUSE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)"\r
-\r
-\r
-# Place -D or -U options here for ASM sources\r
-ADEFS = -DF_CPU=$(F_CPU)\r
-\r
-\r
-# Place -D or -U options here for C++ sources\r
-CPPDEFS = -DF_CPU=$(F_CPU)UL\r
-#CPPDEFS += -D__STDC_LIMIT_MACROS\r
-#CPPDEFS += -D__STDC_CONSTANT_MACROS\r
-\r
-\r
-\r
-#---------------- Compiler Options C ----------------\r
-#  -g*:          generate debugging information\r
-#  -O*:          optimization level\r
-#  -f...:        tuning, see GCC manual and avr-libc documentation\r
-#  -Wall...:     warning level\r
-#  -Wa,...:      tell GCC to pass this to the assembler.\r
-#    -adhlns...: create assembler listing\r
-CFLAGS = -g$(DEBUG)\r
-CFLAGS += $(CDEFS)\r
-CFLAGS += -O$(OPT)\r
-CFLAGS += -funsigned-char\r
-CFLAGS += -funsigned-bitfields\r
-CFLAGS += -ffunction-sections\r
-CFLAGS += -fpack-struct\r
-CFLAGS += -fshort-enums\r
-CFLAGS += -finline-limit=20\r
-CFLAGS += -Wall\r
-CFLAGS += -Wstrict-prototypes\r
-CFLAGS += -Wundef\r
-#CFLAGS += -fno-unit-at-a-time\r
-#CFLAGS += -Wunreachable-code\r
-#CFLAGS += -Wsign-compare\r
-CFLAGS += -Wa,-adhlns=$(<:%.c=$(OBJDIR)/%.lst)\r
-CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))\r
-CFLAGS += $(CSTANDARD)\r
-\r
-\r
-#---------------- Compiler Options C++ ----------------\r
-#  -g*:          generate debugging information\r
-#  -O*:          optimization level\r
-#  -f...:        tuning, see GCC manual and avr-libc documentation\r
-#  -Wall...:     warning level\r
-#  -Wa,...:      tell GCC to pass this to the assembler.\r
-#    -adhlns...: create assembler listing\r
-CPPFLAGS = -g$(DEBUG)\r
-CPPFLAGS += $(CPPDEFS)\r
-CPPFLAGS += -O$(OPT)\r
-CPPFLAGS += -funsigned-char\r
-CPPFLAGS += -funsigned-bitfields\r
-CPPFLAGS += -fpack-struct\r
-CPPFLAGS += -fshort-enums\r
-CPPFLAGS += -fno-exceptions\r
-CPPFLAGS += -Wall\r
-CFLAGS += -Wundef\r
-#CPPFLAGS += -mshort-calls\r
-#CPPFLAGS += -fno-unit-at-a-time\r
-#CPPFLAGS += -Wstrict-prototypes\r
-#CPPFLAGS += -Wunreachable-code\r
-#CPPFLAGS += -Wsign-compare\r
-CPPFLAGS += -Wa,-adhlns=$(<:%.cpp=$(OBJDIR)/%.lst)\r
-CPPFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))\r
-#CPPFLAGS += $(CSTANDARD)\r
-\r
-\r
-#---------------- Assembler Options ----------------\r
-#  -Wa,...:   tell GCC to pass this to the assembler.\r
-#  -adhlns:   create listing\r
-#  -gstabs:   have the assembler create line number information; note that\r
-#             for use in COFF files, additional information about filenames\r
-#             and function names needs to be present in the assembler source\r
-#             files -- see avr-libc docs [FIXME: not yet described there]\r
-#  -listing-cont-lines: Sets the maximum number of continuation lines of hex \r
-#       dump that will be displayed for a given single line of source input.\r
-ASFLAGS = $(ADEFS) -Wa,-adhlns=$(<:%.S=$(OBJDIR)/%.lst),-gstabs,--listing-cont-lines=100\r
-\r
-\r
-#---------------- Library Options ----------------\r
-# Minimalistic printf version\r
-PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min\r
-\r
-# Floating point printf version (requires MATH_LIB = -lm below)\r
-PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt\r
-\r
-# If this is left blank, then it will use the Standard printf version.\r
-PRINTF_LIB = \r
-#PRINTF_LIB = $(PRINTF_LIB_MIN)\r
-#PRINTF_LIB = $(PRINTF_LIB_FLOAT)\r
-\r
-\r
-# Minimalistic scanf version\r
-SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min\r
-\r
-# Floating point + %[ scanf version (requires MATH_LIB = -lm below)\r
-SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt\r
-\r
-# If this is left blank, then it will use the Standard scanf version.\r
-SCANF_LIB = \r
-#SCANF_LIB = $(SCANF_LIB_MIN)\r
-#SCANF_LIB = $(SCANF_LIB_FLOAT)\r
-\r
-\r
-MATH_LIB = -lm\r
-\r
-\r
-# List any extra directories to look for libraries here.\r
-#     Each directory must be seperated by a space.\r
-#     Use forward slashes for directory separators.\r
-#     For a directory that has spaces, enclose it in quotes.\r
-EXTRALIBDIRS = \r
-\r
-\r
-\r
-#---------------- External Memory Options ----------------\r
-\r
-# 64 KB of external RAM, starting after internal RAM (ATmega128!),\r
-# used for variables (.data/.bss) and heap (malloc()).\r
-#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff\r
-\r
-# 64 KB of external RAM, starting after internal RAM (ATmega128!),\r
-# only used for heap (malloc()).\r
-#EXTMEMOPTS = -Wl,--section-start,.data=0x801100,--defsym=__heap_end=0x80ffff\r
-\r
-EXTMEMOPTS =\r
-\r
-\r
-\r
-#---------------- Linker Options ----------------\r
-#  -Wl,...:     tell GCC to pass this to linker.\r
-#    -Map:      create map file\r
-#    --cref:    add cross reference to  map file\r
-LDFLAGS = -Wl,-Map=$(TARGET).map,--cref\r
-LDFLAGS += -Wl,--relax \r
-LDFLAGS += -Wl,--gc-sections\r
-LDFLAGS += $(EXTMEMOPTS)\r
-LDFLAGS += $(patsubst %,-L%,$(EXTRALIBDIRS))\r
-LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)\r
-#LDFLAGS += -T linker_script.x\r
-\r
-\r
-\r
-#---------------- Programming Options (avrdude) ----------------\r
-\r
-# Programming hardware: alf avr910 avrisp bascom bsd \r
-# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500\r
-#\r
-# Type: avrdude -c ?\r
-# to get a full listing.\r
-#\r
-AVRDUDE_PROGRAMMER = jtagmkII\r
-\r
-# com1 = serial port. Use lpt1 to connect to parallel port.\r
-AVRDUDE_PORT = usb\r
-\r
-AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex\r
-#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep\r
-\r
-\r
-# Uncomment the following if you want avrdude's erase cycle counter.\r
-# Note that this counter needs to be initialized first using -Yn,\r
-# see avrdude manual.\r
-#AVRDUDE_ERASE_COUNTER = -y\r
-\r
-# Uncomment the following if you do /not/ wish a verification to be\r
-# performed after programming the device.\r
-#AVRDUDE_NO_VERIFY = -V\r
-\r
-# Increase verbosity level.  Please use this when submitting bug\r
-# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude> \r
-# to submit bug reports.\r
-#AVRDUDE_VERBOSE = -v -v\r
-\r
-AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)\r
-AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY)\r
-AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE)\r
-AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER)\r
-\r
-\r
-\r
-#---------------- Debugging Options ----------------\r
-\r
-# For simulavr only - target MCU frequency.\r
-DEBUG_MFREQ = $(F_CPU)\r
-\r
-# Set the DEBUG_UI to either gdb or insight.\r
-# DEBUG_UI = gdb\r
-DEBUG_UI = insight\r
-\r
-# Set the debugging back-end to either avarice, simulavr.\r
-DEBUG_BACKEND = avarice\r
-#DEBUG_BACKEND = simulavr\r
-\r
-# GDB Init Filename.\r
-GDBINIT_FILE = __avr_gdbinit\r
-\r
-# When using avarice settings for the JTAG\r
-JTAG_DEV = /dev/com1\r
-\r
-# Debugging port used to communicate between GDB / avarice / simulavr.\r
-DEBUG_PORT = 4242\r
-\r
-# Debugging host used to communicate between GDB / avarice / simulavr, normally\r
-#     just set to localhost unless doing some sort of crazy debugging when \r
-#     avarice is running on a different computer.\r
-DEBUG_HOST = localhost\r
-\r
-\r
-\r
-#============================================================================\r
-\r
-\r
-# Define programs and commands.\r
-SHELL = sh\r
-CC = avr-gcc\r
-OBJCOPY = avr-objcopy\r
-OBJDUMP = avr-objdump\r
-SIZE = avr-size\r
-AR = avr-ar rcs\r
-NM = avr-nm\r
-AVRDUDE = avrdude\r
-REMOVE = rm -f\r
-REMOVEDIR = rm -rf\r
-COPY = cp\r
-WINSHELL = cmd\r
-\r
-# Define Messages\r
-# English\r
-MSG_ERRORS_NONE = Errors: none\r
-MSG_BEGIN = -------- begin --------\r
-MSG_END = --------  end  --------\r
-MSG_SIZE_BEFORE = Size before: \r
-MSG_SIZE_AFTER = Size after:\r
-MSG_COFF = Converting to AVR COFF:\r
-MSG_EXTENDED_COFF = Converting to AVR Extended COFF:\r
-MSG_FLASH = Creating load file for Flash:\r
-MSG_EEPROM = Creating load file for EEPROM:\r
-MSG_EXTENDED_LISTING = Creating Extended Listing:\r
-MSG_SYMBOL_TABLE = Creating Symbol Table:\r
-MSG_LINKING = Linking:\r
-MSG_COMPILING = Compiling C:\r
-MSG_COMPILING_CPP = Compiling C++:\r
-MSG_ASSEMBLING = Assembling:\r
-MSG_CLEANING = Cleaning project:\r
-MSG_CREATING_LIBRARY = Creating library:\r
-\r
-\r
-\r
-\r
-# Define all object files.\r
-OBJ = $(SRC:%.c=$(OBJDIR)/%.o) $(CPPSRC:%.cpp=$(OBJDIR)/%.o) $(ASRC:%.S=$(OBJDIR)/%.o) \r
-\r
-# Define all listing files.\r
-LST = $(SRC:%.c=$(OBJDIR)/%.lst) $(CPPSRC:%.cpp=$(OBJDIR)/%.lst) $(ASRC:%.S=$(OBJDIR)/%.lst) \r
-\r
-\r
-# Compiler flags to generate dependency files.\r
-GENDEPFLAGS = -MMD -MP -MF .dep/$(@F).d\r
-\r
-\r
-# Combine all necessary flags and optional flags.\r
-# Add target processor to flags.\r
-ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS)\r
-ALL_CPPFLAGS = -mmcu=$(MCU) -I. -x c++ $(CPPFLAGS) $(GENDEPFLAGS)\r
-ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)\r
-\r
-\r
-\r
-\r
-\r
-# Default target.\r
-all: begin gccversion sizebefore build checkhooks checklibmode checkboard sizeafter end\r
-\r
-# Change the build target to build a HEX file or a library.\r
-build: elf hex eep lss sym\r
-#build: lib\r
-\r
-\r
-elf: $(TARGET).elf\r
-hex: $(TARGET).hex\r
-eep: $(TARGET).eep\r
-lss: $(TARGET).lss\r
-sym: $(TARGET).sym\r
-LIBNAME=lib$(TARGET).a\r
-lib: $(LIBNAME)\r
-\r
-\r
-\r
-# Eye candy.\r
-# AVR Studio 3.x does not check make's exit code but relies on\r
-# the following magic strings to be generated by the compile job.\r
-begin:\r
-       @echo\r
-       @echo $(MSG_BEGIN)\r
-\r
-end:\r
-       @echo $(MSG_END)\r
-       @echo\r
-\r
-\r
-# Display size of file.\r
-HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex\r
-ELFSIZE = $(SIZE) $(MCU_FLAG) $(FORMAT_FLAG) $(TARGET).elf\r
-MCU_FLAG = $(shell $(SIZE) --help | grep -- --mcu > /dev/null && echo --mcu=$(MCU) )\r
-FORMAT_FLAG = $(shell $(SIZE) --help | grep -- --format=.*avr > /dev/null && echo --format=avr )\r
-\r
-sizebefore:\r
-       @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \\r
-       2>/dev/null; echo; fi\r
-\r
-sizeafter:\r
-       @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \\r
-       2>/dev/null; echo; fi\r
-\r
-checkhooks: build\r
-       @echo\r
-       @echo ------- Unhooked LUFA Events -------\r
-       @$(shell) (grep -s '^EVENT_.*LUFA/.*\\.o' $(TARGET).map | \\r
-                  cut -d' ' -f1 | cut -d'_' -f2- | grep ".*") || \\r
-                          echo "(None)"\r
-       @echo ------------------------------------\r
-\r
-checklibmode:\r
-       @echo\r
-       @echo ----------- Library Mode -----------\r
-       @$(shell) ($(CC) $(ALL_CFLAGS) -E -dM - < /dev/null \\r
-                 | grep 'USB_\(DEVICE\|HOST\)_ONLY' | cut -d' ' -f2 | grep ".*") \\r
-                 || echo "No specific mode (both device and host mode allowable)."\r
-       @echo ------------------------------------\r
-\r
-checkboard:\r
-       @echo\r
-       @echo ---------- Selected Board ----------\r
-       @echo Selected board model is $(BOARD).\r
-       @echo ------------------------------------\r
-       \r
-# Display compiler version information.\r
-gccversion : \r
-       @$(CC) --version\r
-\r
-\r
-\r
-# Program the device.  \r
-program: $(TARGET).hex $(TARGET).eep\r
-       $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)\r
-\r
-flip: $(TARGET).hex\r
-       batchisp -hardware usb -device $(MCU) -operation erase f\r
-       batchisp -hardware usb -device $(MCU) -operation loadbuffer $(TARGET).hex program\r
-       batchisp -hardware usb -device $(MCU) -operation start reset 0\r
-\r
-dfu: $(TARGET).hex\r
-       dfu-programmer $(MCU) erase\r
-       dfu-programmer $(MCU) flash --debug 1 $(TARGET).hex\r
-       dfu-programmer $(MCU) reset\r
-\r
-flip-ee: $(TARGET).hex $(TARGET).eep\r
-       copy $(TARGET).eep $(TARGET)eep.hex\r
-       batchisp -hardware usb -device $(MCU) -operation memory EEPROM erase\r
-       batchisp -hardware usb -device $(MCU) -operation memory EEPROM loadbuffer $(TARGET)eep.hex program\r
-       batchisp -hardware usb -device $(MCU) -operation start reset 0\r
-\r
-dfu-ee: $(TARGET).hex $(TARGET).eep\r
-       dfu-programmer $(MCU) flash-eeprom --debug 1 --suppress-bootloader-mem $(TARGET).eep\r
-       dfu-programmer $(MCU) reset\r
-\r
-\r
-# Generate avr-gdb config/init file which does the following:\r
-#     define the reset signal, load the target file, connect to target, and set \r
-#     a breakpoint at main().\r
-gdb-config: \r
-       @$(REMOVE) $(GDBINIT_FILE)\r
-       @echo define reset >> $(GDBINIT_FILE)\r
-       @echo SIGNAL SIGHUP >> $(GDBINIT_FILE)\r
-       @echo end >> $(GDBINIT_FILE)\r
-       @echo file $(TARGET).elf >> $(GDBINIT_FILE)\r
-       @echo target remote $(DEBUG_HOST):$(DEBUG_PORT)  >> $(GDBINIT_FILE)\r
-ifeq ($(DEBUG_BACKEND),simulavr)\r
-       @echo load  >> $(GDBINIT_FILE)\r
-endif\r
-       @echo break main >> $(GDBINIT_FILE)\r
-\r
-debug: gdb-config $(TARGET).elf\r
-ifeq ($(DEBUG_BACKEND), avarice)\r
-       @echo Starting AVaRICE - Press enter when "waiting to connect" message displays.\r
-       @$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \\r
-       $(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT)\r
-       @$(WINSHELL) /c pause\r
-\r
-else\r
-       @$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \\r
-       $(DEBUG_MFREQ) --port $(DEBUG_PORT)\r
-endif\r
-       @$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE)\r
-\r
-\r
-\r
-\r
-# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.\r
-COFFCONVERT = $(OBJCOPY) --debugging\r
-COFFCONVERT += --change-section-address .data-0x800000\r
-COFFCONVERT += --change-section-address .bss-0x800000\r
-COFFCONVERT += --change-section-address .noinit-0x800000\r
-COFFCONVERT += --change-section-address .eeprom-0x810000\r
-\r
-\r
-\r
-coff: $(TARGET).elf\r
-       @echo\r
-       @echo $(MSG_COFF) $(TARGET).cof\r
-       $(COFFCONVERT) -O coff-avr $< $(TARGET).cof\r
-\r
-\r
-extcoff: $(TARGET).elf\r
-       @echo\r
-       @echo $(MSG_EXTENDED_COFF) $(TARGET).cof\r
-       $(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof\r
-\r
-\r
-\r
-# Create final output files (.hex, .eep) from ELF output file.\r
-%.hex: %.elf\r
-       @echo\r
-       @echo $(MSG_FLASH) $@\r
-       $(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@\r
-\r
-%.eep: %.elf\r
-       @echo\r
-       @echo $(MSG_EEPROM) $@\r
-       -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \\r
-       --change-section-lma .eeprom=0 --no-change-warnings -O $(FORMAT) $< $@ || exit 0\r
-\r
-# Create extended listing file from ELF output file.\r
-%.lss: %.elf\r
-       @echo\r
-       @echo $(MSG_EXTENDED_LISTING) $@\r
-       $(OBJDUMP) -h -z -S $< > $@\r
-\r
-# Create a symbol table from ELF output file.\r
-%.sym: %.elf\r
-       @echo\r
-       @echo $(MSG_SYMBOL_TABLE) $@\r
-       $(NM) -n $< > $@\r
-\r
-\r
-\r
-# Create library from object files.\r
-.SECONDARY : $(TARGET).a\r
-.PRECIOUS : $(OBJ)\r
-%.a: $(OBJ)\r
-       @echo\r
-       @echo $(MSG_CREATING_LIBRARY) $@\r
-       $(AR) $@ $(OBJ)\r
-\r
-\r
-# Link: create ELF output file from object files.\r
-.SECONDARY : $(TARGET).elf\r
-.PRECIOUS : $(OBJ)\r
-%.elf: $(OBJ)\r
-       @echo\r
-       @echo $(MSG_LINKING) $@\r
-       $(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)\r
-\r
-\r
-# Compile: create object files from C source files.\r
-$(OBJDIR)/%.o : %.c\r
-       @echo\r
-       @echo $(MSG_COMPILING) $<\r
-       $(CC) -c $(ALL_CFLAGS) $< -o $@ \r
-\r
-\r
-# Compile: create object files from C++ source files.\r
-$(OBJDIR)/%.o : %.cpp\r
-       @echo\r
-       @echo $(MSG_COMPILING_CPP) $<\r
-       $(CC) -c $(ALL_CPPFLAGS) $< -o $@ \r
-\r
-\r
-# Compile: create assembler files from C source files.\r
-%.s : %.c\r
-       $(CC) -S $(ALL_CFLAGS) $< -o $@\r
-\r
-\r
-# Compile: create assembler files from C++ source files.\r
-%.s : %.cpp\r
-       $(CC) -S $(ALL_CPPFLAGS) $< -o $@\r
-\r
-\r
-# Assemble: create object files from assembler source files.\r
-$(OBJDIR)/%.o : %.S\r
-       @echo\r
-       @echo $(MSG_ASSEMBLING) $<\r
-       $(CC) -c $(ALL_ASFLAGS) $< -o $@\r
-\r
-\r
-# Create preprocessed source for use in sending a bug report.\r
-%.i : %.c\r
-       $(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ \r
-       \r
-\r
-# Target: clean project.\r
-clean: begin clean_list clean_binary end\r
-\r
-clean_binary:\r
-       $(REMOVE) $(TARGET).hex\r
-       \r
-clean_list:\r
-       @echo $(MSG_CLEANING)\r
-       $(REMOVE) $(TARGET).eep\r
-       $(REMOVE) $(TARGET)eep.hex\r
-       $(REMOVE) $(TARGET).cof\r
-       $(REMOVE) $(TARGET).elf\r
-       $(REMOVE) $(TARGET).map\r
-       $(REMOVE) $(TARGET).sym\r
-       $(REMOVE) $(TARGET).lss\r
-       $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.o)\r
-       $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.lst)\r
-       $(REMOVE) $(SRC:.c=.s)\r
-       $(REMOVE) $(SRC:.c=.d)\r
-       $(REMOVE) $(SRC:.c=.i)\r
-       $(REMOVEDIR) .dep\r
-\r
-\r
-doxygen:\r
-       @echo Generating Project Documentation...\r
-       @doxygen Doxygen.conf\r
-       @echo Documentation Generation Complete.\r
-\r
-clean_doxygen:\r
-       rm -rf Documentation\r
-\r
-# Create object files directory\r
-$(shell mkdir $(OBJDIR) 2>/dev/null)\r
-\r
-\r
-# Include the dependency files.\r
--include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)\r
-\r
-\r
-# Listing of phony targets.\r
-.PHONY : all checkhooks checklibmode checkboard   \\r
-begin finish end sizebefore sizeafter gccversion  \\r
-build elf hex eep lss sym coff extcoff clean      \\r
-clean_list clean_binary program debug gdb-config  \\r
-doxygen dfu flip flip-ee dfu-ee
\ No newline at end of file
diff --git a/Demos/Device/makefile b/Demos/Device/makefile
deleted file mode 100644 (file)
index 6c21911..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-#
-#             LUFA Library
-#     Copyright (C) Dean Camera, 2009.
-#              
-#  dean [at] fourwalledcubicle [dot] com
-#      www.fourwalledcubicle.com
-#
-
-# Makefile to build all the LUFA Device Demos. Call with "make all" to
-# rebuild all Device demos.
-
-# Projects are pre-cleaned before each one is built, to ensure any
-# custom LUFA library build options are reflected in the compiled
-# code.
-
-all:
-       make -C AudioInput clean
-       make -C AudioInput all
-
-       make -C AudioOutput clean
-       make -C AudioOutput all
-
-       make -C CDC clean
-       make -C CDC all
-
-       make -C DualCDC clean
-       make -C DualCDC all
-
-       make -C GenericHID clean
-       make -C GenericHID all
-
-       make -C Joystick clean
-       make -C Joystick all
-
-       make -C Keyboard clean
-       make -C Keyboard all
-
-       make -C KeyboardMouse clean
-       make -C KeyboardMouse all
-
-       make -C MassStorage clean
-       make -C MassStorage all
-
-       make -C MIDI clean
-       make -C MIDI all
-
-       make -C Mouse clean
-       make -C Mouse all
-
-       make -C RNDISEthernet clean
-       make -C RNDISEthernet all
-
-       make -C USBtoSerial clean
-       make -C USBtoSerial all
-
-%:
-       make -C AudioInput $@
-       make -C AudioOutput $@
-       make -C CDC $@
-       make -C DualCDC $@
-       make -C GenericHID $@
-       make -C Joystick $@
-       make -C Keyboard $@
-       make -C KeyboardMouse $@
-       make -C MassStorage $@
-       make -C MIDI $@
-       make -C Mouse $@
-       make -C RNDISEthernet $@
-       make -C USBtoSerial $@