Minor correction to MagStripe demo to fix build problems.
[pub/USBasp.git] / LUFA / Drivers / USB / LowLevel / Endpoint.h
index aa5005a..772d1fe 100644 (file)
                        /** Endpoint number mask, for masking against endpoint addresses to retrieve the endpoint's\r
                         *  numerical address in the device.\r
                         */\r
-                       #define ENDPOINT_EPNUM_MASK                   0x03\r
+                       #define ENDPOINT_EPNUM_MASK                   0x07\r
 \r
                        /** Endpoint bank size mask, for masking against endpoint addresses to retrieve the endpoint's\r
                         *  bank size in the device.\r
                        \r
                        /** Maximum size in bytes of a given endpoint.\r
                         *\r
-                        *  \param n  Endpoint number, a value between 0 and (ENDPOINT_TOTAL_ENDPOINTS - 1)\r
+                        *  \param[in] n  Endpoint number, a value between 0 and (ENDPOINT_TOTAL_ENDPOINTS - 1)\r
                         */                             \r
                        #define ENDPOINT_MAX_SIZE(n)                  _ENDPOINT_GET_MAXSIZE(n)\r
 \r
                        /** Indicates if the given endpoint supports double banking.\r
                         *\r
-                        *  \param n  Endpoint number, a value between 0 and (ENDPOINT_TOTAL_ENDPOINTS - 1)\r
+                        *  \param[in] n  Endpoint number, a value between 0 and (ENDPOINT_TOTAL_ENDPOINTS - 1)\r
                         */                             \r
                        #define ENDPOINT_DOUBLEBANK_SUPPORTED(n)      _ENDPOINT_GET_DOUBLEBANK(n)\r
 \r
                        #if !defined(CONTROL_ONLY_DEVICE)\r
-                               #if defined(USB_FULL_CONTROLLER) || defined(USB_MODIFIED_FULL_CONTROLLER) || defined(__DOXYGEN__)\r
+                               #if defined(USB_SERIES_4_AVR) || defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR) || defined(__DOXYGEN__)\r
                                        /** Total number of endpoints (including the default control endpoint at address 0) which may\r
                                         *  be used in the device. Different USB AVR models support different amounts of endpoints,\r
                                         *  this value reflects the maximum number of endpoints for the currently selected AVR model.\r
                        #else\r
                                #define ENDPOINT_TOTAL_ENDPOINTS              1\r
                        #endif\r
-\r
-                       /** Interrupt definition for the endpoint SETUP interrupt (for CONTROL type endpoints). Should be\r
-                        *  used with the USB_INT_* macros located in USBInterrupt.h.\r
-                        *\r
-                        *  This interrupt will fire if enabled on a CONTROL type endpoint if a new control packet is\r
-                        *  received from the host.\r
-                        *\r
-                        *  \note This interrupt must be enabled and cleared on *each* endpoint which requires it (after the\r
-                        *        endpoint is selected), and will fire the common endpoint interrupt vector.\r
-                        *\r
-                        *  \see \ref ENDPOINT_PIPE_vect for more information on the common pipe and endpoint interrupt vector.\r
-                        */\r
-                       #define ENDPOINT_INT_SETUP                    UEIENX, (1 << RXSTPE), UEINTX, (1 << RXSTPI)\r
-\r
-                       /** Interrupt definition for the endpoint IN interrupt (for INTERRUPT type endpoints). Should be\r
-                        *  used with the USB_INT_* macros located in USBInterrupt.h.\r
-                        *\r
-                        *  This interrupt will fire if enabled on an INTERRUPT type endpoint if a the endpoint interrupt\r
-                        *  period has elapsed and the endpoint is ready for a new packet to be written to its FIFO buffer\r
-                        *  (if required).\r
-                        *\r
-                        *  \note This interrupt must be enabled and cleared on *each* endpoint which requires it (after the\r
-                        *        endpoint is selected), and will fire the common endpoint interrupt vector.\r
-                        *\r
-                        *  \see \ref ENDPOINT_PIPE_vect for more information on the common pipe and endpoint interrupt vector.\r
-                        */\r
-                       #define ENDPOINT_INT_IN                       UEIENX, (1 << TXINE) , UEINTX, (1 << TXINI)\r
-\r
-                       /** Interrupt definition for the endpoint OUT interrupt (for INTERRUPT type endpoints). Should be\r
-                        *  used with the USB_INT_* macros located in USBInterrupt.h.\r
-                        *\r
-                        *  This interrupt will fire if enabled on an INTERRUPT type endpoint if a the endpoint interrupt\r
-                        *  period has elapsed and the endpoint is ready for a packet from the host to be read from its\r
-                        *  FIFO buffer (if received).\r
-                        *\r
-                        *  \note This interrupt must be enabled and cleared on *each* endpoint which requires it (after the\r
-                        *        endpoint is selected), and will fire the common endpoint interrupt vector.\r
-                        *\r
-                        *  \see \ref ENDPOINT_PIPE_vect for more information on the common pipe and endpoint interrupt vector.\r
-                        */\r
-                       #define ENDPOINT_INT_OUT                      UEIENX, (1 << RXOUTE), UEINTX, (1 << RXOUTI)\r
                        \r
                /* Pseudo-Function Macros: */\r
                        #if defined(__DOXYGEN__)\r
                                 *  Any endpoint operations which do not require the endpoint number to be indicated will operate on\r
                                 *  the currently selected endpoint.\r
                                 *\r
