diff options
| author | Dean Camera <dean@fourwalledcubicle.com> | 2009-06-04 06:26:35 +0000 | 
|---|---|---|
| committer | Dean Camera <dean@fourwalledcubicle.com> | 2009-06-04 06:26:35 +0000 | 
| commit | 7665bf323e76ed1ebcfd137e2ab0bd356b43a5e8 (patch) | |
| tree | 2c188510edd76b4ef83f64639810f6dfbdd86b6b | |
| parent | dc42c5eb6b663b0b117b5660ba5818186744efd5 (diff) | |
| download | lufa-7665bf323e76ed1ebcfd137e2ab0bd356b43a5e8.tar.gz lufa-7665bf323e76ed1ebcfd137e2ab0bd356b43a5e8.tar.bz2 lufa-7665bf323e76ed1ebcfd137e2ab0bd356b43a5e8.zip | |
Fixed EVENT_USB_CDC_ControLineStateChanged() event not taking the CDC interface structure as a parameter.
Converted TestApp demo over to the new demo structure.
More class driver documentation improvements.
| -rw-r--r-- | Demos/OTG/TestApp/TestApp.c | 105 | ||||
| -rw-r--r-- | Demos/OTG/TestApp/TestApp.h | 29 | ||||
| -rw-r--r-- | Demos/OTG/TestApp/TestApp.txt | 10 | ||||
| -rw-r--r-- | Demos/OTG/TestApp/TestEvents.c | 14 | ||||
| -rw-r--r-- | Demos/OTG/TestApp/TestEvents.h | 11 | ||||
| -rw-r--r-- | Demos/OTG/TestApp/makefile | 1 | ||||
| -rw-r--r-- | LUFA/Drivers/USB/Class/Device/Audio.h | 22 | ||||
| -rw-r--r-- | LUFA/Drivers/USB/Class/Device/CDC.c | 2 | ||||
| -rw-r--r-- | LUFA/Drivers/USB/Class/Device/CDC.h | 33 | 
9 files changed, 100 insertions, 127 deletions
| diff --git a/Demos/OTG/TestApp/TestApp.c b/Demos/OTG/TestApp/TestApp.c index 4dc9b44e3..dc10aadfc 100644 --- a/Demos/OTG/TestApp/TestApp.c +++ b/Demos/OTG/TestApp/TestApp.c @@ -36,20 +36,31 @@  #include "TestApp.h"
 -/* Scheduler Task List */
 -TASK_LIST
 -{
 -	{ .Task = TestApp_CheckJoystick, .TaskStatus = TASK_RUN  },
 -	{ .Task = TestApp_CheckButton  , .TaskStatus = TASK_RUN  },
 -	{ .Task = TestApp_CheckTemp    , .TaskStatus = TASK_RUN  },
 -	{ .Task = USB_USBTask          , .TaskStatus = TASK_RUN  },
 -};
 -
  /** Main program entry point. This routine configures the hardware required by the application, then
   *  starts the scheduler to run the application tasks.
   */
  int main(void)
  {
 +	SetupHardware();
 +	
 +	puts_P(PSTR(ESC_RESET ESC_BG_WHITE ESC_INVERSE_ON ESC_ERASE_DISPLAY
 +	       "LUFA Demo running.\r\n" ESC_INVERSE_OFF));
 +
 +	for (;;)
 +	{
 +		CheckJoystick();
 +		CheckButton();
 +		CheckTemperature();
 +
 +		/* Clear output-compare flag (logic 1 clears the flag) */
 +		TIFR0 |= (1 << OCF0A);
 +		
 +		USB_USBTask();
 +	}
 +}
 +
 +void SetupHardware(void)
 +{
  	/* Disable watchdog if enabled by bootloader/fuses */
  	MCUSR &= ~(1 << WDRF);
  	wdt_disable();
 @@ -65,41 +76,20 @@ int main(void)  	LEDs_Init();
  	Buttons_Init();
 -	/* Millisecond timer initialization, with output compare interrupt enabled */
 +	/* Millisecond timer initialization */
  	OCR0A  = 0x7D;
  	TCCR0A = (1 << WGM01);
  	TCCR0B = ((1 << CS01) | (1 << CS00));
 -	TIMSK0 = (1 << OCIE0A);
 -	
 -	/* Turn on interrupts */
 -	sei();
 -
 -    /* Start-up message via USART */
 -	puts_P(PSTR(ESC_RESET ESC_BG_WHITE ESC_INVERSE_ON ESC_ERASE_DISPLAY
 -	       "LUFA Demo running.\r\n" ESC_INVERSE_OFF));
 -
 -	/* Scheduling - routine never returns, so put this last in the main function */
 -	Scheduler_Start();
 -}
 -
 -/** ISR for the timer 0 compare vector. This ISR fires once each millisecond, and increments the
 - *  scheduler tick counter.
 - */
 -ISR(TIMER0_COMPA_vect, ISR_BLOCK)
 -{
 -	/* Scheduler test - increment scheduler tick counter once each millisecond */
 -	Scheduler_TickCounter++;
  }
  /** Task responsible for checking the joystick position, and displaying the joystick position onto the
   *  board LEDs.
   */
 -TASK(TestApp_CheckJoystick)
 +void CheckJoystick(void)
  {
  	uint8_t JoyStatus_LCL = Joystick_GetStatus();
 -	uint8_t LEDMask       = 0;
 +	uint8_t LEDMask       = LEDS_NO_LEDS;
 -	/* Test of the Joystick - change a mask in response to joystick */
  	if (JoyStatus_LCL & JOY_UP)
  	  LEDMask |= LEDS_LED1;
 @@ -115,78 +105,61 @@ TASK(TestApp_CheckJoystick)  	if (JoyStatus_LCL & JOY_PRESS)
  	  LEDMask  = LEDS_ALL_LEDS;
 -	/* Test of LEDs - light up in response to joystick */
  	LEDs_SetAllLEDs(LEDMask);
  }
  /** Task responsible for checking the current temperature via the temperature sensor mounted on the
   *  board, and displaying it through the serial USART.
   */
 -TASK(TestApp_CheckTemp)
 +void CheckTemperature(void)
  {
 -	static SchedulerDelayCounter_t DelayCounter = 10000; // Force immediate run on start-up
 +	static uint16_t MSElapsed = 0;
 +
 +	if (TIFR0 & (1 << OCF0A))
 +	  MSElapsed++;
  	/* Task runs every 10000 ticks, 10 seconds for this demo */
 -	if (Scheduler_HasDelayElapsed(10000, &DelayCounter))
 +	if (MSElapsed == 1000)
  	{
  		printf_P(PSTR("Current temperature: %d Degrees Celcius\r\n\r\n"),
  		         (int8_t)Temperature_GetTemperature());
 -		/* Reset the delay counter, ready to count another 10000 tick interval */
 -		Scheduler_ResetDelay(&DelayCounter);
 +		MSElapsed = 0;
  	}	
  }
  /** Task responsible for checking the board's first button' position, and start-stopping other tasks and the USB
   *  interface in response to user joystick movements.
   */
 -TASK(TestApp_CheckButton)
 +void CheckButton(void)
  {
 -	static SchedulerDelayCounter_t DelayCounter = 0;
 -	static bool                    IsPressed;
 -	static bool                    BlockingJoystickTask;
 +	static uint16_t DebounceMSElapsed = 0;
 +	static bool     IsPressed;
 -	/* Check if board button pressed (start USB) */
 +	if (TIFR0 & (1 << OCF0A))
 +	  DebounceMSElapsed++;
 +
  	if (Buttons_GetStatus() & BUTTONS_BUTTON1)
  	{
 -		/* Debounce - check 100 ticks later to see if button is still being pressed */
 -		if ((IsPressed == false) && (Scheduler_HasDelayElapsed(100, &DelayCounter)))
 +		if (!(IsPressed) && (DebounceMSElapsed == 100))
  		{
 -			/* Set flag, indicating that current pressed state has been handled */
  			IsPressed = true;
 -			
 -			/* First start of the USB interface permanently blocks the joystick task */
 -			if (BlockingJoystickTask == false)
 -			{
 -				Scheduler_SetTaskMode(TestApp_CheckJoystick, TASK_STOP);
 -				BlockingJoystickTask = true;
 -			}
 -			/* Toggle USB interface */
  			if (USB_IsInitialized == true)
  			{
  				USB_ShutDown();
 -
 -				LEDs_SetAllLEDs(LEDS_LED1);
  				puts_P(PSTR(ESC_BG_WHITE "USB Power Off.\r\n"));
 -				
 -				Scheduler_SetTaskMode(TestApp_CheckTemp, TASK_RUN);
  			}
  			else
  			{
 -				Scheduler_SetTaskMode(TestApp_CheckTemp, TASK_STOP);
 -
 -				LEDs_SetAllLEDs(LEDS_LED2 | LEDS_LED3);
 -				puts_P(PSTR(ESC_BG_YELLOW "USB Power On.\r\n"));
 -				
 +				puts_P(PSTR(ESC_BG_YELLOW "USB Power On.\r\n"));				
  				USB_Init(USB_MODE_UID, USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL);
  			}
  		}
  	}
      else
      {
 -		/* Board button not pressed - reset debounce interval counter and press handled flag */
 -		Scheduler_ResetDelay(&DelayCounter);
 +		DebounceMSElapsed = 0;
  		IsPressed = false;
  	}
  }
 diff --git a/Demos/OTG/TestApp/TestApp.h b/Demos/OTG/TestApp/TestApp.h index 7ae5663d9..832b5f977 100644 --- a/Demos/OTG/TestApp/TestApp.h +++ b/Demos/OTG/TestApp/TestApp.h @@ -42,20 +42,21 @@  		#include <avr/wdt.h>
  		#include <avr/power.h>
 -		#include <LUFA/Version.h>                               // Library Version Information
 -		#include <LUFA/Drivers/USB/USB.h>                       // USB Functionality
 -		#include <LUFA/Scheduler/Scheduler.h>                   // Simple scheduler for task management
 -		#include <LUFA/Drivers/Misc/TerminalCodes.h>            // ANSI Terminal Escape Codes
 -		#include <LUFA/Drivers/Peripheral/ADC.h>                // ADC driver
 -		#include <LUFA/Drivers/Peripheral/SerialStream.h>       // USART Stream driver
 -		#include <LUFA/Drivers/Board/Joystick.h>                // Joystick driver
 -		#include <LUFA/Drivers/Board/LEDs.h>                    // LED driver
 -		#include <LUFA/Drivers/Board/Buttons.h>                 // Board Buttons driver
 -		#include <LUFA/Drivers/Board/Temperature.h>             // Temperature sensor driver
 +		#include <LUFA/Version.h>
 +		#include <LUFA/Drivers/USB/USB.h>
 +		#include <LUFA/Drivers/Misc/TerminalCodes.h>
 +		#include <LUFA/Drivers/Peripheral/ADC.h>
 +		#include <LUFA/Drivers/Peripheral/SerialStream.h>
 +		#include <LUFA/Drivers/Board/Joystick.h>
 +		#include <LUFA/Drivers/Board/LEDs.h>
 +		#include <LUFA/Drivers/Board/Buttons.h>
 +		#include <LUFA/Drivers/Board/Temperature.h>
 -	/* Task Definitions: */
 -		TASK(TestApp_CheckJoystick);
 -		TASK(TestApp_CheckButton);
 -		TASK(TestApp_CheckTemp);
 +	/* Function Prototypes: */
 +		void SetupHardware(void);
 +		
 +		void CheckJoystick(void);
 +		void CheckButton(void);
 +		void CheckTemperature(void);
  #endif
 diff --git a/Demos/OTG/TestApp/TestApp.txt b/Demos/OTG/TestApp/TestApp.txt index a0f1488ec..540a59ce1 100644 --- a/Demos/OTG/TestApp/TestApp.txt +++ b/Demos/OTG/TestApp/TestApp.txt @@ -42,19 +42,13 @@   *  Pressing the HWB will initiate the USB subsystem, enumerating
   *  the device (which has <b>no actual functionality beyond
   *  enumeration as a device or as a host in this demo</b>, and serves
 - *  only to demonstrate the USB portion of the library). It will
 - *  also suspend the joystick and temperature monitoring tasks.
 + *  only to demonstrate the USB portion of the library).
   * 
 - *  Pressing the HWB a second time will turn off the USB system
 - *  and resume the temperature printing task (but not the joystick
 - *  monitoring task).
 + *  Pressing the HWB a second time will turn off the USB system.
   *
   *  When activated, the USB events will be printed through the
   *  serial USART.
   *
 - *  When the USB subsystem is activated, the board LEDs will show
 - *  the current USB status.
 - *
   *  \section SSec_Options Project Options
   *
   *  The following defines can be found in this demo, which can control the demo behaviour when defined, or changed in value.
 diff --git a/Demos/OTG/TestApp/TestEvents.c b/Demos/OTG/TestApp/TestEvents.c index ea7fa4b55..9b091472f 100644 --- a/Demos/OTG/TestApp/TestEvents.c +++ b/Demos/OTG/TestApp/TestEvents.c @@ -79,9 +79,6 @@ void EVENT_USB_VBUSDisconnect(void)  void EVENT_USB_Connect(void)
  {
  	puts_P(PSTR(EVENT_PREFIX "USB  +\r\n"));
 -	LEDs_SetAllLEDs(LEDS_LED2 | LEDS_LED3 | LEDS_LED4);
 -	
 -	Scheduler_SetTaskMode(USB_USBTask, TASK_RUN);
  }
  /**
 @@ -90,24 +87,19 @@ void EVENT_USB_Connect(void)   */
  void EVENT_USB_Disconnect(void)
  {
 -	Scheduler_SetTaskMode(USB_USBTask, TASK_STOP);
 -
  	puts_P(PSTR(EVENT_PREFIX "USB  -\r\n"));
 -	LEDs_SetAllLEDs(LEDS_LED2 | LEDS_LED3 | LEDS_LED3);
  }
  /** Event handler for the USB_Suspend event. When fired, the event is logged to the USART. */
  void EVENT_USB_Suspend(void)
  {
  	puts_P(PSTR(EVENT_PREFIX ESC_BG_YELLOW "USB Sleep\r\n"));
 -	LEDs_SetAllLEDs(LEDS_ALL_LEDS);
  }
  /** Event handler for the USB_WakeUp event. When fired, the event is logged to the USART. */
  void EVENT_USB_WakeUp(void)
  {
  	puts_P(PSTR(EVENT_PREFIX ESC_BG_GREEN "USB Wakeup\r\n"));
 -	LEDs_SetAllLEDs(LEDS_LED2 | LEDS_LED4);
  }
  /** Event handler for the USB_Reset event. When fired, the event is logged to the USART. */
 @@ -129,8 +121,6 @@ void EVENT_USB_UIDChange(void)  	  ModeStrPtr = PSTR("DEVICE");
  	else
  	  ModeStrPtr = PSTR("N/A");
 -	
 -	LEDs_SetAllLEDs(LEDS_LED2 | LEDS_LED3);
  	printf_P(PSTR(" -- New Mode %S\r\n"), ModeStrPtr);
  }
 @@ -192,16 +182,12 @@ void EVENT_USB_UnhandledControlPacket(void)  void EVENT_USB_ConfigurationChanged(void)
  {
  	puts_P(PSTR(EVENT_PREFIX "Configuration Number Changed\r\n"));
 -
 -	LEDs_SetAllLEDs(LEDS_LED2 | LEDS_LED4);
  }
  /** Event handler for the USB_DeviceAttached event. When fired, the event is logged to the USART. */
  void EVENT_USB_DeviceAttached(void)
  {
  	puts_P(PSTR(EVENT_PREFIX ESC_BG_GREEN "Device +\r\n"));
 -
 -	Scheduler_SetTaskMode(USB_USBTask, TASK_RUN);
  }
  /** Event handler for the USB_DeviceUnattached event. When fired, the event is logged to the USART. */
 diff --git a/Demos/OTG/TestApp/TestEvents.h b/Demos/OTG/TestApp/TestEvents.h index 3642428f5..b82936fb4 100644 --- a/Demos/OTG/TestApp/TestEvents.h +++ b/Demos/OTG/TestApp/TestEvents.h @@ -39,12 +39,11 @@  	/* Includes: */
  		#include <avr/io.h>
 -		#include <LUFA/Common/Common.h>                          // Commonly used macros
 -		#include <LUFA/Drivers/USB/USB.h>                        // USB Functionality
 -		#include <LUFA/Drivers/Board/LEDs.h>                     // LED driver
 -		#include <LUFA/Drivers/Peripheral/SerialStream.h>        // USART Stream driver
 -		#include <LUFA/Drivers/Misc/TerminalCodes.h>             // ANSI Terminal Escape Codes
 -		#include <LUFA/Scheduler/Scheduler.h>                    // Simple scheduler for task management
 +		#include <LUFA/Common/Common.h>
 +		#include <LUFA/Drivers/USB/USB.h>
 +		#include <LUFA/Drivers/Board/LEDs.h>
 +		#include <LUFA/Drivers/Peripheral/SerialStream.h>
 +		#include <LUFA/Drivers/Misc/TerminalCodes.h>  	/* Macros: */
  		/** Prefix sent through the USART when an even fires before the actual event message. */
 diff --git a/Demos/OTG/TestApp/makefile b/Demos/OTG/TestApp/makefile index a8bf4ac42..55b98815a 100644 --- a/Demos/OTG/TestApp/makefile +++ b/Demos/OTG/TestApp/makefile @@ -126,7 +126,6 @@ LUFA_PATH = ../../..  SRC = $(TARGET).c                                                 \
  	  TestEvents.c                                                \
  	  Descriptors.c                                               \
 -	  $(LUFA_PATH)/LUFA/Scheduler/Scheduler.c                     \
  	  $(LUFA_PATH)/LUFA/Drivers/Board/Temperature.c               \
  	  $(LUFA_PATH)/LUFA/Drivers/Peripheral/SerialStream.c         \
  	  $(LUFA_PATH)/LUFA/Drivers/Peripheral/Serial.c               \
 diff --git a/LUFA/Drivers/USB/Class/Device/Audio.h b/LUFA/Drivers/USB/Class/Device/Audio.h index cbb6d791b..230da4d9e 100644 --- a/LUFA/Drivers/USB/Class/Device/Audio.h +++ b/LUFA/Drivers/USB/Class/Device/Audio.h @@ -389,21 +389,21 @@  		 *
  		 *  \return Boolean true if the endpoints were sucessfully configured, false otherwise
  		 */
 -		bool     USB_Audio_ConfigureEndpoints(USB_ClassInfo_Audio_t* AudioInterfaceInfo);
 +		bool USB_Audio_ConfigureEndpoints(USB_ClassInfo_Audio_t* AudioInterfaceInfo);
  		/** Processes incomming control requests from the host, that are directed to the given Audio class interface. This should be
  		 *  linked to the library \ref EVENT_USB_UnhandledControlPacket() event.
  		 *
  		 *  \param AudioInterfaceInfo  Pointer to a structure containing an Audio Class configuration and state.
  		 */
 -		void     USB_Audio_ProcessControlPacket(USB_ClassInfo_Audio_t* AudioInterfaceInfo);
 +		void USB_Audio_ProcessControlPacket(USB_ClassInfo_Audio_t* AudioInterfaceInfo);
  		/** General management task for a given Audio class interface, required for the correct operation of the interface. This should
  		 *  be called frequently in the main program loop, before the master USB management task \ref USB_USBTask().
  		 *
  		 *  \param AudioInterfaceInfo  Pointer to a structure containing an Audio Class configuration and state.
  		 */
 -		void     USB_Audio_USBTask(USB_ClassInfo_Audio_t* AudioInterfaceInfo);
 +		void USB_Audio_USBTask(USB_ClassInfo_Audio_t* AudioInterfaceInfo);
  		/** Reads the next 8-bit audio sample from the current audio interface.
  		 *
 @@ -412,7 +412,7 @@  		 *
  		 *  \return  Signed 8-bit audio sample from the audio interface
  		 */
 -		int8_t   USB_Audio_ReadSample8(void);
 +		int8_t USB_Audio_ReadSample8(void);
  		/** Reads the next 16-bit audio sample from the current audio interface.
  		 *
 @@ -421,7 +421,7 @@  		 *
  		 *  \return  Signed 16-bit audio sample from the audio interface
  		 */
 -		int16_t  USB_Audio_ReadSample16(void);
 +		int16_t USB_Audio_ReadSample16(void);
  		/** Reads the next 24-bit audio sample from the current audio interface.
  		 *
 @@ -430,7 +430,7 @@  		 *
  		 *  \return  Signed 24-bit audio sample from the audio interface
  		 */
 -		int32_t  USB_Audio_ReadSample24(void);
 +		int32_t USB_Audio_ReadSample24(void);
  		/** Writes the next 8-bit audio sample to the current audio interface.
  		 *
 @@ -439,7 +439,7 @@  		 *
  		 *  \param Sample  Signed 8-bit audio sample
  		 */
 -		void     USB_Audio_WriteSample8(int8_t Sample);
 +		void USB_Audio_WriteSample8(int8_t Sample);
  		/** Writes the next 16-bit audio sample to the current audio interface.
  		 *
 @@ -448,7 +448,7 @@  		 *
  		 *  \param Sample  Signed 16-bit audio sample
  		 */
 -		void     USB_Audio_WriteSample16(int16_t Sample);
 +		void USB_Audio_WriteSample16(int16_t Sample);
  		/** Writes the next 24-bit audio sample to the current audio interface.
  		 *
 @@ -457,7 +457,7 @@  		 *
  		 *  \param Sample  Signed 24-bit audio sample
  		 */
 -		void     USB_Audio_WriteSample24(int32_t Sample);
 +		void USB_Audio_WriteSample24(int32_t Sample);
  		/** Determines if the given audio interface is ready for a sample to be read from it.
  		 *
 @@ -465,7 +465,7 @@  		 *
  		 *  \return Boolean true if the given Audio interface has a sample to be read, false otherwise
  		 */
 -		bool     USB_Audio_IsSampleReceived(USB_ClassInfo_Audio_t* AudioInterfaceInfo);
 +		bool USB_Audio_IsSampleReceived(USB_ClassInfo_Audio_t* AudioInterfaceInfo);
  		/** Determines if the given audio interface is ready to accept the next sample to be written to it.
  		 *
 @@ -473,7 +473,7 @@  		 *
  		 *  \return Boolean true if the given Audio interface is ready to accept the next sample, false otherwise
  		 */
 -		bool     USB_Audio_IsReadyForNextSample(USB_ClassInfo_Audio_t* AudioInterfaceInfo);
 +		bool USB_Audio_IsReadyForNextSample(USB_ClassInfo_Audio_t* AudioInterfaceInfo);
  	/* Disable C linkage for C++ Compilers: */
  		#if defined(__cplusplus)
 diff --git a/LUFA/Drivers/USB/Class/Device/CDC.c b/LUFA/Drivers/USB/Class/Device/CDC.c index dcb58dc40..d27b0d2ed 100644 --- a/LUFA/Drivers/USB/Class/Device/CDC.c +++ b/LUFA/Drivers/USB/Class/Device/CDC.c @@ -73,7 +73,7 @@ void USB_CDC_ProcessControlPacket(USB_ClassInfo_CDC_t* CDCInterfaceInfo)  				CDCInterfaceInfo->ControlLineState = USB_ControlRequest.wValue;
 -				EVENT_USB_CDC_ControLineStateChanged();
 +				EVENT_USB_CDC_ControLineStateChanged(CDCInterfaceInfo);
  				while (!(Endpoint_IsINReady()));
  				Endpoint_ClearIN();
 diff --git a/LUFA/Drivers/USB/Class/Device/CDC.h b/LUFA/Drivers/USB/Class/Device/CDC.h index ae069fafa..3e67b1b6b 100644 --- a/LUFA/Drivers/USB/Class/Device/CDC.h +++ b/LUFA/Drivers/USB/Class/Device/CDC.h @@ -167,7 +167,7 @@  			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 */
 -			uint8_t  ControlLineState;
 +			uint8_t  ControlLineState; /**< Current control line state, as set by the host */
  			struct
  			{
 @@ -187,15 +187,36 @@  			void USB_CDC_Event_Stub(void);
  			void EVENT_USB_CDC_LineEncodingChanged(USB_ClassInfo_CDC_t* CDCInterfaceInfo)
  												   ATTR_WEAK ATTR_ALIAS(USB_CDC_Event_Stub);
 -			void EVENT_USB_CDC_ControLineStateChanged(void) ATTR_WEAK ATTR_ALIAS(USB_CDC_Event_Stub);; 
 +			void EVENT_USB_CDC_ControLineStateChanged(USB_ClassInfo_CDC_t* CDCInterfaceInfo)
 +			                                          ATTR_WEAK ATTR_ALIAS(USB_CDC_Event_Stub);
  		#endif
 -		bool     USB_CDC_ConfigureEndpoints(USB_ClassInfo_CDC_t* CDCInterfaceInfo);
 -		void     USB_CDC_ProcessControlPacket(USB_ClassInfo_CDC_t* CDCInterfaceInfo);
 -		void     USB_CDC_USBTask(USB_ClassInfo_CDC_t* CDCInterfaceInfo);
 +		/** Configures the endpoints of a given CDC interface, ready for use. This should be linked to the library
 +		 *  \ref EVENT_USB_ConfigurationChanged() event so that the endpoints are configured when the configuration containing the
 +		 *  given CDC interface is selected.
 +		 *
 +		 *  \param CDCInterfaceInfo  Pointer to a structure containing an CDC Class configuration and state.
 +		 *
 +		 *  \return Boolean true if the endpoints were sucessfully configured, false otherwise
 +		 */
 +		bool USB_CDC_ConfigureEndpoints(USB_ClassInfo_CDC_t* CDCInterfaceInfo);
 +
 +		/** Processes incomming control requests from the host, that are directed to the given CDC class interface. This should be
 +		 *  linked to the library \ref EVENT_USB_UnhandledControlPacket() event.
 +		 *
 +		 *  \param CDCInterfaceInfo  Pointer to a structure containing an CDC Class configuration and state.
 +		 */
 +		void USB_CDC_ProcessControlPacket(USB_ClassInfo_CDC_t* CDCInterfaceInfo);
 +
 +		/** General management task for a given CDC class interface, required for the correct operation of the interface. This should
 +		 *  be called frequently in the main program loop, before the master USB management task \ref USB_USBTask().
 +		 *
 +		 *  \param CDCInterfaceInfo  Pointer to a structure containing an CDC Class configuration and state.
 +		 */
 +		void USB_CDC_USBTask(USB_ClassInfo_CDC_t* CDCInterfaceInfo);
  		void     EVENT_USB_CDC_LineEncodingChanged(USB_ClassInfo_CDC_t* CDCInterfaceInfo);
 -		void     EVENT_USB_CDC_ControLineStateChanged(void);
 +		void     EVENT_USB_CDC_ControLineStateChanged(USB_ClassInfo_CDC_t* CDCInterfaceInfo);
  		void     USB_CDC_SendString(USB_ClassInfo_CDC_t* CDCInterfaceInfo, char* Data, uint16_t Length);
  		void     USB_CDC_SendByte(USB_ClassInfo_CDC_t* CDCInterfaceInfo, uint8_t Data);
 | 
