Split out endpoint and pipe stream functions into new EndpointStream.c/.h and PipeStr...
authorDean Camera <dean@fourwalledcubicle.com>
Sun, 22 Aug 2010 13:31:27 +0000 (13:31 +0000)
committerDean Camera <dean@fourwalledcubicle.com>
Sun, 22 Aug 2010 13:31:27 +0000 (13:31 +0000)
22 files changed:
LUFA.pnproj
LUFA/Drivers/USB/HighLevel/EndpointStream.c [new file with mode: 0644]
LUFA/Drivers/USB/HighLevel/EndpointStream.h [new file with mode: 0644]
LUFA/Drivers/USB/HighLevel/PipeStream.c [new file with mode: 0644]
LUFA/Drivers/USB/HighLevel/PipeStream.h [new file with mode: 0644]
LUFA/Drivers/USB/HighLevel/Template/Template_Endpoint_Control_R.c [new file with mode: 0644]
LUFA/Drivers/USB/HighLevel/Template/Template_Endpoint_Control_W.c [new file with mode: 0644]
LUFA/Drivers/USB/HighLevel/Template/Template_Endpoint_RW.c [new file with mode: 0644]
LUFA/Drivers/USB/HighLevel/Template/Template_Pipe_RW.c [new file with mode: 0644]
LUFA/Drivers/USB/LowLevel/Endpoint.c
LUFA/Drivers/USB/LowLevel/Endpoint.h
LUFA/Drivers/USB/LowLevel/Pipe.c
LUFA/Drivers/USB/LowLevel/Pipe.h
LUFA/Drivers/USB/LowLevel/Template/Template_Endpoint_Control_R.c [deleted file]
LUFA/Drivers/USB/LowLevel/Template/Template_Endpoint_Control_W.c [deleted file]
LUFA/Drivers/USB/LowLevel/Template/Template_Endpoint_RW.c [deleted file]
LUFA/Drivers/USB/LowLevel/Template/Template_Pipe_RW.c [deleted file]
LUFA/Drivers/USB/LowLevel/USBController.h
LUFA/Drivers/USB/USB.h
LUFA/ManPages/ChangeLog.txt
LUFA/ManPages/MigrationInformation.txt
LUFA/makefile

index 84e57b4..ac89068 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="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><File path="Demos\Device\ClassDriver\MassStorageKeyboard\Lib\SCSI_Codes.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><File path="Demos\Device\LowLevel\MassStorage\Lib\SCSI_Codes.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\RNDISConstants.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><File path="Demos\Host\LowLevel\MassStorageHost\Lib\SCSI_Codes.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><File path="Demos\Host\LowLevel\RNDISEthernetHost\Lib\RNDISConstants.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\PIMACodes.h"></File><File path="Demos\Host\LowLevel\StillImageHost\Lib\StillImageCommands.c"></File><File path="Demos\Host\LowLevel\StillImageHost\Lib\StillImageCommands.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></Folder><Folder name="Drivers"><Folder name="USB"><Folder name="LowLevel"><Folder name="Template"><File path="LUFA\Drivers\USB\LowLevel\Template\Template_Endpoint_RW.c"></File><File path="LUFA\Drivers\USB\LowLevel\Template\Template_Endpoint_Control_R.c"></File><File path="LUFA\Drivers\USB\LowLevel\Template\Template_Endpoint_Control_W.c"></File><File path="LUFA\Drivers\USB\LowLevel\Template\Template_Pipe_RW.c"></File></Folder><File path="LUFA\Drivers\USB\LowLevel\Pipe.c"></File><File path="LUFA\Drivers\USB\LowLevel\Pipe.h"></File><File path="LUFA\Drivers\USB\LowLevel\Device.h"></File><File path="LUFA\Drivers\USB\LowLevel\Endpoint.c"></File><File path="LUFA\Drivers\USB\LowLevel\Endpoint.h"></File><File path="LUFA\Drivers\USB\LowLevel\Host.c"></File><File path="LUFA\Drivers\USB\LowLevel\Host.h"></File><File path="LUFA\Drivers\USB\LowLevel\OTG.h"></File><File path="LUFA\Drivers\USB\LowLevel\USBInterrupt.c"></File><File path="LUFA\Drivers\USB\LowLevel\USBInterrupt.h"></File><File path="LUFA\Drivers\USB\LowLevel\Device.c"></File><File path="LUFA\Drivers\USB\LowLevel\USBController.c"></File><File path="LUFA\Drivers\USB\LowLevel\USBController.h"></File></Folder><Folder name="HighLevel"><File path="LUFA\Drivers\USB\HighLevel\USBTask.h"></File><File path="LUFA\Drivers\USB\HighLevel\Events.c"></File><File path="LUFA\Drivers\USB\HighLevel\Events.h"></File><File path="LUFA\Drivers\USB\HighLevel\USBTask.c"></File><File path="LUFA\Drivers\USB\HighLevel\StdDescriptors.h"></File><File path="LUFA\Drivers\USB\HighLevel\StdRequestType.h"></File><File path="LUFA\Drivers\USB\HighLevel\StreamCallbacks.h"></File><File path="LUFA\Drivers\USB\HighLevel\USBMode.h"></File><File path="LUFA\Drivers\USB\HighLevel\ConfigDescriptor.c"></File><File path="LUFA\Drivers\USB\HighLevel\ConfigDescriptor.h"></File><File path="LUFA\Drivers\USB\HighLevel\DeviceStandardReq.c"></File><File path="LUFA\Drivers\USB\HighLevel\DeviceStandardReq.h"></File><File path="LUFA\Drivers\USB\HighLevel\HostStandardReq.c"></File><File path="LUFA\Drivers\USB\HighLevel\HostStandardReq.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\HIDParser.c"></File><File path="LUFA\Drivers\USB\Class\Host\HIDParser.h"></File><File path="LUFA\Drivers\USB\Class\Host\HIDReportData.h"></File><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\RNDISConstants.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></Folder><Folder name="Board"><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\AT45DB642D.h"></File><File path="LUFA\Drivers\Board\USBKEY\LEDs.h"></File><File path="LUFA\Drivers\Board\USBKEY\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\AT45DB642D.h"></File><File path="LUFA\Drivers\Board\STK526\LEDs.h"></File><File path="LUFA\Drivers\Board\STK526\Buttons.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\AT45DB321C.h"></File><File path="LUFA\Drivers\Board\STK525\LEDs.h"></File><File path="LUFA\Drivers\Board\STK525\Buttons.h"></File></Folder><Folder name="RZUSBSTICK"><File path="LUFA\Drivers\Board\RZUSBSTICK\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="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="XPLAIN"><File path="LUFA\Drivers\Board\XPLAIN\LEDs.h"></File><File path="LUFA\Drivers\Board\XPLAIN\AT45DB642D.h"></File><File path="LUFA\Drivers\Board\XPLAIN\Dataflash.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\AT45DB321C.h"></File><File path="LUFA\Drivers\Board\EVK527\Dataflash.h"></File></Folder><Folder name="TEENSY"><File path="LUFA\Drivers\Board\TEENSY\LEDs.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="BENITO"><File path="LUFA\Drivers\Board\BENITO\LEDs.h"></File><File path="LUFA\Drivers\Board\BENITO\Buttons.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><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="AVRU4U6U7"><File path="LUFA\Drivers\Peripheral\AVRU4U6U7\ADC.h"></File><File path="LUFA\Drivers\Peripheral\AVRU4U6U7\TWI.h"></File></Folder><File path="LUFA\Drivers\Peripheral\ADC.h"></File><File path="LUFA\Drivers\Peripheral\Serial.c"></File><File path="LUFA\Drivers\Peripheral\Serial.h"></File><File path="LUFA\Drivers\Peripheral\SPI.h"></File><File path="LUFA\Drivers\Peripheral\SerialStream.c"></File><File path="LUFA\Drivers\Peripheral\SerialStream.h"></File><File path="LUFA\Drivers\Peripheral\TWI.h"></File><File path="LUFA\Drivers\Peripheral\TWI.c"></File></Folder></Folder><Folder name="DriverStubs"><File path="LUFA\DriverStubs\Dataflash.h"></File><File path="LUFA\DriverStubs\Joystick.h"></File><File path="LUFA\DriverStubs\LEDs.h"></File><File path="LUFA\DriverStubs\Buttons.h"></File></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><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="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="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><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"><Folder name="Lib"><File path="Projects\Benito\Lib\LightweightRingBuff.h"></File></Folder><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="Board"><File path="Projects\LEDNotifier\Board\LEDs.h"></File></Folder><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="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"><Folder name="Lib"><File path="Projects\USBtoSerial\Lib\LightweightRingBuff.h"></File></Folder><File path="Projects\USBtoSerial\Descriptors.c"></File><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></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><File path="Projects\XPLAINBridge\Lib\LightweightRingBuff.h"></File></Folder><File path="Projects\XPLAINBridge\LUFA XPLAIN Bridge.inf"></File><File path="Projects\XPLAINBridge\makefile"></File><File path="Projects\XPLAINBridge\XPLAINBridge.c"></File><File path="Projects\XPLAINBridge\XPLAINBridge.h"></File><File path="Projects\XPLAINBridge\XPLAINBridge.txt"></File><File path="Projects\XPLAINBridge\USARTDescriptors.c"></File><File path="Projects\XPLAINBridge\USARTDescriptors.h"></File><File path="Projects\XPLAINBridge\AVRISPDescriptors.c"></File><File path="Projects\XPLAINBridge\AVRISPDescriptors.h"></File><File path="Projects\XPLAINBridge\Doxygen.conf"></File><File path="Projects\XPLAINBridge\XPLAINBridge.aps"></File></Folder><Folder name="Incomplete"><Folder name="MIDIToneGenerator"><File path="Projects\Incomplete\MIDIToneGenerator\Descriptors.c"></File><File path="Projects\Incomplete\MIDIToneGenerator\Descriptors.h"></File><File path="Projects\Incomplete\MIDIToneGenerator\makefile"></File><File path="Projects\Incomplete\MIDIToneGenerator\MIDIToneGenerator.c"></File><File path="Projects\Incomplete\MIDIToneGenerator\MIDIToneGenerator.h"></File></Folder><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="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><File path="Demos\Device\ClassDriver\MassStorageKeyboard\Lib\SCSI_Codes.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><File path="Demos\Device\LowLevel\MassStorage\Lib\SCSI_Codes.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\RNDISConstants.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><File path="Demos\Host\LowLevel\MassStorageHost\Lib\SCSI_Codes.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><File path="Demos\Host\LowLevel\RNDISEthernetHost\Lib\RNDISConstants.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\PIMACodes.h"></File><File path="Demos\Host\LowLevel\StillImageHost\Lib\StillImageCommands.c"></File><File path="Demos\Host\LowLevel\StillImageHost\Lib\StillImageCommands.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></Folder><Folder name="Drivers"><Folder name="USB"><Folder name="LowLevel"><File path="LUFA\Drivers\USB\LowLevel\Pipe.c"></File><File path="LUFA\Drivers\USB\LowLevel\Pipe.h"></File><File path="LUFA\Drivers\USB\LowLevel\Device.h"></File><File path="LUFA\Drivers\USB\LowLevel\Endpoint.c"></File><File path="LUFA\Drivers\USB\LowLevel\Endpoint.h"></File><File path="LUFA\Drivers\USB\LowLevel\Host.c"></File><File path="LUFA\Drivers\USB\LowLevel\Host.h"></File><File path="LUFA\Drivers\USB\LowLevel\OTG.h"></File><File path="LUFA\Drivers\USB\LowLevel\USBInterrupt.c"></File><File path="LUFA\Drivers\USB\LowLevel\USBInterrupt.h"></File><File path="LUFA\Drivers\USB\LowLevel\Device.c"></File><File path="LUFA\Drivers\USB\LowLevel\USBController.c"></File><File path="LUFA\Drivers\USB\LowLevel\USBController.h"></File></Folder><Folder name="HighLevel"><Folder name="Template"><File path="LUFA\Drivers\USB\HighLevel\Template\Template_Pipe_RW.c"></File><File path="LUFA\Drivers\USB\HighLevel\Template\Template_Endpoint_RW.c"></File><File path="LUFA\Drivers\USB\HighLevel\Template\Template_Endpoint_Control_W.c"></File><File path="LUFA\Drivers\USB\HighLevel\Template\Template_Endpoint_Control_R.c"></File></Folder><File path="LUFA\Drivers\USB\HighLevel\USBTask.h"></File><File path="LUFA\Drivers\USB\HighLevel\Events.c"></File><File path="LUFA\Drivers\USB\HighLevel\Events.h"></File><File path="LUFA\Drivers\USB\HighLevel\USBTask.c"></File><File path="LUFA\Drivers\USB\HighLevel\StdDescriptors.h"></File><File path="LUFA\Drivers\USB\HighLevel\StdRequestType.h"></File><File path="LUFA\Drivers\USB\HighLevel\StreamCallbacks.h"></File><File path="LUFA\Drivers\USB\HighLevel\USBMode.h"></File><File path="LUFA\Drivers\USB\HighLevel\ConfigDescriptor.c"></File><File path="LUFA\Drivers\USB\HighLevel\ConfigDescriptor.h"></File><File path="LUFA\Drivers\USB\HighLevel\DeviceStandardReq.c"></File><File path="LUFA\Drivers\USB\HighLevel\DeviceStandardReq.h"></File><File path="LUFA\Drivers\USB\HighLevel\HostStandardReq.c"></File><File path="LUFA\Drivers\USB\HighLevel\HostStandardReq.h"></File><File path="LUFA\Drivers\USB\HighLevel\EndpointStream.h"></File><File path="LUFA\Drivers\USB\HighLevel\EndpointStream.c"></File><File path="LUFA\Drivers\USB\HighLevel\PipeStream.h"></File><File path="LUFA\Drivers\USB\HighLevel\PipeStream.c"></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\HIDParser.c"></File><File path="LUFA\Drivers\USB\Class\Host\HIDParser.h"></File><File path="LUFA\Drivers\USB\Class\Host\HIDReportData.h"></File><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\RNDISConstants.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></Folder><Folder name="Board"><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\AT45DB642D.h"></File><File path="LUFA\Drivers\Board\USBKEY\LEDs.h"></File><File path="LUFA\Drivers\Board\USBKEY\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\AT45DB642D.h"></File><File path="LUFA\Drivers\Board\STK526\LEDs.h"></File><File path="LUFA\Drivers\Board\STK526\Buttons.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\AT45DB321C.h"></File><File path="LUFA\Drivers\Board\STK525\LEDs.h"></File><File path="LUFA\Drivers\Board\STK525\Buttons.h"></File></Folder><Folder name="RZUSBSTICK"><File path="LUFA\Drivers\Board\RZUSBSTICK\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="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="XPLAIN"><File path="LUFA\Drivers\Board\XPLAIN\LEDs.h"></File><File path="LUFA\Drivers\Board\XPLAIN\AT45DB642D.h"></File><File path="LUFA\Drivers\Board\XPLAIN\Dataflash.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\AT45DB321C.h"></File><File path="LUFA\Drivers\Board\EVK527\Dataflash.h"></File></Folder><Folder name="TEENSY"><File path="LUFA\Drivers\Board\TEENSY\LEDs.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="BENITO"><File path="LUFA\Drivers\Board\BENITO\LEDs.h"></File><File path="LUFA\Drivers\Board\BENITO\Buttons.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><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="AVRU4U6U7"><File path="LUFA\Drivers\Peripheral\AVRU4U6U7\ADC.h"></File><File path="LUFA\Drivers\Peripheral\AVRU4U6U7\TWI.h"></File></Folder><File path="LUFA\Drivers\Peripheral\ADC.h"></File><File path="LUFA\Drivers\Peripheral\Serial.c"></File><File path="LUFA\Drivers\Peripheral\Serial.h"></File><File path="LUFA\Drivers\Peripheral\SPI.h"></File><File path="LUFA\Drivers\Peripheral\SerialStream.c"></File><File path="LUFA\Drivers\Peripheral\SerialStream.h"></File><File path="LUFA\Drivers\Peripheral\TWI.h"></File><File path="LUFA\Drivers\Peripheral\TWI.c"></File></Folder></Folder><Folder name="DriverStubs"><File path="LUFA\DriverStubs\Dataflash.h"></File><File path="LUFA\DriverStubs\Joystick.h"></File><File path="LUFA\DriverStubs\LEDs.h"></File><File path="LUFA\DriverStubs\Buttons.h"></File></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><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="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="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><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"><Folder name="Lib"><File path="Projects\Benito\Lib\LightweightRingBuff.h"></File></Folder><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="Board"><File path="Projects\LEDNotifier\Board\LEDs.h"></File></Folder><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="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"><Folder name="Lib"><File path="Projects\USBtoSerial\Lib\LightweightRingBuff.h"></File></Folder><File path="Projects\USBtoSerial\Descriptors.c"></File><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></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><File path="Projects\XPLAINBridge\Lib\LightweightRingBuff.h"></File></Folder><File path="Projects\XPLAINBridge\LUFA XPLAIN Bridge.inf"></File><File path="Projects\XPLAINBridge\makefile"></File><File path="Projects\XPLAINBridge\XPLAINBridge.c"></File><File path="Projects\XPLAINBridge\XPLAINBridge.h"></File><File path="Projects\XPLAINBridge\XPLAINBridge.txt"></File><File path="Projects\XPLAINBridge\USARTDescriptors.c"></File><File path="Projects\XPLAINBridge\USARTDescriptors.h"></File><File path="Projects\XPLAINBridge\AVRISPDescriptors.c"></File><File path="Projects\XPLAINBridge\AVRISPDescriptors.h"></File><File path="Projects\XPLAINBridge\Doxygen.conf"></File><File path="Projects\XPLAINBridge\XPLAINBridge.aps"></File></Folder><Folder name="Incomplete"><Folder name="MIDIToneGenerator"><File path="Projects\Incomplete\MIDIToneGenerator\Descriptors.c"></File><File path="Projects\Incomplete\MIDIToneGenerator\Descriptors.h"></File><File path="Projects\Incomplete\MIDIToneGenerator\makefile"></File><File path="Projects\Incomplete\MIDIToneGenerator\MIDIToneGenerator.c"></File><File path="Projects\Incomplete\MIDIToneGenerator\MIDIToneGenerator.h"></File></Folder><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
diff --git a/LUFA/Drivers/USB/HighLevel/EndpointStream.c b/LUFA/Drivers/USB/HighLevel/EndpointStream.c
new file mode 100644 (file)
index 0000000..841f661
--- /dev/null
@@ -0,0 +1,233 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2010.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2010  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 "EndpointStream.h"\r
+\r
+#if !defined(CONTROL_ONLY_DEVICE)\r
+uint8_t Endpoint_Discard_Stream(uint16_t Length\r
+                                __CALLBACK_PARAM)\r
+{\r
+       uint8_t ErrorCode;\r
+       \r
+       if ((ErrorCode = Endpoint_WaitUntilReady()))\r
+         return ErrorCode;\r
+\r
+       #if defined(FAST_STREAM_TRANSFERS)\r
+       uint8_t BytesRemToAlignment = (Endpoint_BytesInEndpoint() & 0x07);\r
+\r
+       if (Length >= 8)\r
+       {\r
+               Length -= BytesRemToAlignment;\r
+\r
+               switch (BytesRemToAlignment)\r
+               {\r
+                       default:\r
+                               do\r
+                               {\r
+                                       if (!(Endpoint_IsReadWriteAllowed()))\r
+                                       {\r
+                                               Endpoint_ClearOUT();\r
+\r
+                                               #if !defined(NO_STREAM_CALLBACKS)\r
+                                               if ((Callback != NULL) && (Callback() == STREAMCALLBACK_Abort))\r
+                                                 return ENDPOINT_RWSTREAM_CallbackAborted;\r
+                                               #endif\r
+\r
+                                               if ((ErrorCode = Endpoint_WaitUntilReady()))\r
+                                                 return ErrorCode;\r
+                                       }\r
+\r
+                                       Length -= 8;\r
+                                       \r
+                                       Endpoint_Discard_Byte();\r
+                       case 7: Endpoint_Discard_Byte();\r
+                       case 6: Endpoint_Discard_Byte();\r
+                       case 5: Endpoint_Discard_Byte();\r
+                       case 4: Endpoint_Discard_Byte();\r
+                       case 3: Endpoint_Discard_Byte();\r
+                       case 2: Endpoint_Discard_Byte();\r
+                       case 1: Endpoint_Discard_Byte();\r
+                               } while (Length >= 8);  \r
+               }\r
+       }\r
+       #endif\r
+\r
+       while (Length)\r
+       {\r
+               if (!(Endpoint_IsReadWriteAllowed()))\r
+               {\r
+                       Endpoint_ClearOUT();\r
+\r
+                       #if !defined(NO_STREAM_CALLBACKS)\r
+                       if ((Callback != NULL) && (Callback() == STREAMCALLBACK_Abort))\r
+                         return ENDPOINT_RWSTREAM_CallbackAborted;\r
+                       #endif\r
+\r
+                       if ((ErrorCode = Endpoint_WaitUntilReady()))\r
+                         return ErrorCode;\r
+               }\r
+               else\r
+               {\r
+                       Endpoint_Discard_Byte();\r
+                       Length--;\r
+               }\r
+       }\r
+       \r
+       return ENDPOINT_RWSTREAM_NoError;\r
+}\r
+\r
+#define  TEMPLATE_FUNC_NAME                        Endpoint_Write_Stream_LE\r
+#define  TEMPLATE_BUFFER_TYPE                      const void*\r
+#define  TEMPLATE_CLEAR_ENDPOINT()                 Endpoint_ClearIN()\r
+#define  TEMPLATE_BUFFER_OFFSET(Length)            0\r
+#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         Endpoint_Write_Byte(*((uint8_t*)BufferPtr++))\r
+#include "Template/Template_Endpoint_RW.c"\r
+\r
+#define  TEMPLATE_FUNC_NAME                        Endpoint_Write_PStream_LE\r
+#define  TEMPLATE_BUFFER_TYPE                      const void*\r
+#define  TEMPLATE_CLEAR_ENDPOINT()                 Endpoint_ClearIN()\r
+#define  TEMPLATE_BUFFER_OFFSET(Length)            0\r
+#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         Endpoint_Write_Byte(pgm_read_byte((uint8_t*)BufferPtr++))\r
+#include "Template/Template_Endpoint_RW.c"\r
+\r
+#define  TEMPLATE_FUNC_NAME                        Endpoint_Write_EStream_LE\r
+#define  TEMPLATE_BUFFER_TYPE                      const void*\r
+#define  TEMPLATE_CLEAR_ENDPOINT()                 Endpoint_ClearIN()\r
+#define  TEMPLATE_BUFFER_OFFSET(Length)            0\r
+#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         Endpoint_Write_Byte(eeprom_read_byte((uint8_t*)BufferPtr++))\r
+#include "Template/Template_Endpoint_RW.c"\r
+\r
+#define  TEMPLATE_FUNC_NAME                        Endpoint_Write_Stream_BE\r
+#define  TEMPLATE_BUFFER_TYPE                      const void*\r
+#define  TEMPLATE_CLEAR_ENDPOINT()                 Endpoint_ClearIN()\r
+#define  TEMPLATE_BUFFER_OFFSET(Length)            (Length - 1)\r
+#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         Endpoint_Write_Byte(*((uint8_t*)BufferPtr--))\r
+#include "Template/Template_Endpoint_RW.c"\r
+\r
+#define  TEMPLATE_FUNC_NAME                        Endpoint_Write_EStream_BE\r
+#define  TEMPLATE_BUFFER_TYPE                      const void*\r
+#define  TEMPLATE_CLEAR_ENDPOINT()                 Endpoint_ClearIN()\r
+#define  TEMPLATE_BUFFER_OFFSET(Length)            (Length - 1)\r
+#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         Endpoint_Write_Byte(eeprom_read_byte((uint8_t*)BufferPtr--))\r
+#include "Template/Template_Endpoint_RW.c"\r
+\r
+#define  TEMPLATE_FUNC_NAME                        Endpoint_Write_PStream_BE\r
+#define  TEMPLATE_BUFFER_TYPE                      const void*\r
+#define  TEMPLATE_CLEAR_ENDPOINT()                 Endpoint_ClearIN()\r
+#define  TEMPLATE_BUFFER_OFFSET(Length)            (Length - 1)\r
+#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         Endpoint_Write_Byte(pgm_read_byte((uint8_t*)BufferPtr--))\r
+#include "Template/Template_Endpoint_RW.c"\r
+\r
+#define  TEMPLATE_FUNC_NAME                        Endpoint_Read_Stream_LE\r
+#define  TEMPLATE_BUFFER_TYPE                      void*\r
+#define  TEMPLATE_CLEAR_ENDPOINT()                 Endpoint_ClearOUT()\r
+#define  TEMPLATE_BUFFER_OFFSET(Length)            0\r
+#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         *((uint8_t*)BufferPtr++) = Endpoint_Read_Byte()\r
+#include "Template/Template_Endpoint_RW.c"\r
+\r
+#define  TEMPLATE_FUNC_NAME                        Endpoint_Read_EStream_LE\r
+#define  TEMPLATE_BUFFER_TYPE                      void*\r
+#define  TEMPLATE_CLEAR_ENDPOINT()                 Endpoint_ClearOUT()\r
+#define  TEMPLATE_BUFFER_OFFSET(Length)            0\r
+#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         eeprom_update_byte((uint8_t*)BufferPtr++, Endpoint_Read_Byte())\r
+#include "Template/Template_Endpoint_RW.c"\r
+\r
+#define  TEMPLATE_FUNC_NAME                        Endpoint_Read_Stream_BE\r
+#define  TEMPLATE_BUFFER_TYPE                      void*\r
+#define  TEMPLATE_CLEAR_ENDPOINT()                 Endpoint_ClearOUT()\r
+#define  TEMPLATE_BUFFER_OFFSET(Length)            (Length - 1)\r
+#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         *((uint8_t*)BufferPtr--) = Endpoint_Read_Byte()\r
+#include "Template/Template_Endpoint_RW.c"\r
+\r
+#define  TEMPLATE_FUNC_NAME                        Endpoint_Read_EStream_BE\r
+#define  TEMPLATE_BUFFER_TYPE                      void*\r
+#define  TEMPLATE_CLEAR_ENDPOINT()                 Endpoint_ClearOUT()\r
+#define  TEMPLATE_BUFFER_OFFSET(Length)            (Length - 1)\r
+#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         eeprom_update_byte((uint8_t*)BufferPtr--, Endpoint_Read_Byte())\r
+#include "Template/Template_Endpoint_RW.c"\r
+\r
+#endif\r
+\r
+#define  TEMPLATE_FUNC_NAME                        Endpoint_Write_Control_Stream_LE\r
+#define  TEMPLATE_BUFFER_OFFSET(Length)            0\r
+#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         Endpoint_Write_Byte(*((uint8_t*)BufferPtr++))\r
+#include "Template/Template_Endpoint_Control_W.c"\r
+\r
+#define  TEMPLATE_FUNC_NAME                        Endpoint_Write_Control_PStream_LE\r
+#define  TEMPLATE_BUFFER_OFFSET(Length)            0\r
+#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         Endpoint_Write_Byte(pgm_read_byte((uint8_t*)BufferPtr++))\r
+#include "Template/Template_Endpoint_Control_W.c"\r
+\r
+#define  TEMPLATE_FUNC_NAME                        Endpoint_Write_Control_EStream_LE\r
+#define  TEMPLATE_BUFFER_OFFSET(Length)            0\r
+#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         Endpoint_Write_Byte(eeprom_read_byte((uint8_t*)BufferPtr++))\r
+#include "Template/Template_Endpoint_Control_W.c"\r
+\r
+#define  TEMPLATE_FUNC_NAME                        Endpoint_Write_Control_Stream_BE\r
+#define  TEMPLATE_BUFFER_OFFSET(Length)            (Length - 1)\r
+#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         Endpoint_Write_Byte(*((uint8_t*)BufferPtr--))\r
+#include "Template/Template_Endpoint_Control_W.c"\r
+\r
+#define  TEMPLATE_FUNC_NAME                        Endpoint_Write_Control_PStream_BE\r
+#define  TEMPLATE_BUFFER_OFFSET(Length)            (Length - 1)\r
+#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         Endpoint_Write_Byte(pgm_read_byte((uint8_t*)BufferPtr--))\r
+#include "Template/Template_Endpoint_Control_W.c"\r
+\r
+#define  TEMPLATE_FUNC_NAME                        Endpoint_Write_Control_EStream_BE\r
+#define  TEMPLATE_BUFFER_OFFSET(Length)            (Length - 1)\r
+#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         Endpoint_Write_Byte(eeprom_read_byte((uint8_t*)BufferPtr--))\r
+#include "Template/Template_Endpoint_Control_W.c"\r
+\r
+#define  TEMPLATE_FUNC_NAME                        Endpoint_Read_Control_Stream_LE\r
+#define  TEMPLATE_BUFFER_OFFSET(Length)            0\r
+#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         *((uint8_t*)BufferPtr++) = Endpoint_Read_Byte()\r
+#include "Template/Template_Endpoint_Control_R.c"\r
+\r
+#define  TEMPLATE_FUNC_NAME                        Endpoint_Read_Control_EStream_LE\r
+#define  TEMPLATE_BUFFER_OFFSET(Length)            0\r
+#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         eeprom_update_byte((uint8_t*)BufferPtr++, Endpoint_Read_Byte())\r
+#include "Template/Template_Endpoint_Control_R.c"\r
+\r
+#define  TEMPLATE_FUNC_NAME                        Endpoint_Read_Control_Stream_BE\r
+#define  TEMPLATE_BUFFER_OFFSET(Length)            (Length - 1)\r
+#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         *((uint8_t*)BufferPtr--) = Endpoint_Read_Byte()\r
+#include "Template/Template_Endpoint_Control_R.c"\r
+\r
+#define  TEMPLATE_FUNC_NAME                        Endpoint_Read_Control_EStream_BE\r
+#define  TEMPLATE_BUFFER_OFFSET(Length)            (Length - 1)\r
+#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         eeprom_update_byte((uint8_t*)BufferPtr--, Endpoint_Read_Byte())\r
+#include "Template/Template_Endpoint_Control_R.c"\r
+\r
+#endif
\ No newline at end of file
diff --git a/LUFA/Drivers/USB/HighLevel/EndpointStream.h b/LUFA/Drivers/USB/HighLevel/EndpointStream.h
new file mode 100644 (file)
index 0000000..ba2cce8
--- /dev/null
@@ -0,0 +1,524 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2010.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2010  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 endpoint stream function definitions.\r
+ *\r
+ *  This file contains structures, function prototypes and macros related to the sending and receiving of\r
+ *  arbitrary data streams through the device's data endpoints when the library is initialized in USB device mode.\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_EndpointStreamRW Read/Write of Multi-Byte Streams\r
+ *\r
+ *  Functions, macros, variables, enums and types related to data reading and writing of data streams from\r
+ *  and to endpoints.\r
+ *\r
+ *  @{\r
+ */ \r
+\r
+#ifndef __ENDPOINT_STREAM_H__\r
+#define __ENDPOINT_STREAM_H__\r
+\r
+       /* Includes: */\r
+               #include <avr/io.h>\r
+               #include <avr/pgmspace.h>\r
+               #include <avr/eeprom.h>\r
+               #include <stdbool.h>\r
+\r
+               #include "../../../Common/Common.h"\r
+               #include "USBTask.h"\r
+\r
+               #if !defined(NO_STREAM_CALLBACKS) || defined(__DOXYGEN__)\r
+                       #include "StreamCallbacks.h"\r
+               #endif\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
+               #if !defined(NO_STREAM_CALLBACKS) || defined(__DOXYGEN__)\r
+                       #define __CALLBACK_PARAM     , StreamCallbackPtr_t Callback\r
+               #else\r
+                       #define __CALLBACK_PARAM\r
+               #endif\r
+\r
+       /* Public Interface - May be used in end-application: */\r
+               /* Enums: */\r
+                       /** Enum for the possible error return codes of the Endpoint_*_Stream_* functions. */\r
+                       enum Endpoint_Stream_RW_ErrorCodes_t\r
+                       {\r
+                               ENDPOINT_RWSTREAM_NoError            = 0, /**< Command completed successfully, no error. */\r
+                               ENDPOINT_RWSTREAM_EndpointStalled    = 1, /**< The endpoint was stalled during the stream\r
+                                                                          *   transfer by the host or device.\r
+                                                                          */\r
+                               ENDPOINT_RWSTREAM_DeviceDisconnected = 2, /**< Device was disconnected from the host during\r
+                                                                          *   the transfer.\r
+                                                                          */\r
+                               ENDPOINT_RWSTREAM_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_RWSTREAM_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
+                               ENDPOINT_RWSTREAM_CallbackAborted    = 5, /**< Indicates that the stream's callback function\r
+                                                                      *   aborted the transfer early.\r
+                                                                          */\r
+                       };\r
+                       \r
+                       /** Enum for the possible error return codes of the Endpoint_*_Control_Stream_* functions. */\r
+                       enum Endpoint_ControlStream_RW_ErrorCodes_t\r
+                       {\r
+                               ENDPOINT_RWCSTREAM_NoError            = 0, /**< Command completed successfully, no error. */\r
+                               ENDPOINT_RWCSTREAM_HostAborted        = 1, /**< The aborted the transfer prematurely. */\r
+                               ENDPOINT_RWCSTREAM_DeviceDisconnected = 2, /**< Device was disconnected from the host during\r
+                                                                           *   the transfer.\r
+                                                                           */\r
+                               ENDPOINT_RWCSTREAM_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
+                       };\r
+\r
+               /* Function Prototypes: */\r
+                       /** Reads and discards the given number of bytes from the endpoint from the given buffer,\r
+                        *  discarding fully read packets from the host as needed. The last packet is not automatically\r
+                        *  discarded once the remaining bytes has been read; the user is responsible for manually\r
+                        *  discarding the last packet from the host via the \ref Endpoint_ClearOUT() macro. Between\r
+                        *  each USB packet, the given stream callback function is executed repeatedly until the next\r
+                        *  packet is ready, allowing for early aborts of stream transfers.\r
+                        *\r
+                        *      The callback routine should be created according to the information in \ref Group_StreamCallbacks.\r
+                        *  If the token NO_STREAM_CALLBACKS is passed via the -D option to the compiler, stream callbacks are\r
+                        *  disabled and this function has the Callback parameter omitted.\r
+                        *\r
+                        *  \note This routine should not be used on CONTROL type endpoints.\r
+                        *\r
+                        *  \param[in] Length    Number of bytes to send via the currently selected endpoint.\r
+                        *  \param[in] Callback  Name of a callback routine to call between successive USB packet transfers, NULL if no callback.\r
+                        *\r
+                        *  \return A value from the \ref Endpoint_Stream_RW_ErrorCodes_t enum.\r
+                        */\r
+                       uint8_t Endpoint_Discard_Stream(uint16_t Length\r
+                                                       __CALLBACK_PARAM);\r
+\r
+                       /** Writes the given number of bytes to the endpoint from the given buffer in little endian,\r
+                        *  sending full packets to the host as needed. The last packet filled is not automatically sent;\r
+                        *  the user is responsible for manually sending the last written packet to the host via the\r
+                        *  \ref Endpoint_ClearIN() macro. Between each USB packet, the given stream callback function\r
+                        *  is executed repeatedly until the endpoint is ready to accept the next packet, allowing for early\r
+                        *  aborts of stream transfers.\r
+                        *\r
+                        *      The callback routine should be created according to the information in \ref Group_StreamCallbacks.\r
+                        *  If the token NO_STREAM_CALLBACKS is passed via the -D option to the compiler, stream callbacks are\r
+                        *  disabled and this function has the Callback parameter omitted.\r
+                        *\r
+                        *  \note This routine should not be used on CONTROL type endpoints.\r
+                        *\r
+                        *  \param[in] Buffer    Pointer to the source data buffer to read from.\r
+                        *  \param[in] Length    Number of bytes to read for the currently selected endpoint into the buffer.\r
+                        *  \param[in] Callback  Name of a callback routine to call between successive USB packet transfers, NULL if no callback.\r
+                        *\r
+                        *  \return A value from the \ref Endpoint_Stream_RW_ErrorCodes_t enum.\r
+                        */\r
+                       uint8_t Endpoint_Write_Stream_LE(const void* Buffer,\r
+                                                        uint16_t Length\r
+                                                        __CALLBACK_PARAM) ATTR_NON_NULL_PTR_ARG(1);\r
+\r
+                       /** EEPROM buffer source version of \ref Endpoint_Write_Stream_LE().\r
+                        *\r
+                        *  \param[in] Buffer    Pointer to the source data buffer to read from.\r
+                        *  \param[in] Length    Number of bytes to read for the currently selected endpoint into the buffer.\r
+                        *  \param[in] Callback  Name of a callback routine to call between successive USB packet transfers, NULL if no callback.\r
+                        *\r
+                        *  \return A value from the \ref Endpoint_Stream_RW_ErrorCodes_t enum.\r
+                        */\r
+                       uint8_t Endpoint_Write_EStream_LE(const void* Buffer,\r
+                                                         uint16_t Length\r
+                                                         __CALLBACK_PARAM) ATTR_NON_NULL_PTR_ARG(1);\r
+\r
+                       /** FLASH buffer source version of \ref Endpoint_Write_Stream_LE().\r
+                        *\r
+                        *  \pre The FLASH data must be located in the first 64KB of FLASH for this function to work correctly.\r
+                        *\r
+                        *  \param[in] Buffer    Pointer to the source data buffer to read from.\r
+                        *  \param[in] Length    Number of bytes to read for the currently selected endpoint into the buffer.\r
+                        *  \param[in] Callback  Name of a callback routine to call between successive USB packet transfers, NULL if no callback.\r
+                        *\r
+                        *  \return A value from the \ref Endpoint_Stream_RW_ErrorCodes_t enum.\r
+                        */\r
+                       uint8_t Endpoint_Write_PStream_LE(const void* Buffer,\r
+                                                         uint16_t Length\r
+                                                         __CALLBACK_PARAM) ATTR_NON_NULL_PTR_ARG(1);\r
+\r
+                       /** Writes the given number of bytes to the endpoint from the given buffer in big endian,\r
+                        *  sending full packets to the host as needed. The last packet filled is not automatically sent;\r
+                        *  the user is responsible for manually sending the last written packet to the host via the\r
+                        *  \ref Endpoint_ClearIN() macro. Between each USB packet, the given stream callback function\r
+                        *  is executed repeatedly until the endpoint is ready to accept the next packet, allowing for early\r
+                        *  aborts of stream transfers.\r
+                        *\r
+                        *      The callback routine should be created according to the information in \ref Group_StreamCallbacks.\r
+                        *  If the token NO_STREAM_CALLBACKS is passed via the -D option to the compiler, stream callbacks are\r
+                        *  disabled and this function has the Callback parameter omitted.\r
+                        *\r
+                        *  \note This routine should not be used on CONTROL type endpoints.\r
+                        *\r
+                        *  \param[in] Buffer    Pointer to the source data buffer to read from.\r
+                        *  \param[in] Length    Number of bytes to read for the currently selected endpoint into the buffer.\r
+                        *  \param[in] Callback  Name of a callback routine to call between successive USB packet transfers, NULL if no callback.\r
+                        *\r
+                        *  \return A value from the \ref Endpoint_Stream_RW_ErrorCodes_t enum.\r
+                        */\r
+                       uint8_t Endpoint_Write_Stream_BE(const void* Buffer,\r
+                                                        uint16_t Length\r
+                                                        __CALLBACK_PARAM) ATTR_NON_NULL_PTR_ARG(1);\r
+\r
+                       /** EEPROM buffer source version of \ref Endpoint_Write_Stream_BE().\r
+                        *\r
+                        *  \param[in] Buffer    Pointer to the source data buffer to read from.\r
+                        *  \param[in] Length    Number of bytes to read for the currently selected endpoint into the buffer.\r
+                        *  \param[in] Callback  Name of a callback routine to call between successive USB packet transfers, NULL if no callback.\r
+                        *\r
+                        *  \return A value from the \ref Endpoint_Stream_RW_ErrorCodes_t enum.\r
+                        */\r
+                       uint8_t Endpoint_Write_EStream_BE(const void* Buffer,\r
+                                                         uint16_t Length\r
+                                                         __CALLBACK_PARAM) ATTR_NON_NULL_PTR_ARG(1);\r
+\r
+                       /** FLASH buffer source version of \ref Endpoint_Write_Stream_BE().\r
+                        *\r
+                        *  \pre The FLASH data must be located in the first 64KB of FLASH for this function to work correctly.\r
+                        *\r
+                        *  \param[in] Buffer    Pointer to the source data buffer to read from.\r
+                        *  \param[in] Length    Number of bytes to read for the currently selected endpoint into the buffer.\r
+                        *  \param[in] Callback  Name of a callback routine to call between successive USB packet transfers, NULL if no callback.\r
+                        *\r
+                        *  \return A value from the \ref Endpoint_Stream_RW_ErrorCodes_t enum.\r
+                        */\r
+                       uint8_t Endpoint_Write_PStream_BE(const void* Buffer,\r
+                                                         uint16_t Length\r
+                                                         __CALLBACK_PARAM) ATTR_NON_NULL_PTR_ARG(1);\r
+\r
+                       /** Reads the given number of bytes from the endpoint from the given buffer in little endian,\r
+                        *  discarding fully read packets from the host as needed. The last packet is not automatically\r
+                        *  discarded once the remaining bytes has been read; the user is responsible for manually\r
+                        *  discarding the last packet from the host via the \ref Endpoint_ClearOUT() macro. Between\r
+                        *  each USB packet, the given stream callback function is executed repeatedly until the endpoint\r
+                        *  is ready to accept the next packet, allowing for early aborts of stream transfers.\r
+                        *\r
+                        *      The callback routine should be created according to the information in \ref Group_StreamCallbacks.\r
+                        *  If the token NO_STREAM_CALLBACKS is passed via the -D option to the compiler, stream callbacks are\r
+                        *  disabled and this function has the Callback parameter omitted.\r
+                        *\r
+                        *  \note This routine should not be used on CONTROL type endpoints.\r
+                        *\r
+                        *  \param[out] Buffer    Pointer to the destination data buffer to write to.\r
+                        *  \param[in]  Length    Number of bytes to send via the currently selected endpoint.\r
+                        *  \param[in]  Callback  Name of a callback routine to call between successive USB packet transfers, NULL if no callback.\r
+                        *\r
+                        *  \return A value from the \ref Endpoint_Stream_RW_ErrorCodes_t enum.\r
+                        */\r
+                       uint8_t Endpoint_Read_Stream_LE(void* Buffer,\r
+                                                       uint16_t Length\r
+                                                       __CALLBACK_PARAM) ATTR_NON_NULL_PTR_ARG(1);\r
+\r
+                       /** EEPROM buffer source version of \ref Endpoint_Read_Stream_LE().\r
+                        *\r
+                        *  \param[out] Buffer    Pointer to the destination data buffer to write to, located in EEPROM memory space.\r
+                        *  \param[in]  Length    Number of bytes to send via the currently selected endpoint.\r
+                        *  \param[in]  Callback  Name of a callback routine to call between successive USB packet transfers, NULL if no callback.\r
+                        *\r
+                        *  \return A value from the \ref Endpoint_Stream_RW_ErrorCodes_t enum.\r
+                        */\r
+                       uint8_t Endpoint_Read_EStream_LE(void* Buffer,\r
+                                                        uint16_t Length\r
+                                                        __CALLBACK_PARAM) ATTR_NON_NULL_PTR_ARG(1);\r
+                       \r
+                       /** Reads the given number of bytes from the endpoint from the given buffer in big endian,\r
+                        *  discarding fully read packets from the host as needed. The last packet is not automatically\r
+                        *  discarded once the remaining bytes has been read; the user is responsible for manually\r
+                        *  discarding the last packet from the host via the \ref Endpoint_ClearOUT() macro. Between\r
+                        *  each USB packet, the given stream callback function is executed repeatedly until the endpoint\r
+                        *  is ready to accept the next packet, allowing for early aborts of stream transfers.\r
+                        *\r
+                        *      The callback routine should be created according to the information in \ref Group_StreamCallbacks.\r
+                        *  If the token NO_STREAM_CALLBACKS is passed via the -D option to the compiler, stream callbacks are\r
+                        *  disabled and this function has the Callback parameter omitted.\r
+                        *\r
+                        *  \note This routine should not be used on CONTROL type endpoints.\r
+                        *\r
+                        *  \param[out] Buffer    Pointer to the destination data buffer to write to.\r
+                        *  \param[in]  Length    Number of bytes to send via the currently selected endpoint.\r
+                        *  \param[in]  Callback  Name of a callback routine to call between successive USB packet transfers, NULL if no callback.\r
+                        *\r
+                        *  \return A value from the \ref Endpoint_Stream_RW_ErrorCodes_t enum.\r
+                        */\r
+                       uint8_t Endpoint_Read_Stream_BE(void* Buffer,\r
+                                                       uint16_t Length\r
+                                                       __CALLBACK_PARAM) ATTR_NON_NULL_PTR_ARG(1);\r
+\r
+                       /** EEPROM buffer source version of \ref Endpoint_Read_Stream_BE().\r
+                        *\r
+                        *  \param[out] Buffer    Pointer to the destination data buffer to write to, located in EEPROM memory space.\r
+                        *  \param[in]  Length    Number of bytes to send via the currently selected endpoint.\r
+                        *  \param[in]  Callback  Name of a callback routine to call between successive USB packet transfers, NULL if no callback.\r
+                        *\r
+                        *  \return A value from the \ref Endpoint_Stream_RW_ErrorCodes_t enum.\r
+                        */\r
+                       uint8_t Endpoint_Read_EStream_BE(void* Buffer,\r
+                                                        uint16_t Length\r
+                                                        __CALLBACK_PARAM) ATTR_NON_NULL_PTR_ARG(1);\r
+\r
+                       /** Writes the given number of bytes to the CONTROL type endpoint from the given buffer in little endian,\r
+                        *  sending full packets to the host as needed. The host OUT acknowledgement is not automatically cleared\r
+                        *  in both failure and success states; the user is responsible for manually clearing the setup OUT to\r
+                        *  finalize the transfer via the \ref Endpoint_ClearOUT() macro.\r
+                        *\r
+                        *  \note This function automatically clears the control transfer's status stage. Do not manually attempt\r
+                        *        to clear the status stage when using this routine in a control transaction.\r
+                        *        \n\n\r
+                        *\r
+                        *  \note This routine should only be used on CONTROL type endpoints.\r
+                        *\r
+                        *  \warning Unlike the standard stream read/write commands, the control stream commands cannot be chained\r
+                        *           together; i.e. the entire stream data must be read or written at the one time.\r
+                        *\r
+                        *  \param[in] Buffer  Pointer to the source data buffer to read from.\r
+                        *  \param[in] Length  Number of bytes to read for the currently selected endpoint into the buffer.\r
+                        *\r
+                        *  \return A value from the \ref Endpoint_ControlStream_RW_ErrorCodes_t enum.\r
+                        */\r
+                       uint8_t Endpoint_Write_Control_Stream_LE(const void* Buffer,\r
+                                                                uint16_t Length) ATTR_NON_NULL_PTR_ARG(1);\r
+\r
+                       /** EEPROM buffer source version of Endpoint_Write_Control_Stream_LE.\r
+                        *\r
+                        *  \note This function automatically clears the control transfer's status stage. Do not manually attempt\r
+                        *        to clear the status stage when using this routine in a control transaction.\r
+                        *        \n\n\r
+                        *\r
+                        *  \note This routine should only be used on CONTROL type endpoints.\r
+                        *\r
+                        *  \warning Unlike the standard stream read/write commands, the control stream commands cannot be chained\r
+                        *           together; i.e. the entire stream data must be read or written at the one time.\r
+                        *\r
+                        *  \param[in] Buffer  Pointer to the source data buffer to read from.\r
+                        *  \param[in] Length  Number of bytes to read for the currently selected endpoint into the buffer.\r
+                        *\r
+                        *  \return A value from the \ref Endpoint_ControlStream_RW_ErrorCodes_t enum.\r
+                        */\r
+                       uint8_t Endpoint_Write_Control_EStream_LE(const void* Buffer,\r
+                                                                 uint16_t Length) ATTR_NON_NULL_PTR_ARG(1);\r
+\r
+                       /** FLASH buffer source version of \ref Endpoint_Write_Control_Stream_LE().\r
+                        *\r
+                        *  \pre The FLASH data must be located in the first 64KB of FLASH for this function to work correctly.\r
+                        *\r
+                        *  \note This function automatically clears the control transfer's status stage. Do not manually attempt\r
+                        *        to clear the status stage when using this routine in a control transaction.\r
+                        *        \n\n\r
+                        *\r
+                        *  \note This routine should only be used on CONTROL type endpoints.\r
+                        *\r
+                        *  \warning Unlike the standard stream read/write commands, the control stream commands cannot be chained\r
+                        *           together; i.e. the entire stream data must be read or written at the one time.\r
+                        *\r
+                        *  \param[in] Buffer  Pointer to the source data buffer to read from.\r
+                        *  \param[in] Length  Number of bytes to read for the currently selected endpoint into the buffer.\r
+                        *\r
+                        *  \return A value from the \ref Endpoint_ControlStream_RW_ErrorCodes_t enum.\r
+                        */\r
+                       uint8_t Endpoint_Write_Control_PStream_LE(const void* Buffer,\r
+                                                                 uint16_t Length) ATTR_NON_NULL_PTR_ARG(1);\r
+\r
+                       /** Writes the given number of bytes to the CONTROL type endpoint from the given buffer in big endian,\r
+                        *  sending full packets to the host as needed. The host OUT acknowledgement is not automatically cleared\r
+                        *  in both failure and success states; the user is responsible for manually clearing the setup OUT to\r
+                        *  finalize the transfer via the \ref Endpoint_ClearOUT() macro.\r
+                        *\r
+                        *  \note This function automatically clears the control transfer's status stage. Do not manually attempt\r
+                        *        to clear the status stage when using this routine in a control transaction.\r
+                        *        \n\n\r
+                        *\r
+                        *  \note This routine should only be used on CONTROL type endpoints.\r
+                        *\r
+                        *  \warning Unlike the standard stream read/write commands, the control stream commands cannot be chained\r
+                        *           together; i.e. the entire stream data must be read or written at the one time.\r
+                        *\r
+                        *  \param[in] Buffer  Pointer to the source data buffer to read from.\r
+                        *  \param[in] Length  Number of bytes to read for the currently selected endpoint into the buffer.\r
+                        *\r
+                        *  \return A value from the \ref Endpoint_ControlStream_RW_ErrorCodes_t enum.\r
+                        */\r
+                       uint8_t Endpoint_Write_Control_Stream_BE(const void* Buffer,\r
+                                                                uint16_t Length) ATTR_NON_NULL_PTR_ARG(1);\r
+\r
+                       /** EEPROM buffer source version of \ref Endpoint_Write_Control_Stream_BE().\r
+                        *\r
+                        *  \note This function automatically clears the control transfer's status stage. Do not manually attempt\r
+                        *        to clear the status stage when using this routine in a control transaction.\r
+                        *        \n\n\r
+                        *\r
+                        *  \note This routine should only be used on CONTROL type endpoints.\r
+                        *\r
+                        *  \warning Unlike the standard stream read/write commands, the control stream commands cannot be chained\r
+                        *           together; i.e. the entire stream data must be read or written at the one time.\r
+                        *\r
+                        *  \param[in] Buffer  Pointer to the source data buffer to read from.\r
+                        *  \param[in] Length  Number of bytes to read for the currently selected endpoint into the buffer.\r
+                        *\r
+                        *  \return A value from the \ref Endpoint_ControlStream_RW_ErrorCodes_t enum.\r
+                        */\r
+                       uint8_t Endpoint_Write_Control_EStream_BE(const void* Buffer,\r
+                                                                 uint16_t Length) ATTR_NON_NULL_PTR_ARG(1);\r
+\r
+                       /** FLASH buffer source version of \ref Endpoint_Write_Control_Stream_BE().\r
+                        *\r
+                        *  \pre The FLASH data must be located in the first 64KB of FLASH for this function to work correctly.\r
+                        *\r
+                        *  \note This function automatically clears the control transfer's status stage. Do not manually attempt\r
+                        *        to clear the status stage when using this routine in a control transaction.\r
+                        *        \n\n\r
+                        *\r
+                        *  \note This routine should only be used on CONTROL type endpoints.\r
+                        *\r
+                        *  \warning Unlike the standard stream read/write commands, the control stream commands cannot be chained\r
+                        *           together; i.e. the entire stream data must be read or written at the one time.\r
+                        *\r
+                        *  \param[in] Buffer  Pointer to the source data buffer to read from.\r
+                        *  \param[in] Length  Number of bytes to read for the currently selected endpoint into the buffer.\r
+                        *\r
+                        *  \return A value from the \ref Endpoint_ControlStream_RW_ErrorCodes_t enum.\r
+                        */\r
+                       uint8_t Endpoint_Write_Control_PStream_BE(const void* Buffer,\r
+                                                                 uint16_t Length) ATTR_NON_NULL_PTR_ARG(1);\r
+\r
+                       /** Reads the given number of bytes from the CONTROL endpoint from the given buffer in little endian,\r
+                        *  discarding fully read packets from the host as needed. The device IN acknowledgement is not\r
+                        *  automatically sent after success or failure states; the user is responsible for manually sending the\r
+                        *  setup IN to finalize the transfer via the \ref Endpoint_ClearIN() macro.\r
+                        *\r
+                        *  \note This function automatically clears the control transfer's status stage. Do not manually attempt\r
+                        *        to clear the status stage when using this routine in a control transaction.\r
+                        *        \n\n\r
+                        *\r
+                        *  \note This routine should only be used on CONTROL type endpoints.\r
+                        *\r
+                        *  \warning Unlike the standard stream read/write commands, the control stream commands cannot be chained\r
+                        *           together; i.e. the entire stream data must be read or written at the one time.\r
+                        *\r
+                        *  \param[out] Buffer  Pointer to the destination data buffer to write to.\r
+                        *  \param[in]  Length  Number of bytes to send via the currently selected endpoint.\r
+                        *\r
+                        *  \return A value from the \ref Endpoint_ControlStream_RW_ErrorCodes_t enum.\r
+                        */\r
+                       uint8_t Endpoint_Read_Control_Stream_LE(void* Buffer,\r
+                                                               uint16_t Length) ATTR_NON_NULL_PTR_ARG(1);\r
+\r
+                       /** EEPROM buffer source version of \ref Endpoint_Read_Control_Stream_LE().\r
+                        *\r
+                        *  \note This function automatically clears the control transfer's status stage. Do not manually attempt\r
+                        *        to clear the status stage when using this routine in a control transaction.\r
+                        *        \n\n\r
+                        *\r
+                        *  \note This routine should only be used on CONTROL type endpoints.\r
+                        *\r
+                        *  \warning Unlike the standard stream read/write commands, the control stream commands cannot be chained\r
+                        *           together; i.e. the entire stream data must be read or written at the one time.\r
+                        *\r
+                        *  \param[out] Buffer  Pointer to the destination data buffer to write to.\r
+                        *  \param[in]  Length  Number of bytes to send via the currently selected endpoint.\r
+                        *\r
+                        *  \return A value from the \ref Endpoint_ControlStream_RW_ErrorCodes_t enum.\r
+                        */\r
+                       uint8_t Endpoint_Read_Control_EStream_LE(void* Buffer,\r
+                                                                uint16_t Length) ATTR_NON_NULL_PTR_ARG(1);\r
+\r
+                       /** Reads the given number of bytes from the CONTROL endpoint from the given buffer in big endian,\r
+                        *  discarding fully read packets from the host as needed. The device IN acknowledgement is not\r
+                        *  automatically sent after success or failure states; the user is responsible for manually sending the\r
+                        *  setup IN to finalize the transfer via the \ref Endpoint_ClearIN() macro.\r
+                        *\r
+                        *  \note This function automatically clears the control transfer's status stage. Do not manually attempt\r
+                        *        to clear the status stage when using this routine in a control transaction.\r
+                        *        \n\n\r
+                        *\r
+                        *  \note This routine should only be used on CONTROL type endpoints.\r
+                        *\r
+                        *  \warning Unlike the standard stream read/write commands, the control stream commands cannot be chained\r
+                        *           together; i.e. the entire stream data must be read or written at the one time.\r
+                        *\r
+                        *  \param[out] Buffer  Pointer to the destination data buffer to write to.\r
+                        *  \param[in]  Length  Number of bytes to send via the currently selected endpoint.\r
+                        *\r
+                        *  \return A value from the \ref Endpoint_ControlStream_RW_ErrorCodes_t enum.\r
+                        */\r
+                       uint8_t Endpoint_Read_Control_Stream_BE(void* Buffer,\r
+                                                               uint16_t Length) ATTR_NON_NULL_PTR_ARG(1);\r
+                       \r
+                       /** EEPROM buffer source version of \ref Endpoint_Read_Control_Stream_BE().\r
+                        *\r
+                        *  \note This function automatically clears the control transfer's status stage. Do not manually attempt\r
+                        *        to clear the status stage when using this routine in a control transaction.\r
+                        *        \n\n\r
+                        *\r
+                        *  \note This routine should only be used on CONTROL type endpoints.\r
+                        *\r
+                        *  \warning Unlike the standard stream read/write commands, the control stream commands cannot be chained\r
+                        *           together; i.e. the entire stream data must be read or written at the one time.\r
+                        *\r
+                        *  \param[out] Buffer  Pointer to the destination data buffer to write to.\r
+                        *  \param[in]  Length  Number of bytes to send via the currently selected endpoint.\r
+                        *\r
+                        *  \return A value from the \ref Endpoint_ControlStream_RW_ErrorCodes_t enum.\r
+                        */\r
+                       uint8_t Endpoint_Read_Control_EStream_BE(void* Buffer,\r
+                                                                uint16_t Length) ATTR_NON_NULL_PTR_ARG(1);\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/USB/HighLevel/PipeStream.c b/LUFA/Drivers/USB/HighLevel/PipeStream.c
new file mode 100644 (file)
index 0000000..72a7e64
--- /dev/null
@@ -0,0 +1,195 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2010.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2010  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 "PipeStream.h"\r
+\r
+uint8_t Pipe_Discard_Stream(uint16_t Length\r
+                            __CALLBACK_PARAM)\r
+{\r
+       uint8_t  ErrorCode;\r
+       \r
+       Pipe_SetPipeToken(PIPE_TOKEN_IN);\r
+\r
+       if ((ErrorCode = Pipe_WaitUntilReady()))\r
+         return ErrorCode;\r
+\r
+       #if defined(FAST_STREAM_TRANSFERS)\r
+       uint8_t BytesRemToAlignment = (Pipe_BytesInPipe() & 0x07);\r
+\r
+       if (Length >= 8)\r
+       {\r
+               Length -= BytesRemToAlignment;\r
+\r
+               switch (BytesRemToAlignment)\r
+               {\r
+                       default:\r
+                               do\r
+                               {\r
+                                       if (!(Pipe_IsReadWriteAllowed()))\r
+                                       {\r
+                                               Pipe_ClearIN();\r
+                                                       \r
+                                               #if !defined(NO_STREAM_CALLBACKS)\r
+                                               if ((Callback != NULL) && (Callback() == STREAMCALLBACK_Abort))\r
+                                                 return PIPE_RWSTREAM_CallbackAborted;\r
+                                               #endif\r
+\r
+                                               if ((ErrorCode = Pipe_WaitUntilReady()))\r
+                                                 return ErrorCode;\r
+                                       }\r
+\r
+                                       Length -= 8;\r
+                                       \r
+                                       Pipe_Discard_Byte();\r
+                       case 7: Pipe_Discard_Byte();\r
+                       case 6: Pipe_Discard_Byte();\r
+                       case 5: Pipe_Discard_Byte();\r
+                       case 4: Pipe_Discard_Byte();\r
+                       case 3: Pipe_Discard_Byte();\r
+                       case 2: Pipe_Discard_Byte();\r
+                       case 1: Pipe_Discard_Byte();\r
+                               } while (Length >= 8);  \r
+               }\r
+       }\r
+       #endif\r
+\r
+       while (Length)\r
+       {\r
+               if (!(Pipe_IsReadWriteAllowed()))\r
+               {\r
+                       Pipe_ClearIN();\r
+                               \r
+                       #if !defined(NO_STREAM_CALLBACKS)\r
+                       if ((Callback != NULL) && (Callback() == STREAMCALLBACK_Abort))\r
+                         return PIPE_RWSTREAM_CallbackAborted;\r
+                       #endif\r
+\r
+                       if ((ErrorCode = Pipe_WaitUntilReady()))\r
+                         return ErrorCode;\r
+               }\r
+               else\r
+               {\r
+                       Pipe_Discard_Byte();\r
+                       Length--;\r
+               }\r
+       }\r
+\r
+       return PIPE_RWSTREAM_NoError;\r
+}\r
+\r
+/* The following abuses the C preprocessor in order to copy-past common code with slight alterations,\r
+ * so that the code needs to be written once. It is a crude form of templating to reduce code maintenance. */\r
+\r
+#define  TEMPLATE_FUNC_NAME                        Pipe_Write_Stream_LE\r
+#define  TEMPLATE_BUFFER_TYPE                      const void*\r
+#define  TEMPLATE_TOKEN                            PIPE_TOKEN_OUT\r
+#define  TEMPLATE_CLEAR_PIPE()                     Pipe_ClearOUT()\r
+#define  TEMPLATE_BUFFER_OFFSET(Length)            0\r
+#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         Pipe_Write_Byte(*((uint8_t*)BufferPtr++))\r
+#include "Template/Template_Pipe_RW.c"\r
+\r
+#define  TEMPLATE_FUNC_NAME                        Pipe_Write_PStream_LE\r
+#define  TEMPLATE_BUFFER_TYPE                      const void*\r
+#define  TEMPLATE_TOKEN                            PIPE_TOKEN_OUT\r
+#define  TEMPLATE_CLEAR_PIPE()                     Pipe_ClearOUT()\r
+#define  TEMPLATE_BUFFER_OFFSET(Length)            0\r
+#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         Pipe_Write_Byte(pgm_read_byte((uint8_t*)BufferPtr++))\r
+#include "Template/Template_Pipe_RW.c"\r
+\r
+#define  TEMPLATE_FUNC_NAME                        Pipe_Write_EStream_LE\r
+#define  TEMPLATE_BUFFER_TYPE                      const void*\r
+#define  TEMPLATE_TOKEN                            PIPE_TOKEN_OUT\r
+#define  TEMPLATE_CLEAR_PIPE()                     Pipe_ClearOUT()\r
+#define  TEMPLATE_BUFFER_OFFSET(Length)            0\r
+#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         Pipe_Write_Byte(eeprom_read_byte((uint8_t*)BufferPtr++))\r
+#include "Template/Template_Pipe_RW.c"\r
+\r
+#define  TEMPLATE_FUNC_NAME                        Pipe_Write_Stream_BE\r
+#define  TEMPLATE_BUFFER_TYPE                      const void*\r
+#define  TEMPLATE_TOKEN                            PIPE_TOKEN_OUT\r
+#define  TEMPLATE_CLEAR_PIPE()                     Pipe_ClearOUT()\r
+#define  TEMPLATE_BUFFER_OFFSET(Length)            (Length - 1)\r
+#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         Pipe_Write_Byte(*((uint8_t*)BufferPtr--))\r
+#include "Template/Template_Pipe_RW.c"\r
+\r
+#define  TEMPLATE_FUNC_NAME                        Pipe_Write_PStream_BE\r
+#define  TEMPLATE_BUFFER_TYPE                      const void*\r
+#define  TEMPLATE_TOKEN                            PIPE_TOKEN_OUT\r
+#define  TEMPLATE_CLEAR_PIPE()                     Pipe_ClearOUT()\r
+#define  TEMPLATE_BUFFER_OFFSET(Length)            (Length - 1)\r
+#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         Pipe_Write_Byte(pgm_read_byte((uint8_t*)BufferPtr--))\r
+#include "Template/Template_Pipe_RW.c"\r
+\r
+#define  TEMPLATE_FUNC_NAME                        Pipe_Write_EStream_BE\r
+#define  TEMPLATE_BUFFER_TYPE                      const void*\r
+#define  TEMPLATE_TOKEN                            PIPE_TOKEN_OUT\r
+#define  TEMPLATE_CLEAR_PIPE()                     Pipe_ClearOUT()\r
+#define  TEMPLATE_BUFFER_OFFSET(Length)            (Length - 1)\r
+#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         Pipe_Write_Byte(eeprom_read_byte((uint8_t*)BufferPtr--))\r
+#include "Template/Template_Pipe_RW.c"\r
+\r
+#define  TEMPLATE_FUNC_NAME                        Pipe_Read_Stream_LE\r
+#define  TEMPLATE_BUFFER_TYPE                      void*\r
+#define  TEMPLATE_TOKEN                            PIPE_TOKEN_IN\r
+#define  TEMPLATE_CLEAR_PIPE()                     Pipe_ClearIN()\r
+#define  TEMPLATE_BUFFER_OFFSET(Length)            0\r
+#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         *((uint8_t*)BufferPtr++) = Pipe_Read_Byte()\r
+#include "Template/Template_Pipe_RW.c"\r
+\r
+#define  TEMPLATE_FUNC_NAME                        Pipe_Read_EStream_LE\r
+#define  TEMPLATE_BUFFER_TYPE                      void*\r
+#define  TEMPLATE_TOKEN                            PIPE_TOKEN_IN\r
+#define  TEMPLATE_CLEAR_PIPE()                     Pipe_ClearIN()\r
+#define  TEMPLATE_BUFFER_OFFSET(Length)            0\r
+#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         eeprom_update_byte((uint8_t*)BufferPtr++, Pipe_Read_Byte())\r
+#include "Template/Template_Pipe_RW.c"\r
+\r
+#define  TEMPLATE_FUNC_NAME                        Pipe_Read_Stream_BE\r
+#define  TEMPLATE_BUFFER_TYPE                      void*\r
+#define  TEMPLATE_TOKEN                            PIPE_TOKEN_IN\r
+#define  TEMPLATE_CLEAR_PIPE()                     Pipe_ClearIN()\r
+#define  TEMPLATE_BUFFER_OFFSET(Length)            (Length - 1)\r
+#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         *((uint8_t*)BufferPtr--) = Pipe_Read_Byte()\r
+#include "Template/Template_Pipe_RW.c"\r
+\r
+#define  TEMPLATE_FUNC_NAME                        Pipe_Read_EStream_BE\r
+#define  TEMPLATE_BUFFER_TYPE                      void*\r
+#define  TEMPLATE_TOKEN                            PIPE_TOKEN_IN\r
+#define  TEMPLATE_CLEAR_PIPE()                     Pipe_ClearIN()\r
+#define  TEMPLATE_BUFFER_OFFSET(Length)            (Length - 1)\r
+#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         eeprom_update_byte((uint8_t*)BufferPtr--, Pipe_Read_Byte())\r
+#include "Template/Template_Pipe_RW.c"\r
+\r
+#endif\r
diff --git a/LUFA/Drivers/USB/HighLevel/PipeStream.h b/LUFA/Drivers/USB/HighLevel/PipeStream.h
new file mode 100644 (file)
index 0000000..ba5df57
--- /dev/null
@@ -0,0 +1,298 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2010.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2010  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 pipe stream function definitions.\r
+ *\r
+ *  This file contains structures, function prototypes and macros related to the sending and receiving of\r
+ *  arbitrary data streams through the device's data pipes when the library is initialized in USB host mode.\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_PipeStreamRW Read/Write of Multi-Byte Streams\r
+ *\r
+ *  Functions, macros, variables, enums and types related to data reading and writing of data streams from\r
+ *  and to pipes.\r
+ *\r
+ *  @{\r
+ */\r
+\r
+#ifndef __PIPE_STREAM_H__\r
+#define __PIPE_STREAM_H__\r
+\r
+       /* Includes: */\r
+               #include <avr/io.h>\r
+               #include <avr/pgmspace.h>\r
+               #include <avr/eeprom.h>\r
+               #include <stdbool.h>\r
+\r
+               #include "../../../Common/Common.h"\r
+               #include "USBTask.h"\r
+\r
+               #if !defined(NO_STREAM_CALLBACKS) || defined(__DOXYGEN__)\r
+                       #include "StreamCallbacks.h"\r
+               #endif\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
+               #if !defined(NO_STREAM_CALLBACKS) || defined(__DOXYGEN__)\r
+                       #define __CALLBACK_PARAM     , StreamCallbackPtr_t Callback\r
+               #else\r
+                       #define __CALLBACK_PARAM\r
+               #endif\r
+               \r
+       /* Public Interface - May be used in end-application: */\r
+               /* Enums: */\r
+                       /** Enum for the possible error return codes of the Pipe_*_Stream_* functions. */\r
+                       enum Pipe_Stream_RW_ErrorCodes_t\r
+                       {\r
+                               PIPE_RWSTREAM_NoError            = 0, /**< Command completed successfully, no error. */\r
+                               PIPE_RWSTREAM_PipeStalled        = 1, /**< The device stalled the pipe during the transfer. */          \r
+                               PIPE_RWSTREAM_DeviceDisconnected = 2, /**< Device was disconnected from the host during\r
+                                                                  *   the transfer.\r
+                                                                  */           \r
+                               PIPE_RWSTREAM_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
+                               PIPE_RWSTREAM_CallbackAborted    = 4, /**< Indicates that the stream's callback function aborted\r
+                                                                  *   the transfer early.\r
+                                                                      */\r
+                       };\r
+\r
+               /* Function Prototypes: */\r
+                       /** Reads and discards the given number of bytes from the pipe, discarding fully read packets from the host\r
+                        *  as needed. The last packet is not automatically discarded once the remaining bytes has been read; the\r
+                        *  user is responsible for manually discarding the last packet from the device via the \ref Pipe_ClearIN() macro.\r
+                        *  Between each USB packet, the given stream callback function is executed repeatedly until the next packet is ready,\r
+                        *  allowing for early aborts of stream transfers.\r
+                        *\r
+                        *      The callback routine should be created according to the information in \ref Group_StreamCallbacks.\r
+                        *  If the token NO_STREAM_CALLBACKS is passed via the -D option to the compiler, stream callbacks are\r
+                        *  disabled and this function has the Callback parameter omitted.\r
+                        *\r
+                        *  The pipe token is set automatically, thus this can be used on bi-directional pipes directly without\r
+                        *  having to explicitly change the data direction with a call to \ref Pipe_SetPipeToken().\r
+                        *\r
+                        *  \param[in] Length    Number of bytes to send via the currently selected pipe.\r
+                        *  \param[in] Callback  Name of a callback routine to call between successive USB packet transfers, NULL if no callback.\r
+                        *\r
+                        *  \return A value from the \ref Pipe_Stream_RW_ErrorCodes_t enum.\r
+                        */\r
+                       uint8_t Pipe_Discard_Stream(uint16_t Length\r
+                                                   __CALLBACK_PARAM);\r
+\r
+                       /** Writes the given number of bytes to the pipe from the given buffer in little endian,\r
+                        *  sending full packets to the device as needed. The last packet filled is not automatically sent;\r
+                        *  the user is responsible for manually sending the last written packet to the host via the\r
+                        *  \ref Pipe_ClearOUT() macro. Between each USB packet, the given stream callback function is\r
+                        *  executed repeatedly until the next packet is ready, allowing for early aborts of stream transfers.\r
+                        *\r
+                        *      The callback routine should be created according to the information in \ref Group_StreamCallbacks.\r
+                        *  If the token NO_STREAM_CALLBACKS is passed via the -D option to the compiler, stream callbacks are\r
+                        *  disabled and this function has the Callback parameter omitted.\r
+                        *\r
+                        *  The pipe token is set automatically, thus this can be used on bi-directional pipes directly without\r
+                        *  having to explicitly change the data direction with a call to \ref Pipe_SetPipeToken().\r
+                        *\r
+                        *  \param[in] Buffer    Pointer to the source data buffer to read from.\r
+                        *  \param[in] Length    Number of bytes to read for the currently selected pipe into the buffer.\r
+                        *  \param[in] Callback  Name of a callback routine to call between successive USB packet transfers, NULL if no callback.\r
+                        *\r
+                        *  \return A value from the \ref Pipe_Stream_RW_ErrorCodes_t enum.\r
+                        */\r
+                       uint8_t Pipe_Write_Stream_LE(const void* Buffer,\r
+                                                    uint16_t Length\r
+                                                    __CALLBACK_PARAM) ATTR_NON_NULL_PTR_ARG(1);\r
+\r
+                       /** EEPROM buffer source version of \ref Pipe_Write_Stream_LE().\r
+                        *\r
+                        *  \param[in] Buffer    Pointer to the source data buffer to read from.\r
+                        *  \param[in] Length    Number of bytes to read for the currently selected pipe into the buffer.\r
+                        *  \param[in] Callback  Name of a callback routine to call between successive USB packet transfers, NULL if no callback.\r
+                        *\r
+                        *  \return A value from the \ref Pipe_Stream_RW_ErrorCodes_t enum.\r
+                        */\r
+                       uint8_t Pipe_Write_EStream_LE(const void* Buffer,\r
+                                                     uint16_t Length\r
+                                                     __CALLBACK_PARAM) ATTR_NON_NULL_PTR_ARG(1);\r
+                       \r
+                       /** FLASH buffer source version of \ref Pipe_Write_Stream_LE().\r
+                        *\r
+                        *  \pre The FLASH data must be located in the first 64KB of FLASH for this function to work correctly.\r
+                        *\r
+                        *  \param[in] Buffer    Pointer to the source data buffer to read from.\r
+                        *  \param[in] Length    Number of bytes to read for the currently selected pipe into the buffer.\r
+                        *  \param[in] Callback  Name of a callback routine to call between successive USB packet transfers, NULL if no callback.\r
+                        *\r
+                        *  \return A value from the \ref Pipe_Stream_RW_ErrorCodes_t enum.\r
+                        */\r
+                       uint8_t Pipe_Write_PStream_LE(const void* Buffer,\r
+                                                     uint16_t Length\r
+                                                     __CALLBACK_PARAM) ATTR_NON_NULL_PTR_ARG(1);\r
+                       \r
+                       /** Writes the given number of bytes to the pipe from the given buffer in big endian,\r
+                        *  sending full packets to the device as needed. The last packet filled is not automatically sent;\r
+                        *  the user is responsible for manually sending the last written packet to the host via the\r
+                        *  \ref Pipe_ClearOUT() macro. Between each USB packet, the given stream callback function is\r
+                        *  executed repeatedly until the next packet is ready, allowing for early aborts of stream transfers.\r
+                        *\r
+                        *      The callback routine should be created according to the information in \ref Group_StreamCallbacks.\r
+                        *  If the token NO_STREAM_CALLBACKS is passed via the -D option to the compiler, stream callbacks are\r
+                        *  disabled and this function has the Callback parameter omitted.\r
+                        *\r
+                        *  The pipe token is set automatically, thus this can be used on bi-directional pipes directly without\r
+                        *  having to explicitly change the data direction with a call to \ref Pipe_SetPipeToken().\r
+                        *\r
+                        *  \param[in] Buffer    Pointer to the source data buffer to read from.\r
+                        *  \param[in] Length    Number of bytes to read for the currently selected pipe into the buffer.\r
+                        *  \param[in] Callback  Name of a callback routine to call between successive USB packet transfers, NULL if no callback.\r
+                        *\r
+                        *  \return A value from the \ref Pipe_Stream_RW_ErrorCodes_t enum.\r
+                        */\r
+                       uint8_t Pipe_Write_Stream_BE(const void* Buffer,\r
+                                                    uint16_t Length\r
+                                                    __CALLBACK_PARAM) ATTR_NON_NULL_PTR_ARG(1);\r
+\r
+                       /** EEPROM buffer source version of \ref Pipe_Write_Stream_BE().\r
+                        *\r
+                        *  \param[in] Buffer    Pointer to the source data buffer to read from.\r
+                        *  \param[in] Length    Number of bytes to read for the currently selected pipe into the buffer.\r
+                        *  \param[in] Callback  Name of a callback routine to call between successive USB packet transfers, NULL if no callback.\r
+                        *\r
+                        *  \return A value from the \ref Pipe_Stream_RW_ErrorCodes_t enum.\r
+                        */\r
+                       uint8_t Pipe_Write_EStream_BE(const void* Buffer,\r
+                                                     uint16_t Length\r
+                                                     __CALLBACK_PARAM) ATTR_NON_NULL_PTR_ARG(1);\r
+                       \r
+                       /** FLASH buffer source version of \ref Pipe_Write_Stream_BE().\r
+                        *\r
+                        *  \pre The FLASH data must be located in the first 64KB of FLASH for this function to work correctly.\r
+                        *\r
+                        *  \param[in] Buffer    Pointer to the source data buffer to read from.\r
+                        *  \param[in] Length    Number of bytes to read for the currently selected pipe into the buffer.\r
+                        *  \param[in] Callback  Name of a callback routine to call between successive USB packet transfers, NULL if no callback.\r
+                        *\r
+                        *  \return A value from the \ref Pipe_Stream_RW_ErrorCodes_t enum.\r
+                        */\r
+                       uint8_t Pipe_Write_PStream_BE(const void* Buffer,\r
+                                                     uint16_t Length\r
+                                                     __CALLBACK_PARAM) ATTR_NON_NULL_PTR_ARG(1);\r
+\r
+                       /** Reads the given number of bytes from the pipe into the given buffer in little endian,\r
+                        *  sending full packets to the device as needed. The last packet filled is not automatically sent;\r
+                        *  the user is responsible for manually sending the last written packet to the host via the\r
+                        *  \ref Pipe_ClearIN() macro. Between each USB packet, the given stream callback function is\r
+                        *  executed repeatedly until the next packet is ready, allowing for early aborts of stream transfers.\r
+                        *\r
+                        *      The callback routine should be created according to the information in \ref Group_StreamCallbacks.\r
+                        *  If the token NO_STREAM_CALLBACKS is passed via the -D option to the compiler, stream callbacks are\r
+                        *  disabled and this function has the Callback parameter omitted.\r
+                        *\r
+                        *  The pipe token is set automatically, thus this can be used on bi-directional pipes directly without\r
+                        *  having to explicitly change the data direction with a call to \ref Pipe_SetPipeToken().\r
+                        *\r
+                        *  \param[out] Buffer    Pointer to the source data buffer to write to.\r
+                        *  \param[in]  Length    Number of bytes to read for the currently selected pipe to read from.\r
+                        *  \param[in]  Callback  Name of a callback routine to call between successive USB packet transfers, NULL if no callback.\r
+                        *\r
+                        *  \return A value from the \ref Pipe_Stream_RW_ErrorCodes_t enum.\r
+                        */\r
+                       uint8_t Pipe_Read_Stream_LE(void* Buffer,\r
+                                                   uint16_t Length\r
+                                                   __CALLBACK_PARAM) ATTR_NON_NULL_PTR_ARG(1);\r
+\r
+                       /** EEPROM buffer source version of \ref Pipe_Read_Stream_LE().\r
+                        *\r
+                        *  \param[out] Buffer    Pointer to the source data buffer to write to.\r
+                        *  \param[in]  Length    Number of bytes to read for the currently selected pipe to read from.\r
+                        *  \param[in]  Callback  Name of a callback routine to call between successive USB packet transfers, NULL if no callback.\r
+                        *\r
+                        *  \return A value from the \ref Pipe_Stream_RW_ErrorCodes_t enum.\r
+                        */\r
+                       uint8_t Pipe_Read_EStream_LE(void* Buffer,\r
+                                                    uint16_t Length\r
+                                                    __CALLBACK_PARAM) ATTR_NON_NULL_PTR_ARG(1);\r
+\r
+                       /** Reads the given number of bytes from the pipe into the given buffer in big endian,\r
+                        *  sending full packets to the device as needed. The last packet filled is not automatically sent;\r
+                        *  the user is responsible for manually sending the last written packet to the host via the\r
+                        *  \ref Pipe_ClearIN() macro. Between each USB packet, the given stream callback function is\r
+                        *  executed repeatedly until the next packet is ready, allowing for early aborts of stream transfers.\r
+                        *\r
+                        *      The callback routine should be created according to the information in \ref Group_StreamCallbacks.\r
+                        *  If the token NO_STREAM_CALLBACKS is passed via the -D option to the compiler, stream callbacks are\r
+                        *  disabled and this function has the Callback parameter omitted.\r
+                        *\r
+                        *  The pipe token is set automatically, thus this can be used on bi-directional pipes directly without\r
+                        *  having to explicitly change the data direction with a call to \ref Pipe_SetPipeToken().\r
+                        *\r
+                        *  \param[out] Buffer    Pointer to the source data buffer to write to.\r
+                        *  \param[in]  Length    Number of bytes to read for the currently selected pipe to read from.\r
+                        *  \param[in]  Callback  Name of a callback routine to call between successive USB packet transfers, NULL if no callback.\r
+                        *\r
+                        *  \return A value from the \ref Pipe_Stream_RW_ErrorCodes_t enum.\r
+                        */\r
+                       uint8_t Pipe_Read_Stream_BE(void* Buffer,\r
+                                                   uint16_t Length\r
+                                                   __CALLBACK_PARAM) ATTR_NON_NULL_PTR_ARG(1);\r
+                       \r
+                       /** EEPROM buffer source version of \ref Pipe_Read_Stream_BE().\r
+                        *\r
+                        *  \param[out] Buffer    Pointer to the source data buffer to write to.\r
+                        *  \param[in]  Length    Number of bytes to read for the currently selected pipe to read from.\r
+                        *  \param[in]  Callback  Name of a callback routine to call between successive USB packet transfers, NULL if no callback.\r
+                        *\r
+                        *  \return A value from the \ref Pipe_Stream_RW_ErrorCodes_t enum.\r
+                        */\r
+                       uint8_t Pipe_Read_EStream_BE(void* Buffer,\r
+                                                    uint16_t Length\r
+                                                    __CALLBACK_PARAM) ATTR_NON_NULL_PTR_ARG(1);\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/USB/HighLevel/Template/Template_Endpoint_Control_R.c b/LUFA/Drivers/USB/HighLevel/Template/Template_Endpoint_Control_R.c
new file mode 100644 (file)
index 0000000..43abe6e
--- /dev/null
@@ -0,0 +1,45 @@
+uint8_t TEMPLATE_FUNC_NAME (void* Buffer,
+                            uint16_t Length)
+{
+       uint8_t* DataStream = ((uint8_t*)Buffer + TEMPLATE_BUFFER_OFFSET(Length));
+       
+       if (!(Length))
+         Endpoint_ClearOUT();
+       
+       while (Length)
+       {
+               if (Endpoint_IsSETUPReceived())
+                 return ENDPOINT_RWCSTREAM_HostAborted;
+
+               if (USB_DeviceState == DEVICE_STATE_Unattached)
+                 return ENDPOINT_RWCSTREAM_DeviceDisconnected;
+               else if (USB_DeviceState == DEVICE_STATE_Suspended)
+                 return ENDPOINT_RWCSTREAM_BusSuspended;
+                 
+               if (Endpoint_IsOUTReceived())
+               {
+                       while (Length && Endpoint_BytesInEndpoint())
+                       {
+                               TEMPLATE_TRANSFER_BYTE(DataStream);
+                               Length--;
+                       }
+                       
+                       Endpoint_ClearOUT();
+               }                 
+       }
+       
+       while (!(Endpoint_IsINReady()))
+       {
+               if (USB_DeviceState == DEVICE_STATE_Unattached)
+                 return ENDPOINT_RWCSTREAM_DeviceDisconnected;
+               else if (USB_DeviceState == DEVICE_STATE_Suspended)
+                 return ENDPOINT_RWCSTREAM_BusSuspended;
+       }
+       
+       return ENDPOINT_RWCSTREAM_NoError;
+}
+
+
+#undef TEMPLATE_BUFFER_OFFSET
+#undef TEMPLATE_FUNC_NAME
+#undef TEMPLATE_TRANSFER_BYTE
\ No newline at end of file
diff --git a/LUFA/Drivers/USB/HighLevel/Template/Template_Endpoint_Control_W.c b/LUFA/Drivers/USB/HighLevel/Template/Template_Endpoint_Control_W.c
new file mode 100644 (file)
index 0000000..dc2c37d
--- /dev/null
@@ -0,0 +1,54 @@
+uint8_t TEMPLATE_FUNC_NAME (const void* Buffer,
+                            uint16_t Length)
+{
+       uint8_t* DataStream     = ((uint8_t*)Buffer + TEMPLATE_BUFFER_OFFSET(Length));
+       bool     LastPacketFull = false;
+       
+       if (Length > USB_ControlRequest.wLength)
+         Length = USB_ControlRequest.wLength;
+       else if (!(Length))
+         Endpoint_ClearIN();
+
+       while (Length || LastPacketFull)
+       {
+               if (Endpoint_IsSETUPReceived())
+                 return ENDPOINT_RWCSTREAM_HostAborted;
+
+               if (Endpoint_IsOUTReceived())
+                 break;
+               
+               if (USB_DeviceState == DEVICE_STATE_Unattached)
+                 return ENDPOINT_RWCSTREAM_DeviceDisconnected;
+               else if (USB_DeviceState == DEVICE_STATE_Suspended)
+                 return ENDPOINT_RWCSTREAM_BusSuspended;
+                 
+               if (Endpoint_IsINReady())
+               {
+                       uint8_t BytesInEndpoint = Endpoint_BytesInEndpoint();
+               
+                       while (Length && (BytesInEndpoint < USB_ControlEndpointSize))
+                       {
+                               TEMPLATE_TRANSFER_BYTE(DataStream);
+                               Length--;
+                               BytesInEndpoint++;
+                       }
+                       
+                       LastPacketFull = (BytesInEndpoint == USB_ControlEndpointSize);
+                       Endpoint_ClearIN();
+               }
+       }
+       
+       while (!(Endpoint_IsOUTReceived()))
+       {
+               if (USB_DeviceState == DEVICE_STATE_Unattached)
+                 return ENDPOINT_RWCSTREAM_DeviceDisconnected;
+               else if (USB_DeviceState == DEVICE_STATE_Suspended)
+                 return ENDPOINT_RWCSTREAM_BusSuspended;
+       }
+
+       return ENDPOINT_RWCSTREAM_NoError;
+}
+
+#undef TEMPLATE_BUFFER_OFFSET
+#undef TEMPLATE_FUNC_NAME
+#undef TEMPLATE_TRANSFER_BYTE
\ No newline at end of file
diff --git a/LUFA/Drivers/USB/HighLevel/Template/Template_Endpoint_RW.c b/LUFA/Drivers/USB/HighLevel/Template/Template_Endpoint_RW.c
new file mode 100644 (file)
index 0000000..fc9df95
--- /dev/null
@@ -0,0 +1,79 @@
+uint8_t TEMPLATE_FUNC_NAME (TEMPLATE_BUFFER_TYPE Buffer,
+                            uint16_t Length
+                            __CALLBACK_PARAM)
+{
+       uint8_t* DataStream = ((uint8_t*)Buffer + TEMPLATE_BUFFER_OFFSET(Length));
+       uint8_t  ErrorCode;
+       
+       if ((ErrorCode = Endpoint_WaitUntilReady()))
+         return ErrorCode;
+
+       #if defined(FAST_STREAM_TRANSFERS)
+       uint8_t BytesRemToAlignment = (Endpoint_BytesInEndpoint() & 0x07);
+
+       if (Length >= 8)
+       {
+               Length -= BytesRemToAlignment;
+
+               switch (BytesRemToAlignment)
+               {
+                       default:
+                               do
+                               {
+                                       if (!(Endpoint_IsReadWriteAllowed()))
+                                       {
+                                               TEMPLATE_CLEAR_ENDPOINT();
+
+                                               #if !defined(NO_STREAM_CALLBACKS)
+                                               if ((Callback != NULL) && (Callback() == STREAMCALLBACK_Abort))
+                                                 return ENDPOINT_RWSTREAM_CallbackAborted;
+                                               #endif
+
+                                               if ((ErrorCode = Endpoint_WaitUntilReady()))
+                                                 return ErrorCode;
+                                       }
+
+                                       Length -= 8;
+                                       
+                                       TEMPLATE_TRANSFER_BYTE(DataStream);
+                       case 7: TEMPLATE_TRANSFER_BYTE(DataStream);
+                       case 6: TEMPLATE_TRANSFER_BYTE(DataStream);
+                       case 5: TEMPLATE_TRANSFER_BYTE(DataStream);
+                       case 4: TEMPLATE_TRANSFER_BYTE(DataStream);
+                       case 3: TEMPLATE_TRANSFER_BYTE(DataStream);
+                       case 2: TEMPLATE_TRANSFER_BYTE(DataStream);
+                       case 1: TEMPLATE_TRANSFER_BYTE(DataStream);
+                               } while (Length >= 8);  
+               }
+       }
+       #endif
+
+       while (Length)
+       {
+               if (!(Endpoint_IsReadWriteAllowed()))
+               {
+                       TEMPLATE_CLEAR_ENDPOINT();
+
+                       #if !defined(NO_STREAM_CALLBACKS)
+                       if ((Callback != NULL) && (Callback() == STREAMCALLBACK_Abort))
+                         return ENDPOINT_RWSTREAM_CallbackAborted;
+                       #endif
+
+                       if ((ErrorCode = Endpoint_WaitUntilReady()))
+                         return ErrorCode;
+               }
+               else
+               {
+                       TEMPLATE_TRANSFER_BYTE(DataStream);
+                       Length--;
+               }
+       }
+
+       return ENDPOINT_RWSTREAM_NoError;
+}
+
+#undef TEMPLATE_FUNC_NAME
+#undef TEMPLATE_BUFFER_TYPE
+#undef TEMPLATE_TRANSFER_BYTE
+#undef TEMPLATE_CLEAR_ENDPOINT
+#undef TEMPLATE_BUFFER_OFFSET
\ No newline at end of file
diff --git a/LUFA/Drivers/USB/HighLevel/Template/Template_Pipe_RW.c b/LUFA/Drivers/USB/HighLevel/Template/Template_Pipe_RW.c
new file mode 100644 (file)
index 0000000..fb64dd8
--- /dev/null
@@ -0,0 +1,82 @@
+uint8_t TEMPLATE_FUNC_NAME (TEMPLATE_BUFFER_TYPE Buffer,
+                            uint16_t Length
+                            __CALLBACK_PARAM)
+{
+       uint8_t* DataStream = ((uint8_t*)Buffer + TEMPLATE_BUFFER_OFFSET(Length));
+       uint8_t  ErrorCode;
+       
+       Pipe_SetPipeToken(TEMPLATE_TOKEN);
+
+       if ((ErrorCode = Pipe_WaitUntilReady()))
+         return ErrorCode;
+
+       #if defined(FAST_STREAM_TRANSFERS)
+       uint8_t BytesRemToAlignment = (Pipe_BytesInPipe() & 0x07);
+
+       if (Length >= 8)
+       {
+               Length -= BytesRemToAlignment;
+
+               switch (BytesRemToAlignment)
+               {
+                       default:
+                               do
+                               {
+                                       if (!(Pipe_IsReadWriteAllowed()))
+                                       {
+                                               TEMPLATE_CLEAR_PIPE();
+
+                                               #if !defined(NO_STREAM_CALLBACKS)
+                                               if ((Callback != NULL) && (Callback() == STREAMCALLBACK_Abort))
+                                                 return PIPE_RWSTREAM_CallbackAborted;
+                                               #endif
+
+                                               if ((ErrorCode = Pipe_WaitUntilReady()))
+                                                 return ErrorCode;
+                                       }
+
+                                       Length -= 8;
+                                       
+                                       TEMPLATE_TRANSFER_BYTE(DataStream);
+                       case 7: TEMPLATE_TRANSFER_BYTE(DataStream);
+                       case 6: TEMPLATE_TRANSFER_BYTE(DataStream);
+                       case 5: TEMPLATE_TRANSFER_BYTE(DataStream);
+                       case 4: TEMPLATE_TRANSFER_BYTE(DataStream);
+                       case 3: TEMPLATE_TRANSFER_BYTE(DataStream);
+                       case 2: TEMPLATE_TRANSFER_BYTE(DataStream);
+                       case 1: TEMPLATE_TRANSFER_BYTE(DataStream);
+                               } while (Length >= 8);  
+               }
+       }
+       #endif
+
+       while (Length)
+       {
+               if (!(Pipe_IsReadWriteAllowed()))
+               {
+                       TEMPLATE_CLEAR_PIPE();
+
+                       #if !defined(NO_STREAM_CALLBACKS)
+                       if ((Callback != NULL) && (Callback() == STREAMCALLBACK_Abort))
+                         return PIPE_RWSTREAM_CallbackAborted;
+                       #endif
+
+                       if ((ErrorCode = Pipe_WaitUntilReady()))
+                         return ErrorCode;
+               }
+               else
+               {
+                       TEMPLATE_TRANSFER_BYTE(DataStream);
+                       Length--;
+               }
+       }
+       
+       return PIPE_RWSTREAM_NoError;
+}
+
+#undef TEMPLATE_FUNC_NAME
+#undef TEMPLATE_BUFFER_TYPE
+#undef TEMPLATE_TOKEN
+#undef TEMPLATE_TRANSFER_BYTE
+#undef TEMPLATE_CLEAR_PIPE
+#undef TEMPLATE_BUFFER_OFFSET
index f1ed2f9..742e618 100644 (file)
@@ -33,7 +33,6 @@
 
 #if defined(USB_CAN_BE_DEVICE)
 
-#define  __INCLUDE_FROM_ENDPOINT_C
 #include "Endpoint.h"
 
 #if !defined(FIXED_CONTROL_ENDPOINT_SIZE)
@@ -161,205 +160,6 @@ uint8_t Endpoint_WaitUntilReady(void)
                }
        }
 }
-
-uint8_t Endpoint_Discard_Stream(uint16_t Length
-#if !defined(NO_STREAM_CALLBACKS)
-                                , StreamCallbackPtr_t Callback
 #endif
-                                )
-{
-       uint8_t  ErrorCode;
-       
-       if ((ErrorCode = Endpoint_WaitUntilReady()))
-         return ErrorCode;
-
-       #if defined(FAST_STREAM_TRANSFERS)
-       uint8_t BytesRemToAlignment = (Endpoint_BytesInEndpoint() & 0x07);
-
-       if (Length >= 8)
-       {
-               Length -= BytesRemToAlignment;
-
-               switch (BytesRemToAlignment)
-               {
-                       default:
-                               do
-                               {
-                                       if (!(Endpoint_IsReadWriteAllowed()))
-                                       {
-                                               Endpoint_ClearOUT();
-
-                                               #if !defined(NO_STREAM_CALLBACKS)
-                                               if ((Callback != NULL) && (Callback() == STREAMCALLBACK_Abort))
-                                                 return ENDPOINT_RWSTREAM_CallbackAborted;
-                                               #endif
-
-                                               if ((ErrorCode = Endpoint_WaitUntilReady()))
-                                                 return ErrorCode;
-                                       }
-
-                                       Length -= 8;
-                                       
-                                       Endpoint_Discard_Byte();
-                       case 7: Endpoint_Discard_Byte();
-                       case 6: Endpoint_Discard_Byte();
-                       case 5: Endpoint_Discard_Byte();
-                       case 4: Endpoint_Discard_Byte();
-                       case 3: Endpoint_Discard_Byte();
-                       case 2: Endpoint_Discard_Byte();
-                       case 1: Endpoint_Discard_Byte();
-                               } while (Length >= 8);  
-               }
-       }
-       #endif
-
-       while (Length)
-       {
-               if (!(Endpoint_IsReadWriteAllowed()))
-               {
-                       Endpoint_ClearOUT();
-
-                       #if !defined(NO_STREAM_CALLBACKS)
-                       if ((Callback != NULL) && (Callback() == STREAMCALLBACK_Abort))
-                         return ENDPOINT_RWSTREAM_CallbackAborted;
-                       #endif
-
-                       if ((ErrorCode = Endpoint_WaitUntilReady()))
-                         return ErrorCode;
-               }
-               else
-               {
-                       Endpoint_Discard_Byte();
-                       Length--;
-               }
-       }
-       
-       return ENDPOINT_RWSTREAM_NoError;
-}
-
-/* The following abuses the C preprocessor in order to copy-past common code with slight alterations,
- * so that the code needs to be written once. It is a crude form of templating to reduce code maintenance. */
-
-#define  TEMPLATE_FUNC_NAME                        Endpoint_Write_Stream_LE
-#define  TEMPLATE_BUFFER_TYPE                      const void*
-#define  TEMPLATE_CLEAR_ENDPOINT()                 Endpoint_ClearIN()
-#define  TEMPLATE_BUFFER_OFFSET(Length)            0
-#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         Endpoint_Write_Byte(*((uint8_t*)BufferPtr++))
-#include "Template/Template_Endpoint_RW.c"
-
-#define  TEMPLATE_FUNC_NAME                        Endpoint_Write_PStream_LE
-#define  TEMPLATE_BUFFER_TYPE                      const void*
-#define  TEMPLATE_CLEAR_ENDPOINT()                 Endpoint_ClearIN()
-#define  TEMPLATE_BUFFER_OFFSET(Length)            0
-#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         Endpoint_Write_Byte(pgm_read_byte((uint8_t*)BufferPtr++))
-#include "Template/Template_Endpoint_RW.c"
-
-#define  TEMPLATE_FUNC_NAME                        Endpoint_Write_EStream_LE
-#define  TEMPLATE_BUFFER_TYPE                      const void*
-#define  TEMPLATE_CLEAR_ENDPOINT()                 Endpoint_ClearIN()
-#define  TEMPLATE_BUFFER_OFFSET(Length)            0
-#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         Endpoint_Write_Byte(eeprom_read_byte((uint8_t*)BufferPtr++))
-#include "Template/Template_Endpoint_RW.c"
-
-#define  TEMPLATE_FUNC_NAME                        Endpoint_Write_Stream_BE
-#define  TEMPLATE_BUFFER_TYPE                      const void*
-#define  TEMPLATE_CLEAR_ENDPOINT()                 Endpoint_ClearIN()
-#define  TEMPLATE_BUFFER_OFFSET(Length)            (Length - 1)
-#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         Endpoint_Write_Byte(*((uint8_t*)BufferPtr--))
-#include "Template/Template_Endpoint_RW.c"
-
-#define  TEMPLATE_FUNC_NAME                        Endpoint_Write_EStream_BE
-#define  TEMPLATE_BUFFER_TYPE                      const void*
-#define  TEMPLATE_CLEAR_ENDPOINT()                 Endpoint_ClearIN()
-#define  TEMPLATE_BUFFER_OFFSET(Length)            (Length - 1)
-#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         Endpoint_Write_Byte(eeprom_read_byte((uint8_t*)BufferPtr--))
-#include "Template/Template_Endpoint_RW.c"
-
-#define  TEMPLATE_FUNC_NAME                        Endpoint_Write_PStream_BE
-#define  TEMPLATE_BUFFER_TYPE                      const void*
-#define  TEMPLATE_CLEAR_ENDPOINT()                 Endpoint_ClearIN()
-#define  TEMPLATE_BUFFER_OFFSET(Length)            (Length - 1)
-#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         Endpoint_Write_Byte(pgm_read_byte((uint8_t*)BufferPtr--))
-#include "Template/Template_Endpoint_RW.c"
-
-#define  TEMPLATE_FUNC_NAME                        Endpoint_Read_Stream_LE
-#define  TEMPLATE_BUFFER_TYPE                      void*
-#define  TEMPLATE_CLEAR_ENDPOINT()                 Endpoint_ClearOUT()
-#define  TEMPLATE_BUFFER_OFFSET(Length)            0
-#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         *((uint8_t*)BufferPtr++) = Endpoint_Read_Byte()
-#include "Template/Template_Endpoint_RW.c"
-
-#define  TEMPLATE_FUNC_NAME                        Endpoint_Read_EStream_LE
-#define  TEMPLATE_BUFFER_TYPE                      void*
-#define  TEMPLATE_CLEAR_ENDPOINT()                 Endpoint_ClearOUT()
-#define  TEMPLATE_BUFFER_OFFSET(Length)            0
-#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         eeprom_update_byte((uint8_t*)BufferPtr++, Endpoint_Read_Byte())
-#include "Template/Template_Endpoint_RW.c"
-
-#define  TEMPLATE_FUNC_NAME                        Endpoint_Read_Stream_BE
-#define  TEMPLATE_BUFFER_TYPE                      void*
-#define  TEMPLATE_CLEAR_ENDPOINT()                 Endpoint_ClearOUT()
-#define  TEMPLATE_BUFFER_OFFSET(Length)            (Length - 1)
-#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         *((uint8_t*)BufferPtr--) = Endpoint_Read_Byte()
-#include "Template/Template_Endpoint_RW.c"
-
-#define  TEMPLATE_FUNC_NAME                        Endpoint_Read_EStream_BE
-#define  TEMPLATE_BUFFER_TYPE                      void*
-#define  TEMPLATE_CLEAR_ENDPOINT()                 Endpoint_ClearOUT()
-#define  TEMPLATE_BUFFER_OFFSET(Length)            (Length - 1)
-#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         eeprom_update_byte((uint8_t*)BufferPtr--, Endpoint_Read_Byte())
-#include "Template/Template_Endpoint_RW.c"
-
-#endif
-
-#define  TEMPLATE_FUNC_NAME                        Endpoint_Write_Control_Stream_LE
-#define  TEMPLATE_BUFFER_OFFSET(Length)            0
-#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         Endpoint_Write_Byte(*((uint8_t*)BufferPtr++))
-#include "Template/Template_Endpoint_Control_W.c"
-
-#define  TEMPLATE_FUNC_NAME                        Endpoint_Write_Control_PStream_LE
-#define  TEMPLATE_BUFFER_OFFSET(Length)            0
-#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         Endpoint_Write_Byte(pgm_read_byte((uint8_t*)BufferPtr++))
-#include "Template/Template_Endpoint_Control_W.c"
-
-#define  TEMPLATE_FUNC_NAME                        Endpoint_Write_Control_EStream_LE
-#define  TEMPLATE_BUFFER_OFFSET(Length)            0
-#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         Endpoint_Write_Byte(eeprom_read_byte((uint8_t*)BufferPtr++))
-#include "Template/Template_Endpoint_Control_W.c"
-
-#define  TEMPLATE_FUNC_NAME                        Endpoint_Write_Control_Stream_BE
-#define  TEMPLATE_BUFFER_OFFSET(Length)            (Length - 1)
-#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         Endpoint_Write_Byte(*((uint8_t*)BufferPtr--))
-#include "Template/Template_Endpoint_Control_W.c"
-
-#define  TEMPLATE_FUNC_NAME                        Endpoint_Write_Control_PStream_BE
-#define  TEMPLATE_BUFFER_OFFSET(Length)            (Length - 1)
-#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         Endpoint_Write_Byte(pgm_read_byte((uint8_t*)BufferPtr--))
-#include "Template/Template_Endpoint_Control_W.c"
-
-#define  TEMPLATE_FUNC_NAME                        Endpoint_Write_Control_EStream_BE
-#define  TEMPLATE_BUFFER_OFFSET(Length)            (Length - 1)
-#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         Endpoint_Write_Byte(eeprom_read_byte((uint8_t*)BufferPtr--))
-#include "Template/Template_Endpoint_Control_W.c"
-
-#define  TEMPLATE_FUNC_NAME                        Endpoint_Read_Control_Stream_LE
-#define  TEMPLATE_BUFFER_OFFSET(Length)            0
-#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         *((uint8_t*)BufferPtr++) = Endpoint_Read_Byte()
-#include "Template/Template_Endpoint_Control_R.c"
-
-#define  TEMPLATE_FUNC_NAME                        Endpoint_Read_Control_EStream_LE
-#define  TEMPLATE_BUFFER_OFFSET(Length)            0
-#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         eeprom_update_byte((uint8_t*)BufferPtr++, Endpoint_Read_Byte())
-#include "Template/Template_Endpoint_Control_R.c"
-
-#define  TEMPLATE_FUNC_NAME                        Endpoint_Read_Control_Stream_BE
-#define  TEMPLATE_BUFFER_OFFSET(Length)            (Length - 1)
-#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         *((uint8_t*)BufferPtr--) = Endpoint_Read_Byte()
-#include "Template/Template_Endpoint_Control_R.c"
-
-#define  TEMPLATE_FUNC_NAME                        Endpoint_Read_Control_EStream_BE
-#define  TEMPLATE_BUFFER_OFFSET(Length)            (Length - 1)
-#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         eeprom_update_byte((uint8_t*)BufferPtr--, Endpoint_Read_Byte())
-#include "Template/Template_Endpoint_Control_R.c"
 
 #endif
index 48e6605..0b0a472 100644 (file)
  *        dispatch header located in LUFA/Drivers/USB/USB.h.
  */
 
-/** \ingroup Group_USB
- *  @defgroup Group_EndpointManagement Endpoint Management
- *
- *  Functions, macros and enums related to endpoint management when in USB Device mode. This
- *  module contains the endpoint management macros, as well as endpoint interrupt and data
- *  send/receive functions for various data types.
- *
- *  @{
- */
-
-/** @defgroup Group_EndpointRW Endpoint Data Reading and Writing
+/** \ingroup Group_EndpointManagement
+ *  @defgroup Group_EndpointRW Endpoint Data Reading and Writing
  *
  *  Functions, macros, variables, enums and types related to data reading and writing from and to endpoints.
  */
  
-/** \ingroup Group_EndpointRW  
+/** \ingroup Group_EndpointRW
  *  @defgroup Group_EndpointPrimitiveRW Read/Write of Primitive Data Types
  *
  *  Functions, macros, variables, enums and types related to data reading and writing of primitive data types
  *  from and to endpoints.
  */ 
 
-/** \ingroup Group_EndpointRW  
- *  @defgroup Group_EndpointStreamRW Read/Write of Multi-Byte Streams
+/** \ingroup Group_EndpointManagement
+ *  @defgroup Group_EndpointPacketManagement Endpoint Packet Management
  *
- *  Functions, macros, variables, enums and types related to data reading and writing of data streams from
- *  and to endpoints.
- */ 
+ *  Functions, macros, variables, enums and types related to packet management of endpoints.
+ */
 
-/** @defgroup Group_EndpointPacketManagement Endpoint Packet Management
+/** \ingroup Group_USB
+ *  @defgroup Group_EndpointManagement Endpoint Management
  *
- *  Functions, macros, variables, enums and types related to packet management of endpoints.
+ *  Functions, macros and enums related to endpoint management when in USB Device mode. This
+ *  module contains the endpoint management macros, as well as endpoint interrupt and data
+ *  send/receive functions for various data types.
+ *
+ *  @{
  */
 
 #ifndef __ENDPOINT_H__
 
        /* Includes: */
                #include <avr/io.h>
-               #include <avr/pgmspace.h>
-               #include <avr/eeprom.h>
                #include <stdbool.h>
 
                #include "../../../Common/Common.h"
                #include "../HighLevel/USBTask.h"
                #include "USBInterrupt.h"
-
-               #if !defined(NO_STREAM_CALLBACKS) || defined(__DOXYGEN__)
-                       #include "../HighLevel/StreamCallbacks.h"
-               #endif
                
        /* Enable C linkage for C++ Compilers: */
                #if defined(__cplusplus)
                        #error Do not include this file directly. Include LUFA/Drivers/USB/USB.h instead.
                #endif
 
-               #if !defined(NO_STREAM_CALLBACKS) || defined(__DOXYGEN__)
-                       #define __CALLBACK_PARAM     , StreamCallbackPtr_t Callback
-               #else
-                       #define __CALLBACK_PARAM
-               #endif
-
        /* Private Interface - For use in library only: */
        #if !defined(__DOXYGEN__)
                /* Macros: */
                                                                                 *   \ref USB_STREAM_TIMEOUT_MS macro.
                                                                                 */
                        };
-               
-                       /** Enum for the possible error return codes of the Endpoint_*_Stream_* functions.
-                        *
-                        *  \ingroup Group_EndpointStreamRW
-                        */
-                       enum Endpoint_Stream_RW_ErrorCodes_t
-                       {
-                               ENDPOINT_RWSTREAM_NoError            = 0, /**< Command completed successfully, no error. */
-                               ENDPOINT_RWSTREAM_EndpointStalled    = 1, /**< The endpoint was stalled during the stream
-                                                                          *   transfer by the host or device.
-                                                                          */
-                               ENDPOINT_RWSTREAM_DeviceDisconnected = 2, /**< Device was disconnected from the host during
-                                                                          *   the transfer.
-                                                                          */
-                               ENDPOINT_RWSTREAM_BusSuspended       = 3, /**< The USB bus has been suspended by the host and
-                                                                          *   no USB endpoint traffic can occur until the bus
-                                                                          *   has resumed.
-                                                                          */
-                               ENDPOINT_RWSTREAM_Timeout            = 4, /**< The host failed to accept or send the next packet
-                                                                          *   within the software timeout period set by the
-                                                                          *   \ref USB_STREAM_TIMEOUT_MS macro.
-                                                                          */
-                               ENDPOINT_RWSTREAM_CallbackAborted    = 5, /**< Indicates that the stream's callback function
-                                                                      *   aborted the transfer early.
-                                                                          */
-                       };
-                       
-                       /** Enum for the possible error return codes of the Endpoint_*_Control_Stream_* functions..
-                        *
-                        *  \ingroup Group_EndpointStreamRW
-                        */
-                       enum Endpoint_ControlStream_RW_ErrorCodes_t
-                       {
-                               ENDPOINT_RWCSTREAM_NoError            = 0, /**< Command completed successfully, no error. */
-                               ENDPOINT_RWCSTREAM_HostAborted        = 1, /**< The aborted the transfer prematurely. */
-                               ENDPOINT_RWCSTREAM_DeviceDisconnected = 2, /**< Device was disconnected from the host during
-                                                                           *   the transfer.
-                                                                           */
-                               ENDPOINT_RWCSTREAM_BusSuspended       = 3, /**< The USB bus has been suspended by the host and
-                                                                           *   no USB endpoint traffic can occur until the bus
-                                                                           *   has resumed.
-                                                                           */
-                       };
 
                /* Inline Functions: */                 
                        /** Configures the specified endpoint number with the given endpoint type, direction, bank size
                        #endif
 
                /* Function Prototypes: */
-                       /** Spin-loops until the currently selected non-control endpoint is ready for the next packet of data
-                        *  to be read or written to it.
-                        *
-                        *  \note This routine should not be called on CONTROL type endpoints.
-                        *
-                        *  \ingroup Group_EndpointRW
-                        *
-                        *  \return A value from the \ref Endpoint_WaitUntilReady_ErrorCodes_t enum.
-                        */
-                       uint8_t Endpoint_WaitUntilReady(void);
-                       
                        /** Completes the status stage of a control transfer on a CONTROL type endpoint automatically,
                         *  with respect to the data direction. This is a convenience function which can be used to
                         *  simplify user control request handling.
                         */
                        void Endpoint_ClearStatusStage(void);
 
-                       /** Reads and discards the given number of bytes from the endpoint from the given buffer,
-                        *  discarding fully read packets from the host as needed. The last packet is not automatically
-                        *  discarded once the remaining bytes has been read; the user is responsible for manually
-                        *  discarding the last packet from the host via the \ref Endpoint_ClearOUT() macro. Between
-                        *  each USB packet, the given stream callback function is executed repeatedly until the next
-                        *  packet is ready, allowing for early aborts of stream transfers.
-                        *
-                        *      The callback routine should be created according to the information in \ref Group_StreamCallbacks.
-                        *  If the token NO_STREAM_CALLBACKS is passed via the -D option to the compiler, stream callbacks are
-                        *  disabled and this function has the Callback parameter omitted.
-                        *
-                        *  \note This routine should not be used on CONTROL type endpoints.
-                        *
-                        *  \ingroup Group_EndpointStreamRW
-                        *
-                        *  \param[in] Length    Number of bytes to send via the currently selected endpoint.
-                        *  \param[in] Callback  Name of a callback routine to call between successive USB packet transfers, NULL if no callback.
-                        *
-                        *  \return A value from the \ref Endpoint_Stream_RW_ErrorCodes_t enum.
-                        */
-                       uint8_t Endpoint_Discard_Stream(uint16_t Length
-                                                       __CALLBACK_PARAM);
-
-                       /** Writes the given number of bytes to the endpoint from the given buffer in little endian,
-                        *  sending full packets to the host as needed. The last packet filled is not automatically sent;
-                        *  the user is responsible for manually sending the last written packet to the host via the
-                        *  \ref Endpoint_ClearIN() macro. Between each USB packet, the given stream callback function
-                        *  is executed repeatedly until the endpoint is ready to accept the next packet, allowing for early
-                        *  aborts of stream transfers.
-                        *
-                        *      The callback routine should be created according to the information in \ref Group_StreamCallbacks.
-                        *  If the token NO_STREAM_CALLBACKS is passed via the -D option to the compiler, stream callbacks are
-                        *  disabled and this function has the Callback parameter omitted.
-                        *
-                        *  \note This routine should not be used on CONTROL type endpoints.
-                        *
-                        *  \ingroup Group_EndpointStreamRW
-                        *
-                        *  \param[in] Buffer    Pointer to the source data buffer to read from.
-                        *  \param[in] Length    Number of bytes to read for the currently selected endpoint into the buffer.
-                        *  \param[in] Callback  Name of a callback routine to call between successive USB packet transfers, NULL if no callback.
-                        *
-                        *  \return A value from the \ref Endpoint_Stream_RW_ErrorCodes_t enum.
-                        */
-                       uint8_t Endpoint_Write_Stream_LE(const void* Buffer,
-                                                        uint16_t Length
-                                                        __CALLBACK_PARAM) ATTR_NON_NULL_PTR_ARG(1);
-
-                       /** EEPROM buffer source version of \ref Endpoint_Write_Stream_LE().
-                        *
-                        *  \ingroup Group_EndpointStreamRW
-                        *
-                        *  \param[in] Buffer    Pointer to the source data buffer to read from.
-                        *  \param[in] Length    Number of bytes to read for the currently selected endpoint into the buffer.
-                        *  \param[in] Callback  Name of a callback routine to call between successive USB packet transfers, NULL if no callback.
-                        *
-                        *  \return A value from the \ref Endpoint_Stream_RW_ErrorCodes_t enum.
-                        */
-                       uint8_t Endpoint_Write_EStream_LE(const void* Buffer,
-                                                         uint16_t Length
-                                                         __CALLBACK_PARAM) ATTR_NON_NULL_PTR_ARG(1);
-
-                       /** FLASH buffer source version of \ref Endpoint_Write_Stream_LE().
-                        *
-                        *  \pre The FLASH data must be located in the first 64KB of FLASH for this function to work correctly.
-                        *
-                        *  \ingroup Group_EndpointStreamRW
-                        *
-                        *  \param[in] Buffer    Pointer to the source data buffer to read from.
-                        *  \param[in] Length    Number of bytes to read for the currently selected endpoint into the buffer.
-                        *  \param[in] Callback  Name of a callback routine to call between successive USB packet transfers, NULL if no callback.
-                        *
-                        *  \return A value from the \ref Endpoint_Stream_RW_ErrorCodes_t enum.
-                        */
-                       uint8_t Endpoint_Write_PStream_LE(const void* Buffer,
-                                                         uint16_t Length
-                                                         __CALLBACK_PARAM) ATTR_NON_NULL_PTR_ARG(1);
-
-                       /** Writes the given number of bytes to the endpoint from the given buffer in big endian,
-                        *  sending full packets to the host as needed. The last packet filled is not automatically sent;
-                        *  the user is responsible for manually sending the last written packet to the host via the
-                        *  \ref Endpoint_ClearIN() macro. Between each USB packet, the given stream callback function
-                        *  is executed repeatedly until the endpoint is ready to accept the next packet, allowing for early
-                        *  aborts of stream transfers.
-                        *
-                        *      The callback routine should be created according to the information in \ref Group_StreamCallbacks.
-                        *  If the token NO_STREAM_CALLBACKS is passed via the -D option to the compiler, stream callbacks are
-                        *  disabled and this function has the Callback parameter omitted.
-                        *
-                        *  \note This routine should not be used on CONTROL type endpoints.
-                        *
-                        *  \ingroup Group_EndpointStreamRW
-                        *
-                        *  \param[in] Buffer    Pointer to the source data buffer to read from.
-                        *  \param[in] Length    Number of bytes to read for the currently selected endpoint into the buffer.
-                        *  \param[in] Callback  Name of a callback routine to call between successive USB packet transfers, NULL if no callback.
-                        *
-                        *  \return A value from the \ref Endpoint_Stream_RW_ErrorCodes_t enum.
-                        */
-                       uint8_t Endpoint_Write_Stream_BE(const void* Buffer,
-                                                        uint16_t Length
-                                                        __CALLBACK_PARAM) ATTR_NON_NULL_PTR_ARG(1);
-
-                       /** EEPROM buffer source version of \ref Endpoint_Write_Stream_BE().
-                        *
-                        *  \ingroup Group_EndpointStreamRW
-                        *
-                        *  \param[in] Buffer    Pointer to the source data buffer to read from.
-                        *  \param[in] Length    Number of bytes to read for the currently selected endpoint into the buffer.
-                        *  \param[in] Callback  Name of a callback routine to call between successive USB packet transfers, NULL if no callback.
-                        *
-                        *  \return A value from the \ref Endpoint_Stream_RW_ErrorCodes_t enum.
-                        */
-                       uint8_t Endpoint_Write_EStream_BE(const void* Buffer,
-                                                         uint16_t Length
-                                                         __CALLBACK_PARAM) ATTR_NON_NULL_PTR_ARG(1);
-
-                       /** FLASH buffer source version of \ref Endpoint_Write_Stream_BE().
-                        *
-                        *  \pre The FLASH data must be located in the first 64KB of FLASH for this function to work correctly.
-                        *
-                        *  \ingroup Group_EndpointStreamRW
-                        *
-                        *  \param[in] Buffer    Pointer to the source data buffer to read from.
-                        *  \param[in] Length    Number of bytes to read for the currently selected endpoint into the buffer.
-                        *  \param[in] Callback  Name of a callback routine to call between successive USB packet transfers, NULL if no callback.
-                        *
-                        *  \return A value from the \ref Endpoint_Stream_RW_ErrorCodes_t enum.
-                        */
-                       uint8_t Endpoint_Write_PStream_BE(const void* Buffer,
-                                                         uint16_t Length
-                                                         __CALLBACK_PARAM) ATTR_NON_NULL_PTR_ARG(1);
-
-                       /** Reads the given number of bytes from the endpoint from the given buffer in little endian,
-                        *  discarding fully read packets from the host as needed. The last packet is not automatically
-                        *  discarded once the remaining bytes has been read; the user is responsible for manually
-                        *  discarding the last packet from the host via the \ref Endpoint_ClearOUT() macro. Between
-                        *  each USB packet, the given stream callback function is executed repeatedly until the endpoint
-                        *  is ready to accept the next packet, allowing for early aborts of stream transfers.
-                        *
-                        *      The callback routine should be created according to the information in \ref Group_StreamCallbacks.
-                        *  If the token NO_STREAM_CALLBACKS is passed via the -D option to the compiler, stream callbacks are
-                        *  disabled and this function has the Callback parameter omitted.
-                        *
-                        *  \note This routine should not be used on CONTROL type endpoints.
-                        *
-                        *  \ingroup Group_EndpointStreamRW
-                        *
-                        *  \param[out] Buffer    Pointer to the destination data buffer to write to.
-                        *  \param[in]  Length    Number of bytes to send via the currently selected endpoint.
-                        *  \param[in]  Callback  Name of a callback routine to call between successive USB packet transfers, NULL if no callback.
-                        *
-                        *  \return A value from the \ref Endpoint_Stream_RW_ErrorCodes_t enum.
-                        */
-                       uint8_t Endpoint_Read_Stream_LE(void* Buffer,
-                                                       uint16_t Length
-                                                       __CALLBACK_PARAM) ATTR_NON_NULL_PTR_ARG(1);
-
-                       /** EEPROM buffer source version of \ref Endpoint_Read_Stream_LE().
-                        *
-                        *  \ingroup Group_EndpointStreamRW
-                        *
-                        *  \param[out] Buffer    Pointer to the destination data buffer to write to, located in EEPROM memory space.
-                        *  \param[in]  Length    Number of bytes to send via the currently selected endpoint.
-                        *  \param[in]  Callback  Name of a callback routine to call between successive USB packet transfers, NULL if no callback.
-                        *
-                        *  \return A value from the \ref Endpoint_Stream_RW_ErrorCodes_t enum.
-                        */
-                       uint8_t Endpoint_Read_EStream_LE(void* Buffer,
-                                                        uint16_t Length
-                                                        __CALLBACK_PARAM) ATTR_NON_NULL_PTR_ARG(1);
-                       
-                       /** Reads the given number of bytes from the endpoint from the given buffer in big endian,
-                        *  discarding fully read packets from the host as needed. The last packet is not automatically
-                        *  discarded once the remaining bytes has been read; the user is responsible for manually
-                        *  discarding the last packet from the host via the \ref Endpoint_ClearOUT() macro. Between
-                        *  each USB packet, the given stream callback function is executed repeatedly until the endpoint
-                        *  is ready to accept the next packet, allowing for early aborts of stream transfers.
-                        *
-                        *      The callback routine should be created according to the information in \ref Group_StreamCallbacks.
-                        *  If the token NO_STREAM_CALLBACKS is passed via the -D option to the compiler, stream callbacks are
-                        *  disabled and this function has the Callback parameter omitted.
-                        *
-                        *  \note This routine should not be used on CONTROL type endpoints.
-                        *
-                        *  \ingroup Group_EndpointStreamRW
-                        *
-                        *  \param[out] Buffer    Pointer to the destination data buffer to write to.
-                        *  \param[in]  Length    Number of bytes to send via the currently selected endpoint.
-                        *  \param[in]  Callback  Name of a callback routine to call between successive USB packet transfers, NULL if no callback.
-                        *
-                        *  \return A value from the \ref Endpoint_Stream_RW_ErrorCodes_t enum.
-                        */
-                       uint8_t Endpoint_Read_Stream_BE(void* Buffer,
-                                                       uint16_t Length
-                                                       __CALLBACK_PARAM) ATTR_NON_NULL_PTR_ARG(1);
-
-                       /** EEPROM buffer source version of \ref Endpoint_Read_Stream_BE().
-                        *
-                        *  \ingroup Group_EndpointStreamRW
-                        *
-                        *  \param[out] Buffer    Pointer to the destination data buffer to write to, located in EEPROM memory space.
-                        *  \param[in]  Length    Number of bytes to send via the currently selected endpoint.
-                        *  \param[in]  Callback  Name of a callback routine to call between successive USB packet transfers, NULL if no callback.
-                        *
-                        *  \return A value from the \ref Endpoint_Stream_RW_ErrorCodes_t enum.
-                        */
-                       uint8_t Endpoint_Read_EStream_BE(void* Buffer,
-                                                        uint16_t Length
-                                                        __CALLBACK_PARAM) ATTR_NON_NULL_PTR_ARG(1);
-
-                       /** Writes the given number of bytes to the CONTROL type endpoint from the given buffer in little endian,
-                        *  sending full packets to the host as needed. The host OUT acknowledgement is not automatically cleared
-                        *  in both failure and success states; the user is responsible for manually clearing the setup OUT to
-                        *  finalize the transfer via the \ref Endpoint_ClearOUT() macro.
-                        *
-                        *  \note This function automatically clears the control transfer's status stage. Do not manually attempt
-                        *        to clear the status stage when using this routine in a control transaction.
-                        *        \n\n
-                        *
-                        *  \note This routine should only be used on CONTROL type endpoints.
-                        *
-                        *  \warning Unlike the standard stream read/write commands, the control stream commands cannot be chained
-                        *           together; i.e. the entire stream data must be read or written at the one time.
-                        *
-                        *  \ingroup Group_EndpointStreamRW
-                        *
-                        *  \param[in] Buffer  Pointer to the source data buffer to read from.
-                        *  \param[in] Length  Number of bytes to read for the currently selected endpoint into the buffer.
-                        *
-                        *  \return A value from the \ref Endpoint_ControlStream_RW_ErrorCodes_t enum.
-                        */
-                       uint8_t Endpoint_Write_Control_Stream_LE(const void* Buffer,
-                                                                uint16_t Length) ATTR_NON_NULL_PTR_ARG(1);
-
-                       /** EEPROM buffer source version of Endpoint_Write_Control_Stream_LE.
-                        *
-                        *  \note This function automatically clears the control transfer's status stage. Do not manually attempt
-                        *        to clear the status stage when using this routine in a control transaction.
-                        *        \n\n
-                        *
-                        *  \note This routine should only be used on CONTROL type endpoints.
-                        *
-                        *  \warning Unlike the standard stream read/write commands, the control stream commands cannot be chained
-                        *           together; i.e. the entire stream data must be read or written at the one time.
-                        *
-                        *  \ingroup Group_EndpointStreamRW
-                        *
-                        *  \param[in] Buffer  Pointer to the source data buffer to read from.
-                        *  \param[in] Length  Number of bytes to read for the currently selected endpoint into the buffer.
-                        *
-                        *  \return A value from the \ref Endpoint_ControlStream_RW_ErrorCodes_t enum.
-                        */
-                       uint8_t Endpoint_Write_Control_EStream_LE(const void* Buffer,
-                                                                 uint16_t Length) ATTR_NON_NULL_PTR_ARG(1);
-
-                       /** FLASH buffer source version of \ref Endpoint_Write_Control_Stream_LE().
-                        *
-                        *  \pre The FLASH data must be located in the first 64KB of FLASH for this function to work correctly.
-                        *
-                        *  \note This function automatically clears the control transfer's status stage. Do not manually attempt
-                        *        to clear the status stage when using this routine in a control transaction.
-                        *        \n\n
-                        *
-                        *  \note This routine should only be used on CONTROL type endpoints.
-                        *
-                        *  \warning Unlike the standard stream read/write commands, the control stream commands cannot be chained
-                        *           together; i.e. the entire stream data must be read or written at the one time.
-                        *
-                        *  \ingroup Group_EndpointStreamRW
-                        *
-                        *  \param[in] Buffer  Pointer to the source data buffer to read from.
-                        *  \param[in] Length  Number of bytes to read for the currently selected endpoint into the buffer.
-                        *
-                        *  \return A value from the \ref Endpoint_ControlStream_RW_ErrorCodes_t enum.
-                        */
-                       uint8_t Endpoint_Write_Control_PStream_LE(const void* Buffer,
-                                                                 uint16_t Length) ATTR_NON_NULL_PTR_ARG(1);
-
-                       /** Writes the given number of bytes to the CONTROL type endpoint from the given buffer in big endian,
-                        *  sending full packets to the host as needed. The host OUT acknowledgement is not automatically cleared
-                        *  in both failure and success states; the user is responsible for manually clearing the setup OUT to
-                        *  finalize the transfer via the \ref Endpoint_ClearOUT() macro.
-                        *
-                        *  \note This function automatically clears the control transfer's status stage. Do not manually attempt
-                        *        to clear the status stage when using this routine in a control transaction.
-                        *        \n\n
-                        *
-                        *  \note This routine should only be used on CONTROL type endpoints.
-                        *
-                        *  \warning Unlike the standard stream read/write commands, the control stream commands cannot be chained
-                        *           together; i.e. the entire stream data must be read or written at the one time.
-                        *
-                        *  \ingroup Group_EndpointStreamRW
-                        *
-                        *  \param[in] Buffer  Pointer to the source data buffer to read from.
-                        *  \param[in] Length  Number of bytes to read for the currently selected endpoint into the buffer.
-                        *
-                        *  \return A value from the \ref Endpoint_ControlStream_RW_ErrorCodes_t enum.
-                        */
-                       uint8_t Endpoint_Write_Control_Stream_BE(const void* Buffer,
-                                                                uint16_t Length) ATTR_NON_NULL_PTR_ARG(1);
-
-                       /** EEPROM buffer source version of \ref Endpoint_Write_Control_Stream_BE().
-                        *
-                        *  \note This function automatically clears the control transfer's status stage. Do not manually attempt
-                        *        to clear the status stage when using this routine in a control transaction.
-                        *        \n\n
-                        *
-                        *  \note This routine should only be used on CONTROL type endpoints.
-                        *
-                        *  \warning Unlike the standard stream read/write commands, the control stream commands cannot be chained
-                        *           together; i.e. the entire stream data must be read or written at the one time.
-                        *
-                        *  \ingroup Group_EndpointStreamRW
-                        *
-                        *  \param[in] Buffer  Pointer to the source data buffer to read from.
-                        *  \param[in] Length  Number of bytes to read for the currently selected endpoint into the buffer.
-                        *
-                        *  \return A value from the \ref Endpoint_ControlStream_RW_ErrorCodes_t enum.
-                        */
-                       uint8_t Endpoint_Write_Control_EStream_BE(const void* Buffer,
-                                                                 uint16_t Length) ATTR_NON_NULL_PTR_ARG(1);
-
-                       /** FLASH buffer source version of \ref Endpoint_Write_Control_Stream_BE().
-                        *
-                        *  \pre The FLASH data must be located in the first 64KB of FLASH for this function to work correctly.
-                        *
-                        *  \note This function automatically clears the control transfer's status stage. Do not manually attempt
-                        *        to clear the status stage when using this routine in a control transaction.
-                        *        \n\n
-                        *
-                        *  \note This routine should only be used on CONTROL type endpoints.
-                        *
-                        *  \warning Unlike the standard stream read/write commands, the control stream commands cannot be chained
-                        *           together; i.e. the entire stream data must be read or written at the one time.
-                        *
-                        *  \ingroup Group_EndpointStreamRW
-                        *
-                        *  \param[in] Buffer  Pointer to the source data buffer to read from.
-                        *  \param[in] Length  Number of bytes to read for the currently selected endpoint into the buffer.
-                        *
-                        *  \return A value from the \ref Endpoint_ControlStream_RW_ErrorCodes_t enum.
-                        */
-                       uint8_t Endpoint_Write_Control_PStream_BE(const void* Buffer,
-                                                                 uint16_t Length) ATTR_NON_NULL_PTR_ARG(1);
-
-                       /** Reads the given number of bytes from the CONTROL endpoint from the given buffer in little endian,
-                        *  discarding fully read packets from the host as needed. The device IN acknowledgement is not
-                        *  automatically sent after success or failure states; the user is responsible for manually sending the
-                        *  setup IN to finalize the transfer via the \ref Endpoint_ClearIN() macro.
-                        *
-                        *  \note This function automatically clears the control transfer's status stage. Do not manually attempt
-                        *        to clear the status stage when using this routine in a control transaction.
-                        *        \n\n
-                        *
-                        *  \note This routine should only be used on CONTROL type endpoints.
-                        *
-                        *  \warning Unlike the standard stream read/write commands, the control stream commands cannot be chained
-                        *           together; i.e. the entire stream data must be read or written at the one time.
-                        *
-                        *  \ingroup Group_EndpointStreamRW
-                        *
-                        *  \param[out] Buffer  Pointer to the destination data buffer to write to.
-                        *  \param[in]  Length  Number of bytes to send via the currently selected endpoint.
-                        *
-                        *  \return A value from the \ref Endpoint_ControlStream_RW_ErrorCodes_t enum.
-                        */
-                       uint8_t Endpoint_Read_Control_Stream_LE(void* Buffer,
-                                                               uint16_t Length) ATTR_NON_NULL_PTR_ARG(1);
-
-                       /** EEPROM buffer source version of \ref Endpoint_Read_Control_Stream_LE().
-                        *
-                        *  \note This function automatically clears the control transfer's status stage. Do not manually attempt
-                        *        to clear the status stage when using this routine in a control transaction.
-                        *        \n\n
-                        *
-                        *  \note This routine should only be used on CONTROL type endpoints.
-                        *
-                        *  \warning Unlike the standard stream read/write commands, the control stream commands cannot be chained
-                        *           together; i.e. the entire stream data must be read or written at the one time.
-                        *
-                        *  \ingroup Group_EndpointStreamRW
-                        *
-                        *  \param[out] Buffer  Pointer to the destination data buffer to write to.
-                        *  \param[in]  Length  Number of bytes to send via the currently selected endpoint.
-                        *
-                        *  \return A value from the \ref Endpoint_ControlStream_RW_ErrorCodes_t enum.
-                        */
-                       uint8_t Endpoint_Read_Control_EStream_LE(void* Buffer,
-                                                                uint16_t Length) ATTR_NON_NULL_PTR_ARG(1);
-
-                       /** Reads the given number of bytes from the CONTROL endpoint from the given buffer in big endian,
-                        *  discarding fully read packets from the host as needed. The device IN acknowledgement is not
-                        *  automatically sent after success or failure states; the user is responsible for manually sending the
-                        *  setup IN to finalize the transfer via the \ref Endpoint_ClearIN() macro.
-                        *
-                        *  \note This function automatically clears the control transfer's status stage. Do not manually attempt
-                        *        to clear the status stage when using this routine in a control transaction.
-                        *        \n\n
-                        *
-                        *  \note This routine should only be used on CONTROL type endpoints.
-                        *
-                        *  \warning Unlike the standard stream read/write commands, the control stream commands cannot be chained
-                        *           together; i.e. the entire stream data must be read or written at the one time.
-                        *
-                        *  \ingroup Group_EndpointStreamRW
-                        *
-                        *  \param[out] Buffer  Pointer to the destination data buffer to write to.
-                        *  \param[in]  Length  Number of bytes to send via the currently selected endpoint.
-                        *
-                        *  \return A value from the \ref Endpoint_ControlStream_RW_ErrorCodes_t enum.
-                        */
-                       uint8_t Endpoint_Read_Control_Stream_BE(void* Buffer,
-                                                               uint16_t Length) ATTR_NON_NULL_PTR_ARG(1);
-                       
-                       /** EEPROM buffer source version of \ref Endpoint_Read_Control_Stream_BE().
-                        *
-                        *  \note This function automatically clears the control transfer's status stage. Do not manually attempt
-                        *        to clear the status stage when using this routine in a control transaction.
-                        *        \n\n
-                        *
-                        *  \note This routine should only be used on CONTROL type endpoints.
-                        *
-                        *  \warning Unlike the standard stream read/write commands, the control stream commands cannot be chained
-                        *           together; i.e. the entire stream data must be read or written at the one time.
+                       /** Spin-loops until the currently selected non-control endpoint is ready for the next packet of data
+                        *  to be read or written to it.
                         *
-                        *  \ingroup Group_EndpointStreamRW
+                        *  \note This routine should not be called on CONTROL type endpoints.
                         *
-                        *  \param[out] Buffer  Pointer to the destination data buffer to write to.
-                        *  \param[in]  Length  Number of bytes to send via the currently selected endpoint.
+                        *  \ingroup Group_EndpointRW
                         *
-                        *  \return A value from the \ref Endpoint_ControlStream_RW_ErrorCodes_t enum.
+                        *  \return A value from the \ref Endpoint_WaitUntilReady_ErrorCodes_t enum.
                         */
-                       uint8_t Endpoint_Read_Control_EStream_BE(void* Buffer,
-                                                                uint16_t Length) ATTR_NON_NULL_PTR_ARG(1);
+                       uint8_t Endpoint_WaitUntilReady(void);
 
        /* Disable C linkage for C++ Compilers: */
                #if defined(__cplusplus)
index f8cf4f9..a8eb50f 100644 (file)
@@ -33,7 +33,6 @@
 
 #if defined(USB_CAN_BE_HOST)
 
-#define  __INCLUDE_FROM_PIPE_C
 #include "Pipe.h"
 
 uint8_t USB_ControlPipeSize = PIPE_CONTROLPIPE_DEFAULT_SIZE;
@@ -163,164 +162,4 @@ uint8_t Pipe_WaitUntilReady(void)
        }
 }
 
-uint8_t Pipe_Discard_Stream(uint16_t Length
-#if !defined(NO_STREAM_CALLBACKS)
-                            , StreamCallbackPtr_t Callback
-#endif
-                            )
-{
-       uint8_t  ErrorCode;
-       
-       Pipe_SetPipeToken(PIPE_TOKEN_IN);
-
-       if ((ErrorCode = Pipe_WaitUntilReady()))
-         return ErrorCode;
-
-       #if defined(FAST_STREAM_TRANSFERS)
-       uint8_t BytesRemToAlignment = (Pipe_BytesInPipe() & 0x07);
-
-       if (Length >= 8)
-       {
-               Length -= BytesRemToAlignment;
-
-               switch (BytesRemToAlignment)
-               {
-                       default:
-                               do
-                               {
-                                       if (!(Pipe_IsReadWriteAllowed()))
-                                       {
-                                               Pipe_ClearIN();
-                                                       
-                                               #if !defined(NO_STREAM_CALLBACKS)
-                                               if ((Callback != NULL) && (Callback() == STREAMCALLBACK_Abort))
-                                                 return PIPE_RWSTREAM_CallbackAborted;
-                                               #endif
-
-                                               if ((ErrorCode = Pipe_WaitUntilReady()))
-                                                 return ErrorCode;
-                                       }
-
-                                       Length -= 8;
-                                       
-                                       Pipe_Discard_Byte();
-                       case 7: Pipe_Discard_Byte();
-                       case 6: Pipe_Discard_Byte();
-                       case 5: Pipe_Discard_Byte();
-                       case 4: Pipe_Discard_Byte();
-                       case 3: Pipe_Discard_Byte();
-                       case 2: Pipe_Discard_Byte();
-                       case 1: Pipe_Discard_Byte();
-                               } while (Length >= 8);  
-               }
-       }
-       #endif
-
-       while (Length)
-       {
-               if (!(Pipe_IsReadWriteAllowed()))
-               {
-                       Pipe_ClearIN();
-                               
-                       #if !defined(NO_STREAM_CALLBACKS)
-                       if ((Callback != NULL) && (Callback() == STREAMCALLBACK_Abort))
-                         return PIPE_RWSTREAM_CallbackAborted;
-                       #endif
-
-                       if ((ErrorCode = Pipe_WaitUntilReady()))
-                         return ErrorCode;
-               }
-               else
-               {
-                       Pipe_Discard_Byte();
-                       Length--;
-               }
-       }
-
-       return PIPE_RWSTREAM_NoError;
-}
-
-/* The following abuses the C preprocessor in order to copy-past common code with slight alterations,
- * so that the code needs to be written once. It is a crude form of templating to reduce code maintenance. */
-
-#define  TEMPLATE_FUNC_NAME                        Pipe_Write_Stream_LE
-#define  TEMPLATE_BUFFER_TYPE                      const void*
-#define  TEMPLATE_TOKEN                            PIPE_TOKEN_OUT
-#define  TEMPLATE_CLEAR_PIPE()                     Pipe_ClearOUT()
-#define  TEMPLATE_BUFFER_OFFSET(Length)            0
-#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         Pipe_Write_Byte(*((uint8_t*)BufferPtr++))
-#include "Template/Template_Pipe_RW.c"
-
-#define  TEMPLATE_FUNC_NAME                        Pipe_Write_PStream_LE
-#define  TEMPLATE_BUFFER_TYPE                      const void*
-#define  TEMPLATE_TOKEN                            PIPE_TOKEN_OUT
-#define  TEMPLATE_CLEAR_PIPE()                     Pipe_ClearOUT()
-#define  TEMPLATE_BUFFER_OFFSET(Length)            0
-#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         Pipe_Write_Byte(pgm_read_byte((uint8_t*)BufferPtr++))
-#include "Template/Template_Pipe_RW.c"
-
-#define  TEMPLATE_FUNC_NAME                        Pipe_Write_EStream_LE
-#define  TEMPLATE_BUFFER_TYPE                      const void*
-#define  TEMPLATE_TOKEN                            PIPE_TOKEN_OUT
-#define  TEMPLATE_CLEAR_PIPE()                     Pipe_ClearOUT()
-#define  TEMPLATE_BUFFER_OFFSET(Length)            0
-#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         Pipe_Write_Byte(eeprom_read_byte((uint8_t*)BufferPtr++))
-#include "Template/Template_Pipe_RW.c"
-
-#define  TEMPLATE_FUNC_NAME                        Pipe_Write_Stream_BE
-#define  TEMPLATE_BUFFER_TYPE                      const void*
-#define  TEMPLATE_TOKEN                            PIPE_TOKEN_OUT
-#define  TEMPLATE_CLEAR_PIPE()                     Pipe_ClearOUT()
-#define  TEMPLATE_BUFFER_OFFSET(Length)            (Length - 1)
-#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         Pipe_Write_Byte(*((uint8_t*)BufferPtr--))
-#include "Template/Template_Pipe_RW.c"
-
-#define  TEMPLATE_FUNC_NAME                        Pipe_Write_PStream_BE
-#define  TEMPLATE_BUFFER_TYPE                      const void*
-#define  TEMPLATE_TOKEN                            PIPE_TOKEN_OUT
-#define  TEMPLATE_CLEAR_PIPE()                     Pipe_ClearOUT()
-#define  TEMPLATE_BUFFER_OFFSET(Length)            (Length - 1)
-#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         Pipe_Write_Byte(pgm_read_byte((uint8_t*)BufferPtr--))
-#include "Template/Template_Pipe_RW.c"
-
-#define  TEMPLATE_FUNC_NAME                        Pipe_Write_EStream_BE
-#define  TEMPLATE_BUFFER_TYPE                      const void*
-#define  TEMPLATE_TOKEN                            PIPE_TOKEN_OUT
-#define  TEMPLATE_CLEAR_PIPE()                     Pipe_ClearOUT()
-#define  TEMPLATE_BUFFER_OFFSET(Length)            (Length - 1)
-#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         Pipe_Write_Byte(eeprom_read_byte((uint8_t*)BufferPtr--))
-#include "Template/Template_Pipe_RW.c"
-
-#define  TEMPLATE_FUNC_NAME                        Pipe_Read_Stream_LE
-#define  TEMPLATE_BUFFER_TYPE                      void*
-#define  TEMPLATE_TOKEN                            PIPE_TOKEN_IN
-#define  TEMPLATE_CLEAR_PIPE()                     Pipe_ClearIN()
-#define  TEMPLATE_BUFFER_OFFSET(Length)            0
-#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         *((uint8_t*)BufferPtr++) = Pipe_Read_Byte()
-#include "Template/Template_Pipe_RW.c"
-
-#define  TEMPLATE_FUNC_NAME                        Pipe_Read_EStream_LE
-#define  TEMPLATE_BUFFER_TYPE                      void*
-#define  TEMPLATE_TOKEN                            PIPE_TOKEN_IN
-#define  TEMPLATE_CLEAR_PIPE()                     Pipe_ClearIN()
-#define  TEMPLATE_BUFFER_OFFSET(Length)            0
-#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         eeprom_update_byte((uint8_t*)BufferPtr++, Pipe_Read_Byte())
-#include "Template/Template_Pipe_RW.c"
-
-#define  TEMPLATE_FUNC_NAME                        Pipe_Read_Stream_BE
-#define  TEMPLATE_BUFFER_TYPE                      void*
-#define  TEMPLATE_TOKEN                            PIPE_TOKEN_IN
-#define  TEMPLATE_CLEAR_PIPE()                     Pipe_ClearIN()
-#define  TEMPLATE_BUFFER_OFFSET(Length)            (Length - 1)
-#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         *((uint8_t*)BufferPtr--) = Pipe_Read_Byte()
-#include "Template/Template_Pipe_RW.c"
-
-#define  TEMPLATE_FUNC_NAME                        Pipe_Read_EStream_BE
-#define  TEMPLATE_BUFFER_TYPE                      void*
-#define  TEMPLATE_TOKEN                            PIPE_TOKEN_IN
-#define  TEMPLATE_CLEAR_PIPE()                     Pipe_ClearIN()
-#define  TEMPLATE_BUFFER_OFFSET(Length)            (Length - 1)
-#define  TEMPLATE_TRANSFER_BYTE(BufferPtr)         eeprom_update_byte((uint8_t*)BufferPtr--, Pipe_Read_Byte())
-#include "Template/Template_Pipe_RW.c"
-
 #endif
index 868a93a..d288ae2 100644 (file)
  *        dispatch header located in LUFA/Drivers/USB/USB.h.
  */ 
 
-/** \ingroup Group_USB
- *  @defgroup Group_PipeManagement Pipe Management
- *
- *  This module contains functions, macros and enums related to pipe management when in USB Host mode. This
- *  module contains the pipe management macros, as well as pipe interrupt and data send/receive functions
- *  for various data types.
- *
- *  @{
- */
-
-/** @defgroup Group_PipeRW Pipe Data Reading and Writing
+/** \ingroup Group_PipeManagement
+ *  @defgroup Group_PipeRW Pipe Data Reading and Writing
  *
  *  Functions, macros, variables, enums and types related to data reading and writing from and to pipes.
  */
  *
  *  Functions, macros, variables, enums and types related to data reading and writing of primitive data types
  *  from and to pipes.
- */ 
-
-/** \ingroup Group_PipeRW  
- *  @defgroup Group_PipeStreamRW Read/Write of Multi-Byte Streams
- *
- *  Functions, macros, variables, enums and types related to data reading and writing of data streams from
- *  and to pipes.
- */ 
+ */
  
-/** @defgroup Group_PipePacketManagement Pipe Packet Management
+/** \ingroup Group_PipeManagement
+ *  @defgroup Group_PipePacketManagement Pipe Packet Management
  *
  *  Functions, macros, variables, enums and types related to packet management of pipes.
  */
  
-/** @defgroup Group_PipeControlReq Pipe Control Request Management
+/** \ingroup Group_PipeManagement
+ *  @defgroup Group_PipeControlReq Pipe Control Request Management
  *
  *  Module for host mode request processing. This module allows for the transmission of standard, class and
  *  vendor control requests to the default control endpoint of an attached device while in host mode.
  *  \see Chapter 9 of the USB 2.0 specification.
  */ 
 
+/** \ingroup Group_USB
+ *  @defgroup Group_PipeManagement Pipe Management
+ *
+ *  This module contains functions, macros and enums related to pipe management when in USB Host mode. This
+ *  module contains the pipe management macros, as well as pipe interrupt and data send/receive functions
+ *  for various data types.
+ *
+ *  @{
+ */
+
 #ifndef __PIPE_H__
 #define __PIPE_H__
 
        /* Includes: */
                #include <avr/io.h>
-               #include <avr/pgmspace.h>
-               #include <avr/eeprom.h>
                #include <stdbool.h>
 
                #include "../../../Common/Common.h"
                #include "../HighLevel/USBTask.h"
-
-               #if !defined(NO_STREAM_CALLBACKS) || defined(__DOXYGEN__)
-                       #include "../HighLevel/StreamCallbacks.h"
-               #endif
                
        /* Enable C linkage for C++ Compilers: */
                #if defined(__cplusplus)
                #if !defined(__INCLUDE_FROM_USB_DRIVER)
                        #error Do not include this file directly. Include LUFA/Drivers/USB/USB.h instead.
                #endif
-
-               #if !defined(NO_STREAM_CALLBACKS) || defined(__DOXYGEN__)
-                       #define __CALLBACK_PARAM     , StreamCallbackPtr_t Callback
-               #else
-                       #define __CALLBACK_PARAM
-               #endif
                
        /* Public Interface - May be used in end-application: */
                /* Macros: */
                                                                             */
                        };
 
-                       /** Enum for the possible error return codes of the Pipe_*_Stream_* functions.
-                        *
-                        *  \ingroup Group_PipeRW
-                        */
-                       enum Pipe_Stream_RW_ErrorCodes_t
-                       {
-                               PIPE_RWSTREAM_NoError            = 0, /**< Command completed successfully, no error. */
-                               PIPE_RWSTREAM_PipeStalled        = 1, /**< The device stalled the pipe during the transfer. */          
-                               PIPE_RWSTREAM_DeviceDisconnected = 2, /**< Device was disconnected from the host during
-                                                                  *   the transfer.
-                                                                  */           
-                               PIPE_RWSTREAM_Timeout            = 3, /**< The device failed to accept or send the next packet
-                                                                      *   within the software timeout period set by the
-                                                                      *   \ref USB_STREAM_TIMEOUT_MS macro.
-                                                                      */
-                               PIPE_RWSTREAM_CallbackAborted    = 4, /**< Indicates that the stream's callback function aborted
-                                                                  *   the transfer early.
-                                                                      */
-                       };
-
                /* Inline Functions: */
                        /** Indicates the number of bytes currently stored in the current pipes's selected bank.
                         *
                         *          otherwise.
                         */
                        bool Pipe_IsEndpointBound(const uint8_t EndpointAddress);
-               
-                       /** Reads and discards the given number of bytes from the pipe, discarding fully read packets from the host
-                        *  as needed. The last packet is not automatically discarded once the remaining bytes has been read; the
-                        *  user is responsible for manually discarding the last packet from the device via the \ref Pipe_ClearIN() macro.
-                        *  Between each USB packet, the given stream callback function is executed repeatedly until the next packet is ready,
-                        *  allowing for early aborts of stream transfers.
-                        *
-                        *      The callback routine should be created according to the information in \ref Group_StreamCallbacks.
-                        *  If the token NO_STREAM_CALLBACKS is passed via the -D option to the compiler, stream callbacks are
-                        *  disabled and this function has the Callback parameter omitted.
-                        *
-                        *  The pipe token is set automatically, thus this can be used on bi-directional pipes directly without
-                        *  having to explicitly change the data direction with a call to \ref Pipe_SetPipeToken().
-                        *
-                        *  \ingroup Group_PipeStreamRW
-                        *
-                        *  \param[in] Length    Number of bytes to send via the currently selected pipe.
-                        *  \param[in] Callback  Name of a callback routine to call between successive USB packet transfers, NULL if no callback.
-                        *
-                        *  \return A value from the \ref Pipe_Stream_RW_ErrorCodes_t enum.
-                        */
-                       uint8_t Pipe_Discard_Stream(uint16_t Length
-                                                   __CALLBACK_PARAM);
-
-                       /** Writes the given number of bytes to the pipe from the given buffer in little endian,
-                        *  sending full packets to the device as needed. The last packet filled is not automatically sent;
-                        *  the user is responsible for manually sending the last written packet to the host via the
-                        *  \ref Pipe_ClearOUT() macro. Between each USB packet, the given stream callback function is
-                        *  executed repeatedly until the next packet is ready, allowing for early aborts of stream transfers.
-                        *
-                        *      The callback routine should be created according to the information in \ref Group_StreamCallbacks.
-                        *  If the token NO_STREAM_CALLBACKS is passed via the -D option to the compiler, stream callbacks are
-                        *  disabled and this function has the Callback parameter omitted.
-                        *
-                        *  The pipe token is set automatically, thus this can be used on bi-directional pipes directly without
-                        *  having to explicitly change the data direction with a call to \ref Pipe_SetPipeToken().
-                        *
-                        *  \ingroup Group_PipeStreamRW
-                        *
-                        *  \param[in] Buffer    Pointer to the source data buffer to read from.
-                        *  \param[in] Length    Number of bytes to read for the currently selected pipe into the buffer.
-                        *  \param[in] Callback  Name of a callback routine to call between successive USB packet transfers, NULL if no callback.
-                        *
-                        *  \return A value from the \ref Pipe_Stream_RW_ErrorCodes_t enum.
-                        */
-                       uint8_t Pipe_Write_Stream_LE(const void* Buffer,
-                                                    uint16_t Length
-                                                    __CALLBACK_PARAM) ATTR_NON_NULL_PTR_ARG(1);
-
-                       /** EEPROM buffer source version of \ref Pipe_Write_Stream_LE().
-                        *
-                        *  \ingroup Group_PipeStreamRW
-                        *
-                        *  \param[in] Buffer    Pointer to the source data buffer to read from.
-                        *  \param[in] Length    Number of bytes to read for the currently selected pipe into the buffer.
-                        *  \param[in] Callback  Name of a callback routine to call between successive USB packet transfers, NULL if no callback.
-                        *
-                        *  \return A value from the \ref Pipe_Stream_RW_ErrorCodes_t enum.
-                        */
-                       uint8_t Pipe_Write_EStream_LE(const void* Buffer,
-                                                     uint16_t Length
-                                                     __CALLBACK_PARAM) ATTR_NON_NULL_PTR_ARG(1);
-                       
-                       /** FLASH buffer source version of \ref Pipe_Write_Stream_LE().
-                        *
-                        *  \pre The FLASH data must be located in the first 64KB of FLASH for this function to work correctly.
-                        *
-                        *  \ingroup Group_PipeStreamRW
-                        *
-                        *  \param[in] Buffer    Pointer to the source data buffer to read from.
-                        *  \param[in] Length    Number of bytes to read for the currently selected pipe into the buffer.
-                        *  \param[in] Callback  Name of a callback routine to call between successive USB packet transfers, NULL if no callback.
-                        *
-                        *  \return A value from the \ref Pipe_Stream_RW_ErrorCodes_t enum.
-                        */
-                       uint8_t Pipe_Write_PStream_LE(const void* Buffer,
-                                                     uint16_t Length
-                                                     __CALLBACK_PARAM) ATTR_NON_NULL_PTR_ARG(1);
-                       
-                       /** Writes the given number of bytes to the pipe from the given buffer in big endian,
-                        *  sending full packets to the device as needed. The last packet filled is not automatically sent;
-                        *  the user is responsible for manually sending the last written packet to the host via the
-                        *  \ref Pipe_ClearOUT() macro. Between each USB packet, the given stream callback function is
-                        *  executed repeatedly until the next packet is ready, allowing for early aborts of stream transfers.
-                        *
-                        *      The callback routine should be created according to the information in \ref Group_StreamCallbacks.
-                        *  If the token NO_STREAM_CALLBACKS is passed via the -D option to the compiler, stream callbacks are
-                        *  disabled and this function has the Callback parameter omitted.
-                        *
-                        *  The pipe token is set automatically, thus this can be used on bi-directional pipes directly without
-                        *  having to explicitly change the data direction with a call to \ref Pipe_SetPipeToken().
-                        *
-                        *  \ingroup Group_PipeStreamRW
-                        *
-                        *  \param[in] Buffer    Pointer to the source data buffer to read from.
-                        *  \param[in] Length    Number of bytes to read for the currently selected pipe into the buffer.
-                        *  \param[in] Callback  Name of a callback routine to call between successive USB packet transfers, NULL if no callback.
-                        *
-                        *  \return A value from the \ref Pipe_Stream_RW_ErrorCodes_t enum.
-                        */
-                       uint8_t Pipe_Write_Stream_BE(const void* Buffer,
-                                                    uint16_t Length
-                                                    __CALLBACK_PARAM) ATTR_NON_NULL_PTR_ARG(1);
-
-                       /** EEPROM buffer source version of \ref Pipe_Write_Stream_BE().
-                        *
-                        *  \ingroup Group_PipeStreamRW
-                        *
-                        *  \param[in] Buffer    Pointer to the source data buffer to read from.
-                        *  \param[in] Length    Number of bytes to read for the currently selected pipe into the buffer.
-                        *  \param[in] Callback  Name of a callback routine to call between successive USB packet transfers, NULL if no callback.
-                        *
-                        *  \return A value from the \ref Pipe_Stream_RW_ErrorCodes_t enum.
-                        */
-                       uint8_t Pipe_Write_EStream_BE(const void* Buffer,
-                                                     uint16_t Length
-                                                     __CALLBACK_PARAM) ATTR_NON_NULL_PTR_ARG(1);
-                       
-                       /** FLASH buffer source version of \ref Pipe_Write_Stream_BE().
-                        *
-                        *  \pre The FLASH data must be located in the first 64KB of FLASH for this function to work correctly.
-                        *
-                        *  \ingroup Group_PipeStreamRW
-                        *
-                        *  \param[in] Buffer    Pointer to the source data buffer to read from.
-                        *  \param[in] Length    Number of bytes to read for the currently selected pipe into the buffer.
-                        *  \param[in] Callback  Name of a callback routine to call between successive USB packet transfers, NULL if no callback.
-                        *
-                        *  \return A value from the \ref Pipe_Stream_RW_ErrorCodes_t enum.
-                        */
-                       uint8_t Pipe_Write_PStream_BE(const void* Buffer,
-                                                     uint16_t Length
-                                                     __CALLBACK_PARAM) ATTR_NON_NULL_PTR_ARG(1);
-
-                       /** Reads the given number of bytes from the pipe into the given buffer in little endian,
-                        *  sending full packets to the device as needed. The last packet filled is not automatically sent;
-                        *  the user is responsible for manually sending the last written packet to the host via the
-                        *  \ref Pipe_ClearIN() macro. Between each USB packet, the given stream callback function is
-                        *  executed repeatedly until the next packet is ready, allowing for early aborts of stream transfers.
-                        *
-                        *      The callback routine should be created according to the information in \ref Group_StreamCallbacks.
-                        *  If the token NO_STREAM_CALLBACKS is passed via the -D option to the compiler, stream callbacks are
-                        *  disabled and this function has the Callback parameter omitted.
-                        *
-                        *  The pipe token is set automatically, thus this can be used on bi-directional pipes directly without
-                        *  having to explicitly change the data direction with a call to \ref Pipe_SetPipeToken().
-                        *
-                        *  \ingroup Group_PipeStreamRW
-                        *
-                        *  \param[out] Buffer    Pointer to the source data buffer to write to.
-                        *  \param[in]  Length    Number of bytes to read for the currently selected pipe to read from.
-                        *  \param[in]  Callback  Name of a callback routine to call between successive USB packet transfers, NULL if no callback.
-                        *
-                        *  \return A value from the \ref Pipe_Stream_RW_ErrorCodes_t enum.
-                        */
-                       uint8_t Pipe_Read_Stream_LE(void* Buffer,
-                                                   uint16_t Length
-                                                   __CALLBACK_PARAM) ATTR_NON_NULL_PTR_ARG(1);
-
-                       /** EEPROM buffer source version of \ref Pipe_Read_Stream_LE().
-                        *
-                        *  \ingroup Group_PipeStreamRW
-                        *
-                        *  \param[out] Buffer    Pointer to the source data buffer to write to.
-                        *  \param[in]  Length    Number of bytes to read for the currently selected pipe to read from.
-                        *  \param[in]  Callback  Name of a callback routine to call between successive USB packet transfers, NULL if no callback.
-                        *
-                        *  \return A value from the \ref Pipe_Stream_RW_ErrorCodes_t enum.
-                        */
-                       uint8_t Pipe_Read_EStream_LE(void* Buffer,
-                                                    uint16_t Length
-                                                    __CALLBACK_PARAM) ATTR_NON_NULL_PTR_ARG(1);
-
-                       /** Reads the given number of bytes from the pipe into the given buffer in big endian,
-                        *  sending full packets to the device as needed. The last packet filled is not automatically sent;
-                        *  the user is responsible for manually sending the last written packet to the host via the
-                        *  \ref Pipe_ClearIN() macro. Between each USB packet, the given stream callback function is
-                        *  executed repeatedly until the next packet is ready, allowing for early aborts of stream transfers.
-                        *
-                        *      The callback routine should be created according to the information in \ref Group_StreamCallbacks.
-                        *  If the token NO_STREAM_CALLBACKS is passed via the -D option to the compiler, stream callbacks are
-                        *  disabled and this function has the Callback parameter omitted.
-                        *
-                        *  The pipe token is set automatically, thus this can be used on bi-directional pipes directly without
-                        *  having to explicitly change the data direction with a call to \ref Pipe_SetPipeToken().
-                        *
-                        *  \ingroup Group_PipeStreamRW
-                        *
-                        *  \param[out] Buffer    Pointer to the source data buffer to write to.
-                        *  \param[in]  Length    Number of bytes to read for the currently selected pipe to read from.
-                        *  \param[in]  Callback  Name of a callback routine to call between successive USB packet transfers, NULL if no callback.
-                        *
-                        *  \return A value from the \ref Pipe_Stream_RW_ErrorCodes_t enum.
-                        */
-                       uint8_t Pipe_Read_Stream_BE(void* Buffer,
-                                                   uint16_t Length
-                                                   __CALLBACK_PARAM) ATTR_NON_NULL_PTR_ARG(1);
-                       
-                       /** EEPROM buffer source version of \ref Pipe_Read_Stream_BE().
-                        *
-                        *  \ingroup Group_PipeStreamRW
-                        *
-                        *  \param[out] Buffer    Pointer to the source data buffer to write to.
-                        *  \param[in]  Length    Number of bytes to read for the currently selected pipe to read from.
-                        *  \param[in]  Callback  Name of a callback routine to call between successive USB packet transfers, NULL if no callback.
-                        *
-                        *  \return A value from the \ref Pipe_Stream_RW_ErrorCodes_t enum.
-                        */
-                       uint8_t Pipe_Read_EStream_BE(void* Buffer,
-                                                    uint16_t Length
-                                                    __CALLBACK_PARAM) ATTR_NON_NULL_PTR_ARG(1);
 
        /* Private Interface - For use in library only: */
        #if !defined(__DOXYGEN__)
diff --git a/LUFA/Drivers/USB/LowLevel/Template/Template_Endpoint_Control_R.c b/LUFA/Drivers/USB/LowLevel/Template/Template_Endpoint_Control_R.c
deleted file mode 100644 (file)
index 43abe6e..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-uint8_t TEMPLATE_FUNC_NAME (void* Buffer,
-                            uint16_t Length)
-{
-       uint8_t* DataStream = ((uint8_t*)Buffer + TEMPLATE_BUFFER_OFFSET(Length));
-       
-       if (!(Length))
-         Endpoint_ClearOUT();
-       
-       while (Length)
-       {
-               if (Endpoint_IsSETUPReceived())
-                 return ENDPOINT_RWCSTREAM_HostAborted;
-
-               if (USB_DeviceState == DEVICE_STATE_Unattached)
-                 return ENDPOINT_RWCSTREAM_DeviceDisconnected;
-               else if (USB_DeviceState == DEVICE_STATE_Suspended)
-                 return ENDPOINT_RWCSTREAM_BusSuspended;
-                 
-               if (Endpoint_IsOUTReceived())
-               {
-                       while (Length && Endpoint_BytesInEndpoint())
-                       {
-                               TEMPLATE_TRANSFER_BYTE(DataStream);
-                               Length--;
-                       }
-                       
-                       Endpoint_ClearOUT();
-               }                 
-       }
-       
-       while (!(Endpoint_IsINReady()))
-       {
-               if (USB_DeviceState == DEVICE_STATE_Unattached)
-                 return ENDPOINT_RWCSTREAM_DeviceDisconnected;
-               else if (USB_DeviceState == DEVICE_STATE_Suspended)
-                 return ENDPOINT_RWCSTREAM_BusSuspended;
-       }
-       
-       return ENDPOINT_RWCSTREAM_NoError;
-}
-
-
-#undef TEMPLATE_BUFFER_OFFSET
-#undef TEMPLATE_FUNC_NAME
-#undef TEMPLATE_TRANSFER_BYTE
\ No newline at end of file
diff --git a/LUFA/Drivers/USB/LowLevel/Template/Template_Endpoint_Control_W.c b/LUFA/Drivers/USB/LowLevel/Template/Template_Endpoint_Control_W.c
deleted file mode 100644 (file)
index dc2c37d..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-uint8_t TEMPLATE_FUNC_NAME (const void* Buffer,
-                            uint16_t Length)
-{
-       uint8_t* DataStream     = ((uint8_t*)Buffer + TEMPLATE_BUFFER_OFFSET(Length));
-       bool     LastPacketFull = false;
-       
-       if (Length > USB_ControlRequest.wLength)
-         Length = USB_ControlRequest.wLength;
-       else if (!(Length))
-         Endpoint_ClearIN();
-
-       while (Length || LastPacketFull)
-       {
-               if (Endpoint_IsSETUPReceived())
-                 return ENDPOINT_RWCSTREAM_HostAborted;
-
-               if (Endpoint_IsOUTReceived())
-                 break;
-               
-               if (USB_DeviceState == DEVICE_STATE_Unattached)
-                 return ENDPOINT_RWCSTREAM_DeviceDisconnected;
-               else if (USB_DeviceState == DEVICE_STATE_Suspended)
-                 return ENDPOINT_RWCSTREAM_BusSuspended;
-                 
-               if (Endpoint_IsINReady())
-               {
-                       uint8_t BytesInEndpoint = Endpoint_BytesInEndpoint();
-               
-                       while (Length && (BytesInEndpoint < USB_ControlEndpointSize))
-                       {
-                               TEMPLATE_TRANSFER_BYTE(DataStream);
-                               Length--;
-                               BytesInEndpoint++;
-                       }
-                       
-                       LastPacketFull = (BytesInEndpoint == USB_ControlEndpointSize);
-                       Endpoint_ClearIN();
-               }
-       }
-       
-       while (!(Endpoint_IsOUTReceived()))
-       {
-               if (USB_DeviceState == DEVICE_STATE_Unattached)
-                 return ENDPOINT_RWCSTREAM_DeviceDisconnected;
-               else if (USB_DeviceState == DEVICE_STATE_Suspended)
-                 return ENDPOINT_RWCSTREAM_BusSuspended;
-       }
-
-       return ENDPOINT_RWCSTREAM_NoError;
-}
-
-#undef TEMPLATE_BUFFER_OFFSET
-#undef TEMPLATE_FUNC_NAME
-#undef TEMPLATE_TRANSFER_BYTE
\ No newline at end of file
diff --git a/LUFA/Drivers/USB/LowLevel/Template/Template_Endpoint_RW.c b/LUFA/Drivers/USB/LowLevel/Template/Template_Endpoint_RW.c
deleted file mode 100644 (file)
index fc9df95..0000000
+++ /dev/null
@@ -1,79 +0,0 @@
-uint8_t TEMPLATE_FUNC_NAME (TEMPLATE_BUFFER_TYPE Buffer,
-                            uint16_t Length
-                            __CALLBACK_PARAM)
-{
-       uint8_t* DataStream = ((uint8_t*)Buffer + TEMPLATE_BUFFER_OFFSET(Length));
-       uint8_t  ErrorCode;
-       
-       if ((ErrorCode = Endpoint_WaitUntilReady()))
-         return ErrorCode;
-
-       #if defined(FAST_STREAM_TRANSFERS)
-       uint8_t BytesRemToAlignment = (Endpoint_BytesInEndpoint() & 0x07);
-
-       if (Length >= 8)
-       {
-               Length -= BytesRemToAlignment;
-
-               switch (BytesRemToAlignment)
-               {
-                       default:
-                               do
-                               {
-                                       if (!(Endpoint_IsReadWriteAllowed()))
-                                       {
-                                               TEMPLATE_CLEAR_ENDPOINT();
-
-                                               #if !defined(NO_STREAM_CALLBACKS)
-                                               if ((Callback != NULL) && (Callback() == STREAMCALLBACK_Abort))
-                                                 return ENDPOINT_RWSTREAM_CallbackAborted;
-                                               #endif
-
-                                               if ((ErrorCode = Endpoint_WaitUntilReady()))
-                                                 return ErrorCode;
-                                       }
-
-                                       Length -= 8;
-                                       
-                                       TEMPLATE_TRANSFER_BYTE(DataStream);
-                       case 7: TEMPLATE_TRANSFER_BYTE(DataStream);
-                       case 6: TEMPLATE_TRANSFER_BYTE(DataStream);
-                       case 5: TEMPLATE_TRANSFER_BYTE(DataStream);
-                       case 4: TEMPLATE_TRANSFER_BYTE(DataStream);
-                       case 3: TEMPLATE_TRANSFER_BYTE(DataStream);
-                       case 2: TEMPLATE_TRANSFER_BYTE(DataStream);
-                       case 1: TEMPLATE_TRANSFER_BYTE(DataStream);
-                               } while (Length >= 8);  
-               }
-       }
-       #endif
-
-       while (Length)
-       {
-               if (!(Endpoint_IsReadWriteAllowed()))
-               {
-                       TEMPLATE_CLEAR_ENDPOINT();
-
-                       #if !defined(NO_STREAM_CALLBACKS)
-                       if ((Callback != NULL) && (Callback() == STREAMCALLBACK_Abort))
-                         return ENDPOINT_RWSTREAM_CallbackAborted;
-                       #endif
-
-                       if ((ErrorCode = Endpoint_WaitUntilReady()))
-                         return ErrorCode;
-               }
-               else
-               {
-                       TEMPLATE_TRANSFER_BYTE(DataStream);
-                       Length--;
-               }
-       }
-
-       return ENDPOINT_RWSTREAM_NoError;
-}
-
-#undef TEMPLATE_FUNC_NAME
-#undef TEMPLATE_BUFFER_TYPE
-#undef TEMPLATE_TRANSFER_BYTE
-#undef TEMPLATE_CLEAR_ENDPOINT
-#undef TEMPLATE_BUFFER_OFFSET
\ No newline at end of file
diff --git a/LUFA/Drivers/USB/LowLevel/Template/Template_Pipe_RW.c b/LUFA/Drivers/USB/LowLevel/Template/Template_Pipe_RW.c
deleted file mode 100644 (file)
index fb64dd8..0000000
+++ /dev/null
@@ -1,82 +0,0 @@
-uint8_t TEMPLATE_FUNC_NAME (TEMPLATE_BUFFER_TYPE Buffer,
-                            uint16_t Length
-                            __CALLBACK_PARAM)
-{
-       uint8_t* DataStream = ((uint8_t*)Buffer + TEMPLATE_BUFFER_OFFSET(Length));
-       uint8_t  ErrorCode;
-       
-       Pipe_SetPipeToken(TEMPLATE_TOKEN);
-
-       if ((ErrorCode = Pipe_WaitUntilReady()))
-         return ErrorCode;
-
-       #if defined(FAST_STREAM_TRANSFERS)
-       uint8_t BytesRemToAlignment = (Pipe_BytesInPipe() & 0x07);
-
-       if (Length >= 8)
-       {
-               Length -= BytesRemToAlignment;
-
-               switch (BytesRemToAlignment)
-               {
-                       default:
-                               do
-                               {
-                                       if (!(Pipe_IsReadWriteAllowed()))
-                                       {
-                                               TEMPLATE_CLEAR_PIPE();
-
-                                               #if !defined(NO_STREAM_CALLBACKS)
-                                               if ((Callback != NULL) && (Callback() == STREAMCALLBACK_Abort))
-                                                 return PIPE_RWSTREAM_CallbackAborted;
-                                               #endif
-
-                                               if ((ErrorCode = Pipe_WaitUntilReady()))
-                                                 return ErrorCode;
-                                       }
-
-                                       Length -= 8;
-                                       
-                                       TEMPLATE_TRANSFER_BYTE(DataStream);
-                       case 7: TEMPLATE_TRANSFER_BYTE(DataStream);
-                       case 6: TEMPLATE_TRANSFER_BYTE(DataStream);
-                       case 5: TEMPLATE_TRANSFER_BYTE(DataStream);
-                       case 4: TEMPLATE_TRANSFER_BYTE(DataStream);
-                       case 3: TEMPLATE_TRANSFER_BYTE(DataStream);
-                       case 2: TEMPLATE_TRANSFER_BYTE(DataStream);
-                       case 1: TEMPLATE_TRANSFER_BYTE(DataStream);
-                               } while (Length >= 8);  
-               }
-       }
-       #endif
-
-       while (Length)
-       {
-               if (!(Pipe_IsReadWriteAllowed()))
-               {
-                       TEMPLATE_CLEAR_PIPE();
-
-                       #if !defined(NO_STREAM_CALLBACKS)
-                       if ((Callback != NULL) && (Callback() == STREAMCALLBACK_Abort))
-                         return PIPE_RWSTREAM_CallbackAborted;
-                       #endif
-
-                       if ((ErrorCode = Pipe_WaitUntilReady()))
-                         return ErrorCode;
-               }
-               else
-               {
-                       TEMPLATE_TRANSFER_BYTE(DataStream);
-                       Length--;
-               }
-       }
-       
-       return PIPE_RWSTREAM_NoError;
-}
-
-#undef TEMPLATE_FUNC_NAME
-#undef TEMPLATE_BUFFER_TYPE
-#undef TEMPLATE_TOKEN
-#undef TEMPLATE_TRANSFER_BYTE
-#undef TEMPLATE_CLEAR_PIPE
-#undef TEMPLATE_BUFFER_OFFSET
index f0db7fa..980f818 100644 (file)
                
                #if defined(USB_CAN_BE_HOST) || defined(__DOXYGEN__)
                        #include "Host.h"
-                       #include "Pipe.h"
                        #include "OTG.h"
+                       #include "Pipe.h"
                        #include "../HighLevel/HostStandardReq.h"
+                       #include "../HighLevel/PipeStream.h"
                #endif
                
                #if defined(USB_CAN_BE_DEVICE) || defined(__DOXYGEN__)
                        #include "Device.h"
                        #include "Endpoint.h"
                        #include "../HighLevel/DeviceStandardReq.h"
+                       #include "../HighLevel/EndpointStream.h"
                #endif
 
        /* Enable C linkage for C++ Compilers: */
index b2eb47d..552af0f 100644 (file)
@@ -50,7 +50,9 @@
  *    - LUFA/Drivers/USB/HighLevel/ConfigDescriptor.c <i>(Makefile source module name: LUFA_SRC_USB)</i>
  *    - LUFA/Drivers/USB/HighLevel/DeviceStandardReq.c <i>(Makefile source module name: LUFA_SRC_USB)</i>
  *    - LUFA/Drivers/USB/HighLevel/Events.c <i>(Makefile source module name: LUFA_SRC_USB)</i>
+ *    - LUFA/Drivers/USB/HighLevel/EndpointStream.c <i>(Makefile source module name: LUFA_SRC_USB)</i>
  *    - LUFA/Drivers/USB/HighLevel/HostStandardReq.c <i>(Makefile source module name: LUFA_SRC_USB)</i>
+ *    - LUFA/Drivers/USB/HighLevel/PipeStream.c <i>(Makefile source module name: LUFA_SRC_USB)</i>
  *    - LUFA/Drivers/USB/HighLevel/USBTask.c <i>(Makefile source module name: LUFA_SRC_USB)</i>
  *
  *  \section Module Description
                        #include "LowLevel/Host.h"
                        #include "LowLevel/Pipe.h"
                        #include "HighLevel/HostStandardReq.h"
+                       #include "HighLevel/PipeStream.h"
                #endif
                
                #if defined(USB_CAN_BE_DEVICE) || defined(__DOXYGEN__)
                        #include "LowLevel/Device.h"
                        #include "LowLevel/Endpoint.h"
                        #include "HighLevel/DeviceStandardReq.h"
+                       #include "HighLevel/EndpointStream.h"
                #endif
                
                #if defined(USB_CAN_BE_BOTH) || defined(__DOXYGEN__)
index 6b1090d..6c77bcd 100644 (file)
@@ -10,6 +10,7 @@
   *  <b>New:</b>
   *  - Added new SCSI_ASENSE_NOT_READY_TO_READY_CHANGE constant to the Mass Storage class driver, to indicate when a previously
   *    not ready removable medium has now become ready for the host's use (thanks to Martin Degelsegger)
+  *  - Moved the Pipe and Endpoint stream related code to two new USB library core source files EndpointStream.c and PipeStream.c
   *
   *  <b>Changed:</b>
   *  - Removed complicated logic for the Endpoint_ConfigureEndpoint() function to use inlined or function called versions
index 8251423..49c9e63 100644 (file)
  *  areas relevant to making older projects compatible with the API changes of each new release.
  *
  * \section Sec_MigrationXXXXXX Migrating from XXXXXX to XXXXXX
- * There is currently no migration information for this release.
+ *  <b>USB Core</b>
+ *    - A new USB driver source file, Drivers/USB/HighLevel/EndpointStream.c now exists. This source file should be added
+ *      to all project makefiles using the USB driver of LUFA, or the makefile should be updated to use the new module source
+ *      variables.
+ *    - A new USB driver source file, Drivers/USB/HighLevel/PipeStream.c now exists. This source file should be added to all
+ *      project makefiles using the USB driver of LUFA, or the makefile should be updated to use the new module source variables.
  *
  * \section Sec_Migration100807 Migrating from 100513 to 100807
  *
index 0ce283e..c6ca8b4 100644 (file)
@@ -26,7 +26,9 @@ LUFA_SRC_USB          = $(LUFA_ROOT_PATH)/Drivers/USB/LowLevel/Device.c
                         $(LUFA_ROOT_PATH)/Drivers/USB/HighLevel/ConfigDescriptor.c  \
                         $(LUFA_ROOT_PATH)/Drivers/USB/HighLevel/DeviceStandardReq.c \
                         $(LUFA_ROOT_PATH)/Drivers/USB/HighLevel/Events.c            \
+                        $(LUFA_ROOT_PATH)/Drivers/USB/HighLevel/EndpointStream.c    \
                         $(LUFA_ROOT_PATH)/Drivers/USB/HighLevel/HostStandardReq.c   \
+                        $(LUFA_ROOT_PATH)/Drivers/USB/HighLevel/PipeStream.c        \
                         $(LUFA_ROOT_PATH)/Drivers/USB/HighLevel/USBTask.c           \
                         $(LUFA_ROOT_PATH)/Drivers/USB/Class/Host/HIDParser.c
 LUFA_SRC_USBCLASS     = $(LUFA_ROOT_PATH)/Drivers/USB/Class/Device/Audio.c          \