@ -58,10 +58,6 @@
# include "../../../Common/Common.h"
# include "../../../Common/Common.h"
# include "USBTask.h"
# include "USBTask.h"
# if !defined(NO_STREAM_CALLBACKS) || defined(__DOXYGEN__)
# include "StreamCallbacks.h"
# endif
/* Enable C linkage for C++ Compilers: */
/* Enable C linkage for C++ Compilers: */
# if defined(__cplusplus)
# if defined(__cplusplus)
extern " C " {
extern " C " {
@ -72,12 +68,6 @@
# error Do not include this file directly. Include LUFA / Drivers / USB / USB.h instead.
# error Do not include this file directly. Include LUFA / Drivers / USB / USB.h instead.
# endif
# 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: */
/* Public Interface - May be used in end-application: */
/* Enums: */
/* Enums: */
/** Enum for the possible error return codes of the \c Endpoint_*_Stream_* functions. */
/** Enum for the possible error return codes of the \c Endpoint_*_Stream_* functions. */
@ -98,8 +88,10 @@
* within the software timeout period set by the
* within the software timeout period set by the
* \ ref USB_STREAM_TIMEOUT_MS macro .
* \ ref USB_STREAM_TIMEOUT_MS macro .
*/
*/
ENDPOINT_RWSTREAM_CallbackAborted = 5 , /**< Indicates that the stream's callback function
ENDPOINT_RWSTREAM_IncompleteTransfer = 5 , /**< Indicates that the endpoint bank became full or empty before
* aborted the transfer early .
* the complete contents of the current stream could be
* transferred . The endpoint stream function should be called
* again to process the next chunk of data in the transfer .
*/
*/
} ;
} ;
@ -118,194 +110,274 @@
} ;
} ;
/* Function Prototypes: */
/* Function Prototypes: */
/** Reads and discards the given number of bytes from the endpoint from the given buffer,
/** \name Stream functions for null data */
//@{
/** Reads and discards the given number of bytes from the currently selected endpoint's bank,
* discarding fully read packets from the host as needed . The last packet is not automatically
* 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
* 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
* discarding the last packet from the host via the \ ref Endpoint_ClearOUT ( ) macro .
* each USB packet , the given stream callback function is executed repeatedly until the next
*
* packet is ready , allowing for early aborts of stream transfers .
* If the BytesProcessed parameter is \ c NULL , the entire stream transfer is attempted at once ,
*
* failing or succeeding as a single unit . If the BytesProcessed parameter points to a valid
* The callback routine should be created according to the information in \ ref Group_StreamCallbacks .
* storage location , the transfer will instead be performed as a series of chunks . Each time
* If the token \ c NO_STREAM_CALLBACKS is passed via the - D option to the compiler , stream callbacks are
* the endpoint bank becomes empty while there is still data to process ( and after the current
* disabled and this function has the Callback parameter omitted .
* packet has been acknowledged ) the BytesProcessed location will be updated with the total number
* of bytes processed in the stream , and the function will exit with an error code of
* \ ref ENDPOINT_RWSTREAM_IncompleteTransfer . This allows for any abort checking to be performed
* in the user code - to continue the transfer , call the function again with identical parameters
* and it will resume until the BytesProcessed value reaches the total transfer length .
*
* < b > Single Stream Transfer Example : < / b >
* \ code
* uint8_t ErrorCode ;
*
* if ( ( ErrorCode = Endpoint_Discard_Stream ( 512 , NULL ) ) ! = ENDPOINT_RWSTREAM_NoError )
* {
* // Stream failed to complete - check ErrorCode here
* }
* \ endcode
*
* < b > Partial Stream Transfers Example : < / b >
* \ code
* uint8_t ErrorCode ;
* uint16_t BytesProcessed ;
*
* BytesProcessed = 0 ;
* while ( ( ErrorCode = Endpoint_Discard_Stream ( 512 , & BytesProcessed ) ) = = ENDPOINT_RWSTREAM_IncompleteTransfer )
* {
* // Stream not yet complete - do other actions here, abort if required
* }
*
* if ( ErrorCode ! = ENDPOINT_RWSTREAM_NoError )
* {
* // Stream failed to complete - check ErrorCode here
* }
* \ endcode
*
*
* \ note This routine should not be used on CONTROL type endpoints .
* \ 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 ] Length Number of bytes to discard via the currently selected endpoint .
* \ param [ in ] Callback Name of a callback routine to call between successive USB packet transfers , \ c NULL if no callback .
* \ param [ in ] BytesProcessed Pointer to a location where the total number of bytes processed in the current
* transaction should be updated , \ c NULL if the entire stream should be read at once .
*
*
* \ return A value from the \ ref Endpoint_Stream_RW_ErrorCodes_t enum .
* \ return A value from the \ ref Endpoint_Stream_RW_ErrorCodes_t enum .
*/
*/
uint8_t Endpoint_Discard_Stream ( uint16_t Length
uint8_t Endpoint_Discard_Stream ( uint16_t Length ,
__CALLBACK_PARAM ) ;
uint16_t * const BytesProcessed ) ;
/** Writes the given number of bytes to the endpoint from the given buffer in little endian,
/** Writes a given number of zeroed bytes to the currently selected endpoint's bank, sending
* sending full packets to the host as needed . The last packet filled is not automatically sent ;
* full packets to the host as needed . The last packet is not automatically sent once the
* the user is responsible for manually sending the last written packet to the host via the
* remaining bytes have been written ; the user is responsible for manually sending the last
* \ ref Endpoint_ClearIN ( ) macro . Between each USB packet , the given stream callback function
* packet to the host via the \ ref Endpoint_ClearIN ( ) macro .
* is executed repeatedly until the endpoint is ready to accept the next packet , allowing for early
*
* aborts of stream transfers .
* If the BytesProcessed parameter is \ c NULL , the entire stream transfer is attempted at once ,
*
* failing or succeeding as a single unit . If the BytesProcessed parameter points to a valid
* The callback routine should be created according to the information in \ ref Group_StreamCallbacks .
* storage location , the transfer will instead be performed as a series of chunks . Each time
* If the token \ c NO_STREAM_CALLBACKS is passed via the - D option to the compiler , stream callbacks are
* the endpoint bank becomes full while there is still data to process ( and after the current
* disabled and this function has the Callback parameter omitted .
* packet transmission has been initiated ) the BytesProcessed location will be updated with the
* total number of bytes processed in the stream , and the function will exit with an error code of
* \ ref ENDPOINT_RWSTREAM_IncompleteTransfer . This allows for any abort checking to be performed
* in the user code - to continue the transfer , call the function again with identical parameters
* and it will resume until the BytesProcessed value reaches the total transfer length .
*
* < b > Single Stream Transfer Example : < / b >
* \ code
* uint8_t ErrorCode ;
*
* if ( ( ErrorCode = Endpoint_Null_Stream ( 512 , NULL ) ) ! = ENDPOINT_RWSTREAM_NoError )
* {
* // Stream failed to complete - check ErrorCode here
* }
* \ endcode
*
* < b > Partial Stream Transfers Example : < / b >
* \ code
* uint8_t ErrorCode ;
* uint16_t BytesProcessed ;
*
* BytesProcessed = 0 ;
* while ( ( ErrorCode = Endpoint_Null_Stream ( 512 , & BytesProcessed ) ) = = ENDPOINT_RWSTREAM_IncompleteTransfer )
* {
* // Stream not yet complete - do other actions here, abort if required
* }
*
* if ( ErrorCode ! = ENDPOINT_RWSTREAM_NoError )
* {
* // Stream failed to complete - check ErrorCode here
* }
* \ endcode
*
*
* \ note This routine should not be used on CONTROL type endpoints .
* \ 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 zero bytes to send via the currently selected endpoint .
* \ param [ in ] Length Number of bytes to read for the currently selected endpoint into the buffer .
* \ param [ in ] BytesProcessed Pointer to a location where the total number of bytes processed in the current
* \ param [ in ] Callback Name of a callback routine to call between successive USB packet transfers , \ c NULL if no callback .
* transaction should be updated , \ c NULL if the entire stream should be read at once .
*
*
* \ return A value from the \ ref Endpoint_Stream_RW_ErrorCodes_t enum .
* \ return A value from the \ ref Endpoint_Stream_RW_ErrorCodes_t enum .
*/
*/
uint8_t Endpoint_Write_Stream_LE ( const void * Buffer ,
uint8_t Endpoint_Null_Stream ( uint16_t Length ,
uint16_t Length
uint16_t * const BytesProcessed ) ;
__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 , \ c 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().
/** \name Stream functions for RAM source/destination data */
//@{
/** 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 .
*
* If the BytesProcessed parameter is \ c NULL , the entire stream transfer is attempted at once ,
* failing or succeeding as a single unit . If the BytesProcessed parameter points to a valid
* storage location , the transfer will instead be performed as a series of chunks . Each time
* the endpoint bank becomes full while there is still data to process ( and after the current
* packet transmission has been initiated ) the BytesProcessed location will be updated with the
* total number of bytes processed in the stream , and the function will exit with an error code of
* \ ref ENDPOINT_RWSTREAM_IncompleteTransfer . This allows for any abort checking to be performed
* in the user code - to continue the transfer , call the function again with identical parameters
* and it will resume until the BytesProcessed value reaches the total transfer length .
*
* < b > Single Stream Transfer Example : < / b >
* \ code
* uint8_t DataStream [ 512 ] ;
* uint8_t ErrorCode ;
*
* if ( ( ErrorCode = Endpoint_Write_Stream_LE ( DataStream , sizeof ( DataStream ) ,
* NULL ) ) ! = ENDPOINT_RWSTREAM_NoError )
* {
* // Stream failed to complete - check ErrorCode here
* }
* \ endcode
*
* < b > Partial Stream Transfers Example : < / b >
* \ code
* uint8_t DataStream [ 512 ] ;
* uint8_t ErrorCode ;
* uint16_t BytesProcessed ;
*
* BytesProcessed = 0 ;
* while ( ( ErrorCode = Endpoint_Write_Stream_LE ( DataStream , sizeof ( DataStream ) ,
* & BytesProcessed ) ) = = ENDPOINT_RWSTREAM_IncompleteTransfer )
* {
* // Stream not yet complete - do other actions here, abort if required
* }
*
* if ( ErrorCode ! = ENDPOINT_RWSTREAM_NoError )
* {
* // Stream failed to complete - check ErrorCode here
* }
* \ endcode
*
*
* \ pre The FLASH data must be located in the first 64 KB of FLASH for this function to work correctly .
* \ 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 ] 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 ] 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 , \ c NULL if no callback .
* \ param [ in ] BytesProcessed Pointer to a location where the total number of bytes processed in the current
* transaction should be updated , \ c NULL if the entire stream should be written at once .
*
*
* \ return A value from the \ ref Endpoint_Stream_RW_ErrorCodes_t enum .
* \ return A value from the \ ref Endpoint_Stream_RW_ErrorCodes_t enum .
*/
*/
uint8_t Endpoint_Write_PStream_LE ( const void * Buffer ,
uint8_t Endpoint_Write_ Stream_LE( const void * Buffer ,
uint16_t Length
uint16_t Length ,
__CALLBACK_PARAM ) ATTR_NON_NULL_PTR_ARG ( 1 ) ;
uint16_t * const BytesProcessed ) ATTR_NON_NULL_PTR_ARG ( 1 ) ;
/** Writes the given number of bytes to the endpoint from the given buffer in big endian,
/** 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 ;
* 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
* 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
* \ ref Endpoint_ClearIN ( ) macro .
* 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 \ c 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 .
* \ 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 ] 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 ] 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 , \ c NULL if no callback .
* \ param [ in ] BytesProcessed Pointer to a location where the total number of bytes processed in the current
* transaction should be updated , \ c NULL if the entire stream should be written at once .
*
*
* \ return A value from the \ ref Endpoint_Stream_RW_ErrorCodes_t enum .
* \ return A value from the \ ref Endpoint_Stream_RW_ErrorCodes_t enum .
*/
*/
uint8_t Endpoint_Write_Stream_BE ( const void * Buffer ,
uint8_t Endpoint_Write_Stream_BE ( const void * Buffer ,
uint16_t Length
uint16_t Length ,
__CALLBACK_PARAM ) ATTR_NON_NULL_PTR_ARG ( 1 ) ;
uint16_t * const BytesProcessed ) 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 , \ c 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 64 KB 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 , \ c 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,
/** 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
* 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
* 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
* discarding the last packet from the host via the \ ref Endpoint_ClearOUT ( ) macro .
* 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 .
* If the BytesProcessed parameter is \ c NULL , the entire stream transfer is attempted at once ,
*
* failing or succeeding as a single unit . If the BytesProcessed parameter points to a valid
* The callback routine should be created according to the information in \ ref Group_StreamCallbacks .
* storage location , the transfer will instead be performed as a series of chunks . Each time
* If the token \ c NO_STREAM_CALLBACKS is passed via the - D option to the compiler , stream callbacks are
* the endpoint bank becomes empty while there is still data to process ( and after the current
* disabled and this function has the Callback parameter omitted .
* packet has been acknowledged ) the BytesProcessed location will be updated with the total number
* of bytes processed in the stream , and the function will exit with an error code of
* \ ref ENDPOINT_RWSTREAM_IncompleteTransfer . This allows for any abort checking to be performed
* in the user code - to continue the transfer , call the function again with identical parameters
* and it will resume until the BytesProcessed value reaches the total transfer length .
*
* < b > Single Stream Transfer Example : < / b >
* \ code
* uint8_t DataStream [ 512 ] ;
* uint8_t ErrorCode ;
*
* if ( ( ErrorCode = Endpoint_Read_Stream_LE ( DataStream , sizeof ( DataStream ) ,
* NULL ) ) ! = ENDPOINT_RWSTREAM_NoError )
* {
* // Stream failed to complete - check ErrorCode here
* }
* \ endcode
*
* < b > Partial Stream Transfers Example : < / b >
* \ code
* uint8_t DataStream [ 512 ] ;
* uint8_t ErrorCode ;
* uint16_t BytesProcessed ;
*
* BytesProcessed = 0 ;
* while ( ( ErrorCode = Endpoint_Read_Stream_LE ( DataStream , sizeof ( DataStream ) ,
* & BytesProcessed ) ) = = ENDPOINT_RWSTREAM_IncompleteTransfer )
* {
* // Stream not yet complete - do other actions here, abort if required
* }
*
* if ( ErrorCode ! = ENDPOINT_RWSTREAM_NoError )
* {
* // Stream failed to complete - check ErrorCode here
* }
* \ endcode
*
*
* \ note This routine should not be used on CONTROL type endpoints .
* \ note This routine should not be used on CONTROL type endpoints .
*
*
* \ param [ out ] Buffer Pointer to the destination data buffer to write to .
* \ 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 ] 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 , \ c NULL if no callback .
* \ param [ in ] BytesProcessed Pointer to a location where the total number of bytes processed in the current
* transaction should be updated , \ c NULL if the entire stream should be read at once .
*
*
* \ return A value from the \ ref Endpoint_Stream_RW_ErrorCodes_t enum .
* \ return A value from the \ ref Endpoint_Stream_RW_ErrorCodes_t enum .
*/
*/
uint8_t Endpoint_Read_Stream_LE ( void * Buffer ,
uint8_t Endpoint_Read_Stream_LE ( void * Buffer ,
uint16_t Length
uint16_t Length ,
__CALLBACK_PARAM ) ATTR_NON_NULL_PTR_ARG ( 1 ) ;
uint16_t * const BytesProcessed ) 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 , \ c 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,
/** 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
* 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
* 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
* discarding the last packet from the host via the \ ref Endpoint_ClearOUT ( ) macro .
* 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 \ c 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 .
* \ note This routine should not be used on CONTROL type endpoints .
*
*
* \ param [ out ] Buffer Pointer to the destination data buffer to write to .
* \ 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 ] 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 , \ c NULL if no callback .
* \ param [ in ] BytesProcessed Pointer to a location where the total number of bytes processed in the current
* transaction should be updated , \ c NULL if the entire stream should be read at once .
*
*
* \ return A value from the \ ref Endpoint_Stream_RW_ErrorCodes_t enum .
* \ return A value from the \ ref Endpoint_Stream_RW_ErrorCodes_t enum .
*/
*/
uint8_t Endpoint_Read_Stream_BE ( void * Buffer ,
uint8_t Endpoint_Read_Stream_BE ( void * Buffer ,
uint16_t Length
uint16_t Length ,
__CALLBACK_PARAM ) ATTR_NON_NULL_PTR_ARG ( 1 ) ;
uint16_t * const BytesProcessed ) 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 , \ c 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,
/** 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
* sending full packets to the host as needed . The host OUT acknowledgement is not automatically cleared
@ -329,7 +401,10 @@
uint8_t Endpoint_Write_Control_Stream_LE ( const void * Buffer ,
uint8_t Endpoint_Write_Control_Stream_LE ( const void * Buffer ,
uint16_t Length ) ATTR_NON_NULL_PTR_ARG ( 1 ) ;
uint16_t Length ) ATTR_NON_NULL_PTR_ARG ( 1 ) ;
/** EEPROM buffer source version of Endpoint_Write_Control_Stream_LE.
/** 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
* \ 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 .
* to clear the status stage when using this routine in a control transaction .
@ -345,12 +420,13 @@
*
*
* \ return A value from the \ ref Endpoint_ControlStream_RW_ErrorCodes_t enum .
* \ return A value from the \ ref Endpoint_ControlStream_RW_ErrorCodes_t enum .
*/
*/
uint8_t Endpoint_Write_Control_ EStream_L E( const void * Buffer ,
uint8_t Endpoint_Write_Control_ Stream_B E( const void * Buffer ,
uint16_t Length ) ATTR_NON_NULL_PTR_ARG ( 1 ) ;
uint16_t Length ) ATTR_NON_NULL_PTR_ARG ( 1 ) ;
/** FLASH buffer source version of \ref Endpoint_Write_Control_Stream_LE().
/** 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
* \ pre The FLASH data must be located in the first 64 KB of FLASH for this function to work correctly .
* 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
* \ 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 .
* to clear the status stage when using this routine in a control transaction .
@ -361,18 +437,18 @@
* \ warning Unlike the standard stream read / write commands , the control stream commands cannot be chained
* \ 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 .
* 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 [ out] Buffer Pointer to the destination data buffer to write to .
* \ param [ in ] Length Number of bytes to read for the currently selected endpoint into the buffer .
* \ 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 .
* \ return A value from the \ ref Endpoint_ControlStream_RW_ErrorCodes_t enum .
*/
*/
uint8_t Endpoint_ Write_Control_PStream_LE( const void * Buffer ,
uint8_t Endpoint_ Read_Control_Stream_LE( void * Buffer ,
uint16_t Length ) ATTR_NON_NULL_PTR_ARG ( 1 ) ;
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,
/** Reads the given number of bytes from the CONTROL endpoint from the given buffer in big endian,
* sending full packets to the host as needed . The host OUT acknowledgement is not automatically cleared
* discarding fully read packets from the host as needed . The device IN acknowledgement is not
* in both failure and success states ; the user is responsible for manually clearing the setup OUT to
* automatically sent after success or failure states ; the user is responsible for manually sending the
* finalize the transfer via the \ ref Endpoint_Clear OUT ( ) macro .
* setup IN to finalize the transfer via the \ ref Endpoint_Clear IN ( ) macro .
*
*
* \ note This function automatically clears the control transfer ' s status stage . Do not manually attempt
* \ 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 .
* to clear the status stage when using this routine in a control transaction .
@ -383,15 +459,71 @@
* \ warning Unlike the standard stream read / write commands , the control stream commands cannot be chained
* \ 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 .
* 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 [ out] Buffer Pointer to the destination data buffer to write to .
* \ param [ in ] Length Number of bytes to read for the currently selected endpoint into the buffer .
* \ 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 .
* \ return A value from the \ ref Endpoint_ControlStream_RW_ErrorCodes_t enum .
*/
*/
uint8_t Endpoint_ Write_Control_Stream_BE( const void * Buffer ,
uint8_t Endpoint_ Read_Control_Stream_BE( void * Buffer ,
uint16_t Length ) ATTR_NON_NULL_PTR_ARG ( 1 ) ;
uint16_t Length ) ATTR_NON_NULL_PTR_ARG ( 1 ) ;
//@}
/** EEPROM buffer source version of \ref Endpoint_Write_Control_Stream_BE().
/** \name Stream functions for EEPROM source/destination data */
//@{
/** 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 ] BytesProcessed Pointer to a location where the total number of bytes processed in the current
* transaction should be updated , \ c NULL if the entire stream should be written at once .
*
* \ return A value from the \ ref Endpoint_Stream_RW_ErrorCodes_t enum .
*/
uint8_t Endpoint_Write_EStream_LE ( const void * Buffer ,
uint16_t Length ,
uint16_t * const BytesProcessed ) 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 ] BytesProcessed Pointer to a location where the total number of bytes processed in the current
* transaction should be updated , \ c NULL if the entire stream should be written at once .
*
* \ return A value from the \ ref Endpoint_Stream_RW_ErrorCodes_t enum .
*/
uint8_t Endpoint_Write_EStream_BE ( const void * Buffer ,
uint16_t Length ,
uint16_t * const BytesProcessed ) 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 ] BytesProcessed Pointer to a location where the total number of bytes processed in the current
* transaction should be updated , \ c NULL if the entire stream should be read at once .
*
* \ return A value from the \ ref Endpoint_Stream_RW_ErrorCodes_t enum .
*/
uint8_t Endpoint_Read_EStream_LE ( void * Buffer ,
uint16_t Length ,
uint16_t * const BytesProcessed ) 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 ] BytesProcessed Pointer to a location where the total number of bytes processed in the current
* transaction should be updated , \ c NULL if the entire stream should be read at once .
*
* \ return A value from the \ ref Endpoint_Stream_RW_ErrorCodes_t enum .
*/
uint8_t Endpoint_Read_EStream_BE ( void * Buffer ,
uint16_t Length ,
uint16_t * const BytesProcessed ) 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
* \ 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 .
* to clear the status stage when using this routine in a control transaction .
@ -407,12 +539,10 @@
*
*
* \ return A value from the \ ref Endpoint_ControlStream_RW_ErrorCodes_t enum .
* \ return A value from the \ ref Endpoint_ControlStream_RW_ErrorCodes_t enum .
*/
*/
uint8_t Endpoint_Write_Control_EStream_ B E( const void * Buffer ,
uint8_t Endpoint_Write_Control_EStream_ L E( const void * Buffer ,
uint16_t Length ) ATTR_NON_NULL_PTR_ARG ( 1 ) ;
uint16_t Length ) ATTR_NON_NULL_PTR_ARG ( 1 ) ;
/** FLASH buffer source version of \ref Endpoint_Write_Control_Stream_BE().
/** EEPROM buffer source version of \ref Endpoint_Write_Control_Stream_BE().
*
* \ pre The FLASH data must be located in the first 64 KB of FLASH for this function to work correctly .
*
*
* \ note This function automatically clears the control transfer ' s status stage . Do not manually attempt
* \ 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 .
* to clear the status stage when using this routine in a control transaction .
@ -428,13 +558,10 @@
*
*
* \ return A value from the \ ref Endpoint_ControlStream_RW_ErrorCodes_t enum .
* \ return A value from the \ ref Endpoint_ControlStream_RW_ErrorCodes_t enum .
*/
*/
uint8_t Endpoint_Write_Control_ P Stream_BE( const void * Buffer ,
uint8_t Endpoint_Write_Control_ E Stream_BE( const void * Buffer ,
uint16_t Length ) ATTR_NON_NULL_PTR_ARG ( 1 ) ;
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,
/** EEPROM buffer source version of \ref Endpoint_Read_Control_Stream_LE().
* 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
* \ 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 .
* to clear the status stage when using this routine in a control transaction .
@ -450,10 +577,10 @@
*
*
* \ return A value from the \ ref Endpoint_ControlStream_RW_ErrorCodes_t enum .
* \ return A value from the \ ref Endpoint_ControlStream_RW_ErrorCodes_t enum .
*/
*/
uint8_t Endpoint_Read_Control_ Stream_LE( void * Buffer ,
uint8_t Endpoint_Read_Control_ E Stream_LE( void * Buffer ,
uint16_t Length ) ATTR_NON_NULL_PTR_ARG ( 1 ) ;
uint16_t Length ) ATTR_NON_NULL_PTR_ARG ( 1 ) ;
/** EEPROM buffer source version of \ref Endpoint_Read_Control_Stream_ L E().
/** EEPROM buffer source version of \ref Endpoint_Read_Control_Stream_ B E().
*
*
* \ note This function automatically clears the control transfer ' s status stage . Do not manually attempt
* \ 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 .
* to clear the status stage when using this routine in a control transaction .
@ -469,13 +596,46 @@
*
*
* \ return A value from the \ ref Endpoint_ControlStream_RW_ErrorCodes_t enum .
* \ return A value from the \ ref Endpoint_ControlStream_RW_ErrorCodes_t enum .
*/
*/
uint8_t Endpoint_Read_Control_EStream_ L E( void * Buffer ,
uint8_t Endpoint_Read_Control_EStream_ B E( void * Buffer ,
uint16_t Length ) ATTR_NON_NULL_PTR_ARG ( 1 ) ;
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,
/** \name Stream functions for PROGMEM source/destination data */
* 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 .
/** FLASH buffer source version of \ref Endpoint_Write_Stream_LE().
*
* \ pre The FLASH data must be located in the first 64 KB 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 ] BytesProcessed Pointer to a location where the total number of bytes processed in the current
* transaction should be updated , \ c NULL if the entire stream should be written at once .
*
* \ return A value from the \ ref Endpoint_Stream_RW_ErrorCodes_t enum .
*/
uint8_t Endpoint_Write_PStream_LE ( const void * Buffer ,
uint16_t Length ,
uint16_t * const BytesProcessed ) 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 64 KB 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 ] BytesProcessed Pointer to a location where the total number of bytes processed in the current
* transaction should be updated , \ c NULL if the entire stream should be written at once .
*
* \ return A value from the \ ref Endpoint_Stream_RW_ErrorCodes_t enum .
*/
uint8_t Endpoint_Write_PStream_BE ( const void * Buffer ,
uint16_t Length ,
uint16_t * const BytesProcessed ) 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 64 KB of FLASH for this function to work correctly .
*
*
* \ note This function automatically clears the control transfer ' s status stage . Do not manually attempt
* \ 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 .
* to clear the status stage when using this routine in a control transaction .
@ -486,15 +646,17 @@
* \ warning Unlike the standard stream read / write commands , the control stream commands cannot be chained
* \ 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 .
* 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] Buffer Pointer to the source data buffer to read from .
* \ param [ in ] Length Number of bytes to send via the currently selected endpoint .
* \ 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 .
* \ return A value from the \ ref Endpoint_ControlStream_RW_ErrorCodes_t enum .
*/
*/
uint8_t Endpoint_ Read_Control_Stream_BE( void * Buffer ,
uint8_t Endpoint_ Write_Control_PStream_LE( const void * Buffer ,
uint16_t Length ) ATTR_NON_NULL_PTR_ARG ( 1 ) ;
uint16_t Length ) ATTR_NON_NULL_PTR_ARG ( 1 ) ;
/** EEPROM buffer source version of \ref Endpoint_Read_Control_Stream_BE().
/** FLASH buffer source version of \ref Endpoint_Write_Control_Stream_BE().
*
* \ pre The FLASH data must be located in the first 64 KB of FLASH for this function to work correctly .
*
*
* \ note This function automatically clears the control transfer ' s status stage . Do not manually attempt
* \ 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 .
* to clear the status stage when using this routine in a control transaction .
@ -505,13 +667,14 @@
* \ warning Unlike the standard stream read / write commands , the control stream commands cannot be chained
* \ 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 .
* 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] Buffer Pointer to the source data buffer to read from .
* \ param [ in ] Length Number of bytes to send via the currently selected endpoint .
* \ 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 .
* \ return A value from the \ ref Endpoint_ControlStream_RW_ErrorCodes_t enum .
*/
*/
uint8_t Endpoint_ Read_Control_EStream_BE( void * Buffer ,
uint8_t Endpoint_ Write_Control_PStream_BE( const void * Buffer ,
uint16_t Length ) ATTR_NON_NULL_PTR_ARG ( 1 ) ;
uint16_t Length ) ATTR_NON_NULL_PTR_ARG ( 1 ) ;
//@}
/* Disable C linkage for C++ Compilers: */
/* Disable C linkage for C++ Compilers: */
# if defined(__cplusplus)
# if defined(__cplusplus)