X-Git-Url: http://git.linex4red.de/pub/USBasp.git/blobdiff_plain/01c4bef107214d5a4407a654754dc952ddd5cdba..b462f2d457ec2f0cfa22a1c3db198cb22f6809a1:/LUFA/Drivers/USB/LowLevel/Endpoint.h diff --git a/LUFA/Drivers/USB/LowLevel/Endpoint.h b/LUFA/Drivers/USB/LowLevel/Endpoint.h index aa5005a82..772d1feed 100644 --- a/LUFA/Drivers/USB/LowLevel/Endpoint.h +++ b/LUFA/Drivers/USB/LowLevel/Endpoint.h @@ -108,7 +108,7 @@ /** Endpoint number mask, for masking against endpoint addresses to retrieve the endpoint's * numerical address in the device. */ - #define ENDPOINT_EPNUM_MASK 0x03 + #define ENDPOINT_EPNUM_MASK 0x07 /** Endpoint bank size mask, for masking against endpoint addresses to retrieve the endpoint's * bank size in the device. @@ -117,18 +117,18 @@ /** Maximum size in bytes of a given endpoint. * - * \param n Endpoint number, a value between 0 and (ENDPOINT_TOTAL_ENDPOINTS - 1) + * \param[in] n Endpoint number, a value between 0 and (ENDPOINT_TOTAL_ENDPOINTS - 1) */ #define ENDPOINT_MAX_SIZE(n) _ENDPOINT_GET_MAXSIZE(n) /** Indicates if the given endpoint supports double banking. * - * \param n Endpoint number, a value between 0 and (ENDPOINT_TOTAL_ENDPOINTS - 1) + * \param[in] n Endpoint number, a value between 0 and (ENDPOINT_TOTAL_ENDPOINTS - 1) */ #define ENDPOINT_DOUBLEBANK_SUPPORTED(n) _ENDPOINT_GET_DOUBLEBANK(n) #if !defined(CONTROL_ONLY_DEVICE) - #if defined(USB_FULL_CONTROLLER) || defined(USB_MODIFIED_FULL_CONTROLLER) || defined(__DOXYGEN__) + #if defined(USB_SERIES_4_AVR) || defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR) || defined(__DOXYGEN__) /** Total number of endpoints (including the default control endpoint at address 0) which may * be used in the device. Different USB AVR models support different amounts of endpoints, * this value reflects the maximum number of endpoints for the currently selected AVR model. @@ -140,47 +140,6 @@ #else #define ENDPOINT_TOTAL_ENDPOINTS 1 #endif - - /** Interrupt definition for the endpoint SETUP interrupt (for CONTROL type endpoints). Should be - * used with the USB_INT_* macros located in USBInterrupt.h. - * - * This interrupt will fire if enabled on a CONTROL type endpoint if a new control packet is - * received from the host. - * - * \note This interrupt must be enabled and cleared on *each* endpoint which requires it (after the - * endpoint is selected), and will fire the common endpoint interrupt vector. - * - * \see \ref ENDPOINT_PIPE_vect for more information on the common pipe and endpoint interrupt vector. - */ - #define ENDPOINT_INT_SETUP UEIENX, (1 << RXSTPE), UEINTX, (1 << RXSTPI) - - /** Interrupt definition for the endpoint IN interrupt (for INTERRUPT type endpoints). Should be - * used with the USB_INT_* macros located in USBInterrupt.h. - * - * This interrupt will fire if enabled on an INTERRUPT type endpoint if a the endpoint interrupt - * period has elapsed and the endpoint is ready for a new packet to be written to its FIFO buffer - * (if required). - * - * \note This interrupt must be enabled and cleared on *each* endpoint which requires it (after the - * endpoint is selected), and will fire the common endpoint interrupt vector. - * - * \see \ref ENDPOINT_PIPE_vect for more information on the common pipe and endpoint interrupt vector. - */ - #define ENDPOINT_INT_IN UEIENX, (1 << TXINE) , UEINTX, (1 << TXINI) - - /** Interrupt definition for the endpoint OUT interrupt (for INTERRUPT type endpoints). Should be - * used with the USB_INT_* macros located in USBInterrupt.h. - * - * This interrupt will fire if enabled on an INTERRUPT type endpoint if a the endpoint interrupt - * period has elapsed and the endpoint is ready for a packet from the host to be read from its - * FIFO buffer (if received). - * - * \note This interrupt must be enabled and cleared on *each* endpoint which requires it (after the - * endpoint is selected), and will fire the common endpoint interrupt vector. - * - * \see \ref ENDPOINT_PIPE_vect for more information on the common pipe and endpoint interrupt vector. - */ - #define ENDPOINT_INT_OUT UEIENX, (1 << RXOUTE), UEINTX, (1 << RXOUTI) /* Pseudo-Function Macros: */ #if defined(__DOXYGEN__) @@ -210,14 +169,14 @@ * Any endpoint operations which do not require the endpoint number to be indicated will operate on * the currently selected endpoint. * - * \param EndpointNumber Endpoint number to select + * \param[in] EndpointNumber Endpoint number to select */ static inline void Endpoint_SelectEndpoint(uint8_t EndpointNumber); /** Resets the endpoint bank FIFO. This clears all the endpoint banks and resets the USB controller's * In and Out pointers to the bank's contents. * - * \param EndpointNumber Endpoint number whose FIFO buffers are to be reset + * \param[in] EndpointNumber Endpoint number whose FIFO buffers are to be reset */ static inline void Endpoint_ResetFIFO(uint8_t EndpointNumber); @@ -265,17 +224,10 @@ */ static inline uint8_t Endpoint_GetEndpointInterrupts(void); - /** Clears the endpoint interrupt flag. This clears the specified endpoint number's interrupt - * mask in the endpoint interrupt flag register. - * - * \param EndpointNumber Index of the endpoint whose interrupt flag should be cleared - */ - static inline void Endpoint_ClearEndpointInterrupt(uint8_t EndpointNumber); - /** Determines if the specified endpoint number has interrupted (valid only for INTERRUPT type * endpoints). * - * \param EndpointNumber Index of the endpoint whose interrupt flag should be tested + * \param[in] EndpointNumber Index of the endpoint whose interrupt flag should be tested * * \return Boolean true if the specified endpoint has interrupted, false otherwise */ @@ -364,7 +316,7 @@ */ static inline uint8_t Endpoint_GetEndpointDirection(void); #else - #if defined(USB_FULL_CONTROLLER) || defined(USB_MODIFIED_FULL_CONTROLLER) || defined(__DOXYGEN__) + #if defined(USB_SERIES_4_AVR) || defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR) || defined(__DOXYGEN__) #define Endpoint_BytesInEndpoint() UEBCX #else #define Endpoint_BytesInEndpoint() UEBCLX @@ -398,8 +350,6 @@ #define Endpoint_GetEndpointInterrupts() UEINT - #define Endpoint_ClearEndpointInterrupt(n) MACROS{ UEINT &= ~(1 << n); }MACROE - #define Endpoint_HasEndpointInterrupted(n) ((UEINT & (1 << n)) ? true : false) #define Endpoint_IsINReady() ((UEINTX & (1 << TXINI)) ? true : false) @@ -504,7 +454,7 @@ * * \ingroup Group_EndpointRW * - * \param Byte Next byte to write into the the currently selected endpoint's FIFO buffer + * \param[in] Byte Next byte to write into the the currently selected endpoint's FIFO buffer */ static inline void Endpoint_Write_Byte(const uint8_t Byte) ATTR_ALWAYS_INLINE; static inline void Endpoint_Write_Byte(const uint8_t Byte) @@ -565,7 +515,7 @@ * * \ingroup Group_EndpointRW * - * \param Word Next word to write to the currently selected endpoint's FIFO buffer + * \param[in] Word Next word to write to the currently selected endpoint's FIFO buffer */ static inline void Endpoint_Write_Word_LE(const uint16_t Word) ATTR_ALWAYS_INLINE; static inline void Endpoint_Write_Word_LE(const uint16_t Word) @@ -579,7 +529,7 @@ * * \ingroup Group_EndpointRW * - * \param Word Next word to write to the currently selected endpoint's FIFO buffer + * \param[in] Word Next word to write to the currently selected endpoint's FIFO buffer */ static inline void Endpoint_Write_Word_BE(const uint16_t Word) ATTR_ALWAYS_INLINE; static inline void Endpoint_Write_Word_BE(const uint16_t Word) @@ -654,7 +604,7 @@ * * \ingroup Group_EndpointRW * - * \param DWord Next double word to write to the currently selected endpoint's FIFO buffer + * \param[in] DWord Next double word to write to the currently selected endpoint's FIFO buffer */ static inline void Endpoint_Write_DWord_LE(const uint32_t DWord) ATTR_ALWAYS_INLINE; static inline void Endpoint_Write_DWord_LE(const uint32_t DWord) @@ -670,7 +620,7 @@ * * \ingroup Group_EndpointRW * - * \param DWord Next double word to write to the currently selected endpoint's FIFO buffer + * \param[in] DWord Next double word to write to the currently selected endpoint's FIFO buffer */ static inline void Endpoint_Write_DWord_BE(const uint32_t DWord) ATTR_ALWAYS_INLINE; static inline void Endpoint_Write_DWord_BE(const uint32_t DWord) @@ -721,7 +671,8 @@ /* Function Prototypes: */ /** Configures the specified endpoint number with the given endpoint type, direction, bank size * and banking mode. Endpoints should be allocated in ascending order by their address in the - * device (i.e. endpoint 1 should be configured before endpoint 2 and so on). + * device (i.e. endpoint 1 should be configured before endpoint 2 and so on) to prevent fragmentation + * of the USB FIFO memory. * * The endpoint type may be one of the EP_TYPE_* macros listed in LowLevel.h and the direction * may be either \ref ENDPOINT_DIR_OUT or \ref ENDPOINT_DIR_IN. @@ -732,7 +683,8 @@ * * The banking mode may be either \ref ENDPOINT_BANK_SINGLE or \ref ENDPOINT_BANK_DOUBLE. * - * The success of this routine can be determined via the \ref Endpoint_IsConfigured() macro. + * \note The default control endpoint does not have to be manually configured, as it is automatically + * configured by the library internally. * * \note This routine will select the specified endpoint, and the endpoint will remain selected * once the routine completes regardless of if the endpoint configuration succeeds. @@ -762,22 +714,22 @@ * 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 using the \ref STREAM_CALLBACK() macro. 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 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_EndpointRW * - * \param Length Number of bytes to send via the currently selected endpoint. - * \param Callback Name of a callback routine to call between successive USB packet transfers, NULL if no callback + * \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 #if !defined(NO_STREAM_CALLBACKS) || defined(__DOXYGEN__) - , uint8_t (* const Callback)(void) + , StreamCallbackPtr_t Callback #endif ); @@ -788,23 +740,23 @@ * 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 using the \ref STREAM_CALLBACK() macro. 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 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_EndpointRW * - * \param Buffer Pointer to the source data buffer to read from. - * \param Length Number of bytes to read for the currently selected endpoint into the buffer. - * \param Callback Name of a callback routine to call between successive USB packet transfers, NULL if no callback + * \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 #if !defined(NO_STREAM_CALLBACKS) || defined(__DOXYGEN__) - , uint8_t (* const Callback)(void) + , StreamCallbackPtr_t Callback #endif ) ATTR_NON_NULL_PTR_ARG(1); @@ -815,23 +767,23 @@ * 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 using the \ref STREAM_CALLBACK() macro. 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 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_EndpointRW * - * \param Buffer Pointer to the source data buffer to read from. - * \param Length Number of bytes to read for the currently selected endpoint into the buffer. - * \param Callback Name of a callback routine to call between successive USB packet transfers, NULL if no callback + * \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 #if !defined(NO_STREAM_CALLBACKS) || defined(__DOXYGEN__) - , uint8_t (* const Callback)(void) + , StreamCallbackPtr_t Callback #endif ) ATTR_NON_NULL_PTR_ARG(1); @@ -842,23 +794,23 @@ * 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 using the \ref STREAM_CALLBACK() macro. 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 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_EndpointRW * - * \param Buffer Pointer to the destination data buffer to write to. - * \param Length Number of bytes to send via the currently selected endpoint. - * \param Callback Name of a callback routine to call between successive USB packet transfers, NULL if no callback + * \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 #if !defined(NO_STREAM_CALLBACKS) || defined(__DOXYGEN__) - , uint8_t (* const Callback)(void) + , StreamCallbackPtr_t Callback #endif ) ATTR_NON_NULL_PTR_ARG(1); @@ -869,23 +821,23 @@ * 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 using the \ref STREAM_CALLBACK() macro. 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 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_EndpointRW * - * \param Buffer Pointer to the destination data buffer to write to. - * \param Length Number of bytes to send via the currently selected endpoint. - * \param Callback Name of a callback routine to call between successive USB packet transfers, NULL if no callback + * \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 #if !defined(NO_STREAM_CALLBACKS) || defined(__DOXYGEN__) - , uint8_t (* const Callback)(void) + , StreamCallbackPtr_t Callback #endif ) ATTR_NON_NULL_PTR_ARG(1); @@ -903,8 +855,8 @@ * * \ingroup Group_EndpointRW * - * \param Buffer Pointer to the source data buffer to read from. - * \param Length Number of bytes to read for the currently selected endpoint into the buffer. + * \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. */ @@ -922,8 +874,8 @@ * * \ingroup Group_EndpointRW * - * \param Buffer Pointer to the source data buffer to read from. - * \param Length Number of bytes to read for the currently selected endpoint into the buffer. + * \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. */ @@ -941,8 +893,8 @@ * * \ingroup Group_EndpointRW * - * \param Buffer Pointer to the destination data buffer to write to. - * \param Length Number of bytes to send via the currently selected endpoint. + * \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. */ @@ -960,8 +912,8 @@ * * \ingroup Group_EndpointRW * - * \param Buffer Pointer to the destination data buffer to write to. - * \param Length Number of bytes to send via the currently selected endpoint. + * \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. */ @@ -981,7 +933,7 @@ #define _ENDPOINT_GET_DOUBLEBANK2(details) _ENDPOINT_GET_DOUBLEBANK3(details) #define _ENDPOINT_GET_DOUBLEBANK3(maxsize, db) db - #if defined(USB_FULL_CONTROLLER) || defined(USB_MODIFIED_FULL_CONTROLLER) + #if defined(USB_SERIES_4_AVR) || defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR) #define ENDPOINT_DETAILS_EP0 64, true #define ENDPOINT_DETAILS_EP1 256, true #define ENDPOINT_DETAILS_EP2 64, true