Make HID device class driver reselect the correct endpoint after the user callbacks...
[pub/USBasp.git] / LUFA / Drivers / USB / LowLevel / Endpoint.h
index e27ac50..4dfa1ef 100644 (file)
@@ -33,7 +33,7 @@
  *\r
  *  Functions, macros and enums related to endpoint management when in USB Device mode. This\r
  *  module contains the endpoint management macros, as well as endpoint interrupt and data\r
- *  send/recieve functions for various data types.\r
+ *  send/receive functions for various data types.\r
  *\r
  *  @{\r
  */\r
 \r
                                /** Sets the direction of the currently selected endpoint.\r
                                 *\r
-                                *  \param DirectionMask  New endpoint direction, as a ENDPOINT_DIR_* mask.\r
+                                *  \param[in] DirectionMask  New endpoint direction, as a ENDPOINT_DIR_* mask.\r
                                 */\r
                                static inline void Endpoint_SetEndpointDirection(uint8_t DirectionMask);\r
                        #else\r
                        static inline uint16_t Endpoint_Read_Word_LE(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;\r
                        static inline uint16_t Endpoint_Read_Word_LE(void)\r
                        {\r
-                               uint16_t Data;\r
+                               union\r
+                               {\r
+                                       uint16_t Word;\r
+                                       uint8_t  Bytes[2];\r
+                               } Data;\r
                                \r
-                               Data  = UEDATX;\r
-                               Data |= (((uint16_t)UEDATX) << 8);\r
+                               Data.Bytes[0] = UEDATX;\r
+                               Data.Bytes[1] = UEDATX;\r
                        \r
-                               return Data;\r
+                               return Data.Word;\r
                        }\r
 \r
                        /** Reads two bytes from the currently selected endpoint's bank in big endian format, for OUT\r
                        static inline uint16_t Endpoint_Read_Word_BE(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;\r
                        static inline uint16_t Endpoint_Read_Word_BE(void)\r
                        {\r
-                               uint16_t Data;\r
+                               union\r
+                               {\r
+                                       uint16_t Word;\r
+                                       uint8_t  Bytes[2];\r
+                               } Data;\r
                                \r
-                               Data  = (((uint16_t)UEDATX) << 8);\r
-                               Data |= UEDATX;\r
+                               Data.Bytes[1] = UEDATX;\r
+                               Data.Bytes[0] = UEDATX;\r
                        \r
-                               return Data;\r
+                               return Data.Word;\r
                        }\r
 \r
                        /** Writes two bytes to the currently selected endpoint's bank in little endian format, for IN\r
 \r
                /* Function Prototypes: */\r
                        #if !defined(NO_STREAM_CALLBACKS) || defined(__DOXYGEN__)\r
-                               #define _CALLBACK_PARAM     , StreamCallbackPtr_t Callback\r
+                               #define __CALLBACK_PARAM     , StreamCallbackPtr_t Callback\r
                        #else\r
-                               #define _CALLBACK_PARAM                 \r
+                               #define __CALLBACK_PARAM                        \r
                        #endif\r
                \r
                        /** Configures the specified endpoint number with the given endpoint type, direction, bank size\r
                         *\r
                         *  \return A value from the \ref Endpoint_Stream_RW_ErrorCodes_t enum.\r
                         */\r
-                       uint8_t Endpoint_Discard_Stream(uint16_t Length _CALLBACK_PARAM);\r
+                       uint8_t Endpoint_Discard_Stream(uint16_t Length __CALLBACK_PARAM);\r
 \r
                        /** Writes the given number of bytes to the endpoint from the given buffer in little endian,\r
                         *  sending full packets to the host as needed. The last packet filled is not automatically sent;\r
                         *\r
                         *  \return A value from the \ref Endpoint_Stream_RW_ErrorCodes_t enum.\r
                         */\r
-                       uint8_t Endpoint_Write_Stream_LE(void* Buffer, uint16_t Length _CALLBACK_PARAM) ATTR_NON_NULL_PTR_ARG(1);\r
+                       uint8_t Endpoint_Write_Stream_LE(const void* Buffer, uint16_t Length __CALLBACK_PARAM) ATTR_NON_NULL_PTR_ARG(1);\r
 \r
-                       /** EEPROM buffer source version of \ref Endpoint_Write_Stream_LE.\r
+                       /** EEPROM buffer source version of \ref Endpoint_Write_Stream_LE().\r
                         *\r
                         *  \ingroup Group_EndpointStreamRW\r
                         *\r
                         *\r
                         *  \return A value from the \ref Endpoint_Stream_RW_ErrorCodes_t enum.\r
                         */\r
-                       uint8_t Endpoint_Write_EStream_LE(void* Buffer, uint16_t Length _CALLBACK_PARAM) ATTR_NON_NULL_PTR_ARG(1);\r
+                       uint8_t Endpoint_Write_EStream_LE(const void* Buffer, uint16_t Length __CALLBACK_PARAM) ATTR_NON_NULL_PTR_ARG(1);\r
 \r
-                       /** FLASH buffer source version of \ref Endpoint_Write_Stream_LE.\r
+                       /** FLASH buffer source version of \ref Endpoint_Write_Stream_LE().\r
                         *\r
                         *  \note The FLASH data must be located in the first 64KB of FLASH for this function to work correctly.\r
                         *\r
                         *\r
                         *  \return A value from the \ref Endpoint_Stream_RW_ErrorCodes_t enum.\r
                         */\r
-                       uint8_t Endpoint_Write_PStream_LE(void* Buffer, uint16_t Length _CALLBACK_PARAM) ATTR_NON_NULL_PTR_ARG(1);\r
+                       uint8_t Endpoint_Write_PStream_LE(const void* Buffer, uint16_t Length __CALLBACK_PARAM) ATTR_NON_NULL_PTR_ARG(1);\r
 \r
                        /** Writes the given number of bytes to the endpoint from the given buffer in big endian,\r
                         *  sending full packets to the host as needed. The last packet filled is not automatically sent;\r
                         *\r
                         *  \return A value from the \ref Endpoint_Stream_RW_ErrorCodes_t enum.\r
                         */\r
-                       uint8_t Endpoint_Write_Stream_BE(void* Buffer, uint16_t Length _CALLBACK_PARAM) ATTR_NON_NULL_PTR_ARG(1);\r
+                       uint8_t Endpoint_Write_Stream_BE(const void* Buffer, uint16_t Length __CALLBACK_PARAM) ATTR_NON_NULL_PTR_ARG(1);\r
 \r
-                       /** EEPROM buffer source version of \ref Endpoint_Write_Stream_BE.\r
+                       /** EEPROM buffer source version of \ref Endpoint_Write_Stream_BE().\r
                         *\r
                         *  \ingroup Group_EndpointStreamRW\r
                         *\r
                         *\r
                         *  \return A value from the \ref Endpoint_Stream_RW_ErrorCodes_t enum.\r
                         */\r
-                       uint8_t Endpoint_Write_EStream_BE(void* Buffer, uint16_t Length _CALLBACK_PARAM) ATTR_NON_NULL_PTR_ARG(1);\r
+                       uint8_t Endpoint_Write_EStream_BE(const void* Buffer, uint16_t Length __CALLBACK_PARAM) ATTR_NON_NULL_PTR_ARG(1);\r
 \r
-                       /** FLASH buffer source version of \ref Endpoint_Write_Stream_BE.\r
+                       /** FLASH buffer source version of \ref Endpoint_Write_Stream_BE().\r
                         *\r
                         *  \note The FLASH data must be located in the first 64KB of FLASH for this function to work correctly.\r
                         *\r
                         *\r
                         *  \return A value from the \ref Endpoint_Stream_RW_ErrorCodes_t enum.\r
                         */\r
-                       uint8_t Endpoint_Write_PStream_BE(void* Buffer, uint16_t Length _CALLBACK_PARAM) ATTR_NON_NULL_PTR_ARG(1);\r
+                       uint8_t Endpoint_Write_PStream_BE(const void* Buffer, uint16_t Length __CALLBACK_PARAM) ATTR_NON_NULL_PTR_ARG(1);\r
 \r
                        /** Reads the given number of bytes from the endpoint from the given buffer in little endian,\r
                         *  discarding fully read packets from the host as needed. The last packet is not automatically\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 _CALLBACK_PARAM) ATTR_NON_NULL_PTR_ARG(1);\r
+                       uint8_t Endpoint_Read_Stream_LE(void* Buffer, uint16_t Length __CALLBACK_PARAM) ATTR_NON_NULL_PTR_ARG(1);\r
 \r
-                       /** EEPROM buffer source version of \ref Endpoint_Read_Stream_LE.\r
+                       /** EEPROM buffer source version of \ref Endpoint_Read_Stream_LE().\r
                         *\r
                         *  \ingroup Group_EndpointStreamRW\r
                         *\r
                         *\r
                         *  \return A value from the \ref Endpoint_Stream_RW_ErrorCodes_t enum.\r
                         */\r
-                       uint8_t Endpoint_Read_EStream_LE(void* Buffer, uint16_t Length _CALLBACK_PARAM) ATTR_NON_NULL_PTR_ARG(1);\r
+                       uint8_t Endpoint_Read_EStream_LE(void* Buffer, uint16_t Length __CALLBACK_PARAM) ATTR_NON_NULL_PTR_ARG(1);\r
                        \r
                        /** Reads the given number of bytes from the endpoint from the given buffer in big endian,\r
                         *  discarding fully read packets from the host as needed. The last packet is not automatically\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 _CALLBACK_PARAM) ATTR_NON_NULL_PTR_ARG(1);\r
+                       uint8_t Endpoint_Read_Stream_BE(void* Buffer, uint16_t Length __CALLBACK_PARAM) ATTR_NON_NULL_PTR_ARG(1);\r
 \r
-                       /** EEPROM buffer source version of \ref Endpoint_Read_Stream_BE.\r
+                       /** EEPROM buffer source version of \ref Endpoint_Read_Stream_BE().\r
                         *\r
                         *  \ingroup Group_EndpointStreamRW\r
                         *\r
                         *\r
                         *  \return A value from the \ref Endpoint_Stream_RW_ErrorCodes_t enum.\r
                         */\r
-                       uint8_t Endpoint_Read_EStream_BE(void* Buffer, uint16_t Length _CALLBACK_PARAM) ATTR_NON_NULL_PTR_ARG(1);\r
+                       uint8_t Endpoint_Read_EStream_BE(void* Buffer, uint16_t Length __CALLBACK_PARAM) ATTR_NON_NULL_PTR_ARG(1);\r
 \r
                        /** Writes the given number of bytes to the CONTROL type endpoint from the given buffer in little endian,\r
                         *  sending full packets to the host as needed. The host OUT acknowledgement is not automatically cleared\r
                         *\r
                         *  \return A value from the \ref Endpoint_ControlStream_RW_ErrorCodes_t enum.\r
                         */\r
-                       uint8_t Endpoint_Write_Control_Stream_LE(void* Buffer, uint16_t Length) ATTR_NON_NULL_PTR_ARG(1);\r
+                       uint8_t Endpoint_Write_Control_Stream_LE(const void* Buffer, uint16_t Length) ATTR_NON_NULL_PTR_ARG(1);\r
 \r
                        /** EEPROM buffer source version of Endpoint_Write_Control_Stream_LE.\r
                         *\r
                         *\r
                         *  \return A value from the \ref Endpoint_ControlStream_RW_ErrorCodes_t enum.\r
                         */\r
-                       uint8_t Endpoint_Write_Control_EStream_LE(void* Buffer, uint16_t Length) ATTR_NON_NULL_PTR_ARG(1);\r
+                       uint8_t Endpoint_Write_Control_EStream_LE(const void* Buffer, uint16_t Length) ATTR_NON_NULL_PTR_ARG(1);\r
 \r
-                       /** FLASH buffer source version of \ref Endpoint_Write_Control_Stream_LE.\r
+                       /** FLASH buffer source version of \ref Endpoint_Write_Control_Stream_LE().\r
                         *\r
                         *  \note This function automatically clears the control transfer's status stage. Do not manually attempt\r
                         *        to clear the status stage when using this routine in a control transaction.\r
                         *\r
                         *  \return A value from the \ref Endpoint_ControlStream_RW_ErrorCodes_t enum.\r
                         */\r
-                       uint8_t Endpoint_Write_Control_PStream_LE(void* Buffer, uint16_t Length) ATTR_NON_NULL_PTR_ARG(1);\r
+                       uint8_t Endpoint_Write_Control_PStream_LE(const void* Buffer, uint16_t Length) ATTR_NON_NULL_PTR_ARG(1);\r
 \r
                        /** Writes the given number of bytes to the CONTROL type endpoint from the given buffer in big endian,\r
                         *  sending full packets to the host as needed. The host OUT acknowledgement is not automatically cleared\r
                         *\r
                         *  \return A value from the \ref Endpoint_ControlStream_RW_ErrorCodes_t enum.\r
                         */\r
-                       uint8_t Endpoint_Write_Control_Stream_BE(void* Buffer, uint16_t Length) ATTR_NON_NULL_PTR_ARG(1);\r
+                       uint8_t Endpoint_Write_Control_Stream_BE(const void* Buffer, uint16_t Length) ATTR_NON_NULL_PTR_ARG(1);\r
 \r
-                       /** EEPROM buffer source version of \ref Endpoint_Write_Control_Stream_BE.\r
+                       /** EEPROM buffer source version of \ref Endpoint_Write_Control_Stream_BE().\r
                         *\r
                         *  \note This function automatically clears the control transfer's status stage. Do not manually attempt\r
                         *        to clear the status stage when using this routine in a control transaction.\r
                         *\r
                         *  \return A value from the \ref Endpoint_ControlStream_RW_ErrorCodes_t enum.\r
                         */\r
-                       uint8_t Endpoint_Write_Control_EStream_BE(void* Buffer, uint16_t Length) ATTR_NON_NULL_PTR_ARG(1);\r
+                       uint8_t Endpoint_Write_Control_EStream_BE(const void* Buffer, uint16_t Length) ATTR_NON_NULL_PTR_ARG(1);\r
 \r
-                       /** FLASH buffer source version of \ref Endpoint_Write_Control_Stream_BE.\r
+                       /** FLASH buffer source version of \ref Endpoint_Write_Control_Stream_BE().\r
                         *\r
                         *  \note This function automatically clears the control transfer's status stage. Do not manually attempt\r
                         *        to clear the status stage when using this routine in a control transaction.\r
                         *\r
                         *  \return A value from the \ref Endpoint_ControlStream_RW_ErrorCodes_t enum.\r
                         */\r
-                       uint8_t Endpoint_Write_Control_PStream_BE(void* Buffer, uint16_t Length) ATTR_NON_NULL_PTR_ARG(1);\r
+                       uint8_t Endpoint_Write_Control_PStream_BE(const void* Buffer, uint16_t Length) ATTR_NON_NULL_PTR_ARG(1);\r
 \r
                        /** Reads the given number of bytes from the CONTROL endpoint from the given buffer in little endian,\r
                         *  discarding fully read packets from the host as needed. The device IN acknowledgement is not\r
                         */\r
                        uint8_t Endpoint_Read_Control_Stream_LE(void* Buffer, uint16_t Length) ATTR_NON_NULL_PTR_ARG(1);\r
 \r
-                       /** EEPROM buffer source version of \ref Endpoint_Read_Control_Stream_LE.\r
+                       /** EEPROM buffer source version of \ref Endpoint_Read_Control_Stream_LE().\r
                         *\r
                         *  \note This function automatically clears the control transfer's status stage. Do not manually attempt\r
                         *        to clear the status stage when using this routine in a control transaction.\r
                         */\r
                        uint8_t Endpoint_Read_Control_Stream_BE(void* Buffer, uint16_t Length) ATTR_NON_NULL_PTR_ARG(1);                \r
                        \r
-                       /** EEPROM buffer source version of \ref Endpoint_Read_Control_Stream_BE.\r
+                       /** EEPROM buffer source version of \ref Endpoint_Read_Control_Stream_BE().\r
                         *\r
                         *  \note This function automatically clears the control transfer's status stage. Do not manually attempt\r
                         *        to clear the status stage when using this routine in a control transaction.\r