Split out endpoint and pipe stream functions into new EndpointStream.c/.h and PipeStream.c/.h files.
This commit is contained in:
		
							parent
							
								
									4cc7f5200b
								
							
						
					
					
						commit
						e72f424f64
					
				
					 18 changed files with 1320 additions and 1161 deletions
				
			
		
							
								
								
									
										233
									
								
								LUFA/Drivers/USB/HighLevel/EndpointStream.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										233
									
								
								LUFA/Drivers/USB/HighLevel/EndpointStream.c
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,233 @@
 | 
			
		|||
/*
 | 
			
		||||
             LUFA Library
 | 
			
		||||
     Copyright (C) Dean Camera, 2010.
 | 
			
		||||
              
 | 
			
		||||
  dean [at] fourwalledcubicle [dot] com
 | 
			
		||||
      www.fourwalledcubicle.com
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
  Copyright 2010  Dean Camera (dean [at] fourwalledcubicle [dot] com)
 | 
			
		||||
 | 
			
		||||
  Permission to use, copy, modify, distribute, and sell this 
 | 
			
		||||
  software and its documentation for any purpose is hereby granted
 | 
			
		||||
  without fee, provided that the above copyright notice appear in 
 | 
			
		||||
  all copies and that both that the copyright notice and this
 | 
			
		||||
  permission notice and warranty disclaimer appear in supporting 
 | 
			
		||||
  documentation, and that the name of the author not be used in 
 | 
			
		||||
  advertising or publicity pertaining to distribution of the 
 | 
			
		||||
  software without specific, written prior permission.
 | 
			
		||||
 | 
			
		||||
  The author disclaim all warranties with regard to this
 | 
			
		||||
  software, including all implied warranties of merchantability
 | 
			
		||||
  and fitness.  In no event shall the author be liable for any
 | 
			
		||||
  special, indirect or consequential damages or any damages
 | 
			
		||||
  whatsoever resulting from loss of use, data or profits, whether
 | 
			
		||||
  in an action of contract, negligence or other tortious action,
 | 
			
		||||
  arising out of or in connection with the use or performance of
 | 
			
		||||
  this software.
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
#define  __INCLUDE_FROM_USB_DRIVER
 | 
			
		||||
#include "USBMode.h"
 | 
			
		||||
 | 
			
		||||
#if defined(USB_CAN_BE_DEVICE)
 | 
			
		||||
 | 
			
		||||
#include "EndpointStream.h"
 | 
			
		||||
 | 
			
		||||
#if !defined(CONTROL_ONLY_DEVICE)
 | 
			
		||||
uint8_t Endpoint_Discard_Stream(uint16_t Length
 | 
			
		||||
                                __CALLBACK_PARAM)
 | 
			
		||||
{
 | 
			
		||||
	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;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#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
 | 
			
		||||
							
								
								
									
										524
									
								
								LUFA/Drivers/USB/HighLevel/EndpointStream.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										524
									
								
								LUFA/Drivers/USB/HighLevel/EndpointStream.h
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,524 @@
 | 
			
		|||
/*
 | 
			
		||||
             LUFA Library
 | 
			
		||||
     Copyright (C) Dean Camera, 2010.
 | 
			
		||||
              
 | 
			
		||||
  dean [at] fourwalledcubicle [dot] com
 | 
			
		||||
      www.fourwalledcubicle.com
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
  Copyright 2010  Dean Camera (dean [at] fourwalledcubicle [dot] com)
 | 
			
		||||
 | 
			
		||||
  Permission to use, copy, modify, distribute, and sell this 
 | 
			
		||||
  software and its documentation for any purpose is hereby granted
 | 
			
		||||
  without fee, provided that the above copyright notice appear in 
 | 
			
		||||
  all copies and that both that the copyright notice and this
 | 
			
		||||
  permission notice and warranty disclaimer appear in supporting 
 | 
			
		||||
  documentation, and that the name of the author not be used in 
 | 
			
		||||
  advertising or publicity pertaining to distribution of the 
 | 
			
		||||
  software without specific, written prior permission.
 | 
			
		||||
 | 
			
		||||
  The author disclaim all warranties with regard to this
 | 
			
		||||
  software, including all implied warranties of merchantability
 | 
			
		||||
  and fitness.  In no event shall the author be liable for any
 | 
			
		||||
  special, indirect or consequential damages or any damages
 | 
			
		||||
  whatsoever resulting from loss of use, data or profits, whether
 | 
			
		||||
  in an action of contract, negligence or other tortious action,
 | 
			
		||||
  arising out of or in connection with the use or performance of
 | 
			
		||||
  this software.
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
/** \file
 | 
			
		||||
 *  \brief USB device endpoint stream function definitions.
 | 
			
		||||
 *
 | 
			
		||||
 *  This file contains structures, function prototypes and macros related to the sending and receiving of
 | 
			
		||||
 *  arbitrary data streams through the device's data endpoints when the library is initialized in USB device mode.
 | 
			
		||||
 *
 | 
			
		||||
 *  \note This file should not be included directly. It is automatically included as needed by the USB driver
 | 
			
		||||
 *        dispatch header located in LUFA/Drivers/USB/USB.h.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/** \ingroup Group_EndpointRW  
 | 
			
		||||
 *  @defgroup Group_EndpointStreamRW Read/Write of Multi-Byte Streams
 | 
			
		||||
 *
 | 
			
		||||
 *  Functions, macros, variables, enums and types related to data reading and writing of data streams from
 | 
			
		||||
 *  and to endpoints.
 | 
			
		||||
 *
 | 
			
		||||
 *  @{
 | 
			
		||||
 */ 
 | 
			
		||||
 | 
			
		||||
