diff options
| author | Dean Camera <dean@fourwalledcubicle.com> | 2009-11-06 13:43:18 +0000 | 
|---|---|---|
| committer | Dean Camera <dean@fourwalledcubicle.com> | 2009-11-06 13:43:18 +0000 | 
| commit | f7ab433c67b86723385ec05ee9c7b96dd18e6dde (patch) | |
| tree | 6f5efdffd16bc2bca9c032ef7e6ea944a757b529 | |
| parent | 1c7aa68596da103137bdfe20f3baa20dcf7faae2 (diff) | |
| download | lufa-f7ab433c67b86723385ec05ee9c7b96dd18e6dde.tar.gz lufa-f7ab433c67b86723385ec05ee9c7b96dd18e6dde.tar.bz2 lufa-f7ab433c67b86723385ec05ee9c7b96dd18e6dde.zip | |
Add optional double-banking support to the Device mode Class Drivers, on a per-endpoint, per-interface level.
27 files changed, 167 insertions, 128 deletions
| diff --git a/Demos/Device/ClassDriver/CDC/CDC.c b/Demos/Device/ClassDriver/CDC/CDC.c index f09d3f136..90cbaf0bc 100644 --- a/Demos/Device/ClassDriver/CDC/CDC.c +++ b/Demos/Device/ClassDriver/CDC/CDC.c @@ -44,16 +44,19 @@ USB_ClassInfo_CDC_Device_t VirtualSerial_CDC_Interface =  	{
  		.Config =
  			{
 -				.ControlInterfaceNumber     = 0,
 +				.ControlInterfaceNumber         = 0,
 -				.DataINEndpointNumber       = CDC_TX_EPNUM,
 -				.DataINEndpointSize         = CDC_TXRX_EPSIZE,
 +				.DataINEndpointNumber           = CDC_TX_EPNUM,
 +				.DataINEndpointSize             = CDC_TXRX_EPSIZE,
 +				.DataINEndpointDoubleBank       = false,
 -				.DataOUTEndpointNumber      = CDC_RX_EPNUM,
 -				.DataOUTEndpointSize        = CDC_TXRX_EPSIZE,
 +				.DataOUTEndpointNumber          = CDC_RX_EPNUM,
 +				.DataOUTEndpointSize            = CDC_TXRX_EPSIZE,
 +				.DataOUTEndpointDoubleBank      = false,
 -				.NotificationEndpointNumber = CDC_NOTIFICATION_EPNUM,
 -				.NotificationEndpointSize   = CDC_NOTIFICATION_EPSIZE,
 +				.NotificationEndpointNumber     = CDC_NOTIFICATION_EPNUM,
 +				.NotificationEndpointSize       = CDC_NOTIFICATION_EPSIZE,
 +				.NotificationEndpointDoubleBank = false,
  			},
  	};
 diff --git a/Demos/Device/ClassDriver/CDCMouse/CDCMouse.c b/Demos/Device/ClassDriver/CDCMouse/CDCMouse.c index 1102b7e81..b625327fb 100644 --- a/Demos/Device/ClassDriver/CDCMouse/CDCMouse.c +++ b/Demos/Device/ClassDriver/CDCMouse/CDCMouse.c @@ -44,16 +44,19 @@ USB_ClassInfo_CDC_Device_t VirtualSerial_CDC_Interface =  	{
  		.Config =
  			{
 -				.ControlInterfaceNumber     = 0,
 +				.ControlInterfaceNumber         = 0,
 -				.DataINEndpointNumber       = CDC_TX_EPNUM,
 -				.DataINEndpointSize         = CDC_TXRX_EPSIZE,
 +				.DataINEndpointNumber           = CDC_TX_EPNUM,
 +				.DataINEndpointSize             = CDC_TXRX_EPSIZE,
 +				.DataINEndpointDoubleBank       = false,
 -				.DataOUTEndpointNumber      = CDC_RX_EPNUM,
 -				.DataOUTEndpointSize        = CDC_TXRX_EPSIZE,
 +				.DataOUTEndpointNumber          = CDC_RX_EPNUM,
 +				.DataOUTEndpointSize            = CDC_TXRX_EPSIZE,
 +				.DataOUTEndpointDoubleBank      = false,
 -				.NotificationEndpointNumber = CDC_NOTIFICATION_EPNUM,
 -				.NotificationEndpointSize   = CDC_NOTIFICATION_EPSIZE,
 +				.NotificationEndpointNumber     = CDC_NOTIFICATION_EPNUM,
 +				.NotificationEndpointSize       = CDC_NOTIFICATION_EPSIZE,
 +				.NotificationEndpointDoubleBank = false,
  			},
  	};
 @@ -68,13 +71,14 @@ USB_ClassInfo_HID_Device_t Mouse_HID_Interface =  	{
  		.Config =
  			{
 -				.InterfaceNumber         = 0,
 +				.InterfaceNumber                = 0,
 -				.ReportINEndpointNumber  = MOUSE_EPNUM,
 -				.ReportINEndpointSize    = MOUSE_EPSIZE,
 +				.ReportINEndpointNumber         = MOUSE_EPNUM,
 +				.ReportINEndpointSize           = MOUSE_EPSIZE,
 +				.ReportINEndpointDoubleBank     = false,
 -				.PrevReportINBuffer      = PrevMouseHIDReportBuffer,
 -				.PrevReportINBufferSize  = sizeof(PrevMouseHIDReportBuffer),
 +				.PrevReportINBuffer             = PrevMouseHIDReportBuffer,
 +				.PrevReportINBufferSize         = sizeof(PrevMouseHIDReportBuffer),
  			},
  	};
 diff --git a/Demos/Device/ClassDriver/DualCDC/DualCDC.c b/Demos/Device/ClassDriver/DualCDC/DualCDC.c index 5ee3c4d05..000d18b9a 100644 --- a/Demos/Device/ClassDriver/DualCDC/DualCDC.c +++ b/Demos/Device/ClassDriver/DualCDC/DualCDC.c @@ -45,16 +45,19 @@ USB_ClassInfo_CDC_Device_t VirtualSerial1_CDC_Interface =  	{
  		.Config =
  			{
 -				.ControlInterfaceNumber     = 0,
 +				.ControlInterfaceNumber           = 0,
 -				.DataINEndpointNumber       = CDC1_TX_EPNUM,
 -				.DataINEndpointSize         = CDC_TXRX_EPSIZE,
 +				.DataINEndpointNumber             = CDC1_TX_EPNUM,
 +				.DataINEndpointSize               = CDC_TXRX_EPSIZE,
 +				.DataINEndpointDoubleBank         = false,
 -				.DataOUTEndpointNumber      = CDC1_RX_EPNUM,
 -				.DataOUTEndpointSize        = CDC_TXRX_EPSIZE,
 +				.DataOUTEndpointNumber            = CDC1_RX_EPNUM,
 +				.DataOUTEndpointSize              = CDC_TXRX_EPSIZE,
 +				.DataOUTEndpointDoubleBank        = false,
 -				.NotificationEndpointNumber = CDC1_NOTIFICATION_EPNUM,
 -				.NotificationEndpointSize   = CDC_NOTIFICATION_EPSIZE,
 +				.NotificationEndpointNumber       = CDC1_NOTIFICATION_EPNUM,
 +				.NotificationEndpointSize         = CDC_NOTIFICATION_EPSIZE,
 +				.NotificationEndpointDoubleBank   = false,
  			},
  	};
 @@ -67,16 +70,19 @@ USB_ClassInfo_CDC_Device_t VirtualSerial2_CDC_Interface =  	{
  		.Config =
  			{
 -				.ControlInterfaceNumber     = 2,
 +				.ControlInterfaceNumber           = 2,
 -				.DataINEndpointNumber       = CDC2_TX_EPNUM,
 -				.DataINEndpointSize         = CDC_TXRX_EPSIZE,
 +				.DataINEndpointNumber             = CDC2_TX_EPNUM,
 +				.DataINEndpointSize               = CDC_TXRX_EPSIZE,
 +				.DataINEndpointDoubleBank         = false,
 -				.DataOUTEndpointNumber      = CDC2_RX_EPNUM,
 -				.DataOUTEndpointSize        = CDC_TXRX_EPSIZE,
 +				.DataOUTEndpointNumber            = CDC2_RX_EPNUM,
 +				.DataOUTEndpointSize              = CDC_TXRX_EPSIZE,
 +				.DataOUTEndpointDoubleBank        = false,
 -				.NotificationEndpointNumber = CDC2_NOTIFICATION_EPNUM,
 -				.NotificationEndpointSize   = CDC_NOTIFICATION_EPSIZE,
 +				.NotificationEndpointNumber       = CDC2_NOTIFICATION_EPNUM,
 +				.NotificationEndpointSize         = CDC_NOTIFICATION_EPSIZE,
 +				.NotificationEndpointDoubleBank   = false,
  			},
  	};
 diff --git a/Demos/Device/ClassDriver/GenericHID/GenericHID.c b/Demos/Device/ClassDriver/GenericHID/GenericHID.c index c27558b9e..bd75e4ec1 100644 --- a/Demos/Device/ClassDriver/GenericHID/GenericHID.c +++ b/Demos/Device/ClassDriver/GenericHID/GenericHID.c @@ -55,13 +55,14 @@ USB_ClassInfo_HID_Device_t Generic_HID_Interface =  	{
  		.Config =
  			{
 -				.InterfaceNumber         = 0,
 +				.InterfaceNumber              = 0,
 -				.ReportINEndpointNumber  = GENERIC_IN_EPNUM,
 -				.ReportINEndpointSize    = GENERIC_EPSIZE,
 +				.ReportINEndpointNumber       = GENERIC_IN_EPNUM,
 +				.ReportINEndpointSize         = GENERIC_EPSIZE,
 +				.ReportINEndpointDoubleBank   = false,
 -				.PrevReportINBuffer      = PrevHIDReportBuffer,
 -				.PrevReportINBufferSize  = sizeof(PrevHIDReportBuffer),
 +				.PrevReportINBuffer           = PrevHIDReportBuffer,
 +				.PrevReportINBufferSize       = sizeof(PrevHIDReportBuffer),
  			},
  	};
 diff --git a/Demos/Device/ClassDriver/Joystick/Joystick.c b/Demos/Device/ClassDriver/Joystick/Joystick.c index b18b7ebc8..36a74a218 100644 --- a/Demos/Device/ClassDriver/Joystick/Joystick.c +++ b/Demos/Device/ClassDriver/Joystick/Joystick.c @@ -47,13 +47,14 @@ USB_ClassInfo_HID_Device_t Joystick_HID_Interface =  	{
  		.Config =
  			{
 -				.InterfaceNumber         = 0,
 +				.InterfaceNumber              = 0,
 -				.ReportINEndpointNumber  = JOYSTICK_EPNUM,
 -				.ReportINEndpointSize    = JOYSTICK_EPSIZE,
 +				.ReportINEndpointNumber       = JOYSTICK_EPNUM,
 +				.ReportINEndpointSize         = JOYSTICK_EPSIZE,
 +				.ReportINEndpointDoubleBank   = false,
 -				.PrevReportINBuffer      = PrevJoystickHIDReportBuffer,
 -				.PrevReportINBufferSize  = sizeof(PrevJoystickHIDReportBuffer),
 +				.PrevReportINBuffer           = PrevJoystickHIDReportBuffer,
 +				.PrevReportINBufferSize       = sizeof(PrevJoystickHIDReportBuffer),
  			},
  	};
 diff --git a/Demos/Device/ClassDriver/Keyboard/Keyboard.c b/Demos/Device/ClassDriver/Keyboard/Keyboard.c index e609d7acb..ea373a802 100644 --- a/Demos/Device/ClassDriver/Keyboard/Keyboard.c +++ b/Demos/Device/ClassDriver/Keyboard/Keyboard.c @@ -48,13 +48,14 @@ USB_ClassInfo_HID_Device_t Keyboard_HID_Interface =   	{
  		.Config =
  			{
 -				.InterfaceNumber         = 0,
 +				.InterfaceNumber              = 0,
 -				.ReportINEndpointNumber  = KEYBOARD_EPNUM,
 -				.ReportINEndpointSize    = KEYBOARD_EPSIZE,
 +				.ReportINEndpointNumber       = KEYBOARD_EPNUM,
 +				.ReportINEndpointSize         = KEYBOARD_EPSIZE,
 +				.ReportINEndpointDoubleBank   = false,
 -				.PrevReportINBuffer      = PrevKeyboardHIDReportBuffer,
 -				.PrevReportINBufferSize  = sizeof(PrevKeyboardHIDReportBuffer),
 +				.PrevReportINBuffer           = PrevKeyboardHIDReportBuffer,
 +				.PrevReportINBufferSize       = sizeof(PrevKeyboardHIDReportBuffer),
  			},
      };
 diff --git a/Demos/Device/ClassDriver/KeyboardMouse/KeyboardMouse.c b/Demos/Device/ClassDriver/KeyboardMouse/KeyboardMouse.c index 5ac5b8d85..77aa2a91a 100644 --- a/Demos/Device/ClassDriver/KeyboardMouse/KeyboardMouse.c +++ b/Demos/Device/ClassDriver/KeyboardMouse/KeyboardMouse.c @@ -52,13 +52,14 @@ USB_ClassInfo_HID_Device_t Keyboard_HID_Interface =  	{
  		.Config =
  			{
 -				.InterfaceNumber         = 0,
 +				.InterfaceNumber              = 0,
 -				.ReportINEndpointNumber  = KEYBOARD_IN_EPNUM,
 -				.ReportINEndpointSize    = HID_EPSIZE,
 +				.ReportINEndpointNumber       = KEYBOARD_IN_EPNUM,
 +				.ReportINEndpointSize         = HID_EPSIZE,
 +				.ReportINEndpointDoubleBank   = false,
 -				.PrevReportINBuffer      = PrevKeyboardHIDReportBuffer,
 -				.PrevReportINBufferSize  = sizeof(PrevKeyboardHIDReportBuffer),
 +				.PrevReportINBuffer           = PrevKeyboardHIDReportBuffer,
 +				.PrevReportINBufferSize       = sizeof(PrevKeyboardHIDReportBuffer),
  			},
  	};
 diff --git a/Demos/Device/ClassDriver/MIDI/MIDI.c b/Demos/Device/ClassDriver/MIDI/MIDI.c index d50a254a2..b70482787 100644 --- a/Demos/Device/ClassDriver/MIDI/MIDI.c +++ b/Demos/Device/ClassDriver/MIDI/MIDI.c @@ -46,11 +46,13 @@ USB_ClassInfo_MIDI_Device_t Keyboard_MIDI_Interface =  			{
  				.StreamingInterfaceNumber = 1,
 -				.DataINEndpointNumber     = MIDI_STREAM_IN_EPNUM,
 -				.DataINEndpointSize       = MIDI_STREAM_EPSIZE,
 +				.DataINEndpointNumber      = MIDI_STREAM_IN_EPNUM,
 +				.DataINEndpointSize        = MIDI_STREAM_EPSIZE,
 +				.DataINEndpointDoubleBank  = false,
 -				.DataOUTEndpointNumber    = MIDI_STREAM_OUT_EPNUM,
 -				.DataOUTEndpointSize      = MIDI_STREAM_EPSIZE,
 +				.DataOUTEndpointNumber     = MIDI_STREAM_OUT_EPNUM,
 +				.DataOUTEndpointSize       = MIDI_STREAM_EPSIZE,
 +				.DataOUTEndpointDoubleBank = false,
  			},
  	};
 diff --git a/Demos/Device/ClassDriver/MassStorage/MassStorage.c b/Demos/Device/ClassDriver/MassStorage/MassStorage.c index 4092680c4..3895555d1 100644 --- a/Demos/Device/ClassDriver/MassStorage/MassStorage.c +++ b/Demos/Device/ClassDriver/MassStorage/MassStorage.c @@ -44,15 +44,17 @@ USB_ClassInfo_MS_Device_t Disk_MS_Interface =  	{
  		.Config =
  			{
 -				.InterfaceNumber        = 0,
 +				.InterfaceNumber           = 0,
 -				.DataINEndpointNumber   = MASS_STORAGE_IN_EPNUM,
 -				.DataINEndpointSize     = MASS_STORAGE_IO_EPSIZE,
 +				.DataINEndpointNumber      = MASS_STORAGE_IN_EPNUM,
 +				.DataINEndpointSize        = MASS_STORAGE_IO_EPSIZE,
 +				.DataINEndpointDoubleBank  = false,
 -				.DataOUTEndpointNumber  = MASS_STORAGE_OUT_EPNUM,
 -				.DataOUTEndpointSize    = MASS_STORAGE_IO_EPSIZE,
 +				.DataOUTEndpointNumber     = MASS_STORAGE_OUT_EPNUM,
 +				.DataOUTEndpointSize       = MASS_STORAGE_IO_EPSIZE,
 +				.DataOUTEndpointDoubleBank = false,
 -				.TotalLUNs              = TOTAL_LUNS,
 +				.TotalLUNs                 = TOTAL_LUNS,
  			},
  	};
 diff --git a/Demos/Device/ClassDriver/MassStorageKeyboard/MassStorageKeyboard.c b/Demos/Device/ClassDriver/MassStorageKeyboard/MassStorageKeyboard.c index 033bc5665..4e68f5c97 100644 --- a/Demos/Device/ClassDriver/MassStorageKeyboard/MassStorageKeyboard.c +++ b/Demos/Device/ClassDriver/MassStorageKeyboard/MassStorageKeyboard.c @@ -36,6 +36,28 @@   */
  #include "MassStorageKeyboard.h"
 +	
 +/** LUFA Mass Storage Class driver interface configuration and state information. This structure is
 + *  passed to all Mass Storage Class driver functions, so that multiple instances of the same class
 + *  within a device can be differentiated from one another.
 + */
 +USB_ClassInfo_MS_Device_t Disk_MS_Interface =
 +	{
 +		.Config =
 +			{
 +				.InterfaceNumber           = 0,
 +
 +				.DataINEndpointNumber      = MASS_STORAGE_IN_EPNUM,
 +				.DataINEndpointSize        = MASS_STORAGE_IO_EPSIZE,
 +				.DataINEndpointDoubleBank  = false,
 +
 +				.DataOUTEndpointNumber     = MASS_STORAGE_OUT_EPNUM,
 +				.DataOUTEndpointSize       = MASS_STORAGE_IO_EPSIZE,
 +				.DataOUTEndpointDoubleBank = false,
 +
 +				.TotalLUNs                 = TOTAL_LUNS,
 +			},
 +	};
  /** Buffer to hold the previously generated Keyboard HID report, for comparison purposes inside the HID class driver. */
  uint8_t PrevKeyboardHIDReportBuffer[sizeof(USB_KeyboardReport_Data_t)];
 @@ -48,35 +70,16 @@ USB_ClassInfo_HID_Device_t Keyboard_HID_Interface =   	{
  		.Config =
  			{
 -				.InterfaceNumber         = 1,
 +				.InterfaceNumber              = 1,
 -				.ReportINEndpointNumber  = KEYBOARD_EPNUM,
 -				.ReportINEndpointSize    = KEYBOARD_EPSIZE,
 +				.ReportINEndpointNumber       = KEYBOARD_EPNUM,
 +				.ReportINEndpointSize         = KEYBOARD_EPSIZE,
 +				.ReportINEndpointDoubleBank   = false,
 -				.PrevReportINBuffer      = PrevKeyboardHIDReportBuffer,
 -				.PrevReportINBufferSize  = sizeof(PrevKeyboardHIDReportBuffer),
 +				.PrevReportINBuffer           = PrevKeyboardHIDReportBuffer,
 +				.PrevReportINBufferSize       = sizeof(PrevKeyboardHIDReportBuffer),
  			},
      };
 -	
 -/** LUFA Mass Storage Class driver interface configuration and state information. This structure is
 - *  passed to all Mass Storage Class driver functions, so that multiple instances of the same class
 - *  within a device can be differentiated from one another.
 - */
 -USB_ClassInfo_MS_Device_t Disk_MS_Interface =
 -	{
 -		.Config =
 -			{
 -				.InterfaceNumber        = 0,
 -
 -				.DataINEndpointNumber   = MASS_STORAGE_IN_EPNUM,
 -				.DataINEndpointSize     = MASS_STORAGE_IO_EPSIZE,
 -
 -				.DataOUTEndpointNumber  = MASS_STORAGE_OUT_EPNUM,
 -				.DataOUTEndpointSize    = MASS_STORAGE_IO_EPSIZE,
 -
 -				.TotalLUNs              = TOTAL_LUNS,
 -			},
 -	};
  /** Main program entry point. This routine contains the overall program flow, including initial
   *  setup of all components and the main program loop.
 diff --git a/Demos/Device/ClassDriver/Mouse/Mouse.c b/Demos/Device/ClassDriver/Mouse/Mouse.c index d54aecfaa..c53d429a4 100644 --- a/Demos/Device/ClassDriver/Mouse/Mouse.c +++ b/Demos/Device/ClassDriver/Mouse/Mouse.c @@ -47,13 +47,14 @@ USB_ClassInfo_HID_Device_t Mouse_HID_Interface =  	{
  		.Config =
  			{
 -				.InterfaceNumber         = 0,
 +				.InterfaceNumber              = 0,
 -				.ReportINEndpointNumber  = MOUSE_EPNUM,
 -				.ReportINEndpointSize    = MOUSE_EPSIZE,
 +				.ReportINEndpointNumber       = MOUSE_EPNUM,
 +				.ReportINEndpointSize         = MOUSE_EPSIZE,
 +				.ReportINEndpointDoubleBank   = false,
 -				.PrevReportINBuffer      = PrevMouseHIDReportBuffer,
 -				.PrevReportINBufferSize  = sizeof(PrevMouseHIDReportBuffer),
 +				.PrevReportINBuffer           = PrevMouseHIDReportBuffer,
 +				.PrevReportINBufferSize       = sizeof(PrevMouseHIDReportBuffer),
  			},
  	};
 diff --git a/Demos/Device/ClassDriver/RNDISEthernet/RNDISEthernet.c b/Demos/Device/ClassDriver/RNDISEthernet/RNDISEthernet.c index 905f4efd0..03daec9d5 100644 --- a/Demos/Device/ClassDriver/RNDISEthernet/RNDISEthernet.c +++ b/Demos/Device/ClassDriver/RNDISEthernet/RNDISEthernet.c @@ -44,19 +44,22 @@ USB_ClassInfo_RNDIS_Device_t Ethernet_RNDIS_Interface =  	{
  		.Config =
  			{
 -				.ControlInterfaceNumber     = 0,
 +				.ControlInterfaceNumber         = 0,
 -				.DataINEndpointNumber       = CDC_TX_EPNUM,
 -				.DataINEndpointSize         = CDC_TXRX_EPSIZE,
 +				.DataINEndpointNumber           = CDC_TX_EPNUM,
 +				.DataINEndpointSize             = CDC_TXRX_EPSIZE,
 +				.DataINEndpointDoubleBank       = false,
 -				.DataOUTEndpointNumber      = CDC_RX_EPNUM,
 -				.DataOUTEndpointSize        = CDC_TXRX_EPSIZE,
 +				.DataOUTEndpointNumber          = CDC_RX_EPNUM,
 +				.DataOUTEndpointSize            = CDC_TXRX_EPSIZE,
 +				.DataOUTEndpointDoubleBank      = false,
 -				.NotificationEndpointNumber = CDC_NOTIFICATION_EPNUM,
 -				.NotificationEndpointSize   = CDC_NOTIFICATION_EPSIZE,
 +				.NotificationEndpointNumber     = CDC_NOTIFICATION_EPNUM,
 +				.NotificationEndpointSize       = CDC_NOTIFICATION_EPSIZE,
 +				.NotificationEndpointDoubleBank = false,
 -				.AdapterVendorDescription   = "LUFA RNDIS Demo Adapter",
 -				.AdapterMACAddress          = {ADAPTER_MAC_ADDRESS},
 +				.AdapterVendorDescription       = "LUFA RNDIS Demo Adapter",
 +				.AdapterMACAddress              = {ADAPTER_MAC_ADDRESS},
  			},
  	};
 diff --git a/Demos/DualRole/ClassDriver/MouseHostDevice/DeviceFunctions.c b/Demos/DualRole/ClassDriver/MouseHostDevice/DeviceFunctions.c index 33bf7dc20..47a191350 100644 --- a/Demos/DualRole/ClassDriver/MouseHostDevice/DeviceFunctions.c +++ b/Demos/DualRole/ClassDriver/MouseHostDevice/DeviceFunctions.c @@ -47,13 +47,14 @@ USB_ClassInfo_HID_Device_t Mouse_HID_Device_Interface =  	{
  		.Config =
  			{
 -				.InterfaceNumber         = 0,
 +				.InterfaceNumber            = 0,
 -				.ReportINEndpointNumber  = MOUSE_EPNUM,
 -				.ReportINEndpointSize    = MOUSE_EPSIZE,
 +				.ReportINEndpointNumber     = MOUSE_EPNUM,
 +				.ReportINEndpointSize       = MOUSE_EPSIZE,
 +				.ReportINEndpointDoubleBank = false,
 -				.PrevReportINBuffer      = PrevMouseHIDReportBuffer,
 -				.PrevReportINBufferSize  = sizeof(PrevMouseHIDReportBuffer),
 +				.PrevReportINBuffer         = PrevMouseHIDReportBuffer,
 +				.PrevReportINBufferSize     = sizeof(PrevMouseHIDReportBuffer),
  			},
  	};
 diff --git a/LUFA/Common/Common.h b/LUFA/Common/Common.h index 92f4f22fa..6f64dbdfa 100644 --- a/LUFA/Common/Common.h +++ b/LUFA/Common/Common.h @@ -57,13 +57,9 @@  	/* Includes: */
  		#include <avr/io.h>
 -		#include <stdio.h>
 -		#include <avr/version.h>
 -		
 +	
  		#include "FunctionAttributes.h"
  		#include "BoardTypes.h"
 -		
 -		#include <alloca.h>
  	/* Public Interface - May be used in end-application: */
  		/* Macros: */		
 diff --git a/LUFA/Drivers/USB/Class/Device/Audio.h b/LUFA/Drivers/USB/Class/Device/Audio.h index 0d8e0ec88..0200cf428 100644 --- a/LUFA/Drivers/USB/Class/Device/Audio.h +++ b/LUFA/Drivers/USB/Class/Device/Audio.h @@ -66,21 +66,21 @@  				const struct
  				{
  					uint8_t  StreamingInterfaceNumber; /**< Index of the Audio Streaming interface within the device this
 -														*   structure controls.
 +														*   structure controls
  														*/
  					uint8_t  DataINEndpointNumber; /**< Endpoint number of the incomming Audio Streaming data, if available
 -													*   (zero if unused).
 +													*   (zero if unused)
  													*/
  					uint16_t DataINEndpointSize; /**< Size in bytes of the incomming Audio Streaming data endpoint, if available
 -												  *   (zero if unused).
 +												  *   (zero if unused)
  												  */
  					uint8_t  DataOUTEndpointNumber; /**< Endpoint number of the outgoing Audio Streaming data, if available
 -													 *   (zero if unused).
 +													 *   (zero if unused)
  													 */
  					uint16_t DataOUTEndpointSize; /**< Size in bytes of the outgoing Audio Streaming data endpoint, if available
 -												   *   (zero if unused).
 +												   *   (zero if unused)
  												   */			
  				} Config; /**< Config data for the USB class interface within the device. All elements in this section
  				           *   <b>must</b> be set or the interface will fail to enumerate and operate correctly.
 diff --git a/LUFA/Drivers/USB/Class/Device/CDC.c b/LUFA/Drivers/USB/Class/Device/CDC.c index c968d7f0c..dfee2bb1b 100644 --- a/LUFA/Drivers/USB/Class/Device/CDC.c +++ b/LUFA/Drivers/USB/Class/Device/CDC.c @@ -91,21 +91,21 @@ bool CDC_Device_ConfigureEndpoints(USB_ClassInfo_CDC_Device_t* CDCInterfaceInfo)  	if (!(Endpoint_ConfigureEndpoint(CDCInterfaceInfo->Config.DataINEndpointNumber, EP_TYPE_BULK,
  							         ENDPOINT_DIR_IN, CDCInterfaceInfo->Config.DataINEndpointSize,
 -							         ENDPOINT_BANK_SINGLE)))
 +							         CDCInterfaceInfo->Config.DataINEndpointDoubleBank ? ENDPOINT_BANK_DOUBLE : ENDPOINT_BANK_SINGLE)))
  	{
  		return false;
  	}
  	if (!(Endpoint_ConfigureEndpoint(CDCInterfaceInfo->Config.DataOUTEndpointNumber, EP_TYPE_BULK,
  	                                 ENDPOINT_DIR_OUT, CDCInterfaceInfo->Config.DataOUTEndpointSize,
 -	                                 ENDPOINT_BANK_SINGLE)))
 +	                                 CDCInterfaceInfo->Config.DataOUTEndpointDoubleBank ? ENDPOINT_BANK_DOUBLE : ENDPOINT_BANK_SINGLE)))
  	{
  		return false;
  	}
  	if (!(Endpoint_ConfigureEndpoint(CDCInterfaceInfo->Config.NotificationEndpointNumber, EP_TYPE_INTERRUPT,
  	                                 ENDPOINT_DIR_IN, CDCInterfaceInfo->Config.NotificationEndpointSize,
 -	                                 ENDPOINT_BANK_SINGLE)))
 +	                                 CDCInterfaceInfo->Config.NotificationEndpointDoubleBank ? ENDPOINT_BANK_DOUBLE : ENDPOINT_BANK_SINGLE)))
  	{
  		return false;
  	}
 diff --git a/LUFA/Drivers/USB/Class/Device/CDC.h b/LUFA/Drivers/USB/Class/Device/CDC.h index 3e7dbb08f..c3304f099 100644 --- a/LUFA/Drivers/USB/Class/Device/CDC.h +++ b/LUFA/Drivers/USB/Class/Device/CDC.h @@ -69,12 +69,15 @@  					uint8_t  DataINEndpointNumber; /**< Endpoint number of the CDC interface's IN data endpoint */
  					uint16_t DataINEndpointSize; /**< Size in bytes of the CDC interface's IN data endpoint */
 +					bool     DataINEndpointDoubleBank; /** Indicates if the CDC interface's IN data endpoint should use double banking */
  					uint8_t  DataOUTEndpointNumber; /**< Endpoint number of the CDC interface's OUT data endpoint */
  					uint16_t DataOUTEndpointSize;  /**< Size in bytes of the CDC interface's OUT data endpoint */
 +					bool     DataOUTEndpointDoubleBank; /** Indicates if the CDC interface's OUT data endpoint should use double banking */
  					uint8_t  NotificationEndpointNumber; /**< Endpoint number of the CDC interface's IN notification endpoint, if used */
  					uint16_t NotificationEndpointSize;  /**< Size in bytes of the CDC interface's IN notification endpoint, if used */
 +					bool     NotificationEndpointDoubleBank; /** Indicates if the CDC interface's notification endpoint should use double banking */
  				} Config; /**< Config data for the USB class interface within the device. All elements in this section
  				           *   <b>must</b> be set or the interface will fail to enumerate and operate correctly.
  				           */
 diff --git a/LUFA/Drivers/USB/Class/Device/HID.c b/LUFA/Drivers/USB/Class/Device/HID.c index 26f5697d2..0bf1f7020 100644 --- a/LUFA/Drivers/USB/Class/Device/HID.c +++ b/LUFA/Drivers/USB/Class/Device/HID.c @@ -134,7 +134,8 @@ bool HID_Device_ConfigureEndpoints(USB_ClassInfo_HID_Device_t* const HIDInterfac  	HIDInterfaceInfo->State.IdleCount = 500;
  	if (!(Endpoint_ConfigureEndpoint(HIDInterfaceInfo->Config.ReportINEndpointNumber, EP_TYPE_INTERRUPT,
 -									 ENDPOINT_DIR_IN, HIDInterfaceInfo->Config.ReportINEndpointSize, ENDPOINT_BANK_SINGLE)))
 +									 ENDPOINT_DIR_IN, HIDInterfaceInfo->Config.ReportINEndpointSize,
 +									 HIDInterfaceInfo->Config.ReportINEndpointDoubleBank ? ENDPOINT_BANK_DOUBLE : ENDPOINT_BANK_SINGLE)))
  	{
  		return false;
  	}
 diff --git a/LUFA/Drivers/USB/Class/Device/HID.h b/LUFA/Drivers/USB/Class/Device/HID.h index 545b38d14..7bcc263a8 100644 --- a/LUFA/Drivers/USB/Class/Device/HID.h +++ b/LUFA/Drivers/USB/Class/Device/HID.h @@ -73,6 +73,7 @@  					uint8_t  ReportINEndpointNumber; /**< Endpoint number of the HID interface's IN report endpoint */
  					uint16_t ReportINEndpointSize; /**< Size in bytes of the HID interface's IN report endpoint */					
 +					bool     ReportINEndpointDoubleBank; /** Indicates if the HID interface's IN report endpoint should use double banking */
  					void*    PrevReportINBuffer; /**< Pointer to a buffer where the previously created HID input report can be
  					                              *  stored by the driver, for comparison purposes to detect report changes that
 diff --git a/LUFA/Drivers/USB/Class/Device/MIDI.c b/LUFA/Drivers/USB/Class/Device/MIDI.c index eede4806b..2685ab0ae 100644 --- a/LUFA/Drivers/USB/Class/Device/MIDI.c +++ b/LUFA/Drivers/USB/Class/Device/MIDI.c @@ -46,7 +46,7 @@ bool MIDI_Device_ConfigureEndpoints(USB_ClassInfo_MIDI_Device_t* const MIDIInter  	{
  		if (!(Endpoint_ConfigureEndpoint(MIDIInterfaceInfo->Config.DataINEndpointNumber, EP_TYPE_BULK,
  										 ENDPOINT_DIR_IN, MIDIInterfaceInfo->Config.DataINEndpointSize,
 -										 ENDPOINT_BANK_SINGLE)))
 +										 MIDIInterfaceInfo->Config.DataINEndpointDoubleBank ? ENDPOINT_BANK_DOUBLE : ENDPOINT_BANK_SINGLE)))
  		{
  			return false;
  		}
 @@ -56,7 +56,7 @@ bool MIDI_Device_ConfigureEndpoints(USB_ClassInfo_MIDI_Device_t* const MIDIInter  	{
  		if (!(Endpoint_ConfigureEndpoint(MIDIInterfaceInfo->Config.DataOUTEndpointNumber, EP_TYPE_BULK,
  										 ENDPOINT_DIR_OUT, MIDIInterfaceInfo->Config.DataOUTEndpointSize,
 -										 ENDPOINT_BANK_SINGLE)))
 +										 MIDIInterfaceInfo->Config.DataOUTEndpointDoubleBank ? ENDPOINT_BANK_DOUBLE : ENDPOINT_BANK_SINGLE)))
  		{
  			return false;
  		}
 diff --git a/LUFA/Drivers/USB/Class/Device/MIDI.h b/LUFA/Drivers/USB/Class/Device/MIDI.h index c7f67e20c..c17b72ad7 100644 --- a/LUFA/Drivers/USB/Class/Device/MIDI.h +++ b/LUFA/Drivers/USB/Class/Device/MIDI.h @@ -70,9 +70,11 @@  					uint8_t  DataINEndpointNumber; /**< Endpoint number of the incomming MIDI data, if available (zero if unused) */
  					uint16_t DataINEndpointSize; /**< Size in bytes of the incomming MIDI data endpoint, if available (zero if unused) */
 +					bool     DataINEndpointDoubleBank; /** Indicates if the MIDI interface's IN data endpoint should use double banking */
  					uint8_t  DataOUTEndpointNumber; /**< Endpoint number of the outgoing MIDI data, if available (zero if unused) */
  					uint16_t DataOUTEndpointSize; /**< Size in bytes of the outgoing MIDI data endpoint, if available (zero if unused) */
 +					bool     DataOUTEndpointDoubleBank; /** Indicates if the MIDI interface's IN data endpoint should use double banking */
  				} Config; /**< Config data for the USB class interface within the device. All elements in this section
  				           *   <b>must</b> be set or the interface will fail to enumerate and operate correctly.
  				           */									 
 diff --git a/LUFA/Drivers/USB/Class/Device/MassStorage.c b/LUFA/Drivers/USB/Class/Device/MassStorage.c index 04c63fca7..fce864386 100644 --- a/LUFA/Drivers/USB/Class/Device/MassStorage.c +++ b/LUFA/Drivers/USB/Class/Device/MassStorage.c @@ -78,14 +78,14 @@ bool MS_Device_ConfigureEndpoints(USB_ClassInfo_MS_Device_t* const MSInterfaceIn  	if (!(Endpoint_ConfigureEndpoint(MSInterfaceInfo->Config.DataINEndpointNumber, EP_TYPE_BULK,
  							         ENDPOINT_DIR_IN, MSInterfaceInfo->Config.DataINEndpointSize,
 -							         ENDPOINT_BANK_SINGLE)))
 +							         MSInterfaceInfo->Config.DataINEndpointDoubleBank ? ENDPOINT_BANK_DOUBLE : ENDPOINT_BANK_SINGLE)))
  	{
  		return false;
  	}
  	if (!(Endpoint_ConfigureEndpoint(MSInterfaceInfo->Config.DataOUTEndpointNumber, EP_TYPE_BULK,
  	                                 ENDPOINT_DIR_OUT, MSInterfaceInfo->Config.DataOUTEndpointSize,
 -	                                 ENDPOINT_BANK_SINGLE)))
 +	                                 MSInterfaceInfo->Config.DataOUTEndpointDoubleBank ? ENDPOINT_BANK_DOUBLE : ENDPOINT_BANK_SINGLE)))
  	{
  		return false;
  	}
 diff --git a/LUFA/Drivers/USB/Class/Device/MassStorage.h b/LUFA/Drivers/USB/Class/Device/MassStorage.h index 4dca793c5..3de5fd396 100644 --- a/LUFA/Drivers/USB/Class/Device/MassStorage.h +++ b/LUFA/Drivers/USB/Class/Device/MassStorage.h @@ -69,9 +69,11 @@  					uint8_t  DataINEndpointNumber; /**< Endpoint number of the Mass Storage interface's IN data endpoint */
  					uint16_t DataINEndpointSize; /**< Size in bytes of the Mass Storage interface's IN data endpoint */
 +					bool     DataINEndpointDoubleBank; /** Indicates if the Mass Storage interface's IN data endpoint should use double banking */
  					uint8_t  DataOUTEndpointNumber; /**< Endpoint number of the Mass Storage interface's OUT data endpoint */
  					uint16_t DataOUTEndpointSize;  /**< Size in bytes of the Mass Storage interface's OUT data endpoint */
 +					bool     DataOUTEndpointDoubleBank; /** Indicates if the Mass Storage interface's OUT data endpoint should use double banking */
  					uint8_t  TotalLUNs; /**< Total number of logical drives in the Mass Storage interface */
  				} Config; /**< Config data for the USB class interface within the device. All elements in this section
 diff --git a/LUFA/Drivers/USB/Class/Device/RNDIS.c b/LUFA/Drivers/USB/Class/Device/RNDIS.c index 09352143c..8ba46c7ac 100644 --- a/LUFA/Drivers/USB/Class/Device/RNDIS.c +++ b/LUFA/Drivers/USB/Class/Device/RNDIS.c @@ -116,21 +116,21 @@ bool RNDIS_Device_ConfigureEndpoints(USB_ClassInfo_RNDIS_Device_t* const RNDISIn  	if (!(Endpoint_ConfigureEndpoint(RNDISInterfaceInfo->Config.DataINEndpointNumber, EP_TYPE_BULK,
  							         ENDPOINT_DIR_IN, RNDISInterfaceInfo->Config.DataINEndpointSize,
 -							         ENDPOINT_BANK_SINGLE)))
 +							         RNDISInterfaceInfo->Config.DataINEndpointDoubleBank ? ENDPOINT_BANK_DOUBLE : ENDPOINT_BANK_SINGLE)))
  	{
  		return false;
  	}
  	if (!(Endpoint_ConfigureEndpoint(RNDISInterfaceInfo->Config.DataOUTEndpointNumber, EP_TYPE_BULK,
  	                                 ENDPOINT_DIR_OUT, RNDISInterfaceInfo->Config.DataOUTEndpointSize,
 -	                                 ENDPOINT_BANK_SINGLE)))
 +	                                 RNDISInterfaceInfo->Config.DataOUTEndpointDoubleBank ? ENDPOINT_BANK_DOUBLE : ENDPOINT_BANK_SINGLE)))
  	{
  		return false;
  	}
  	if (!(Endpoint_ConfigureEndpoint(RNDISInterfaceInfo->Config.NotificationEndpointNumber, EP_TYPE_INTERRUPT,
  	                                 ENDPOINT_DIR_IN, RNDISInterfaceInfo->Config.NotificationEndpointSize,
 -	                                 ENDPOINT_BANK_SINGLE)))
 +	                                 RNDISInterfaceInfo->Config.NotificationEndpointDoubleBank ? ENDPOINT_BANK_DOUBLE : ENDPOINT_BANK_SINGLE)))
  	{
  		return false;
  	}
 diff --git a/LUFA/Drivers/USB/Class/Device/RNDIS.h b/LUFA/Drivers/USB/Class/Device/RNDIS.h index 7d7a0f5b9..7521f0741 100644 --- a/LUFA/Drivers/USB/Class/Device/RNDIS.h +++ b/LUFA/Drivers/USB/Class/Device/RNDIS.h @@ -70,12 +70,15 @@  					uint8_t  DataINEndpointNumber; /**< Endpoint number of the CDC interface's IN data endpoint */
  					uint16_t DataINEndpointSize; /**< Size in bytes of the CDC interface's IN data endpoint */
 +					bool     DataINEndpointDoubleBank; /** Indicates if the RNDIS interface's IN data endpoint should use double banking */
  					uint8_t  DataOUTEndpointNumber; /**< Endpoint number of the CDC interface's OUT data endpoint */
  					uint16_t DataOUTEndpointSize;  /**< Size in bytes of the CDC interface's OUT data endpoint */
 +					bool     DataOUTEndpointDoubleBank; /** Indicates if the RNDIS interface's OUT data endpoint should use double banking */
  					uint8_t  NotificationEndpointNumber; /**< Endpoint number of the CDC interface's IN notification endpoint, if used */
  					uint16_t NotificationEndpointSize;  /**< Size in bytes of the CDC interface's IN notification endpoint, if used */
 +					bool     NotificationEndpointDoubleBank; /** Indicates if the RNDIS interface's notification endpoint should use double banking */
  					char*         AdapterVendorDescription; /**< String description of the adapter vendor */
  					MAC_Address_t AdapterMACAddress; /**< MAC address of the adapter */
 diff --git a/LUFA/ManPages/ChangeLog.txt b/LUFA/ManPages/ChangeLog.txt index 52f01fac7..9fe00ee48 100644 --- a/LUFA/ManPages/ChangeLog.txt +++ b/LUFA/ManPages/ChangeLog.txt @@ -18,6 +18,7 @@    *  - Added new Joystick Host ClassDriver and LowLevel demos
    *  - Added new Printer Host mode Class driver
    *  - Added new Printer Host mode ClassDriver demo
 +  *  - Added optional support for double banked endpoints in the Device mode Class drivers
    *
    *  <b>Changed:</b>
    *  - Removed mostly useless "TestApp" demo, as it was mainly useful only for checking for sytax errors in the library
 diff --git a/LUFA/ManPages/FutureChanges.txt b/LUFA/ManPages/FutureChanges.txt index 1e2eaa731..447c34b5d 100644 --- a/LUFA/ManPages/FutureChanges.txt +++ b/LUFA/ManPages/FutureChanges.txt @@ -24,6 +24,7 @@    *  - Add RNDIS Host Class driver
    *  - Add unit testing to APIs
    *  - Add board overviews
 +  *  - Add resume interrupt support
    *  - Make new demos
    *      -# Keyboard/Mouse Dual Class Host
    *      -# Multiple-Report HID device
 | 