-                                *  \param EndpointNumber Endpoint number to select\r
+                                *  \param[in] EndpointNumber Endpoint number to select\r
                                 */\r
                                static inline void Endpoint_SelectEndpoint(uint8_t EndpointNumber);\r
                                \r
                                /** Resets the endpoint bank FIFO. This clears all the endpoint banks and resets the USB controller's\r
                                 *  In and Out pointers to the bank's contents.\r
                                 *\r
-                                *  \param EndpointNumber Endpoint number whose FIFO buffers are to be reset\r
+                                *  \param[in] EndpointNumber Endpoint number whose FIFO buffers are to be reset\r
                                 */\r
                                static inline void Endpoint_ResetFIFO(uint8_t EndpointNumber);\r
                                \r
                                 */\r
                                static inline uint8_t Endpoint_GetEndpointInterrupts(void);\r
                                \r
-                               /** Clears the endpoint interrupt flag. This clears the specified endpoint number's interrupt\r
-                                *  mask in the endpoint interrupt flag register.\r
-                                *\r
-                                *  \param EndpointNumber  Index of the endpoint whose interrupt flag should be cleared\r
-                                */\r
-                               static inline void Endpoint_ClearEndpointInterrupt(uint8_t EndpointNumber);\r
-                               \r
                                /** Determines if the specified endpoint number has interrupted (valid only for INTERRUPT type\r
                                 *  endpoints).\r
                                 *\r
-                                *  \param EndpointNumber  Index of the endpoint whose interrupt flag should be tested\r
+                                *  \param[in] EndpointNumber  Index of the endpoint whose interrupt flag should be tested\r
                                 *\r
                                 *  \return Boolean true if the specified endpoint has interrupted, false otherwise\r
                                 */\r
                                 */\r
                                static inline uint8_t Endpoint_GetEndpointDirection(void);\r
                        #else\r
-                               #if defined(USB_FULL_CONTROLLER) || defined(USB_MODIFIED_FULL_CONTROLLER) || defined(__DOXYGEN__)\r
+                               #if defined(USB_SERIES_4_AVR) || defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR) || defined(__DOXYGEN__)\r
                                        #define Endpoint_BytesInEndpoint()        UEBCX\r
                                #else\r
                                        #define Endpoint_BytesInEndpoint()        UEBCLX\r
 \r
                                #define Endpoint_GetEndpointInterrupts()      UEINT\r
 \r
-                               #define Endpoint_ClearEndpointInterrupt(n)    MACROS{ UEINT &= ~(1 << n); }MACROE\r
-\r
                                #define Endpoint_HasEndpointInterrupted(n)    ((UEINT & (1 << n)) ? true : false)\r
                                \r
                                #define Endpoint_IsINReady()                  ((UEINTX & (1 << TXINI))  ? true : false)\r
                         *\r
                         *  \ingroup Group_EndpointRW\r
                         *\r
-                        *  \param Byte  Next byte to write into the the currently selected endpoint's FIFO buffer\r
+                        *  \param[in] Byte  Next byte to write into the the currently selected endpoint's FIFO buffer\r
                         */\r
                        static inline void Endpoint_Write_Byte(const uint8_t Byte) ATTR_ALWAYS_INLINE;\r
                        static inline void Endpoint_Write_Byte(const uint8_t Byte)\r
                         *\r
                         *  \ingroup Group_EndpointRW\r
                         *\r
-                        *  \param Word  Next word to write to the currently selected endpoint's FIFO buffer\r
+                        *  \param[in] Word  Next word to write to the currently selected endpoint's FIFO buffer\r
                         */\r
                        static inline void Endpoint_Write_Word_LE(const uint16_t Word) ATTR_ALWAYS_INLINE;\r
                        static inline void Endpoint_Write_Word_LE(const uint16_t Word)\r
                         *\r
                         *  \ingroup Group_EndpointRW\r
                         *\r
-                        *  \param Word  Next word to write to the currently selected endpoint's FIFO buffer\r
+                        *  \param[in] Word  Next word to write to the currently selected endpoint's FIFO buffer\r
                         */\r
                        static inline void Endpoint_Write_Word_BE(const uint16_t Word) ATTR_ALWAYS_INLINE;\r
                        static inline void Endpoint_Write_Word_BE(const uint16_t Word)\r
                         *\r
                         *  \ingroup Group_EndpointRW\r
                         *\r
-                        *  \param DWord  Next double word to write to the currently selected endpoint's FIFO buffer\r
+                        *  \param[in] DWord  Next double word to write to the currently selected endpoint's FIFO buffer\r
                         */\r
                        static inline void Endpoint_Write_DWord_LE(const uint32_t DWord) ATTR_ALWAYS_INLINE;\r
                        static inline void Endpoint_Write_DWord_LE(const uint32_t DWord)\r
                         *\r
                         *  \ingroup Group_EndpointRW\r
                         *\r
-                        *  \param DWord  Next double word to write to the currently selected endpoint's FIFO buffer\r
+                        *  \param[in] DWord  Next double word to write to the currently selected endpoint's FIFO buffer\r
                         */\r
                        static inline void Endpoint_Write_DWord_BE(const uint32_t DWord) ATTR_ALWAYS_INLINE;\r
                        static inline void Endpoint_Write_DWord_BE(const uint32_t DWord)\r
                /* Function Prototypes: */\r
                        /** Configures the specified endpoint number with the given endpoint type, direction, bank size\r
                         *  and banking mode. Endpoints should be allocated in ascending order by their address in the\r
-                        *  device (i.e. endpoint 1 should be configured before endpoint 2 and so on).\r
+                        *  device (i.e. endpoint 1 should be configured before endpoint 2 and so on) to prevent fragmentation\r
+                        *  of the USB FIFO memory.\r
                         *\r
                         *  The endpoint type may be one of the EP_TYPE_* macros listed in LowLevel.h and the direction\r
                         *  may be either \ref ENDPOINT_DIR_OUT or \ref ENDPOINT_DIR_IN.\r
                         *\r
                         *  The banking mode may be either \ref ENDPOINT_BANK_SINGLE or \ref ENDPOINT_BANK_DOUBLE.\r
                         *\r
-                        *  The success of this routine can be determined via the \ref Endpoint_IsConfigured() macro.\r
+                        *  \note The default control endpoint does not have to be manually configured, as it is automatically\r
+                        *  configured by the library internally.\r
                         *\r
                         *  \note This routine will select the specified endpoint, and the endpoint will remain selected\r
                         *        once the routine completes regardless of if the endpoint configuration succeeds.\r
                         *  each USB packet, the given stream callback function is executed repeatedly until the next\r
                         *  packet is ready, allowing for early aborts of stream transfers.\r
                         *\r
-                        *      The callback routine should be created using the \ref STREAM_CALLBACK() macro. If the token\r
-                        *  NO_STREAM_CALLBACKS is passed via the -D option to the compiler, stream callbacks are disabled\r
-                        *  and this function has the Callback parameter omitted.\r
+                        *      The callback routine should be created according to the information in \ref Group_StreamCallbacks.\r
+                        *  If the token NO_STREAM_CALLBACKS is passed via the -D option to the compiler, stream callbacks are\r
+                        *  disabled and this function has the Callback parameter omitted.\r
                         *\r
                         *  \note This routine should not be used on CONTROL type endpoints.\r
                         *\r
                         *  \ingroup Group_EndpointRW\r
                         *\r
-                        *  \param Length    Number of bytes to send via the currently selected endpoint.\r
-                        *  \param Callback  Name of a callback routine to call between successive USB packet transfers, NULL if no callback\r
+                        *  \param[in] Length    Number of bytes to send via the currently selected endpoint.\r
+                        *  \param[in] Callback  Name of a callback routine to call between successive USB packet transfers, NULL if no callback\r
                         *\r
                         *  \return A value from the \ref Endpoint_Stream_RW_ErrorCodes_t enum.\r
                         */\r
                        uint8_t Endpoint_Discard_Stream(uint16_t Length\r
                        #if !defined(NO_STREAM_CALLBACKS) || defined(__DOXYGEN__)\r
-                                                       , uint8_t (* const Callback)(void)\r
+                                                       , StreamCallbackPtr_t Callback\r
                        #endif\r
                                                        );\r
 \r
                         *  is executed repeatedly until the endpoint is ready to accept the next packet, allowing for early\r
                         *  aborts of stream transfers.\r
                         *\r
-                        *      The callback routine should be created using the \ref STREAM_CALLBACK() macro. If the token\r
-                        *  NO_STREAM_CALLBACKS is passed via the -D option to the compiler, stream callbacks are disabled\r
-                        *  and this function has the Callback parameter omitted.\r
+                        *      The callback routine should be created according to the information in \ref Group_StreamCallbacks.\r
+                        *  If the token NO_STREAM_CALLBACKS is passed via the -D option to the compiler, stream callbacks are\r
+                        *  disabled and this function has the Callback parameter omitted.\r
                         *\r
                         *  \note This routine should not be used on CONTROL type endpoints.\r
                         *\r
                         *  \ingroup Group_EndpointRW\r
                         *\r
-                        *  \param Buffer    Pointer to the source data buffer to read from.\r
-                        *  \param Length    Number of bytes to read for the currently selected endpoint into the buffer.\r
-                        *  \param Callback  Name of a callback routine to call between successive USB packet transfers, NULL if no callback\r
+                        *  \param[in] Buffer    Pointer to the source data buffer to read from.\r
+                        *  \param[in] Length    Number of bytes to read for the currently selected endpoint into the buffer.\r
+                        *  \param[in] Callback  Name of a callback routine to call between successive USB packet transfers, NULL if no callback\r
                         *\r
                         *  \return A value from the \ref Endpoint_Stream_RW_ErrorCodes_t enum.\r
                         */\r
                        uint8_t Endpoint_Write_Stream_LE(const void* Buffer, uint16_t Length\r
                        #if !defined(NO_STREAM_CALLBACKS) || defined(__DOXYGEN__)\r
-                                                        , uint8_t (* const Callback)(void)\r
+                                                        , StreamCallbackPtr_t Callback\r
                        #endif\r
                                                         ) ATTR_NON_NULL_PTR_ARG(1);\r
 \r
                         *  is executed repeatedly until the endpoint is ready to accept the next packet, allowing for early\r
                         *  aborts of stream transfers.\r
                         *\r
-                        *      The callback routine should be created using the \ref STREAM_CALLBACK() macro. If the token\r
-                        *  NO_STREAM_CALLBACKS is passed via the -D option to the compiler, stream callbacks are disabled\r
-                        *  and this function has the Callback parameter omitted.\r
+                        *      The callback routine should be created according to the information in \ref Group_StreamCallbacks.\r
+                        *  If the token NO_STREAM_CALLBACKS is passed via the -D option to the compiler, stream callbacks are\r
+                        *  disabled and this function has the Callback parameter omitted.\r
                         *\r
                         *  \note This routine should not be used on CONTROL type endpoints.\r
                         *\r
                         *  \ingroup Group_EndpointRW\r
                         *\r
-                        *  \param Buffer    Pointer to the source data buffer to read from.\r
-                        *  \param Length    Number of bytes to read for the currently selected endpoint into the buffer.\r
-                        *  \param Callback  Name of a callback routine to call between successive USB packet transfers, NULL if no callback\r
+                        *  \param[in] Buffer    Pointer to the source data buffer to read from.\r
+                        *  \param[in] Length    Number of bytes to read for the currently selected endpoint into the buffer.\r
+                        *  \param[in] Callback  Name of a callback routine to call between successive USB packet transfers, NULL if no callback\r
                         *\r
                         *  \return A value from the \ref Endpoint_Stream_RW_ErrorCodes_t enum.\r
                         */\r
                        uint8_t Endpoint_Write_Stream_BE(const void* Buffer, uint16_t Length\r
                        #if !defined(NO_STREAM_CALLBACKS) || defined(__DOXYGEN__)\r
-                                                        , uint8_t (* const Callback)(void)\r
+                                                        , StreamCallbackPtr_t Callback\r
                        #endif\r
                                                         ) ATTR_NON_NULL_PTR_ARG(1);\r
 \r
                         *  each USB packet, the given stream callback function is executed repeatedly until the endpoint\r
                         *  is ready to accept the next packet, allowing for early aborts of stream transfers.\r
                         *\r
-                        *      The callback routine should be created using the \ref STREAM_CALLBACK() macro. If the token\r
-                        *  NO_STREAM_CALLBACKS is passed via the -D option to the compiler, stream callbacks are disabled\r
-                        *  and this function has the Callback parameter omitted.\r
+                        *      The callback routine should be created according to the information in \ref Group_StreamCallbacks.\r
+                        *  If the token NO_STREAM_CALLBACKS is passed via the -D option to the compiler, stream callbacks are\r
+                        *  disabled and this function has the Callback parameter omitted.\r
                         *\r
                         *  \note This routine should not be used on CONTROL type endpoints.\r
                         *\r
                         *  \ingroup Group_EndpointRW\r
                         *\r
-                        *  \param Buffer    Pointer to the destination data buffer to write to.\r
-                        *  \param Length    Number of bytes to send via the currently selected endpoint.\r
-                        *  \param Callback  Name of a callback routine to call between successive USB packet transfers, NULL if no callback\r
+                        *  \param[out] Buffer    Pointer to the destination data buffer to write to.\r
+                        *  \param[in] Length    Number of bytes to send via the currently selected endpoint.\r
+                        *  \param[in] Callback  Name of a callback routine to call between successive USB packet transfers, NULL if no callback\r
                         *\r
                         *  \return A value from the \ref Endpoint_Stream_RW_ErrorCodes_t enum.\r
                         */\r
                        uint8_t Endpoint_Read_Stream_LE(void* Buffer, uint16_t Length\r
                        #if !defined(NO_STREAM_CALLBACKS) || defined(__DOXYGEN__)\r
-                                                       , uint8_t (* const Callback)(void)\r
+                                                       , StreamCallbackPtr_t Callback\r
                        #endif\r
                                                        ) ATTR_NON_NULL_PTR_ARG(1);\r
 \r
                         *  each USB packet, the given stream callback function is executed repeatedly until the endpoint\r
                         *  is ready to accept the next packet, allowing for early aborts of stream transfers.\r
                         *\r
-                        *      The callback routine should be created using the \ref STREAM_CALLBACK() macro. If the token\r
-                        *  NO_STREAM_CALLBACKS is passed via the -D option to the compiler, stream callbacks are disabled\r
-                        *  and this function has the Callback parameter omitted.\r
+                        *      The callback routine should be created according to the information in \ref Group_StreamCallbacks.\r
+                        *  If the token NO_STREAM_CALLBACKS is passed via the -D option to the compiler, stream callbacks are\r
+                        *  disabled and this function has the Callback parameter omitted.\r
                         *\r
                         *  \note This routine should not be used on CONTROL type endpoints.\r
                         *\r
                         *  \ingroup Group_EndpointRW\r
                         *\r
-                        *  \param Buffer    Pointer to the destination data buffer to write to.\r
-                        *  \param Length    Number of bytes to send via the currently selected endpoint.\r
-                        *  \param Callback  Name of a callback routine to call between successive USB packet transfers, NULL if no callback\r
+                        *  \param[out] Buffer    Pointer to the destination data buffer to write to.\r
+                        *  \param[in] Length    Number of bytes to send via the currently selected endpoint.\r
+                        *  \param[in] Callback  Name of a callback routine to call between successive USB packet transfers, NULL if no callback\r
                         *\r
                         *  \return A value from the \ref Endpoint_Stream_RW_ErrorCodes_t enum.\r
                         */\r
                        uint8_t Endpoint_Read_Stream_BE(void* Buffer, uint16_t Length\r
                        #if !defined(NO_STREAM_CALLBACKS) || defined(__DOXYGEN__)\r
-                                                       , uint8_t (* const Callback)(void)\r
+                                                       , StreamCallbackPtr_t Callback\r
                        #endif\r
                                                        ) ATTR_NON_NULL_PTR_ARG(1);\r
 \r
                         *\r
                         *  \ingroup Group_EndpointRW\r
                         *\r
-                        *  \param Buffer  Pointer to the source data buffer to read from.\r
-                        *  \param Length  Number of bytes to read for the currently selected endpoint into the buffer.\r
+                        *  \param[in] Buffer  Pointer to the source data buffer to read from.\r
+                        *  \param[in] Length  Number of bytes to read for the currently selected endpoint into the buffer.\r
                         *\r
                         *  \return A value from the \ref Endpoint_ControlStream_RW_ErrorCodes_t enum.\r
                         */\r
                         *\r
                         *  \ingroup Group_EndpointRW\r
                         *\r
-                        *  \param Buffer  Pointer to the source data buffer to read from.\r
-                        *  \param Length  Number of bytes to read for the currently selected endpoint into the buffer.\r
+                        *  \param[in] Buffer  Pointer to the source data buffer to read from.\r
+                        *  \param[in] Length  Number of bytes to read for the currently selected endpoint into the buffer.\r
                         *\r
                         *  \return A value from the \ref Endpoint_ControlStream_RW_ErrorCodes_t enum.\r
                         */\r
                         *\r
                         *  \ingroup Group_EndpointRW\r
                         *\r
-                        *  \param Buffer  Pointer to the destination data buffer to write to.\r
-                        *  \param Length  Number of bytes to send via the currently selected endpoint.\r
+                        *  \param[out] Buffer  Pointer to the destination data buffer to write to.\r
+                        *  \param[in] Length  Number of bytes to send via the currently selected endpoint.\r
                         *\r
                         *  \return A value from the \ref Endpoint_ControlStream_RW_ErrorCodes_t enum.\r
                         */\r
                         *\r
                         *  \ingroup Group_EndpointRW\r
                         *\r
-                        *  \param Buffer  Pointer to the destination data buffer to write to.\r
-                        *  \param Length  Number of bytes to send via the currently selected endpoint.\r
+                        *  \param[out] Buffer  Pointer to the destination data buffer to write to.\r
+                        *  \param[in] Length  Number of bytes to send via the currently selected endpoint.\r
                         *\r
                         *  \return A value from the \ref Endpoint_ControlStream_RW_ErrorCodes_t enum.\r
                         */\r
                        #define _ENDPOINT_GET_DOUBLEBANK2(details)     _ENDPOINT_GET_DOUBLEBANK3(details)\r
                        #define _ENDPOINT_GET_DOUBLEBANK3(maxsize, db) db\r
                        \r
-                       #if defined(USB_FULL_CONTROLLER) || defined(USB_MODIFIED_FULL_CONTROLLER)\r
+                       #if defined(USB_SERIES_4_AVR) || defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR)\r
                                #define ENDPOINT_DETAILS_EP0               64,  true\r
                                #define ENDPOINT_DETAILS_EP1               256, true\r
                                #define ENDPOINT_DETAILS_EP2               64,  true\r