#ifndef __ENDPOINT_STREAM_H__
 | 
			
		||||
#define __ENDPOINT_STREAM_H__
 | 
			
		||||
 | 
			
		||||
	/* Includes: */
 | 
			
		||||
		#include <avr/io.h>
 | 
			
		||||
		#include <avr/pgmspace.h>
 | 
			
		||||
		#include <avr/eeprom.h>
 | 
			
		||||
		#include <stdbool.h>
 | 
			
		||||
 | 
			
		||||
		#include "../../../Common/Common.h"
 | 
			
		||||
		#include "USBTask.h"
 | 
			
		||||
 | 
			
		||||
		#if !defined(NO_STREAM_CALLBACKS) || defined(__DOXYGEN__)
 | 
			
		||||
			#include "StreamCallbacks.h"
 | 
			
		||||
		#endif
 | 
			
		||||
		
 | 
			
		||||
	/* Enable C linkage for C++ Compilers: */
 | 
			
		||||
		#if defined(__cplusplus)
 | 
			
		||||
			extern "C" {
 | 
			
		||||
		#endif
 | 
			
		||||
 | 
			
		||||
	/* Preprocessor Checks: */
 | 
			
		||||
		#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: */
 | 
			
		||||
		/* Enums: */
 | 
			
		||||
			/** Enum for the possible error return codes of the Endpoint_*_Stream_* functions. */
 | 
			
		||||
			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. */
 | 
			
		||||
			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.
 | 
			
		||||
				                                            */
 | 
			
		||||
			};
 | 
			
		||||
 | 
			
		||||
		/* Function Prototypes: */
 | 
			
		||||
			/** 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.
 | 
			
		||||
			 *
 | 
			
		||||
			 *  \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.
 | 
			
		||||
			 *
 | 
			
		||||
			 *  \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().
 | 
			
		||||
			 *
 | 
			
		||||
			 *  \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.
 | 
			
		||||
			 *
 | 
			
		||||
			 *  \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.
 | 
			
		||||
			 *
 | 
			
		||||
			 *  \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().
 | 
			
		||||
			 *
 | 
			
		||||
			 *  \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.
 | 
			
		||||
			 *
 | 
			
		||||
			 *  \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.
 | 
			
		||||
			 *
 | 
			
		||||
			 *  \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().
 | 
			
		||||
			 *
 | 
			
		||||
			 *  \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.
 | 
			
		||||
			 *
 | 
			
		||||
			 *  \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().
 | 
			
		||||
			 *
 | 
			
		||||
			 *  \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.
 | 
			
		||||
			 *
 | 
			
		||||
			 *  \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.
 | 
			
		||||
			 *
 | 
			
		||||
			 *  \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.
 | 
			
		||||
			 *
 | 
			
		||||
			 *  \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.
 | 
			
		||||
			 *
 | 
			
		||||
			 *  \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.
 | 
			
		||||
			 *
 | 
			
		||||
			 *  \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.
 | 
			
		||||
			 *
 | 
			
		||||
			 *  \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.
 | 
			
		||||
			 *
 | 
			
		||||
			 *  \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.
 | 
			
		||||
			 *
 | 
			
		||||
			 *  \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.
 | 
			
		||||
			 *
 | 
			
		||||
			 *  \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.
 | 
			
		||||
			 *
 | 
			
		||||
			 *  \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_BE(void* Buffer,
 | 
			
		||||
			                                         uint16_t Length) ATTR_NON_NULL_PTR_ARG(1);
 | 
			
		||||
 | 
			
		||||
	/* Disable C linkage for C++ Compilers: */
 | 
			
		||||
		#if defined(__cplusplus)
 | 
			
		||||
			}
 | 
			
		||||
		#endif
 | 
			
		||||
		
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/** @} */
 | 
			
		||||
							
								
								
									
										195
									
								
								LUFA/Drivers/USB/HighLevel/PipeStream.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										195
									
								
								LUFA/Drivers/USB/HighLevel/PipeStream.c
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,195 @@
 | 
			
		|||
