Added start of a port of the core USB driver code to the AVR32 UC3B architecture.
authorDean Camera <dean@fourwalledcubicle.com>
Sun, 20 Feb 2011 17:53:17 +0000 (17:53 +0000)
committerDean Camera <dean@fourwalledcubicle.com>
Sun, 20 Feb 2011 17:53:17 +0000 (17:53 +0000)
36 files changed:
LUFA.pnproj
LUFA/Common/Architectures.h
LUFA/Common/BoardTypes.h
LUFA/Common/Common.h
LUFA/Drivers/Board/Buttons.h
LUFA/Drivers/Board/EVK1101/Buttons.h [new file with mode: 0644]
LUFA/Drivers/Board/EVK1101/Joystick.h [new file with mode: 0644]
LUFA/Drivers/Board/EVK1101/LEDs.h [new file with mode: 0644]
LUFA/Drivers/Board/EVK527/LEDs.h
LUFA/Drivers/Board/Joystick.h
LUFA/Drivers/Board/LEDs.h
LUFA/Drivers/USB/Core/AVR8/Endpoint.h
LUFA/Drivers/USB/Core/AVR8/USBInterrupt.h
LUFA/Drivers/USB/Core/Device.h
LUFA/Drivers/USB/Core/Endpoint.h
LUFA/Drivers/USB/Core/Host.h
LUFA/Drivers/USB/Core/OTG.h
LUFA/Drivers/USB/Core/Pipe.h
LUFA/Drivers/USB/Core/UC3B/Device.c [new file with mode: 0644]
LUFA/Drivers/USB/Core/UC3B/Device.h [new file with mode: 0644]
LUFA/Drivers/USB/Core/UC3B/Endpoint.c [new file with mode: 0644]
LUFA/Drivers/USB/Core/UC3B/Endpoint.h [new file with mode: 0644]
LUFA/Drivers/USB/Core/UC3B/Host.c [new file with mode: 0644]
LUFA/Drivers/USB/Core/UC3B/Host.h [new file with mode: 0644]
LUFA/Drivers/USB/Core/UC3B/OTG.h [new file with mode: 0644]
LUFA/Drivers/USB/Core/UC3B/Pipe.c [new file with mode: 0644]
LUFA/Drivers/USB/Core/UC3B/Pipe.h [new file with mode: 0644]
LUFA/Drivers/USB/Core/UC3B/USBController.c [new file with mode: 0644]
LUFA/Drivers/USB/Core/UC3B/USBController.h [new file with mode: 0644]
LUFA/Drivers/USB/Core/UC3B/USBInterrupt.c [new file with mode: 0644]
LUFA/Drivers/USB/Core/UC3B/USBInterrupt.h [new file with mode: 0644]
LUFA/Drivers/USB/Core/USBController.h
LUFA/Drivers/USB/Core/USBInterrupt.h
LUFA/Drivers/USB/Core/USBMode.h
LUFA/ManPages/ChangeLog.txt
LUFA/ManPages/DeviceSupport.txt

index 070f8f7..2df4622 100644 (file)
@@ -1 +1 @@
-<Project name="LUFA"><Folder name="Demos"><Folder name="Device"><Folder name="ClassDriver"><Folder name="AudioInput"><File path="Demos\Device\ClassDriver\AudioInput\AudioInput.c"></File><File path="Demos\Device\ClassDriver\AudioInput\AudioInput.h"></File><File path="Demos\Device\ClassDriver\AudioInput\AudioInput.txt"></File><File path="Demos\Device\ClassDriver\AudioInput\Descriptors.c"></File><File path="Demos\Device\ClassDriver\AudioInput\Descriptors.h"></File><File path="Demos\Device\ClassDriver\AudioInput\Doxygen.conf"></File><File path="Demos\Device\ClassDriver\AudioInput\makefile"></File><File path="Demos\Device\ClassDriver\AudioInput\AudioInput.aps"></File></Folder><Folder name="AudioOutput"><File path="Demos\Device\ClassDriver\AudioOutput\AudioOutput.c"></File><File path="Demos\Device\ClassDriver\AudioOutput\AudioOutput.h"></File><File path="Demos\Device\ClassDriver\AudioOutput\AudioOutput.txt"></File><File path="Demos\Device\ClassDriver\AudioOutput\Descriptors.c"></File><File path="Demos\Device\ClassDriver\AudioOutput\Descriptors.h"></File><File path="Demos\Device\ClassDriver\AudioOutput\Doxygen.conf"></File><File path="Demos\Device\ClassDriver\AudioOutput\makefile"></File><File path="Demos\Device\ClassDriver\AudioOutput\AudioOutput.aps"></File></Folder><Folder name="DualVirtualSerial"><File path="Demos\Device\ClassDriver\DualVirtualSerial\Descriptors.c"></File><File path="Demos\Device\ClassDriver\DualVirtualSerial\Descriptors.h"></File><File path="Demos\Device\ClassDriver\DualVirtualSerial\Doxygen.conf"></File><File path="Demos\Device\ClassDriver\DualVirtualSerial\DualVirtualSerial.c"></File><File path="Demos\Device\ClassDriver\DualVirtualSerial\DualVirtualSerial.h"></File><File path="Demos\Device\ClassDriver\DualVirtualSerial\DualVirtualSerial.txt"></File><File path="Demos\Device\ClassDriver\DualVirtualSerial\LUFA DualVirtualSerial.inf"></File><File path="Demos\Device\ClassDriver\DualVirtualSerial\makefile"></File><File path="Demos\Device\ClassDriver\DualVirtualSerial\DualVirtualSerial.aps"></File></Folder><Folder name="GenericHID"><File path="Demos\Device\ClassDriver\GenericHID\Descriptors.c"></File><File path="Demos\Device\ClassDriver\GenericHID\Descriptors.h"></File><File path="Demos\Device\ClassDriver\GenericHID\Doxygen.conf"></File><File path="Demos\Device\ClassDriver\GenericHID\GenericHID.c"></File><File path="Demos\Device\ClassDriver\GenericHID\GenericHID.h"></File><File path="Demos\Device\ClassDriver\GenericHID\GenericHID.txt"></File><File path="Demos\Device\ClassDriver\GenericHID\makefile"></File><File path="Demos\Device\ClassDriver\GenericHID\GenericHID.aps"></File></Folder><Folder name="Joystick"><File path="Demos\Device\ClassDriver\Joystick\Descriptors.c"></File><File path="Demos\Device\ClassDriver\Joystick\Descriptors.h"></File><File path="Demos\Device\ClassDriver\Joystick\Doxygen.conf"></File><File path="Demos\Device\ClassDriver\Joystick\Joystick.c"></File><File path="Demos\Device\ClassDriver\Joystick\Joystick.h"></File><File path="Demos\Device\ClassDriver\Joystick\Joystick.txt"></File><File path="Demos\Device\ClassDriver\Joystick\makefile"></File><File path="Demos\Device\ClassDriver\Joystick\Joystick.aps"></File></Folder><Folder name="Keyboard"><File path="Demos\Device\ClassDriver\Keyboard\Descriptors.c"></File><File path="Demos\Device\ClassDriver\Keyboard\Descriptors.h"></File><File path="Demos\Device\ClassDriver\Keyboard\Doxygen.conf"></File><File path="Demos\Device\ClassDriver\Keyboard\Keyboard.c"></File><File path="Demos\Device\ClassDriver\Keyboard\Keyboard.h"></File><File path="Demos\Device\ClassDriver\Keyboard\Keyboard.txt"></File><File path="Demos\Device\ClassDriver\Keyboard\makefile"></File><File path="Demos\Device\ClassDriver\Keyboard\Keyboard.aps"></File></Folder><Folder name="KeyboardMouse"><File path="Demos\Device\ClassDriver\KeyboardMouse\Descriptors.c"></File><File path="Demos\Device\ClassDriver\KeyboardMouse\Descriptors.h"></File><File path="Demos\Device\ClassDriver\KeyboardMouse\Doxygen.conf"></File><File path="Demos\Device\ClassDriver\KeyboardMouse\KeyboardMouse.c"></File><File path="Demos\Device\ClassDriver\KeyboardMouse\KeyboardMouse.h"></File><File path="Demos\Device\ClassDriver\KeyboardMouse\KeyboardMouse.txt"></File><File path="Demos\Device\ClassDriver\KeyboardMouse\makefile"></File><File path="Demos\Device\ClassDriver\KeyboardMouse\KeyboardMouse.aps"></File></Folder><Folder name="KeyboardMouseMultiReport"><File path="Demos\Device\ClassDriver\KeyboardMouseMultiReport\Descriptors.c"></File><File path="Demos\Device\ClassDriver\KeyboardMouseMultiReport\Descriptors.h"></File><File path="Demos\Device\ClassDriver\KeyboardMouseMultiReport\Doxygen.conf"></File><File path="Demos\Device\ClassDriver\KeyboardMouseMultiReport\KeyboardMouseMultiReport.c"></File><File path="Demos\Device\ClassDriver\KeyboardMouseMultiReport\KeyboardMouseMultiReport.h"></File><File path="Demos\Device\ClassDriver\KeyboardMouseMultiReport\KeyboardMouseMultiReport.txt"></File><File path="Demos\Device\ClassDriver\KeyboardMouseMultiReport\makefile"></File><File path="Demos\Device\ClassDriver\KeyboardMouseMultiReport\KeyboardMouseMultiReport.aps"></File></Folder><Folder name="MassStorage"><Folder name="Lib"><File path="Demos\Device\ClassDriver\MassStorage\Lib\DataflashManager.c"></File><File path="Demos\Device\ClassDriver\MassStorage\Lib\DataflashManager.h"></File><File path="Demos\Device\ClassDriver\MassStorage\Lib\SCSI.c"></File><File path="Demos\Device\ClassDriver\MassStorage\Lib\SCSI.h"></File></Folder><File path="Demos\Device\ClassDriver\MassStorage\Descriptors.c"></File><File path="Demos\Device\ClassDriver\MassStorage\Descriptors.h"></File><File path="Demos\Device\ClassDriver\MassStorage\Doxygen.conf"></File><File path="Demos\Device\ClassDriver\MassStorage\makefile"></File><File path="Demos\Device\ClassDriver\MassStorage\MassStorage.c"></File><File path="Demos\Device\ClassDriver\MassStorage\MassStorage.h"></File><File path="Demos\Device\ClassDriver\MassStorage\MassStorage.txt"></File><File path="Demos\Device\ClassDriver\MassStorage\MassStorage.aps"></File></Folder><Folder name="MassStorageKeyboard"><Folder name="Lib"><File path="Demos\Device\ClassDriver\MassStorageKeyboard\Lib\DataflashManager.c"></File><File path="Demos\Device\ClassDriver\MassStorageKeyboard\Lib\DataflashManager.h"></File><File path="Demos\Device\ClassDriver\MassStorageKeyboard\Lib\SCSI.c"></File><File path="Demos\Device\ClassDriver\MassStorageKeyboard\Lib\SCSI.h"></File></Folder><File path="Demos\Device\ClassDriver\MassStorageKeyboard\Descriptors.c"></File><File path="Demos\Device\ClassDriver\MassStorageKeyboard\Descriptors.h"></File><File path="Demos\Device\ClassDriver\MassStorageKeyboard\makefile"></File><File path="Demos\Device\ClassDriver\MassStorageKeyboard\MassStorageKeyboard.c"></File><File path="Demos\Device\ClassDriver\MassStorageKeyboard\MassStorageKeyboard.h"></File><File path="Demos\Device\ClassDriver\MassStorageKeyboard\Doxygen.conf"></File><File path="Demos\Device\ClassDriver\MassStorageKeyboard\MassStorageKeyboard.txt"></File><File path="Demos\Device\ClassDriver\MassStorageKeyboard\MassStorageKeyboard.aps"></File></Folder><Folder name="MIDI"><File path="Demos\Device\ClassDriver\MIDI\Descriptors.c"></File><File path="Demos\Device\ClassDriver\MIDI\Descriptors.h"></File><File path="Demos\Device\ClassDriver\MIDI\Doxygen.conf"></File><File path="Demos\Device\ClassDriver\MIDI\makefile"></File><File path="Demos\Device\ClassDriver\MIDI\MIDI.c"></File><File path="Demos\Device\ClassDriver\MIDI\MIDI.h"></File><File path="Demos\Device\ClassDriver\MIDI\MIDI.txt"></File><File path="Demos\Device\ClassDriver\MIDI\MIDI.aps"></File></Folder><Folder name="Mouse"><File path="Demos\Device\ClassDriver\Mouse\Descriptors.c"></File><File path="Demos\Device\ClassDriver\Mouse\Descriptors.h"></File><File path="Demos\Device\ClassDriver\Mouse\Doxygen.conf"></File><File path="Demos\Device\ClassDriver\Mouse\makefile"></File><File path="Demos\Device\ClassDriver\Mouse\Mouse.c"></File><File path="Demos\Device\ClassDriver\Mouse\Mouse.h"></File><File path="Demos\Device\ClassDriver\Mouse\Mouse.txt"></File><File path="Demos\Device\ClassDriver\Mouse\Mouse.aps"></File></Folder><Folder name="RNDISEthernet"><Folder name="Lib"><File path="Demos\Device\ClassDriver\RNDISEthernet\Lib\Webserver.h"></File><File path="Demos\Device\ClassDriver\RNDISEthernet\Lib\ARP.c"></File><File path="Demos\Device\ClassDriver\RNDISEthernet\Lib\ARP.h"></File><File path="Demos\Device\ClassDriver\RNDISEthernet\Lib\DHCP.c"></File><File path="Demos\Device\ClassDriver\RNDISEthernet\Lib\DHCP.h"></File><File path="Demos\Device\ClassDriver\RNDISEthernet\Lib\Ethernet.c"></File><File path="Demos\Device\ClassDriver\RNDISEthernet\Lib\Ethernet.h"></File><File path="Demos\Device\ClassDriver\RNDISEthernet\Lib\EthernetProtocols.h"></File><File path="Demos\Device\ClassDriver\RNDISEthernet\Lib\ICMP.c"></File><File path="Demos\Device\ClassDriver\RNDISEthernet\Lib\ICMP.h"></File><File path="Demos\Device\ClassDriver\RNDISEthernet\Lib\IP.c"></File><File path="Demos\Device\ClassDriver\RNDISEthernet\Lib\IP.h"></File><File path="Demos\Device\ClassDriver\RNDISEthernet\Lib\ProtocolDecoders.c"></File><File path="Demos\Device\ClassDriver\RNDISEthernet\Lib\ProtocolDecoders.h"></File><File path="Demos\Device\ClassDriver\RNDISEthernet\Lib\TCP.c"></File><File path="Demos\Device\ClassDriver\RNDISEthernet\Lib\TCP.h"></File><File path="Demos\Device\ClassDriver\RNDISEthernet\Lib\UDP.c"></File><File path="Demos\Device\ClassDriver\RNDISEthernet\Lib\UDP.h"></File><File path="Demos\Device\ClassDriver\RNDISEthernet\Lib\Webserver.c"></File></Folder><File path="Demos\Device\ClassDriver\RNDISEthernet\Descriptors.c"></File><File path="Demos\Device\ClassDriver\RNDISEthernet\Descriptors.h"></File><File path="Demos\Device\ClassDriver\RNDISEthernet\Doxygen.conf"></File><File path="Demos\Device\ClassDriver\RNDISEthernet\LUFA RNDIS.inf"></File><File path="Demos\Device\ClassDriver\RNDISEthernet\makefile"></File><File path="Demos\Device\ClassDriver\RNDISEthernet\RNDISEthernet.c"></File><File path="Demos\Device\ClassDriver\RNDISEthernet\RNDISEthernet.h"></File><File path="Demos\Device\ClassDriver\RNDISEthernet\RNDISEthernet.txt"></File><File path="Demos\Device\ClassDriver\RNDISEthernet\RNDISEthernet.aps"></File></Folder><Folder name="VirtualSerial"><File path="Demos\Device\ClassDriver\VirtualSerial\Descriptors.c"></File><File path="Demos\Device\ClassDriver\VirtualSerial\Descriptors.h"></File><File path="Demos\Device\ClassDriver\VirtualSerial\Doxygen.conf"></File><File path="Demos\Device\ClassDriver\VirtualSerial\LUFA VirtualSerial.inf"></File><File path="Demos\Device\ClassDriver\VirtualSerial\makefile"></File><File path="Demos\Device\ClassDriver\VirtualSerial\VirtualSerial.c"></File><File path="Demos\Device\ClassDriver\VirtualSerial\VirtualSerial.h"></File><File path="Demos\Device\ClassDriver\VirtualSerial\VirtualSerial.txt"></File><File path="Demos\Device\ClassDriver\VirtualSerial\VirtualSerial.aps"></File></Folder><Folder name="VirtualSerialMouse"><File path="Demos\Device\ClassDriver\VirtualSerialMouse\Descriptors.c"></File><File path="Demos\Device\ClassDriver\VirtualSerialMouse\Descriptors.h"></File><File path="Demos\Device\ClassDriver\VirtualSerialMouse\Doxygen.conf"></File><File path="Demos\Device\ClassDriver\VirtualSerialMouse\LUFA VirtualSerialMouse.inf"></File><File path="Demos\Device\ClassDriver\VirtualSerialMouse\makefile"></File><File path="Demos\Device\ClassDriver\VirtualSerialMouse\VirtualSerialMouse.c"></File><File path="Demos\Device\ClassDriver\VirtualSerialMouse\VirtualSerialMouse.h"></File><File path="Demos\Device\ClassDriver\VirtualSerialMouse\VirtualSerialMouse.txt"></File><File path="Demos\Device\ClassDriver\VirtualSerialMouse\VirtualSerialMouse.aps"></File></Folder><File path="Demos\Device\ClassDriver\makefile"></File></Folder><Folder name="LowLevel"><Folder name="AudioInput"><File path="Demos\Device\LowLevel\AudioInput\AudioInput.c"></File><File path="Demos\Device\LowLevel\AudioInput\AudioInput.h"></File><File path="Demos\Device\LowLevel\AudioInput\AudioInput.txt"></File><File path="Demos\Device\LowLevel\AudioInput\Descriptors.c"></File><File path="Demos\Device\LowLevel\AudioInput\Descriptors.h"></File><File path="Demos\Device\LowLevel\AudioInput\Doxygen.conf"></File><File path="Demos\Device\LowLevel\AudioInput\makefile"></File><File path="Demos\Device\LowLevel\AudioInput\AudioInput.aps"></File></Folder><Folder name="AudioOutput"><File path="Demos\Device\LowLevel\AudioOutput\AudioOutput.c"></File><File path="Demos\Device\LowLevel\AudioOutput\AudioOutput.h"></File><File path="Demos\Device\LowLevel\AudioOutput\AudioOutput.txt"></File><File path="Demos\Device\LowLevel\AudioOutput\Descriptors.c"></File><File path="Demos\Device\LowLevel\AudioOutput\Descriptors.h"></File><File path="Demos\Device\LowLevel\AudioOutput\Doxygen.conf"></File><File path="Demos\Device\LowLevel\AudioOutput\makefile"></File><File path="Demos\Device\LowLevel\AudioOutput\AudioOutput.aps"></File></Folder><Folder name="DualVirtualSerial"><File path="Demos\Device\LowLevel\DualVirtualSerial\Descriptors.c"></File><File path="Demos\Device\LowLevel\DualVirtualSerial\Descriptors.h"></File><File path="Demos\Device\LowLevel\DualVirtualSerial\Doxygen.conf"></File><File path="Demos\Device\LowLevel\DualVirtualSerial\DualVirtualSerial.c"></File><File path="Demos\Device\LowLevel\DualVirtualSerial\DualVirtualSerial.h"></File><File path="Demos\Device\LowLevel\DualVirtualSerial\DualVirtualSerial.txt"></File><File path="Demos\Device\LowLevel\DualVirtualSerial\LUFA DualVirtualSerial.inf"></File><File path="Demos\Device\LowLevel\DualVirtualSerial\makefile"></File><File path="Demos\Device\LowLevel\DualVirtualSerial\DualVirtualSerial.aps"></File></Folder><Folder name="GenericHID"><File path="Demos\Device\LowLevel\GenericHID\Descriptors.c"></File><File path="Demos\Device\LowLevel\GenericHID\Descriptors.h"></File><File path="Demos\Device\LowLevel\GenericHID\Doxygen.conf"></File><File path="Demos\Device\LowLevel\GenericHID\GenericHID.c"></File><File path="Demos\Device\LowLevel\GenericHID\GenericHID.h"></File><File path="Demos\Device\LowLevel\GenericHID\GenericHID.txt"></File><File path="Demos\Device\LowLevel\GenericHID\makefile"></File><File path="Demos\Device\LowLevel\GenericHID\GenericHID.aps"></File></Folder><Folder name="Joystick"><File path="Demos\Device\LowLevel\Joystick\Descriptors.c"></File><File path="Demos\Device\LowLevel\Joystick\Descriptors.h"></File><File path="Demos\Device\LowLevel\Joystick\Doxygen.conf"></File><File path="Demos\Device\LowLevel\Joystick\Joystick.c"></File><File path="Demos\Device\LowLevel\Joystick\Joystick.h"></File><File path="Demos\Device\LowLevel\Joystick\Joystick.txt"></File><File path="Demos\Device\LowLevel\Joystick\makefile"></File><File path="Demos\Device\LowLevel\Joystick\Joystick.aps"></File></Folder><Folder name="Keyboard"><File path="Demos\Device\LowLevel\Keyboard\Descriptors.c"></File><File path="Demos\Device\LowLevel\Keyboard\Descriptors.h"></File><File path="Demos\Device\LowLevel\Keyboard\Doxygen.conf"></File><File path="Demos\Device\LowLevel\Keyboard\Keyboard.c"></File><File path="Demos\Device\LowLevel\Keyboard\Keyboard.h"></File><File path="Demos\Device\LowLevel\Keyboard\Keyboard.txt"></File><File path="Demos\Device\LowLevel\Keyboard\makefile"></File><File path="Demos\Device\LowLevel\Keyboard\Keyboard.aps"></File></Folder><Folder name="KeyboardMouse"><File path="Demos\Device\LowLevel\KeyboardMouse\Descriptors.c"></File><File path="Demos\Device\LowLevel\KeyboardMouse\Descriptors.h"></File><File path="Demos\Device\LowLevel\KeyboardMouse\Doxygen.conf"></File><File path="Demos\Device\LowLevel\KeyboardMouse\KeyboardMouse.c"></File><File path="Demos\Device\LowLevel\KeyboardMouse\KeyboardMouse.h"></File><File path="Demos\Device\LowLevel\KeyboardMouse\KeyboardMouse.txt"></File><File path="Demos\Device\LowLevel\KeyboardMouse\makefile"></File><File path="Demos\Device\LowLevel\KeyboardMouse\KeyboardMouse.aps"></File></Folder><Folder name="MassStorage"><Folder name="Lib"><File path="Demos\Device\LowLevel\MassStorage\Lib\DataflashManager.c"></File><File path="Demos\Device\LowLevel\MassStorage\Lib\DataflashManager.h"></File><File path="Demos\Device\LowLevel\MassStorage\Lib\SCSI.c"></File><File path="Demos\Device\LowLevel\MassStorage\Lib\SCSI.h"></File></Folder><File path="Demos\Device\LowLevel\MassStorage\Descriptors.c"></File><File path="Demos\Device\LowLevel\MassStorage\Descriptors.h"></File><File path="Demos\Device\LowLevel\MassStorage\Doxygen.conf"></File><File path="Demos\Device\LowLevel\MassStorage\makefile"></File><File path="Demos\Device\LowLevel\MassStorage\MassStorage.c"></File><File path="Demos\Device\LowLevel\MassStorage\MassStorage.h"></File><File path="Demos\Device\LowLevel\MassStorage\MassStorage.txt"></File><File path="Demos\Device\LowLevel\MassStorage\MassStorage.aps"></File></Folder><Folder name="MIDI"><File path="Demos\Device\LowLevel\MIDI\Descriptors.c"></File><File path="Demos\Device\LowLevel\MIDI\Descriptors.h"></File><File path="Demos\Device\LowLevel\MIDI\Doxygen.conf"></File><File path="Demos\Device\LowLevel\MIDI\makefile"></File><File path="Demos\Device\LowLevel\MIDI\MIDI.c"></File><File path="Demos\Device\LowLevel\MIDI\MIDI.h"></File><File path="Demos\Device\LowLevel\MIDI\MIDI.txt"></File><File path="Demos\Device\LowLevel\MIDI\MIDI.aps"></File></Folder><Folder name="Mouse"><File path="Demos\Device\LowLevel\Mouse\Descriptors.c"></File><File path="Demos\Device\LowLevel\Mouse\Descriptors.h"></File><File path="Demos\Device\LowLevel\Mouse\Doxygen.conf"></File><File path="Demos\Device\LowLevel\Mouse\makefile"></File><File path="Demos\Device\LowLevel\Mouse\Mouse.c"></File><File path="Demos\Device\LowLevel\Mouse\Mouse.h"></File><File path="Demos\Device\LowLevel\Mouse\Mouse.txt"></File><File path="Demos\Device\LowLevel\Mouse\Mouse.aps"></File></Folder><Folder name="RNDISEthernet"><Folder name="Lib"><File path="Demos\Device\LowLevel\RNDISEthernet\Lib\Webserver.h"></File><File path="Demos\Device\LowLevel\RNDISEthernet\Lib\ARP.c"></File><File path="Demos\Device\LowLevel\RNDISEthernet\Lib\ARP.h"></File><File path="Demos\Device\LowLevel\RNDISEthernet\Lib\DHCP.c"></File><File path="Demos\Device\LowLevel\RNDISEthernet\Lib\DHCP.h"></File><File path="Demos\Device\LowLevel\RNDISEthernet\Lib\Ethernet.c"></File><File path="Demos\Device\LowLevel\RNDISEthernet\Lib\Ethernet.h"></File><File path="Demos\Device\LowLevel\RNDISEthernet\Lib\EthernetProtocols.h"></File><File path="Demos\Device\LowLevel\RNDISEthernet\Lib\ICMP.c"></File><File path="Demos\Device\LowLevel\RNDISEthernet\Lib\ICMP.h"></File><File path="Demos\Device\LowLevel\RNDISEthernet\Lib\IP.c"></File><File path="Demos\Device\LowLevel\RNDISEthernet\Lib\IP.h"></File><File path="Demos\Device\LowLevel\RNDISEthernet\Lib\ProtocolDecoders.c"></File><File path="Demos\Device\LowLevel\RNDISEthernet\Lib\ProtocolDecoders.h"></File><File path="Demos\Device\LowLevel\RNDISEthernet\Lib\RNDIS.c"></File><File path="Demos\Device\LowLevel\RNDISEthernet\Lib\RNDIS.h"></File><File path="Demos\Device\LowLevel\RNDISEthernet\Lib\TCP.c"></File><File path="Demos\Device\LowLevel\RNDISEthernet\Lib\TCP.h"></File><File path="Demos\Device\LowLevel\RNDISEthernet\Lib\UDP.c"></File><File path="Demos\Device\LowLevel\RNDISEthernet\Lib\UDP.h"></File><File path="Demos\Device\LowLevel\RNDISEthernet\Lib\Webserver.c"></File></Folder><File path="Demos\Device\LowLevel\RNDISEthernet\Descriptors.c"></File><File path="Demos\Device\LowLevel\RNDISEthernet\Descriptors.h"></File><File path="Demos\Device\LowLevel\RNDISEthernet\Doxygen.conf"></File><File path="Demos\Device\LowLevel\RNDISEthernet\LUFA RNDIS.inf"></File><File path="Demos\Device\LowLevel\RNDISEthernet\makefile"></File><File path="Demos\Device\LowLevel\RNDISEthernet\RNDISEthernet.c"></File><File path="Demos\Device\LowLevel\RNDISEthernet\RNDISEthernet.h"></File><File path="Demos\Device\LowLevel\RNDISEthernet\RNDISEthernet.txt"></File><File path="Demos\Device\LowLevel\RNDISEthernet\RNDISEthernet.aps"></File></Folder><Folder name="VirtualSerial"><File path="Demos\Device\LowLevel\VirtualSerial\Descriptors.c"></File><File path="Demos\Device\LowLevel\VirtualSerial\Descriptors.h"></File><File path="Demos\Device\LowLevel\VirtualSerial\Doxygen.conf"></File><File path="Demos\Device\LowLevel\VirtualSerial\LUFA VirtualSerial.inf"></File><File path="Demos\Device\LowLevel\VirtualSerial\makefile"></File><File path="Demos\Device\LowLevel\VirtualSerial\VirtualSerial.c"></File><File path="Demos\Device\LowLevel\VirtualSerial\VirtualSerial.h"></File><File path="Demos\Device\LowLevel\VirtualSerial\VirtualSerial.txt"></File><File path="Demos\Device\LowLevel\VirtualSerial\VirtualSerial.aps"></File></Folder><File path="Demos\Device\LowLevel\makefile"></File></Folder><Folder name="Incomplete"><Folder name="SideShow"><Folder name="Lib"><File path="Demos\Device\Incomplete\Sideshow\Lib\SideshowApplications.c"></File><File path="Demos\Device\Incomplete\Sideshow\Lib\SideshowApplications.h"></File><File path="Demos\Device\Incomplete\Sideshow\Lib\SideshowCommands.c"></File><File path="Demos\Device\Incomplete\Sideshow\Lib\SideshowCommands.h"></File><File path="Demos\Device\Incomplete\Sideshow\Lib\SideshowCommon.c"></File><File path="Demos\Device\Incomplete\Sideshow\Lib\SideshowCommon.h"></File><File path="Demos\Device\Incomplete\Sideshow\Lib\SideshowContent.c"></File><File path="Demos\Device\Incomplete\Sideshow\Lib\SideshowContent.h"></File></Folder><File path="Demos\Device\Incomplete\Sideshow\Descriptors.c"></File><File path="Demos\Device\Incomplete\Sideshow\Descriptors.h"></File><File path="Demos\Device\Incomplete\Sideshow\makefile"></File><File path="Demos\Device\Incomplete\Sideshow\Sideshow.c"></File><File path="Demos\Device\Incomplete\Sideshow\Sideshow.h"></File></Folder><Folder name="TestAndMeasurement"><File path="Demos\Device\Incomplete\TestAndMeasurement\Descriptors.c"></File><File path="Demos\Device\Incomplete\TestAndMeasurement\Descriptors.h"></File><File path="Demos\Device\Incomplete\TestAndMeasurement\TestAndMeasurement.c"></File><File path="Demos\Device\Incomplete\TestAndMeasurement\TestAndMeasurement.h"></File><File path="Demos\Device\Incomplete\TestAndMeasurement\makefile"></File></Folder></Folder><File path="Demos\Device\makefile"></File></Folder><Folder name="Host"><Folder name="ClassDriver"><Folder name="JoystickHostWithParser"><File path="Demos\Host\ClassDriver\JoystickHostWithParser\Doxygen.conf"></File><File path="Demos\Host\ClassDriver\JoystickHostWithParser\JoystickHostWithParser.c"></File><File path="Demos\Host\ClassDriver\JoystickHostWithParser\JoystickHostWithParser.h"></File><File path="Demos\Host\ClassDriver\JoystickHostWithParser\JoystickHostWithParser.txt"></File><File path="Demos\Host\ClassDriver\JoystickHostWithParser\makefile"></File><File path="Demos\Host\ClassDriver\JoystickHostWithParser\JoystickHostWithParser.aps"></File></Folder><Folder name="KeyboardHost"><File path="Demos\Host\ClassDriver\KeyboardHost\Doxygen.conf"></File><File path="Demos\Host\ClassDriver\KeyboardHost\KeyboardHost.c"></File><File path="Demos\Host\ClassDriver\KeyboardHost\KeyboardHost.h"></File><File path="Demos\Host\ClassDriver\KeyboardHost\makefile"></File><File path="Demos\Host\ClassDriver\KeyboardHost\KeyboardHost.txt"></File><File path="Demos\Host\ClassDriver\KeyboardHost\KeyboardHost.aps"></File></Folder><Folder name="KeyboardHostWithParser"><File path="Demos\Host\ClassDriver\KeyboardHostWithParser\Doxygen.conf"></File><File path="Demos\Host\ClassDriver\KeyboardHostWithParser\KeyboardHostWithParser.c"></File><File path="Demos\Host\ClassDriver\KeyboardHostWithParser\KeyboardHostWithParser.h"></File><File path="Demos\Host\ClassDriver\KeyboardHostWithParser\makefile"></File><File path="Demos\Host\ClassDriver\KeyboardHostWithParser\KeyboardHostWithParser.txt"></File><File path="Demos\Host\ClassDriver\KeyboardHostWithParser\KeyboardHostWithParser.aps"></File></Folder><Folder name="MassStorageHost"><File path="Demos\Host\ClassDriver\MassStorageHost\Doxygen.conf"></File><File path="Demos\Host\ClassDriver\MassStorageHost\makefile"></File><File path="Demos\Host\ClassDriver\MassStorageHost\MassStorageHost.c"></File><File path="Demos\Host\ClassDriver\MassStorageHost\MassStorageHost.h"></File><File path="Demos\Host\ClassDriver\MassStorageHost\MassStorageHost.txt"></File><File path="Demos\Host\ClassDriver\MassStorageHost\MassStorageHost.aps"></File></Folder><Folder name="MIDIHost"><File path="Demos\Host\ClassDriver\MIDIHost\Doxygen.conf"></File><File path="Demos\Host\ClassDriver\MIDIHost\makefile"></File><File path="Demos\Host\ClassDriver\MIDIHost\MIDIHost.c"></File><File path="Demos\Host\ClassDriver\MIDIHost\MIDIHost.h"></File><File path="Demos\Host\ClassDriver\MIDIHost\MIDIHost.txt"></File><File path="Demos\Host\ClassDriver\MIDIHost\MIDIHost.aps"></File></Folder><Folder name="MouseHost"><File path="Demos\Host\ClassDriver\MouseHost\Doxygen.conf"></File><File path="Demos\Host\ClassDriver\MouseHost\makefile"></File><File path="Demos\Host\ClassDriver\MouseHost\MouseHost.c"></File><File path="Demos\Host\ClassDriver\MouseHost\MouseHost.h"></File><File path="Demos\Host\ClassDriver\MouseHost\MouseHost.txt"></File><File path="Demos\Host\ClassDriver\MouseHost\MouseHost.aps"></File></Folder><Folder name="MouseHostWithParser"><File path="Demos\Host\ClassDriver\MouseHostWithParser\Doxygen.conf"></File><File path="Demos\Host\ClassDriver\MouseHostWithParser\makefile"></File><File path="Demos\Host\ClassDriver\MouseHostWithParser\MouseHostWithParser.txt"></File><File path="Demos\Host\ClassDriver\MouseHostWithParser\MouseHostWithParser.c"></File><File path="Demos\Host\ClassDriver\MouseHostWithParser\MouseHostWithParser.h"></File><File path="Demos\Host\ClassDriver\MouseHostWithParser\MouseHostWithParser.aps"></File></Folder><Folder name="PrinterHost"><File path="Demos\Host\ClassDriver\PrinterHost\Doxygen.conf"></File><File path="Demos\Host\ClassDriver\PrinterHost\makefile"></File><File path="Demos\Host\ClassDriver\PrinterHost\PrinterHost.c"></File><File path="Demos\Host\ClassDriver\PrinterHost\PrinterHost.h"></File><File path="Demos\Host\ClassDriver\PrinterHost\PrinterHost.txt"></File><File path="Demos\Host\ClassDriver\PrinterHost\PrinterHost.aps"></File></Folder><Folder name="RNDISEthernetHost"><File path="Demos\Host\ClassDriver\RNDISEthernetHost\Doxygen.conf"></File><File path="Demos\Host\ClassDriver\RNDISEthernetHost\makefile"></File><File path="Demos\Host\ClassDriver\RNDISEthernetHost\RNDISEthernetHost.c"></File><File path="Demos\Host\ClassDriver\RNDISEthernetHost\RNDISEthernetHost.h"></File><File path="Demos\Host\ClassDriver\RNDISEthernetHost\RNDISEthernetHost.txt"></File><File path="Demos\Host\ClassDriver\RNDISEthernetHost\RNDISEthernetHost.aps"></File></Folder><Folder name="StillImageHost"><File path="Demos\Host\ClassDriver\StillImageHost\Doxygen.conf"></File><File path="Demos\Host\ClassDriver\StillImageHost\makefile"></File><File path="Demos\Host\ClassDriver\StillImageHost\StillImageHost.c"></File><File path="Demos\Host\ClassDriver\StillImageHost\StillImageHost.h"></File><File path="Demos\Host\ClassDriver\StillImageHost\StillImageHost.txt"></File><File path="Demos\Host\ClassDriver\StillImageHost\StillImageHost.aps"></File></Folder><Folder name="VirtualSerialHost"><File path="Demos\Host\ClassDriver\VirtualSerialHost\Doxygen.conf"></File><File path="Demos\Host\ClassDriver\VirtualSerialHost\makefile"></File><File path="Demos\Host\ClassDriver\VirtualSerialHost\VirtualSerialHost.c"></File><File path="Demos\Host\ClassDriver\VirtualSerialHost\VirtualSerialHost.h"></File><File path="Demos\Host\ClassDriver\VirtualSerialHost\VirtualSerialHost.txt"></File><File path="Demos\Host\ClassDriver\VirtualSerialHost\VirtualSerialHost.aps"></File></Folder><File path="Demos\Host\ClassDriver\makefile"></File></Folder><Folder name="LowLevel"><Folder name="GenericHIDHost"><File path="Demos\Host\LowLevel\GenericHIDHost\ConfigDescriptor.c"></File><File path="Demos\Host\LowLevel\GenericHIDHost\ConfigDescriptor.h"></File><File path="Demos\Host\LowLevel\GenericHIDHost\Doxygen.conf"></File><File path="Demos\Host\LowLevel\GenericHIDHost\GenericHIDHost.c"></File><File path="Demos\Host\LowLevel\GenericHIDHost\GenericHIDHost.h"></File><File path="Demos\Host\LowLevel\GenericHIDHost\GenericHIDHost.txt"></File><File path="Demos\Host\LowLevel\GenericHIDHost\makefile"></File><File path="Demos\Host\LowLevel\GenericHIDHost\GenericHIDHost.aps"></File></Folder><Folder name="JoystickHostWithParser"><File path="Demos\Host\LowLevel\JoystickHostWithParser\ConfigDescriptor.c"></File><File path="Demos\Host\LowLevel\JoystickHostWithParser\ConfigDescriptor.h"></File><File path="Demos\Host\LowLevel\JoystickHostWithParser\Doxygen.conf"></File><File path="Demos\Host\LowLevel\JoystickHostWithParser\HIDReport.c"></File><File path="Demos\Host\LowLevel\JoystickHostWithParser\HIDReport.h"></File><File path="Demos\Host\LowLevel\JoystickHostWithParser\JoystickHostWithParser.c"></File><File path="Demos\Host\LowLevel\JoystickHostWithParser\JoystickHostWithParser.h"></File><File path="Demos\Host\LowLevel\JoystickHostWithParser\JoystickHostWithParser.txt"></File><File path="Demos\Host\LowLevel\JoystickHostWithParser\makefile"></File><File path="Demos\Host\LowLevel\JoystickHostWithParser\JoystickHostWithParser.aps"></File></Folder><Folder name="KeyboardHost"><File path="Demos\Host\LowLevel\KeyboardHost\ConfigDescriptor.c"></File><File path="Demos\Host\LowLevel\KeyboardHost\ConfigDescriptor.h"></File><File path="Demos\Host\LowLevel\KeyboardHost\Doxygen.conf"></File><File path="Demos\Host\LowLevel\KeyboardHost\KeyboardHost.c"></File><File path="Demos\Host\LowLevel\KeyboardHost\KeyboardHost.h"></File><File path="Demos\Host\LowLevel\KeyboardHost\KeyboardHost.txt"></File><File path="Demos\Host\LowLevel\KeyboardHost\makefile"></File><File path="Demos\Host\LowLevel\KeyboardHost\KeyboardHost.aps"></File></Folder><Folder name="KeyboardHostWithParser"><File path="Demos\Host\LowLevel\KeyboardHostWithParser\makefile"></File><File path="Demos\Host\LowLevel\KeyboardHostWithParser\ConfigDescriptor.c"></File><File path="Demos\Host\LowLevel\KeyboardHostWithParser\ConfigDescriptor.h"></File><File path="Demos\Host\LowLevel\KeyboardHostWithParser\Doxygen.conf"></File><File path="Demos\Host\LowLevel\KeyboardHostWithParser\HIDReport.c"></File><File path="Demos\Host\LowLevel\KeyboardHostWithParser\HIDReport.h"></File><File path="Demos\Host\LowLevel\KeyboardHostWithParser\KeyboardHostWithParser.c"></File><File path="Demos\Host\LowLevel\KeyboardHostWithParser\KeyboardHostWithParser.h"></File><File path="Demos\Host\LowLevel\KeyboardHostWithParser\KeyboardHostWithParser.txt"></File><File path="Demos\Host\LowLevel\KeyboardHostWithParser\KeyboardHostWithParser.aps"></File></Folder><Folder name="MassStorageHost"><Folder name="Lib"><File path="Demos\Host\LowLevel\MassStorageHost\Lib\MassStoreCommands.c"></File><File path="Demos\Host\LowLevel\MassStorageHost\Lib\MassStoreCommands.h"></File></Folder><File path="Demos\Host\LowLevel\MassStorageHost\ConfigDescriptor.c"></File><File path="Demos\Host\LowLevel\MassStorageHost\ConfigDescriptor.h"></File><File path="Demos\Host\LowLevel\MassStorageHost\Doxygen.conf"></File><File path="Demos\Host\LowLevel\MassStorageHost\makefile"></File><File path="Demos\Host\LowLevel\MassStorageHost\MassStorageHost.c"></File><File path="Demos\Host\LowLevel\MassStorageHost\MassStorageHost.h"></File><File path="Demos\Host\LowLevel\MassStorageHost\MassStorageHost.txt"></File><File path="Demos\Host\LowLevel\MassStorageHost\MassStorageHost.aps"></File></Folder><Folder name="MIDIHost"><File path="Demos\Host\LowLevel\MIDIHost\ConfigDescriptor.c"></File><File path="Demos\Host\LowLevel\MIDIHost\ConfigDescriptor.h"></File><File path="Demos\Host\LowLevel\MIDIHost\Doxygen.conf"></File><File path="Demos\Host\LowLevel\MIDIHost\makefile"></File><File path="Demos\Host\LowLevel\MIDIHost\MIDIHost.c"></File><File path="Demos\Host\LowLevel\MIDIHost\MIDIHost.h"></File><File path="Demos\Host\LowLevel\MIDIHost\MIDIHost.txt"></File><File path="Demos\Host\LowLevel\MIDIHost\MIDIHost.aps"></File></Folder><Folder name="MouseHost"><File path="Demos\Host\LowLevel\MouseHost\ConfigDescriptor.c"></File><File path="Demos\Host\LowLevel\MouseHost\ConfigDescriptor.h"></File><File path="Demos\Host\LowLevel\MouseHost\Doxygen.conf"></File><File path="Demos\Host\LowLevel\MouseHost\makefile"></File><File path="Demos\Host\LowLevel\MouseHost\MouseHost.c"></File><File path="Demos\Host\LowLevel\MouseHost\MouseHost.h"></File><File path="Demos\Host\LowLevel\MouseHost\MouseHost.txt"></File><File path="Demos\Host\LowLevel\MouseHost\MouseHost.aps"></File></Folder><Folder name="MouseHostWithParser"><File path="Demos\Host\LowLevel\MouseHostWithParser\MouseHostWithParser.txt"></File><File path="Demos\Host\LowLevel\MouseHostWithParser\ConfigDescriptor.c"></File><File path="Demos\Host\LowLevel\MouseHostWithParser\ConfigDescriptor.h"></File><File path="Demos\Host\LowLevel\MouseHostWithParser\Doxygen.conf"></File><File path="Demos\Host\LowLevel\MouseHostWithParser\HIDReport.c"></File><File path="Demos\Host\LowLevel\MouseHostWithParser\HIDReport.h"></File><File path="Demos\Host\LowLevel\MouseHostWithParser\makefile"></File><File path="Demos\Host\LowLevel\MouseHostWithParser\MouseHostWithParser.c"></File><File path="Demos\Host\LowLevel\MouseHostWithParser\MouseHostWithParser.h"></File><File path="Demos\Host\LowLevel\MouseHostWithParser\MouseHostWithParser.aps"></File></Folder><Folder name="PrinterHost"><Folder name="Lib"><File path="Demos\Host\LowLevel\PrinterHost\Lib\PrinterCommands.c"></File><File path="Demos\Host\LowLevel\PrinterHost\Lib\PrinterCommands.h"></File></Folder><File path="Demos\Host\LowLevel\PrinterHost\ConfigDescriptor.c"></File><File path="Demos\Host\LowLevel\PrinterHost\ConfigDescriptor.h"></File><File path="Demos\Host\LowLevel\PrinterHost\makefile"></File><File path="Demos\Host\LowLevel\PrinterHost\PrinterHost.c"></File><File path="Demos\Host\LowLevel\PrinterHost\PrinterHost.h"></File><File path="Demos\Host\LowLevel\PrinterHost\Doxygen.conf"></File><File path="Demos\Host\LowLevel\PrinterHost\PrinterHost.txt"></File><File path="Demos\Host\LowLevel\PrinterHost\PrinterHost.aps"></File></Folder><Folder name="RNDISEthernetHost"><Folder name="Lib"><File path="Demos\Host\LowLevel\RNDISEthernetHost\Lib\RNDISCommands.c"></File><File path="Demos\Host\LowLevel\RNDISEthernetHost\Lib\RNDISCommands.h"></File></Folder><File path="Demos\Host\LowLevel\RNDISEthernetHost\ConfigDescriptor.c"></File><File path="Demos\Host\LowLevel\RNDISEthernetHost\ConfigDescriptor.h"></File><File path="Demos\Host\LowLevel\RNDISEthernetHost\makefile"></File><File path="Demos\Host\LowLevel\RNDISEthernetHost\RNDISEthernetHost.c"></File><File path="Demos\Host\LowLevel\RNDISEthernetHost\RNDISEthernetHost.h"></File><File path="Demos\Host\LowLevel\RNDISEthernetHost\Doxygen.conf"></File><File path="Demos\Host\LowLevel\RNDISEthernetHost\RNDISHost.txt"></File><File path="Demos\Host\LowLevel\RNDISEthernetHost\RNDISEthernetHost.aps"></File></Folder><Folder name="StillImageHost"><Folder name="Lib"><File path="Demos\Host\LowLevel\StillImageHost\Lib\StillImageCommands.c"></File><File path="Demos\Host\LowLevel\StillImageHost\Lib\StillImageCommands.h"></File><File path="Demos\Host\LowLevel\StillImageHost\Lib\PIMACodes.h"></File></Folder><File path="Demos\Host\LowLevel\StillImageHost\ConfigDescriptor.c"></File><File path="Demos\Host\LowLevel\StillImageHost\ConfigDescriptor.h"></File><File path="Demos\Host\LowLevel\StillImageHost\Doxygen.conf"></File><File path="Demos\Host\LowLevel\StillImageHost\makefile"></File><File path="Demos\Host\LowLevel\StillImageHost\StillImageHost.c"></File><File path="Demos\Host\LowLevel\StillImageHost\StillImageHost.h"></File><File path="Demos\Host\LowLevel\StillImageHost\StillImageHost.txt"></File><File path="Demos\Host\LowLevel\StillImageHost\StillImageHost.aps"></File></Folder><Folder name="VirtualSerialHost"><File path="Demos\Host\LowLevel\VirtualSerialHost\ConfigDescriptor.c"></File><File path="Demos\Host\LowLevel\VirtualSerialHost\ConfigDescriptor.h"></File><File path="Demos\Host\LowLevel\VirtualSerialHost\Doxygen.conf"></File><File path="Demos\Host\LowLevel\VirtualSerialHost\makefile"></File><File path="Demos\Host\LowLevel\VirtualSerialHost\VirtualSerialHost.c"></File><File path="Demos\Host\LowLevel\VirtualSerialHost\VirtualSerialHost.h"></File><File path="Demos\Host\LowLevel\VirtualSerialHost\VirtualSerialHost.txt"></File><File path="Demos\Host\LowLevel\VirtualSerialHost\VirtualSerialHost.aps"></File></Folder><File path="Demos\Host\LowLevel\makefile"></File></Folder><Folder name="Incomplete"><Folder name="BluetoothHost"><Folder name="Lib"><File path="Demos\Host\Incomplete\BluetoothHost\Lib\BluetoothACLPackets.c"></File><File path="Demos\Host\Incomplete\BluetoothHost\Lib\BluetoothACLPackets.h"></File><File path="Demos\Host\Incomplete\BluetoothHost\Lib\BluetoothClassCodes.h"></File><File path="Demos\Host\Incomplete\BluetoothHost\Lib\BluetoothHCICommands.c"></File><File path="Demos\Host\Incomplete\BluetoothHost\Lib\BluetoothHCICommands.h"></File><File path="Demos\Host\Incomplete\BluetoothHost\Lib\BluetoothStack.c"></File><File path="Demos\Host\Incomplete\BluetoothHost\Lib\BluetoothStack.h"></File><File path="Demos\Host\Incomplete\BluetoothHost\Lib\SDPServices.c"></File><File path="Demos\Host\Incomplete\BluetoothHost\Lib\SDPServices.h"></File><File path="Demos\Host\Incomplete\BluetoothHost\Lib\RFCOMM.c"></File><File path="Demos\Host\Incomplete\BluetoothHost\Lib\RFCOMM.h"></File><File path="Demos\Host\Incomplete\BluetoothHost\Lib\SDP.c"></File><File path="Demos\Host\Incomplete\BluetoothHost\Lib\SDP.h"></File><File path="Demos\Host\Incomplete\BluetoothHost\Lib\RFCOMMControl.c"></File><File path="Demos\Host\Incomplete\BluetoothHost\Lib\RFCOMMControl.h"></File></Folder><File path="Demos\Host\Incomplete\BluetoothHost\makefile"></File><File path="Demos\Host\Incomplete\BluetoothHost\BluetoothHost.c"></File><File path="Demos\Host\Incomplete\BluetoothHost\BluetoothHost.h"></File><File path="Demos\Host\Incomplete\BluetoothHost\ConfigDescriptor.c"></File><File path="Demos\Host\Incomplete\BluetoothHost\ConfigDescriptor.h"></File><File path="Demos\Host\Incomplete\BluetoothHost\DeviceDescriptor.c"></File><File path="Demos\Host\Incomplete\BluetoothHost\DeviceDescriptor.h"></File><File path="Demos\Host\Incomplete\BluetoothHost\Doxygen.conf"></File><File path="Demos\Host\Incomplete\BluetoothHost\BluetoothEvents.c"></File><File path="Demos\Host\Incomplete\BluetoothHost\BluetoothEvents.h"></File></Folder></Folder><File path="Demos\Host\makefile"></File></Folder><Folder name="DualRole"><Folder name="ClassDriver"><Folder name="MouseHostDevice"><File path="Demos\DualRole\ClassDriver\MouseHostDevice\Doxygen.conf"></File><File path="Demos\DualRole\ClassDriver\MouseHostDevice\makefile"></File><File path="Demos\DualRole\ClassDriver\MouseHostDevice\MouseHostDevice.c"></File><File path="Demos\DualRole\ClassDriver\MouseHostDevice\MouseHostDevice.h"></File><File path="Demos\DualRole\ClassDriver\MouseHostDevice\Descriptors.c"></File><File path="Demos\DualRole\ClassDriver\MouseHostDevice\Descriptors.h"></File><File path="Demos\DualRole\ClassDriver\MouseHostDevice\DeviceFunctions.c"></File><File path="Demos\DualRole\ClassDriver\MouseHostDevice\HostFunctions.c"></File><File path="Demos\DualRole\ClassDriver\MouseHostDevice\HostFunctions.h"></File><File path="Demos\DualRole\ClassDriver\MouseHostDevice\DeviceFunctions.h"></File><File path="Demos\DualRole\ClassDriver\MouseHostDevice\MouseHostDevice.txt"></File><File path="Demos\DualRole\ClassDriver\MouseHostDevice\MouseHostDevice.aps"></File></Folder><File path="Demos\DualRole\ClassDriver\makefile"></File></Folder><File path="Demos\DualRole\makefile"></File></Folder><File path="Demos\makefile"></File></Folder><Folder name="LUFA"><Folder name="Common"><File path="LUFA\Common\Common.h"></File><File path="LUFA\Common\BoardTypes.h"></File><File path="LUFA\Common\Attributes.h"></File><File path="LUFA\Common\Architectures.h"></File></Folder><Folder name="Drivers"><Folder name="USB"><Folder name="Core"><Folder name="AVR8"><File path="LUFA\Drivers\USB\Core\AVR8\Device.c"></File><File path="LUFA\Drivers\USB\Core\AVR8\Device.h"></File><File path="LUFA\Drivers\USB\Core\AVR8\Endpoint.c"></File><File path="LUFA\Drivers\USB\Core\AVR8\Endpoint.h"></File><File path="LUFA\Drivers\USB\Core\AVR8\Host.c"></File><File path="LUFA\Drivers\USB\Core\AVR8\Host.h"></File><File path="LUFA\Drivers\USB\Core\AVR8\OTG.h"></File><File path="LUFA\Drivers\USB\Core\AVR8\Pipe.c"></File><File path="LUFA\Drivers\USB\Core\AVR8\Pipe.h"></File><File path="LUFA\Drivers\USB\Core\AVR8\USBController.c"></File><File path="LUFA\Drivers\USB\Core\AVR8\USBController.h"></File><File path="LUFA\Drivers\USB\Core\AVR8\USBInterrupt.c"></File><File path="LUFA\Drivers\USB\Core\AVR8\USBInterrupt.h"></File></Folder><Folder name="Template"><File path="LUFA\Drivers\USB\Core\Template\Template_Endpoint_Control_R.c"></File><File path="LUFA\Drivers\USB\Core\Template\Template_Endpoint_Control_W.c"></File><File path="LUFA\Drivers\USB\Core\Template\Template_Endpoint_RW.c"></File><File path="LUFA\Drivers\USB\Core\Template\Template_Pipe_RW.c"></File></Folder><File path="LUFA\Drivers\USB\Core\ConfigDescriptor.c"></File><File path="LUFA\Drivers\USB\Core\ConfigDescriptor.h"></File><File path="LUFA\Drivers\USB\Core\DeviceStandardReq.c"></File><File path="LUFA\Drivers\USB\Core\DeviceStandardReq.h"></File><File path="LUFA\Drivers\USB\Core\EndpointStream.c"></File><File path="LUFA\Drivers\USB\Core\EndpointStream.h"></File><File path="LUFA\Drivers\USB\Core\Events.c"></File><File path="LUFA\Drivers\USB\Core\Events.h"></File><File path="LUFA\Drivers\USB\Core\HostStandardReq.c"></File><File path="LUFA\Drivers\USB\Core\HostStandardReq.h"></File><File path="LUFA\Drivers\USB\Core\PipeStream.c"></File><File path="LUFA\Drivers\USB\Core\PipeStream.h"></File><File path="LUFA\Drivers\USB\Core\StdDescriptors.h"></File><File path="LUFA\Drivers\USB\Core\StdRequestType.h"></File><File path="LUFA\Drivers\USB\Core\USBMode.h"></File><File path="LUFA\Drivers\USB\Core\USBTask.c"></File><File path="LUFA\Drivers\USB\Core\USBTask.h"></File><File path="LUFA\Drivers\USB\Core\Device.h"></File><File path="LUFA\Drivers\USB\Core\Endpoint.h"></File><File path="LUFA\Drivers\USB\Core\Host.h"></File><File path="LUFA\Drivers\USB\Core\OTG.h"></File><File path="LUFA\Drivers\USB\Core\Pipe.h"></File><File path="LUFA\Drivers\USB\Core\USBController.h"></File><File path="LUFA\Drivers\USB\Core\USBInterrupt.h"></File></Folder><Folder name="Class"><Folder name="Device"><File path="LUFA\Drivers\USB\Class\Device\HID.c"></File><File path="LUFA\Drivers\USB\Class\Device\HID.h"></File><File path="LUFA\Drivers\USB\Class\Device\CDC.c"></File><File path="LUFA\Drivers\USB\Class\Device\CDC.h"></File><File path="LUFA\Drivers\USB\Class\Device\RNDIS.c"></File><File path="LUFA\Drivers\USB\Class\Device\RNDIS.h"></File><File path="LUFA\Drivers\USB\Class\Device\MassStorage.c"></File><File path="LUFA\Drivers\USB\Class\Device\MassStorage.h"></File><File path="LUFA\Drivers\USB\Class\Device\Audio.c"></File><File path="LUFA\Drivers\USB\Class\Device\Audio.h"></File><File path="LUFA\Drivers\USB\Class\Device\MIDI.c"></File><File path="LUFA\Drivers\USB\Class\Device\MIDI.h"></File></Folder><Folder name="Host"><File path="LUFA\Drivers\USB\Class\Host\CDC.c"></File><File path="LUFA\Drivers\USB\Class\Host\CDC.h"></File><File path="LUFA\Drivers\USB\Class\Host\HID.c"></File><File path="LUFA\Drivers\USB\Class\Host\HID.h"></File><File path="LUFA\Drivers\USB\Class\Host\MassStorage.c"></File><File path="LUFA\Drivers\USB\Class\Host\MassStorage.h"></File><File path="LUFA\Drivers\USB\Class\Host\StillImage.c"></File><File path="LUFA\Drivers\USB\Class\Host\StillImage.h"></File><File path="LUFA\Drivers\USB\Class\Host\MIDI.c"></File><File path="LUFA\Drivers\USB\Class\Host\MIDI.h"></File><File path="LUFA\Drivers\USB\Class\Host\Printer.c"></File><File path="LUFA\Drivers\USB\Class\Host\Printer.h"></File><File path="LUFA\Drivers\USB\Class\Host\RNDIS.h"></File><File path="LUFA\Drivers\USB\Class\Host\RNDIS.c"></File></Folder><Folder name="Common"><File path="LUFA\Drivers\USB\Class\Common\Audio.h"></File><File path="LUFA\Drivers\USB\Class\Common\CDC.h"></File><File path="LUFA\Drivers\USB\Class\Common\HID.h"></File><File path="LUFA\Drivers\USB\Class\Common\MassStorage.h"></File><File path="LUFA\Drivers\USB\Class\Common\MIDI.h"></File><File path="LUFA\Drivers\USB\Class\Common\RNDIS.h"></File><File path="LUFA\Drivers\USB\Class\Common\StillImage.h"></File><File path="LUFA\Drivers\USB\Class\Common\Printer.h"></File><File path="LUFA\Drivers\USB\Class\Common\HIDParser.c"></File><File path="LUFA\Drivers\USB\Class\Common\HIDParser.h"></File><File path="LUFA\Drivers\USB\Class\Common\HIDReportData.h"></File></Folder><File path="LUFA\Drivers\USB\Class\Audio.h"></File><File path="LUFA\Drivers\USB\Class\CDC.h"></File><File path="LUFA\Drivers\USB\Class\HID.h"></File><File path="LUFA\Drivers\USB\Class\MassStorage.h"></File><File path="LUFA\Drivers\USB\Class\MIDI.h"></File><File path="LUFA\Drivers\USB\Class\RNDIS.h"></File><File path="LUFA\Drivers\USB\Class\StillImage.h"></File><File path="LUFA\Drivers\USB\Class\Printer.h"></File></Folder><File path="LUFA\Drivers\USB\USB.h"></File></Folder><Folder name="Misc"><File path="LUFA\Drivers\Misc\TerminalCodes.h"></File><File path="LUFA\Drivers\Misc\RingBuffer.h"></File><File path="LUFA\Drivers\Misc\AT45DB321C.h"></File><File path="LUFA\Drivers\Misc\AT45DB642D.h"></File></Folder><Folder name="Board"><Folder name="ADAFRUITU4"><File path="LUFA\Drivers\Board\ADAFRUITU4\LEDs.h"></File></Folder><Folder name="ATAVRUSBRF01"><File path="LUFA\Drivers\Board\ATAVRUSBRF01\LEDs.h"></File><File path="LUFA\Drivers\Board\ATAVRUSBRF01\Buttons.h"></File></Folder><Folder name="BENITO"><File path="LUFA\Drivers\Board\BENITO\LEDs.h"></File><File path="LUFA\Drivers\Board\BENITO\Buttons.h"></File></Folder><Folder name="BUMBLEB"><File path="LUFA\Drivers\Board\BUMBLEB\Buttons.h"></File><File path="LUFA\Drivers\Board\BUMBLEB\Joystick.h"></File><File path="LUFA\Drivers\Board\BUMBLEB\LEDs.h"></File></Folder><Folder name="BUI"><File path="LUFA\Drivers\Board\BUI\LEDs.h"></File></Folder><Folder name="BLACKCAT"><File path="LUFA\Drivers\Board\BLACKCAT\LEDs.h"></File></Folder><Folder name="CULV3"><File path="LUFA\Drivers\Board\CULV3\Buttons.h"></File><File path="LUFA\Drivers\Board\CULV3\LEDs.h"></File></Folder><Folder name="EVK527"><File path="LUFA\Drivers\Board\EVK527\Buttons.h"></File><File path="LUFA\Drivers\Board\EVK527\LEDs.h"></File><File path="LUFA\Drivers\Board\EVK527\Joystick.h"></File><File path="LUFA\Drivers\Board\EVK527\Dataflash.h"></File></Folder><Folder name="JMDBU2"><File path="LUFA\Drivers\Board\JMDBU2\Buttons.h"></File><File path="LUFA\Drivers\Board\JMDBU2\LEDs.h"></File></Folder><Folder name="MAXIMUS"><File path="LUFA\Drivers\Board\MAXIMUS\LEDs.h"></File></Folder><Folder name="MICROSIN162"><File path="LUFA\Drivers\Board\MICROSIN162\LEDs.h"></File><File path="LUFA\Drivers\Board\MICROSIN162\Buttons.h"></File></Folder><Folder name="MINIMUS"><File path="LUFA\Drivers\Board\MINIMUS\Buttons.h"></File><File path="LUFA\Drivers\Board\MINIMUS\LEDs.h"></File></Folder><Folder name="OLIMEX162"><File path="LUFA\Drivers\Board\OLIMEX162\LEDs.h"></File><File path="LUFA\Drivers\Board\OLIMEX162\Buttons.h"></File></Folder><Folder name="RZUSBSTICK"><File path="LUFA\Drivers\Board\RZUSBSTICK\LEDs.h"></File></Folder><Folder name="SPARKFUN8U2"><File path="LUFA\Drivers\Board\SPARKFUN8U2\LEDs.h"></File></Folder><Folder name="STK525"><File path="LUFA\Drivers\Board\STK525\Dataflash.h"></File><File path="LUFA\Drivers\Board\STK525\Joystick.h"></File><File path="LUFA\Drivers\Board\STK525\LEDs.h"></File><File path="LUFA\Drivers\Board\STK525\Buttons.h"></File></Folder><Folder name="STK526"><File path="LUFA\Drivers\Board\STK526\Dataflash.h"></File><File path="LUFA\Drivers\Board\STK526\Joystick.h"></File><File path="LUFA\Drivers\Board\STK526\LEDs.h"></File><File path="LUFA\Drivers\Board\STK526\Buttons.h"></File></Folder><Folder name="TEENSY"><File path="LUFA\Drivers\Board\TEENSY\LEDs.h"></File></Folder><Folder name="UDIP"><File path="LUFA\Drivers\Board\UDIP\LEDs.h"></File><File path="LUFA\Drivers\Board\UDIP\Buttons.h"></File></Folder><Folder name="UNO"><File path="LUFA\Drivers\Board\UNO\LEDs.h"></File></Folder><Folder name="USBFOO"><File path="LUFA\Drivers\Board\USBFOO\Buttons.h"></File><File path="LUFA\Drivers\Board\USBFOO\LEDS.h"></File></Folder><Folder name="USBKEY"><File path="LUFA\Drivers\Board\USBKEY\Dataflash.h"></File><File path="LUFA\Drivers\Board\USBKEY\Joystick.h"></File><File path="LUFA\Drivers\Board\USBKEY\LEDs.h"></File><File path="LUFA\Drivers\Board\USBKEY\Buttons.h"></File></Folder><Folder name="USBTINYMKII"><File path="LUFA\Drivers\Board\USBTINYMKII\LEDs.h"></File><File path="LUFA\Drivers\Board\USBTINYMKII\Buttons.h"></File></Folder><Folder name="XPLAIN"><File path="LUFA\Drivers\Board\XPLAIN\LEDs.h"></File><File path="LUFA\Drivers\Board\XPLAIN\Dataflash.h"></File></Folder><File path="LUFA\Drivers\Board\Temperature.h"></File><File path="LUFA\Drivers\Board\Dataflash.h"></File><File path="LUFA\Drivers\Board\Joystick.h"></File><File path="LUFA\Drivers\Board\Temperature.c"></File><File path="LUFA\Drivers\Board\LEDs.h"></File><File path="LUFA\Drivers\Board\Buttons.h"></File></Folder><Folder name="Peripheral"><Folder name="AVR8"><File path="LUFA\Drivers\Peripheral\AVR8\ADC.h"></File><File path="LUFA\Drivers\Peripheral\AVR8\Serial.c"></File><File path="LUFA\Drivers\Peripheral\AVR8\Serial.h"></File><File path="LUFA\Drivers\Peripheral\AVR8\SPI.h"></File><File path="LUFA\Drivers\Peripheral\AVR8\TWI.c"></File><File path="LUFA\Drivers\Peripheral\AVR8\TWI.h"></File></Folder><File path="LUFA\Drivers\Peripheral\ADC.h"></File><File path="LUFA\Drivers\Peripheral\TWI.h"></File><File path="LUFA\Drivers\Peripheral\Serial.h"></File><File path="LUFA\Drivers\Peripheral\SPI.h"></File></Folder></Folder><Folder name="ManPages"><File path="LUFA\ManPages\AboutLUFA.txt"></File><File path="LUFA\ManPages\BuildingLinkableLibraries.txt"></File><File path="LUFA\ManPages\ChangeLog.txt"></File><File path="LUFA\ManPages\CompileTimeTokens.txt"></File><File path="LUFA\ManPages\DevelopingWithLUFA.txt"></File><File path="LUFA\ManPages\DeviceSupport.txt"></File><File path="LUFA\ManPages\DirectorySummaries.txt"></File><File path="LUFA\ManPages\Donating.txt"></File><File path="LUFA\ManPages\FutureChanges.txt"></File><File path="LUFA\ManPages\GettingStarted.txt"></File><File path="LUFA\ManPages\Groups.txt"></File><File path="LUFA\ManPages\LibraryResources.txt"></File><File path="LUFA\ManPages\LUFAPoweredProjects.txt"></File><File path="LUFA\ManPages\MainPage.txt"></File><File path="LUFA\ManPages\MigrationInformation.txt"></File><File path="LUFA\ManPages\VIDAndPIDValues.txt"></File><File path="LUFA\ManPages\WritingBoardDrivers.txt"></File><File path="LUFA\ManPages\ConfiguringApps.txt"></File><File path="LUFA\ManPages\CompilingApps.txt"></File><File path="LUFA\ManPages\ProgrammingApps.txt"></File><File path="LUFA\ManPages\LibraryApps.txt"></File><File path="LUFA\ManPages\WhyUseLUFA.txt"></File><File path="LUFA\ManPages\LUFAvsAtmelStack.txt"></File><File path="LUFA\ManPages\AlternativeStacks.txt"></File><File path="LUFA\ManPages\SoftwareBootloaderJump.txt"></File><File path="LUFA\ManPages\LicenseInfo.txt"></File></Folder><Folder name="Scheduler"><File path="LUFA\Scheduler\Scheduler.c"></File><File path="LUFA\Scheduler\Scheduler.h"></File></Folder><Folder name="CodeTemplates"><Folder name="DriverStubs"><File path="LUFA\CodeTemplates\DriverStubs\Buttons.h"></File><File path="LUFA\CodeTemplates\DriverStubs\Dataflash.h"></File><File path="LUFA\CodeTemplates\DriverStubs\Joystick.h"></File><File path="LUFA\CodeTemplates\DriverStubs\LEDs.h"></File></Folder><File path="LUFA\CodeTemplates\makefile_template"></File></Folder><File path="LUFA\makefile"></File><File path="LUFA\Version.h"></File><File path="LUFA\Doxygen.conf"></File><File path="LUFA\License.txt"></File></Folder><Folder name="Bootloaders"><Folder name="CDC"><File path="Bootloaders\CDC\BootloaderCDC.c"></File><File path="Bootloaders\CDC\BootloaderCDC.h"></File><File path="Bootloaders\CDC\Descriptors.c"></File><File path="Bootloaders\CDC\Descriptors.h"></File><File path="Bootloaders\CDC\makefile"></File><File path="Bootloaders\CDC\LUFA CDC Bootloader.inf"></File><File path="Bootloaders\CDC\Doxygen.conf"></File><File path="Bootloaders\CDC\BootloaderCDC.txt"></File><File path="Bootloaders\CDC\BootloaderCDC.aps"></File></Folder><Folder name="DFU"><File path="Bootloaders\DFU\BootloaderDFU.c"></File><File path="Bootloaders\DFU\BootloaderDFU.h"></File><File path="Bootloaders\DFU\Descriptors.c"></File><File path="Bootloaders\DFU\Descriptors.h"></File><File path="Bootloaders\DFU\makefile"></File><File path="Bootloaders\DFU\BootloaderDFU.txt"></File><File path="Bootloaders\DFU\Doxygen.conf"></File><File path="Bootloaders\DFU\BootloaderDFU.aps"></File></Folder><Folder name="HID"><Folder name="HostLoaderApp"><File path="Bootloaders\HID\HostLoaderApp\gpl3.txt"></File><File path="Bootloaders\HID\HostLoaderApp\Makefile"></File><File path="Bootloaders\HID\HostLoaderApp\Makefile.bsd"></File><File path="Bootloaders\HID\HostLoaderApp\hid_bootloader_cli.c"></File></Folder><File path="Bootloaders\HID\Descriptors.c"></File><File path="Bootloaders\HID\Descriptors.h"></File><File path="Bootloaders\HID\makefile"></File><File path="Bootloaders\HID\BootloaderHID.txt"></File><File path="Bootloaders\HID\BootloaderHID.c"></File><File path="Bootloaders\HID\BootloaderHID.h"></File><File path="Bootloaders\HID\Doxygen.conf"></File><File path="Bootloaders\HID\BootloaderHID.aps"></File></Folder><File path="Bootloaders\makefile"></File></Folder><Folder name="Projects"><Folder name="AVRISP-MKII"><Folder name="Lib"><Folder name="ISP"><File path="Projects\AVRISP-MKII\Lib\ISP\ISPProtocol.c"></File><File path="Projects\AVRISP-MKII\Lib\ISP\ISPProtocol.h"></File><File path="Projects\AVRISP-MKII\Lib\ISP\ISPTarget.c"></File><File path="Projects\AVRISP-MKII\Lib\ISP\ISPTarget.h"></File></Folder><Folder name="XPROG"><File path="Projects\AVRISP-MKII\Lib\XPROG\TINYNVM.c"></File><File path="Projects\AVRISP-MKII\Lib\XPROG\TINYNVM.h"></File><File path="Projects\AVRISP-MKII\Lib\XPROG\XMEGANVM.c"></File><File path="Projects\AVRISP-MKII\Lib\XPROG\XMEGANVM.h"></File><File path="Projects\AVRISP-MKII\Lib\XPROG\XPROGProtocol.c"></File><File path="Projects\AVRISP-MKII\Lib\XPROG\XPROGProtocol.h"></File><File path="Projects\AVRISP-MKII\Lib\XPROG\XPROGTarget.c"></File><File path="Projects\AVRISP-MKII\Lib\XPROG\XPROGTarget.h"></File></Folder><File path="Projects\AVRISP-MKII\Lib\V2Protocol.c"></File><File path="Projects\AVRISP-MKII\Lib\V2Protocol.h"></File><File path="Projects\AVRISP-MKII\Lib\V2ProtocolConstants.h"></File><File path="Projects\AVRISP-MKII\Lib\V2ProtocolParams.c"></File><File path="Projects\AVRISP-MKII\Lib\V2ProtocolParams.h"></File></Folder><File path="Projects\AVRISP-MKII\Descriptors.c"></File><File path="Projects\AVRISP-MKII\Descriptors.h"></File><File path="Projects\AVRISP-MKII\Doxygen.conf"></File><File path="Projects\AVRISP-MKII\makefile"></File><File path="Projects\AVRISP-MKII\AVRISP-MKII.c"></File><File path="Projects\AVRISP-MKII\AVRISP-MKII.h"></File><File path="Projects\AVRISP-MKII\AVRISP-MKII.txt"></File><File path="Projects\AVRISP-MKII\AVRISP-MKII.aps"></File></Folder><Folder name="Benito"><File path="Projects\Benito\Benito.c"></File><File path="Projects\Benito\Benito.h"></File><File path="Projects\Benito\Descriptors.c"></File><File path="Projects\Benito\Descriptors.h"></File><File path="Projects\Benito\Doxygen.conf"></File><File path="Projects\Benito\makefile"></File><File path="Projects\Benito\Benito.txt"></File><File path="Projects\Benito\Benito Programmer.inf"></File><File path="Projects\Benito\Benito.aps"></File></Folder><Folder name="LEDNotifier"><Folder name="CPUUsageApp"><File path="Projects\LEDNotifier\CPUUsageApp\CPUMonitor.cs"></File><File path="Projects\LEDNotifier\CPUUsageApp\CPUMonitor.csproj"></File><File path="Projects\LEDNotifier\CPUUsageApp\CPUMonitor.Designer.cs"></File><File path="Projects\LEDNotifier\CPUUsageApp\CPUMonitor.resx"></File><File path="Projects\LEDNotifier\CPUUsageApp\Program.cs"></File></Folder><Folder name="HotmailNotifierApp"><File path="Projects\LEDNotifier\HotmailNotifierApp\MailNotifier.cs"></File><File path="Projects\LEDNotifier\HotmailNotifierApp\MailNotifier.csproj"></File><File path="Projects\LEDNotifier\HotmailNotifierApp\MailNotifier.Designer.cs"></File><File path="Projects\LEDNotifier\HotmailNotifierApp\MailNotifier.resx"></File><File path="Projects\LEDNotifier\HotmailNotifierApp\Program.cs"></File></Folder><Folder name="LEDMixerApp"><File path="Projects\LEDNotifier\LEDMixerApp\LEDMixer.cs"></File><File path="Projects\LEDNotifier\LEDMixerApp\LEDMixer.csproj"></File><File path="Projects\LEDNotifier\LEDMixerApp\LEDMixer.Designer.cs"></File><File path="Projects\LEDNotifier\LEDMixerApp\LEDMixer.resx"></File><File path="Projects\LEDNotifier\LEDMixerApp\Program.cs"></File></Folder><File path="Projects\LEDNotifier\Descriptors.c"></File><File path="Projects\LEDNotifier\Descriptors.h"></File><File path="Projects\LEDNotifier\Doxygen.conf"></File><File path="Projects\LEDNotifier\LEDNotifier.c"></File><File path="Projects\LEDNotifier\LEDNotifier.h"></File><File path="Projects\LEDNotifier\LEDNotifier.txt"></File><File path="Projects\LEDNotifier\LUFA LED Notifier.inf"></File><File path="Projects\LEDNotifier\makefile"></File><File path="Projects\LEDNotifier\LEDNotifier.aps"></File></Folder><Folder name="MagStripe"><Folder name="Lib"><File path="Projects\Magstripe\Lib\CircularBitBuffer.c"></File><File path="Projects\Magstripe\Lib\CircularBitBuffer.h"></File><File path="Projects\Magstripe\Lib\MagstripeHW.h"></File></Folder><File path="Projects\Magstripe\Descriptors.c"></File><File path="Projects\Magstripe\Descriptors.h"></File><File path="Projects\Magstripe\Magstripe.c"></File><File path="Projects\Magstripe\Magstripe.h"></File><File path="Projects\Magstripe\makefile"></File><File path="Projects\Magstripe\Magstripe.txt"></File><File path="Projects\Magstripe\Doxygen.conf"></File><File path="Projects\Magstripe\Magstripe.aps"></File></Folder><Folder name="MIDIToneGenerator"><File path="Projects\MIDIToneGenerator\Descriptors.c"></File><File path="Projects\MIDIToneGenerator\Descriptors.h"></File><File path="Projects\MIDIToneGenerator\makefile"></File><File path="Projects\MIDIToneGenerator\MIDIToneGenerator.c"></File><File path="Projects\MIDIToneGenerator\MIDIToneGenerator.h"></File><File path="Projects\MIDIToneGenerator\MIDIToneGenerator.txt"></File><File path="Projects\MIDIToneGenerator\MIDIToneGenerator.aps"></File></Folder><Folder name="MissileLauncher"><File path="Projects\MissileLauncher\ConfigDescriptor.c"></File><File path="Projects\MissileLauncher\ConfigDescriptor.h"></File><File path="Projects\MissileLauncher\Doxygen.conf"></File><File path="Projects\MissileLauncher\makefile"></File><File path="Projects\MissileLauncher\MissileLauncher.c"></File><File path="Projects\MissileLauncher\MissileLauncher.h"></File><File path="Projects\MissileLauncher\MissileLauncher.txt"></File><File path="Projects\MissileLauncher\MissileLauncher.aps"></File></Folder><Folder name="RelayBoard"><File path="Projects\RelayBoard\Descriptors.c"></File><File path="Projects\RelayBoard\Descriptors.h"></File><File path="Projects\RelayBoard\Doxygen.conf"></File><File path="Projects\RelayBoard\makefile"></File><File path="Projects\RelayBoard\RelayBoard.c"></File><File path="Projects\RelayBoard\RelayBoard.h"></File><File path="Projects\RelayBoard\RelayBoard.txt"></File><File path="Projects\RelayBoard\RelayBoard.aps"></File></Folder><Folder name="TempDataLogger"><Folder name="Lib"><Folder name="FATFs"><File path="Projects\TempDataLogger\Lib\FATFs\diskio.c"></File><File path="Projects\TempDataLogger\Lib\FATFs\diskio.h"></File><File path="Projects\TempDataLogger\Lib\FATFs\ff.c"></File><File path="Projects\TempDataLogger\Lib\FATFs\ff.h"></File><File path="Projects\TempDataLogger\Lib\FATFs\ffconf.h"></File><File path="Projects\TempDataLogger\Lib\FATFs\integer.h"></File></Folder><File path="Projects\TempDataLogger\Lib\DataflashManager.c"></File><File path="Projects\TempDataLogger\Lib\DataflashManager.h"></File><File path="Projects\TempDataLogger\Lib\DS1307.c"></File><File path="Projects\TempDataLogger\Lib\DS1307.h"></File><File path="Projects\TempDataLogger\Lib\SCSI.c"></File><File path="Projects\TempDataLogger\Lib\SCSI.h"></File></Folder><Folder name="TempLogHostApp"><File path="Projects\TempDataLogger\TempLogHostApp\DataLoggerSettings.cs"></File><File path="Projects\TempDataLogger\TempLogHostApp\DataLoggerSettings.Designer.cs"></File><File path="Projects\TempDataLogger\TempLogHostApp\DataLoggerSettings.resx"></File><File path="Projects\TempDataLogger\TempLogHostApp\Program.cs"></File><File path="Projects\TempDataLogger\TempLogHostApp\TempLoggerHostApp.csproj"></File></Folder><File path="Projects\TempDataLogger\Descriptors.c"></File><File path="Projects\TempDataLogger\Descriptors.h"></File><File path="Projects\TempDataLogger\Doxygen.conf"></File><File path="Projects\TempDataLogger\makefile"></File><File path="Projects\TempDataLogger\TempDataLogger.c"></File><File path="Projects\TempDataLogger\TempDataLogger.h"></File><File path="Projects\TempDataLogger\TemperatureDataLogger.txt"></File><File path="Projects\TempDataLogger\TempDataLogger.aps"></File></Folder><Folder name="USBtoSerial"><File path="Projects\USBtoSerial\Descriptors.h"></File><File path="Projects\USBtoSerial\Doxygen.conf"></File><File path="Projects\USBtoSerial\LUFA USBtoSerial.inf"></File><File path="Projects\USBtoSerial\makefile"></File><File path="Projects\USBtoSerial\USBtoSerial.c"></File><File path="Projects\USBtoSerial\USBtoSerial.h"></File><File path="Projects\USBtoSerial\USBtoSerial.txt"></File><File path="Projects\USBtoSerial\USBtoSerial.aps"></File><File path="Projects\USBtoSerial\Descriptors.c"></File></Folder><Folder name="Webserver"><Folder name="Lib"><Folder name="uip"><File path="Projects\Webserver\Lib\uip\clock.c"></File><File path="Projects\Webserver\Lib\uip\clock.h"></File><File path="Projects\Webserver\Lib\uip\timer.c"></File><File path="Projects\Webserver\Lib\uip\timer.h"></File><File path="Projects\Webserver\Lib\uip\uip.c"></File><File path="Projects\Webserver\Lib\uip\uip.h"></File><File path="Projects\Webserver\Lib\uip\uip_arp.c"></File><File path="Projects\Webserver\Lib\uip\uip_arp.h"></File><File path="Projects\Webserver\Lib\uip\uipopt.h"></File><File path="Projects\Webserver\Lib\uip\uip-split.c"></File><File path="Projects\Webserver\Lib\uip\uip-split.h"></File></Folder><Folder name="FATFs"><File path="Projects\Webserver\Lib\FATFs\diskio.c"></File><File path="Projects\Webserver\Lib\FATFs\diskio.h"></File><File path="Projects\Webserver\Lib\FATFs\ff.c"></File><File path="Projects\Webserver\Lib\FATFs\ff.h"></File><File path="Projects\Webserver\Lib\FATFs\ffconf.h"></File><File path="Projects\Webserver\Lib\FATFs\integer.h"></File></Folder><File path="Projects\Webserver\Lib\DataflashManager.c"></File><File path="Projects\Webserver\Lib\DataflashManager.h"></File><File path="Projects\Webserver\Lib\uIPManagement.c"></File><File path="Projects\Webserver\Lib\uIPManagement.h"></File><File path="Projects\Webserver\Lib\HTTPServerApp.c"></File><File path="Projects\Webserver\Lib\HTTPServerApp.h"></File><File path="Projects\Webserver\Lib\SCSI.c"></File><File path="Projects\Webserver\Lib\SCSI.h"></File><File path="Projects\Webserver\Lib\DHCPClientApp.c"></File><File path="Projects\Webserver\Lib\DHCPClientApp.h"></File><File path="Projects\Webserver\Lib\TELNETServerApp.c"></File><File path="Projects\Webserver\Lib\TELNETServerApp.h"></File></Folder><File path="Projects\Webserver\makefile"></File><File path="Projects\Webserver\Webserver.c"></File><File path="Projects\Webserver\Webserver.h"></File><File path="Projects\Webserver\Doxygen.conf"></File><File path="Projects\Webserver\Webserver.txt"></File><File path="Projects\Webserver\Descriptors.c"></File><File path="Projects\Webserver\Descriptors.h"></File><File path="Projects\Webserver\USBHostMode.c"></File><File path="Projects\Webserver\USBHostMode.h"></File><File path="Projects\Webserver\USBDeviceMode.c"></File><File path="Projects\Webserver\USBDeviceMode.h"></File><File path="Projects\Webserver\Webserver.aps"></File></Folder><Folder name="XPLAINBridge"><Folder name="Lib"><File path="Projects\XPLAINBridge\Lib\SoftUART.c"></File><File path="Projects\XPLAINBridge\Lib\SoftUART.h"></File></Folder><File path="Projects\XPLAINBridge\XPLAINBridge.txt"></File><File path="Projects\XPLAINBridge\XPLAINBridge.h"></File><File path="Projects\XPLAINBridge\XPLAINBridge.c"></File><File path="Projects\XPLAINBridge\XPLAINBridge.aps"></File><File path="Projects\XPLAINBridge\USARTDescriptors.h"></File><File path="Projects\XPLAINBridge\USARTDescriptors.c"></File><File path="Projects\XPLAINBridge\makefile"></File><File path="Projects\XPLAINBridge\LUFA XPLAIN Bridge.inf"></File><File path="Projects\XPLAINBridge\Doxygen.conf"></File><File path="Projects\XPLAINBridge\AVRISPDescriptors.h"></File><File path="Projects\XPLAINBridge\AVRISPDescriptors.c"></File></Folder><Folder name="Incomplete"><Folder name="StandaloneProgrammer"><Folder name="Lib"><Folder name="PetiteFATFs"><File path="Projects\Incomplete\StandaloneProgrammer\Lib\PetiteFATFs\diskio.c"></File><File path="Projects\Incomplete\StandaloneProgrammer\Lib\PetiteFATFs\diskio.h"></File><File path="Projects\Incomplete\StandaloneProgrammer\Lib\PetiteFATFs\integer.h"></File><File path="Projects\Incomplete\StandaloneProgrammer\Lib\PetiteFATFs\pff.c"></File><File path="Projects\Incomplete\StandaloneProgrammer\Lib\PetiteFATFs\pff.h"></File></Folder><File path="Projects\Incomplete\StandaloneProgrammer\Lib\DataflashManager.c"></File><File path="Projects\Incomplete\StandaloneProgrammer\Lib\DataflashManager.h"></File><File path="Projects\Incomplete\StandaloneProgrammer\Lib\SCSI.c"></File><File path="Projects\Incomplete\StandaloneProgrammer\Lib\SCSI.h"></File><File path="Projects\Incomplete\StandaloneProgrammer\Lib\ProgrammerConfig.c"></File><File path="Projects\Incomplete\StandaloneProgrammer\Lib\ProgrammerConfig.h"></File></Folder><File path="Projects\Incomplete\StandaloneProgrammer\Descriptors.c"></File><File path="Projects\Incomplete\StandaloneProgrammer\Descriptors.h"></File><File path="Projects\Incomplete\StandaloneProgrammer\makefile"></File><File path="Projects\Incomplete\StandaloneProgrammer\StandaloneProgrammer.c"></File><File path="Projects\Incomplete\StandaloneProgrammer\StandaloneProgrammer.h"></File><File path="Projects\Incomplete\StandaloneProgrammer\DiskDevice.c"></File><File path="Projects\Incomplete\StandaloneProgrammer\DiskDevice.h"></File><File path="Projects\Incomplete\StandaloneProgrammer\DiskHost.c"></File><File path="Projects\Incomplete\StandaloneProgrammer\DiskHost.h"></File></Folder></Folder><File path="Projects\makefile"></File></Folder><File path="makefile"></File><File path="README.txt"></File></Project>
\ No newline at end of file
+<Project name="LUFA"><Folder name="Demos"><Folder name="Device"><Folder name="ClassDriver"><Folder name="AudioInput"><File path="Demos\Device\ClassDriver\AudioInput\AudioInput.c"></File><File path="Demos\Device\ClassDriver\AudioInput\AudioInput.h"></File><File path="Demos\Device\ClassDriver\AudioInput\AudioInput.txt"></File><File path="Demos\Device\ClassDriver\AudioInput\Descriptors.c"></File><File path="Demos\Device\ClassDriver\AudioInput\Descriptors.h"></File><File path="Demos\Device\ClassDriver\AudioInput\Doxygen.conf"></File><File path="Demos\Device\ClassDriver\AudioInput\makefile"></File><File path="Demos\Device\ClassDriver\AudioInput\AudioInput.aps"></File></Folder><Folder name="AudioOutput"><File path="Demos\Device\ClassDriver\AudioOutput\AudioOutput.c"></File><File path="Demos\Device\ClassDriver\AudioOutput\AudioOutput.h"></File><File path="Demos\Device\ClassDriver\AudioOutput\AudioOutput.txt"></File><File path="Demos\Device\ClassDriver\AudioOutput\Descriptors.c"></File><File path="Demos\Device\ClassDriver\AudioOutput\Descriptors.h"></File><File path="Demos\Device\ClassDriver\AudioOutput\Doxygen.conf"></File><File path="Demos\Device\ClassDriver\AudioOutput\makefile"></File><File path="Demos\Device\ClassDriver\AudioOutput\AudioOutput.aps"></File></Folder><Folder name="DualVirtualSerial"><File path="Demos\Device\ClassDriver\DualVirtualSerial\Descriptors.c"></File><File path="Demos\Device\ClassDriver\DualVirtualSerial\Descriptors.h"></File><File path="Demos\Device\ClassDriver\DualVirtualSerial\Doxygen.conf"></File><File path="Demos\Device\ClassDriver\DualVirtualSerial\DualVirtualSerial.c"></File><File path="Demos\Device\ClassDriver\DualVirtualSerial\DualVirtualSerial.h"></File><File path="Demos\Device\ClassDriver\DualVirtualSerial\DualVirtualSerial.txt"></File><File path="Demos\Device\ClassDriver\DualVirtualSerial\LUFA DualVirtualSerial.inf"></File><File path="Demos\Device\ClassDriver\DualVirtualSerial\makefile"></File><File path="Demos\Device\ClassDriver\DualVirtualSerial\DualVirtualSerial.aps"></File></Folder><Folder name="GenericHID"><File path="Demos\Device\ClassDriver\GenericHID\Descriptors.c"></File><File path="Demos\Device\ClassDriver\GenericHID\Descriptors.h"></File><File path="Demos\Device\ClassDriver\GenericHID\Doxygen.conf"></File><File path="Demos\Device\ClassDriver\GenericHID\GenericHID.c"></File><File path="Demos\Device\ClassDriver\GenericHID\GenericHID.h"></File><File path="Demos\Device\ClassDriver\GenericHID\GenericHID.txt"></File><File path="Demos\Device\ClassDriver\GenericHID\makefile"></File><File path="Demos\Device\ClassDriver\GenericHID\GenericHID.aps"></File></Folder><Folder name="Joystick"><File path="Demos\Device\ClassDriver\Joystick\Descriptors.c"></File><File path="Demos\Device\ClassDriver\Joystick\Descriptors.h"></File><File path="Demos\Device\ClassDriver\Joystick\Doxygen.conf"></File><File path="Demos\Device\ClassDriver\Joystick\Joystick.c"></File><File path="Demos\Device\ClassDriver\Joystick\Joystick.h"></File><File path="Demos\Device\ClassDriver\Joystick\Joystick.txt"></File><File path="Demos\Device\ClassDriver\Joystick\makefile"></File><File path="Demos\Device\ClassDriver\Joystick\Joystick.aps"></File></Folder><Folder name="Keyboard"><File path="Demos\Device\ClassDriver\Keyboard\Descriptors.c"></File><File path="Demos\Device\ClassDriver\Keyboard\Descriptors.h"></File><File path="Demos\Device\ClassDriver\Keyboard\Doxygen.conf"></File><File path="Demos\Device\ClassDriver\Keyboard\Keyboard.c"></File><File path="Demos\Device\ClassDriver\Keyboard\Keyboard.h"></File><File path="Demos\Device\ClassDriver\Keyboard\Keyboard.txt"></File><File path="Demos\Device\ClassDriver\Keyboard\makefile"></File><File path="Demos\Device\ClassDriver\Keyboard\Keyboard.aps"></File></Folder><Folder name="KeyboardMouse"><File path="Demos\Device\ClassDriver\KeyboardMouse\Descriptors.c"></File><File path="Demos\Device\ClassDriver\KeyboardMouse\Descriptors.h"></File><File path="Demos\Device\ClassDriver\KeyboardMouse\Doxygen.conf"></File><File path="Demos\Device\ClassDriver\KeyboardMouse\KeyboardMouse.c"></File><File path="Demos\Device\ClassDriver\KeyboardMouse\KeyboardMouse.h"></File><File path="Demos\Device\ClassDriver\KeyboardMouse\KeyboardMouse.txt"></File><File path="Demos\Device\ClassDriver\KeyboardMouse\makefile"></File><File path="Demos\Device\ClassDriver\KeyboardMouse\KeyboardMouse.aps"></File></Folder><Folder name="KeyboardMouseMultiReport"><File path="Demos\Device\ClassDriver\KeyboardMouseMultiReport\Descriptors.c"></File><File path="Demos\Device\ClassDriver\KeyboardMouseMultiReport\Descriptors.h"></File><File path="Demos\Device\ClassDriver\KeyboardMouseMultiReport\Doxygen.conf"></File><File path="Demos\Device\ClassDriver\KeyboardMouseMultiReport\KeyboardMouseMultiReport.c"></File><File path="Demos\Device\ClassDriver\KeyboardMouseMultiReport\KeyboardMouseMultiReport.h"></File><File path="Demos\Device\ClassDriver\KeyboardMouseMultiReport\KeyboardMouseMultiReport.txt"></File><File path="Demos\Device\ClassDriver\KeyboardMouseMultiReport\makefile"></File><File path="Demos\Device\ClassDriver\KeyboardMouseMultiReport\KeyboardMouseMultiReport.aps"></File></Folder><Folder name="MassStorage"><Folder name="Lib"><File path="Demos\Device\ClassDriver\MassStorage\Lib\DataflashManager.c"></File><File path="Demos\Device\ClassDriver\MassStorage\Lib\DataflashManager.h"></File><File path="Demos\Device\ClassDriver\MassStorage\Lib\SCSI.c"></File><File path="Demos\Device\ClassDriver\MassStorage\Lib\SCSI.h"></File></Folder><File path="Demos\Device\ClassDriver\MassStorage\Descriptors.c"></File><File path="Demos\Device\ClassDriver\MassStorage\Descriptors.h"></File><File path="Demos\Device\ClassDriver\MassStorage\Doxygen.conf"></File><File path="Demos\Device\ClassDriver\MassStorage\makefile"></File><File path="Demos\Device\ClassDriver\MassStorage\MassStorage.c"></File><File path="Demos\Device\ClassDriver\MassStorage\MassStorage.h"></File><File path="Demos\Device\ClassDriver\MassStorage\MassStorage.txt"></File><File path="Demos\Device\ClassDriver\MassStorage\MassStorage.aps"></File></Folder><Folder name="MassStorageKeyboard"><Folder name="Lib"><File path="Demos\Device\ClassDriver\MassStorageKeyboard\Lib\DataflashManager.c"></File><File path="Demos\Device\ClassDriver\MassStorageKeyboard\Lib\DataflashManager.h"></File><File path="Demos\Device\ClassDriver\MassStorageKeyboard\Lib\SCSI.c"></File><File path="Demos\Device\ClassDriver\MassStorageKeyboard\Lib\SCSI.h"></File></Folder><File path="Demos\Device\ClassDriver\MassStorageKeyboard\Descriptors.c"></File><File path="Demos\Device\ClassDriver\MassStorageKeyboard\Descriptors.h"></File><File path="Demos\Device\ClassDriver\MassStorageKeyboard\makefile"></File><File path="Demos\Device\ClassDriver\MassStorageKeyboard\MassStorageKeyboard.c"></File><File path="Demos\Device\ClassDriver\MassStorageKeyboard\MassStorageKeyboard.h"></File><File path="Demos\Device\ClassDriver\MassStorageKeyboard\Doxygen.conf"></File><File path="Demos\Device\ClassDriver\MassStorageKeyboard\MassStorageKeyboard.txt"></File><File path="Demos\Device\ClassDriver\MassStorageKeyboard\MassStorageKeyboard.aps"></File></Folder><Folder name="MIDI"><File path="Demos\Device\ClassDriver\MIDI\Descriptors.c"></File><File path="Demos\Device\ClassDriver\MIDI\Descriptors.h"></File><File path="Demos\Device\ClassDriver\MIDI\Doxygen.conf"></File><File path="Demos\Device\ClassDriver\MIDI\makefile"></File><File path="Demos\Device\ClassDriver\MIDI\MIDI.c"></File><File path="Demos\Device\ClassDriver\MIDI\MIDI.h"></File><File path="Demos\Device\ClassDriver\MIDI\MIDI.txt"></File><File path="Demos\Device\ClassDriver\MIDI\MIDI.aps"></File></Folder><Folder name="Mouse"><File path="Demos\Device\ClassDriver\Mouse\Descriptors.c"></File><File path="Demos\Device\ClassDriver\Mouse\Descriptors.h"></File><File path="Demos\Device\ClassDriver\Mouse\Doxygen.conf"></File><File path="Demos\Device\ClassDriver\Mouse\makefile"></File><File path="Demos\Device\ClassDriver\Mouse\Mouse.c"></File><File path="Demos\Device\ClassDriver\Mouse\Mouse.h"></File><File path="Demos\Device\ClassDriver\Mouse\Mouse.txt"></File><File path="Demos\Device\ClassDriver\Mouse\Mouse.aps"></File></Folder><Folder name="RNDISEthernet"><Folder name="Lib"><File path="Demos\Device\ClassDriver\RNDISEthernet\Lib\Webserver.h"></File><File path="Demos\Device\ClassDriver\RNDISEthernet\Lib\ARP.c"></File><File path="Demos\Device\ClassDriver\RNDISEthernet\Lib\ARP.h"></File><File path="Demos\Device\ClassDriver\RNDISEthernet\Lib\DHCP.c"></File><File path="Demos\Device\ClassDriver\RNDISEthernet\Lib\DHCP.h"></File><File path="Demos\Device\ClassDriver\RNDISEthernet\Lib\Ethernet.c"></File><File path="Demos\Device\ClassDriver\RNDISEthernet\Lib\Ethernet.h"></File><File path="Demos\Device\ClassDriver\RNDISEthernet\Lib\EthernetProtocols.h"></File><File path="Demos\Device\ClassDriver\RNDISEthernet\Lib\ICMP.c"></File><File path="Demos\Device\ClassDriver\RNDISEthernet\Lib\ICMP.h"></File><File path="Demos\Device\ClassDriver\RNDISEthernet\Lib\IP.c"></File><File path="Demos\Device\ClassDriver\RNDISEthernet\Lib\IP.h"></File><File path="Demos\Device\ClassDriver\RNDISEthernet\Lib\ProtocolDecoders.c"></File><File path="Demos\Device\ClassDriver\RNDISEthernet\Lib\ProtocolDecoders.h"></File><File path="Demos\Device\ClassDriver\RNDISEthernet\Lib\TCP.c"></File><File path="Demos\Device\ClassDriver\RNDISEthernet\Lib\TCP.h"></File><File path="Demos\Device\ClassDriver\RNDISEthernet\Lib\UDP.c"></File><File path="Demos\Device\ClassDriver\RNDISEthernet\Lib\UDP.h"></File><File path="Demos\Device\ClassDriver\RNDISEthernet\Lib\Webserver.c"></File></Folder><File path="Demos\Device\ClassDriver\RNDISEthernet\Descriptors.c"></File><File path="Demos\Device\ClassDriver\RNDISEthernet\Descriptors.h"></File><File path="Demos\Device\ClassDriver\RNDISEthernet\Doxygen.conf"></File><File path="Demos\Device\ClassDriver\RNDISEthernet\LUFA RNDIS.inf"></File><File path="Demos\Device\ClassDriver\RNDISEthernet\makefile"></File><File path="Demos\Device\ClassDriver\RNDISEthernet\RNDISEthernet.c"></File><File path="Demos\Device\ClassDriver\RNDISEthernet\RNDISEthernet.h"></File><File path="Demos\Device\ClassDriver\RNDISEthernet\RNDISEthernet.txt"></File><File path="Demos\Device\ClassDriver\RNDISEthernet\RNDISEthernet.aps"></File></Folder><Folder name="VirtualSerial"><File path="Demos\Device\ClassDriver\VirtualSerial\Descriptors.c"></File><File path="Demos\Device\ClassDriver\VirtualSerial\Descriptors.h"></File><File path="Demos\Device\ClassDriver\VirtualSerial\Doxygen.conf"></File><File path="Demos\Device\ClassDriver\VirtualSerial\LUFA VirtualSerial.inf"></File><File path="Demos\Device\ClassDriver\VirtualSerial\makefile"></File><File path="Demos\Device\ClassDriver\VirtualSerial\VirtualSerial.c"></File><File path="Demos\Device\ClassDriver\VirtualSerial\VirtualSerial.h"></File><File path="Demos\Device\ClassDriver\VirtualSerial\VirtualSerial.txt"></File><File path="Demos\Device\ClassDriver\VirtualSerial\VirtualSerial.aps"></File></Folder><Folder name="VirtualSerialMouse"><File path="Demos\Device\ClassDriver\VirtualSerialMouse\Descriptors.c"></File><File path="Demos\Device\ClassDriver\VirtualSerialMouse\Descriptors.h"></File><File path="Demos\Device\ClassDriver\VirtualSerialMouse\Doxygen.conf"></File><File path="Demos\Device\ClassDriver\VirtualSerialMouse\LUFA VirtualSerialMouse.inf"></File><File path="Demos\Device\ClassDriver\VirtualSerialMouse\makefile"></File><File path="Demos\Device\ClassDriver\VirtualSerialMouse\VirtualSerialMouse.c"></File><File path="Demos\Device\ClassDriver\VirtualSerialMouse\VirtualSerialMouse.h"></File><File path="Demos\Device\ClassDriver\VirtualSerialMouse\VirtualSerialMouse.txt"></File><File path="Demos\Device\ClassDriver\VirtualSerialMouse\VirtualSerialMouse.aps"></File></Folder><File path="Demos\Device\ClassDriver\makefile"></File></Folder><Folder name="LowLevel"><Folder name="AudioInput"><File path="Demos\Device\LowLevel\AudioInput\AudioInput.c"></File><File path="Demos\Device\LowLevel\AudioInput\AudioInput.h"></File><File path="Demos\Device\LowLevel\AudioInput\AudioInput.txt"></File><File path="Demos\Device\LowLevel\AudioInput\Descriptors.c"></File><File path="Demos\Device\LowLevel\AudioInput\Descriptors.h"></File><File path="Demos\Device\LowLevel\AudioInput\Doxygen.conf"></File><File path="Demos\Device\LowLevel\AudioInput\makefile"></File><File path="Demos\Device\LowLevel\AudioInput\AudioInput.aps"></File></Folder><Folder name="AudioOutput"><File path="Demos\Device\LowLevel\AudioOutput\AudioOutput.c"></File><File path="Demos\Device\LowLevel\AudioOutput\AudioOutput.h"></File><File path="Demos\Device\LowLevel\AudioOutput\AudioOutput.txt"></File><File path="Demos\Device\LowLevel\AudioOutput\Descriptors.c"></File><File path="Demos\Device\LowLevel\AudioOutput\Descriptors.h"></File><File path="Demos\Device\LowLevel\AudioOutput\Doxygen.conf"></File><File path="Demos\Device\LowLevel\AudioOutput\makefile"></File><File path="Demos\Device\LowLevel\AudioOutput\AudioOutput.aps"></File></Folder><Folder name="DualVirtualSerial"><File path="Demos\Device\LowLevel\DualVirtualSerial\Descriptors.c"></File><File path="Demos\Device\LowLevel\DualVirtualSerial\Descriptors.h"></File><File path="Demos\Device\LowLevel\DualVirtualSerial\Doxygen.conf"></File><File path="Demos\Device\LowLevel\DualVirtualSerial\DualVirtualSerial.c"></File><File path="Demos\Device\LowLevel\DualVirtualSerial\DualVirtualSerial.h"></File><File path="Demos\Device\LowLevel\DualVirtualSerial\DualVirtualSerial.txt"></File><File path="Demos\Device\LowLevel\DualVirtualSerial\LUFA DualVirtualSerial.inf"></File><File path="Demos\Device\LowLevel\DualVirtualSerial\makefile"></File><File path="Demos\Device\LowLevel\DualVirtualSerial\DualVirtualSerial.aps"></File></Folder><Folder name="GenericHID"><File path="Demos\Device\LowLevel\GenericHID\Descriptors.c"></File><File path="Demos\Device\LowLevel\GenericHID\Descriptors.h"></File><File path="Demos\Device\LowLevel\GenericHID\Doxygen.conf"></File><File path="Demos\Device\LowLevel\GenericHID\GenericHID.c"></File><File path="Demos\Device\LowLevel\GenericHID\GenericHID.h"></File><File path="Demos\Device\LowLevel\GenericHID\GenericHID.txt"></File><File path="Demos\Device\LowLevel\GenericHID\makefile"></File><File path="Demos\Device\LowLevel\GenericHID\GenericHID.aps"></File></Folder><Folder name="Joystick"><File path="Demos\Device\LowLevel\Joystick\Descriptors.c"></File><File path="Demos\Device\LowLevel\Joystick\Descriptors.h"></File><File path="Demos\Device\LowLevel\Joystick\Doxygen.conf"></File><File path="Demos\Device\LowLevel\Joystick\Joystick.c"></File><File path="Demos\Device\LowLevel\Joystick\Joystick.h"></File><File path="Demos\Device\LowLevel\Joystick\Joystick.txt"></File><File path="Demos\Device\LowLevel\Joystick\makefile"></File><File path="Demos\Device\LowLevel\Joystick\Joystick.aps"></File></Folder><Folder name="Keyboard"><File path="Demos\Device\LowLevel\Keyboard\Descriptors.c"></File><File path="Demos\Device\LowLevel\Keyboard\Descriptors.h"></File><File path="Demos\Device\LowLevel\Keyboard\Doxygen.conf"></File><File path="Demos\Device\LowLevel\Keyboard\Keyboard.c"></File><File path="Demos\Device\LowLevel\Keyboard\Keyboard.h"></File><File path="Demos\Device\LowLevel\Keyboard\Keyboard.txt"></File><File path="Demos\Device\LowLevel\Keyboard\makefile"></File><File path="Demos\Device\LowLevel\Keyboard\Keyboard.aps"></File></Folder><Folder name="KeyboardMouse"><File path="Demos\Device\LowLevel\KeyboardMouse\Descriptors.c"></File><File path="Demos\Device\LowLevel\KeyboardMouse\Descriptors.h"></File><File path="Demos\Device\LowLevel\KeyboardMouse\Doxygen.conf"></File><File path="Demos\Device\LowLevel\KeyboardMouse\KeyboardMouse.c"></File><File path="Demos\Device\LowLevel\KeyboardMouse\KeyboardMouse.h"></File><File path="Demos\Device\LowLevel\KeyboardMouse\KeyboardMouse.txt"></File><File path="Demos\Device\LowLevel\KeyboardMouse\makefile"></File><File path="Demos\Device\LowLevel\KeyboardMouse\KeyboardMouse.aps"></File></Folder><Folder name="MassStorage"><Folder name="Lib"><File path="Demos\Device\LowLevel\MassStorage\Lib\DataflashManager.c"></File><File path="Demos\Device\LowLevel\MassStorage\Lib\DataflashManager.h"></File><File path="Demos\Device\LowLevel\MassStorage\Lib\SCSI.c"></File><File path="Demos\Device\LowLevel\MassStorage\Lib\SCSI.h"></File></Folder><File path="Demos\Device\LowLevel\MassStorage\Descriptors.c"></File><File path="Demos\Device\LowLevel\MassStorage\Descriptors.h"></File><File path="Demos\Device\LowLevel\MassStorage\Doxygen.conf"></File><File path="Demos\Device\LowLevel\MassStorage\makefile"></File><File path="Demos\Device\LowLevel\MassStorage\MassStorage.c"></File><File path="Demos\Device\LowLevel\MassStorage\MassStorage.h"></File><File path="Demos\Device\LowLevel\MassStorage\MassStorage.txt"></File><File path="Demos\Device\LowLevel\MassStorage\MassStorage.aps"></File></Folder><Folder name="MIDI"><File path="Demos\Device\LowLevel\MIDI\Descriptors.c"></File><File path="Demos\Device\LowLevel\MIDI\Descriptors.h"></File><File path="Demos\Device\LowLevel\MIDI\Doxygen.conf"></File><File path="Demos\Device\LowLevel\MIDI\makefile"></File><File path="Demos\Device\LowLevel\MIDI\MIDI.c"></File><File path="Demos\Device\LowLevel\MIDI\MIDI.h"></File><File path="Demos\Device\LowLevel\MIDI\MIDI.txt"></File><File path="Demos\Device\LowLevel\MIDI\MIDI.aps"></File></Folder><Folder name="Mouse"><File path="Demos\Device\LowLevel\Mouse\Descriptors.c"></File><File path="Demos\Device\LowLevel\Mouse\Descriptors.h"></File><File path="Demos\Device\LowLevel\Mouse\Doxygen.conf"></File><File path="Demos\Device\LowLevel\Mouse\makefile"></File><File path="Demos\Device\LowLevel\Mouse\Mouse.c"></File><File path="Demos\Device\LowLevel\Mouse\Mouse.h"></File><File path="Demos\Device\LowLevel\Mouse\Mouse.txt"></File><File path="Demos\Device\LowLevel\Mouse\Mouse.aps"></File></Folder><Folder name="RNDISEthernet"><Folder name="Lib"><File path="Demos\Device\LowLevel\RNDISEthernet\Lib\Webserver.h"></File><File path="Demos\Device\LowLevel\RNDISEthernet\Lib\ARP.c"></File><File path="Demos\Device\LowLevel\RNDISEthernet\Lib\ARP.h"></File><File path="Demos\Device\LowLevel\RNDISEthernet\Lib\DHCP.c"></File><File path="Demos\Device\LowLevel\RNDISEthernet\Lib\DHCP.h"></File><File path="Demos\Device\LowLevel\RNDISEthernet\Lib\Ethernet.c"></File><File path="Demos\Device\LowLevel\RNDISEthernet\Lib\Ethernet.h"></File><File path="Demos\Device\LowLevel\RNDISEthernet\Lib\EthernetProtocols.h"></File><File path="Demos\Device\LowLevel\RNDISEthernet\Lib\ICMP.c"></File><File path="Demos\Device\LowLevel\RNDISEthernet\Lib\ICMP.h"></File><File path="Demos\Device\LowLevel\RNDISEthernet\Lib\IP.c"></File><File path="Demos\Device\LowLevel\RNDISEthernet\Lib\IP.h"></File><File path="Demos\Device\LowLevel\RNDISEthernet\Lib\ProtocolDecoders.c"></File><File path="Demos\Device\LowLevel\RNDISEthernet\Lib\ProtocolDecoders.h"></File><File path="Demos\Device\LowLevel\RNDISEthernet\Lib\RNDIS.c"></File><File path="Demos\Device\LowLevel\RNDISEthernet\Lib\RNDIS.h"></File><File path="Demos\Device\LowLevel\RNDISEthernet\Lib\TCP.c"></File><File path="Demos\Device\LowLevel\RNDISEthernet\Lib\TCP.h"></File><File path="Demos\Device\LowLevel\RNDISEthernet\Lib\UDP.c"></File><File path="Demos\Device\LowLevel\RNDISEthernet\Lib\UDP.h"></File><File path="Demos\Device\LowLevel\RNDISEthernet\Lib\Webserver.c"></File></Folder><File path="Demos\Device\LowLevel\RNDISEthernet\Descriptors.c"></File><File path="Demos\Device\LowLevel\RNDISEthernet\Descriptors.h"></File><File path="Demos\Device\LowLevel\RNDISEthernet\Doxygen.conf"></File><File path="Demos\Device\LowLevel\RNDISEthernet\LUFA RNDIS.inf"></File><File path="Demos\Device\LowLevel\RNDISEthernet\makefile"></File><File path="Demos\Device\LowLevel\RNDISEthernet\RNDISEthernet.c"></File><File path="Demos\Device\LowLevel\RNDISEthernet\RNDISEthernet.h"></File><File path="Demos\Device\LowLevel\RNDISEthernet\RNDISEthernet.txt"></File><File path="Demos\Device\LowLevel\RNDISEthernet\RNDISEthernet.aps"></File></Folder><Folder name="VirtualSerial"><File path="Demos\Device\LowLevel\VirtualSerial\Descriptors.c"></File><File path="Demos\Device\LowLevel\VirtualSerial\Descriptors.h"></File><File path="Demos\Device\LowLevel\VirtualSerial\Doxygen.conf"></File><File path="Demos\Device\LowLevel\VirtualSerial\LUFA VirtualSerial.inf"></File><File path="Demos\Device\LowLevel\VirtualSerial\makefile"></File><File path="Demos\Device\LowLevel\VirtualSerial\VirtualSerial.c"></File><File path="Demos\Device\LowLevel\VirtualSerial\VirtualSerial.h"></File><File path="Demos\Device\LowLevel\VirtualSerial\VirtualSerial.txt"></File><File path="Demos\Device\LowLevel\VirtualSerial\VirtualSerial.aps"></File></Folder><File path="Demos\Device\LowLevel\makefile"></File></Folder><Folder name="Incomplete"><Folder name="SideShow"><Folder name="Lib"><File path="Demos\Device\Incomplete\Sideshow\Lib\SideshowApplications.c"></File><File path="Demos\Device\Incomplete\Sideshow\Lib\SideshowApplications.h"></File><File path="Demos\Device\Incomplete\Sideshow\Lib\SideshowCommands.c"></File><File path="Demos\Device\Incomplete\Sideshow\Lib\SideshowCommands.h"></File><File path="Demos\Device\Incomplete\Sideshow\Lib\SideshowCommon.c"></File><File path="Demos\Device\Incomplete\Sideshow\Lib\SideshowCommon.h"></File><File path="Demos\Device\Incomplete\Sideshow\Lib\SideshowContent.c"></File><File path="Demos\Device\Incomplete\Sideshow\Lib\SideshowContent.h"></File></Folder><File path="Demos\Device\Incomplete\Sideshow\Descriptors.c"></File><File path="Demos\Device\Incomplete\Sideshow\Descriptors.h"></File><File path="Demos\Device\Incomplete\Sideshow\makefile"></File><File path="Demos\Device\Incomplete\Sideshow\Sideshow.c"></File><File path="Demos\Device\Incomplete\Sideshow\Sideshow.h"></File></Folder><Folder name="TestAndMeasurement"><File path="Demos\Device\Incomplete\TestAndMeasurement\Descriptors.c"></File><File path="Demos\Device\Incomplete\TestAndMeasurement\Descriptors.h"></File><File path="Demos\Device\Incomplete\TestAndMeasurement\TestAndMeasurement.c"></File><File path="Demos\Device\Incomplete\TestAndMeasurement\TestAndMeasurement.h"></File><File path="Demos\Device\Incomplete\TestAndMeasurement\makefile"></File></Folder></Folder><File path="Demos\Device\makefile"></File></Folder><Folder name="Host"><Folder name="ClassDriver"><Folder name="JoystickHostWithParser"><File path="Demos\Host\ClassDriver\JoystickHostWithParser\Doxygen.conf"></File><File path="Demos\Host\ClassDriver\JoystickHostWithParser\JoystickHostWithParser.c"></File><File path="Demos\Host\ClassDriver\JoystickHostWithParser\JoystickHostWithParser.h"></File><File path="Demos\Host\ClassDriver\JoystickHostWithParser\JoystickHostWithParser.txt"></File><File path="Demos\Host\ClassDriver\JoystickHostWithParser\makefile"></File><File path="Demos\Host\ClassDriver\JoystickHostWithParser\JoystickHostWithParser.aps"></File></Folder><Folder name="KeyboardHost"><File path="Demos\Host\ClassDriver\KeyboardHost\Doxygen.conf"></File><File path="Demos\Host\ClassDriver\KeyboardHost\KeyboardHost.c"></File><File path="Demos\Host\ClassDriver\KeyboardHost\KeyboardHost.h"></File><File path="Demos\Host\ClassDriver\KeyboardHost\makefile"></File><File path="Demos\Host\ClassDriver\KeyboardHost\KeyboardHost.txt"></File><File path="Demos\Host\ClassDriver\KeyboardHost\KeyboardHost.aps"></File></Folder><Folder name="KeyboardHostWithParser"><File path="Demos\Host\ClassDriver\KeyboardHostWithParser\Doxygen.conf"></File><File path="Demos\Host\ClassDriver\KeyboardHostWithParser\KeyboardHostWithParser.c"></File><File path="Demos\Host\ClassDriver\KeyboardHostWithParser\KeyboardHostWithParser.h"></File><File path="Demos\Host\ClassDriver\KeyboardHostWithParser\makefile"></File><File path="Demos\Host\ClassDriver\KeyboardHostWithParser\KeyboardHostWithParser.txt"></File><File path="Demos\Host\ClassDriver\KeyboardHostWithParser\KeyboardHostWithParser.aps"></File></Folder><Folder name="MassStorageHost"><File path="Demos\Host\ClassDriver\MassStorageHost\Doxygen.conf"></File><File path="Demos\Host\ClassDriver\MassStorageHost\makefile"></File><File path="Demos\Host\ClassDriver\MassStorageHost\MassStorageHost.c"></File><File path="Demos\Host\ClassDriver\MassStorageHost\MassStorageHost.h"></File><File path="Demos\Host\ClassDriver\MassStorageHost\MassStorageHost.txt"></File><File path="Demos\Host\ClassDriver\MassStorageHost\MassStorageHost.aps"></File></Folder><Folder name="MIDIHost"><File path="Demos\Host\ClassDriver\MIDIHost\Doxygen.conf"></File><File path="Demos\Host\ClassDriver\MIDIHost\makefile"></File><File path="Demos\Host\ClassDriver\MIDIHost\MIDIHost.c"></File><File path="Demos\Host\ClassDriver\MIDIHost\MIDIHost.h"></File><File path="Demos\Host\ClassDriver\MIDIHost\MIDIHost.txt"></File><File path="Demos\Host\ClassDriver\MIDIHost\MIDIHost.aps"></File></Folder><Folder name="MouseHost"><File path="Demos\Host\ClassDriver\MouseHost\Doxygen.conf"></File><File path="Demos\Host\ClassDriver\MouseHost\makefile"></File><File path="Demos\Host\ClassDriver\MouseHost\MouseHost.c"></File><File path="Demos\Host\ClassDriver\MouseHost\MouseHost.h"></File><File path="Demos\Host\ClassDriver\MouseHost\MouseHost.txt"></File><File path="Demos\Host\ClassDriver\MouseHost\MouseHost.aps"></File></Folder><Folder name="MouseHostWithParser"><File path="Demos\Host\ClassDriver\MouseHostWithParser\Doxygen.conf"></File><File path="Demos\Host\ClassDriver\MouseHostWithParser\makefile"></File><File path="Demos\Host\ClassDriver\MouseHostWithParser\MouseHostWithParser.txt"></File><File path="Demos\Host\ClassDriver\MouseHostWithParser\MouseHostWithParser.c"></File><File path="Demos\Host\ClassDriver\MouseHostWithParser\MouseHostWithParser.h"></File><File path="Demos\Host\ClassDriver\MouseHostWithParser\MouseHostWithParser.aps"></File></Folder><Folder name="PrinterHost"><File path="Demos\Host\ClassDriver\PrinterHost\Doxygen.conf"></File><File path="Demos\Host\ClassDriver\PrinterHost\makefile"></File><File path="Demos\Host\ClassDriver\PrinterHost\PrinterHost.c"></File><File path="Demos\Host\ClassDriver\PrinterHost\PrinterHost.h"></File><File path="Demos\Host\ClassDriver\PrinterHost\PrinterHost.txt"></File><File path="Demos\Host\ClassDriver\PrinterHost\PrinterHost.aps"></File></Folder><Folder name="RNDISEthernetHost"><File path="Demos\Host\ClassDriver\RNDISEthernetHost\Doxygen.conf"></File><File path="Demos\Host\ClassDriver\RNDISEthernetHost\makefile"></File><File path="Demos\Host\ClassDriver\RNDISEthernetHost\RNDISEthernetHost.c"></File><File path="Demos\Host\ClassDriver\RNDISEthernetHost\RNDISEthernetHost.h"></File><File path="Demos\Host\ClassDriver\RNDISEthernetHost\RNDISEthernetHost.txt"></File><File path="Demos\Host\ClassDriver\RNDISEthernetHost\RNDISEthernetHost.aps"></File></Folder><Folder name="StillImageHost"><File path="Demos\Host\ClassDriver\StillImageHost\Doxygen.conf"></File><File path="Demos\Host\ClassDriver\StillImageHost\makefile"></File><File path="Demos\Host\ClassDriver\StillImageHost\StillImageHost.c"></File><File path="Demos\Host\ClassDriver\StillImageHost\StillImageHost.h"></File><File path="Demos\Host\ClassDriver\StillImageHost\StillImageHost.txt"></File><File path="Demos\Host\ClassDriver\StillImageHost\StillImageHost.aps"></File></Folder><Folder name="VirtualSerialHost"><File path="Demos\Host\ClassDriver\VirtualSerialHost\Doxygen.conf"></File><File path="Demos\Host\ClassDriver\VirtualSerialHost\makefile"></File><File path="Demos\Host\ClassDriver\VirtualSerialHost\VirtualSerialHost.c"></File><File path="Demos\Host\ClassDriver\VirtualSerialHost\VirtualSerialHost.h"></File><File path="Demos\Host\ClassDriver\VirtualSerialHost\VirtualSerialHost.txt"></File><File path="Demos\Host\ClassDriver\VirtualSerialHost\VirtualSerialHost.aps"></File></Folder><File path="Demos\Host\ClassDriver\makefile"></File></Folder><Folder name="LowLevel"><Folder name="GenericHIDHost"><File path="Demos\Host\LowLevel\GenericHIDHost\ConfigDescriptor.c"></File><File path="Demos\Host\LowLevel\GenericHIDHost\ConfigDescriptor.h"></File><File path="Demos\Host\LowLevel\GenericHIDHost\Doxygen.conf"></File><File path="Demos\Host\LowLevel\GenericHIDHost\GenericHIDHost.c"></File><File path="Demos\Host\LowLevel\GenericHIDHost\GenericHIDHost.h"></File><File path="Demos\Host\LowLevel\GenericHIDHost\GenericHIDHost.txt"></File><File path="Demos\Host\LowLevel\GenericHIDHost\makefile"></File><File path="Demos\Host\LowLevel\GenericHIDHost\GenericHIDHost.aps"></File></Folder><Folder name="JoystickHostWithParser"><File path="Demos\Host\LowLevel\JoystickHostWithParser\ConfigDescriptor.c"></File><File path="Demos\Host\LowLevel\JoystickHostWithParser\ConfigDescriptor.h"></File><File path="Demos\Host\LowLevel\JoystickHostWithParser\Doxygen.conf"></File><File path="Demos\Host\LowLevel\JoystickHostWithParser\HIDReport.c"></File><File path="Demos\Host\LowLevel\JoystickHostWithParser\HIDReport.h"></File><File path="Demos\Host\LowLevel\JoystickHostWithParser\JoystickHostWithParser.c"></File><File path="Demos\Host\LowLevel\JoystickHostWithParser\JoystickHostWithParser.h"></File><File path="Demos\Host\LowLevel\JoystickHostWithParser\JoystickHostWithParser.txt"></File><File path="Demos\Host\LowLevel\JoystickHostWithParser\makefile"></File><File path="Demos\Host\LowLevel\JoystickHostWithParser\JoystickHostWithParser.aps"></File></Folder><Folder name="KeyboardHost"><File path="Demos\Host\LowLevel\KeyboardHost\ConfigDescriptor.c"></File><File path="Demos\Host\LowLevel\KeyboardHost\ConfigDescriptor.h"></File><File path="Demos\Host\LowLevel\KeyboardHost\Doxygen.conf"></File><File path="Demos\Host\LowLevel\KeyboardHost\KeyboardHost.c"></File><File path="Demos\Host\LowLevel\KeyboardHost\KeyboardHost.h"></File><File path="Demos\Host\LowLevel\KeyboardHost\KeyboardHost.txt"></File><File path="Demos\Host\LowLevel\KeyboardHost\makefile"></File><File path="Demos\Host\LowLevel\KeyboardHost\KeyboardHost.aps"></File></Folder><Folder name="KeyboardHostWithParser"><File path="Demos\Host\LowLevel\KeyboardHostWithParser\makefile"></File><File path="Demos\Host\LowLevel\KeyboardHostWithParser\ConfigDescriptor.c"></File><File path="Demos\Host\LowLevel\KeyboardHostWithParser\ConfigDescriptor.h"></File><File path="Demos\Host\LowLevel\KeyboardHostWithParser\Doxygen.conf"></File><File path="Demos\Host\LowLevel\KeyboardHostWithParser\HIDReport.c"></File><File path="Demos\Host\LowLevel\KeyboardHostWithParser\HIDReport.h"></File><File path="Demos\Host\LowLevel\KeyboardHostWithParser\KeyboardHostWithParser.c"></File><File path="Demos\Host\LowLevel\KeyboardHostWithParser\KeyboardHostWithParser.h"></File><File path="Demos\Host\LowLevel\KeyboardHostWithParser\KeyboardHostWithParser.txt"></File><File path="Demos\Host\LowLevel\KeyboardHostWithParser\KeyboardHostWithParser.aps"></File></Folder><Folder name="MassStorageHost"><Folder name="Lib"><File path="Demos\Host\LowLevel\MassStorageHost\Lib\MassStoreCommands.c"></File><File path="Demos\Host\LowLevel\MassStorageHost\Lib\MassStoreCommands.h"></File></Folder><File path="Demos\Host\LowLevel\MassStorageHost\ConfigDescriptor.c"></File><File path="Demos\Host\LowLevel\MassStorageHost\ConfigDescriptor.h"></File><File path="Demos\Host\LowLevel\MassStorageHost\Doxygen.conf"></File><File path="Demos\Host\LowLevel\MassStorageHost\makefile"></File><File path="Demos\Host\LowLevel\MassStorageHost\MassStorageHost.c"></File><File path="Demos\Host\LowLevel\MassStorageHost\MassStorageHost.h"></File><File path="Demos\Host\LowLevel\MassStorageHost\MassStorageHost.txt"></File><File path="Demos\Host\LowLevel\MassStorageHost\MassStorageHost.aps"></File></Folder><Folder name="MIDIHost"><File path="Demos\Host\LowLevel\MIDIHost\ConfigDescriptor.c"></File><File path="Demos\Host\LowLevel\MIDIHost\ConfigDescriptor.h"></File><File path="Demos\Host\LowLevel\MIDIHost\Doxygen.conf"></File><File path="Demos\Host\LowLevel\MIDIHost\makefile"></File><File path="Demos\Host\LowLevel\MIDIHost\MIDIHost.c"></File><File path="Demos\Host\LowLevel\MIDIHost\MIDIHost.h"></File><File path="Demos\Host\LowLevel\MIDIHost\MIDIHost.txt"></File><File path="Demos\Host\LowLevel\MIDIHost\MIDIHost.aps"></File></Folder><Folder name="MouseHost"><File path="Demos\Host\LowLevel\MouseHost\ConfigDescriptor.c"></File><File path="Demos\Host\LowLevel\MouseHost\ConfigDescriptor.h"></File><File path="Demos\Host\LowLevel\MouseHost\Doxygen.conf"></File><File path="Demos\Host\LowLevel\MouseHost\makefile"></File><File path="Demos\Host\LowLevel\MouseHost\MouseHost.c"></File><File path="Demos\Host\LowLevel\MouseHost\MouseHost.h"></File><File path="Demos\Host\LowLevel\MouseHost\MouseHost.txt"></File><File path="Demos\Host\LowLevel\MouseHost\MouseHost.aps"></File></Folder><Folder name="MouseHostWithParser"><File path="Demos\Host\LowLevel\MouseHostWithParser\MouseHostWithParser.txt"></File><File path="Demos\Host\LowLevel\MouseHostWithParser\ConfigDescriptor.c"></File><File path="Demos\Host\LowLevel\MouseHostWithParser\ConfigDescriptor.h"></File><File path="Demos\Host\LowLevel\MouseHostWithParser\Doxygen.conf"></File><File path="Demos\Host\LowLevel\MouseHostWithParser\HIDReport.c"></File><File path="Demos\Host\LowLevel\MouseHostWithParser\HIDReport.h"></File><File path="Demos\Host\LowLevel\MouseHostWithParser\makefile"></File><File path="Demos\Host\LowLevel\MouseHostWithParser\MouseHostWithParser.c"></File><File path="Demos\Host\LowLevel\MouseHostWithParser\MouseHostWithParser.h"></File><File path="Demos\Host\LowLevel\MouseHostWithParser\MouseHostWithParser.aps"></File></Folder><Folder name="PrinterHost"><Folder name="Lib"><File path="Demos\Host\LowLevel\PrinterHost\Lib\PrinterCommands.c"></File><File path="Demos\Host\LowLevel\PrinterHost\Lib\PrinterCommands.h"></File></Folder><File path="Demos\Host\LowLevel\PrinterHost\ConfigDescriptor.c"></File><File path="Demos\Host\LowLevel\PrinterHost\ConfigDescriptor.h"></File><File path="Demos\Host\LowLevel\PrinterHost\makefile"></File><File path="Demos\Host\LowLevel\PrinterHost\PrinterHost.c"></File><File path="Demos\Host\LowLevel\PrinterHost\PrinterHost.h"></File><File path="Demos\Host\LowLevel\PrinterHost\Doxygen.conf"></File><File path="Demos\Host\LowLevel\PrinterHost\PrinterHost.txt"></File><File path="Demos\Host\LowLevel\PrinterHost\PrinterHost.aps"></File></Folder><Folder name="RNDISEthernetHost"><Folder name="Lib"><File path="Demos\Host\LowLevel\RNDISEthernetHost\Lib\RNDISCommands.c"></File><File path="Demos\Host\LowLevel\RNDISEthernetHost\Lib\RNDISCommands.h"></File></Folder><File path="Demos\Host\LowLevel\RNDISEthernetHost\ConfigDescriptor.c"></File><File path="Demos\Host\LowLevel\RNDISEthernetHost\ConfigDescriptor.h"></File><File path="Demos\Host\LowLevel\RNDISEthernetHost\makefile"></File><File path="Demos\Host\LowLevel\RNDISEthernetHost\RNDISEthernetHost.c"></File><File path="Demos\Host\LowLevel\RNDISEthernetHost\RNDISEthernetHost.h"></File><File path="Demos\Host\LowLevel\RNDISEthernetHost\Doxygen.conf"></File><File path="Demos\Host\LowLevel\RNDISEthernetHost\RNDISHost.txt"></File><File path="Demos\Host\LowLevel\RNDISEthernetHost\RNDISEthernetHost.aps"></File></Folder><Folder name="StillImageHost"><Folder name="Lib"><File path="Demos\Host\LowLevel\StillImageHost\Lib\StillImageCommands.c"></File><File path="Demos\Host\LowLevel\StillImageHost\Lib\StillImageCommands.h"></File><File path="Demos\Host\LowLevel\StillImageHost\Lib\PIMACodes.h"></File></Folder><File path="Demos\Host\LowLevel\StillImageHost\ConfigDescriptor.c"></File><File path="Demos\Host\LowLevel\StillImageHost\ConfigDescriptor.h"></File><File path="Demos\Host\LowLevel\StillImageHost\Doxygen.conf"></File><File path="Demos\Host\LowLevel\StillImageHost\makefile"></File><File path="Demos\Host\LowLevel\StillImageHost\StillImageHost.c"></File><File path="Demos\Host\LowLevel\StillImageHost\StillImageHost.h"></File><File path="Demos\Host\LowLevel\StillImageHost\StillImageHost.txt"></File><File path="Demos\Host\LowLevel\StillImageHost\StillImageHost.aps"></File></Folder><Folder name="VirtualSerialHost"><File path="Demos\Host\LowLevel\VirtualSerialHost\ConfigDescriptor.c"></File><File path="Demos\Host\LowLevel\VirtualSerialHost\ConfigDescriptor.h"></File><File path="Demos\Host\LowLevel\VirtualSerialHost\Doxygen.conf"></File><File path="Demos\Host\LowLevel\VirtualSerialHost\makefile"></File><File path="Demos\Host\LowLevel\VirtualSerialHost\VirtualSerialHost.c"></File><File path="Demos\Host\LowLevel\VirtualSerialHost\VirtualSerialHost.h"></File><File path="Demos\Host\LowLevel\VirtualSerialHost\VirtualSerialHost.txt"></File><File path="Demos\Host\LowLevel\VirtualSerialHost\VirtualSerialHost.aps"></File></Folder><File path="Demos\Host\LowLevel\makefile"></File></Folder><Folder name="Incomplete"><Folder name="BluetoothHost"><Folder name="Lib"><File path="Demos\Host\Incomplete\BluetoothHost\Lib\BluetoothACLPackets.c"></File><File path="Demos\Host\Incomplete\BluetoothHost\Lib\BluetoothACLPackets.h"></File><File path="Demos\Host\Incomplete\BluetoothHost\Lib\BluetoothClassCodes.h"></File><File path="Demos\Host\Incomplete\BluetoothHost\Lib\BluetoothHCICommands.c"></File><File path="Demos\Host\Incomplete\BluetoothHost\Lib\BluetoothHCICommands.h"></File><File path="Demos\Host\Incomplete\BluetoothHost\Lib\BluetoothStack.c"></File><File path="Demos\Host\Incomplete\BluetoothHost\Lib\BluetoothStack.h"></File><File path="Demos\Host\Incomplete\BluetoothHost\Lib\SDPServices.c"></File><File path="Demos\Host\Incomplete\BluetoothHost\Lib\SDPServices.h"></File><File path="Demos\Host\Incomplete\BluetoothHost\Lib\RFCOMM.c"></File><File path="Demos\Host\Incomplete\BluetoothHost\Lib\RFCOMM.h"></File><File path="Demos\Host\Incomplete\BluetoothHost\Lib\SDP.c"></File><File path="Demos\Host\Incomplete\BluetoothHost\Lib\SDP.h"></File><File path="Demos\Host\Incomplete\BluetoothHost\Lib\RFCOMMControl.c"></File><File path="Demos\Host\Incomplete\BluetoothHost\Lib\RFCOMMControl.h"></File></Folder><File path="Demos\Host\Incomplete\BluetoothHost\makefile"></File><File path="Demos\Host\Incomplete\BluetoothHost\BluetoothHost.c"></File><File path="Demos\Host\Incomplete\BluetoothHost\BluetoothHost.h"></File><File path="Demos\Host\Incomplete\BluetoothHost\ConfigDescriptor.c"></File><File path="Demos\Host\Incomplete\BluetoothHost\ConfigDescriptor.h"></File><File path="Demos\Host\Incomplete\BluetoothHost\DeviceDescriptor.c"></File><File path="Demos\Host\Incomplete\BluetoothHost\DeviceDescriptor.h"></File><File path="Demos\Host\Incomplete\BluetoothHost\Doxygen.conf"></File><File path="Demos\Host\Incomplete\BluetoothHost\BluetoothEvents.c"></File><File path="Demos\Host\Incomplete\BluetoothHost\BluetoothEvents.h"></File></Folder></Folder><File path="Demos\Host\makefile"></File></Folder><Folder name="DualRole"><Folder name="ClassDriver"><Folder name="MouseHostDevice"><File path="Demos\DualRole\ClassDriver\MouseHostDevice\Doxygen.conf"></File><File path="Demos\DualRole\ClassDriver\MouseHostDevice\makefile"></File><File path="Demos\DualRole\ClassDriver\MouseHostDevice\MouseHostDevice.c"></File><File path="Demos\DualRole\ClassDriver\MouseHostDevice\MouseHostDevice.h"></File><File path="Demos\DualRole\ClassDriver\MouseHostDevice\Descriptors.c"></File><File path="Demos\DualRole\ClassDriver\MouseHostDevice\Descriptors.h"></File><File path="Demos\DualRole\ClassDriver\MouseHostDevice\DeviceFunctions.c"></File><File path="Demos\DualRole\ClassDriver\MouseHostDevice\HostFunctions.c"></File><File path="Demos\DualRole\ClassDriver\MouseHostDevice\HostFunctions.h"></File><File path="Demos\DualRole\ClassDriver\MouseHostDevice\DeviceFunctions.h"></File><File path="Demos\DualRole\ClassDriver\MouseHostDevice\MouseHostDevice.txt"></File><File path="Demos\DualRole\ClassDriver\MouseHostDevice\MouseHostDevice.aps"></File></Folder><File path="Demos\DualRole\ClassDriver\makefile"></File></Folder><File path="Demos\DualRole\makefile"></File></Folder><File path="Demos\makefile"></File></Folder><Folder name="LUFA"><Folder name="Common"><File path="LUFA\Common\Common.h"></File><File path="LUFA\Common\BoardTypes.h"></File><File path="LUFA\Common\Attributes.h"></File><File path="LUFA\Common\Architectures.h"></File></Folder><Folder name="Drivers"><Folder name="USB"><Folder name="Core"><Folder name="AVR8"><File path="LUFA\Drivers\USB\Core\AVR8\Device.c"></File><File path="LUFA\Drivers\USB\Core\AVR8\Device.h"></File><File path="LUFA\Drivers\USB\Core\AVR8\Endpoint.c"></File><File path="LUFA\Drivers\USB\Core\AVR8\Endpoint.h"></File><File path="LUFA\Drivers\USB\Core\AVR8\Host.c"></File><File path="LUFA\Drivers\USB\Core\AVR8\Host.h"></File><File path="LUFA\Drivers\USB\Core\AVR8\OTG.h"></File><File path="LUFA\Drivers\USB\Core\AVR8\Pipe.c"></File><File path="LUFA\Drivers\USB\Core\AVR8\Pipe.h"></File><File path="LUFA\Drivers\USB\Core\AVR8\USBController.c"></File><File path="LUFA\Drivers\USB\Core\AVR8\USBController.h"></File><File path="LUFA\Drivers\USB\Core\AVR8\USBInterrupt.c"></File><File path="LUFA\Drivers\USB\Core\AVR8\USBInterrupt.h"></File></Folder><Folder name="UC3B"><File path="LUFA\Drivers\USB\Core\UC3B\Device.c"></File><File path="LUFA\Drivers\USB\Core\UC3B\Device.h"></File><File path="LUFA\Drivers\USB\Core\UC3B\Endpoint.c"></File><File path="LUFA\Drivers\USB\Core\UC3B\Endpoint.h"></File><File path="LUFA\Drivers\USB\Core\UC3B\Host.c"></File><File path="LUFA\Drivers\USB\Core\UC3B\Host.h"></File><File path="LUFA\Drivers\USB\Core\UC3B\OTG.h"></File><File path="LUFA\Drivers\USB\Core\UC3B\Pipe.c"></File><File path="LUFA\Drivers\USB\Core\UC3B\Pipe.h"></File><File path="LUFA\Drivers\USB\Core\UC3B\USBController.c"></File><File path="LUFA\Drivers\USB\Core\UC3B\USBController.h"></File><File path="LUFA\Drivers\USB\Core\UC3B\USBInterrupt.c"></File><File path="LUFA\Drivers\USB\Core\UC3B\USBInterrupt.h"></File></Folder><Folder name="Template"><File path="LUFA\Drivers\USB\Core\Template\Template_Endpoint_Control_R.c"></File><File path="LUFA\Drivers\USB\Core\Template\Template_Endpoint_Control_W.c"></File><File path="LUFA\Drivers\USB\Core\Template\Template_Endpoint_RW.c"></File><File path="LUFA\Drivers\USB\Core\Template\Template_Pipe_RW.c"></File></Folder><File path="LUFA\Drivers\USB\Core\ConfigDescriptor.c"></File><File path="LUFA\Drivers\USB\Core\ConfigDescriptor.h"></File><File path="LUFA\Drivers\USB\Core\DeviceStandardReq.c"></File><File path="LUFA\Drivers\USB\Core\DeviceStandardReq.h"></File><File path="LUFA\Drivers\USB\Core\EndpointStream.c"></File><File path="LUFA\Drivers\USB\Core\EndpointStream.h"></File><File path="LUFA\Drivers\USB\Core\Events.c"></File><File path="LUFA\Drivers\USB\Core\Events.h"></File><File path="LUFA\Drivers\USB\Core\HostStandardReq.c"></File><File path="LUFA\Drivers\USB\Core\HostStandardReq.h"></File><File path="LUFA\Drivers\USB\Core\PipeStream.c"></File><File path="LUFA\Drivers\USB\Core\PipeStream.h"></File><File path="LUFA\Drivers\USB\Core\StdDescriptors.h"></File><File path="LUFA\Drivers\USB\Core\StdRequestType.h"></File><File path="LUFA\Drivers\USB\Core\USBMode.h"></File><File path="LUFA\Drivers\USB\Core\USBTask.c"></File><File path="LUFA\Drivers\USB\Core\USBTask.h"></File><File path="LUFA\Drivers\USB\Core\Device.h"></File><File path="LUFA\Drivers\USB\Core\Endpoint.h"></File><File path="LUFA\Drivers\USB\Core\Host.h"></File><File path="LUFA\Drivers\USB\Core\OTG.h"></File><File path="LUFA\Drivers\USB\Core\Pipe.h"></File><File path="LUFA\Drivers\USB\Core\USBController.h"></File><File path="LUFA\Drivers\USB\Core\USBInterrupt.h"></File></Folder><Folder name="Class"><Folder name="Device"><File path="LUFA\Drivers\USB\Class\Device\HID.c"></File><File path="LUFA\Drivers\USB\Class\Device\HID.h"></File><File path="LUFA\Drivers\USB\Class\Device\CDC.c"></File><File path="LUFA\Drivers\USB\Class\Device\CDC.h"></File><File path="LUFA\Drivers\USB\Class\Device\RNDIS.c"></File><File path="LUFA\Drivers\USB\Class\Device\RNDIS.h"></File><File path="LUFA\Drivers\USB\Class\Device\MassStorage.c"></File><File path="LUFA\Drivers\USB\Class\Device\MassStorage.h"></File><File path="LUFA\Drivers\USB\Class\Device\Audio.c"></File><File path="LUFA\Drivers\USB\Class\Device\Audio.h"></File><File path="LUFA\Drivers\USB\Class\Device\MIDI.c"></File><File path="LUFA\Drivers\USB\Class\Device\MIDI.h"></File></Folder><Folder name="Host"><File path="LUFA\Drivers\USB\Class\Host\CDC.c"></File><File path="LUFA\Drivers\USB\Class\Host\CDC.h"></File><File path="LUFA\Drivers\USB\Class\Host\HID.c"></File><File path="LUFA\Drivers\USB\Class\Host\HID.h"></File><File path="LUFA\Drivers\USB\Class\Host\MassStorage.c"></File><File path="LUFA\Drivers\USB\Class\Host\MassStorage.h"></File><File path="LUFA\Drivers\USB\Class\Host\StillImage.c"></File><File path="LUFA\Drivers\USB\Class\Host\StillImage.h"></File><File path="LUFA\Drivers\USB\Class\Host\MIDI.c"></File><File path="LUFA\Drivers\USB\Class\Host\MIDI.h"></File><File path="LUFA\Drivers\USB\Class\Host\Printer.c"></File><File path="LUFA\Drivers\USB\Class\Host\Printer.h"></File><File path="LUFA\Drivers\USB\Class\Host\RNDIS.h"></File><File path="LUFA\Drivers\USB\Class\Host\RNDIS.c"></File></Folder><Folder name="Common"><File path="LUFA\Drivers\USB\Class\Common\Audio.h"></File><File path="LUFA\Drivers\USB\Class\Common\CDC.h"></File><File path="LUFA\Drivers\USB\Class\Common\HID.h"></File><File path="LUFA\Drivers\USB\Class\Common\MassStorage.h"></File><File path="LUFA\Drivers\USB\Class\Common\MIDI.h"></File><File path="LUFA\Drivers\USB\Class\Common\RNDIS.h"></File><File path="LUFA\Drivers\USB\Class\Common\StillImage.h"></File><File path="LUFA\Drivers\USB\Class\Common\Printer.h"></File><File path="LUFA\Drivers\USB\Class\Common\HIDParser.c"></File><File path="LUFA\Drivers\USB\Class\Common\HIDParser.h"></File><File path="LUFA\Drivers\USB\Class\Common\HIDReportData.h"></File></Folder><File path="LUFA\Drivers\USB\Class\Audio.h"></File><File path="LUFA\Drivers\USB\Class\CDC.h"></File><File path="LUFA\Drivers\USB\Class\HID.h"></File><File path="LUFA\Drivers\USB\Class\MassStorage.h"></File><File path="LUFA\Drivers\USB\Class\MIDI.h"></File><File path="LUFA\Drivers\USB\Class\RNDIS.h"></File><File path="LUFA\Drivers\USB\Class\StillImage.h"></File><File path="LUFA\Drivers\USB\Class\Printer.h"></File></Folder><File path="LUFA\Drivers\USB\USB.h"></File></Folder><Folder name="Misc"><File path="LUFA\Drivers\Misc\TerminalCodes.h"></File><File path="LUFA\Drivers\Misc\RingBuffer.h"></File><File path="LUFA\Drivers\Misc\AT45DB321C.h"></File><File path="LUFA\Drivers\Misc\AT45DB642D.h"></File></Folder><Folder name="Board"><Folder name="ADAFRUITU4"><File path="LUFA\Drivers\Board\ADAFRUITU4\LEDs.h"></File></Folder><Folder name="ATAVRUSBRF01"><File path="LUFA\Drivers\Board\ATAVRUSBRF01\LEDs.h"></File><File path="LUFA\Drivers\Board\ATAVRUSBRF01\Buttons.h"></File></Folder><Folder name="BENITO"><File path="LUFA\Drivers\Board\BENITO\LEDs.h"></File><File path="LUFA\Drivers\Board\BENITO\Buttons.h"></File></Folder><Folder name="BUMBLEB"><File path="LUFA\Drivers\Board\BUMBLEB\Buttons.h"></File><File path="LUFA\Drivers\Board\BUMBLEB\Joystick.h"></File><File path="LUFA\Drivers\Board\BUMBLEB\LEDs.h"></File></Folder><Folder name="BUI"><File path="LUFA\Drivers\Board\BUI\LEDs.h"></File></Folder><Folder name="BLACKCAT"><File path="LUFA\Drivers\Board\BLACKCAT\LEDs.h"></File></Folder><Folder name="CULV3"><File path="LUFA\Drivers\Board\CULV3\Buttons.h"></File><File path="LUFA\Drivers\Board\CULV3\LEDs.h"></File></Folder><Folder name="EVK527"><File path="LUFA\Drivers\Board\EVK527\Buttons.h"></File><File path="LUFA\Drivers\Board\EVK527\LEDs.h"></File><File path="LUFA\Drivers\Board\EVK527\Joystick.h"></File><File path="LUFA\Drivers\Board\EVK527\Dataflash.h"></File></Folder><Folder name="EVK1101"><File path="LUFA\Drivers\Board\EVK1101\Buttons.h"></File><File path="LUFA\Drivers\Board\EVK1101\Joystick.h"></File><File path="LUFA\Drivers\Board\EVK1101\LEDs.h"></File></Folder><Folder name="JMDBU2"><File path="LUFA\Drivers\Board\JMDBU2\Buttons.h"></File><File path="LUFA\Drivers\Board\JMDBU2\LEDs.h"></File></Folder><Folder name="MAXIMUS"><File path="LUFA\Drivers\Board\MAXIMUS\LEDs.h"></File></Folder><Folder name="MICROSIN162"><File path="LUFA\Drivers\Board\MICROSIN162\LEDs.h"></File><File path="LUFA\Drivers\Board\MICROSIN162\Buttons.h"></File></Folder><Folder name="MINIMUS"><File path="LUFA\Drivers\Board\MINIMUS\Buttons.h"></File><File path="LUFA\Drivers\Board\MINIMUS\LEDs.h"></File></Folder><Folder name="OLIMEX162"><File path="LUFA\Drivers\Board\OLIMEX162\LEDs.h"></File><File path="LUFA\Drivers\Board\OLIMEX162\Buttons.h"></File></Folder><Folder name="RZUSBSTICK"><File path="LUFA\Drivers\Board\RZUSBSTICK\LEDs.h"></File></Folder><Folder name="SPARKFUN8U2"><File path="LUFA\Drivers\Board\SPARKFUN8U2\LEDs.h"></File></Folder><Folder name="STK525"><File path="LUFA\Drivers\Board\STK525\Dataflash.h"></File><File path="LUFA\Drivers\Board\STK525\Joystick.h"></File><File path="LUFA\Drivers\Board\STK525\LEDs.h"></File><File path="LUFA\Drivers\Board\STK525\Buttons.h"></File></Folder><Folder name="STK526"><File path="LUFA\Drivers\Board\STK526\Dataflash.h"></File><File path="LUFA\Drivers\Board\STK526\Joystick.h"></File><File path="LUFA\Drivers\Board\STK526\LEDs.h"></File><File path="LUFA\Drivers\Board\STK526\Buttons.h"></File></Folder><Folder name="TEENSY"><File path="LUFA\Drivers\Board\TEENSY\LEDs.h"></File></Folder><Folder name="UDIP"><File path="LUFA\Drivers\Board\UDIP\LEDs.h"></File><File path="LUFA\Drivers\Board\UDIP\Buttons.h"></File></Folder><Folder name="UNO"><File path="LUFA\Drivers\Board\UNO\LEDs.h"></File></Folder><Folder name="USBFOO"><File path="LUFA\Drivers\Board\USBFOO\Buttons.h"></File><File path="LUFA\Drivers\Board\USBFOO\LEDS.h"></File></Folder><Folder name="USBKEY"><File path="LUFA\Drivers\Board\USBKEY\Dataflash.h"></File><File path="LUFA\Drivers\Board\USBKEY\Joystick.h"></File><File path="LUFA\Drivers\Board\USBKEY\LEDs.h"></File><File path="LUFA\Drivers\Board\USBKEY\Buttons.h"></File></Folder><Folder name="USBTINYMKII"><File path="LUFA\Drivers\Board\USBTINYMKII\LEDs.h"></File><File path="LUFA\Drivers\Board\USBTINYMKII\Buttons.h"></File></Folder><Folder name="XPLAIN"><File path="LUFA\Drivers\Board\XPLAIN\LEDs.h"></File><File path="LUFA\Drivers\Board\XPLAIN\Dataflash.h"></File></Folder><File path="LUFA\Drivers\Board\Temperature.h"></File><File path="LUFA\Drivers\Board\Dataflash.h"></File><File path="LUFA\Drivers\Board\Joystick.h"></File><File path="LUFA\Drivers\Board\Temperature.c"></File><File path="LUFA\Drivers\Board\LEDs.h"></File><File path="LUFA\Drivers\Board\Buttons.h"></File></Folder><Folder name="Peripheral"><Folder name="AVR8"><File path="LUFA\Drivers\Peripheral\AVR8\ADC.h"></File><File path="LUFA\Drivers\Peripheral\AVR8\Serial.c"></File><File path="LUFA\Drivers\Peripheral\AVR8\Serial.h"></File><File path="LUFA\Drivers\Peripheral\AVR8\SPI.h"></File><File path="LUFA\Drivers\Peripheral\AVR8\TWI.c"></File><File path="LUFA\Drivers\Peripheral\AVR8\TWI.h"></File></Folder><File path="LUFA\Drivers\Peripheral\ADC.h"></File><File path="LUFA\Drivers\Peripheral\TWI.h"></File><File path="LUFA\Drivers\Peripheral\Serial.h"></File><File path="LUFA\Drivers\Peripheral\SPI.h"></File></Folder></Folder><Folder name="ManPages"><File path="LUFA\ManPages\AboutLUFA.txt"></File><File path="LUFA\ManPages\BuildingLinkableLibraries.txt"></File><File path="LUFA\ManPages\ChangeLog.txt"></File><File path="LUFA\ManPages\CompileTimeTokens.txt"></File><File path="LUFA\ManPages\DevelopingWithLUFA.txt"></File><File path="LUFA\ManPages\DeviceSupport.txt"></File><File path="LUFA\ManPages\DirectorySummaries.txt"></File><File path="LUFA\ManPages\Donating.txt"></File><File path="LUFA\ManPages\FutureChanges.txt"></File><File path="LUFA\ManPages\GettingStarted.txt"></File><File path="LUFA\ManPages\Groups.txt"></File><File path="LUFA\ManPages\LibraryResources.txt"></File><File path="LUFA\ManPages\LUFAPoweredProjects.txt"></File><File path="LUFA\ManPages\MainPage.txt"></File><File path="LUFA\ManPages\MigrationInformation.txt"></File><File path="LUFA\ManPages\VIDAndPIDValues.txt"></File><File path="LUFA\ManPages\WritingBoardDrivers.txt"></File><File path="LUFA\ManPages\ConfiguringApps.txt"></File><File path="LUFA\ManPages\CompilingApps.txt"></File><File path="LUFA\ManPages\ProgrammingApps.txt"></File><File path="LUFA\ManPages\LibraryApps.txt"></File><File path="LUFA\ManPages\WhyUseLUFA.txt"></File><File path="LUFA\ManPages\LUFAvsAtmelStack.txt"></File><File path="LUFA\ManPages\AlternativeStacks.txt"></File><File path="LUFA\ManPages\SoftwareBootloaderJump.txt"></File><File path="LUFA\ManPages\LicenseInfo.txt"></File></Folder><Folder name="Scheduler"><File path="LUFA\Scheduler\Scheduler.c"></File><File path="LUFA\Scheduler\Scheduler.h"></File></Folder><Folder name="CodeTemplates"><Folder name="DriverStubs"><File path="LUFA\CodeTemplates\DriverStubs\Buttons.h"></File><File path="LUFA\CodeTemplates\DriverStubs\Dataflash.h"></File><File path="LUFA\CodeTemplates\DriverStubs\Joystick.h"></File><File path="LUFA\CodeTemplates\DriverStubs\LEDs.h"></File></Folder><File path="LUFA\CodeTemplates\makefile_template"></File></Folder><File path="LUFA\makefile"></File><File path="LUFA\Version.h"></File><File path="LUFA\Doxygen.conf"></File><File path="LUFA\License.txt"></File></Folder><Folder name="Bootloaders"><Folder name="CDC"><File path="Bootloaders\CDC\BootloaderCDC.c"></File><File path="Bootloaders\CDC\BootloaderCDC.h"></File><File path="Bootloaders\CDC\Descriptors.c"></File><File path="Bootloaders\CDC\Descriptors.h"></File><File path="Bootloaders\CDC\makefile"></File><File path="Bootloaders\CDC\LUFA CDC Bootloader.inf"></File><File path="Bootloaders\CDC\Doxygen.conf"></File><File path="Bootloaders\CDC\BootloaderCDC.txt"></File><File path="Bootloaders\CDC\BootloaderCDC.aps"></File></Folder><Folder name="DFU"><File path="Bootloaders\DFU\BootloaderDFU.c"></File><File path="Bootloaders\DFU\BootloaderDFU.h"></File><File path="Bootloaders\DFU\Descriptors.c"></File><File path="Bootloaders\DFU\Descriptors.h"></File><File path="Bootloaders\DFU\makefile"></File><File path="Bootloaders\DFU\BootloaderDFU.txt"></File><File path="Bootloaders\DFU\Doxygen.conf"></File><File path="Bootloaders\DFU\BootloaderDFU.aps"></File></Folder><Folder name="HID"><Folder name="HostLoaderApp"><File path="Bootloaders\HID\HostLoaderApp\gpl3.txt"></File><File path="Bootloaders\HID\HostLoaderApp\Makefile"></File><File path="Bootloaders\HID\HostLoaderApp\Makefile.bsd"></File><File path="Bootloaders\HID\HostLoaderApp\hid_bootloader_cli.c"></File></Folder><File path="Bootloaders\HID\Descriptors.c"></File><File path="Bootloaders\HID\Descriptors.h"></File><File path="Bootloaders\HID\makefile"></File><File path="Bootloaders\HID\BootloaderHID.txt"></File><File path="Bootloaders\HID\BootloaderHID.c"></File><File path="Bootloaders\HID\BootloaderHID.h"></File><File path="Bootloaders\HID\Doxygen.conf"></File><File path="Bootloaders\HID\BootloaderHID.aps"></File></Folder><File path="Bootloaders\makefile"></File></Folder><Folder name="Projects"><Folder name="AVRISP-MKII"><Folder name="Lib"><Folder name="ISP"><File path="Projects\AVRISP-MKII\Lib\ISP\ISPProtocol.c"></File><File path="Projects\AVRISP-MKII\Lib\ISP\ISPProtocol.h"></File><File path="Projects\AVRISP-MKII\Lib\ISP\ISPTarget.c"></File><File path="Projects\AVRISP-MKII\Lib\ISP\ISPTarget.h"></File></Folder><Folder name="XPROG"><File path="Projects\AVRISP-MKII\Lib\XPROG\TINYNVM.c"></File><File path="Projects\AVRISP-MKII\Lib\XPROG\TINYNVM.h"></File><File path="Projects\AVRISP-MKII\Lib\XPROG\XMEGANVM.c"></File><File path="Projects\AVRISP-MKII\Lib\XPROG\XMEGANVM.h"></File><File path="Projects\AVRISP-MKII\Lib\XPROG\XPROGProtocol.c"></File><File path="Projects\AVRISP-MKII\Lib\XPROG\XPROGProtocol.h"></File><File path="Projects\AVRISP-MKII\Lib\XPROG\XPROGTarget.c"></File><File path="Projects\AVRISP-MKII\Lib\XPROG\XPROGTarget.h"></File></Folder><File path="Projects\AVRISP-MKII\Lib\V2Protocol.c"></File><File path="Projects\AVRISP-MKII\Lib\V2Protocol.h"></File><File path="Projects\AVRISP-MKII\Lib\V2ProtocolConstants.h"></File><File path="Projects\AVRISP-MKII\Lib\V2ProtocolParams.c"></File><File path="Projects\AVRISP-MKII\Lib\V2ProtocolParams.h"></File></Folder><File path="Projects\AVRISP-MKII\Descriptors.c"></File><File path="Projects\AVRISP-MKII\Descriptors.h"></File><File path="Projects\AVRISP-MKII\Doxygen.conf"></File><File path="Projects\AVRISP-MKII\makefile"></File><File path="Projects\AVRISP-MKII\AVRISP-MKII.c"></File><File path="Projects\AVRISP-MKII\AVRISP-MKII.h"></File><File path="Projects\AVRISP-MKII\AVRISP-MKII.txt"></File><File path="Projects\AVRISP-MKII\AVRISP-MKII.aps"></File></Folder><Folder name="Benito"><File path="Projects\Benito\Benito.c"></File><File path="Projects\Benito\Benito.h"></File><File path="Projects\Benito\Descriptors.c"></File><File path="Projects\Benito\Descriptors.h"></File><File path="Projects\Benito\Doxygen.conf"></File><File path="Projects\Benito\makefile"></File><File path="Projects\Benito\Benito.txt"></File><File path="Projects\Benito\Benito Programmer.inf"></File><File path="Projects\Benito\Benito.aps"></File></Folder><Folder name="LEDNotifier"><Folder name="CPUUsageApp"><File path="Projects\LEDNotifier\CPUUsageApp\CPUMonitor.cs"></File><File path="Projects\LEDNotifier\CPUUsageApp\CPUMonitor.csproj"></File><File path="Projects\LEDNotifier\CPUUsageApp\CPUMonitor.Designer.cs"></File><File path="Projects\LEDNotifier\CPUUsageApp\CPUMonitor.resx"></File><File path="Projects\LEDNotifier\CPUUsageApp\Program.cs"></File></Folder><Folder name="HotmailNotifierApp"><File path="Projects\LEDNotifier\HotmailNotifierApp\MailNotifier.cs"></File><File path="Projects\LEDNotifier\HotmailNotifierApp\MailNotifier.csproj"></File><File path="Projects\LEDNotifier\HotmailNotifierApp\MailNotifier.Designer.cs"></File><File path="Projects\LEDNotifier\HotmailNotifierApp\MailNotifier.resx"></File><File path="Projects\LEDNotifier\HotmailNotifierApp\Program.cs"></File></Folder><Folder name="LEDMixerApp"><File path="Projects\LEDNotifier\LEDMixerApp\LEDMixer.cs"></File><File path="Projects\LEDNotifier\LEDMixerApp\LEDMixer.csproj"></File><File path="Projects\LEDNotifier\LEDMixerApp\LEDMixer.Designer.cs"></File><File path="Projects\LEDNotifier\LEDMixerApp\LEDMixer.resx"></File><File path="Projects\LEDNotifier\LEDMixerApp\Program.cs"></File></Folder><File path="Projects\LEDNotifier\Descriptors.c"></File><File path="Projects\LEDNotifier\Descriptors.h"></File><File path="Projects\LEDNotifier\Doxygen.conf"></File><File path="Projects\LEDNotifier\LEDNotifier.c"></File><File path="Projects\LEDNotifier\LEDNotifier.h"></File><File path="Projects\LEDNotifier\LEDNotifier.txt"></File><File path="Projects\LEDNotifier\LUFA LED Notifier.inf"></File><File path="Projects\LEDNotifier\makefile"></File><File path="Projects\LEDNotifier\LEDNotifier.aps"></File></Folder><Folder name="MagStripe"><Folder name="Lib"><File path="Projects\Magstripe\Lib\CircularBitBuffer.c"></File><File path="Projects\Magstripe\Lib\CircularBitBuffer.h"></File><File path="Projects\Magstripe\Lib\MagstripeHW.h"></File></Folder><File path="Projects\Magstripe\Descriptors.c"></File><File path="Projects\Magstripe\Descriptors.h"></File><File path="Projects\Magstripe\Magstripe.c"></File><File path="Projects\Magstripe\Magstripe.h"></File><File path="Projects\Magstripe\makefile"></File><File path="Projects\Magstripe\Magstripe.txt"></File><File path="Projects\Magstripe\Doxygen.conf"></File><File path="Projects\Magstripe\Magstripe.aps"></File></Folder><Folder name="MIDIToneGenerator"><File path="Projects\MIDIToneGenerator\Descriptors.c"></File><File path="Projects\MIDIToneGenerator\Descriptors.h"></File><File path="Projects\MIDIToneGenerator\makefile"></File><File path="Projects\MIDIToneGenerator\MIDIToneGenerator.c"></File><File path="Projects\MIDIToneGenerator\MIDIToneGenerator.h"></File><File path="Projects\MIDIToneGenerator\MIDIToneGenerator.txt"></File><File path="Projects\MIDIToneGenerator\MIDIToneGenerator.aps"></File></Folder><Folder name="MissileLauncher"><File path="Projects\MissileLauncher\ConfigDescriptor.c"></File><File path="Projects\MissileLauncher\ConfigDescriptor.h"></File><File path="Projects\MissileLauncher\Doxygen.conf"></File><File path="Projects\MissileLauncher\makefile"></File><File path="Projects\MissileLauncher\MissileLauncher.c"></File><File path="Projects\MissileLauncher\MissileLauncher.h"></File><File path="Projects\MissileLauncher\MissileLauncher.txt"></File><File path="Projects\MissileLauncher\MissileLauncher.aps"></File></Folder><Folder name="RelayBoard"><File path="Projects\RelayBoard\Descriptors.c"></File><File path="Projects\RelayBoard\Descriptors.h"></File><File path="Projects\RelayBoard\Doxygen.conf"></File><File path="Projects\RelayBoard\makefile"></File><File path="Projects\RelayBoard\RelayBoard.c"></File><File path="Projects\RelayBoard\RelayBoard.h"></File><File path="Projects\RelayBoard\RelayBoard.txt"></File><File path="Projects\RelayBoard\RelayBoard.aps"></File></Folder><Folder name="TempDataLogger"><Folder name="Lib"><Folder name="FATFs"><File path="Projects\TempDataLogger\Lib\FATFs\diskio.c"></File><File path="Projects\TempDataLogger\Lib\FATFs\diskio.h"></File><File path="Projects\TempDataLogger\Lib\FATFs\ff.c"></File><File path="Projects\TempDataLogger\Lib\FATFs\ff.h"></File><File path="Projects\TempDataLogger\Lib\FATFs\ffconf.h"></File><File path="Projects\TempDataLogger\Lib\FATFs\integer.h"></File></Folder><File path="Projects\TempDataLogger\Lib\DataflashManager.c"></File><File path="Projects\TempDataLogger\Lib\DataflashManager.h"></File><File path="Projects\TempDataLogger\Lib\DS1307.c"></File><File path="Projects\TempDataLogger\Lib\DS1307.h"></File><File path="Projects\TempDataLogger\Lib\SCSI.c"></File><File path="Projects\TempDataLogger\Lib\SCSI.h"></File></Folder><Folder name="TempLogHostApp"><File path="Projects\TempDataLogger\TempLogHostApp\DataLoggerSettings.cs"></File><File path="Projects\TempDataLogger\TempLogHostApp\DataLoggerSettings.Designer.cs"></File><File path="Projects\TempDataLogger\TempLogHostApp\DataLoggerSettings.resx"></File><File path="Projects\TempDataLogger\TempLogHostApp\Program.cs"></File><File path="Projects\TempDataLogger\TempLogHostApp\TempLoggerHostApp.csproj"></File></Folder><File path="Projects\TempDataLogger\Descriptors.c"></File><File path="Projects\TempDataLogger\Descriptors.h"></File><File path="Projects\TempDataLogger\Doxygen.conf"></File><File path="Projects\TempDataLogger\makefile"></File><File path="Projects\TempDataLogger\TempDataLogger.c"></File><File path="Projects\TempDataLogger\TempDataLogger.h"></File><File path="Projects\TempDataLogger\TemperatureDataLogger.txt"></File><File path="Projects\TempDataLogger\TempDataLogger.aps"></File></Folder><Folder name="USBtoSerial"><File path="Projects\USBtoSerial\Descriptors.h"></File><File path="Projects\USBtoSerial\Doxygen.conf"></File><File path="Projects\USBtoSerial\LUFA USBtoSerial.inf"></File><File path="Projects\USBtoSerial\makefile"></File><File path="Projects\USBtoSerial\USBtoSerial.c"></File><File path="Projects\USBtoSerial\USBtoSerial.h"></File><File path="Projects\USBtoSerial\USBtoSerial.txt"></File><File path="Projects\USBtoSerial\USBtoSerial.aps"></File><File path="Projects\USBtoSerial\Descriptors.c"></File></Folder><Folder name="Webserver"><Folder name="Lib"><Folder name="uip"><File path="Projects\Webserver\Lib\uip\clock.c"></File><File path="Projects\Webserver\Lib\uip\clock.h"></File><File path="Projects\Webserver\Lib\uip\timer.c"></File><File path="Projects\Webserver\Lib\uip\timer.h"></File><File path="Projects\Webserver\Lib\uip\uip.c"></File><File path="Projects\Webserver\Lib\uip\uip.h"></File><File path="Projects\Webserver\Lib\uip\uip_arp.c"></File><File path="Projects\Webserver\Lib\uip\uip_arp.h"></File><File path="Projects\Webserver\Lib\uip\uipopt.h"></File><File path="Projects\Webserver\Lib\uip\uip-split.c"></File><File path="Projects\Webserver\Lib\uip\uip-split.h"></File></Folder><Folder name="FATFs"><File path="Projects\Webserver\Lib\FATFs\diskio.c"></File><File path="Projects\Webserver\Lib\FATFs\diskio.h"></File><File path="Projects\Webserver\Lib\FATFs\ff.c"></File><File path="Projects\Webserver\Lib\FATFs\ff.h"></File><File path="Projects\Webserver\Lib\FATFs\ffconf.h"></File><File path="Projects\Webserver\Lib\FATFs\integer.h"></File></Folder><File path="Projects\Webserver\Lib\DataflashManager.c"></File><File path="Projects\Webserver\Lib\DataflashManager.h"></File><File path="Projects\Webserver\Lib\uIPManagement.c"></File><File path="Projects\Webserver\Lib\uIPManagement.h"></File><File path="Projects\Webserver\Lib\HTTPServerApp.c"></File><File path="Projects\Webserver\Lib\HTTPServerApp.h"></File><File path="Projects\Webserver\Lib\SCSI.c"></File><File path="Projects\Webserver\Lib\SCSI.h"></File><File path="Projects\Webserver\Lib\DHCPClientApp.c"></File><File path="Projects\Webserver\Lib\DHCPClientApp.h"></File><File path="Projects\Webserver\Lib\TELNETServerApp.c"></File><File path="Projects\Webserver\Lib\TELNETServerApp.h"></File></Folder><File path="Projects\Webserver\makefile"></File><File path="Projects\Webserver\Webserver.c"></File><File path="Projects\Webserver\Webserver.h"></File><File path="Projects\Webserver\Doxygen.conf"></File><File path="Projects\Webserver\Webserver.txt"></File><File path="Projects\Webserver\Descriptors.c"></File><File path="Projects\Webserver\Descriptors.h"></File><File path="Projects\Webserver\USBHostMode.c"></File><File path="Projects\Webserver\USBHostMode.h"></File><File path="Projects\Webserver\USBDeviceMode.c"></File><File path="Projects\Webserver\USBDeviceMode.h"></File><File path="Projects\Webserver\Webserver.aps"></File></Folder><Folder name="XPLAINBridge"><Folder name="Lib"><File path="Projects\XPLAINBridge\Lib\SoftUART.c"></File><File path="Projects\XPLAINBridge\Lib\SoftUART.h"></File></Folder><File path="Projects\XPLAINBridge\XPLAINBridge.txt"></File><File path="Projects\XPLAINBridge\XPLAINBridge.h"></File><File path="Projects\XPLAINBridge\XPLAINBridge.c"></File><File path="Projects\XPLAINBridge\XPLAINBridge.aps"></File><File path="Projects\XPLAINBridge\USARTDescriptors.h"></File><File path="Projects\XPLAINBridge\USARTDescriptors.c"></File><File path="Projects\XPLAINBridge\makefile"></File><File path="Projects\XPLAINBridge\LUFA XPLAIN Bridge.inf"></File><File path="Projects\XPLAINBridge\Doxygen.conf"></File><File path="Projects\XPLAINBridge\AVRISPDescriptors.h"></File><File path="Projects\XPLAINBridge\AVRISPDescriptors.c"></File></Folder><Folder name="Incomplete"><Folder name="StandaloneProgrammer"><Folder name="Lib"><Folder name="PetiteFATFs"><File path="Projects\Incomplete\StandaloneProgrammer\Lib\PetiteFATFs\diskio.c"></File><File path="Projects\Incomplete\StandaloneProgrammer\Lib\PetiteFATFs\diskio.h"></File><File path="Projects\Incomplete\StandaloneProgrammer\Lib\PetiteFATFs\integer.h"></File><File path="Projects\Incomplete\StandaloneProgrammer\Lib\PetiteFATFs\pff.c"></File><File path="Projects\Incomplete\StandaloneProgrammer\Lib\PetiteFATFs\pff.h"></File></Folder><File path="Projects\Incomplete\StandaloneProgrammer\Lib\DataflashManager.c"></File><File path="Projects\Incomplete\StandaloneProgrammer\Lib\DataflashManager.h"></File><File path="Projects\Incomplete\StandaloneProgrammer\Lib\SCSI.c"></File><File path="Projects\Incomplete\StandaloneProgrammer\Lib\SCSI.h"></File><File path="Projects\Incomplete\StandaloneProgrammer\Lib\ProgrammerConfig.c"></File><File path="Projects\Incomplete\StandaloneProgrammer\Lib\ProgrammerConfig.h"></File></Folder><File path="Projects\Incomplete\StandaloneProgrammer\Descriptors.c"></File><File path="Projects\Incomplete\StandaloneProgrammer\Descriptors.h"></File><File path="Projects\Incomplete\StandaloneProgrammer\makefile"></File><File path="Projects\Incomplete\StandaloneProgrammer\StandaloneProgrammer.c"></File><File path="Projects\Incomplete\StandaloneProgrammer\StandaloneProgrammer.h"></File><File path="Projects\Incomplete\StandaloneProgrammer\DiskDevice.c"></File><File path="Projects\Incomplete\StandaloneProgrammer\DiskDevice.h"></File><File path="Projects\Incomplete\StandaloneProgrammer\DiskHost.c"></File><File path="Projects\Incomplete\StandaloneProgrammer\DiskHost.h"></File></Folder></Folder><File path="Projects\makefile"></File></Folder><File path="makefile"></File><File path="README.txt"></File></Project>
\ No newline at end of file
index 85f0d39..d34ad8c 100644 (file)
        /* Public Interface - May be used in end-application: */\r
                /* Macros: */\r
                        /** Selects the Atmel 8-bit AVR (AT90USB* and ATMEGA*U* chips) architecture. */\r
-                       #define ARCH_AVR8           1\r
+                       #define ARCH_AVR8           0\r
 \r
+                       /** Selects the Atmel 32-bit UC3B AVR (AT32UC3B* chips) architecture. */\r
+                       #define ARCH_UC3B           1\r
+                       \r
                        #if !defined(__DOXYGEN__)\r
                                #define ARCH_           ARCH_AVR8\r
 \r
index 41dc490..2644685 100644 (file)
                        /** Selects the Sparkfun ATMEGA8U2 specific board drivers, including the driver for the board LEDs. */
                        #define BOARD_SPARKFUN8U2   26
 
+                       /** Selects the Atmel EVK1101 specific board drivers, including the Button, Joystick and LED drivers. */
+                       #define BOARD_EVK1101       27
+                       
                        #if !defined(__DOXYGEN__)
                                #define BOARD_          BOARD_NONE
 
index 114f566..4efa27e 100644 (file)
@@ -67,6 +67,7 @@
                #include <stdint.h>
                #include <stdbool.h>
                #include <string.h>
+               #include <stddef.h>
                
                #include "Architectures.h"
                #include "Attributes.h"
                        #include <avr/boot.h>
                        #include <util/atomic.h>
                        #include <util/delay.h>
+                       
+                       typedef uint8_t uintN_t;
+                       typedef int8_t  intN_t;
+               #elif (ARCH == ARCH_UC3B)
+                       #include <avr32/io.h>
+
+                       typedef uint32_t uintN_t;
+                       typedef int32_t  intN_t;
+                       
+                       #warning The UC3B architecture support is currently experimental and incomplete!
                #endif
 
        /* Public Interface - May be used in end-application: */
index 624ce24..d768c2e 100644 (file)
                #include "MINIMUS/Buttons.h"
        #elif (BOARD == BOARD_MICROSIN162)
                #include "MICROSIN162/Buttons.h"
+       #elif (BOARD == BOARD_EVK1101)
+               #include "EVK1101/Buttons.h"
        #else
                #include "Board/Buttons.h"
        #endif
diff --git a/LUFA/Drivers/Board/EVK1101/Buttons.h b/LUFA/Drivers/Board/EVK1101/Buttons.h
new file mode 100644 (file)
index 0000000..e76bc52
--- /dev/null
@@ -0,0 +1,103 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *  \brief Board specific Buttons driver header for the Atmel EVK1101.\r
+ *  \copydetails Group_Buttons_EVK1101\r
+ *\r
+ *  \note This file should not be included directly. It is automatically included as needed by the Buttons driver\r
+ *        dispatch header located in LUFA/Drivers/Board/Buttons.h.\r
+ */\r
+\r
+/** \ingroup Group_Buttons\r
+ *  \defgroup Group_Buttons_EVK1101 EVK1101\r
+ *  \brief Board specific Buttons driver header for the Atmel EVK1101.\r
+ *\r
+ *  Board specific Buttons driver header for the Atmel EVK1101.\r
+ *\r
+ *  @{\r
+ */\r
\r
+#ifndef __BUTTONS_EVK1101_H__\r
+#define __BUTTONS_EVK1101_H__\r
+\r
+       /* Includes: */\r
+               #include <avr32/io.h>\r
+               #include <stdbool.h>\r
+\r
+               #include "../../../Common/Common.h"\r
+\r
+       /* Enable C linkage for C++ Compilers: */\r
+               #if defined(__cplusplus)\r
+                       extern "C" {\r
+               #endif\r
+\r
+       /* Preprocessor Checks: */\r
+               #if !defined(INCLUDE_FROM_BUTTONS_H)\r
+                       #error Do not include this file directly. Include LUFA/Drivers/Board/Buttons.h instead.\r
+               #endif\r
+               \r
+       /* Private Interface - For use in library only: */\r
+       #if !defined(__DOXYGEN__)\r
+               /* Macros: */\r
+                       #define BUTTONS_PORT          1\r
+       #endif\r
+\r
+       /* Public Interface - May be used in end-application: */\r
+               /* Macros: */\r
+                       /** Mask of the first button on the board */\r
+                       #define BUTTONS_BUTTON1       (1UL << 2)\r
+\r
+                       /** Mask of the second button on the board */\r
+                       #define BUTTONS_BUTTON2       (1UL << 3)\r
+\r
+               /* Inline Functions: */\r
+               #if !defined(__DOXYGEN__)\r
+                       static inline void Buttons_Init(void)\r
+                       {\r
+                               AVR32_GPIO.port[BUTTONS_PORT].gpers  = (BUTTONS_BUTTON1 | BUTTONS_BUTTON2);\r
+                               AVR32_GPIO.port[BUTTONS_PORT].puers  = (BUTTONS_BUTTON1 | BUTTONS_BUTTON2);\r
+                       }\r
+\r
+                       static inline uintN_t Buttons_GetStatus(void) ATTR_WARN_UNUSED_RESULT;\r
+                       static inline uintN_t Buttons_GetStatus(void)\r
+                       {\r
+                               return (~(AVR32_GPIO.port[JOY_MOVE_PORT].pvr & (BUTTONS_BUTTON1 | BUTTONS_BUTTON2)));\r
+                       }\r
+               #endif\r
+\r
+       /* Disable C linkage for C++ Compilers: */\r
+               #if defined(__cplusplus)\r
+                       }\r
+               #endif\r
+                       \r
+#endif\r
+\r
+/** @} */\r
diff --git a/LUFA/Drivers/Board/EVK1101/Joystick.h b/LUFA/Drivers/Board/EVK1101/Joystick.h
new file mode 100644 (file)
index 0000000..9bb7f6b
--- /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
+/** \file\r
+ *  \brief Board specific joystick driver header for the Atmel EVK1101.\r
+ *  \copydetails Group_Joystick_EVK1101\r
+ *\r
+ *  \note This file should not be included directly. It is automatically included as needed by the joystick driver\r
+ *        dispatch header located in LUFA/Drivers/Board/Joystick.h.\r
+ */\r
+\r
+/** \ingroup Group_Joystick\r
+ *  \defgroup Group_Joystick_EVK1101 EVK1101\r
+ *  \brief Board specific joystick driver header for the Atmel EVK1101.\r
+ *\r
+ *  Board specific joystick driver header for the Atmel EVK1101.\r
+ *\r
+ *  @{\r
+ */\r
\r
+#ifndef __JOYSTICK_EVK1101_H__\r
+#define __JOYSTICK_EVK1101_H__\r
+\r
+       /* Includes: */\r
+               #include <avr32/io.h>\r
+\r
+               #include "../../../Common/Common.h"\r
+\r
+       /* Enable C linkage for C++ Compilers: */\r
+               #if defined(__cplusplus)\r
+                       extern "C" {\r
+               #endif\r
+\r
+       /* Preprocessor Checks: */\r
+               #if !defined(INCLUDE_FROM_JOYSTICK_H)\r
+                       #error Do not include this file directly. Include LUFA/Drivers/Board/Joystick.h instead.\r
+               #endif\r
+\r
+       /* Private Interface - For use in library only: */\r
+       #if !defined(__DOXYGEN__)\r
+               /* Macros: */\r
+                       #define JOY_MOVE_PORT            1\r
+                       #define JOY_MOVE_MASK            ((1 << 6) | (1 << 7) | (1 << 8) | (1 << 9))\r
+                       #define JOY_PRESS_PORT           0\r
+                       #define JOY_PRESS_MASK           (1 << 13)\r
+                       \r
+                       #define JOY_SHIFT_LEFT           6\r
+       #endif\r
+       \r
+       /* Public Interface - May be used in end-application: */\r
+               /* Macros: */\r
+                       /** Mask for the joystick being pushed in the left direction. */\r
+                       #define JOY_LEFT                 (1 << 1)\r
+\r
+                       /** Mask for the joystick being pushed in the right direction. */\r
+                       #define JOY_RIGHT                (1 << 2)\r
+\r
+                       /** Mask for the joystick being pushed in the upward direction. */\r
+                       #define JOY_UP                   (1 << 3)\r
+\r
+                       /** Mask for the joystick being pushed in the downward direction. */\r
+                       #define JOY_DOWN                 (1 << 4)\r
+\r
+                       /** Mask for the joystick being pushed inward. */\r
+                       #define JOY_PRESS                (1 << 7)\r
+                       \r
+               /* Inline Functions: */\r
+               #if !defined(__DOXYGEN__)\r
+                       static inline void Joystick_Init(void)\r
+                       {\r
+                               AVR32_GPIO.port[JOY_MOVE_PORT].gpers  = JOY_MOVE_MASK;\r
+                               AVR32_GPIO.port[JOY_PRESS_PORT].gpers = JOY_PRESS_MASK;\r
+\r
+                               AVR32_GPIO.port[JOY_MOVE_PORT].puers  = JOY_MOVE_MASK;\r
+                               AVR32_GPIO.port[JOY_PRESS_PORT].puers = JOY_PRESS_MASK;\r
+                       };\r
+                       \r
+                       static inline uintN_t Joystick_GetStatus(void) ATTR_WARN_UNUSED_RESULT;\r
+                       static inline uintN_t Joystick_GetStatus(void)\r
+                       {\r
+                               return (uintN_t)(~(((AVR32_GPIO.port[JOY_MOVE_PORT].pvr  & JOY_MOVE_MASK) |\r
+                                                   (AVR32_GPIO.port[JOY_PRESS_PORT].pvr & JOY_PRESS_MASK)) << JOY_SHIFT_LEFT));\r
+                       }\r
+               #endif\r
+\r
+       /* Disable C linkage for C++ Compilers: */\r
+               #if defined(__cplusplus)\r
+                       }\r
+               #endif\r
+\r
+#endif\r
+\r
+/** @} */\r
diff --git a/LUFA/Drivers/Board/EVK1101/LEDs.h b/LUFA/Drivers/Board/EVK1101/LEDs.h
new file mode 100644 (file)
index 0000000..5eeaa7a
--- /dev/null
@@ -0,0 +1,137 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *  \brief Board specific LED driver header for the Atmel EVK1101.\r
+ *  \copydetails Group_LEDs_EVK1101\r
+ *\r
+ *  \note This file should not be included directly. It is automatically included as needed by the LEDs driver\r
+ *        dispatch header located in LUFA/Drivers/Board/LEDs.h.\r
+ */\r
+\r
+/** \ingroup Group_LEDs\r
+ *  \defgroup Group_LEDs_EVK1101 EVK1101\r
+ *  \brief Board specific LED driver header for the Atmel EVK1101.\r
+ *\r
+ *  Board specific LED driver header for the Atmel EVK1101.\r
+ *\r
+ *  @{\r
+ */\r
+\r
+#ifndef __LEDS_EVK1101_H__\r
+#define __LEDS_EVK1101_H__\r
+\r
+       /* Includes: */\r
+               #include <avr32/io.h>\r
+\r
+               #include "../../../Common/Common.h"\r
+\r
+       /* Enable C linkage for C++ Compilers: */\r
+               #if defined(__cplusplus)\r
+                       extern "C" {\r
+               #endif\r
+\r
+       /* Preprocessor Checks: */\r
+               #if !defined(INCLUDE_FROM_LEDS_H)\r
+                       #error Do not include this file directly. Include LUFA/Drivers/Board/LEDS.h instead.\r
+               #endif\r
+\r
+       /* Private Interface - For use in library only: */\r
+       #if !defined(__DOXYGEN__)\r
+               /* Macros: */\r
+                       #define LEDS_PORT        0\r
+       #endif\r
+\r
+       /* Public Interface - May be used in end-application: */\r
+               /* Macros: */\r
+                       /** LED mask for the first LED on the board. */\r
+                       #define LEDS_LED1        (1UL << 7)\r
+\r
+                       /** LED mask for the second LED on the board. */\r
+                       #define LEDS_LED2        (1UL << 8)\r
+\r
+                       /** LED mask for the third LED on the board. */\r
+                       #define LEDS_LED3        (1UL << 21)\r
+\r
+                       /** LED mask for the fourth LED on the board. */\r
+                       #define LEDS_LED4        (1UL << 22)\r
+\r
+                       /** LED mask for all the LEDs on the board. */\r
+                       #define LEDS_ALL_LEDS    (LEDS_LED1 | LEDS_LED2 | LEDS_LED3 | LEDS_LED4)\r
+\r
+                       /** LED mask for the none of the board LEDs */\r
+                       #define LEDS_NO_LEDS     0\r
+\r
+               /* Inline Functions: */\r
+               #if !defined(__DOXYGEN__)\r
+                       static inline void LEDs_Init(void)\r
+                       {\r
+                               AVR32_GPIO.port[LEDS_PORT].gpers = LEDS_ALL_LEDS;\r
+                               AVR32_GPIO.port[LEDS_PORT].oders = LEDS_ALL_LEDS;\r
+                               AVR32_GPIO.port[LEDS_PORT].ovrs  = LEDS_ALL_LEDS;\r
+                       }\r
+                       \r
+                       static inline void LEDs_TurnOnLEDs(const uintN_t LedMask)\r
+                       {\r
+                               AVR32_GPIO.port[LEDS_PORT].ovrc  = LedMask;\r
+                       }\r
+\r
+                       static inline void LEDs_TurnOffLEDs(const uintN_t LedMask)\r
+                       {\r
+                               AVR32_GPIO.port[LEDS_PORT].ovrs  = LedMask;\r
+                       }\r
+\r
+                       static inline void LEDs_SetAllLEDs(const uintN_t LedMask)\r
+                       {\r
+                               AVR32_GPIO.port[LEDS_PORT].ovrs  = LEDS_ALL_LEDS;\r
+                               AVR32_GPIO.port[LEDS_PORT].ovrc  = LedMask;\r
+                       }\r
+                       \r
+                       static inline void LEDs_ChangeLEDs(const uintN_t LedMask, const uintN_t ActiveMask)\r
+                       {\r
+                               AVR32_GPIO.port[LEDS_PORT].ovrs  = LedMask;\r
+                               AVR32_GPIO.port[LEDS_PORT].ovrc  = ActiveMask;\r
+                       }\r
+                       \r
+                       static inline uintN_t LEDs_GetLEDs(void) ATTR_WARN_UNUSED_RESULT;\r
+                       static inline uintN_t LEDs_GetLEDs(void)\r
+                       {\r
+                               return (AVR32_GPIO.port[LEDS_PORT].ovr & LEDS_ALL_LEDS);\r
+                       }\r
+               #endif\r
+\r
+       /* Disable C linkage for C++ Compilers: */\r
+               #if defined(__cplusplus)\r
+                       }\r
+               #endif\r
+               \r
+#endif\r
+\r
+/** @} */\r
index 21e5e92..649b128 100644 (file)
                #include "BUMBLEB/Joystick.h"
        #elif (BOARD == BOARD_EVK527)
                #include "EVK527/Joystick.h"
+       #elif (BOARD == BOARD_EVK1101)
+               #include "EVK1101/Joystick.h"
        #else
                #include "Board/Joystick.h"
        #endif
index 2a74de7..3b250c0 100644 (file)
                #include "MICROSIN162/LEDs.h"
        #elif (BOARD == BOARD_SPARKFUN8U2)
                #include "SPARKFUN8U2/LEDs.h"
+       #elif (BOARD == BOARD_EVK1101)
+               #include "EVK1101/LEDs.h"
        #else
                #include "Board/LEDs.h"
        #endif
index d57b32f..ea13a6d 100644 (file)
                         */
                        #define ENDPOINT_EPDIR_MASK                     0x80
 
-                       /** Endpoint bank size mask, for masking against endpoint addresses to retrieve the endpoint's
-                        *  bank size in the device.
-                        */
-                       #define ENDPOINT_EPSIZE_MASK                    0x7F
-
                        /** Retrives the maximum bank size in bytes of a given endpoint.
                         *
                         *  \note This macro will only work correctly on endpoint indexes that are compile-time constants
                                                                      const uint16_t Size,
                                                                      const uint8_t Banks)
                        {
-                               return Endpoint_ConfigureEndpoint_Prv(Number, (((Type) << EPTYPE0) | (Direction)),
+                               return Endpoint_ConfigureEndpoint_Prv(Number, ((Type << EPTYPE0) | Direction),
                                                                      ((1 << ALLOC) | Banks | Endpoint_BytesToEPSizeMask(Size)));
                        }
 
                                return ((UECONX & (1 << EPEN)) ? true : false);
                        }
 
+                       /** Retrieves the number of busy banks in the currently selected endpoint, which have been queued for
+                        *  transmission via the \ref Endpoint_ClearIN() command, or are awaiting acknowledgement via the
+                        *  \ref Endpoint_ClearOUT() command.
+                        *
+                        *  \ingroup Group_EndpointPacketManagement_AVR8
+                        *
+                        *  \return Total number of busy banks in the selected endpoint.
+                        */
+                       static inline uint8_t Endpoint_GetBusyBanks(void)
+                       {
+                               return (UESTA0X & (0x03 << NBUSYBK0));
+                       }
+
                        /** Aborts all pending IN transactions on the currently selected endpoint, once the bank
                         *  has been queued for transmission to the host via \ref Endpoint_ClearIN(). This function
                         *  will terminate all queued transactions, resetting the endpoint banks ready for a new
                         */
                        static inline void Endpoint_AbortPendingIN(void)
                        {
-                               while (UESTA0X & (0x03 << NBUSYBK0))
+                               while (Endpoint_GetBusyBanks() != 0)
                                {
                                        UEINTX |= (1 << RXOUTI);
                                        while (UEINTX & (1 << RXOUTI));
                                }
                        }
-                       
-                       /** Retrieves the number of busy banks in the currently selected endpoint, which have been queued for
-                        *  transmission via the \ref Endpoint_ClearIN() command, or are awaiting acknowledgement via the
-                        *  \ref Endpoint_ClearOUT() command.
-                        *
-                        *  \ingroup Group_EndpointPacketManagement_AVR8
-                        *
-                        *  \return Total number of busy banks in the selected endpoint.
-                        */
-                       static inline uint8_t Endpoint_GetBusyBanks(void)
-                       {
-                               return (UESTA0X & (0x03 << NBUSYBK0));
-                       }
 
                        /** Determines if the currently selected endpoint may be read from (if data is waiting in the endpoint
                         *  bank and the endpoint is an OUT direction, or if the bank is not yet full if the endpoint is an IN
                        static inline bool Endpoint_HasEndpointInterrupted(const uint8_t EndpointNumber) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;
                        static inline bool Endpoint_HasEndpointInterrupted(const uint8_t EndpointNumber)
                        {
-                               return ((UEINT & (1 << EndpointNumber)) ? true : false);
+                               return ((Endpoint_GetEndpointInterrupts() & (1 << EndpointNumber)) ? true : false);
                        }
 
                        /** Determines if the selected IN endpoint is ready for a new packet to be sent to the host.
index c681f86..940fa19 100644 (file)
        /* Private Interface - For use in library only: */
        #if !defined(__DOXYGEN__)
                /* Macros: */
-                       #define USB_INT_Enable(int)              MACROS{ USB_INT_GET_EN_REG(int)   |=   USB_INT_GET_EN_MASK(int);   }MACROE
-                       #define USB_INT_Disable(int)             MACROS{ USB_INT_GET_EN_REG(int)   &= ~(USB_INT_GET_EN_MASK(int));  }MACROE
-                       #define USB_INT_Clear(int)               MACROS{ USB_INT_GET_INT_REG(int)  &= ~(USB_INT_GET_INT_MASK(int)); }MACROE
-                       #define USB_INT_IsEnabled(int)                 ((USB_INT_GET_EN_REG(int)   &    USB_INT_GET_EN_MASK(int)) ? true : false)
-                       #define USB_INT_HasOccurred(int)               ((USB_INT_GET_INT_REG(int)  &    USB_INT_GET_INT_MASK(int)) ? true : false)
+                       #define USB_INT_Enable(int)       MACROS{ USB_INT_GET_EN_REG(int)   |=   USB_INT_GET_EN_MASK(int);   }MACROE
+                       #define USB_INT_Disable(int)      MACROS{ USB_INT_GET_EN_REG(int)   &= ~(USB_INT_GET_EN_MASK(int));  }MACROE
+                       #define USB_INT_Clear(int)        MACROS{ USB_INT_GET_INT_REG(int)  &= ~(USB_INT_GET_INT_MASK(int)); }MACROE
+                       #define USB_INT_IsEnabled(int)          ((USB_INT_GET_EN_REG(int)   &    USB_INT_GET_EN_MASK(int))  ? true : false)
+                       #define USB_INT_HasOccurred(int)        ((USB_INT_GET_INT_REG(int)  &    USB_INT_GET_INT_MASK(int)) ? true : false)
 
                        #define USB_INT_GET_EN_REG(EnableReg, EnableMask, FlagReg, FlagMask)    EnableReg
                        #define USB_INT_GET_EN_MASK(EnableReg, EnableMask, FlagReg, FlagMask)   EnableMask
                        #define USB_INT_GET_INT_REG(EnableReg, EnableMask, FlagReg, FlagMask)   FlagReg
                        #define USB_INT_GET_INT_MASK(EnableReg, EnableMask, FlagReg, FlagMask)  FlagMask
                        
-                       #define USB_INT_VBUS                             USBCON, (1 << VBUSTE) , USBINT, (1 << VBUSTI)
-                       #define USB_INT_IDTI                             USBCON, (1 << IDTE)   , USBINT, (1 << IDTI)
-                       #define USB_INT_WAKEUPI                          UDIEN , (1 << WAKEUPE), UDINT , (1 << WAKEUPI)
-                       #define USB_INT_SUSPI                            UDIEN , (1 << SUSPE)  , UDINT , (1 << SUSPI)
-                       #define USB_INT_EORSTI                           UDIEN , (1 << EORSTE) , UDINT , (1 << EORSTI)
-                       #define USB_INT_DCONNI                           UHIEN , (1 << DCONNE) , UHINT , (1 << DCONNI)
-                       #define USB_INT_DDISCI                           UHIEN , (1 << DDISCE) , UHINT , (1 << DDISCI)
-                       #define USB_INT_BCERRI                           OTGIEN, (1 << BCERRE) , OTGINT, (1 << BCERRI)
-                       #define USB_INT_VBERRI                           OTGIEN, (1 << VBERRE) , OTGINT, (1 << VBERRI)
-                       #define USB_INT_SOFI                             UDIEN,  (1 << SOFE)   , UDINT , (1 << SOFI)
-                       #define USB_INT_HSOFI                            UHIEN,  (1 << HSOFE)  , UHINT , (1 << HSOFI)
-                       #define USB_INT_RSTI                             UHIEN , (1 << RSTE)   , UHINT , (1 << RSTI)
-                       #define USB_INT_SRPI                             OTGIEN, (1 << SRPE)   , OTGINT, (1 << SRPI)
-                       #define USB_INT_RXSTPI                           UEIENX, (1 << RXSTPE) , UEINTX, (1 << RXSTPI)
+                       #define USB_INT_VBUS     USBCON, (1 << VBUSTE) , USBINT, (1 << VBUSTI)
+                       #define USB_INT_IDTI     USBCON, (1 << IDTE)   , USBINT, (1 << IDTI)
+                       #define USB_INT_WAKEUPI  UDIEN , (1 << WAKEUPE), UDINT , (1 << WAKEUPI)
+                       #define USB_INT_SUSPI    UDIEN , (1 << SUSPE)  , UDINT , (1 << SUSPI)
+                       #define USB_INT_EORSTI   UDIEN , (1 << EORSTE) , UDINT , (1 << EORSTI)
+                       #define USB_INT_DCONNI   UHIEN , (1 << DCONNE) , UHINT , (1 << DCONNI)
+                       #define USB_INT_DDISCI   UHIEN , (1 << DDISCE) , UHINT , (1 << DDISCI)
+                       #define USB_INT_BCERRI   OTGIEN, (1 << BCERRE) , OTGINT, (1 << BCERRI)
+                       #define USB_INT_VBERRI   OTGIEN, (1 << VBERRE) , OTGINT, (1 << VBERRI)
+                       #define USB_INT_SOFI     UDIEN,  (1 << SOFE)   , UDINT , (1 << SOFI)
+                       #define USB_INT_HSOFI    UHIEN,  (1 << HSOFE)  , UHINT , (1 << HSOFI)
+                       #define USB_INT_RSTI     UHIEN , (1 << RSTE)   , UHINT , (1 << RSTI)
+                       #define USB_INT_SRPI     OTGIEN, (1 << SRPE)   , OTGINT, (1 << SRPI)
+                       #define USB_INT_RXSTPI   UEIENX, (1 << RXSTPE) , UEINTX, (1 << RXSTPI)
 
                /* Includes: */
                        #include "../USBMode.h"
index 84ed43f..8de719d 100644 (file)
@@ -57,6 +57,8 @@
                \r
                #if (ARCH == ARCH_AVR8)\r
                        #include "AVR8/Device.h"\r
+               #elif (ARCH == ARCH_UC3B)\r
+                       #include "UC3B/Device.h"                \r
                #endif\r
 \r
        /* Preprocessor Checks: */\r
index 958d041..20754eb 100644 (file)
@@ -77,6 +77,8 @@
 \r
                #if (ARCH == ARCH_AVR8)\r
                        #include "AVR8/Endpoint.h"\r
+               #elif (ARCH == ARCH_UC3B)\r
+                       #include "UC3B/Endpoint.h"              \r
                #endif\r
 \r
        /* Preprocessor Checks: */\r
index 7e83102..32c27ce 100644 (file)
@@ -54,6 +54,8 @@
 \r
                #if (ARCH == ARCH_AVR8)\r
                        #include "AVR8/Host.h"\r
+               #elif (ARCH == ARCH_UC3B)\r
+                       #include "UC3B/Host.h"          \r
                #endif\r
 \r
        /* Preprocessor Checks: */\r
index 26b649b..f50d618 100644 (file)
@@ -55,6 +55,8 @@
 \r
                #if (ARCH == ARCH_AVR8)\r
                        #include "AVR8/OTG.h"\r
+               #elif (ARCH == ARCH_UC3B)\r
+                       #include "UC3B/OTG.h"           \r
                #endif\r
 \r
        /* Preprocessor Checks: */\r
index 6ab8fc2..2769aaf 100644 (file)
@@ -87,6 +87,8 @@
 \r
                #if (ARCH == ARCH_AVR8)\r
                        #include "AVR8/Pipe.h"\r
+               #elif (ARCH == ARCH_UC3B)\r
+                       #include "UC3B/Pipe.h"          \r
                #endif\r
 \r
        /* Preprocessor Checks: */\r
diff --git a/LUFA/Drivers/USB/Core/UC3B/Device.c b/LUFA/Drivers/USB/Core/UC3B/Device.c
new file mode 100644 (file)
index 0000000..ab24b06
--- /dev/null
@@ -0,0 +1,53 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2011.\r
+\r
+  dean [at] fourwalledcubicle [dot] com\r
+           www.lufa-lib.org\r
+*/\r
+\r
+/*\r
+  Copyright 2011  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, distribute, and sell this\r
+  software and its documentation for any purpose is hereby granted\r
+  without fee, provided that the above copyright notice appear in\r
+  all copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+#define  __INCLUDE_FROM_USB_DRIVER\r
+#include "../USBMode.h"\r
+\r
+#if defined(USB_CAN_BE_DEVICE)\r
+\r
+#include "Device.h"\r
+\r
+void USB_Device_SendRemoteWakeup(void)\r
+{\r
+       if (!(USB_Options & USB_OPT_MANUAL_PLL))\r
+       {\r
+               USB_PLL_On();\r
+               while (!(USB_PLL_IsReady()));\r
+       }\r
+\r
+       USB_CLK_Unfreeze();\r
+\r
+       AVR32_USBB.UDCON |= (1 << RMWKUP);\r
+       while (!(AVR32_USBB.UDCON & (1 << RMWKUP)));\r
+}\r
+\r
+#endif\r
+\r
diff --git a/LUFA/Drivers/USB/Core/UC3B/Device.h b/LUFA/Drivers/USB/Core/UC3B/Device.h
new file mode 100644 (file)
index 0000000..d68b6e8
--- /dev/null
@@ -0,0 +1,226 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2011.\r
+\r
+  dean [at] fourwalledcubicle [dot] com\r
+           www.lufa-lib.org\r
+*/\r
+\r
+/*\r
+  Copyright 2011  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, distribute, and sell this\r
+  software and its documentation for any purpose is hereby granted\r
+  without fee, provided that the above copyright notice appear in\r
+  all copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *  \brief USB Device definitions for the AVR32 UC3B microcontrollers.\r
+ *  \copydetails Group_Device_UC3B\r
+ *\r
+ *  \note This file should not be included directly. It is automatically included as needed by the USB driver\r
+ *        dispatch header located in LUFA/Drivers/USB/USB.h.\r
+ */\r
+\r
+/** \ingroup Group_Device\r
+ *  \defgroup Group_Device_UC3B Device Management (UC3B)\r
+ *  \brief USB Device definitions for the AVR32 UC3B microcontrollers.\r
+ *\r
+ *  Architecture specific USB Device definitions for the Atmel 32-bit UC3B AVR microcontrollers.\r
+ *\r
+ *  @{\r
+ */\r
+\r
+#ifndef __USBDEVICE_UC3B_H__\r
+#define __USBDEVICE_UC3B_H__\r
+\r
+       /* Includes: */\r
+               #include "../../../../Common/Common.h"\r
+               #include "../StdDescriptors.h"\r
+               #include "../USBInterrupt.h"\r
+               #include "../Endpoint.h"\r
+               \r
+       /* Preprocessor Checks: */\r
+               #if !defined(__INCLUDE_FROM_USB_DRIVER)\r
+                       #error Do not include this file directly. Include LUFA/Drivers/USB/USB.h instead.\r
+               #endif\r
+\r
+               #if (defined(USE_RAM_DESCRIPTORS) && defined(USE_EEPROM_DESCRIPTORS))\r
+                       #error USE_RAM_DESCRIPTORS and USE_EEPROM_DESCRIPTORS are mutually exclusive.\r
+               #endif\r
+\r
+       /* Public Interface - May be used in end-application: */\r
+               /* Macros: */\r
+                       /** \name USB Device Mode Option Masks */\r
+                       //@{\r
+                       #if defined(USB_SERIES_4_AVR) || defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR) || defined(__DOXYGEN__)\r
+                               /** Mask for the Options parameter of the \ref USB_Init() function. This indicates that the\r
+                                *  USB interface should be initialized in low speed (1.5Mb/s) mode.\r
+                                *\r
+                                *  \note Low Speed mode is not available on all USB AVR models.\r
+                                *        \n\r
+                                *\r
+                                *  \note Restrictions apply on the number, size and type of endpoints which can be used\r
+                                *        when running in low speed mode - refer to the USB 2.0 specification.\r
+                                */\r
+                               #define USB_DEVICE_OPT_LOWSPEED            (1 << 0)\r
+                       #endif\r
+\r
+                       /** Mask for the Options parameter of the \ref USB_Init() function. This indicates that the\r
+                        *  USB interface should be initialized in full speed (12Mb/s) mode.\r
+                        */\r
+                       #define USB_DEVICE_OPT_FULLSPEED               (0 << 0)\r
+                       //@}\r
+                       \r
+                       #if (!defined(NO_INTERNAL_SERIAL) && \\r
+                            (defined(__AVR_AT90USB647__) || defined(__AVR_AT90USB1287__) || \\r
+                             defined(__AVR_ATmega32U6__) || defined(__AVR_AT90USB646__)  || defined(__AVR_AT90USB1286__) ||  \\r
+                             defined(__AVR_ATmega32U2__) || defined(__AVR_ATmega16U2__)  || defined(__AVR_ATmega8U2__)))\r
+                               /** String descriptor index for the device's unique serial number string descriptor within the device.\r
+                                *  This unique serial number is used by the host to associate resources to the device (such as drivers or COM port\r
+                                *  number allocations) to a device regardless of the port it is plugged in to on the host. Some USB AVRs contain\r
+                                *  a unique serial number internally, and setting the device descriptors serial number string index to this value\r
+                                *  will cause it to use the internal serial number.\r
+                                *\r
+                                *  On unsupported devices, this will evaluate to NO_DESCRIPTOR and so will force the host to create a pseudo-serial\r
+                                *  number for the device.\r
+                                */\r
+                               #define USE_INTERNAL_SERIAL           0xDC\r
+                       #else\r
+                               #define USE_INTERNAL_SERIAL           NO_DESCRIPTOR\r
+                       #endif                  \r
+                       \r
+               /* Function Prototypes: */\r
+                       /** Sends a Remote Wakeup request to the host. This signals to the host that the device should\r
+                        *  be taken out of suspended mode, and communications should resume.\r
+                        *\r
+                        *  Typically, this is implemented so that HID devices (mice, keyboards, etc.) can wake up the\r
+                        *  host computer when the host has suspended all USB devices to enter a low power state.\r
+                        *\r
+                        *  \note This macro should only be used if the device has indicated to the host that it\r
+                        *        supports the Remote Wakeup feature in the device descriptors, and should only be\r
+                        *        issued if the host is currently allowing remote wakeup events from the device (i.e.,\r
+                        *        the \ref USB_RemoteWakeupEnabled flag is set). When the \c NO_DEVICE_REMOTE_WAKEUP compile\r
+                        *        time option is used, this macro is unavailable.\r
+                        *        \n\n\r
+                        *\r
+                        *  \note The USB clock must be running for this function to operate. If the stack is initialized with\r
+                        *        the \ref USB_OPT_MANUAL_PLL option enabled, the user must ensure that the PLL is running\r
+                        *        before attempting to call this function.\r
+                        *\r
+                        *  \see \ref Group_StdDescriptors for more information on the RMWAKEUP feature and device descriptors.\r
+                        */\r
+                       void USB_Device_SendRemoteWakeup(void);\r
+\r
+               /* Type Defines: */\r
+                       enum USB_Device_States_t\r
+                       {\r
+                               DEVICE_STATE_Unattached                   = 0, /**< Internally implemented by the library. This state indicates\r
+                                                                               *   that the device is not currently connected to a host.\r
+                                                                               */\r
+                               DEVICE_STATE_Powered                      = 1, /**< Internally implemented by the library. This state indicates\r
+                                                                               *   that the device is connected to a host, but enumeration has not\r
+                                                                               *   yet begun.\r
+                                                                               */\r
+                               DEVICE_STATE_Default                      = 2, /**< Internally implemented by the library. This state indicates\r
+                                                                               *   that the device's USB bus has been reset by the host and it is\r
+                                                                               *   now waiting for the host to begin the enumeration process.\r
+                                                                               */\r
+                               DEVICE_STATE_Addressed                    = 3, /**< Internally implemented by the library. This state indicates\r
+                                                                               *   that the device has been addressed by the USB Host, but is not\r
+                                                                               *   yet configured.\r
+                                                                               */\r
+                               DEVICE_STATE_Configured                   = 4, /**< May be implemented by the user project. This state indicates\r
+                                                                               *   that the device has been enumerated by the host and is ready\r
+                                                                               *   for USB communications to begin.\r
+                                                                               */\r
+                               DEVICE_STATE_Suspended                    = 5, /**< May be implemented by the user project. This state indicates\r
+                                                                               *   that the USB bus has been suspended by the host, and the device\r
+                                                                               *   should power down to a minimal power level until the bus is\r
+                                                                               *   resumed.\r
+                                                                               */\r
+                       };\r
+\r
+               /* Inline Functions: */\r
+                       /** Returns the current USB frame number, when in device mode. Every millisecond the USB bus is active (i.e. enumerated to a host)\r
+                        *  the frame number is incremented by one.\r
+                        */\r
+                       static inline uint16_t USB_Device_GetFrameNumber(void)\r
+                       {\r
+                               return AVR32_USBB.UDFNUM.fnum;\r
+                       }\r
+\r
+                       #if !defined(NO_SOF_EVENTS)\r
+                               /** Enables the device mode Start Of Frame events. When enabled, this causes the\r
+                                *  \ref EVENT_USB_Device_StartOfFrame() event to fire once per millisecond, synchronized to the USB bus,\r
+                                *  at the start of each USB frame when enumerated in device mode.\r
+                                *\r
+                                *  \note Not available when the \c NO_SOF_EVENTS compile time token is defined.\r
+                                */\r
+                               static inline void USB_Device_EnableSOFEvents(void) ATTR_ALWAYS_INLINE;\r
+                               static inline void USB_Device_EnableSOFEvents(void)\r
+                               {\r
+                                       USB_INT_Enable(USB_INT_SOFI);\r
+                               }\r
+\r
+                               /** Disables the device mode Start Of Frame events. When disabled, this stops the firing of the\r
+                                *  \ref EVENT_USB_Device_StartOfFrame() event when enumerated in device mode.\r
+                                *\r
+                                *  \note Not available when the \c NO_SOF_EVENTS compile time token is defined.\r
+                                */\r
+                               static inline void USB_Device_DisableSOFEvents(void) ATTR_ALWAYS_INLINE;\r
+                               static inline void USB_Device_DisableSOFEvents(void)\r
+                               {\r
+                                       USB_INT_Disable(USB_INT_SOFI);\r
+                               }\r
+                       #endif\r
+\r
+       /* Private Interface - For use in library only: */\r
+       #if !defined(__DOXYGEN__)\r
+               /* Inline Functions: */\r
+                       #if (defined(USB_SERIES_4_AVR) || defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR))\r
+                       static inline void USB_Device_SetLowSpeed(void) ATTR_ALWAYS_INLINE;\r
+                       static inline void USB_Device_SetLowSpeed(void)\r
+                       {\r
+                               AVR32_USBB.UDCON.ls = true;\r
+                       }\r
+\r
+                       static inline void USB_Device_SetFullSpeed(void) ATTR_ALWAYS_INLINE;\r
+                       static inline void USB_Device_SetFullSpeed(void)\r
+                       {\r
+                               AVR32_USBB.UDCON.ls = false;\r
+                       }\r
+                       #endif\r
+\r
+                       static inline void USB_Device_SetDeviceAddress(const uint8_t Address) ATTR_ALWAYS_INLINE;\r
+                       static inline void USB_Device_SetDeviceAddress(const uint8_t Address)\r
+                       {\r
+                               AVR32_USBB.UDCON       = (AVR32_USBB_UDCON & ~AVR32_USBB_UDADDR) | Address;\r
+                               AVR32_USBB.UDCON.adden = true;\r
+                       }\r
+\r
+                       static inline bool USB_Device_IsAddressSet(void) ATTR_ALWAYS_INLINE;\r
+                       static inline bool USB_Device_IsAddressSet(void)\r
+                       {\r
+                               return AVR32_USBB.UDCON.adden;\r
+                       }\r
+       #endif\r
+\r
+#endif\r
+\r
+/** @} */\r
+\r
diff --git a/LUFA/Drivers/USB/Core/UC3B/Endpoint.c b/LUFA/Drivers/USB/Core/UC3B/Endpoint.c
new file mode 100644 (file)
index 0000000..a479b43
--- /dev/null
@@ -0,0 +1,178 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2011.\r
+\r
+  dean [at] fourwalledcubicle [dot] com\r
+           www.lufa-lib.org\r
+*/\r
+\r
+/*\r
+  Copyright 2011  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, distribute, and sell this\r
+  software and its documentation for any purpose is hereby granted\r
+  without fee, provided that the above copyright notice appear in\r
+  all copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+#define  __INCLUDE_FROM_USB_DRIVER\r
+#include "../USBMode.h"\r
+\r
+#if defined(USB_CAN_BE_DEVICE)\r
+\r
+#include "Endpoint.h"\r
+\r
+#if !defined(FIXED_CONTROL_ENDPOINT_SIZE)\r
+uint8_t USB_ControlEndpointSize = ENDPOINT_CONTROLEP_DEFAULT_SIZE;\r
+#endif\r
+\r
+uint8_t USB_SelectedEndpoint = ENDPOINT_CONTROLEP;\r
+\r
+bool Endpoint_ConfigureEndpoint_Prv(const uint8_t Number,\r
+                                    const uint32_t UECFGXData)\r
+{\r
+#if defined(CONTROL_ONLY_DEVICE) || defined(ORDERED_EP_CONFIG)\r
+       Endpoint_SelectEndpoint(Number);\r
+       Endpoint_EnableEndpoint();\r
+\r
+       *((uint32_t*)AVR32_USBB_UECFG0)[USB_SelectedEndpoint] = 0;\r
+       *((uint32_t*)AVR32_USBB_UECFG0)[USB_SelectedEndpoint] = UECFGXData;\r
+\r
+       return Endpoint_IsConfigured();\r
+#else  \r
+       for (uint8_t EPNum = Number; EPNum < ENDPOINT_TOTAL_ENDPOINTS; EPNum++)\r
+       {\r
+               uint32_t UECFGXTemp;\r
+               uint32_t UEIENXTemp;\r
+\r
+               Endpoint_SelectEndpoint(EPNum);\r
+               \r
+               if (EPNum == Number)\r
+               {\r
+                       UECFGXTemp = UECFGXData;\r
+                       UEIENXTemp = 0;\r
+               }\r
+               else\r
+               {\r
+                       UECFGXTemp = *((uint32_t*)AVR32_USBB_UECFG0)[EPNum];\r
+                       UEIENXTemp = *((uint32_t*)AVR32_USBB_UEINT0)[EPNum];\r
+               }\r
+\r
+               if (!(UECFGXTemp & AVR32_USBB_ALLOC))\r
+                 continue;\r
+\r
+               Endpoint_DisableEndpoint();\r
+               *((uint32_t*)AVR32_USBB_UECFG0)[USB_SelectedEndpoint] &= ~AVR32_USBB_ALLOC;\r
+\r
+               Endpoint_EnableEndpoint();\r
+               *((uint32_t*)AVR32_USBB_UECFG0)[EPNum] = UECFGXTemp;\r
+               *((uint32_t*)AVR32_USBB_UEINT0)[EPNum] = UEINTXTemp;\r
+                       \r
+               if (!(Endpoint_IsConfigured()))\r
+                 return false;                 \r
+       }\r
+       \r
+       Endpoint_SelectEndpoint(Number);\r
+       return true;\r
+#endif\r
+}\r
+\r
+void Endpoint_ClearEndpoints(void)\r
+{\r
+       UEINT = 0;\r
+\r
+       for (uint8_t EPNum = 0; EPNum < ENDPOINT_TOTAL_ENDPOINTS; EPNum++)\r
+       {\r
+               Endpoint_SelectEndpoint(EPNum);\r
+               UEIENX  = 0;\r
+               UEINTX  = 0;\r
+               UECFG1X = 0;\r
+               Endpoint_DisableEndpoint();\r
+       }\r
+}\r
+\r
+void Endpoint_ClearStatusStage(void)\r
+{\r
+       if (USB_ControlRequest.bmRequestType & REQDIR_DEVICETOHOST)\r
+       {\r
+               while (!(Endpoint_IsOUTReceived()))\r
+               {\r
+                       if (USB_DeviceState == DEVICE_STATE_Unattached)\r
+                         return;\r
+               }\r
+\r
+               Endpoint_ClearOUT();\r
+       }\r
+       else\r
+       {\r
+               while (!(Endpoint_IsINReady()))\r
+               {\r
+                       if (USB_DeviceState == DEVICE_STATE_Unattached)\r
+                         return;\r
+               }\r
+\r
+               Endpoint_ClearIN();\r
+       }\r
+}\r
+\r
+#if !defined(CONTROL_ONLY_DEVICE)\r
+uint8_t Endpoint_WaitUntilReady(void)\r
+{\r
+       #if (USB_STREAM_TIMEOUT_MS < 0xFF)\r
+       uint8_t  TimeoutMSRem = USB_STREAM_TIMEOUT_MS;\r
+       #else\r
+       uint16_t TimeoutMSRem = USB_STREAM_TIMEOUT_MS;\r
+       #endif\r
+\r
+       uint16_t PreviousFrameNumber = USB_Device_GetFrameNumber();\r
+\r
+       for (;;)\r
+       {\r
+               if (Endpoint_GetEndpointDirection() == ENDPOINT_DIR_IN)\r
+               {\r
+                       if (Endpoint_IsINReady())\r
+                         return ENDPOINT_READYWAIT_NoError;\r
+               }\r
+               else\r
+               {\r
+                       if (Endpoint_IsOUTReceived())\r
+                         return ENDPOINT_READYWAIT_NoError;\r
+               }\r
+               \r
+               uint8_t USB_DeviceState_LCL = USB_DeviceState;\r
+\r
+               if (USB_DeviceState_LCL == DEVICE_STATE_Unattached)\r
+                 return ENDPOINT_READYWAIT_DeviceDisconnected;\r
+               else if (USB_DeviceState_LCL == DEVICE_STATE_Suspended)\r
+                 return ENDPOINT_READYWAIT_BusSuspended;\r
+               else if (Endpoint_IsStalled())\r
+                 return ENDPOINT_READYWAIT_EndpointStalled;\r
+\r
+               uint16_t CurrentFrameNumber = USB_Device_GetFrameNumber();\r
+\r
+               if (CurrentFrameNumber != PreviousFrameNumber)\r
+               {\r
+                       PreviousFrameNumber = CurrentFrameNumber;\r
+\r
+                       if (!(TimeoutMSRem--))\r
+                         return ENDPOINT_READYWAIT_Timeout;\r
+               }\r
+       }\r
+}\r
+#endif\r
+\r
+#endif\r
+\r
diff --git a/LUFA/Drivers/USB/Core/UC3B/Endpoint.h b/LUFA/Drivers/USB/Core/UC3B/Endpoint.h
new file mode 100644 (file)
index 0000000..e0fee63
--- /dev/null
@@ -0,0 +1,889 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2011.\r
+\r
+  dean [at] fourwalledcubicle [dot] com\r
+           www.lufa-lib.org\r
+*/\r
+\r
+/*\r
+  Copyright 2011  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, distribute, and sell this\r
+  software and its documentation for any purpose is hereby granted\r
+  without fee, provided that the above copyright notice appear in\r
+  all copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *  \brief USB Endpoint definitions for the UC3B microcontrollers.\r
+ *  \copydetails Group_EndpointManagement_UC3B\r
+ *\r
+ *  \note This file should not be included directly. It is automatically included as needed by the USB driver\r
+ *        dispatch header located in LUFA/Drivers/USB/USB.h.\r
+ */\r
+\r
+/** \ingroup Group_EndpointRW\r
+ *  \defgroup Group_EndpointRW_UC3B Endpoint Data Reading and Writing (UC3B)\r
+ *  \brief Endpoint data read/write definitions for the Atmel AVR32 UC3B architecture.\r
+ *\r
+ *  Functions, macros, variables, enums and types related to data reading and writing from and to endpoints.\r
+ */\r
+\r
+/** \ingroup Group_EndpointPrimitiveRW\r
+ *  \defgroup Group_EndpointPrimitiveRW_UC3B Read/Write of Primitive Data Types (UC3B)\r
+ *  \brief Endpoint primative read/write definitions for the Atmel UC3B architecture.\r
+ *\r
+ *  Functions, macros, variables, enums and types related to data reading and writing of primitive data types\r
+ *  from and to endpoints.\r
+ */\r
+\r
+/** \ingroup Group_EndpointPacketManagement\r
+ *  \defgroup Group_EndpointPacketManagement_UC3B Endpoint Packet Management (UC3B)\r
+ *  \brief Endpoint packet management definitions for the Atmel UC3B architecture.\r
+ *\r
+ *  Functions, macros, variables, enums and types related to packet management of endpoints.\r
+ */\r
+\r
+/** \ingroup Group_EndpointManagement\r
+ *  \defgroup Group_EndpointManagement_UC3B Endpoint Management (UC3B)\r
+ *  \brief Endpoint management definitions for the Atmel UC3B architecture.\r
+ *\r
+ *  Functions, macros and enums related to endpoint management when in USB Device mode. This\r
+ *  module contains the endpoint management macros, as well as endpoint interrupt and data\r
+ *  send/receive functions for various data types.\r
+ *\r
+ *  @{\r
+ */\r
+\r
+#ifndef __ENDPOINT_UC3B_H__\r
+#define __ENDPOINT_UC3B_H__\r
+\r
+       /* Includes: */\r
+               #include "../../../../Common/Common.h"\r
+               #include "../USBTask.h"\r
+               #include "../USBInterrupt.h"\r
+\r
+       /* Enable C linkage for C++ Compilers: */\r
+               #if defined(__cplusplus)\r
+                       extern "C" {\r
+               #endif\r
+\r
+       /* Preprocessor Checks: */\r
+               #if !defined(__INCLUDE_FROM_USB_DRIVER)\r
+                       #error Do not include this file directly. Include LUFA/Drivers/USB/USB.h instead.\r
+               #endif\r
+\r
+       /* Private Interface - For use in library only: */\r
+       #if !defined(__DOXYGEN__)\r
+               /* Macros: */\r
+                       #define _ENDPOINT_GET_MAXSIZE(EPIndex)         _ENDPOINT_GET_MAXSIZE2(ENDPOINT_DETAILS_EP ## EPIndex)\r
+                       #define _ENDPOINT_GET_MAXSIZE2(EPDetails)      _ENDPOINT_GET_MAXSIZE3(EPDetails)\r
+                       #define _ENDPOINT_GET_MAXSIZE3(MaxSize, Banks) (MaxSize)\r
+\r
+                       #define _ENDPOINT_GET_BANKS(EPIndex)           _ENDPOINT_GET_BANKS2(ENDPOINT_DETAILS_EP ## EPIndex)\r
+                       #define _ENDPOINT_GET_BANKS2(EPDetails)        _ENDPOINT_GET_BANKS3(EPDetails)\r
+                       #define _ENDPOINT_GET_BANKS3(MaxSize, Banks)   (Banks)\r
+\r
+                       #if defined(USB_SERIES_4_AVR) || defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR)\r
+                               #define ENDPOINT_DETAILS_MAXEP             7\r
+\r
+                               #define ENDPOINT_DETAILS_EP0               64,  2\r
+                               #define ENDPOINT_DETAILS_EP1               256, 2\r
+                               #define ENDPOINT_DETAILS_EP2               64,  2\r
+                               #define ENDPOINT_DETAILS_EP3               64,  2\r
+                               #define ENDPOINT_DETAILS_EP4               64,  2\r
+                               #define ENDPOINT_DETAILS_EP5               64,  2\r
+                               #define ENDPOINT_DETAILS_EP6               64,  2\r
+                       #else\r
+                               #define ENDPOINT_DETAILS_MAXEP             5\r
+\r
+                               #define ENDPOINT_DETAILS_EP0               64,  2\r
+                               #define ENDPOINT_DETAILS_EP1               64,  1\r
+                               #define ENDPOINT_DETAILS_EP2               64,  1\r
+                               #define ENDPOINT_DETAILS_EP3               64,  2\r
+                               #define ENDPOINT_DETAILS_EP4               64,  2\r
+                       #endif\r
+\r
+               /* Inline Functions: */\r
+                       static inline uint8_t Endpoint_BytesToEPSizeMask(const uint16_t Bytes) ATTR_WARN_UNUSED_RESULT ATTR_CONST\r
+                                                                                              ATTR_ALWAYS_INLINE;\r
+                       static inline uint8_t Endpoint_BytesToEPSizeMask(const uint16_t Bytes)\r
+                       {\r
+                               uint8_t  MaskVal    = 0;\r
+                               uint16_t CheckBytes = 8;\r
+\r
+                               while (CheckBytes < Bytes)\r
+                               {\r
+                                       MaskVal++;\r
+                                       CheckBytes <<= 1;\r
+                               }\r
+\r
+                               return (MaskVal << AVR32_USBB_EPSIZE_OFFSET);\r
+                       }\r
+\r
+               /* Function Prototypes: */\r
+                       void Endpoint_ClearEndpoints(void);\r
+                       bool Endpoint_ConfigureEndpoint_Prv(const uint8_t Number,\r
+                                                           const uint32_t UECFGXData);\r
+               \r
+               /* External Variables: */\r
+                       extern uint8_t USB_SelectedEndpoint;\r
+       #endif\r
+\r
+       /* Public Interface - May be used in end-application: */\r
+               /* Macros: */\r
+                       /** \name Endpoint Direction Masks */\r
+                       //@{\r
+                       /** Endpoint data direction mask for \ref Endpoint_ConfigureEndpoint(). This indicates that the endpoint\r
+                        *  should be initialized in the OUT direction - i.e. data flows from host to device.\r
+                        */\r
+                       #define ENDPOINT_DIR_OUT                        (0 << AVR32_USBB_UECFG0_EPDIR_OFFSET)\r
+\r
+                       /** Endpoint data direction mask for \ref Endpoint_ConfigureEndpoint(). This indicates that the endpoint\r
+                        *  should be initialized in the IN direction - i.e. data flows from device to host.\r
+                        */\r
+                       #define ENDPOINT_DIR_IN                         (1 << AVR32_USBB_UECFG0_EPDIR_OFFSET)\r
+                       //@}\r
+                       \r
+                       /** \name Endpoint Bank Mode Masks */\r
+                       //@{\r
+                       /** Mask for the bank mode selection for the \ref Endpoint_ConfigureEndpoint() macro. This indicates\r
+                        *  that the endpoint should have one single bank, which requires less USB FIFO memory but results\r
+                        *  in slower transfers as only one USB device (the AVR or the host) can access the endpoint's\r
+                        *  bank at the one time.\r
+                        */\r
+                       #define ENDPOINT_BANK_SINGLE                    (0 << AVR32_USBB_UECFG0_EPBK0_OFFSET)\r
+\r
+                       /** Mask for the bank mode selection for the \ref Endpoint_ConfigureEndpoint() macro. This indicates\r
+                        *  that the endpoint should have two banks, which requires more USB FIFO memory but results\r
+                        *  in faster transfers as one USB device (the AVR or the host) can access one bank while the other\r
+                        *  accesses the second bank.\r
+                        */\r
+                       #define ENDPOINT_BANK_DOUBLE                    (1 << AVR32_USBB_UECFG0_EPBK0_OFFSET)\r
+\r
+                       /** Mask for the bank mode selection for the \ref Endpoint_ConfigureEndpoint() macro. This indicates\r
+                        *  that the endpoint should have three banks, which requires more USB FIFO memory but results\r
+                        *  in faster transfers as one USB device (the AVR or the host) can access one bank while the other\r
+                        *  accesses the remaining banks.\r
+                        */\r
+                       #define ENDPOINT_BANK_TRIPLE                    (2 << AVR32_USBB_UECFG0_EPBK0_OFFSET)\r
+                       //@}\r
+                       \r
+                       /** Endpoint address for the default control endpoint, which always resides in address 0. This is\r
+                        *  defined for convenience to give more readable code when used with the endpoint macros.\r
+                        */\r
+                       #define ENDPOINT_CONTROLEP                      0\r
+\r
+                       #if (!defined(FIXED_CONTROL_ENDPOINT_SIZE) || defined(__DOXYGEN__))\r
+                               /** Default size of the default control endpoint's bank, until altered by the control endpoint bank size\r
+                                *  value in the device descriptor. Not available if the \c FIXED_CONTROL_ENDPOINT_SIZE token is defined.\r
+                                */\r
+                               #define ENDPOINT_CONTROLEP_DEFAULT_SIZE     8\r
+                       #endif\r
+\r
+                       /** Endpoint number mask, for masking against endpoint addresses to retrieve the endpoint's\r
+                        *  numerical address in the device.\r
+                        */\r
+                       #define ENDPOINT_EPNUM_MASK                     0x07\r
+\r
+                       /** Endpoint direction mask, for masking against endpoint addresses to retrieve the endpoint's\r
+                        *  direction for comparing with the \c ENDPOINT_DESCRIPTOR_DIR_* masks.\r
+                        */\r
+                       #define ENDPOINT_EPDIR_MASK                     0x80\r
+\r
+                       /** Retrives the maximum bank size in bytes of a given endpoint.\r
+                        *\r
+                        *  \note This macro will only work correctly on endpoint indexes that are compile-time constants\r
+                        *        defined by the preprocessor.\r
+                        *\r
+                        *  \param[in] EPIndex  Endpoint number, a value between 0 and (\ref ENDPOINT_TOTAL_ENDPOINTS - 1)\r
+                        */\r
+                       #define ENDPOINT_MAX_SIZE(EPIndex)              _ENDPOINT_GET_MAXSIZE(EPIndex)\r
+\r
+                       /** Retrieves the total number of banks supported by the given endpoint.\r
+                        *\r
+                        *  \note This macro will only work correctly on endpoint indexes that are compile-time constants\r
+                        *        defined by the preprocessor.\r
+                        *\r
+                        *  \param[in] EPIndex  Endpoint number, a value between 0 and (\ref ENDPOINT_TOTAL_ENDPOINTS - 1)\r
+                        */\r
+                       #define ENDPOINT_BANKS_SUPPORTED(EPIndex)       _ENDPOINT_GET_BANKS(EPIndex)\r
+\r
+                       #if !defined(CONTROL_ONLY_DEVICE) || defined(__DOXYGEN__)\r
+                               /** Total number of endpoints (including the default control endpoint at address 0) which may\r
+                                *  be used in the device. Different USB AVR models support different amounts of endpoints,\r
+                                *  this value reflects the maximum number of endpoints for the currently selected AVR model.\r
+                                */\r
+                               #define ENDPOINT_TOTAL_ENDPOINTS            ENDPOINT_DETAILS_MAXEP\r
+                       #else\r
+                               #define ENDPOINT_TOTAL_ENDPOINTS            1\r
+                       #endif\r
+\r
+               /* Enums: */\r
+                       /** Enum for the possible error return codes of the \ref Endpoint_WaitUntilReady() function.\r
+                        *\r
+                        *  \ingroup Group_EndpointRW_AVR8\r
+                        */\r
+                       enum Endpoint_WaitUntilReady_ErrorCodes_t\r
+                       {\r
+                               ENDPOINT_READYWAIT_NoError                 = 0, /**< Endpoint is ready for next packet, no error. */\r
+                               ENDPOINT_READYWAIT_EndpointStalled         = 1, /**< The endpoint was stalled during the stream\r
+                                                                                *   transfer by the host or device.\r
+                                                                                */\r
+                               ENDPOINT_READYWAIT_DeviceDisconnected      = 2, /**< Device was disconnected from the host while\r
+                                                                                *   waiting for the endpoint to become ready.\r
+                                                                                */\r
+                               ENDPOINT_READYWAIT_BusSuspended            = 3, /**< The USB bus has been suspended by the host and\r
+                                                                                *   no USB endpoint traffic can occur until the bus\r
+                                                                                *   has resumed.\r
+                                                                                */\r
+                               ENDPOINT_READYWAIT_Timeout                 = 4, /**< The host failed to accept or send the next packet\r
+                                                                                *   within the software timeout period set by the\r
+                                                                                *   \ref USB_STREAM_TIMEOUT_MS macro.\r
+                                                                                */\r
+                       };\r
+\r
+               /* Inline Functions: */\r
+                       /** Configures the specified endpoint number with the given endpoint type, direction, bank size\r
+                        *  and banking mode. Once configured, the endpoint may be read from or written to, depending\r
+                        *  on its direction.\r
+                        *\r
+                        *  \param[in] Number     Endpoint number to configure. This must be more than 0 and less than\r
+                        *                        \ref ENDPOINT_TOTAL_ENDPOINTS.\r
+                        *\r
+                        *  \param[in] Type       Type of endpoint to configure, a \c EP_TYPE_* mask. Not all endpoint types\r
+                        *                        are available on Low Speed USB devices - refer to the USB 2.0 specification.\r
+                        *\r
+                        *  \param[in] Direction  Endpoint data direction, either \ref ENDPOINT_DIR_OUT or \ref ENDPOINT_DIR_IN.\r
+                        *                        All endpoints (except Control type) are unidirectional - data may only be read\r
+                        *                        from or written to the endpoint bank based on its direction, not both.\r
+                        *\r
+                        *  \param[in] Size       Size of the endpoint's bank, where packets are stored before they are transmitted\r
+                        *                        to the USB host, or after they have been received from the USB host (depending on\r
+                        *                        the endpoint's data direction). The bank size must indicate the maximum packet size\r
+                        *                        that the endpoint can handle.\r
+                        *\r
+                        *  \param[in] Banks      Number of banks to use for the endpoint being configured, an \c ENDPOINT_BANK_* mask.\r
+                        *                        More banks uses more USB DPRAM, but offers better performance. Isochronous type\r
+                        *                        endpoints <b>must</b> have at least two banks.\r
+                        *\r
+                        *  \note When the \c ORDERED_EP_CONFIG compile time option is used, Endpoints <b>must</b> be configured in\r
+                        *        ascending order, or bank corruption will occur.\r
+                        *        \n\n\r
+                        *\r
+                        *  \note Certain models of USB AVR's endpoints may have different maximum packet sizes based on the endpoint's\r
+                        *        index - refer to the chosen USB AVR's datasheet to determine the maximum bank size for each endpoint.\r
+                        *        \n\n\r
+                        *\r
+                        *  \note The default control endpoint should not be manually configured by the user application, as\r
+                        *        it is automatically configured by the library internally.\r
+                        *        \n\n\r
+                        *\r
+                        *  \note This routine will automatically select the specified endpoint upon success. Upon failure, the endpoint\r
+                        *        which failed to reconfigure correctly will be selected.\r
+                        *\r
+                        *  \return Boolean \c true if the configuration succeeded, \c false otherwise.\r
+                        */\r
+                       static inline bool Endpoint_ConfigureEndpoint(const uint8_t Number,\r
+                                                                     const uint8_t Type,\r
+                                                                     const uint8_t Direction,\r
+                                                                     const uint16_t Size,\r
+                                                                     const uint8_t Banks) ATTR_ALWAYS_INLINE;\r
+                       static inline bool Endpoint_ConfigureEndpoint(const uint8_t Number,\r
+                                                                     const uint8_t Type,\r
+                                                                     const uint8_t Direction,\r
+                                                                     const uint16_t Size,\r
+                                                                     const uint8_t Banks)\r
+                       {\r
+                               return Endpoint_ConfigureEndpoint_Prv(Number, ((Type << AVR32_USBB_EPTYPE_OFFSET) | AVR32_USBB_ALLOC |\r
+                                                                              (Direction << AVR32_USBB_EPDIR_OFFSET) |\r
+                                                                              (Banks     << AVR32_USBB_EPBK_OFFSET) |\r
+                                                                              Endpoint_BytesToEPSizeMask(Size)));\r
+                       }\r
+\r
+                       /** Indicates the number of bytes currently stored in the current endpoint's selected bank.\r
+                        *\r
+                        *  \note The return width of this function may differ, depending on the maximum endpoint bank size\r
+                        *        of the selected AVR model.\r
+                        *\r
+                        *  \ingroup Group_EndpointRW_AVR8\r
+                        *\r
+                        *  \return Total number of bytes in the currently selected Endpoint's FIFO buffer.\r
+                        */\r
+                       static inline uint16_t Endpoint_BytesInEndpoint(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;\r
+                       static inline uint16_t Endpoint_BytesInEndpoint(void)\r
+                       {\r
+                               return ((avr32_usbb_uesta0_t*)AVR32_USBB_UESTA0)[USB_SelectedEndpoint].byct;\r
+                       }\r
+\r
+                       /** Get the endpoint address of the currently selected endpoint. This is typically used to save\r
+                        *  the currently selected endpoint number so that it can be restored after another endpoint has\r
+                        *  been manipulated.\r
+                        *\r
+                        *  \return Index of the currently selected endpoint.\r
+                        */\r
+                       static inline uint8_t Endpoint_GetCurrentEndpoint(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;\r
+                       static inline uint8_t Endpoint_GetCurrentEndpoint(void)\r
+                       {\r
+                               return USB_SelectedEndpoint;\r
+                       }\r
+\r
+                       /** Selects the given endpoint number. If the address from the device descriptors is used, the\r
+                        *  value should be masked with the \ref ENDPOINT_EPNUM_MASK constant to extract only the endpoint\r
+                        *  number (and discarding the endpoint direction bit).\r
+                        *\r
+                        *  Any endpoint operations which do not require the endpoint number to be indicated will operate on\r
+                        *  the currently selected endpoint.\r
+                        *\r
+                        *  \param[in] EndpointNumber Endpoint number to select.\r
+                        */\r
+                       static inline void Endpoint_SelectEndpoint(const uint8_t EndpointNumber) ATTR_ALWAYS_INLINE;\r
+                       static inline void Endpoint_SelectEndpoint(const uint8_t EndpointNumber)\r
+                       {\r
+                               USB_SelectedEndpoint = EndpointNumber;\r
+                       }\r
+\r
+                       /** Resets the endpoint bank FIFO. This clears all the endpoint banks and resets the USB controller's\r
+                        *  data In and Out pointers to the bank's contents.\r
+                        *\r
+                        *  \param[in] EndpointNumber Endpoint number whose FIFO buffers are to be reset.\r
+                        */\r
+                       static inline void Endpoint_ResetFIFO(const uint8_t EndpointNumber) ATTR_ALWAYS_INLINE;\r
+                       static inline void Endpoint_ResetFIFO(const uint8_t EndpointNumber)\r
+                       {\r
+                               AVR32_USBB.uerst |=  (AVR32_USBB_EPRST0_OFFSET << EndpointNumber);\r
+                               AVR32_USBB.uerst &= ~(AVR32_USBB_EPRST0_OFFSET << EndpointNumber);\r
+                       }\r
+\r
+                       /** Enables the currently selected endpoint so that data can be sent and received through it to\r
+                        *  and from a host.\r
+                        *\r
+                        *  \note Endpoints must first be configured properly via \ref Endpoint_ConfigureEndpoint().\r
+                        */\r
+                       static inline void Endpoint_EnableEndpoint(void) ATTR_ALWAYS_INLINE;\r
+                       static inline void Endpoint_EnableEndpoint(void)\r
+                       {\r
+                               AVR32_USBB.uerst |=  (AVR32_USBB_EPEN0 << USB_SelectedEndpoint);\r
+                       }\r
+\r
+                       /** Disables the currently selected endpoint so that data cannot be sent and received through it\r
+                        *  to and from a host.\r
+                        */\r
+                       static inline void Endpoint_DisableEndpoint(void) ATTR_ALWAYS_INLINE;\r
+                       static inline void Endpoint_DisableEndpoint(void)\r
+                       {\r
+                               AVR32_USBB.uerst &= ~(AVR32_USBB_EPEN0_OFFSET << USB_SelectedEndpoint);\r
+                       }\r
+\r
+                       /** Determines if the currently selected endpoint is enabled, but not necessarily configured.\r
+                        *\r
+                        * \return Boolean \c true if the currently selected endpoint is enabled, \c false otherwise.\r
+                        */\r
+                       static inline bool Endpoint_IsEnabled(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;\r
+                       static inline bool Endpoint_IsEnabled(void)\r
+                       {\r
+                               return ((AVR32_USBB.uerst & (AVR32_USBB_EPEN0_OFFSET << USB_SelectedEndpoint)) ? true : false);\r
+                       }\r
+\r
+                       /** Retrieves the number of busy banks in the currently selected endpoint, which have been queued for\r
+                        *  transmission via the \ref Endpoint_ClearIN() command, or are awaiting acknowledgement via the\r
+                        *  \ref Endpoint_ClearOUT() command.\r
+                        *\r
+                        *  \ingroup Group_EndpointPacketManagement_AVR8\r
+                        *\r
+                        *  \return Total number of busy banks in the selected endpoint.\r
+                        */\r
+                       static inline uint8_t Endpoint_GetBusyBanks(void)\r
+                       {\r
+                               return ((avr32_usbb_uesta0_t*)AVR32_USBB_UESTA0)[USB_SelectedEndpoint].nbusybk;\r
+                       }\r
+\r
+                       /** Aborts all pending IN transactions on the currently selected endpoint, once the bank\r
+                        *  has been queued for transmission to the host via \ref Endpoint_ClearIN(). This function\r
+                        *  will terminate all queued transactions, resetting the endpoint banks ready for a new\r
+                        *  packet.\r
+                        *\r
+                        *  \ingroup Group_EndpointPacketManagement_AVR8\r
+                        */\r
+                       static inline void Endpoint_AbortPendingIN(void)\r
+                       {\r
+                               while (Endpoint_GetBusyBanks() != 0)\r
+                               {\r
+                                       ((avr32_usbb_uecon0_t*)AVR32_USBB_UECON0SET)[USB_SelectedEndpoint].killbk = true;\r
+                                       while (((avr32_usbb_uecon0_t*)AVR32_USBB_UECON0)[USB_SelectedEndpoint].killbk);\r
+                               }\r
+                       }\r
+                       \r
+                       /** Determines if the currently selected endpoint may be read from (if data is waiting in the endpoint\r
+                        *  bank and the endpoint is an OUT direction, or if the bank is not yet full if the endpoint is an IN\r
+                        *  direction). This function will return false if an error has occurred in the endpoint, if the endpoint\r
+                        *  is an OUT direction and no packet (or an empty packet) has been received, or if the endpoint is an IN\r
+                        *  direction and the endpoint bank is full.\r
+                        *\r
+                        *  \ingroup Group_EndpointPacketManagement_AVR8\r
+                        *\r
+                        *  \return Boolean \c true if the currently selected endpoint may be read from or written to, depending\r
+                        *          on its direction.\r
+                        */\r
+                       static inline bool Endpoint_IsReadWriteAllowed(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;\r
+                       static inline bool Endpoint_IsReadWriteAllowed(void)\r
+                       {\r
+                               return ((avr32_usbb_uesta0_t*)AVR32_USBB_UESTA0)[USB_SelectedEndpoint].rwall;\r
+                       }\r
+\r
+                       /** Determines if the currently selected endpoint is configured.\r
+                        *\r
+                        *  \return Boolean \c true if the currently selected endpoint has been configured, \c false otherwise.\r
+                        */\r
+                       static inline bool Endpoint_IsConfigured(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;\r
+                       static inline bool Endpoint_IsConfigured(void)\r
+                       {\r
+                               return ((avr32_usbb_uesta0_t*)AVR32_USBB_UESTA0)[USB_SelectedEndpoint].cfgok;\r
+                       }\r
+\r
+                       /** Returns a mask indicating which INTERRUPT type endpoints have interrupted - i.e. their\r
+                        *  interrupt duration has elapsed. Which endpoints have interrupted can be determined by\r
+                        *  masking the return value against <tt>(1 << <i>{Endpoint Number}</i>)</tt>.\r
+                        *\r
+                        *  \return Mask whose bits indicate which endpoints have interrupted.\r
+                        */\r
+                       static inline uint8_t Endpoint_GetEndpointInterrupts(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;\r
+                       static inline uint8_t Endpoint_GetEndpointInterrupts(void)\r
+                       {\r
+                               return ((AVR32_USBB.udint & (AVR32_USBB_EP6INTES_MASK | AVR32_USBB_EP5INTES_MASK |\r
+                                                            AVR32_USBB_EP4INTES_MASK | AVR32_USBB_EP3INTES_MASK |\r
+                                                            AVR32_USBB_EP2INTES_MASK | AVR32_USBB_EP1INTES_MASK |\r
+                                                            AVR32_USBB_EP0INTES_MASK)) >> AVR32_USBB_EP0INT_OFFSET);\r
+                       }\r
+\r
+                       /** Determines if the specified endpoint number has interrupted (valid only for INTERRUPT type\r
+                        *  endpoints).\r
+                        *\r
+                        *  \param[in] EndpointNumber  Index of the endpoint whose interrupt flag should be tested.\r
+                        *\r
+                        *  \return Boolean \c true if the specified endpoint has interrupted, \c false otherwise.\r
+                        */\r
+                       static inline bool Endpoint_HasEndpointInterrupted(const uint8_t EndpointNumber) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;\r
+                       static inline bool Endpoint_HasEndpointInterrupted(const uint8_t EndpointNumber)\r
+                       {\r
+                               return ((Endpoint_GetEndpointInterrupts() & (1 << EndpointNumber)) ? true : false);\r
+                       }\r
+\r
+                       /** Determines if the selected IN endpoint is ready for a new packet to be sent to the host.\r
+                        *\r
+                        *  \ingroup Group_EndpointPacketManagement_AVR8\r
+                        *\r
+                        *  \return Boolean \c true if the current endpoint is ready for an IN packet, \c false otherwise.\r
+                        */\r
+                       static inline bool Endpoint_IsINReady(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;\r
+                       static inline bool Endpoint_IsINReady(void)\r
+                       {\r
+                               return ((avr32_usbb_uesta0_t*)AVR32_USBB_UESTA0)[USB_SelectedEndpoint].txini;\r
+                       }\r
+\r
+                       /** Determines if the selected OUT endpoint has received new packet from the host.\r
+                        *\r
+                        *  \ingroup Group_EndpointPacketManagement_AVR8\r
+                        *\r
+                        *  \return Boolean \c true if current endpoint is has received an OUT packet, \c false otherwise.\r
+                        */\r
+                       static inline bool Endpoint_IsOUTReceived(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;\r
+                       static inline bool Endpoint_IsOUTReceived(void)\r
+                       {\r
+                               return ((avr32_usbb_uesta0_t*)AVR32_USBB_UESTA0)[USB_SelectedEndpoint].rxouti;\r
+                       }\r
+\r
+                       /** Determines if the current CONTROL type endpoint has received a SETUP packet.\r
+                        *\r
+                        *  \ingroup Group_EndpointPacketManagement_AVR8\r
+                        *\r
+                        *  \return Boolean \c true if the selected endpoint has received a SETUP packet, \c false otherwise.\r
+                        */\r
+                       static inline bool Endpoint_IsSETUPReceived(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;\r
+                       static inline bool Endpoint_IsSETUPReceived(void)\r
+                       {\r
+                               return ((avr32_usbb_uesta0_t*)AVR32_USBB_UESTA0)[USB_SelectedEndpoint].rxstpi;\r
+                       }\r
+\r
+                       /** Clears a received SETUP packet on the currently selected CONTROL type endpoint, freeing up the\r
+                        *  endpoint for the next packet.\r
+                        *\r
+                        *  \ingroup Group_EndpointPacketManagement_AVR8\r
+                        *\r
+                        *  \note This is not applicable for non CONTROL type endpoints.\r
+                        */\r
+                       static inline void Endpoint_ClearSETUP(void) ATTR_ALWAYS_INLINE;\r
+                       static inline void Endpoint_ClearSETUP(void)\r
+                       {\r
+                               ((avr32_usbb_uesta0_t*)AVR32_USBB_UESTA0CLR)[USB_SelectedEndpoint].rxstpi = true;\r
+                       }\r
+\r
+                       /** Sends an IN packet to the host on the currently selected endpoint, freeing up the endpoint for the\r
+                        *  next packet and switching to the alternative endpoint bank if double banked.\r
+                        *\r
+                        *  \ingroup Group_EndpointPacketManagement_AVR8\r
+                        */\r
+                       static inline void Endpoint_ClearIN(void) ATTR_ALWAYS_INLINE;\r
+                       static inline void Endpoint_ClearIN(void)\r
+                       {\r
+                               ((avr32_usbb_uesta0_t*)AVR32_USBB_UESTA0CLR)[USB_SelectedEndpoint].txini   = true;\r
+                               ((avr32_usbb_uecon0_t*)AVR32_USBB_UECON0CLR)[USB_SelectedEndpoint].fifocon = true;\r
+                       }\r
+\r
+                       /** Acknowledges an OUT packet to the host on the currently selected endpoint, freeing up the endpoint\r
+                        *  for the next packet and switching to the alternative endpoint bank if double banked.\r
+                        *\r
+                        *  \ingroup Group_EndpointPacketManagement_AVR8\r
+                        */\r
+                       static inline void Endpoint_ClearOUT(void) ATTR_ALWAYS_INLINE;\r
+                       static inline void Endpoint_ClearOUT(void)\r
+                       {\r
+                               ((avr32_usbb_uesta0_t*)AVR32_USBB_UESTA0CLR)[USB_SelectedEndpoint].rxouti  = true;\r
+                               ((avr32_usbb_uecon0_t*)AVR32_USBB_UECON0CLR)[USB_SelectedEndpoint].fifocon = true;\r
+                       }\r
+\r
+                       /** Stalls the current endpoint, indicating to the host that a logical problem occurred with the\r
+                        *  indicated endpoint and that the current transfer sequence should be aborted. This provides a\r
+                        *  way for devices to indicate invalid commands to the host so that the current transfer can be\r
+                        *  aborted and the host can begin its own recovery sequence.\r
+                        *\r
+                        *  The currently selected endpoint remains stalled until either the \ref Endpoint_ClearStall() macro\r
+                        *  is called, or the host issues a CLEAR FEATURE request to the device for the currently selected\r
+                        *  endpoint.\r
+                        *\r
+                        *  \ingroup Group_EndpointPacketManagement_AVR8\r
+                        */\r
+                       static inline void Endpoint_StallTransaction(void) ATTR_ALWAYS_INLINE;\r
+                       static inline void Endpoint_StallTransaction(void)\r
+                       {\r
+                               ((avr32_usbb_uecon0_t*)AVR32_USBB_UECON0SET)[USB_SelectedEndpoint].stallrq = true;\r
+                       }\r
+\r
+                       /** Clears the STALL condition on the currently selected endpoint.\r
+                        *\r
+                        *  \ingroup Group_EndpointPacketManagement_AVR8\r
+                        */\r
+                       static inline void Endpoint_ClearStall(void) ATTR_ALWAYS_INLINE;\r
+                       static inline void Endpoint_ClearStall(void)\r
+                       {\r
+                               ((avr32_usbb_uecon0_t*)AVR32_USBB_UECON0CLR)[USB_SelectedEndpoint].stallrq = true;\r
+                       }\r
+\r
+                       /** Determines if the currently selected endpoint is stalled, false otherwise.\r
+                        *\r
+                        *  \ingroup Group_EndpointPacketManagement_AVR8\r
+                        *\r
+                        *  \return Boolean \c true if the currently selected endpoint is stalled, \c false otherwise.\r
+                        */\r
+                       static inline bool Endpoint_IsStalled(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;\r
+                       static inline bool Endpoint_IsStalled(void)\r
+                       {\r
+                               return ((avr32_usbb_uecon0_t*)AVR32_USBB_UECON0)[USB_SelectedEndpoint].stallrq;\r
+                       }\r
+\r
+                       /** Resets the data toggle of the currently selected endpoint. */\r
+                       static inline void Endpoint_ResetDataToggle(void) ATTR_ALWAYS_INLINE;\r
+                       static inline void Endpoint_ResetDataToggle(void)\r
+                       {\r
+                               ((avr32_usbb_uecon0_t*)AVR32_USBB_UECON0SET)[USB_SelectedEndpoint].rstdt = true;\r
+                       }\r
+\r
+                       /** Determines the currently selected endpoint's direction.\r
+                        *\r
+                        *  \return The currently selected endpoint's direction, as a \c ENDPOINT_DIR_* mask.\r
+                        */\r
+                       static inline uint8_t Endpoint_GetEndpointDirection(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;\r
+                       static inline uint8_t Endpoint_GetEndpointDirection(void)\r
+                       {\r
+                               return (((uint32_t*)AVR32_USBB_UECFG0)[USB_SelectedEndpoint] & AVR32_USBB_UECFG0_EPDIR_MASK);\r
+                       }\r
+\r
+                       /** Sets the direction of the currently selected endpoint.\r
+                        *\r
+                        *  \param[in] DirectionMask  New endpoint direction, as a \c ENDPOINT_DIR_* mask.\r
+                        */\r
+                       static inline void Endpoint_SetEndpointDirection(const uint32_t DirectionMask) ATTR_ALWAYS_INLINE;\r
+                       static inline void Endpoint_SetEndpointDirection(const uint32_t DirectionMask)\r
+                       {\r
+                               ((avr32_usbb_uecfg0_t*)AVR32_USBB_UECFG0)[USB_SelectedEndpoint].epdir = (DirectionMask == ENDPOINT_DIR_IN);\r
+                       }\r
+\r
+                       /** Reads one byte from the currently selected endpoint's bank, for OUT direction endpoints.\r
+                        *\r
+                        *  \ingroup Group_EndpointPrimitiveRW_AVR8\r
+                        *\r
+                        *  \return Next byte in the currently selected endpoint's FIFO buffer.\r
+                        */\r
+                       static inline uint8_t Endpoint_Read_Byte(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;\r
+                       static inline uint8_t Endpoint_Read_Byte(void)\r
+                       {\r
+                               return *((uint8_t*)AVR32_USBB_EP_DATA);\r
+                       }\r
+\r
+                       /** Writes one byte from the currently selected endpoint's bank, for IN direction endpoints.\r
+                        *\r
+                        *  \ingroup Group_EndpointPrimitiveRW_AVR8\r
+                        *\r
+                        *  \param[in] Byte  Next byte to write into the the currently selected endpoint's FIFO buffer.\r
+                        */\r
+                       static inline void Endpoint_Write_Byte(const uint8_t Byte) ATTR_ALWAYS_INLINE;\r
+                       static inline void Endpoint_Write_Byte(const uint8_t Byte)\r
+                       {\r
+                               *((uint8_t*)AVR32_USBB_EP_DATA) = Byte;\r
+                       }\r
+\r
+                       /** Discards one byte from the currently selected endpoint's bank, for OUT direction endpoints.\r
+                        *\r
+                        *  \ingroup Group_EndpointPrimitiveRW_AVR8\r
+                        */\r
+                       static inline void Endpoint_Discard_Byte(void) ATTR_ALWAYS_INLINE;\r
+                       static inline void Endpoint_Discard_Byte(void)\r
+                       {\r
+                               uint8_t Dummy;\r
+\r
+                               Dummy = *((uint8_t*)AVR32_USBB_EP_DATA);\r
+                       }\r
+\r
+                       /** Reads two bytes from the currently selected endpoint's bank in little endian format, for OUT\r
+                        *  direction endpoints.\r
+                        *\r
+                        *  \ingroup Group_EndpointPrimitiveRW_AVR8\r
+                        *\r
+                        *  \return Next word in the currently selected endpoint's FIFO buffer.\r
+                        */\r
+                       static inline uint16_t Endpoint_Read_Word_LE(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;\r
+                       static inline uint16_t Endpoint_Read_Word_LE(void)\r
+                       {\r
+                               union\r
+                               {\r
+                                       uint16_t Word;\r
+                                       uint8_t  Bytes[2];\r
+                               } Data;\r
+\r
+                               Data.Bytes[0] = *((uint8_t*)AVR32_USBB_EP_DATA);\r
+                               Data.Bytes[1] = *((uint8_t*)AVR32_USBB_EP_DATA);\r
+\r
+                               return Data.Word;\r
+                       }\r
+\r
+                       /** Reads two bytes from the currently selected endpoint's bank in big endian format, for OUT\r
+                        *  direction endpoints.\r
+                        *\r
+                        *  \ingroup Group_EndpointPrimitiveRW_AVR8\r
+                        *\r
+                        *  \return Next word in the currently selected endpoint's FIFO buffer.\r
+                        */\r
+                       static inline uint16_t Endpoint_Read_Word_BE(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;\r
+                       static inline uint16_t Endpoint_Read_Word_BE(void)\r
+                       {\r
+                               union\r
+                               {\r
+                                       uint16_t Word;\r
+                                       uint8_t  Bytes[2];\r
+                               } Data;\r
+\r
+                               Data.Bytes[1] = *((uint8_t*)AVR32_USBB_EP_DATA);\r
+                               Data.Bytes[0] = *((uint8_t*)AVR32_USBB_EP_DATA);\r
+\r
+                               return Data.Word;\r
+                       }\r
+\r
+                       /** Writes two bytes to the currently selected endpoint's bank in little endian format, for IN\r
+                        *  direction endpoints.\r
+                        *\r
+                        *  \ingroup Group_EndpointPrimitiveRW_AVR8\r
+                        *\r
+                        *  \param[in] Word  Next word to write to the currently selected endpoint's FIFO buffer.\r
+                        */\r
+                       static inline void Endpoint_Write_Word_LE(const uint16_t Word) ATTR_ALWAYS_INLINE;\r
+                       static inline void Endpoint_Write_Word_LE(const uint16_t Word)\r
+                       {\r
+                               *((uint8_t*)AVR32_USBB_EP_DATA) = (Word & 0xFF);\r
+                               *((uint8_t*)AVR32_USBB_EP_DATA) = (Word >> 8);\r
+                       }\r
+\r
+                       /** Writes two bytes to the currently selected endpoint's bank in big endian format, for IN\r
+                        *  direction endpoints.\r
+                        *\r
+                        *  \ingroup Group_EndpointPrimitiveRW_AVR8\r
+                        *\r
+                        *  \param[in] Word  Next word to write to the currently selected endpoint's FIFO buffer.\r
+                        */\r
+                       static inline void Endpoint_Write_Word_BE(const uint16_t Word) ATTR_ALWAYS_INLINE;\r
+                       static inline void Endpoint_Write_Word_BE(const uint16_t Word)\r
+                       {\r
+                               *((uint8_t*)AVR32_USBB_EP_DATA) = (Word >> 8);\r
+                               *((uint8_t*)AVR32_USBB_EP_DATA) = (Word & 0xFF);\r
+                       }\r
+\r
+                       /** Discards two bytes from the currently selected endpoint's bank, for OUT direction endpoints.\r
+                        *\r
+                        *  \ingroup Group_EndpointPrimitiveRW_AVR8\r
+                        */\r
+                       static inline void Endpoint_Discard_Word(void) ATTR_ALWAYS_INLINE;\r
+                       static inline void Endpoint_Discard_Word(void)\r
+                       {\r
+                               uint8_t Dummy;\r
+\r
+                               Dummy = *((uint8_t*)AVR32_USBB_EP_DATA);\r
+                               Dummy = *((uint8_t*)AVR32_USBB_EP_DATA);\r
+                       }\r
+\r
+                       /** Reads four bytes from the currently selected endpoint's bank in little endian format, for OUT\r
+                        *  direction endpoints.\r
+                        *\r
+                        *  \ingroup Group_EndpointPrimitiveRW_AVR8\r
+                        *\r
+                        *  \return Next double word in the currently selected endpoint's FIFO buffer.\r
+                        */\r
+                       static inline uint32_t Endpoint_Read_DWord_LE(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;\r
+                       static inline uint32_t Endpoint_Read_DWord_LE(void)\r
+                       {\r
+                               union\r
+                               {\r
+                                       uint32_t DWord;\r
+                                       uint8_t  Bytes[4];\r
+                               } Data;\r
+\r
+                               Data.Bytes[0] = *((uint8_t*)AVR32_USBB_EP_DATA);\r
+                               Data.Bytes[1] = *((uint8_t*)AVR32_USBB_EP_DATA);\r
+                               Data.Bytes[2] = *((uint8_t*)AVR32_USBB_EP_DATA);\r
+                               Data.Bytes[3] = *((uint8_t*)AVR32_USBB_EP_DATA);\r
+\r
+                               return Data.DWord;\r
+                       }\r
+\r
+                       /** Reads four bytes from the currently selected endpoint's bank in big endian format, for OUT\r
+                        *  direction endpoints.\r
+                        *\r
+                        *  \ingroup Group_EndpointPrimitiveRW_AVR8\r
+                        *\r
+                        *  \return Next double word in the currently selected endpoint's FIFO buffer.\r
+                        */\r
+                       static inline uint32_t Endpoint_Read_DWord_BE(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;\r
+                       static inline uint32_t Endpoint_Read_DWord_BE(void)\r
+                       {\r
+                               union\r
+                               {\r
+                                       uint32_t DWord;\r
+                                       uint8_t  Bytes[4];\r
+                               } Data;\r
+\r
+                               Data.Bytes[3] = *((uint8_t*)AVR32_USBB_EP_DATA);\r
+                               Data.Bytes[2] = *((uint8_t*)AVR32_USBB_EP_DATA);\r
+                               Data.Bytes[1] = *((uint8_t*)AVR32_USBB_EP_DATA);\r
+                               Data.Bytes[0] = *((uint8_t*)AVR32_USBB_EP_DATA);\r
+\r
+                               return Data.DWord;\r
+                       }\r
+\r
+                       /** Writes four bytes to the currently selected endpoint's bank in little endian format, for IN\r
+                        *  direction endpoints.\r
+                        *\r
+                        *  \ingroup Group_EndpointPrimitiveRW_AVR8\r
+                        *\r
+                        *  \param[in] DWord  Next double word to write to the currently selected endpoint's FIFO buffer.\r
+                        */\r
+                       static inline void Endpoint_Write_DWord_LE(const uint32_t DWord) ATTR_ALWAYS_INLINE;\r
+                       static inline void Endpoint_Write_DWord_LE(const uint32_t DWord)\r
+                       {\r
+                               *((uint8_t*)AVR32_USBB_EP_DATA) = (DWord &  0xFF);\r
+                               *((uint8_t*)AVR32_USBB_EP_DATA) = (DWord >> 8);\r
+                               *((uint8_t*)AVR32_USBB_EP_DATA) = (DWord >> 16);\r
+                               *((uint8_t*)AVR32_USBB_EP_DATA) = (DWord >> 24);\r
+                       }\r
+\r
+                       /** Writes four bytes to the currently selected endpoint's bank in big endian format, for IN\r
+                        *  direction endpoints.\r
+                        *\r
+                        *  \ingroup Group_EndpointPrimitiveRW_AVR8\r
+                        *\r
+                        *  \param[in] DWord  Next double word to write to the currently selected endpoint's FIFO buffer.\r
+                        */\r
+                       static inline void Endpoint_Write_DWord_BE(const uint32_t DWord) ATTR_ALWAYS_INLINE;\r
+                       static inline void Endpoint_Write_DWord_BE(const uint32_t DWord)\r
+                       {\r
+                               *((uint8_t*)AVR32_USBB_EP_DATA) = (DWord >> 24);\r
+                               *((uint8_t*)AVR32_USBB_EP_DATA) = (DWord >> 16);\r
+                               *((uint8_t*)AVR32_USBB_EP_DATA) = (DWord >> 8);\r
+                               *((uint8_t*)AVR32_USBB_EP_DATA) = (DWord &  0xFF);\r
+                       }\r
+\r
+                       /** Discards four bytes from the currently selected endpoint's bank, for OUT direction endpoints.\r
+                        *\r
+                        *  \ingroup Group_EndpointPrimitiveRW_AVR8\r
+                        */\r
+                       static inline void Endpoint_Discard_DWord(void) ATTR_ALWAYS_INLINE;\r
+                       static inline void Endpoint_Discard_DWord(void)\r
+                       {\r
+                               uint8_t Dummy;\r
+\r
+                               Dummy = *((uint8_t*)AVR32_USBB_EP_DATA);\r
+                               Dummy = *((uint8_t*)AVR32_USBB_EP_DATA);\r
+                               Dummy = *((uint8_t*)AVR32_USBB_EP_DATA);\r
+                               Dummy = *((uint8_t*)AVR32_USBB_EP_DATA);\r
+                       }\r
+\r
+               /* External Variables: */\r
+                       /** Global indicating the maximum packet size of the default control endpoint located at address\r
+                        *  0 in the device. This value is set to the value indicated in the device descriptor in the user\r
+                        *  project once the USB interface is initialized into device mode.\r
+                        *\r
+                        *  If space is an issue, it is possible to fix this to a static value by defining the control\r
+                        *  endpoint size in the \c FIXED_CONTROL_ENDPOINT_SIZE token passed to the compiler in the makefile\r
+                        *  via the -D switch. When a fixed control endpoint size is used, the size is no longer dynamically\r
+                        *  read from the descriptors at runtime and instead fixed to the given value. When used, it is\r
+                        *  important that the descriptor control endpoint size value matches the size given as the\r
+                        *  \c FIXED_CONTROL_ENDPOINT_SIZE token - it is recommended that the \c FIXED_CONTROL_ENDPOINT_SIZE token\r
+                        *  be used in the device descriptors to ensure this.\r
+                        *\r
+                        *  \note This variable should be treated as read-only in the user application, and never manually\r
+                        *        changed in value.\r
+                        */\r
+                       #if (!defined(FIXED_CONTROL_ENDPOINT_SIZE) || defined(__DOXYGEN__))\r
+                               extern uint8_t USB_ControlEndpointSize;\r
+                       #else\r
+                               #define USB_ControlEndpointSize FIXED_CONTROL_ENDPOINT_SIZE\r
+                       #endif\r
+\r
+               /* Function Prototypes: */\r
+                       /** Completes the status stage of a control transfer on a CONTROL type endpoint automatically,\r
+                        *  with respect to the data direction. This is a convenience function which can be used to\r
+                        *  simplify user control request handling.\r
+                        */\r
+                       void Endpoint_ClearStatusStage(void);\r
+\r
+                       /** Spin-loops until the currently selected non-control endpoint is ready for the next packet of data\r
+                        *  to be read or written to it.\r
+                        *\r
+                        *  \note This routine should not be called on CONTROL type endpoints.\r
+                        *\r
+                        *  \ingroup Group_EndpointRW_AVR8\r
+                        *\r
+                        *  \return A value from the \ref Endpoint_WaitUntilReady_ErrorCodes_t enum.\r
+                        */\r
+                       uint8_t Endpoint_WaitUntilReady(void);\r
+\r
+       /* Disable C linkage for C++ Compilers: */\r
+               #if defined(__cplusplus)\r
+                       }\r
+               #endif\r
+\r
+#endif\r
+\r
+/** @} */\r
+\r
diff --git a/LUFA/Drivers/USB/Core/UC3B/Host.c b/LUFA/Drivers/USB/Core/UC3B/Host.c
new file mode 100644 (file)
index 0000000..03b8f60
--- /dev/null
@@ -0,0 +1,355 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2011.\r
+\r
+  dean [at] fourwalledcubicle [dot] com\r
+           www.lufa-lib.org\r
+*/\r
+\r
+/*\r
+  Copyright 2011  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, distribute, and sell this\r
+  software and its documentation for any purpose is hereby granted\r
+  without fee, provided that the above copyright notice appear in\r
+  all copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+#define  __INCLUDE_FROM_USB_DRIVER\r
+#include "../USBMode.h"\r
+\r
+#if defined(USB_CAN_BE_HOST)\r
+\r
+#define  __INCLUDE_FROM_HOST_C\r
+#include "Host.h"\r
+\r
+void USB_Host_ProcessNextHostState(void)\r
+{\r
+       uint8_t ErrorCode    = HOST_ENUMERROR_NoError;\r
+       uint8_t SubErrorCode = HOST_ENUMERROR_NoError;\r
+\r
+       static uint16_t WaitMSRemaining;\r
+       static uint8_t  PostWaitState;\r
+\r
+       switch (USB_HostState)\r
+       {\r
+               case HOST_STATE_WaitForDevice:\r
+                       if (WaitMSRemaining)\r
+                       {\r
+                               if ((SubErrorCode = USB_Host_WaitMS(1)) != HOST_WAITERROR_Successful)\r
+                               {\r
+                                       USB_HostState = PostWaitState;\r
+                                       ErrorCode     = HOST_ENUMERROR_WaitStage;\r
+                                       break;\r
+                               }\r
+\r
+                               if (!(--WaitMSRemaining))\r
+                                 USB_HostState = PostWaitState;\r
+                       }\r
+\r
+                       break;\r
+               case HOST_STATE_Powered:\r
+                       WaitMSRemaining = HOST_DEVICE_SETTLE_DELAY_MS;\r
+\r
+                       USB_HostState = HOST_STATE_Powered_WaitForDeviceSettle;\r
+                       break;\r
+               case HOST_STATE_Powered_WaitForDeviceSettle:\r
+                       if (WaitMSRemaining--)\r
+                       {\r
+                               _delay_ms(1);\r
+                               break;\r
+                       }\r
+                       else\r
+                       {\r
+                               USB_Host_VBUS_Manual_Off();\r
+\r
+                               USB_OTGPAD_On();\r
+                               USB_Host_VBUS_Auto_Enable();\r
+                               USB_Host_VBUS_Auto_On();\r
+\r
+                               USB_HostState = HOST_STATE_Powered_WaitForConnect;\r
+                       }\r
+\r
+                       break;\r
+               case HOST_STATE_Powered_WaitForConnect:\r
+                       if (USB_INT_HasOccurred(USB_INT_DCONNI))\r
+                       {\r
+                               USB_INT_Clear(USB_INT_DCONNI);\r
+                               USB_INT_Clear(USB_INT_DDISCI);\r
+\r
+                               USB_INT_Clear(USB_INT_VBERRI);\r
+                               USB_INT_Enable(USB_INT_VBERRI);\r
+\r
+                               USB_Host_ResumeBus();\r
+                               Pipe_ClearPipes();\r
+\r
+                               HOST_TASK_NONBLOCK_WAIT(100, HOST_STATE_Powered_DoReset);\r
+                       }\r
+\r
+                       break;\r
+               case HOST_STATE_Powered_DoReset:\r
+                       USB_Host_ResetDevice();\r
+\r
+                       HOST_TASK_NONBLOCK_WAIT(200, HOST_STATE_Powered_ConfigPipe);\r
+                       break;\r
+               case HOST_STATE_Powered_ConfigPipe:\r
+                       Pipe_ConfigurePipe(PIPE_CONTROLPIPE, EP_TYPE_CONTROL,\r
+                                                          PIPE_TOKEN_SETUP, ENDPOINT_CONTROLEP,\r
+                                                          PIPE_CONTROLPIPE_DEFAULT_SIZE, PIPE_BANK_SINGLE);\r
+\r
+                       if (!(Pipe_IsConfigured()))\r
+                       {\r
+                               ErrorCode    = HOST_ENUMERROR_PipeConfigError;\r
+                               SubErrorCode = 0;\r
+                               break;\r
+                       }\r
+\r
+                       USB_HostState = HOST_STATE_Default;\r
+                       break;\r
+               case HOST_STATE_Default:\r
+                       USB_ControlRequest = (USB_Request_Header_t)\r
+                               {\r
+                                       .bmRequestType = (REQDIR_DEVICETOHOST | REQTYPE_STANDARD | REQREC_DEVICE),\r
+                                       .bRequest      = REQ_GetDescriptor,\r
+                                       .wValue        = (DTYPE_Device << 8),\r
+                                       .wIndex        = 0,\r
+                                       .wLength       = 8,\r
+                               };\r
+\r
+                       uint8_t DataBuffer[8];\r
+\r
+                       if ((SubErrorCode = USB_Host_SendControlRequest(DataBuffer)) != HOST_SENDCONTROL_Successful)\r
+                       {\r
+                               ErrorCode = HOST_ENUMERROR_ControlError;\r
+                               break;\r
+                       }\r
+\r
+                       USB_ControlPipeSize = DataBuffer[offsetof(USB_Descriptor_Device_t, Endpoint0Size)];\r
+\r
+                       USB_Host_ResetDevice();\r
+\r
+                       HOST_TASK_NONBLOCK_WAIT(200, HOST_STATE_Default_PostReset);\r
+                       break;\r
+               case HOST_STATE_Default_PostReset:\r
+                       Pipe_ConfigurePipe(PIPE_CONTROLPIPE, EP_TYPE_CONTROL,\r
+                                          PIPE_TOKEN_SETUP, ENDPOINT_CONTROLEP,\r
+                                          USB_ControlPipeSize, PIPE_BANK_SINGLE);\r
+\r
+                       if (!(Pipe_IsConfigured()))\r
+                       {\r
+                               ErrorCode    = HOST_ENUMERROR_PipeConfigError;\r
+                               SubErrorCode = 0;\r
+                               break;\r
+                       }\r
+\r
+                       USB_ControlRequest = (USB_Request_Header_t)\r
+                               {\r
+                                       .bmRequestType = (REQDIR_HOSTTODEVICE | REQTYPE_STANDARD | REQREC_DEVICE),\r
+                                       .bRequest      = REQ_SetAddress,\r
+                                       .wValue        = USB_HOST_DEVICEADDRESS,\r
+                                       .wIndex        = 0,\r
+                                       .wLength       = 0,\r
+                               };\r
+\r
+                       if ((SubErrorCode = USB_Host_SendControlRequest(NULL)) != HOST_SENDCONTROL_Successful)\r
+                       {\r
+                               ErrorCode = HOST_ENUMERROR_ControlError;\r
+                               break;\r
+                       }\r
+\r
+                       HOST_TASK_NONBLOCK_WAIT(100, HOST_STATE_Default_PostAddressSet);\r
+                       break;\r
+               case HOST_STATE_Default_PostAddressSet:\r
+                       USB_Host_SetDeviceAddress(USB_HOST_DEVICEADDRESS);\r
+\r
+                       EVENT_USB_Host_DeviceEnumerationComplete();\r
+                       USB_HostState = HOST_STATE_Addressed;\r
+                       break;\r
+       }\r
+\r
+       if ((ErrorCode != HOST_ENUMERROR_NoError) && (USB_HostState != HOST_STATE_Unattached))\r
+       {\r
+               EVENT_USB_Host_DeviceEnumerationFailed(ErrorCode, SubErrorCode);\r
+\r
+               USB_Host_VBUS_Auto_Off();\r
+\r
+               EVENT_USB_Host_DeviceUnattached();\r
+\r
+               USB_ResetInterface();\r
+       }\r
+}\r
+\r
+uint8_t USB_Host_WaitMS(uint8_t MS)\r
+{\r
+       bool    BusSuspended = USB_Host_IsBusSuspended();\r
+       uint8_t ErrorCode    = HOST_WAITERROR_Successful;\r
+       bool    HSOFIEnabled = USB_INT_IsEnabled(USB_INT_HSOFI);\r
+\r
+       USB_INT_Disable(USB_INT_HSOFI);\r
+       USB_INT_Clear(USB_INT_HSOFI);\r
+\r
+       USB_Host_ResumeBus();\r
+\r
+       while (MS)\r
+       {\r
+               if (USB_INT_HasOccurred(USB_INT_HSOFI))\r
+               {\r
+                       USB_INT_Clear(USB_INT_HSOFI);\r
+                       MS--;\r
+               }\r
+\r
+               if ((USB_HostState == HOST_STATE_Unattached) || (USB_CurrentMode != USB_MODE_Host))\r
+               {\r
+                       ErrorCode = HOST_WAITERROR_DeviceDisconnect;\r
+\r
+                       break;\r
+               }\r
+\r
+               if (Pipe_IsError() == true)\r
+               {\r
+                       Pipe_ClearError();\r
+                       ErrorCode = HOST_WAITERROR_PipeError;\r
+\r
+                       break;\r
+               }\r
+\r
+               if (Pipe_IsStalled() == true)\r
+               {\r
+                       Pipe_ClearStall();\r
+                       ErrorCode = HOST_WAITERROR_SetupStalled;\r
+\r
+                       break;\r
+               }\r
+       }\r
+\r
+       if (BusSuspended)\r
+         USB_Host_SuspendBus();\r
+\r
+       if (HSOFIEnabled)\r
+         USB_INT_Enable(USB_INT_HSOFI);\r
+\r
+       return ErrorCode;\r
+}\r
+\r
+static void USB_Host_ResetDevice(void)\r
+{\r
+       bool BusSuspended = USB_Host_IsBusSuspended();\r
+\r
+       USB_INT_Disable(USB_INT_DDISCI);\r
+\r
+       USB_Host_ResetBus();\r
+       while (!(USB_Host_IsBusResetComplete()));\r
+       USB_Host_ResumeBus();\r
+\r
+       bool HSOFIEnabled = USB_INT_IsEnabled(USB_INT_HSOFI);\r
+\r
+       USB_INT_Disable(USB_INT_HSOFI);\r
+       USB_INT_Clear(USB_INT_HSOFI);\r
+\r
+       for (uint8_t MSRem = 10; MSRem != 0; MSRem--)\r
+       {\r
+               /* Workaround for powerless-pull-up devices. After a USB bus reset,\r
+                  all disconnection interrupts are suppressed while a USB frame is\r
+                  looked for - if it is found within 10ms, the device is still\r
+                  present.                                                        */\r
+\r
+               if (USB_INT_HasOccurred(USB_INT_HSOFI))\r
+               {\r
+                       USB_INT_Clear(USB_INT_HSOFI);\r
+                       USB_INT_Clear(USB_INT_DDISCI);\r
+                       break;\r
+               }\r
+\r
+               _delay_ms(1);\r
+       }\r
+\r
+       if (HSOFIEnabled)\r
+         USB_INT_Enable(USB_INT_HSOFI);\r
+\r
+       if (BusSuspended)\r
+         USB_Host_SuspendBus();\r
+\r
+       USB_INT_Enable(USB_INT_DDISCI);\r
+}\r
+\r
+uint8_t USB_Host_SetDeviceConfiguration(const uint8_t ConfigNumber)\r
+{\r
+       USB_ControlRequest = (USB_Request_Header_t)\r
+               {\r
+                       .bmRequestType = (REQDIR_HOSTTODEVICE | REQTYPE_STANDARD | REQREC_DEVICE),\r
+                       .bRequest      = REQ_SetConfiguration,\r
+                       .wValue        = ConfigNumber,\r
+                       .wIndex        = 0,\r
+                       .wLength       = 0,\r
+               };\r
+\r
+       Pipe_SelectPipe(PIPE_CONTROLPIPE);\r
+\r
+       return USB_Host_SendControlRequest(NULL);\r
+}\r
+\r
+uint8_t USB_Host_GetDeviceDescriptor(void* const DeviceDescriptorPtr)\r
+{\r
+       USB_ControlRequest = (USB_Request_Header_t)\r
+               {\r
+                       .bmRequestType = (REQDIR_DEVICETOHOST | REQTYPE_STANDARD | REQREC_DEVICE),\r
+                       .bRequest      = REQ_GetDescriptor,\r
+                       .wValue        = (DTYPE_Device << 8),\r
+                       .wIndex        = 0,\r
+                       .wLength       = sizeof(USB_Descriptor_Device_t),\r
+               };\r
+\r
+       Pipe_SelectPipe(PIPE_CONTROLPIPE);\r
+\r
+       return USB_Host_SendControlRequest(DeviceDescriptorPtr);\r
+}\r
+\r
+uint8_t USB_Host_GetDeviceStringDescriptor(const uint8_t Index,\r
+                                           void* const Buffer,\r
+                                           const uint8_t BufferLength)\r
+{\r
+       USB_ControlRequest = (USB_Request_Header_t)\r
+               {\r
+                       .bmRequestType = (REQDIR_DEVICETOHOST | REQTYPE_STANDARD | REQREC_DEVICE),\r
+                       .bRequest      = REQ_GetDescriptor,\r
+                       .wValue        = (DTYPE_String << 8) | Index,\r
+                       .wIndex        = 0,\r
+                       .wLength       = BufferLength,\r
+               };\r
+\r
+       Pipe_SelectPipe(PIPE_CONTROLPIPE);\r
+\r
+       return USB_Host_SendControlRequest(Buffer);\r
+}\r
+\r
+uint8_t USB_Host_ClearPipeStall(const uint8_t EndpointNum)\r
+{\r
+       USB_ControlRequest = (USB_Request_Header_t)\r
+               {\r
+                       .bmRequestType = (REQDIR_HOSTTODEVICE | REQTYPE_STANDARD | REQREC_ENDPOINT),\r
+                       .bRequest      = REQ_ClearFeature,\r
+                       .wValue        = FEATURE_SEL_EndpointHalt,\r
+                       .wIndex        = EndpointNum,\r
+                       .wLength       = 0,\r
+               };\r
+\r
+       Pipe_SelectPipe(PIPE_CONTROLPIPE);\r
+\r
+       return USB_Host_SendControlRequest(NULL);\r
+}\r
+\r
+#endif\r
+\r
diff --git a/LUFA/Drivers/USB/Core/UC3B/Host.h b/LUFA/Drivers/USB/Core/UC3B/Host.h
new file mode 100644 (file)
index 0000000..14cc624
--- /dev/null
@@ -0,0 +1,522 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2011.\r
+\r
+  dean [at] fourwalledcubicle [dot] com\r
+           www.lufa-lib.org\r
+*/\r
+\r
+/*\r
+  Copyright 2011  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, distribute, and sell this\r
+  software and its documentation for any purpose is hereby granted\r
+  without fee, provided that the above copyright notice appear in\r
+  all copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *  \brief USB Host definitions for the AVR32 UC3B microcontrollers.\r
+ *  \copydetails Group_Host_UC3B\r
+ *\r
+ *  \note This file should not be included directly. It is automatically included as needed by the USB driver\r
+ *        dispatch header located in LUFA/Drivers/USB/USB.h.\r
+ */\r
+\r
+/** \ingroup Group_Host\r
+ *  \defgroup Group_Host_UC3B Host Management (UC3B)\r
+ *  \brief USB Host definitions for the AVR32 UC3B microcontrollers.\r
+ *\r
+ *  Architecture specific USB Host definitions for the Atmel 32-bit AVR UC3B microcontrollers.\r
+ *\r
+ *  @{\r
+ */\r
+\r
+#ifndef __USBHOST_UC3B_H__\r
+#define __USBHOST_UC3B_H__\r
+\r
+       /* Includes: */\r
+               #include "../../../../Common/Common.h"\r
+               #include "../StdDescriptors.h"\r
+               #include "../Pipe.h"\r
+               #include "../USBInterrupt.h"\r
+\r
+       /* Enable C linkage for C++ Compilers: */\r
+               #if defined(__cplusplus)\r
+                       extern "C" {\r
+               #endif\r
+\r
+       /* Preprocessor Checks: */\r
+               #if !defined(__INCLUDE_FROM_USB_DRIVER)\r
+                       #error Do not include this file directly. Include LUFA/Drivers/USB/USB.h instead.\r
+               #endif\r
+\r
+       /* Public Interface - May be used in end-application: */\r
+               /* Macros: */\r
+                       /** Indicates the fixed USB device address which any attached device is enumerated to when in\r
+                        *  host mode. As only one USB device may be attached to the AVR in host mode at any one time\r
+                        *  and that the address used is not important (other than the fact that it is non-zero), a\r
+                        *  fixed value is specified by the library.\r
+                        */\r
+                       #define USB_HOST_DEVICEADDRESS                 1\r
+\r
+                       #if !defined(USB_HOST_TIMEOUT_MS) || defined(__DOXYGEN__)\r
+                               /** Constant for the maximum software timeout period of sent USB control transactions to an attached\r
+                                *  device. If a device fails to respond to a sent control request within this period, the\r
+                                *  library will return a timeout error code.\r
+                                *\r
+                                *  This value may be overridden in the user project makefile as the value of the\r
+                                *  \ref USB_HOST_TIMEOUT_MS token, and passed to the compiler using the -D switch.\r
+                                */\r
+                               #define USB_HOST_TIMEOUT_MS                1000\r
+                       #endif\r
+\r
+                       #if !defined(HOST_DEVICE_SETTLE_DELAY_MS) || defined(__DOXYGEN__)\r
+                               /** Constant for the delay in milliseconds after a device is connected before the library\r
+                                *  will start the enumeration process. Some devices require a delay of up to 5 seconds\r
+                                *  after connection before the enumeration process can start or incorrect operation will\r
+                                *  occur.\r
+                                *\r
+                                *  The default delay value may be overridden in the user project makefile by defining the\r
+                                *  \c HOST_DEVICE_SETTLE_DELAY_MS token to the required delay in milliseconds, and passed to the\r
+                                *  compiler using the -D switch.\r
+                                */\r
+                               #define HOST_DEVICE_SETTLE_DELAY_MS        1000\r
+                       #endif\r
+\r
+               /* Enums: */\r
+                       /** Enum for the various states of the USB Host state machine. Only some states are\r
+                        *  implemented in the LUFA library - other states are left to the user to implement.\r
+                        *\r
+                        *  For information on each possible USB host state, refer to the USB 2.0 specification.\r
+                        *  Several of the USB host states are broken up further into multiple smaller sub-states,\r
+                        *  so that they can be internally implemented inside the library in an efficient manner.\r
+                        *\r
+                        *  \see \ref USB_HostState, which stores the current host state machine state.\r
+                        */\r
+                       enum USB_Host_States_t\r
+                       {\r
+                               HOST_STATE_WaitForDeviceRemoval         = 0,  /**< Internally implemented by the library. This state can be\r
+                                                                              *   used by the library to wait until the attached device is\r
+                                                                              *   removed by the user - useful for when an error occurs or\r
+                                                                              *   further communication with the device is not needed. This\r
+                                                                              *   allows for other code to run while the state machine is\r
+                                                                              *   effectively disabled.\r
+                                                                              */\r
+                               HOST_STATE_WaitForDevice                = 1,  /**< Internally implemented by the library. This state indicates\r
+                                                                              *   that the stack is waiting for an interval to elapse before\r
+                                                                              *   continuing with the next step of the device enumeration\r
+                                                                              *   process.\r
+                                                                              *\r
+                                                                              *   \note Do not manually change to this state in the user code.\r
+                                                                              */\r
+                               HOST_STATE_Unattached                   = 2,  /**< Internally implemented by the library. This state indicates\r
+                                                                              *   that the host state machine is waiting for a device to be\r
+                                                                              *   attached so that it can start the enumeration process.\r
+                                                                              *\r
+                                                                              *   \note Do not manually change to this state in the user code.\r
+                                                                              */\r
+                               HOST_STATE_Powered                      = 3,  /**< Internally implemented by the library. This state indicates\r
+                                                                              *   that a device has been attached, and the library's internals\r
+                                                                              *   are being configured to begin the enumeration process.\r
+                                                                              *\r
+                                                                              *   \note Do not manually change to this state in the user code.\r
+                                                                              */\r
+                               HOST_STATE_Powered_WaitForDeviceSettle  = 4,  /**< Internally implemented by the library. This state indicates\r
+                                                                              *   that the stack is waiting for the initial settling period to\r
+                                                                              *   elapse before beginning the enumeration process.\r
+                                                                              *\r
+                                                                              *   \note Do not manually change to this state in the user code.\r
+                                                                              */\r
+                               HOST_STATE_Powered_WaitForConnect       = 5,  /**< Internally implemented by the library. This state indicates\r
+                                                                              *   that the stack is waiting for a connection event from the USB\r
+                                                                              *   controller to indicate a valid USB device has been attached to\r
+                                                                              *   the bus and is ready to be enumerated.\r
+                                                                              *\r
+                                                                              *   \note Do not manually change to this state in the user code.\r
+                                                                              */\r
+                               HOST_STATE_Powered_DoReset              = 6,  /**< Internally implemented by the library. This state indicates\r
+                                                                              *   that a valid USB device has been attached, and that it is\r
+                                                                              *   will now be reset to ensure it is ready for enumeration.\r
+                                                                              *\r
+                                                                              *   \note Do not manually change to this state in the user code.\r
+                                                                              */\r
+                               HOST_STATE_Powered_ConfigPipe           = 7,  /**< Internally implemented by the library. This state indicates\r
+                                                                              *   that the attached device is currently powered and reset, and\r
+                                                                              *   that the control pipe is now being configured by the stack.\r
+                                                                              *\r
+                                                                              *   \note Do not manually change to this state in the user code.\r
+                                                                              */\r
+                               HOST_STATE_Default                      = 8,  /**< Internally implemented by the library. This state indicates\r
+                                                                              *   that the stack is currently retrieving the control endpoint's\r
+                                                                              *   size from the device, so that the control pipe can be altered\r
+                                                                              *   to match.\r
+                                                                              *\r
+                                                                              *   \note Do not manually change to this state in the user code.\r
+                                                                              */\r
+                               HOST_STATE_Default_PostReset            = 9,  /**< Internally implemented by the library. This state indicates that\r
+                                                                              *   the control pipe is being reconfigured to match the retrieved\r
+                                                                              *   control endpoint size from the device, and the device's USB bus\r
+                                                                              *   address is being set.\r
+                                                                              *\r
+                                                                              *   \note Do not manually change to this state in the user code.\r
+                                                                              */\r
+                               HOST_STATE_Default_PostAddressSet       = 10, /**< Internally implemented by the library. This state indicates that\r
+                                                                              *   the device's address has now been set, and the stack is has now\r
+                                                                              *   completed the device enumeration process. This state causes the\r
+                                                                              *   stack to change the current USB device address to that set for\r
+                                                                              *   the connected device, before progressing to the user-implemented\r
+                                                                              *   \ref HOST_STATE_Addressed state for further communications.\r
+                                                                              *\r
+                                                                              *   \note Do not manually change to this state in the user code.\r
+                                                                              */\r
+                               HOST_STATE_Addressed                    = 11, /**< May be implemented by the user project. This state should\r
+                                                                              *   set the device configuration before progressing to the\r
+                                                                              *   \ref HOST_STATE_Configured state. Other processing (such as the\r
+                                                                              *   retrieval and processing of the device descriptor) should also\r
+                                                                              *   be placed in this state.\r
+                                                                              */\r
+                               HOST_STATE_Configured                   = 12, /**< May be implemented by the user project. This state should implement the\r
+                                                                              *   actual work performed on the attached device and changed to the\r
+                                                                              *   \ref HOST_STATE_Suspended or \ref HOST_STATE_WaitForDeviceRemoval states as needed.\r
+                                                                              */\r
+                               HOST_STATE_Suspended                    = 15, /**< May be implemented by the user project. This state should be maintained\r
+                                                                              *   while the bus is suspended, and changed to either the \ref HOST_STATE_Configured\r
+                                                                              *   (after resuming the bus with the USB_Host_ResumeBus() macro) or the\r
+                                                                              *   \ref HOST_STATE_WaitForDeviceRemoval states as needed.\r
+                                                                              */\r
+                       };\r
+\r
+                       /** Enum for the error codes for the \ref EVENT_USB_Host_HostError() event.\r
+                        *\r
+                        *  \see \ref Group_Events for more information on this event.\r
+                        */\r
+                       enum USB_Host_ErrorCodes_t\r
+                       {\r
+                               HOST_ERROR_VBusVoltageDip       = 0, /**< VBUS voltage dipped to an unacceptable level. This\r
+                                                                     *   error may be the result of an attached device drawing\r
+                                                                     *   too much current from the VBUS line, or due to the\r
+                                                                     *   AVR's power source being unable to supply sufficient\r
+                                                                     *   current.\r
+                                                                     */\r
+                       };\r
+\r
+                       /** Enum for the error codes for the \ref EVENT_USB_Host_DeviceEnumerationFailed() event.\r
+                        *\r
+                        *  \see \ref Group_Events for more information on this event.\r
+                        */\r
+                       enum USB_Host_EnumerationErrorCodes_t\r
+                       {\r
+                               HOST_ENUMERROR_NoError          = 0, /**< No error occurred. Used internally, this is not a valid\r
+                                                                     *   ErrorCode parameter value for the \ref EVENT_USB_Host_DeviceEnumerationFailed()\r
+                                                                     *   event.\r
+                                                                     */\r
+                               HOST_ENUMERROR_WaitStage        = 1, /**< One of the delays between enumeration steps failed\r
+                                                                     *   to complete successfully, due to a timeout or other\r
+                                                                     *   error.\r
+                                                                     */\r
+                               HOST_ENUMERROR_NoDeviceDetected = 2, /**< No device was detected, despite the USB data lines\r
+                                                                     *   indicating the attachment of a device.\r
+                                                                     */\r
+                               HOST_ENUMERROR_ControlError     = 3, /**< One of the enumeration control requests failed to\r
+                                                                     *   complete successfully.\r
+                                                                     */\r
+                               HOST_ENUMERROR_PipeConfigError  = 4, /**< The default control pipe (address 0) failed to\r
+                                                                     *   configure correctly.\r
+                                                                     */\r
+                       };\r
+\r
+               /* Inline Functions: */\r
+                       /** Returns the current USB frame number, when in host mode. Every millisecond the USB bus is active (i.e. not suspended)\r
+                        *  the frame number is incremented by one.\r
+                        */\r
+                       static inline uint16_t USB_Host_GetFrameNumber(void)\r
+                       {\r
+                               return UHFNUM;\r
+                       }\r
+\r
+                       #if !defined(NO_SOF_EVENTS)\r
+                               /** Enables the host mode Start Of Frame events. When enabled, this causes the\r
+                                *  \ref EVENT_USB_Host_StartOfFrame() event to fire once per millisecond, synchronized to the USB bus,\r
+                                *  at the start of each USB frame when a device is enumerated while in host mode.\r
+                                *\r
+                                *  \note Not available when the \c NO_SOF_EVENTS compile time token is defined.\r
+                                */\r
+                               static inline void USB_Host_EnableSOFEvents(void) ATTR_ALWAYS_INLINE;\r
+                               static inline void USB_Host_EnableSOFEvents(void)\r
+                               {\r
+                                       USB_INT_Enable(USB_INT_HSOFI);\r
+                               }\r
+\r
+                               /** Disables the host mode Start Of Frame events. When disabled, this stops the firing of the\r
+                                *  \ref EVENT_USB_Host_StartOfFrame() event when enumerated in host mode.\r
+                                *\r
+                                *  \note Not available when the NO_SOF_EVENTS compile time token is defined.\r
+                                */\r
+                               static inline void USB_Host_DisableSOFEvents(void) ATTR_ALWAYS_INLINE;\r
+                               static inline void USB_Host_DisableSOFEvents(void)\r
+                               {\r
+                                       USB_INT_Disable(USB_INT_HSOFI);\r
+                               }\r
+                       #endif\r
+\r
+                       /** Resets the USB bus, including the endpoints in any attached device and pipes on the AVR host.\r
+                        *  USB bus resets leave the default control pipe configured (if already configured).\r
+                        *\r
+                        *  If the USB bus has been suspended prior to issuing a bus reset, the attached device will be\r
+                        *  woken up automatically and the bus resumed after the reset has been correctly issued.\r
+                        */\r
+                       static inline void USB_Host_ResetBus(void) ATTR_ALWAYS_INLINE;\r
+                       static inline void USB_Host_ResetBus(void)\r
+                       {\r
+                               UHCON |=  (1 << RESET);\r
+                       }\r
+\r
+                       /** Determines if a previously issued bus reset (via the \ref USB_Host_ResetBus() macro) has\r
+                        *  completed.\r
+                        *\r
+                        *  \return Boolean \c true if no bus reset is currently being sent, \c false otherwise.\r
+                        */\r
+                       static inline bool USB_Host_IsBusResetComplete(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;\r
+                       static inline bool USB_Host_IsBusResetComplete(void)\r
+                       {\r
+                               return ((UHCON & (1 << RESET)) ? false : true);\r
+                       }\r
+\r
+                       /** Resumes USB communications with an attached and enumerated device, by resuming the transmission\r
+                        *  of the 1MS Start Of Frame messages to the device. When resumed, USB communications between the\r
+                        *  host and attached device may occur.\r
+                        */\r
+                       static inline void USB_Host_ResumeBus(void) ATTR_ALWAYS_INLINE;\r
+                       static inline void USB_Host_ResumeBus(void)\r
+                       {\r
+                               UHCON |=  (1 << SOFEN);\r
+                       }\r
+\r
+                       /** Suspends the USB bus, preventing any communications from occurring between the host and attached\r
+                        *  device until the bus has been resumed. This stops the transmission of the 1MS Start Of Frame\r
+                        *  messages to the device.\r
+                        */\r
+                       static inline void USB_Host_SuspendBus(void) ATTR_ALWAYS_INLINE;\r
+                       static inline void USB_Host_SuspendBus(void)\r
+                       {\r
+                               UHCON &= ~(1 << SOFEN);\r
+                       }\r
+\r
+                       /** Determines if the USB bus has been suspended via the use of the \ref USB_Host_SuspendBus() macro,\r
+                        *  false otherwise. While suspended, no USB communications can occur until the bus is resumed,\r
+                        *  except for the Remote Wakeup event from the device if supported.\r
+                        *\r
+                        *  \return Boolean \c true if the bus is currently suspended, \c false otherwise.\r
+                        */\r
+                       static inline bool USB_Host_IsBusSuspended(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;\r
+                       static inline bool USB_Host_IsBusSuspended(void)\r
+                       {\r
+                               return ((UHCON & (1 << SOFEN)) ? false : true);\r
+                       }\r
+\r
+                       /** Determines if the attached device is currently enumerated in Full Speed mode (12Mb/s), or\r
+                        *  false if the attached device is enumerated in Low Speed mode (1.5Mb/s).\r
+                        *\r
+                        *  \return Boolean \c true if the attached device is enumerated in Full Speed mode, \c false otherwise.\r
+                        */\r
+                       static inline bool USB_Host_IsDeviceFullSpeed(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;\r
+                       static inline bool USB_Host_IsDeviceFullSpeed(void)\r
+                       {\r
+                               return ((USBSTA & (1 << SPEED)) ? true : false);\r
+                       }\r
+\r
+                       /** Determines if the attached device is currently issuing a Remote Wakeup request, requesting\r
+                        *  that the host resume the USB bus and wake up the device, false otherwise.\r
+                        *\r
+                        *  \return Boolean \c true if the attached device has sent a Remote Wakeup request, \c false otherwise.\r
+                        */\r
+                       static inline bool USB_Host_IsRemoteWakeupSent(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;\r
+                       static inline bool USB_Host_IsRemoteWakeupSent(void)\r
+                       {\r
+                               return ((UHINT & (1 << RXRSMI)) ? true : false);\r
+                       }\r
+\r
+                       /** Clears the flag indicating that a Remote Wakeup request has been issued by an attached device. */\r
+                       static inline void USB_Host_ClearRemoteWakeupSent(void) ATTR_ALWAYS_INLINE;\r
+                       static inline void USB_Host_ClearRemoteWakeupSent(void)\r
+                       {\r
+                               UHINT &= ~(1 << RXRSMI);\r
+                       }\r
+\r
+                       /** Accepts a Remote Wakeup request from an attached device. This must be issued in response to\r
+                        *  a device's Remote Wakeup request within 2ms for the request to be accepted and the bus to\r
+                        *  be resumed.\r
+                        */\r
+                       static inline void USB_Host_ResumeFromWakeupRequest(void) ATTR_ALWAYS_INLINE;\r
+                       static inline void USB_Host_ResumeFromWakeupRequest(void)\r
+                       {\r
+                               UHCON |=  (1 << RESUME);\r
+                       }\r
+\r
+                       /** Determines if a resume from Remote Wakeup request is currently being sent to an attached\r
+                        *  device.\r
+                        *\r
+                        *  \return Boolean \c true if no resume request is currently being sent, \c false otherwise.\r
+                        */\r
+                       static inline bool USB_Host_IsResumeFromWakeupRequestSent(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;\r
+                       static inline bool USB_Host_IsResumeFromWakeupRequestSent(void)\r
+                       {\r
+                               return ((UHCON & (1 << RESUME)) ? false : true);\r
+                       }\r
+\r
+               /* Function Prototypes: */\r
+                       /** Convenience function. This routine sends a SET CONFIGURATION standard request to the attached\r
+                        *  device, with the given configuration index. This can be used to easily set the device\r
+                        *  configuration without creating and sending the request manually.\r
+                        *\r
+                        *  \note After this routine returns, the control pipe will be selected.\r
+                        *\r
+                        *  \param[in] ConfigNumber  Configuration index to send to the device.\r
+                        *\r
+                        *  \return A value from the \ref USB_Host_SendControlErrorCodes_t enum to indicate the result.\r
+                        */\r
+                       uint8_t USB_Host_SetDeviceConfiguration(const uint8_t ConfigNumber);\r
+\r
+                       /** Convenience function. This routine sends a GET DESCRIPTOR standard request to the attached\r
+                        *  device, requesting the device descriptor. This can be used to easily retrieve information\r
+                        *  about the device such as its VID, PID and power requirements.\r
+                        *\r
+                        *  \note After this routine returns, the control pipe will be selected.\r
+                        *\r
+                        *  \param[out] DeviceDescriptorPtr  Pointer to the destination device descriptor structure where\r
+                        *                                   the read data is to be stored.\r
+                        *\r
+                        *  \return A value from the \ref USB_Host_SendControlErrorCodes_t enum to indicate the result.\r
+                        */\r
+                       uint8_t USB_Host_GetDeviceDescriptor(void* const DeviceDescriptorPtr);\r
+\r
+                       /** Convenience function. This routine sends a GET DESCRIPTOR standard request to the attached\r
+                        *  device, requesting the string descriptor of the specified index. This can be used to easily\r
+                        *  retrieve string descriptors from the device by index, after the index is obtained from the\r
+                        *  Device or Configuration descriptors.\r
+                        *\r
+                        *  \note After this routine returns, the control pipe will be selected.\r
+                        *\r
+                        *  \param[in]  Index        Index of the string index to retrieve.\r
+                        *  \param[out] Buffer       Pointer to the destination buffer where the retrieved string descriptor is\r
+                        *                           to be stored.\r
+                        *  \param[in] BufferLength  Maximum size of the string descriptor which can be stored into the buffer.\r
+                        *\r
+                        *  \return A value from the \ref USB_Host_SendControlErrorCodes_t enum to indicate the result.\r
+                        */\r
+                       uint8_t USB_Host_GetDeviceStringDescriptor(const uint8_t Index,\r
+                                                                  void* const Buffer,\r
+                                                                  const uint8_t BufferLength);\r
+\r
+                       /** Clears a stall condition on the given pipe, via a CLEAR FEATURE standard request to the attached device.\r
+                        *\r
+                        *  \note After this routine returns, the control pipe will be selected.\r
+                        *\r
+                        *  \param[in] EndpointIndex  Index of the endpoint to clear, including the endpoint's direction.\r
+                        *\r
+                        *  \return A value from the \ref USB_Host_SendControlErrorCodes_t enum to indicate the result.\r
+                        */\r
+                       uint8_t USB_Host_ClearPipeStall(const uint8_t EndpointIndex);\r
+\r
+       /* Private Interface - For use in library only: */\r
+       #if !defined(__DOXYGEN__)\r
+               /* Macros: */\r
+                       static inline void USB_Host_HostMode_On(void) ATTR_ALWAYS_INLINE;\r
+                       static inline void USB_Host_HostMode_On(void)\r
+                       {\r
+                               USBCON |=  (1 << HOST);\r
+                       }\r
+\r
+                       static inline void USB_Host_HostMode_Off(void) ATTR_ALWAYS_INLINE;\r
+                       static inline void USB_Host_HostMode_Off(void)\r
+                       {\r
+                               USBCON &= ~(1 << HOST);\r
+                       }\r
+\r
+                       static inline void USB_Host_VBUS_Auto_Enable(void) ATTR_ALWAYS_INLINE;\r
+                       static inline void USB_Host_VBUS_Auto_Enable(void)\r
+                       {\r
+                               OTGCON &= ~(1 << VBUSHWC);\r
+                               UHWCON |=  (1 << UVCONE);\r
+                       }\r
+\r
+                       static inline void USB_Host_VBUS_Manual_Enable(void) ATTR_ALWAYS_INLINE;\r
+                       static inline void USB_Host_VBUS_Manual_Enable(void)\r
+                       {\r
+                               OTGCON |=  (1 << VBUSHWC);\r
+                               UHWCON &= ~(1 << UVCONE);\r
+\r
+                               DDRE   |=  (1 << 7);\r
+                       }\r
+\r
+                       static inline void USB_Host_VBUS_Auto_On(void) ATTR_ALWAYS_INLINE;\r
+                       static inline void USB_Host_VBUS_Auto_On(void)\r
+                       {\r
+                               OTGCON |=  (1 << VBUSREQ);\r
+                       }\r
+\r
+                       static inline void USB_Host_VBUS_Manual_On(void) ATTR_ALWAYS_INLINE;\r
+                       static inline void USB_Host_VBUS_Manual_On(void)\r
+                       {\r
+                               PORTE  |=  (1 << 7);\r
+                       }\r
+\r
+                       static inline void USB_Host_VBUS_Auto_Off(void) ATTR_ALWAYS_INLINE;\r
+                       static inline void USB_Host_VBUS_Auto_Off(void)\r
+                       {\r
+                               OTGCON |=  (1 << VBUSRQC);\r
+                       }\r
+\r
+                       static inline void USB_Host_VBUS_Manual_Off(void) ATTR_ALWAYS_INLINE;\r
+                       static inline void USB_Host_VBUS_Manual_Off(void)\r
+                       {\r
+                               PORTE  &= ~(1 << 7);\r
+                       }\r
+\r
+                       static inline void USB_Host_SetDeviceAddress(const uint8_t Address) ATTR_ALWAYS_INLINE;\r
+                       static inline void USB_Host_SetDeviceAddress(const uint8_t Address)\r
+                       {\r
+                               UHADDR  =  (Address & 0x7F);\r
+                       }\r
+\r
+               /* Enums: */\r
+                       enum USB_Host_WaitMSErrorCodes_t\r
+                       {\r
+                               HOST_WAITERROR_Successful       = 0,\r
+                               HOST_WAITERROR_DeviceDisconnect = 1,\r
+                               HOST_WAITERROR_PipeError        = 2,\r
+                               HOST_WAITERROR_SetupStalled     = 3,\r
+                       };\r
+\r
+               /* Function Prototypes: */\r
+                       void    USB_Host_ProcessNextHostState(void);\r
+                       uint8_t USB_Host_WaitMS(uint8_t MS);\r
+\r
+                       #if defined(__INCLUDE_FROM_HOST_C)\r
+                               static void USB_Host_ResetDevice(void);\r
+                       #endif\r
+       #endif\r
+\r
+       /* Disable C linkage for C++ Compilers: */\r
+               #if defined(__cplusplus)\r
+                       }\r
+               #endif\r
+\r
+#endif\r
+\r
+/** @} */\r
+\r
diff --git a/LUFA/Drivers/USB/Core/UC3B/OTG.h b/LUFA/Drivers/USB/Core/UC3B/OTG.h
new file mode 100644 (file)
index 0000000..92ec38a
--- /dev/null
@@ -0,0 +1,149 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2011.\r
+\r
+  dean [at] fourwalledcubicle [dot] com\r
+           www.lufa-lib.org\r
+*/\r
+\r
+/*\r
+  Copyright 2011  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, distribute, and sell this\r
+  software and its documentation for any purpose is hereby granted\r
+  without fee, provided that the above copyright notice appear in\r
+  all copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *  \brief USB OTG definitions for the UC3B microcontrollers.\r
+ *  \copydetails Group_OTG_UC3B\r
+ *\r
+ *  \note This file should not be included directly. It is automatically included as needed by the USB driver\r
+ *        dispatch header located in LUFA/Drivers/USB/USB.h.\r
+ */\r
+\r
+/** \ingroup Group_OTG\r
+ *  \defgroup Group_OTG_UC3B USB On The Go (OTG) Management (UC3B)\r
+ *  \brief USB OTG definitions for the UC3B microcontrollers.\r
+ *\r
+ *  Architecture specific USB OTG definitions for the Atmel 32-bit AVR UC3B microcontrollers.\r
+ *\r
+ *  @{\r
+ */\r
+\r
+#ifndef __USBOTG_UC3B_H__\r
+#define __USBOTG_UC3B_H__\r
+\r
+       /* Includes: */\r
+               #include "../../../../Common/Common.h"\r
+\r
+       /* Preprocessor Checks: */\r
+               #if !defined(__INCLUDE_FROM_USB_DRIVER)\r
+                       #error Do not include this file directly. Include LUFA/Drivers/USB/USB.h instead.\r
+               #endif\r
+\r
+       /* Public Interface - May be used in end-application: */\r
+               /* Macros: */\r
+                       /** Mask for the VBUS pulsing method of SRP, supported by some OTG devices.\r
+                        *\r
+                        *  \see \ref USB_OTG_Device_InitiateSRP().\r
+                        */\r
+                       #define USB_OTG_SRP_VBUS                   (1 << SRPSEL)\r
+\r
+                       /** Mask for the Data + pulsing method of SRP, supported by some OTG devices.\r
+                        *\r
+                        *  \see \ref USB_OTG_Device_InitiateSRP().\r
+                        */\r
+                       #define USB_OTG_STP_DATA                   0\r
+\r
+               /* Inline Functions: */\r
+                       /** Initiate a Host Negotiation Protocol request. This indicates to the other connected device\r
+                        *  that the device wishes to change device/host roles.\r
+                        */\r
+                       static inline void USB_OTG_Device_RequestHNP(void) ATTR_ALWAYS_INLINE;\r
+                       static inline void USB_OTG_Device_RequestHNP(void)\r
+                       {\r
+                               OTGCON |=  (1 << HNPREQ);\r
+                       }\r
+\r
+                       /** Cancel a Host Negotiation Protocol request. This stops a pending HNP request to the other\r
+                        *  connected device.\r
+                        */\r
+                       static inline void USB_OTG_Device_CancelHNPRequest(void) ATTR_ALWAYS_INLINE;\r
+                       static inline void USB_OTG_Device_CancelHNPRequest(void)\r
+                       {\r
+                               OTGCON &= ~(1 << HNPREQ);\r
+                       }\r
+\r
+                       /** Determines if the device is currently sending a HNP to an attached host.\r
+                        *\r
+                        *  \return Boolean \c true if currently sending a HNP to the other connected device, \c false otherwise\r
+                        */\r
+                       static inline bool USB_OTG_Device_IsSendingHNP(void) ATTR_ALWAYS_INLINE;\r
+                       static inline bool USB_OTG_Device_IsSendingHNP(void)\r
+                       {\r
+                               return ((OTGCON & (1 << HNPREQ)) ? true : false);\r
+                       }\r
+\r
+                       /** Initiates a Session Request Protocol request. Most OTG devices turn off VBUS when the USB\r
+                        *  interface is not in use, to conserve power. Sending a SRP to a USB OTG device running in\r
+                        *  host mode indicates that VBUS should be applied and a session started.\r
+                        *\r
+                        *  There are two different methods of sending a SRP - either pulses on the VBUS line, or by\r
+                        *  pulsing the Data + line via the internal pull-up resistor.\r
+                        *\r
+                        *  \param[in] SRPTypeMask  Mask indicating the type of SRP to use, either \ref USB_OTG_SRP_VBUS or\r
+                        *                          \ref USB_OTG_STP_DATA.\r
+                        */\r
+                       static inline void USB_OTG_Device_InitiateSRP(const uint8_t SRPTypeMask) ATTR_ALWAYS_INLINE;\r
+                       static inline void USB_OTG_Device_InitiateSRP(const uint8_t SRPTypeMask)\r
+                       {\r
+                               OTGCON = ((OTGCON & ~(1 << SRPSEL)) | (SRPTypeMask | (1 << SRPREQ)));\r
+                       }\r
+\r
+                       /** Accepts a HNP from a connected device, indicating that both devices should exchange\r
+                        *  device/host roles.\r
+                        */\r
+                       static inline void USB_OTG_Host_AcceptHNP(void) ATTR_ALWAYS_INLINE;\r
+                       static inline void USB_OTG_Host_AcceptHNP(void)\r
+                       {\r
+                               OTGCON |=  (1 << HNPREQ);\r
+                       }\r
+\r
+                       /** Rejects a HNP from a connected device, indicating that both devices should remain in their\r
+                        *  current device/host roles.\r
+                        */\r
+                       static inline void USB_OTG_Host_RejectHNP(void) ATTR_ALWAYS_INLINE;\r
+                       static inline void USB_OTG_Host_RejectHNP(void)\r
+                       {\r
+                               OTGCON &= ~(1 << HNPREQ);\r
+                       }\r
+\r
+                       /** Indicates if the connected device is not currently sending a HNP request.\r
+                        *\r
+                        *  \return Boolean \c true if a HNP is currently being issued by the connected device, \c false otherwise.\r
+                        */\r
+                       static inline bool USB_OTG_Host_IsHNPReceived(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;\r
+                       static inline bool USB_OTG_Host_IsHNPReceived(void)\r
+                       {\r
+                               return ((OTGCON & (1 << HNPREQ)) ? true : false);\r
+                       }\r
+\r
+#endif\r
+\r
+/** @} */\r
+\r
diff --git a/LUFA/Drivers/USB/Core/UC3B/Pipe.c b/LUFA/Drivers/USB/Core/UC3B/Pipe.c
new file mode 100644 (file)
index 0000000..ceacdfe
--- /dev/null
@@ -0,0 +1,193 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2011.\r
+\r
+  dean [at] fourwalledcubicle [dot] com\r
+           www.lufa-lib.org\r
+*/\r
+\r
+/*\r
+  Copyright 2011  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, distribute, and sell this\r
+  software and its documentation for any purpose is hereby granted\r
+  without fee, provided that the above copyright notice appear in\r
+  all copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+#define  __INCLUDE_FROM_USB_DRIVER\r
+#include "../USBMode.h"\r
+\r
+#if defined(USB_CAN_BE_HOST)\r
+\r
+#include "Pipe.h"\r
+\r
+uint8_t USB_ControlPipeSize = PIPE_CONTROLPIPE_DEFAULT_SIZE;\r
+\r
+bool Pipe_ConfigurePipe(const uint8_t Number,\r
+                        const uint8_t Type,\r
+                        const uint8_t Token,\r
+                        const uint8_t EndpointNumber,\r
+                        const uint16_t Size,\r
+                        const uint8_t Banks)\r
+{\r
+#if defined(ORDERED_EP_CONFIG)\r
+       Pipe_SelectPipe(Number);\r
+       Pipe_EnablePipe();\r
+\r
+       UPCFG1X = 0;\r
+\r
+       UPCFG0X = ((Type << EPTYPE0) | Token | ((EndpointNumber & PIPE_EPNUM_MASK) << PEPNUM0));\r
+       UPCFG1X = ((1 << ALLOC) | Banks | Pipe_BytesToEPSizeMask(Size));\r
+\r
+       Pipe_SetInfiniteINRequests();\r
+\r
+       return Pipe_IsConfigured();\r
+#else  \r
+       for (uint8_t PNum = Number; PNum < PIPE_TOTAL_PIPES; PNum++)\r
+       {\r
+               uint8_t UPCFG0XTemp;\r
+               uint8_t UPCFG1XTemp;\r
+               uint8_t UPCFG2XTemp;\r
+               uint8_t UPCONXTemp;\r
+               uint8_t UPINRQXTemp;\r
+               uint8_t UPIENXTemp;\r
+\r
+               Pipe_SelectPipe(PNum);\r
+               \r
+               if (PNum == Number)\r
+               {\r
+                       UPCFG0XTemp = ((Type << EPTYPE0) | Token | ((EndpointNumber & PIPE_EPNUM_MASK) << PEPNUM0));\r
+                       UPCFG1XTemp = ((1 << ALLOC) | Banks | Pipe_BytesToEPSizeMask(Size));\r
+                       UPCFG2XTemp = 0;\r
+                       UPCONXTemp  = ((1 << PEN) | (1 << INMODE));\r
+                       UPINRQXTemp = 0;\r
+                       UPIENXTemp  = 0;\r
+               }\r
+               else\r
+               {\r
+                       UPCFG0XTemp = UPCFG0X;\r
+                       UPCFG1XTemp = UPCFG1X;\r
+                       UPCFG2XTemp = UPCFG2X;\r
+                       UPCONXTemp  = UPCONX;\r
+                       UPINRQXTemp = UPINRQX;\r
+                       UPIENXTemp  = UPIENX;\r
+               }\r
+\r
+               if (!(UPCFG1XTemp & (1 << ALLOC)))\r
+                 continue;\r
+                 \r
+               Pipe_DisablePipe();\r
+               UPCFG1X &= (1 << ALLOC);\r
+\r
+               Pipe_EnablePipe();\r
+               UPCFG0X = UPCFG0XTemp;\r
+               UPCFG1X = UPCFG1XTemp;\r
+               UPCFG2X = UPCFG2XTemp;\r
+               UPCONX  = UPCONXTemp;\r
+               UPINRQX = UPINRQXTemp;\r
+               UPIENX  = UPIENXTemp;\r
+\r
+               if (!(Pipe_IsConfigured()))\r
+                 return false;         \r
+       }\r
+               \r
+       Pipe_SelectPipe(Number);        \r
+       return true;\r
+#endif\r
+}\r
+\r
+void Pipe_ClearPipes(void)\r
+{\r
+       UPINT = 0;\r
+\r
+       for (uint8_t PNum = 0; PNum < PIPE_TOTAL_PIPES; PNum++)\r
+       {\r
+               Pipe_SelectPipe(PNum);\r
+               UPIENX  = 0;\r
+               UPINTX  = 0;\r
+               UPCFG1X = 0;\r
+               Pipe_DisablePipe();\r
+       }\r
+}\r
+\r
+bool Pipe_IsEndpointBound(const uint8_t EndpointAddress)\r
+{\r
+       uint8_t PrevPipeNumber = Pipe_GetCurrentPipe();\r
+\r
+       for (uint8_t PNum = 0; PNum < PIPE_TOTAL_PIPES; PNum++)\r
+       {\r
+               Pipe_SelectPipe(PNum);\r
+\r
+               if (!(Pipe_IsConfigured()))\r
+                 continue;\r
+\r
+               uint8_t PipeToken        = Pipe_GetPipeToken();\r
+               bool    PipeTokenCorrect = true;\r
+\r
+               if (PipeToken != PIPE_TOKEN_SETUP)\r
+                 PipeTokenCorrect = (PipeToken == ((EndpointAddress & PIPE_EPDIR_MASK) ? PIPE_TOKEN_IN : PIPE_TOKEN_OUT));\r
+\r
+               if (PipeTokenCorrect && (Pipe_BoundEndpointNumber() == (EndpointAddress & PIPE_EPNUM_MASK)))\r
+                 return true;\r
+       }\r
+\r
+       Pipe_SelectPipe(PrevPipeNumber);\r
+       return false;\r
+}\r
+\r
+uint8_t Pipe_WaitUntilReady(void)\r
+{\r
+       #if (USB_STREAM_TIMEOUT_MS < 0xFF)\r
+       uint8_t  TimeoutMSRem = USB_STREAM_TIMEOUT_MS;\r
+       #else\r
+       uint16_t TimeoutMSRem = USB_STREAM_TIMEOUT_MS;\r
+       #endif\r
+\r
+       uint16_t PreviousFrameNumber = USB_Host_GetFrameNumber();\r
+\r
+       for (;;)\r
+       {\r
+               if (Pipe_GetPipeToken() == PIPE_TOKEN_IN)\r
+               {\r
+                       if (Pipe_IsINReceived())\r
+                         return PIPE_READYWAIT_NoError;\r
+               }\r
+               else\r
+               {\r
+                       if (Pipe_IsOUTReady())\r
+                         return PIPE_READYWAIT_NoError;\r
+               }\r
+\r
+               if (Pipe_IsStalled())\r
+                 return PIPE_READYWAIT_PipeStalled;\r
+               else if (USB_HostState == HOST_STATE_Unattached)\r
+                 return PIPE_READYWAIT_DeviceDisconnected;\r
+\r
+               uint16_t CurrentFrameNumber = USB_Host_GetFrameNumber();\r
+\r
+               if (CurrentFrameNumber != PreviousFrameNumber)\r
+               {\r
+                       PreviousFrameNumber = CurrentFrameNumber;\r
+\r
+                       if (!(TimeoutMSRem--))\r
+                         return PIPE_READYWAIT_Timeout;\r
+               }\r
+       }\r
+}\r
+\r
+#endif\r
+\r
diff --git a/LUFA/Drivers/USB/Core/UC3B/Pipe.h b/LUFA/Drivers/USB/Core/UC3B/Pipe.h
new file mode 100644 (file)
index 0000000..9b24c5c
--- /dev/null
@@ -0,0 +1,943 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2011.\r
+\r
+  dean [at] fourwalledcubicle [dot] com\r
+           www.lufa-lib.org\r
+*/\r
+\r
+/*\r
+  Copyright 2011  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, distribute, and sell this\r
+  software and its documentation for any purpose is hereby granted\r
+  without fee, provided that the above copyright notice appear in\r
+  all copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *  \brief USB Pipe definitions for the UC3B microcontrollers.\r
+ *  \copydetails Group_PipeManagement_UC3B\r
+ *\r
+ *  \note This file should not be included directly. It is automatically included as needed by the USB driver\r
+ *        dispatch header located in LUFA/Drivers/USB/USB.h.\r
+ */\r
+\r
+/** \ingroup Group_PipeRW\r
+ *  \defgroup Group_PipeRW_UC3B Pipe Data Reading and Writing (UC3B)\r
+ *  \brief Pipe data read/write definitions for the Atmel AVR32 UC3B architecture.\r
+ *\r
+ *  Functions, macros, variables, enums and types related to data reading and writing from and to pipes.\r
+ */\r
+\r
+/** \ingroup Group_PipePrimitiveRW\r
+ *  \defgroup Group_PipePrimitiveRW_UC3B Read/Write of Primitive Data Types (UC3B)\r
+ *  \brief Pipe primative data read/write definitions for the Atmel AVR32 UC3B architecture.\r
+ *\r
+ *  Functions, macros, variables, enums and types related to data reading and writing of primitive data types\r
+ *  from and to pipes.\r
+ */\r
+\r
+/** \ingroup Group_PipePacketManagement\r
+ *  \defgroup Group_PipePacketManagement_UC3B Pipe Packet Management (UC3B)\r
+ *  \brief Pipe packet management definitions for the Atmel AVR32 UC3B architecture.\r
+ *\r
+ *  Functions, macros, variables, enums and types related to packet management of pipes.\r
+ */\r
+\r
+/** \ingroup Group_PipeControlReq\r
+ *  \defgroup Group_PipeControlReq_UC3B Pipe Control Request Management (UC3B)\r
+ *  \brief Pipe control request management definitions for the Atmel AVR32 UC3B architecture.\r
+ *\r
+ *  Module for host mode request processing. This module allows for the transmission of standard, class and\r
+ *  vendor control requests to the default control endpoint of an attached device while in host mode.\r
+ *\r
+ *  \see Chapter 9 of the USB 2.0 specification.\r
+ */\r
+\r
+/** \ingroup Group_PipeManagement\r
+ *  \defgroup Group_PipeManagement_UC3B Pipe Management (UC3B)\r
+ *  \brief Pipe management definitions for the Atmel AVR32 UC3B architecture.\r
+ *\r
+ *  This module contains functions, macros and enums related to pipe management when in USB Host mode. This\r
+ *  module contains the pipe management macros, as well as pipe interrupt and data send/receive functions\r
+ *  for various data types.\r
+ *\r
+ *  @{\r
+ */\r
+\r
+#ifndef __PIPE_UC3B_H__\r
+#define __PIPE_UC3B_H__\r
+\r
+       /* Includes: */\r
+               #include "../../../../Common/Common.h"\r
+               #include "../USBTask.h"\r
+\r
+       /* Enable C linkage for C++ Compilers: */\r
+               #if defined(__cplusplus)\r
+                       extern "C" {\r
+               #endif\r
+\r
+       /* Preprocessor Checks: */\r
+               #if !defined(__INCLUDE_FROM_USB_DRIVER)\r
+                       #error Do not include this file directly. Include LUFA/Drivers/USB/USB.h instead.\r
+               #endif\r
+\r
+       /* Public Interface - May be used in end-application: */\r
+               /* Macros: */\r
+                       /** \name Pipe Error Flag Masks */\r
+                       //@{\r
+                       /** Mask for \ref Pipe_GetErrorFlags(), indicating that an overflow error occurred in the pipe on the received data. */\r
+                       #define PIPE_ERRORFLAG_OVERFLOW         (1 << 6)\r
+\r
+                       /** Mask for \ref Pipe_GetErrorFlags(), indicating that an underflow error occurred in the pipe on the received data. */\r
+                       #define PIPE_ERRORFLAG_UNDERFLOW        (1 << 5)\r
+\r
+                       /** Mask for \ref Pipe_GetErrorFlags(), indicating that a CRC error occurred in the pipe on the received data. */\r
+                       #define PIPE_ERRORFLAG_CRC16            (1 << 4)\r
+\r
+                       /** Mask for \ref Pipe_GetErrorFlags(), indicating that a hardware timeout error occurred in the pipe. */\r
+                       #define PIPE_ERRORFLAG_TIMEOUT          (1 << 3)\r
+\r
+                       /** Mask for \ref Pipe_GetErrorFlags(), indicating that a hardware PID error occurred in the pipe. */\r
+                       #define PIPE_ERRORFLAG_PID              (1 << 2)\r
+\r
+                       /** Mask for \ref Pipe_GetErrorFlags(), indicating that a hardware data PID error occurred in the pipe. */\r
+                       #define PIPE_ERRORFLAG_DATAPID          (1 << 1)\r
+\r
+                       /** Mask for \ref Pipe_GetErrorFlags(), indicating that a hardware data toggle error occurred in the pipe. */\r
+                       #define PIPE_ERRORFLAG_DATATGL          (1 << 0)\r
+                       //@}\r
+\r
+                       /** \name Pipe Token Masks */\r
+                       //@{\r
+                       /** Token mask for \ref Pipe_ConfigurePipe(). This sets the pipe as a SETUP token (for CONTROL type pipes),\r
+                        *  which will trigger a control request on the attached device when data is written to the pipe.\r
+                        */\r
+                       #define PIPE_TOKEN_SETUP                (0 << PTOKEN0)\r
+\r
+                       /** Token mask for \ref Pipe_ConfigurePipe(). This sets the pipe as a IN token (for non-CONTROL type pipes),\r
+                        *  indicating that the pipe data will flow from device to host.\r
+                        */\r
+                       #define PIPE_TOKEN_IN                   (1 << PTOKEN0)\r
+\r
+                       /** Token mask for \ref Pipe_ConfigurePipe(). This sets the pipe as a OUT token (for non-CONTROL type pipes),\r
+                        *  indicating that the pipe data will flow from host to device.\r
+                        */\r
+                       #define PIPE_TOKEN_OUT                  (2 << PTOKEN0)\r
+                       //@}\r
+                       \r
+                       /** \name Pipe Bank Mode Masks */\r
+                       //@{\r
+                       /** Mask for the bank mode selection for the \ref Pipe_ConfigurePipe() macro. This indicates that the pipe\r
+                        *  should have one single bank, which requires less USB FIFO memory but results in slower transfers as\r
+                        *  only one USB device (the AVR or the attached device) can access the pipe's bank at the one time.\r
+                        */\r
+                       #define PIPE_BANK_SINGLE                (0 << EPBK0)\r
+\r
+                       /** Mask for the bank mode selection for the \ref Pipe_ConfigurePipe() macro. This indicates that the pipe\r
+                        *  should have two banks, which requires more USB FIFO memory but results in faster transfers as one\r
+                        *  USB device (the AVR or the attached device) can access one bank while the other accesses the second\r
+                        *  bank.\r
+                        */\r
+                       #define PIPE_BANK_DOUBLE                (1 << EPBK0)\r
+                       //@}\r
+                       \r
+                       /** Pipe address for the default control pipe, which always resides in address 0. This is\r
+                        *  defined for convenience to give more readable code when used with the pipe macros.\r
+                        */\r
+                       #define PIPE_CONTROLPIPE                0\r
+\r
+                       /** Default size of the default control pipe's bank, until altered by the Endpoint0Size value\r
+                        *  in the device descriptor of the attached device.\r
+                        */\r
+                       #define PIPE_CONTROLPIPE_DEFAULT_SIZE   64\r
+\r
+                       /** Pipe number mask, for masking against pipe addresses to retrieve the pipe's numerical address\r
+                        *  in the device.\r
+                        */\r
+                       #define PIPE_PIPENUM_MASK               0x07\r
+\r
+                       /** Total number of pipes (including the default control pipe at address 0) which may be used in\r
+                        *  the device. Different USB AVR models support different amounts of pipes, this value reflects\r
+                        *  the maximum number of pipes for the currently selected AVR model.\r
+                        */\r
+                       #define PIPE_TOTAL_PIPES                7\r
+\r
+                       /** Size in bytes of the largest pipe bank size possible in the device. Not all banks on each AVR\r
+                        *  model supports the largest bank size possible on the device; different pipe numbers support\r
+                        *  different maximum bank sizes. This value reflects the largest possible bank of any pipe on the\r
+                        *  currently selected USB AVR model.\r
+                        */\r
+                       #define PIPE_MAX_SIZE                   256\r
+\r
+                       /** Endpoint number mask, for masking against endpoint addresses to retrieve the endpoint's\r
+                        *  numerical address in the attached device.\r
+                        */\r
+                       #define PIPE_EPNUM_MASK                 0x0F\r
+\r
+                       /** Endpoint direction mask, for masking against endpoint addresses to retrieve the endpoint's\r
+                        *  direction for comparing with the \c ENDPOINT_DESCRIPTOR_DIR_* masks.\r
+                        */\r
+                       #define PIPE_EPDIR_MASK                 0x80\r
+\r
+               /* Enums: */\r
+                       /** Enum for the possible error return codes of the \ref Pipe_WaitUntilReady() function.\r
+                        *\r
+                        *  \ingroup Group_PipeRW_AVR8\r
+                        */\r
+                       enum Pipe_WaitUntilReady_ErrorCodes_t\r
+                       {\r
+                               PIPE_READYWAIT_NoError                 = 0, /**< Pipe ready for next packet, no error. */\r
+                               PIPE_READYWAIT_PipeStalled             = 1,     /**< The device stalled the pipe while waiting. */\r
+                               PIPE_READYWAIT_DeviceDisconnected      = 2,     /**< Device was disconnected from the host while waiting. */\r
+                               PIPE_READYWAIT_Timeout                 = 3, /**< The device failed to accept or send the next packet\r
+                                                                            *   within the software timeout period set by the\r
+                                                                            *   \ref USB_STREAM_TIMEOUT_MS macro.\r
+                                                                            */\r
+                       };\r
+\r
+               /* Inline Functions: */\r
+                       /** Indicates the number of bytes currently stored in the current pipes's selected bank.\r
+                        *\r
+                        *  \note The return width of this function may differ, depending on the maximum pipe bank size\r
+                        *        of the selected AVR model.\r
+                        *\r
+                        *  \ingroup Group_PipeRW_AVR8\r
+                        *\r
+                        *  \return Total number of bytes in the currently selected pipe's FIFO buffer.\r
+                        */\r
+                       static inline uint16_t Pipe_BytesInPipe(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;\r
+                       static inline uint16_t Pipe_BytesInPipe(void)\r
+                       {\r
+                               return UPBCX;\r
+                       }\r
+\r
+                       /** Returns the pipe address of the currently selected pipe. This is typically used to save the\r
+                        *  currently selected pipe number so that it can be restored after another pipe has been manipulated.\r
+                        *\r
+                        *  \return Index of the currently selected pipe.\r
+                        */\r
+                       static inline uint8_t Pipe_GetCurrentPipe(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;\r
+                       static inline uint8_t Pipe_GetCurrentPipe(void)\r
+                       {\r
+                               return (UPNUM & PIPE_PIPENUM_MASK);\r
+                       }\r
+\r
+                       /** Selects the given pipe number. Any pipe operations which do not require the pipe number to be\r
+                        *  indicated will operate on the currently selected pipe.\r
+                        *\r
+                        *  \param[in] PipeNumber  Index of the pipe to select.\r
+                        */\r
+                       static inline void Pipe_SelectPipe(const uint8_t PipeNumber) ATTR_ALWAYS_INLINE;\r
+                       static inline void Pipe_SelectPipe(const uint8_t PipeNumber)\r
+                       {\r
+                               UPNUM = PipeNumber;\r
+                       }\r
+\r
+                       /** Resets the desired pipe, including the pipe banks and flags.\r
+                        *\r
+                        *  \param[in] PipeNumber  Index of the pipe to reset.\r
+                        */\r
+                       static inline void Pipe_ResetPipe(const uint8_t PipeNumber) ATTR_ALWAYS_INLINE;\r
+                       static inline void Pipe_ResetPipe(const uint8_t PipeNumber)\r
+                       {\r
+                               UPRST = (1 << PipeNumber);\r
+                               UPRST = 0;\r
+                       }\r
+\r
+                       /** Enables the currently selected pipe so that data can be sent and received through it to and from\r
+                        *  an attached device.\r
+                        *\r
+                        *  \pre The currently selected pipe must first be configured properly via \ref Pipe_ConfigurePipe().\r
+                        */\r
+                       static inline void Pipe_EnablePipe(void) ATTR_ALWAYS_INLINE;\r
+                       static inline void Pipe_EnablePipe(void)\r
+                       {\r
+                               UPCONX |= (1 << PEN);\r
+                       }\r
+\r
+                       /** Disables the currently selected pipe so that data cannot be sent and received through it to and\r
+                        *  from an attached device.\r
+                        */\r
+                       static inline void Pipe_DisablePipe(void) ATTR_ALWAYS_INLINE;\r
+                       static inline void Pipe_DisablePipe(void)\r
+                       {\r
+                               UPCONX &= ~(1 << PEN);\r
+                       }\r
+\r
+                       /** Determines if the currently selected pipe is enabled, but not necessarily configured.\r
+                        *\r
+                        * \return Boolean \c true if the currently selected pipe is enabled, \c false otherwise.\r
+                        */\r
+                       static inline bool Pipe_IsEnabled(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;\r
+                       static inline bool Pipe_IsEnabled(void)\r
+                       {\r
+                               return ((UPCONX & (1 << PEN)) ? true : false);\r
+                       }\r
+\r
+                       /** Gets the current pipe token, indicating the pipe's data direction and type.\r
+                        *\r
+                        *  \return The current pipe token, as a \c PIPE_TOKEN_* mask.\r
+                        */\r
+                       static inline uint8_t Pipe_GetPipeToken(void) ATTR_ALWAYS_INLINE;\r
+                       static inline uint8_t Pipe_GetPipeToken(void)\r
+                       {\r
+                               return (UPCFG0X & (0x03 << PTOKEN0));\r
+                       }\r
+\r
+                       /** Sets the token for the currently selected pipe to one of the tokens specified by the \c PIPE_TOKEN_*\r
+                        *  masks. This can be used on CONTROL type pipes, to allow for bidirectional transfer of data during\r
+                        *  control requests, or on regular pipes to allow for half-duplex bidirectional data transfer to devices\r
+                        *  which have two endpoints of opposite direction sharing the same endpoint address within the device.\r
+                        *\r
+                        *  \param[in] Token  New pipe token to set the selected pipe to, as a \c PIPE_TOKEN_* mask.\r
+                        */\r
+                       static inline void Pipe_SetPipeToken(const uint8_t Token) ATTR_ALWAYS_INLINE;\r
+                       static inline void Pipe_SetPipeToken(const uint8_t Token)\r
+                       {\r
+                               UPCFG0X = ((UPCFG0X & ~(0x03 << PTOKEN0)) | Token);\r
+                       }\r
+\r
+                       /** Configures the currently selected pipe to allow for an unlimited number of IN requests. */\r
+                       static inline void Pipe_SetInfiniteINRequests(void) ATTR_ALWAYS_INLINE;\r
+                       static inline void Pipe_SetInfiniteINRequests(void)\r
+                       {\r
+                               UPCONX |= (1 << INMODE);\r
+                       }\r
+\r
+                       /** Configures the currently selected pipe to only allow the specified number of IN requests to be\r
+                        *  accepted by the pipe before it is automatically frozen.\r
+                        *\r
+                        *  \param[in] TotalINRequests  Total number of IN requests that the pipe may receive before freezing.\r
+                        */\r
+                       static inline void Pipe_SetFiniteINRequests(const uint8_t TotalINRequests) ATTR_ALWAYS_INLINE;\r
+                       static inline void Pipe_SetFiniteINRequests(const uint8_t TotalINRequests)\r
+                       {\r
+                               UPCONX &= ~(1 << INMODE);\r
+                               UPINRQX = TotalINRequests;\r
+                       }\r
+\r
+                       /** Determines if the currently selected pipe is configured.\r
+                        *\r
+                        *  \return Boolean \c true if the selected pipe is configured, \c false otherwise.\r
+                        */\r
+                       static inline bool Pipe_IsConfigured(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;\r
+                       static inline bool Pipe_IsConfigured(void)\r
+                       {\r
+                               return ((UPSTAX & (1 << CFGOK)) ? true : false);\r
+                       }\r
+\r
+                       /** Retrieves the endpoint number of the endpoint within the attached device that the currently selected\r
+                        *  pipe is bound to.\r
+                        *\r
+                        *  \return Endpoint number the currently selected pipe is bound to.\r
+                        */\r
+                       static inline uint8_t Pipe_BoundEndpointNumber(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;\r
+                       static inline uint8_t Pipe_BoundEndpointNumber(void)\r
+                       {\r
+                               return ((UPCFG0X >> PEPNUM0) & PIPE_EPNUM_MASK);\r
+                       }\r
+\r
+                       /** Sets the period between interrupts for an INTERRUPT type pipe to a specified number of milliseconds.\r
+                        *\r
+                        *  \param[in] Milliseconds  Number of milliseconds between each pipe poll.\r
+                        */\r
+                       static inline void Pipe_SetInterruptPeriod(const uint8_t Milliseconds) ATTR_ALWAYS_INLINE;\r
+                       static inline void Pipe_SetInterruptPeriod(const uint8_t Milliseconds)\r
+                       {\r
+                               UPCFG2X = Milliseconds;\r
+                       }\r
+\r
+                       /** Returns a mask indicating which pipe's interrupt periods have elapsed, indicating that the pipe should\r
+                        *  be serviced.\r
+                        *\r
+                        *  \return Mask whose bits indicate which pipes have interrupted.\r
+                        */\r
+                       static inline uint8_t Pipe_GetPipeInterrupts(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;\r
+                       static inline uint8_t Pipe_GetPipeInterrupts(void)\r
+                       {\r
+                               return UPINT;\r
+                       }\r
+\r
+                       /** Determines if the specified pipe number has interrupted (valid only for INTERRUPT type\r
+                        *  pipes).\r
+                        *\r
+                        *  \param[in] PipeNumber  Index of the pipe whose interrupt flag should be tested.\r
+                        *\r
+                        *  \return Boolean \c true if the specified pipe has interrupted, \c false otherwise.\r
+                        */\r
+                       static inline bool Pipe_HasPipeInterrupted(const uint8_t PipeNumber) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;\r
+                       static inline bool Pipe_HasPipeInterrupted(const uint8_t PipeNumber)\r
+                       {\r
+                               return ((UPINT & (1 << PipeNumber)) ? true : false);\r
+                       }\r
+\r
+                       /** Unfreezes the selected pipe, allowing it to communicate with an attached device. */\r
+                       static inline void Pipe_Unfreeze(void) ATTR_ALWAYS_INLINE;\r
+                       static inline void Pipe_Unfreeze(void)\r
+                       {\r
+                               UPCONX &= ~(1 << PFREEZE);\r
+                       }\r
+\r
+                       /** Freezes the selected pipe, preventing it from communicating with an attached device. */\r
+                       static inline void Pipe_Freeze(void) ATTR_ALWAYS_INLINE;\r
+                       static inline void Pipe_Freeze(void)\r
+                       {\r
+                               UPCONX |= (1 << PFREEZE);\r
+                       }\r
+\r
+                       /** Determines if the currently selected pipe is frozen, and not able to accept data.\r
+                        *\r
+                        *  \return Boolean \c true if the currently selected pipe is frozen, \c false otherwise.\r
+                        */\r
+                       static inline bool Pipe_IsFrozen(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;\r
+                       static inline bool Pipe_IsFrozen(void)\r
+                       {\r
+                               return ((UPCONX & (1 << PFREEZE)) ? true : false);\r
+                       }\r
+\r
+                       /** Clears the master pipe error flag. */\r
+                       static inline void Pipe_ClearError(void) ATTR_ALWAYS_INLINE;\r
+                       static inline void Pipe_ClearError(void)\r
+                       {\r
+                               UPINTX &= ~(1 << PERRI);\r
+                       }\r
+\r
+                       /** Determines if the master pipe error flag is set for the currently selected pipe, indicating that\r
+                        *  some sort of hardware error has occurred on the pipe.\r
+                        *\r
+                        *  \see \ref Pipe_GetErrorFlags() macro for information on retrieving the exact error flag.\r
+                        *\r
+                        *  \return Boolean \c true if an error has occurred on the selected pipe, \c false otherwise.\r
+                        */\r
+                       static inline bool Pipe_IsError(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;\r
+                       static inline bool Pipe_IsError(void)\r
+                       {\r
+                               return ((UPINTX & (1 << PERRI)) ? true : false);\r
+                       }\r
+\r
+                       /** Clears all the currently selected pipe's hardware error flags, but does not clear the master error\r
+                        *  flag for the pipe.\r
+                        */\r
+                       static inline void Pipe_ClearErrorFlags(void) ATTR_ALWAYS_INLINE;\r
+                       static inline void Pipe_ClearErrorFlags(void)\r
+                       {\r
+                               UPERRX = 0;\r
+                       }\r
+\r
+                       /** Gets a mask of the hardware error flags which have occurred on the currently selected pipe. This\r
+                        *  value can then be masked against the \c PIPE_ERRORFLAG_* masks to determine what error has occurred.\r
+                        *\r
+                        *  \return  Mask comprising of \c PIPE_ERRORFLAG_* bits indicating what error has occurred on the selected pipe.\r
+                        */\r
+                       static inline uint8_t Pipe_GetErrorFlags(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;\r
+                       static inline uint8_t Pipe_GetErrorFlags(void)\r
+                       {\r
+                               return ((UPERRX & (PIPE_ERRORFLAG_CRC16 | PIPE_ERRORFLAG_TIMEOUT |\r
+                                                  PIPE_ERRORFLAG_PID   | PIPE_ERRORFLAG_DATAPID |\r
+                                                  PIPE_ERRORFLAG_DATATGL)) |\r
+                                       (UPSTAX & (PIPE_ERRORFLAG_OVERFLOW | PIPE_ERRORFLAG_UNDERFLOW)));\r
+                       }\r
+                       \r
+                       /** Retrieves the number of busy banks in the currently selected pipe, which have been queued for\r
+                        *  transmission via the \ref Pipe_ClearOUT() command, or are awaiting acknowledgement via the\r
+                        *  \ref Pipe_ClearIN() command.\r
+                        *\r
+                        *  \ingroup Group_PipePacketManagement_AVR8\r
+                        *\r
+                        *  \return Total number of busy banks in the selected pipe.\r
+                        */\r
+                       static inline uint8_t Pipe_GetBusyBanks(void)\r
+                       {\r
+                               return (UPSTAX & (0x03 << NBUSYBK0));\r
+                       }\r
+\r
+                       /** Determines if the currently selected pipe may be read from (if data is waiting in the pipe\r
+                        *  bank and the pipe is an IN direction, or if the bank is not yet full if the pipe is an OUT\r
+                        *  direction). This function will return false if an error has occurred in the pipe, or if the pipe\r
+                        *  is an IN direction and no packet (or an empty packet) has been received, or if the pipe is an OUT\r
+                        *  direction and the pipe bank is full.\r
+                        *\r
+                        *  \note This function is not valid on CONTROL type pipes.\r
+                        *\r
+                        *  \ingroup Group_PipePacketManagement_AVR8\r
+                        *\r
+                        *  \return Boolean \c true if the currently selected pipe may be read from or written to, depending\r
+                        *          on its direction.\r
+                        */\r
+                       static inline bool Pipe_IsReadWriteAllowed(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;\r
+                       static inline bool Pipe_IsReadWriteAllowed(void)\r
+                       {\r
+                               return ((UPINTX & (1 << RWAL)) ? true : false);\r
+                       }\r
+\r
+                       /** Determines if a packet has been received on the currently selected IN pipe from the attached device.\r
+                        *\r
+                        *  \ingroup Group_PipePacketManagement_AVR8\r
+                        *\r
+                        *  \return Boolean \c true if the current pipe has received an IN packet, \c false otherwise.\r
+                        */\r
+                       static inline bool Pipe_IsINReceived(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;\r
+                       static inline bool Pipe_IsINReceived(void)\r
+                       {\r
+                               return ((UPINTX & (1 << RXINI)) ? true : false);\r
+                       }\r
+\r
+                       /** Determines if the currently selected OUT pipe is ready to send an OUT packet to the attached device.\r
+                        *\r
+                        *  \ingroup Group_PipePacketManagement_AVR8\r
+                        *\r
+                        *  \return Boolean \c true if the current pipe is ready for an OUT packet, \c false otherwise.\r
+                        */\r
+                       static inline bool Pipe_IsOUTReady(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;\r
+                       static inline bool Pipe_IsOUTReady(void)\r
+                       {\r
+                               return ((UPINTX & (1 << TXOUTI)) ? true : false);\r
+                       }\r
+\r
+                       /** Determines if no SETUP request is currently being sent to the attached device on the selected\r
+                        *  CONTROL type pipe.\r
+                        *\r
+                        *  \ingroup Group_PipePacketManagement_AVR8\r
+                        *\r
+                        *  \return Boolean \c true if the current pipe is ready for a SETUP packet, \c false otherwise.\r
+                        */\r
+                       static inline bool Pipe_IsSETUPSent(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;\r
+                       static inline bool Pipe_IsSETUPSent(void)\r
+                       {\r
+                               return ((UPINTX & (1 << TXSTPI)) ? true : false);\r
+                       }\r
+\r
+                       /** Sends the currently selected CONTROL type pipe's contents to the device as a SETUP packet.\r
+                        *\r
+                        *  \ingroup Group_PipePacketManagement_AVR8\r
+                        */\r
+                       static inline void Pipe_ClearSETUP(void) ATTR_ALWAYS_INLINE;\r
+                       static inline void Pipe_ClearSETUP(void)\r
+                       {\r
+                               UPINTX &= ~((1 << TXSTPI) | (1 << FIFOCON));\r
+                       }\r
+\r
+                       /** Acknowledges the reception of a setup IN request from the attached device on the currently selected\r
+                        *  pipe, freeing the bank ready for the next packet.\r
+                        *\r
+                        *  \ingroup Group_PipePacketManagement_AVR8\r
+                        */\r
+                       static inline void Pipe_ClearIN(void) ATTR_ALWAYS_INLINE;\r
+                       static inline void Pipe_ClearIN(void)\r
+                       {\r
+                               UPINTX &= ~((1 << RXINI) | (1 << FIFOCON));\r
+                       }\r
+\r
+                       /** Sends the currently selected pipe's contents to the device as an OUT packet on the selected pipe, freeing\r
+                        *  the bank ready for the next packet.\r
+                        *\r
+                        *  \ingroup Group_PipePacketManagement_AVR8\r
+                        */\r
+                       static inline void Pipe_ClearOUT(void) ATTR_ALWAYS_INLINE;\r
+                       static inline void Pipe_ClearOUT(void)\r
+                       {\r
+                               UPINTX &= ~((1 << TXOUTI) | (1 << FIFOCON));\r
+                       }\r
+\r
+                       /** Determines if the device sent a NAK (Negative Acknowledge) in response to the last sent packet on\r
+                        *  the currently selected pipe. This occurs when the host sends a packet to the device, but the device\r
+                        *  is not currently ready to handle the packet (i.e. its endpoint banks are full). Once a NAK has been\r
+                        *  received, it must be cleared using \ref Pipe_ClearNAKReceived() before the previous (or any other) packet\r
+                        *  can be re-sent.\r
+                        *\r
+                        *  \ingroup Group_PipePacketManagement_AVR8\r
+                        *\r
+                        *  \return Boolean \c true if an NAK has been received on the current pipe, \c false otherwise.\r
+                        */\r
+                       static inline bool Pipe_IsNAKReceived(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;\r
+                       static inline bool Pipe_IsNAKReceived(void)\r
+                       {\r
+                               return ((UPINTX & (1 << NAKEDI)) ? true : false);\r
+                       }\r
+\r
+                       /** Clears the NAK condition on the currently selected pipe.\r
+                        *\r
+                        *  \ingroup Group_PipePacketManagement_AVR8\r
+                        *\r
+                        *  \see \ref Pipe_IsNAKReceived() for more details.\r
+                        */\r
+                       static inline void Pipe_ClearNAKReceived(void) ATTR_ALWAYS_INLINE;\r
+                       static inline void Pipe_ClearNAKReceived(void)\r
+                       {\r
+                               UPINTX &= ~(1 << NAKEDI);\r
+                       }\r
+\r
+                       /** Determines if the currently selected pipe has had the STALL condition set by the attached device.\r
+                        *\r
+                        *  \ingroup Group_PipePacketManagement_AVR8\r
+                        *\r
+                        *  \return Boolean \c true if the current pipe has been stalled by the attached device, \c false otherwise.\r
+                        */\r
+                       static inline bool Pipe_IsStalled(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;\r
+                       static inline bool Pipe_IsStalled(void)\r
+                       {\r
+                               return ((UPINTX & (1 << RXSTALLI)) ? true : false);\r
+                       }\r
+\r
+                       /** Clears the STALL condition detection flag on the currently selected pipe, but does not clear the\r
+                        *  STALL condition itself (this must be done via a ClearFeature control request to the device).\r
+                        *\r
+                        *  \ingroup Group_PipePacketManagement_AVR8\r
+                        */\r
+                       static inline void Pipe_ClearStall(void) ATTR_ALWAYS_INLINE;\r
+                       static inline void Pipe_ClearStall(void)\r
+                       {\r
+                               UPINTX &= ~(1 << RXSTALLI);\r
+                       }\r
+\r
+                       /** Reads one byte from the currently selected pipe's bank, for OUT direction pipes.\r
+                        *\r
+                        *  \ingroup Group_PipePrimitiveRW_AVR8\r
+                        *\r
+                        *  \return Next byte in the currently selected pipe's FIFO buffer.\r
+                        */\r
+                       static inline uint8_t Pipe_Read_Byte(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;\r
+                       static inline uint8_t Pipe_Read_Byte(void)\r
+                       {\r
+                               return UPDATX;\r
+                       }\r
+\r
+                       /** Writes one byte from the currently selected pipe's bank, for IN direction pipes.\r
+                        *\r
+                        *  \ingroup Group_PipePrimitiveRW_AVR8\r
+                        *\r
+                        *  \param[in] Byte  Next byte to write into the the currently selected pipe's FIFO buffer.\r
+                        */\r
+                       static inline void Pipe_Write_Byte(const uint8_t Byte) ATTR_ALWAYS_INLINE;\r
+                       static inline void Pipe_Write_Byte(const uint8_t Byte)\r
+                       {\r
+                               UPDATX = Byte;\r
+                       }\r
+\r
+                       /** Discards one byte from the currently selected pipe's bank, for OUT direction pipes.\r
+                        *\r
+                        *  \ingroup Group_PipePrimitiveRW_AVR8\r
+                        */\r
+                       static inline void Pipe_Discard_Byte(void) ATTR_ALWAYS_INLINE;\r
+                       static inline void Pipe_Discard_Byte(void)\r
+                       {\r
+                               uint8_t Dummy;\r
+\r
+                               Dummy = UPDATX;\r
+                       }\r
+\r
+                       /** Reads two bytes from the currently selected pipe's bank in little endian format, for OUT\r
+                        *  direction pipes.\r
+                        *\r
+                        *  \ingroup Group_PipePrimitiveRW_AVR8\r
+                        *\r
+                        *  \return Next word in the currently selected pipe's FIFO buffer.\r
+                        */\r
+                       static inline uint16_t Pipe_Read_Word_LE(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;\r
+                       static inline uint16_t Pipe_Read_Word_LE(void)\r
+                       {\r
+                               union\r
+                               {\r
+                                       uint16_t Word;\r
+                                       uint8_t  Bytes[2];\r
+                               } Data;\r
+\r
+                               Data.Bytes[0] = UPDATX;\r
+                               Data.Bytes[1] = UPDATX;\r
+\r
+                               return Data.Word;\r
+                       }\r
+\r
+                       /** Reads two bytes from the currently selected pipe's bank in big endian format, for OUT\r
+                        *  direction pipes.\r
+                        *\r
+                        *  \ingroup Group_PipePrimitiveRW_AVR8\r
+                        *\r
+                        *  \return Next word in the currently selected pipe's FIFO buffer.\r
+                        */\r
+                       static inline uint16_t Pipe_Read_Word_BE(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;\r
+                       static inline uint16_t Pipe_Read_Word_BE(void)\r
+                       {\r
+                               union\r
+                               {\r
+                                       uint16_t Word;\r
+                                       uint8_t  Bytes[2];\r
+                               } Data;\r
+\r
+                               Data.Bytes[1] = UPDATX;\r
+                               Data.Bytes[0] = UPDATX;\r
+\r
+                               return Data.Word;\r
+                       }\r
+\r
+                       /** Writes two bytes to the currently selected pipe's bank in little endian format, for IN\r
+                        *  direction pipes.\r
+                        *\r
+                        *  \ingroup Group_PipePrimitiveRW_AVR8\r
+                        *\r
+                        *  \param[in] Word  Next word to write to the currently selected pipe's FIFO buffer.\r
+                        */\r
+                       static inline void Pipe_Write_Word_LE(const uint16_t Word) ATTR_ALWAYS_INLINE;\r
+                       static inline void Pipe_Write_Word_LE(const uint16_t Word)\r
+                       {\r
+                               UPDATX = (Word & 0xFF);\r
+                               UPDATX = (Word >> 8);\r
+                       }\r
+\r
+                       /** Writes two bytes to the currently selected pipe's bank in big endian format, for IN\r
+                        *  direction pipes.\r
+                        *\r
+                        *  \ingroup Group_PipePrimitiveRW_AVR8\r
+                        *\r
+                        *  \param[in] Word  Next word to write to the currently selected pipe's FIFO buffer.\r
+                        */\r
+                       static inline void Pipe_Write_Word_BE(const uint16_t Word) ATTR_ALWAYS_INLINE;\r
+                       static inline void Pipe_Write_Word_BE(const uint16_t Word)\r
+                       {\r
+                               UPDATX = (Word >> 8);\r
+                               UPDATX = (Word & 0xFF);\r
+                       }\r
+\r
+                       /** Discards two bytes from the currently selected pipe's bank, for OUT direction pipes.\r
+                        *\r
+                        *  \ingroup Group_PipePrimitiveRW_AVR8\r
+                        */\r
+                       static inline void Pipe_Discard_Word(void) ATTR_ALWAYS_INLINE;\r
+                       static inline void Pipe_Discard_Word(void)\r
+                       {\r
+                               uint8_t Dummy;\r
+\r
+                               Dummy = UPDATX;\r
+                               Dummy = UPDATX;\r
+                       }\r
+\r
+                       /** Reads four bytes from the currently selected pipe's bank in little endian format, for OUT\r
+                        *  direction pipes.\r
+                        *\r
+                        *  \ingroup Group_PipePrimitiveRW_AVR8\r
+                        *\r
+                        *  \return Next double word in the currently selected pipe's FIFO buffer.\r
+                        */\r
+                       static inline uint32_t Pipe_Read_DWord_LE(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;\r
+                       static inline uint32_t Pipe_Read_DWord_LE(void)\r
+                       {\r
+                               union\r
+                               {\r
+                                       uint32_t DWord;\r
+                                       uint8_t  Bytes[4];\r
+                               } Data;\r
+\r
+                               Data.Bytes[0] = UPDATX;\r
+                               Data.Bytes[1] = UPDATX;\r
+                               Data.Bytes[2] = UPDATX;\r
+                               Data.Bytes[3] = UPDATX;\r
+\r
+                               return Data.DWord;\r
+                       }\r
+\r
+                       /** Reads four bytes from the currently selected pipe's bank in big endian format, for OUT\r
+                        *  direction pipes.\r
+                        *\r
+                        *  \ingroup Group_PipePrimitiveRW_AVR8\r
+                        *\r
+                        *  \return Next double word in the currently selected pipe's FIFO buffer.\r
+                        */\r
+                       static inline uint32_t Pipe_Read_DWord_BE(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;\r
+                       static inline uint32_t Pipe_Read_DWord_BE(void)\r
+                       {\r
+                               union\r
+                               {\r
+                                       uint32_t DWord;\r
+                                       uint8_t  Bytes[4];\r
+                               } Data;\r
+\r
+                               Data.Bytes[3] = UPDATX;\r
+                               Data.Bytes[2] = UPDATX;\r
+                               Data.Bytes[1] = UPDATX;\r
+                               Data.Bytes[0] = UPDATX;\r
+\r
+                               return Data.DWord;\r
+                       }\r
+\r
+                       /** Writes four bytes to the currently selected pipe's bank in little endian format, for IN\r
+                        *  direction pipes.\r
+                        *\r
+                        *  \ingroup Group_PipePrimitiveRW_AVR8\r
+                        *\r
+                        *  \param[in] DWord  Next double word to write to the currently selected pipe's FIFO buffer.\r
+                        */\r
+                       static inline void Pipe_Write_DWord_LE(const uint32_t DWord) ATTR_ALWAYS_INLINE;\r
+                       static inline void Pipe_Write_DWord_LE(const uint32_t DWord)\r
+                       {\r
+                               UPDATX = (DWord &  0xFF);\r
+                               UPDATX = (DWord >> 8);\r
+                               UPDATX = (DWord >> 16);\r
+                               UPDATX = (DWord >> 24);\r
+                       }\r
+\r
+                       /** Writes four bytes to the currently selected pipe's bank in big endian format, for IN\r
+                        *  direction pipes.\r
+                        *\r
+                        *  \ingroup Group_PipePrimitiveRW_AVR8\r
+                        *\r
+                        *  \param[in] DWord  Next double word to write to the currently selected pipe's FIFO buffer.\r
+                        */\r
+                       static inline void Pipe_Write_DWord_BE(const uint32_t DWord) ATTR_ALWAYS_INLINE;\r
+                       static inline void Pipe_Write_DWord_BE(const uint32_t DWord)\r
+                       {\r
+                               UPDATX = (DWord >> 24);\r
+                               UPDATX = (DWord >> 16);\r
+                               UPDATX = (DWord >> 8);\r
+                               UPDATX = (DWord &  0xFF);\r
+                       }\r
+\r
+                       /** Discards four bytes from the currently selected pipe's bank, for OUT direction pipes.\r
+                        *\r
+                        *  \ingroup Group_PipePrimitiveRW_AVR8\r
+                        */\r
+                       static inline void Pipe_Discard_DWord(void) ATTR_ALWAYS_INLINE;\r
+                       static inline void Pipe_Discard_DWord(void)\r
+                       {\r
+                               uint8_t Dummy;\r
+\r
+                               Dummy = UPDATX;\r
+                               Dummy = UPDATX;\r
+                               Dummy = UPDATX;\r
+                               Dummy = UPDATX;\r
+                       }\r
+\r
+               /* External Variables: */\r
+                       /** Global indicating the maximum packet size of the default control pipe located at address\r
+                        *  0 in the device. This value is set to the value indicated in the attached device's device\r
+                    *  descriptor once the USB interface is initialized into host mode and a device is attached\r
+                        *  to the USB bus.\r
+                        *\r
+                        *  \note This variable should be treated as read-only in the user application, and never manually\r
+                        *        changed in value.\r
+                        */\r
+                       extern uint8_t USB_ControlPipeSize;\r
+\r
+               /* Function Prototypes: */\r
+                       /** Configures the specified pipe number with the given pipe type, token, target endpoint number in the\r
+                        *  attached device, bank size and banking mode.\r
+                        *\r
+                        *  A newly configured pipe is frozen by default, and must be unfrozen before use via the \ref Pipe_Unfreeze()\r
+                        *  before being used. Pipes should be kept frozen unless waiting for data from a device while in IN mode, or\r
+                        *  sending data to the device in OUT mode. IN type pipes are also automatically configured to accept infinite\r
+                        *  numbers of IN requests without automatic freezing - this can be overridden by a call to\r
+                        *  \ref Pipe_SetFiniteINRequests().\r
+                        *\r
+                        *  \param[in] Number          Pipe number to configure. This must be more than 0 and less than \ref PIPE_TOTAL_PIPES.\r
+                        *\r
+                        *  \param[in] Type            Type of pipe to configure, an \c EP_TYPE_* mask. Not all pipe types are available on Low\r
+                        *                             Speed USB devices - refer to the USB 2.0 specification.\r
+                        *\r
+                        *  \param[in] Token           Pipe data token, either \ref PIPE_TOKEN_SETUP, \ref PIPE_TOKEN_OUT or \ref PIPE_TOKEN_IN.\r
+                        *                             All pipes (except Control type) are unidirectional - data may only be read from or\r
+                        *                             written to the pipe bank based on its direction, not both.\r
+                        *\r
+                        *  \param[in] EndpointNumber  Endpoint index within the attached device that the pipe should interface to.\r
+                        *\r
+                        *  \param[in] Size            Size of the pipe's bank, where packets are stored before they are transmitted to\r
+                        *                             the USB device, or after they have been received from the USB device (depending on\r
+                        *                             the pipe's data direction). The bank size must indicate the maximum packet size that\r
+                        *                             the pipe can handle.\r
+                        *\r
+                        *  \param[in] Banks           Number of banks to use for the pipe being configured, a \c PIPE_BANK_* mask. More banks\r
+                        *                             uses more USB DPRAM, but offers better performance. Isochronous type pipes <b>must</b>\r
+                        *                             have at least two banks.\r
+                        *\r
+                        *  \note When the \c ORDERED_EP_CONFIG compile time option is used, Pipes <b>must</b> be configured in ascending order,\r
+                        *        or bank corruption will occur.\r
+                        *        \n\n\r
+                        *\r
+                        *  \note Certain models of USB AVR's pipes may have different maximum packet sizes based on the pipe's\r
+                        *        index - refer to the chosen USB AVR's datasheet to determine the maximum bank size for each pipe.\r
+                        *        \n\n\r
+                        *\r
+                        *  \note The default control pipe should not be manually configured by the user application, as it is\r
+                        *        automatically configured by the library internally.\r
+                        *        \n\n\r
+                        *\r
+                        *  \note This routine will automatically select the specified pipe upon success. Upon failure, the pipe which\r
+                        *        failed to reconfigure correctly will be selected.\r
+                        *\r
+                        *  \return Boolean \c true if the configuration succeeded, \c false otherwise.\r
+                        */\r
+                       bool Pipe_ConfigurePipe(const uint8_t Number,\r
+                                               const uint8_t Type,\r
+                                               const uint8_t Token,\r
+                                               const uint8_t EndpointNumber,\r
+                                               const uint16_t Size,\r
+                                               const uint8_t Banks);\r
+\r
+                       /** Spin-loops until the currently selected non-control pipe is ready for the next packed of data to be read\r
+                        *  or written to it, aborting in the case of an error condition (such as a timeout or device disconnect).\r
+                        *\r
+                        *  \ingroup Group_PipeRW_AVR8\r
+                        *\r
+                        *  \return A value from the \ref Pipe_WaitUntilReady_ErrorCodes_t enum.\r
+                        */\r
+                       uint8_t Pipe_WaitUntilReady(void);\r
+\r
+                       /** Determines if a pipe has been bound to the given device endpoint address. If a pipe which is bound to the given\r
+                        *  endpoint is found, it is automatically selected.\r
+                        *\r
+                        *  \param[in] EndpointAddress Address and direction mask of the endpoint within the attached device to check.\r
+                        *\r
+                        *  \return Boolean \c true if a pipe bound to the given endpoint address of the specified direction is found,\r
+                        *          \c false otherwise.\r
+                        */\r
+                       bool Pipe_IsEndpointBound(const uint8_t EndpointAddress);\r
+\r
+       /* Private Interface - For use in library only: */\r
+       #if !defined(__DOXYGEN__)\r
+               /* Macros: */\r
+                       #if !defined(ENDPOINT_CONTROLEP)\r
+                               #define ENDPOINT_CONTROLEP          0\r
+                       #endif\r
+\r
+               /* Inline Functions: */\r
+                       static inline uint8_t Pipe_BytesToEPSizeMask(const uint16_t Bytes) ATTR_WARN_UNUSED_RESULT ATTR_CONST ATTR_ALWAYS_INLINE;\r
+                       static inline uint8_t Pipe_BytesToEPSizeMask(const uint16_t Bytes)\r
+                       {\r
+                               uint8_t  MaskVal    = 0;\r
+                               uint16_t CheckBytes = 8;\r
+\r
+                               while ((CheckBytes < Bytes) && (CheckBytes < PIPE_MAX_SIZE))\r
+                               {\r
+                                       MaskVal++;\r
+                                       CheckBytes <<= 1;\r
+                               }\r
+\r
+                               return (MaskVal << EPSIZE0);\r
+                       }\r
+\r
+               /* Function Prototypes: */\r
+                       void Pipe_ClearPipes(void);\r
+       #endif\r
+\r
+       /* Disable C linkage for C++ Compilers: */\r
+               #if defined(__cplusplus)\r
+                       }\r
+               #endif\r
+\r
+#endif\r
+\r
+/** @} */\r
+\r
diff --git a/LUFA/Drivers/USB/Core/UC3B/USBController.c b/LUFA/Drivers/USB/Core/UC3B/USBController.c
new file mode 100644 (file)
index 0000000..7b95683
--- /dev/null
@@ -0,0 +1,233 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2011.\r
+\r
+  dean [at] fourwalledcubicle [dot] com\r
+           www.lufa-lib.org\r
+*/\r
+\r
+/*\r
+  Copyright 2011  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, distribute, and sell this\r
+  software and its documentation for any purpose is hereby granted\r
+  without fee, provided that the above copyright notice appear in\r
+  all copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+#define  __INCLUDE_FROM_USB_DRIVER\r
+#define  __INCLUDE_FROM_USB_CONTROLLER_C\r
+#include "USBController.h"\r
+\r
+#if (!defined(USB_HOST_ONLY) && !defined(USB_DEVICE_ONLY))\r
+volatile uint8_t USB_CurrentMode = USB_MODE_None;\r
+#endif\r
+\r
+#if !defined(USE_STATIC_OPTIONS)\r
+volatile uint8_t USB_Options;\r
+#endif\r
+\r
+void USB_Init(\r
+               #if defined(USB_CAN_BE_BOTH)\r
+               const uint8_t Mode\r
+               #endif\r
+\r
+               #if (defined(USB_CAN_BE_BOTH) && !defined(USE_STATIC_OPTIONS))\r
+               ,\r
+               #elif (!defined(USB_CAN_BE_BOTH) && defined(USE_STATIC_OPTIONS))\r
+               void\r
+               #endif\r
+\r
+               #if !defined(USE_STATIC_OPTIONS)\r
+               const uint8_t Options\r
+               #endif\r
+               )\r
+{\r
+       #if !defined(USE_STATIC_OPTIONS)\r
+       USB_Options = Options;\r
+       #endif\r
+\r
+       if (!(USB_Options & USB_OPT_REG_DISABLED))\r
+         USB_REG_On();\r
+       else\r
+         USB_REG_Off();\r
+\r
+       #if defined(USB_CAN_BE_BOTH)\r
+       if (Mode == USB_MODE_UID)\r
+       {\r
+               UHWCON |= (1 << UIDE);\r
+               USB_INT_Enable(USB_INT_IDTI);\r
+               USB_CurrentMode = USB_GetUSBModeFromUID();\r
+       }\r
+       else\r
+       {\r
+               USB_CurrentMode = Mode;\r
+       }\r
+       #endif\r
+\r
+       USB_IsInitialized = true;\r
+\r
+       USB_ResetInterface();\r
+}\r
+\r
+void USB_Disable(void)\r
+{\r
+       USB_INT_DisableAllInterrupts();\r
+       USB_INT_ClearAllInterrupts();\r
+\r
+       USB_Detach();\r
+       USB_Controller_Disable();\r
+\r
+       if (!(USB_Options & USB_OPT_MANUAL_PLL))\r
+         USB_PLL_Off();\r
+\r
+       USB_REG_Off();\r
+\r
+       #if defined(USB_SERIES_4_AVR) || defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR)\r
+       USB_OTGPAD_Off();\r
+       #endif\r
+\r
+       #if defined(USB_CAN_BE_BOTH)\r
+       USB_CurrentMode = USB_MODE_None;\r
+       #endif\r
+\r
+       USB_IsInitialized = false;\r
+}\r
+\r
+void USB_ResetInterface(void)\r
+{\r
+       #if defined(USB_CAN_BE_BOTH)\r
+       bool UIDModeSelectEnabled = ((UHWCON & (1 << UIDE)) != 0);\r
+       #endif\r
+\r
+       USB_INT_DisableAllInterrupts();\r
+       USB_INT_ClearAllInterrupts();\r
+\r
+       USB_Controller_Reset();\r
+\r
+       if (!(USB_Options & USB_OPT_MANUAL_PLL))\r
+       {\r
+               #if defined(USB_SERIES_4_AVR)\r
+               PLLFRQ = ((1 << PLLUSB) | (1 << PDIV3) | (1 << PDIV1));\r
+               #endif\r
+\r
+               USB_PLL_On();\r
+               while (!(USB_PLL_IsReady()));\r
+       }\r
+\r
+       #if defined(USB_CAN_BE_BOTH)\r
+       if (UIDModeSelectEnabled)\r
+       {\r
+               UHWCON |= (1 << UIDE);\r
+               USB_INT_Enable(USB_INT_IDTI);\r
+       }\r
+       #endif\r
+\r
+       USB_CLK_Unfreeze();\r
+\r
+       if (USB_CurrentMode == USB_MODE_Device)\r
+       {\r
+               #if defined(USB_CAN_BE_DEVICE)\r
+               #if (defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR))\r
+               UHWCON |=  (1 << UIMOD);\r
+               #endif\r
+\r
+               USB_Init_Device();\r
+               #endif\r
+       }\r
+       else if (USB_CurrentMode == USB_MODE_Host)\r
+       {\r
+               #if defined(USB_CAN_BE_HOST)\r
+               UHWCON &= ~(1 << UIMOD);\r
+\r
+               USB_Init_Host();\r
+               #endif\r
+       }\r
+\r
+       #if (defined(USB_SERIES_4_AVR) || defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR))\r
+       USB_OTGPAD_On();\r
+       #endif\r
+}\r
+\r
+#if defined(USB_CAN_BE_DEVICE)\r
+static void USB_Init_Device(void)\r
+{\r
+       USB_DeviceState          = DEVICE_STATE_Unattached;\r
+       USB_ConfigurationNumber  = 0;\r
+\r
+       #if !defined(NO_DEVICE_REMOTE_WAKEUP)\r
+       USB_RemoteWakeupEnabled  = false;\r
+       #endif\r
+\r
+       #if !defined(NO_DEVICE_SELF_POWER)\r
+       USB_CurrentlySelfPowered = false;\r
+       #endif\r
+\r
+       #if !defined(FIXED_CONTROL_ENDPOINT_SIZE)\r
+       USB_Descriptor_Device_t* DeviceDescriptorPtr;\r
+\r
+       if (CALLBACK_USB_GetDescriptor((DTYPE_Device << 8), 0, (void*)&DeviceDescriptorPtr) != NO_DESCRIPTOR)\r
+       {\r
+               #if defined(USE_RAM_DESCRIPTORS)\r
+               USB_ControlEndpointSize = DeviceDescriptorPtr->Endpoint0Size;\r
+               #elif defined(USE_EEPROM_DESCRIPTORS)\r
+               USB_ControlEndpointSize = eeprom_read_byte(&DeviceDescriptorPtr->Endpoint0Size);\r
+               #else\r
+               USB_ControlEndpointSize = pgm_read_byte(&DeviceDescriptorPtr->Endpoint0Size);\r
+               #endif\r
+       }\r
+       #endif\r
+\r
+       #if (defined(USB_SERIES_4_AVR) || defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR))\r
+       if (USB_Options & USB_DEVICE_OPT_LOWSPEED)\r
+         USB_Device_SetLowSpeed();\r
+       else\r
+         USB_Device_SetFullSpeed();\r
+\r
+       USB_INT_Enable(USB_INT_VBUS);\r
+       #endif\r
+\r
+       Endpoint_ConfigureEndpoint(ENDPOINT_CONTROLEP, EP_TYPE_CONTROL,\r
+                                                          ENDPOINT_DIR_OUT, USB_ControlEndpointSize,\r
+                                                          ENDPOINT_BANK_SINGLE);\r
+\r
+       USB_INT_Clear(USB_INT_SUSPI);\r
+       USB_INT_Enable(USB_INT_SUSPI);\r
+       USB_INT_Enable(USB_INT_EORSTI);\r
+\r
+       USB_Attach();\r
+}\r
+#endif\r
+\r
+#if defined(USB_CAN_BE_HOST)\r
+static void USB_Init_Host(void)\r
+{\r
+       USB_HostState       = HOST_STATE_Unattached;\r
+       USB_ControlPipeSize = PIPE_CONTROLPIPE_DEFAULT_SIZE;\r
+\r
+       USB_Host_HostMode_On();\r
+\r
+       USB_Host_VBUS_Auto_Off();\r
+       USB_Host_VBUS_Manual_Enable();\r
+       USB_Host_VBUS_Manual_On();\r
+\r
+       USB_INT_Enable(USB_INT_SRPI);\r
+       USB_INT_Enable(USB_INT_BCERRI);\r
+\r
+       USB_Attach();\r
+}\r
+#endif\r
+\r
diff --git a/LUFA/Drivers/USB/Core/UC3B/USBController.h b/LUFA/Drivers/USB/Core/UC3B/USBController.h
new file mode 100644 (file)
index 0000000..4c90362
--- /dev/null
@@ -0,0 +1,451 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2011.\r
+\r
+  dean [at] fourwalledcubicle [dot] com\r
+           www.lufa-lib.org\r
+*/\r
+\r
+/*\r
+  Copyright 2011  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, distribute, and sell this\r
+  software and its documentation for any purpose is hereby granted\r
+  without fee, provided that the above copyright notice appear in\r
+  all copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *  \brief USB Controller definitions for the AVR32 UC3B microcontrollers.\r
+ *  \copydetails Group_USBManagement_UC3B\r
+ *\r
+ *  \note This file should not be included directly. It is automatically included as needed by the USB driver\r
+ *        dispatch header located in LUFA/Drivers/USB/USB.h.\r
+ */\r
+\r
+/** \ingroup Group_USBManagement\r
+ *  \defgroup Group_USBManagement_UC3B USB Interface Management (UC3B)\r
+ *  \brief USB Controller definitions for the AVR32 UC3B microcontrollers.\r
+ *\r
+ *  Functions, macros, variables, enums and types related to the setup and management of the USB interface.\r
+ *\r
+ *  @{\r
+ */\r
+\r
+#ifndef __USBCONTROLLER_UC3B_H__\r
+#define __USBCONTROLLER_UC3B_H__\r
+\r
+       /* Includes: */\r
+               #include "../../../../Common/Common.h"\r
+               #include "../USBMode.h"\r
+               #include "../Events.h"\r
+               #include "../USBTask.h"\r
+               #include "../USBInterrupt.h"\r
+\r
+               #if defined(USB_CAN_BE_HOST) || defined(__DOXYGEN__)\r
+                       #include "../Host.h"\r
+                       #include "../OTG.h"\r
+                       #include "../Pipe.h"\r
+                       #include "../HostStandardReq.h"\r
+                       #include "../PipeStream.h"\r
+               #endif\r
+\r
+               #if defined(USB_CAN_BE_DEVICE) || defined(__DOXYGEN__)\r
+                       #include "../Device.h"\r
+                       #include "../Endpoint.h"\r
+                       #include "../DeviceStandardReq.h"\r
+                       #include "../EndpointStream.h"\r
+               #endif\r
+\r
+       /* Enable C linkage for C++ Compilers: */\r
+               #if defined(__cplusplus)\r
+                       extern "C" {\r
+               #endif\r
+\r
+       /* Preprocessor Checks and Defines: */\r
+               #if !defined(__INCLUDE_FROM_USB_DRIVER)\r
+                       #error Do not include this file directly. Include LUFA/Drivers/USB/USB.h instead.\r
+               #endif\r
+\r
+               #if !defined(F_CLOCK)\r
+                       #error F_CLOCK is not defined. You must define F_CLOCK to the frequency of the unprescaled USB controller clock in your project makefile.\r
+               #endif\r
+\r
+               #if (F_CLOCK == 8000000)\r
+                       #if (defined(__AVR_AT90USB82__) || defined(__AVR_AT90USB162__) || \\r
+                            defined(__AVR_ATmega8U2__) || defined(__AVR_ATmega16U2__) || \\r
+                            defined(__AVR_ATmega32U2__))\r
+                               #define USB_PLL_PSC                0\r
+                       #elif (defined(__AVR_ATmega16U4__) || defined(__AVR_ATmega32U4__))\r
+                               #define USB_PLL_PSC                0\r
+                       #elif (defined(__AVR_AT90USB646__)  || defined(__AVR_AT90USB1286__) || defined(__AVR_ATmega32U6__))\r
+                               #define USB_PLL_PSC                ((1 << PLLP1) | (1 << PLLP0))\r
+                       #elif (defined(__AVR_AT90USB647__)  || defined(__AVR_AT90USB1287__))\r
+                               #define USB_PLL_PSC                ((1 << PLLP1) | (1 << PLLP0))\r
+                       #endif\r
+               #elif (F_CLOCK == 16000000)\r
+                       #if (defined(__AVR_AT90USB82__) || defined(__AVR_AT90USB162__) || \\r
+                            defined(__AVR_ATmega8U2__) || defined(__AVR_ATmega16U2__) || \\r
+                            defined(__AVR_ATmega32U2__))\r
+                               #define USB_PLL_PSC                (1 << PLLP0)\r
+                       #elif (defined(__AVR_ATmega16U4__) || defined(__AVR_ATmega32U4__))\r
+                               #define USB_PLL_PSC                (1 << PINDIV)\r
+                       #elif (defined(__AVR_AT90USB646__) || defined(__AVR_AT90USB647__) || defined(__AVR_ATmega32U6__))\r
+                               #define USB_PLL_PSC                ((1 << PLLP2) | (1 << PLLP1))\r
+                       #elif (defined(__AVR_AT90USB1286__) || defined(__AVR_AT90USB1287__))\r
+                               #define USB_PLL_PSC                ((1 << PLLP2) | (1 << PLLP0))\r
+                       #endif\r
+               #endif\r
+\r
+               #if !defined(USB_PLL_PSC)\r
+                       #error No PLL prescale value available for chosen F_CLOCK value and AVR model.\r
+               #endif\r
+\r
+       /* Public Interface - May be used in end-application: */\r
+               /* Macros: */\r
+                       /** \name USB Controller Option Masks */\r
+                       //@{\r
+                       /** Regulator disable option mask for \ref USB_Init(). This indicates that the internal 3.3V USB data pad\r
+                        *  regulator should be enabled to regulate the data pin voltages to within the USB standard.\r
+                        *\r
+                        *  \note See USB AVR data sheet for more information on the internal pad regulator.\r
+                        */\r
+                       #define USB_OPT_REG_DISABLED               (1 << 1)\r
+\r
+                       /** Regulator enable option mask for \ref USB_Init(). This indicates that the internal 3.3V USB data pad\r
+                        *  regulator should be disabled and the AVR's VCC level used for the data pads.\r
+                        *\r
+                        *  \note See USB AVR data sheet for more information on the internal pad regulator.\r
+                        */\r
+                       #define USB_OPT_REG_ENABLED                (0 << 1)\r
+\r
+                       /** Manual PLL control option mask for \ref USB_Init(). This indicates to the library that the user application\r
+                        *  will take full responsibility for controlling the AVR's PLL (used to generate the high frequency clock\r
+                        *  that the USB controller requires) and ensuring that it is locked at the correct frequency for USB operations.\r
+                        */\r
+                       #define USB_OPT_MANUAL_PLL                 (1 << 2)\r
+\r
+                       /** Automatic PLL control option mask for \ref USB_Init(). This indicates to the library that the library should\r
+                        *  take full responsibility for controlling the AVR's PLL (used to generate the high frequency clock\r
+                        *  that the USB controller requires) and ensuring that it is locked at the correct frequency for USB operations.\r
+                        */\r
+                       #define USB_OPT_AUTO_PLL                   (0 << 2)\r
+                       //@}\r
+                       \r
+                       /** \name Endpoint/Pipe Type Masks */\r
+                       //@{\r
+                       /** Mask for a CONTROL type endpoint or pipe.\r
+                        *\r
+                        *  \note See \ref Group_EndpointManagement and \ref Group_PipeManagement for endpoint/pipe functions.\r
+                        */\r
+                       #define EP_TYPE_CONTROL                    0x00\r
+\r
+                       /** Mask for an ISOCHRONOUS type endpoint or pipe.\r
+                        *\r
+                        *  \note See \ref Group_EndpointManagement and \ref Group_PipeManagement for endpoint/pipe functions.\r
+                        */\r
+                       #define EP_TYPE_ISOCHRONOUS                0x01\r
+\r
+                       /** Mask for a BULK type endpoint or pipe.\r
+                        *\r
+                        *  \note See \ref Group_EndpointManagement and \ref Group_PipeManagement for endpoint/pipe functions.\r
+                        */\r
+                       #define EP_TYPE_BULK                       0x02\r
+\r
+                       /** Mask for an INTERRUPT type endpoint or pipe.\r
+                        *\r
+                        *  \note See \ref Group_EndpointManagement and \ref Group_PipeManagement for endpoint/pipe functions.\r
+                        */\r
+                       #define EP_TYPE_INTERRUPT                  0x03\r
+                       //@}\r
+\r
+                       #if !defined(USB_STREAM_TIMEOUT_MS) || defined(__DOXYGEN__)\r
+                               /** Constant for the maximum software timeout period of the USB data stream transfer functions\r
+                                *  (both control and standard) when in either device or host mode. If the next packet of a stream\r
+                                *  is not received or acknowledged within this time period, the stream function will fail.\r
+                                *\r
+                                *  This value may be overridden in the user project makefile as the value of the\r
+                                *  \ref USB_STREAM_TIMEOUT_MS token, and passed to the compiler using the -D switch.\r
+                                */\r
+                               #define USB_STREAM_TIMEOUT_MS       100\r
+                       #endif\r
+\r
+               /* Inline Functions: */\r
+                       /** Detaches the device from the USB bus. This has the effect of removing the device from any\r
+                        *  attached host, ceasing USB communications. If no host is present, this prevents any host from\r
+                        *  enumerating the device once attached until \ref USB_Attach() is called.\r
+                        */\r
+                       static inline void USB_Detach(void) ATTR_ALWAYS_INLINE;\r
+                       static inline void USB_Detach(void)\r
+                       {\r
+                               UDCON  |=  (1 << DETACH);\r
+                       }\r
+\r
+                       /** Attaches the device to the USB bus. This announces the device's presence to any attached\r
+                        *  USB host, starting the enumeration process. If no host is present, attaching the device\r
+                        *  will allow for enumeration once a host is connected to the device.\r
+                        *\r
+                        *  This is inexplicably also required for proper operation while in host mode, to enable the\r
+                        *  attachment of a device to the host. This is despite the bit being located in the device-mode\r
+                        *  register and despite the datasheet making no mention of its requirement in host mode.\r
+                        */\r
+                       static inline void USB_Attach(void) ATTR_ALWAYS_INLINE;\r
+                       static inline void USB_Attach(void)\r
+                       {\r
+                               UDCON  &= ~(1 << DETACH);\r
+                       }\r
+\r
+               /* Function Prototypes: */\r
+                       /** Main function to initialize and start the USB interface. Once active, the USB interface will\r
+                        *  allow for device connection to a host when in device mode, or for device enumeration while in\r
+                        *  host mode.\r
+                        *\r
+                        *  As the USB library relies on interrupts for the device and host mode enumeration processes,\r
+                        *  the user must enable global interrupts before or shortly after this function is called. In\r
+                        *  device mode, interrupts must be enabled within 500ms of this function being called to ensure\r
+                        *  that the host does not time out whilst enumerating the device. In host mode, interrupts may be\r
+                        *  enabled at the application's leisure however enumeration will not begin of an attached device\r
+                        *  until after this has occurred.\r
+                        *\r
+                        *  Calling this function when the USB interface is already initialized will cause a complete USB\r
+                        *  interface reset and re-enumeration.\r
+                        *\r
+                        *  \param[in] Mode     This is a mask indicating what mode the USB interface is to be initialized to, a value\r
+                        *                      from the \ref USB_Modes_t enum.\r
+                        *\r
+                        *  \param[in] Options  Mask indicating the options which should be used when initializing the USB\r
+                        *                      interface to control the USB interface's behaviour. This should be comprised of\r
+                        *                      a \c USB_OPT_REG_* mask to control the regulator, a \c USB_OPT_*_PLL mask to control the\r
+                        *                      PLL, and a \c USB_DEVICE_OPT_* mask (when the device mode is enabled) to set the device\r
+                        *                      mode speed.\r
+                        *\r
+                        *  \note To reduce the FLASH requirements of the library if only device or host mode is required,\r
+                        *        the mode can be statically set in the project makefile by defining the token \c USB_DEVICE_ONLY\r
+                        *        (for device mode) or \c USB_HOST_ONLY (for host mode), passing the token to the compiler\r
+                        *        via the -D switch. If the mode is statically set, this parameter does not exist in the\r
+                        *        function prototype.\r
+                        *        \n\n\r
+                        *\r
+                        *  \note To reduce the FLASH requirements of the library if only fixed settings are are required,\r
+                        *        the options may be set statically in the same manner as the mode (see the Mode parameter of\r
+                        *        this function). To statically set the USB options, pass in the \c USE_STATIC_OPTIONS token,\r
+                        *        defined to the appropriate options masks. When the options are statically set, this\r
+                        *        parameter does not exist in the function prototype.\r
+                        *        \n\n\r
+                        *\r
+                        *  \note The mode parameter does not exist on devices where only one mode is possible, such as USB\r
+                        *        AVR models which only implement the USB device mode in hardware.\r
+                        *\r
+                        *  \see \ref Group_Device for the \c USB_DEVICE_OPT_* masks.\r
+                        */\r
+                       void USB_Init(\r
+                                      #if defined(USB_CAN_BE_BOTH) || defined(__DOXYGEN__)\r
+                                      const uint8_t Mode\r
+                                      #endif\r
+\r
+                                      #if (defined(USB_CAN_BE_BOTH) && !defined(USE_STATIC_OPTIONS)) || defined(__DOXYGEN__)\r
+                                      ,\r
+                                      #elif (!defined(USB_CAN_BE_BOTH) && defined(USE_STATIC_OPTIONS))\r
+                                      void\r
+                                      #endif\r
+\r
+                                      #if !defined(USE_STATIC_OPTIONS) || defined(__DOXYGEN__)\r
+                                      const uint8_t Options\r
+                                      #endif\r
+                                      );\r
+\r
+                       /** Shuts down the USB interface. This turns off the USB interface after deallocating all USB FIFO\r
+                        *  memory, endpoints and pipes. When turned off, no USB functionality can be used until the interface\r
+                        *  is restarted with the \ref USB_Init() function.\r
+                        */\r
+                       void USB_Disable(void);\r
+\r
+                       /** Resets the interface, when already initialized. This will re-enumerate the device if already connected\r
+                        *  to a host, or re-enumerate an already attached device when in host mode.\r
+                        */\r
+                       void USB_ResetInterface(void);\r
+\r
+               /* Global Variables: */\r
+                       #if (!defined(USB_HOST_ONLY) && !defined(USB_DEVICE_ONLY)) || defined(__DOXYGEN__)\r
+                               /** Indicates the mode that the USB interface is currently initialized to, a value from the\r
+                                *  \ref USB_Modes_t enum.\r
+                                *\r
+                                *  \note This variable should be treated as read-only in the user application, and never manually\r
+                                *        changed in value.\r
+                                *        \n\n\r
+                                *\r
+                                *  \note When the controller is initialized into UID auto-detection mode, this variable will hold the\r
+                                *        currently selected USB mode (i.e. \ref USB_MODE_Device or \ref USB_MODE_Host). If the controller\r
+                                *        is fixed into a specific mode (either through the \c USB_DEVICE_ONLY or \c USB_HOST_ONLY compile time\r
+                                *        options, or a limitation of the USB controller in the chosen device model) this will evaluate to\r
+                                *        a constant of the appropriate value and will never evaluate to \ref USB_MODE_None even when the\r
+                                *        USB interface is not initialized.\r
+                                */\r
+                               extern volatile uint8_t USB_CurrentMode;\r
+                       #elif defined(USB_HOST_ONLY)\r
+                               #define USB_CurrentMode USB_MODE_Host\r
+                       #elif defined(USB_DEVICE_ONLY)\r
+                               #define USB_CurrentMode USB_MODE_Device\r
+                       #endif\r
+\r
+                       #if !defined(USE_STATIC_OPTIONS) || defined(__DOXYGEN__)\r
+                               /** Indicates the current USB options that the USB interface was initialized with when \ref USB_Init()\r
+                                *  was called. This value will be one of the \c USB_MODE_* masks defined elsewhere in this module.\r
+                                *\r
+                                *  \note This variable should be treated as read-only in the user application, and never manually\r
+                                *        changed in value.\r
+                                */\r
+                               extern volatile uint8_t USB_Options;\r
+                       #elif defined(USE_STATIC_OPTIONS)\r
+                               #define USB_Options USE_STATIC_OPTIONS\r
+                       #endif\r
+\r
+               /* Enums: */\r
+                       /** Enum for the possible USB controller modes, for initialization via \ref USB_Init() and indication back to the\r
+                        *  user application via \ref USB_CurrentMode.\r
+                        */\r
+                       enum USB_Modes_t\r
+                       {\r
+                               USB_MODE_None   = 0, /**< Indicates that the controller is currently not initialized in any specific USB mode. */\r
+                               USB_MODE_Device = 1, /**< Indicates that the controller is currently initialized in USB Device mode. */\r
+                               USB_MODE_Host   = 2, /**< Indicates that the controller is currently initialized in USB Host mode. */\r
+                               USB_MODE_UID    = 3, /**< Indicates that the controller should determine the USB mode from the UID pin of the\r
+                                                     *   USB connector.\r
+                                                     */\r
+                       };\r
+\r
+       /* Private Interface - For use in library only: */\r
+       #if !defined(__DOXYGEN__)\r
+               /* Function Prototypes: */\r
+                       #if defined(__INCLUDE_FROM_USB_CONTROLLER_C)\r
+                               #if defined(USB_CAN_BE_DEVICE)\r
+                               static void USB_Init_Device(void);\r
+                               #endif\r
+\r
+                               #if defined(USB_CAN_BE_HOST)\r
+                               static void USB_Init_Host(void);\r
+                               #endif\r
+                       #endif\r
+\r
+               /* Inline Functions: */\r
+                       static inline void USB_PLL_On(void) ATTR_ALWAYS_INLINE;\r
+                       static inline void USB_PLL_On(void)\r
+                       {\r
+                               PLLCSR  = USB_PLL_PSC;\r
+                               PLLCSR |= (1 << PLLE);\r
+                       }\r
+\r
+                       static inline void USB_PLL_Off(void) ATTR_ALWAYS_INLINE;\r
+                       static inline void USB_PLL_Off(void)\r
+                       {\r
+                               PLLCSR  = 0;\r
+                       }\r
+\r
+                       static inline bool USB_PLL_IsReady(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;\r
+                       static inline bool USB_PLL_IsReady(void)\r
+                       {\r
+                               return ((PLLCSR  &   (1 << PLOCK)) ? true : false);\r
+                       }\r
+\r
+                       static inline void USB_REG_On(void) ATTR_ALWAYS_INLINE;\r
+                       static inline void USB_REG_On(void)\r
+                       {\r
+                       #if defined(USB_SERIES_4_AVR) || defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR)\r
+                               UHWCON  |=  (1 << UVREGE);\r
+                       #else\r
+                               REGCR   &= ~(1 << REGDIS);\r
+                       #endif\r
+                       }\r
+\r
+                       static inline void USB_REG_Off(void) ATTR_ALWAYS_INLINE;\r
+                       static inline void USB_REG_Off(void)\r
+                       {\r
+                       #if defined(USB_SERIES_4_AVR) || defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR)\r
+                               UHWCON  &= ~(1 << UVREGE);\r
+                       #else\r
+                               REGCR   |=  (1 << REGDIS);\r
+                       #endif\r
+                       }\r
+\r
+                       #if defined(USB_SERIES_4_AVR) || defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR)\r
+                       static inline void USB_OTGPAD_On(void) ATTR_ALWAYS_INLINE;\r
+                       static inline void USB_OTGPAD_On(void)\r
+                       {\r
+                               USBCON  |=  (1 << OTGPADE);\r
+                       }\r
+\r
+                       static inline void USB_OTGPAD_Off(void) ATTR_ALWAYS_INLINE;\r
+                       static inline void USB_OTGPAD_Off(void)\r
+                       {\r
+                               USBCON  &= ~(1 << OTGPADE);\r
+                       }\r
+                       #endif\r
+\r
+                       static inline void USB_CLK_Freeze(void) ATTR_ALWAYS_INLINE;\r
+                       static inline void USB_CLK_Freeze(void)\r
+                       {\r
+                               USBCON  |=  (1 << FRZCLK);\r
+                       }\r
+\r
+                       static inline void USB_CLK_Unfreeze(void) ATTR_ALWAYS_INLINE;\r
+                       static inline void USB_CLK_Unfreeze(void)\r
+                       {\r
+                               USBCON  &= ~(1 << FRZCLK);\r
+                       }\r
+\r
+                       static inline void USB_Controller_Enable(void) ATTR_ALWAYS_INLINE;\r
+                       static inline void USB_Controller_Enable(void)\r
+                       {\r
+                               USBCON  |=  (1 << USBE);\r
+                       }\r
+\r
+                       static inline void USB_Controller_Disable(void) ATTR_ALWAYS_INLINE;\r
+                       static inline void USB_Controller_Disable(void)\r
+                       {\r
+                               USBCON  &= ~(1 << USBE);\r
+                       }\r
+\r
+                       static inline void USB_Controller_Reset(void) ATTR_ALWAYS_INLINE;\r
+                       static inline void USB_Controller_Reset(void)\r
+                       {\r
+                               const uint8_t Temp = USBCON;\r
+\r
+                               USBCON = (Temp & ~(1 << USBE));\r
+                               USBCON = (Temp |  (1 << USBE));\r
+                       }\r
+\r
+                       #if defined(USB_CAN_BE_BOTH)\r
+                       static inline uint8_t USB_GetUSBModeFromUID(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;\r
+                       static inline uint8_t USB_GetUSBModeFromUID(void)\r
+                       {\r
+                               if (USBSTA & (1 << ID))\r
+                                 return USB_MODE_Device;\r
+                               else\r
+                                 return USB_MODE_Host;\r
+                       }\r
+                       #endif\r
+\r
+       #endif\r
+\r
+       /* Disable C linkage for C++ Compilers: */\r
+               #if defined(__cplusplus)\r
+                       }\r
+               #endif\r
+\r
+#endif\r
+\r
+/** @} */\r
+\r
diff --git a/LUFA/Drivers/USB/Core/UC3B/USBInterrupt.c b/LUFA/Drivers/USB/Core/UC3B/USBInterrupt.c
new file mode 100644 (file)
index 0000000..1f2468d
--- /dev/null
@@ -0,0 +1,269 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2011.\r
+\r
+  dean [at] fourwalledcubicle [dot] com\r
+           www.lufa-lib.org\r
+*/\r
+\r
+/*\r
+  Copyright 2011  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, distribute, and sell this\r
+  software and its documentation for any purpose is hereby granted\r
+  without fee, provided that the above copyright notice appear in\r
+  all copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+#define  __INCLUDE_FROM_USB_DRIVER\r
+#include "USBInterrupt.h"\r
+\r
+void USB_INT_DisableAllInterrupts(void)\r
+{\r
+       #if defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR)\r
+       USBCON &= ~((1 << VBUSTE) | (1 << IDTE));\r
+       #elif defined(USB_SERIES_4_AVR)\r
+       USBCON &= ~(1 << VBUSTE);\r
+       #endif\r
+\r
+       #if defined(USB_CAN_BE_BOTH)\r
+       OTGIEN  = 0;\r
+       #endif\r
+\r
+       #if defined(USB_CAN_BE_HOST)\r
+       UHIEN   = 0;\r
+       #endif\r
+\r
+       #if defined(USB_CAN_BE_DEVICE)\r
+       UDIEN   = 0;\r
+       #endif\r
+}\r
+\r
+void USB_INT_ClearAllInterrupts(void)\r
+{\r
+       #if defined(USB_SERIES_4_AVR) || defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR)\r
+       USBINT = 0;\r
+       #endif\r
+\r
+       #if defined(USB_CAN_BE_BOTH)\r
+       OTGINT = 0;\r
+       #endif\r
+\r
+       #if defined(USB_CAN_BE_HOST)\r
+       UHINT  = 0;\r
+       #endif\r
+\r
+       #if defined(USB_CAN_BE_DEVICE)\r
+       UDINT  = 0;\r
+       #endif\r
+}\r
+\r
+ISR(USB_GEN_vect, ISR_BLOCK)\r
+{\r
+       #if defined(USB_CAN_BE_DEVICE)\r
+       #if !defined(NO_SOF_EVENTS)\r
+       if (USB_INT_HasOccurred(USB_INT_SOFI) && USB_INT_IsEnabled(USB_INT_SOFI))\r
+       {\r
+               USB_INT_Clear(USB_INT_SOFI);\r
+\r
+               EVENT_USB_Device_StartOfFrame();\r
+       }\r
+       #endif\r
+\r
+       #if defined(USB_SERIES_4_AVR) || defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR)\r
+       if (USB_INT_HasOccurred(USB_INT_VBUS) && USB_INT_IsEnabled(USB_INT_VBUS))\r
+       {\r
+               USB_INT_Clear(USB_INT_VBUS);\r
+\r
+               if (USB_VBUS_GetStatus())\r
+               {\r
+                       USB_DeviceState = DEVICE_STATE_Powered;\r
+                       EVENT_USB_Device_Connect();\r
+               }\r
+               else\r
+               {\r
+                       USB_DeviceState = DEVICE_STATE_Unattached;\r
+                       EVENT_USB_Device_Disconnect();\r
+               }\r
+       }\r
+       #endif\r
+\r
+       if (USB_INT_HasOccurred(USB_INT_SUSPI) && USB_INT_IsEnabled(USB_INT_SUSPI))\r
+       {\r
+               USB_INT_Clear(USB_INT_SUSPI);\r
+\r
+               USB_INT_Disable(USB_INT_SUSPI);\r
+               USB_INT_Enable(USB_INT_WAKEUPI);\r
+\r
+               USB_CLK_Freeze();\r
+\r
+               if (!(USB_Options & USB_OPT_MANUAL_PLL))\r
+                 USB_PLL_Off();\r
+\r
+               #if defined(USB_SERIES_2_AVR) && !defined(NO_LIMITED_CONTROLLER_CONNECT)\r
+               USB_DeviceState = DEVICE_STATE_Unattached;\r
+               EVENT_USB_Device_Disconnect();\r
+               #else\r
+               USB_DeviceState = DEVICE_STATE_Suspended;\r
+               EVENT_USB_Device_Suspend();\r
+               #endif\r
+       }\r
+\r
+       if (USB_INT_HasOccurred(USB_INT_WAKEUPI) && USB_INT_IsEnabled(USB_INT_WAKEUPI))\r
+       {\r
+               if (!(USB_Options & USB_OPT_MANUAL_PLL))\r
+               {\r
+                       USB_PLL_On();\r
+                       while (!(USB_PLL_IsReady()));\r
+               }\r
+\r
+               USB_CLK_Unfreeze();\r
+\r
+               USB_INT_Clear(USB_INT_WAKEUPI);\r
+\r
+               USB_INT_Disable(USB_INT_WAKEUPI);\r
+               USB_INT_Enable(USB_INT_SUSPI);\r
+\r
+               if (USB_ConfigurationNumber)\r
+                 USB_DeviceState = DEVICE_STATE_Configured;\r
+               else\r
+                 USB_DeviceState = (USB_Device_IsAddressSet()) ? DEVICE_STATE_Configured : DEVICE_STATE_Powered;\r
+\r
+               #if defined(USB_SERIES_2_AVR) && !defined(NO_LIMITED_CONTROLLER_CONNECT)\r
+               EVENT_USB_Device_Connect();\r
+               #else\r
+               EVENT_USB_Device_WakeUp();\r
+               #endif\r
+       }\r
+\r
+       if (USB_INT_HasOccurred(USB_INT_EORSTI) && USB_INT_IsEnabled(USB_INT_EORSTI))\r
+       {\r
+               USB_INT_Clear(USB_INT_EORSTI);\r
+\r
+               USB_DeviceState         = DEVICE_STATE_Default;\r
+               USB_ConfigurationNumber = 0;\r
+\r
+               USB_INT_Clear(USB_INT_SUSPI);\r
+               USB_INT_Disable(USB_INT_SUSPI);\r
+               USB_INT_Enable(USB_INT_WAKEUPI);\r
+\r
+               Endpoint_ConfigureEndpoint(ENDPOINT_CONTROLEP, EP_TYPE_CONTROL,\r
+                                          ENDPOINT_DIR_OUT, USB_ControlEndpointSize,\r
+                                          ENDPOINT_BANK_SINGLE);\r
+\r
+               #if defined(INTERRUPT_CONTROL_ENDPOINT)\r
+               USB_INT_Enable(USB_INT_RXSTPI);\r
+               #endif\r
+\r
+               EVENT_USB_Device_Reset();\r
+       }\r
+       #endif\r
+\r
+       #if defined(USB_CAN_BE_HOST)\r
+       #if !defined(NO_SOF_EVENTS)\r
+       if (USB_INT_HasOccurred(USB_INT_HSOFI) && USB_INT_IsEnabled(USB_INT_HSOFI))\r
+       {\r
+               USB_INT_Clear(USB_INT_HSOFI);\r
+\r
+               EVENT_USB_Host_StartOfFrame();\r
+       }\r
+       #endif\r
+\r
+       if (USB_INT_HasOccurred(USB_INT_DDISCI) && USB_INT_IsEnabled(USB_INT_DDISCI))\r
+       {\r
+               USB_INT_Clear(USB_INT_DDISCI);\r
+               USB_INT_Clear(USB_INT_DCONNI);\r
+               USB_INT_Disable(USB_INT_DDISCI);\r
+\r
+               EVENT_USB_Host_DeviceUnattached();\r
+\r
+               USB_ResetInterface();\r
+       }\r
+\r
+       if (USB_INT_HasOccurred(USB_INT_VBERRI) && USB_INT_IsEnabled(USB_INT_VBERRI))\r
+       {\r
+               USB_INT_Clear(USB_INT_VBERRI);\r
+\r
+               USB_Host_VBUS_Manual_Off();\r
+               USB_Host_VBUS_Auto_Off();\r
+\r
+               EVENT_USB_Host_HostError(HOST_ERROR_VBusVoltageDip);\r
+               EVENT_USB_Host_DeviceUnattached();\r
+\r
+               USB_HostState = HOST_STATE_Unattached;\r
+       }\r
+\r
+       if (USB_INT_HasOccurred(USB_INT_SRPI) && USB_INT_IsEnabled(USB_INT_SRPI))\r
+       {\r
+               USB_INT_Clear(USB_INT_SRPI);\r
+               USB_INT_Disable(USB_INT_SRPI);\r
+\r
+               EVENT_USB_Host_DeviceAttached();\r
+\r
+               USB_INT_Enable(USB_INT_DDISCI);\r
+\r
+               USB_HostState = HOST_STATE_Powered;\r
+       }\r
+\r
+       if (USB_INT_HasOccurred(USB_INT_BCERRI) && USB_INT_IsEnabled(USB_INT_BCERRI))\r
+       {\r
+               USB_INT_Clear(USB_INT_BCERRI);\r
+\r
+               EVENT_USB_Host_DeviceEnumerationFailed(HOST_ENUMERROR_NoDeviceDetected, 0);\r
+               EVENT_USB_Host_DeviceUnattached();\r
+\r
+               USB_ResetInterface();\r
+       }\r
+       #endif\r
+\r
+       #if defined(USB_CAN_BE_BOTH)\r
+       if (USB_INT_HasOccurred(USB_INT_IDTI) && USB_INT_IsEnabled(USB_INT_IDTI))\r
+       {\r
+               USB_INT_Clear(USB_INT_IDTI);\r
+\r
+               if (USB_DeviceState != DEVICE_STATE_Unattached)\r
+                 EVENT_USB_Device_Disconnect();\r
+\r
+               if (USB_HostState != HOST_STATE_Unattached)\r
+                 EVENT_USB_Host_DeviceUnattached();\r
+\r
+               USB_CurrentMode = USB_GetUSBModeFromUID();\r
+               USB_ResetInterface();\r
+\r
+               EVENT_USB_UIDChange();\r
+       }\r
+       #endif\r
+}\r
+\r
+#if defined(INTERRUPT_CONTROL_ENDPOINT) && defined(USB_CAN_BE_DEVICE)\r
+ISR(USB_COM_vect, ISR_BLOCK)\r
+{\r
+       uint8_t PrevSelectedEndpoint = Endpoint_GetCurrentEndpoint();\r
+\r
+       Endpoint_SelectEndpoint(ENDPOINT_CONTROLEP);\r
+       USB_INT_Disable(USB_INT_RXSTPI);\r
+\r
+       NONATOMIC_BLOCK(NONATOMIC_FORCEOFF)\r
+       {\r
+               USB_Device_ProcessControlRequest();\r
+       }\r
+\r
+       Endpoint_SelectEndpoint(ENDPOINT_CONTROLEP);\r
+       USB_INT_Enable(USB_INT_RXSTPI);\r
+       Endpoint_SelectEndpoint(PrevSelectedEndpoint);\r
+}\r
+#endif\r
+\r
diff --git a/LUFA/Drivers/USB/Core/UC3B/USBInterrupt.h b/LUFA/Drivers/USB/Core/UC3B/USBInterrupt.h
new file mode 100644 (file)
index 0000000..5de68ed
--- /dev/null
@@ -0,0 +1,102 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2011.\r
+\r
+  dean [at] fourwalledcubicle [dot] com\r
+           www.lufa-lib.org\r
+*/\r
+\r
+/*\r
+  Copyright 2011  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, distribute, and sell this\r
+  software and its documentation for any purpose is hereby granted\r
+  without fee, provided that the above copyright notice appear in\r
+  all copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *  \brief USB Controller Interrupt definitions for the AVR32 UC3B microcontrollers.\r
+ *\r
+ *  This file contains definitions required for the correct handling of low level USB service routine interrupts\r
+ *  from the USB controller.\r
+ *\r
+ *  \note This file should not be included directly. It is automatically included as needed by the USB driver\r
+ *        dispatch header located in LUFA/Drivers/USB/USB.h.\r
+ */\r
+\r
+#ifndef __USBINTERRUPT_UC3B_H__\r
+#define __USBINTERRUPT_UC3B_H__\r
+\r
+       /* Includes: */\r
+               #include "../../../../Common/Common.h"\r
+\r
+       /* Enable C linkage for C++ Compilers: */\r
+               #if defined(__cplusplus)\r
+                       extern "C" {\r
+               #endif\r
+\r
+       /* Preprocessor Checks: */\r
+               #if !defined(__INCLUDE_FROM_USB_DRIVER)\r
+                       #error Do not include this file directly. Include LUFA/Drivers/USB/USB.h instead.\r
+               #endif\r
+\r
+       /* Private Interface - For use in library only: */\r
+       #if !defined(__DOXYGEN__)\r
+               /* Macros: */\r
+                       #define USB_INT_Enable(int)       MACROS{ USB_INT_GET_EN_REG(int)   |=   USB_INT_GET_EN_MASK(int);   }MACROE\r
+                       #define USB_INT_Disable(int)      MACROS{ USB_INT_GET_EN_REG(int)   &= ~(USB_INT_GET_EN_MASK(int));  }MACROE\r
+                       #define USB_INT_Clear(int)        MACROS{ USB_INT_GET_INT_REG(int)  &= ~(USB_INT_GET_INT_MASK(int)); }MACROE\r
+                       #define USB_INT_IsEnabled(int)          ((USB_INT_GET_EN_REG(int)   &    USB_INT_GET_EN_MASK(int))  ? true : false)\r
+                       #define USB_INT_HasOccurred(int)        ((USB_INT_GET_INT_REG(int)  &    USB_INT_GET_INT_MASK(int)) ? true : false)\r
+\r
+                       #define USB_INT_GET_EN_REG(EnableReg, EnableMask, FlagReg, FlagMask)    EnableReg\r
+                       #define USB_INT_GET_EN_MASK(EnableReg, EnableMask, FlagReg, FlagMask)   EnableMask\r
+                       #define USB_INT_GET_INT_REG(EnableReg, EnableMask, FlagReg, FlagMask)   FlagReg\r
+                       #define USB_INT_GET_INT_MASK(EnableReg, EnableMask, FlagReg, FlagMask)  FlagMask\r
+                       \r
+                       #define USB_INT_VBUS     USBCON, (1 << VBUSTE) , USBINT, (1 << VBUSTI)\r
+                       #define USB_INT_IDTI     USBCON, (1 << IDTE)   , USBINT, (1 << IDTI)\r
+                       #define USB_INT_WAKEUPI  UDIEN , (1 << WAKEUPE), UDINT , (1 << WAKEUPI)\r
+                       #define USB_INT_SUSPI    UDIEN , (1 << SUSPE)  , UDINT , (1 << SUSPI)\r
+                       #define USB_INT_EORSTI   UDIEN , (1 << EORSTE) , UDINT , (1 << EORSTI)\r
+                       #define USB_INT_DCONNI   UHIEN , (1 << DCONNE) , UHINT , (1 << DCONNI)\r
+                       #define USB_INT_DDISCI   UHIEN , (1 << DDISCE) , UHINT , (1 << DDISCI)\r
+                       #define USB_INT_BCERRI   OTGIEN, (1 << BCERRE) , OTGINT, (1 << BCERRI)\r
+                       #define USB_INT_VBERRI   OTGIEN, (1 << VBERRE) , OTGINT, (1 << VBERRI)\r
+                       #define USB_INT_SOFI     UDIEN,  (1 << SOFE)   , UDINT , (1 << SOFI)\r
+                       #define USB_INT_HSOFI    UHIEN,  (1 << HSOFE)  , UHINT , (1 << HSOFI)\r
+                       #define USB_INT_RSTI     UHIEN , (1 << RSTE)   , UHINT , (1 << RSTI)\r
+                       #define USB_INT_SRPI     OTGIEN, (1 << SRPE)   , OTGINT, (1 << SRPI)\r
+                       #define USB_INT_RXSTPI   UEIENX, (1 << RXSTPE) , UEINTX, (1 << RXSTPI)\r
+\r
+               /* Includes: */\r
+                       #include "../USBMode.h"\r
+                       #include "../Events.h"\r
+                       #include "../USBController.h"\r
+\r
+               /* Function Prototypes: */\r
+                       void USB_INT_ClearAllInterrupts(void);\r
+                       void USB_INT_DisableAllInterrupts(void);\r
+       #endif\r
+\r
+       /* Disable C linkage for C++ Compilers: */\r
+               #if defined(__cplusplus)\r
+                       }\r
+               #endif\r
+\r
+#endif\r
+\r
index 9cde9db..2df6df2 100644 (file)
@@ -53,6 +53,8 @@
 \r
                #if (ARCH == ARCH_AVR8)\r
                        #include "AVR8/USBController.h"\r
+               #elif (ARCH == ARCH_UC3B)\r
+                       #include "UC3B/USBController.h"         \r
                #endif\r
 \r
        /* Preprocessor Checks and Defines: */\r
index 00adc40..f71c2d0 100644 (file)
@@ -46,6 +46,8 @@
 \r
                #if (ARCH == ARCH_AVR8)\r
                        #include "AVR8/USBInterrupt.h"\r
+               #elif (ARCH == ARCH_UC3B)\r
+                       #include "UC3B/USBInterrupt.h"          \r
                #endif\r
                \r
        /* Preprocessor Checks: */\r
index 1cb1328..4acfda2 100644 (file)
                 */
                #define USB_SERIES_7_AVR
 
+               /** Indicates that the target AVR microcontroller belongs to the UC3B Series USB controller
+                *  (i.e. AT32UC3B*) when defined.
+                */
+               #define USB_SERIES_UC3B_AVR
+
                /** Indicates that the target microcontroller and compilation settings allow for the
                 *  target to be configured in USB Device mode when defined.
                 */
                                #define USB_SERIES_7_AVR
                                #define USB_CAN_BE_DEVICE
                                #define USB_CAN_BE_HOST
+                       #elif (defined(__AVR32_UC3B0512__) || defined(__AVR32_UC3B1512__) || \
+                              defined(__AVR32_UC3B0256__) || defined(__AVR32_UC3B1256__) || \
+                              defined(__AVR32_UC3B0128__) || defined(__AVR32_UC3B1128__) || \
+                              defined(__AVR32_UC3B064__) || defined(__AVR32_UC3B164__))
+                               #define USB_SERIES_UC3B_AVR
+                               #define USB_CAN_BE_DEVICE
+                               #define USB_CAN_BE_HOST
                        #endif
                        
                        #if (defined(USB_CAN_BE_DEVICE) && defined(USB_CAN_BE_HOST))
index 26700f6..04ce841 100644 (file)
@@ -23,6 +23,7 @@
   *   - Added new Serial_SendData() function to the Serial driver
   *   - Added board driver support for the Sparkfun ATMEGA8U2 breakout board
   *   - Started internal restructuring for eventual multiple architecture ports
+  *   - Added start of an AVR32 UC3B architecture port (currently incomplete/experimental)
   *  - Library Applications:
   *   - Added ability to write protect Mass Storage disk write operations from the host OS
   *   - Added new MIDIToneGenerator project
index c987973..b1d7811 100644 (file)
@@ -7,6 +7,22 @@
 /**
  *  \page Page_DeviceSupport Device and Hardware Support
  *
+ *  \section Sec_AVR8_Support Atmel 32-Bit UC3B AVR (UC3B)
+ *  <i>The AVR32 UC3B device support is currently <b>experimental</b>, and is included for preview purposes only.</i>
+ *
+ *  Currently supported UC3B models:
+ *   - AT32UC3B064 (USB Host and Device)
+ *   - AT32UC3B164 (USB Host and Device)
+ *   - AT32UC3B0128 (USB Host and Device)
+ *   - AT32UC3B1128 (USB Host and Device)
+ *   - AT32UC3B0256 (USB Host and Device)
+ *   - AT32UC3B1256 (USB Host and Device)
+ *   - AT32UC3B0512 (USB Host and Device)
+ *   - AT32UC3B1512 (USB Host and Device)
+ *
+ *  Currently supported Atmel boards (see \ref Group_BoardTypes):
+ *   - EVK1101
+ *
  *  \section Sec_AVR8_Support Atmel 8-Bit AVR (AVR8)
  *
  *  Currently supported AVR8 models: