*\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
* \return The currently selected endpoint's direction, as a ENDPOINT_DIR_* mask.\r
*/\r
static inline uint8_t Endpoint_GetEndpointDirection(void);\r
+\r
+ /** Sets the direction of the currently selected endpoint.\r
+ *\r
+ * \param DirectionMask New endpoint direction, as a ENDPOINT_DIR_* mask.\r
+ */\r
+ static inline void Endpoint_SetEndpointDirection(uint8_t DirectionMask);\r
#else\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
#define Endpoint_ResetDataToggle() MACROS{ UECONX |= (1 << RSTDT); }MACROE\r
\r
#define Endpoint_GetEndpointDirection() (UECFG0X & ENDPOINT_DIR_IN)\r
+ \r
+ #define Endpoint_SetEndpointDirection(dir) MACROS{ UECFG0X = ((UECFG0X & ~ENDPOINT_DIR_IN) | dir); }MACROE\r
#endif\r
\r
/* Enums: */\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
uint8_t Endpoint_Write_Stream_LE(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
uint8_t Endpoint_Write_EStream_LE(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
uint8_t Endpoint_Write_Stream_BE(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
uint8_t Endpoint_Write_EStream_BE(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
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
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
uint8_t Endpoint_Write_Control_EStream_LE(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
uint8_t Endpoint_Write_Control_Stream_BE(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
uint8_t Endpoint_Write_Control_EStream_BE(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
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