/*
 | 
			
		||||
             LUFA Library
 | 
			
		||||
     Copyright (C) Dean Camera, 2010.
 | 
			
		||||
              
 | 
			
		||||
  dean [at] fourwalledcubicle [dot] com
 | 
			
		||||
      www.fourwalledcubicle.com
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
  Copyright 2010  Dean Camera (dean [at] fourwalledcubicle [dot] com)
 | 
			
		||||
 | 
			
		||||
  Permission to use, copy, modify, distribute, and sell this 
 | 
			
		||||
  software and its documentation for any purpose is hereby granted
 | 
			
		||||
  without fee, provided that the above copyright notice appear in 
 | 
			
		||||
  all copies and that both that the copyright notice and this
 | 
			
		||||
  permission notice and warranty disclaimer appear in supporting 
 | 
			
		||||
  documentation, and that the name of the author not be used in 
 | 
			
		||||
  advertising or publicity pertaining to distribution of the 
 | 
			
		||||
  software without specific, written prior permission.
 | 
			
		||||
 | 
			
		||||
  The author disclaim all warranties with regard to this
 | 
			
		||||
  software, including all implied warranties of merchantability
 | 
			
		||||
  and fitness.  In no event shall the author be liable for any
 | 
			
		||||
  special, indirect or consequential damages or any damages
 | 
			
		||||
  whatsoever resulting from loss of use, data or profits, whether
 | 
			
		||||
  in an action of contract, negligence or other tortious action,
 | 
			
		||||
  arising out of or in connection with the use or performance of
 | 
			
		||||
  this software.
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
#define  __INCLUDE_FROM_USB_DRIVER
 | 
			
		||||
#include "USBMode.h"
 | 
			
		||||
 | 
			
		||||
#if defined(USB_CAN_BE_HOST)
 | 
			
		||||
 | 
			
		||||
#include "PipeStream.h"
 | 
			
		||||
 | 
			
		||||
uint8_t Pipe_Discard_Stream(uint16_t Length
 | 
			
		||||
                            __CALLBACK_PARAM)
 | 
			
		||||
{
 | 
			
		||||
	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
 | 
			
		||||
							
								
								
									
										298
									
								
								LUFA/Drivers/USB/HighLevel/PipeStream.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										298
									
								
								LUFA/Drivers/USB/HighLevel/PipeStream.h
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,298 @@
 | 
			
		|||
/*
 | 
			
		||||
             LUFA Library
 | 
			
		||||
     Copyright (C) Dean Camera, 2010.
 | 
			
		||||
              
 | 
			
		||||
  dean [at] fourwalledcubicle [dot] com
 | 
			
		||||
      www.fourwalledcubicle.com
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
  Copyright 2010  Dean Camera (dean [at] fourwalledcubicle [dot] com)
 | 
			
		||||
 | 
			
		||||
  Permission to use, copy, modify, distribute, and sell this 
 | 
			
		||||
  software and its documentation for any purpose is hereby granted
 | 
			
		||||
  without fee, provided that the above copyright notice appear in 
 | 
			
		||||
  all copies and that both that the copyright notice and this
 | 
			
		||||
  permission notice and warranty disclaimer appear in supporting 
 | 
			
		||||
  documentation, and that the name of the author not be used in 
 | 
			
		||||
  advertising or publicity pertaining to distribution of the 
 | 
			
		||||
  software without specific, written prior permission.
 | 
			
		||||
 | 
			
		||||
  The author disclaim all warranties with regard to this
 | 
			
		||||
  software, including all implied warranties of merchantability
 | 
			
		||||
  and fitness.  In no event shall the author be liable for any
 | 
			
		||||
  special, indirect or consequential damages or any damages
 | 
			
		||||
  whatsoever resulting from loss of use, data or profits, whether
 | 
			
		||||
  in an action of contract, negligence or other tortious action,
 | 
			
		||||
  arising out of or in connection with the use or performance of
 | 
			
		||||
  this software.
 | 
			
		||||
*/
 | 
			
		||||
 
 | 
			
		||||
/** \file
 | 
			
		||||
 *  \brief USB host pipe stream function definitions.
 | 
			
		||||
 *
 | 
			
		||||
 *  This file contains structures, function prototypes and macros related to the sending and receiving of
 | 
			
		||||
 *  arbitrary data streams through the device's data pipes when the library is initialized in USB host mode.
 | 
			
		||||
 *
 | 
			
		||||
 *  \note This file should not be included directly. It is automatically included as needed by the USB driver
 | 
			
		||||
 *        dispatch header located in LUFA/Drivers/USB/USB.h.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/** \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.
 | 
			
		||||
 *
 | 
			
		||||
 *  @{
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifndef __PIPE_STREAM_H__
 | 
			
		||||
#define __PIPE_STREAM_H__
 | 
			
		||||
 | 
			
		||||
	/* Includes: */
 | 
			
		||||
		#include <avr/io.h>
 | 
			
		||||
		#include <avr/pgmspace.h>
 | 
			
		||||
		#include <avr/eeprom.h>
 | 
			
		||||
		#include <stdbool.h>
 | 
			
		||||
 | 
			
		||||
		#include "../../../Common/Common.h"
 | 
			
		||||
		#include "USBTask.h"
 | 
			
		||||
 | 
			
		||||
		#if !defined(NO_STREAM_CALLBACKS) || defined(__DOXYGEN__)
 | 
			
		||||
			#include "StreamCallbacks.h"
 | 
			
		||||
		#endif
 | 
			
		||||
		
 | 
			
		||||
	/* Enable C linkage for C++ Compilers: */
 | 
			
		||||
		#if defined(__cplusplus)
 | 
			
		||||
			extern "C" {
 | 
			
		||||
		#endif
 | 
			
		||||
 | 
			
		||||
	/* Preprocessor Checks: */
 | 
			
		||||
		#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: */
 | 
			
		||||
		/* Enums: */
 | 
			
		||||
			/** Enum for the possible error return codes of the Pipe_*_Stream_* functions. */
 | 
			
		||||
			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.
 | 
			
		||||
				                                       */
 | 
			
		||||
			};
 | 
			
		||||
 | 
			
		||||
		/* Function Prototypes: */
 | 
			
		||||
			/** 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().
 | 
			
		||||
			 *
 | 
			
		||||
			 *  \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().
 | 
			
		||||
			 *
 | 
			
		||||
			 *  \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().
 | 
			
		||||
			 *
 | 
			
		||||
			 *  \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.
 | 
			
		||||
			 *
 | 
			
		||||
			 *  \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().
 | 
			
		||||
			 *
 | 
			
		||||
			 *  \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().
 | 
			
		||||
			 *
 | 
			
		||||
			 *  \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.
 | 
			
		||||
			 *
 | 
			
		||||
			 *  \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().
 | 
			
		||||
			 *
 | 
			
		||||
			 *  \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().
 | 
			
		||||
			 *
 | 
			
		||||
			 *  \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().
 | 
			
		||||
			 *
 | 
			
		||||
			 *  \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().
 | 
			
		||||
			 *
 | 
			
		||||
			 *  \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);
 | 
			
		||||
 | 
			
		||||
	/* Disable C linkage for C++ Compilers: */
 | 
			
		||||
		#if defined(__cplusplus)
 | 
			
		||||
			}
 | 
			
		||||
		#endif
 | 
			
		||||
	
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/** @} */
 | 
			
		||||
| 
						 | 
				
			
			@ -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
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -38,6 +38,25 @@
 | 
			
		|||
 *        dispatch header located in LUFA/Drivers/USB/USB.h.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/** \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
 | 
			
		||||
 *  @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_EndpointManagement
 | 
			
		||||
 *  @defgroup Group_EndpointPacketManagement Endpoint Packet Management
 | 
			
		||||
 *
 | 
			
		||||
 *  Functions, macros, variables, enums and types related to packet management of endpoints.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/** \ingroup Group_USB
 | 
			
		||||
 *  @defgroup Group_EndpointManagement Endpoint Management
 | 
			
		||||
 *
 | 
			
		||||
| 
						 | 
				
			
			@ -48,46 +67,16 @@
 | 
			
		|||
 *  @{
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/** @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  
 | 
			
		||||
 *  @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
 | 
			
		||||
 *
 | 
			
		||||
 *  Functions, macros, variables, enums and types related to data reading and writing of data streams from
 | 
			
		||||
 *  and to endpoints.
 | 
			
		||||
 */ 
 | 
			
		||||
 | 
			
		||||
/** @defgroup Group_EndpointPacketManagement Endpoint Packet Management
 | 
			
		||||
 *
 | 
			
		||||
 *  Functions, macros, variables, enums and types related to packet management of endpoints.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifndef __ENDPOINT_H__
 | 
			
		||||
#define __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)
 | 
			
		||||
| 
						 | 
				
			
			@ -99,12 +88,6 @@
 | 
			
		|||
			#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: */
 | 
			
		||||
| 
						 | 
				
			
			@ -259,49 +242,6 @@
 | 
			
		|||
				                                                 *   \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
 | 
			
		||||
| 
						 | 
				
			
			@ -873,6 +813,12 @@
 | 
			
		|||
			#endif
 | 
			
		||||
 | 
			
		||||
		/* Function Prototypes: */
 | 
			
		||||
			/** 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);
 | 
			
		||||
 | 
			
		||||
			/** Spin-loops until the currently selected non-control endpoint is ready for the next packet of data
 | 
			
		||||
			 *  to be read or written to it.
 | 
			
		||||
			 *
 | 
			
		||||
| 
						 | 
				
			
			@ -883,449 +829,6 @@
 | 
			
		|||
			 *  \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.
 | 
			
		||||
			 *
 | 
			
		||||
			 *  \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_BE(void* Buffer,
 | 
			
		||||
			                                         uint16_t Length) ATTR_NON_NULL_PTR_ARG(1);
 | 
			
		||||
 | 
			
		||||
	/* Disable C linkage for C++ Compilers: */
 | 
			
		||||
		#if defined(__cplusplus)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -38,6 +38,34 @@
 | 
			
		|||
 *        dispatch header located in LUFA/Drivers/USB/USB.h.
 | 
			
		||||
 */ 
 | 
			
		||||
 | 
			
		||||
/** \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.
 | 
			
		||||
 */
 | 
			
		||||
 
 | 
			
		||||
/** \ingroup Group_PipeRW  
 | 
			
		||||
 *  @defgroup Group_PipePrimitiveRW 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 pipes.
 | 
			
		||||
 */
 | 
			
		||||
 
 | 
			
		||||
/** \ingroup Group_PipeManagement
 | 
			
		||||
 *  @defgroup Group_PipePacketManagement Pipe Packet Management
 | 
			
		||||
 *
 | 
			
		||||
 *  Functions, macros, variables, enums and types related to packet management of pipes.
 | 
			
		||||
 */
 | 
			
		||||
 
 | 
			
		||||
/** \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
 | 
			
		||||
 *
 | 
			
		||||
| 
						 | 
				
			
			@ -48,53 +76,15 @@
 | 
			
		|||
 *  @{
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/** @defgroup Group_PipeRW Pipe Data Reading and Writing
 | 
			
		||||
 *
 | 
			
		||||
 *  Functions, macros, variables, enums and types related to data reading and writing from and to pipes.
 | 
			
		||||
 */
 | 
			
		||||
 
 | 
			
		||||
/** \ingroup Group_PipeRW  
 | 
			
		||||
 *  @defgroup Group_PipePrimitiveRW 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 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
 | 
			
		||||
 *
 | 
			
		||||
 *  Functions, macros, variables, enums and types related to packet management of pipes.
 | 
			
		||||
 */
 | 
			
		||||
 
 | 
			
		||||
/** @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.
 | 
			
		||||
 */ 
 | 
			
		||||
 | 
			
		||||
#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)
 | 
			
		||||
| 
						 | 
				
			
			@ -105,12 +95,6 @@
 | 
			
		|||
		#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: */
 | 
			
		||||
| 
						 | 
				
			
			@ -217,26 +201,6 @@
 | 
			
		|||
				                                             */
 | 
			
		||||
			};
 | 
			
		||||
 | 
			
		||||
			/** 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.
 | 
			
		||||
			 *
 | 
			
		||||
| 
						 | 
				
			
			@ -900,217 +864,6 @@
 | 
			
		|||
			 *          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__)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -64,15 +64,17 @@
 | 
			
		|||
		
 | 
			
		||||
		#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: */
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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
 | 
			
		||||
| 
						 | 
				
			
			@ -379,12 +381,14 @@
 | 
			
		|||
			#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__)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -11,7 +11,12 @@
 | 
			
		|||
 *  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
 | 
			
		||||
 *
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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          \
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue