#define __CONFIGDESCRIPTOR_H__\r
\r
/* Includes: */\r
- #include <avr/io.h>\r
+ #if defined(__AVR32__)\r
+ #include <avr32/io.h>\r
+ #elif defined(__AVR__)\r
+ #include <avr/io.h>\r
+ #endif\r
\r
#include "../../../Common/Common.h"\r
#include "../HighLevel/USBMode.h"\r
#define __USBEVENTS_H__\r
\r
/* Includes: */\r
- #include <avr/io.h>\r
+ #if defined(__AVR32__)\r
+ #include <avr32/io.h>\r
+ #elif defined(__AVR__)\r
+ #include <avr/io.h>\r
+ #endif\r
\r
#include "../../../Common/Common.h"\r
#include "USBMode.h"\r
#define __USBDESCRIPTORS_H__\r
\r
/* Includes: */\r
- #include <avr/pgmspace.h>\r
- #include <stdbool.h>\r
- #include <stddef.h>\r
+ #if defined(__AVR32__)\r
+ #include <avr32/io.h>\r
+ #include <stdint.h>\r
+ #include <stdbool.h>\r
+ #include <stddef.h>\r
+ #elif defined(__AVR__)\r
+ #include <avr/pgmspace.h>\r
+ #include <stdbool.h>\r
+ #include <stddef.h>\r
+ #endif\r
\r
#include "../../../Common/Common.h"\r
#include "USBMode.h"\r
#define __USBINTERRUPT_H__\r
\r
/* Includes: */\r
- #include <avr/io.h>\r
- #include <stdbool.h>\r
+ #if defined(__AVR32__)\r
+ #include <avr32/io.h>\r
+ #include <stdbool.h>\r
+ #include <stdint.h>\r
+ #elif defined(__AVR__)\r
+ #include <avr/io.h>\r
+ #include <stdbool.h>\r
+ #endif\r
\r
#include "../../../Common/Common.h"\r
#include "../LowLevel/LowLevel.h"\r
* (i.e. AT90USBXXX7) when defined.\r
*/\r
#define USB_SERIES_7_AVR\r
+ \r
+ /** Indicates that the target AVR microcontroller belongs to the Series UC3B USB controller\r
+ * (i.e. AT32UC3BXXXX) when defined.\r
+ */\r
+ #define USB_SERIES_UC3B_AVR\r
\r
/** Indicates that the target AVR microcontroller and compilation settings allow for the\r
* target to be configured in USB Device mode when defined.\r
#define USB_SERIES_6_AVR\r
#elif (defined(__AVR_AT90USB647__) || defined(__AVR_AT90USB1287__))\r
#define USB_SERIES_7_AVR\r
+ #elif (defined(__AVR32_UC3B0256__))\r
+ #define USB_SERIES_UC3B_AVR\r
#endif \r
\r
- #if !defined(USB_SERIES_7_AVR) \r
+ #if !defined(USB_SERIES_7_AVR) && !defined(USB_SERIES_UC3B_AVR)\r
#if defined(USB_HOST_ONLY)\r
#error USB_HOST_ONLY is not available for the currently selected USB AVR model.\r
#endif\r
#define __USBTASK_H__\r
\r
/* Includes: */\r
- #include <avr/io.h>\r
- #include <avr/interrupt.h>\r
- #include <stdbool.h>\r
+ #if defined(__AVR32__)\r
+ #include <avr32/io.h>\r
+ #include <stdint.h>\r
+ #include <stdbool.h>\r
+ #elif defined(__AVR__)\r
+ #include <avr/io.h>\r
+ #include <avr/interrupt.h>\r
+ #include <stdbool.h>\r
+ #endif\r
\r
#include "../LowLevel/LowLevel.h"\r
#include "Events.h"\r
if (DeviceAddress)\r
USB_DeviceState = DEVICE_STATE_Addressed;\r
\r
- UDADDR = ((1 << ADDEN) | DeviceAddress);\r
+ USB_Device_SetDeviceAddress(DeviceAddress);\r
\r
return;\r
}\r
#define __DEVCHAPTER9_H__\r
\r
/* Includes: */\r
- #include <avr/io.h>\r
- #include <avr/pgmspace.h>\r
- #include <avr/eeprom.h>\r
- #include <avr/boot.h>\r
+ #if defined(__AVR32__)\r
+ #include <avr32/io.h>\r
+ #include <stdint.h>\r
+ #elif defined(__AVR__)\r
+ #include <avr/io.h>\r
+ #include <avr/pgmspace.h>\r
+ #include <avr/eeprom.h>\r
+ #include <avr/boot.h>\r
+ #endif\r
\r
#include "../HighLevel/StdDescriptors.h"\r
#include "../HighLevel/Events.h"\r
enum USB_DescriptorMemorySpaces_t\r
{\r
MEMSPACE_FLASH = 0, /**< Indicates the requested descriptor is located in FLASH memory */\r
+ \r
+ #if defined(__AVR__) || defined(__DOXYGEN__)\r
MEMSPACE_EEPROM = 1, /**< Indicates the requested descriptor is located in EEPROM memory */\r
+ #endif\r
+ \r
MEMSPACE_RAM = 2, /**< Indicates the requested descriptor is located in RAM memory */\r
};\r
#endif\r
#elif defined(USE_FLASH_DESCRIPTORS) && defined(USE_EEPROM_DESCRIPTORS) && defined(USE_RAM_DESCRIPTORS)\r
#error Only one of the USE_*_DESCRIPTORS modes should be selected.\r
#endif\r
+ \r
+ #if defined(USE_EEPROM_DESCRIPTORS) && defined(USB_SERIES_UC3B_AVR)\r
+ #error USE_EEPROM_DESCRIPTORS is not available on the UC3B series AVRs.\r
+ #endif\r
\r
/* Function Prototypes: */\r
void USB_Device_ProcessControlRequest(void);\r
#define __USBDEVICE_H__\r
\r
/* Includes: */\r
- #include <avr/pgmspace.h>\r
- #include <avr/eeprom.h>\r
-\r
+ #if defined(__AVR__)\r
+ #include <avr/pgmspace.h>\r
+ #include <avr/eeprom.h>\r
+ #endif\r
+ \r
#include "../../../Common/Common.h" \r
#include "../HighLevel/StdDescriptors.h"\r
#include "Endpoint.h"\r
\r
/* Public Interface - May be used in end-application: */\r
/* Macros: */\r
- #if defined(USB_SERIES_4_AVR) || defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR) || defined(__DOXYGEN__)\r
+ #if (defined(USB_SERIES_4_AVR) || defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR) || \\r
+ defined(USB_SERIES_UC3B_AVR) || defined(__DOXYGEN__))\r
/** Mask for the Options parameter of the \ref USB_Init() function. This indicates that the\r
* USB interface should be initialized in low speed (1.5Mb/s) mode.\r
*\r
* \note Restrictions apply on the number, size and type of endpoints which can be used\r
* when running in low speed mode -- refer to the USB 2.0 standard.\r
*/\r
- #define USB_DEVICE_OPT_LOWSPEED (1 << 0)\r
+ #define USB_DEVICE_OPT_LOWSPEED (1 << 0)\r
#endif\r
\r
/** Mask for the Options parameter of the USB_Init() function. This indicates that the\r
* USB interface should be initialized in full speed (12Mb/s) mode.\r
*/\r
- #define USB_DEVICE_OPT_FULLSPEED (0 << 0)\r
+ #define USB_DEVICE_OPT_FULLSPEED (0 << 0)\r
\r
/* Pseudo-Function Macros: */\r
#if defined(__DOXYGEN__)\r
*/\r
static inline bool USB_Device_DisableSOFEvents(void);\r
#else\r
- #if !defined(NO_DEVICE_REMOTE_WAKEUP)\r
- #define USB_Device_SendRemoteWakeup() MACROS{ UDCON |= (1 << RMWKUP); }MACROE\r
+ #if defined(__AVR32__)\r
+ #if !defined(NO_DEVICE_REMOTE_WAKEUP)\r
+ #define USB_Device_SendRemoteWakeup() MACROS{ AVR32_USBB.UDCON.rmwkup = true; }MACROE\r
+\r
+ #define USB_Device_IsRemoteWakeupSent() AVR32_USBB.UDCON.rmwkup\r
+ #endif\r
+ \r
+ #define USB_Device_IsUSBSuspended() AVR32_USBB.UDINT.susp \r
+ #elif defined(__AVR__)\r
+ #if !defined(NO_DEVICE_REMOTE_WAKEUP)\r
+ #define USB_Device_SendRemoteWakeup() MACROS{ UDCON |= (1 << RMWKUP); }MACROE\r
\r
- #define USB_Device_IsRemoteWakeupSent() ((UDCON & (1 << RMWKUP)) ? false : true)\r
+ #define USB_Device_IsRemoteWakeupSent() ((UDCON & (1 << RMWKUP)) ? false : true)\r
+ #endif\r
+ \r
+ #define USB_Device_IsUSBSuspended() ((UDINT & (1 << SUSPI)) ? true : false)\r
#endif\r
- \r
- #define USB_Device_IsUSBSuspended() ((UDINT & (1 << SUSPI)) ? true : false)\r
- \r
- #define USB_Device_EnableSOFEvents() MACROS{ USB_INT_Enable(USB_INT_SOFI); }MACROE\r
\r
+ #define USB_Device_EnableSOFEvents() MACROS{ USB_INT_Enable(USB_INT_SOFI); }MACROE\r
#define USB_Device_DisableSOFEvents() MACROS{ USB_INT_Disable(USB_INT_SOFI); }MACROE\r
#endif\r
\r
/* Private Interface - For use in library only: */\r
#if !defined(__DOXYGEN__)\r
/* Macros: */ \r
- #define USB_Device_SetLowSpeed() MACROS{ UDCON |= (1 << LSM); }MACROE\r
- #define USB_Device_SetFullSpeed() MACROS{ UDCON &= ~(1 << LSM); }MACROE\r
+ #if defined(__AVR32__)\r
+ #define USB_Device_SetLowSpeed() MACROS{ AVR32_USBB.UDCON.ls = true; }MACROE\r
+ #define USB_Device_SetFullSpeed() MACROS{ AVR32_USBB.UDCON.ls = false; }MACROE\r
+ \r
+ #define USB_Device_SetDeviceAddress(addr) MACROS{ AVR32_USBB.UDADDR = (AVR32_USBB_UDCON_ADDEN_MASK | DeviceAddress); }MACROE \r
+ #elif defined(__AVR__)\r
+ #define USB_Device_SetLowSpeed() MACROS{ UDCON |= (1 << LSM); }MACROE\r
+ #define USB_Device_SetFullSpeed() MACROS{ UDCON &= ~(1 << LSM); }MACROE\r
+ \r
+ #define USB_Device_SetDeviceAddress(addr) MACROS{ UDADDR = ((1 << ADDEN) | DeviceAddress); }MACROE\r
+ #endif\r
#endif\r
\r
#endif\r
#define TEMPLATE_TRANSFER_BYTE(BufferPtr) Endpoint_Write_Byte(pgm_read_byte((uint8_t*)BufferPtr++))\r
#include "Template/Template_Endpoint_RW.c"\r
\r
-#define TEMPLATE_FUNC_NAME Endpoint_Write_EStream_LE\r
-#define TEMPLATE_BUFFER_TYPE const void*\r
-#define TEMPLATE_CLEAR_ENDPOINT() Endpoint_ClearIN()\r
-#define TEMPLATE_BUFFER_OFFSET(Length) 0\r
-#define TEMPLATE_TRANSFER_BYTE(BufferPtr) Endpoint_Write_Byte(eeprom_read_byte((uint8_t*)BufferPtr++))\r
-#include "Template/Template_Endpoint_RW.c"\r
+#if defined(__AVR__)\r
+ #define TEMPLATE_FUNC_NAME Endpoint_Write_EStream_LE\r
+ #define TEMPLATE_BUFFER_TYPE const void*\r
+ #define TEMPLATE_CLEAR_ENDPOINT() Endpoint_ClearIN()\r
+ #define TEMPLATE_BUFFER_OFFSET(Length) 0\r
+ #define TEMPLATE_TRANSFER_BYTE(BufferPtr) Endpoint_Write_Byte(eeprom_read_byte((uint8_t*)BufferPtr++))\r
+ #include "Template/Template_Endpoint_RW.c"\r
+#endif\r
\r
#define TEMPLATE_FUNC_NAME Endpoint_Write_Stream_BE\r
#define TEMPLATE_BUFFER_TYPE const void*\r
#define TEMPLATE_TRANSFER_BYTE(BufferPtr) Endpoint_Write_Byte(*((uint8_t*)BufferPtr--))\r
#include "Template/Template_Endpoint_RW.c"\r
\r
-#define TEMPLATE_FUNC_NAME Endpoint_Write_EStream_BE\r
-#define TEMPLATE_BUFFER_TYPE const void*\r
-#define TEMPLATE_CLEAR_ENDPOINT() Endpoint_ClearIN()\r
-#define TEMPLATE_BUFFER_OFFSET(Length) (Length - 1)\r
-#define TEMPLATE_TRANSFER_BYTE(BufferPtr) Endpoint_Write_Byte(eeprom_read_byte((uint8_t*)BufferPtr--))\r
-#include "Template/Template_Endpoint_RW.c"\r
+#if defined(__AVR__)\r
+ #define TEMPLATE_FUNC_NAME Endpoint_Write_EStream_BE\r
+ #define TEMPLATE_BUFFER_TYPE const void*\r
+ #define TEMPLATE_CLEAR_ENDPOINT() Endpoint_ClearIN()\r
+ #define TEMPLATE_BUFFER_OFFSET(Length) (Length - 1)\r
+ #define TEMPLATE_TRANSFER_BYTE(BufferPtr) Endpoint_Write_Byte(eeprom_read_byte((uint8_t*)BufferPtr--))\r
+ #include "Template/Template_Endpoint_RW.c"\r
+#endif\r
\r
#define TEMPLATE_FUNC_NAME Endpoint_Write_PStream_BE\r
#define TEMPLATE_BUFFER_TYPE const void*\r
#define TEMPLATE_TRANSFER_BYTE(BufferPtr) *((uint8_t*)BufferPtr++) = Endpoint_Read_Byte()\r
#include "Template/Template_Endpoint_RW.c"\r
\r
-#define TEMPLATE_FUNC_NAME Endpoint_Read_EStream_LE\r
-#define TEMPLATE_BUFFER_TYPE void*\r
-#define TEMPLATE_CLEAR_ENDPOINT() Endpoint_ClearOUT()\r
-#define TEMPLATE_BUFFER_OFFSET(Length) 0\r
-#define TEMPLATE_TRANSFER_BYTE(BufferPtr) eeprom_write_byte((uint8_t*)BufferPtr++, Endpoint_Read_Byte())\r
-#include "Template/Template_Endpoint_RW.c"\r
+#if defined(__AVR__)\r
+ #define TEMPLATE_FUNC_NAME Endpoint_Read_EStream_LE\r
+ #define TEMPLATE_BUFFER_TYPE void*\r
+ #define TEMPLATE_CLEAR_ENDPOINT() Endpoint_ClearOUT()\r
+ #define TEMPLATE_BUFFER_OFFSET(Length) 0\r
+ #define TEMPLATE_TRANSFER_BYTE(BufferPtr) eeprom_write_byte((uint8_t*)BufferPtr++, Endpoint_Read_Byte())\r
+ #include "Template/Template_Endpoint_RW.c"\r
+#endif\r
\r
#define TEMPLATE_FUNC_NAME Endpoint_Read_Stream_BE\r
#define TEMPLATE_BUFFER_TYPE void*\r
#define TEMPLATE_TRANSFER_BYTE(BufferPtr) *((uint8_t*)BufferPtr--) = Endpoint_Read_Byte()\r
#include "Template/Template_Endpoint_RW.c"\r
\r
-#define TEMPLATE_FUNC_NAME Endpoint_Read_EStream_BE\r
-#define TEMPLATE_BUFFER_TYPE void*\r
-#define TEMPLATE_CLEAR_ENDPOINT() Endpoint_ClearOUT()\r
-#define TEMPLATE_BUFFER_OFFSET(Length) (Length - 1)\r
-#define TEMPLATE_TRANSFER_BYTE(BufferPtr) eeprom_write_byte((uint8_t*)BufferPtr--, Endpoint_Read_Byte())\r
-#include "Template/Template_Endpoint_RW.c"\r
+#if defined(__AVR__)\r
+ #define TEMPLATE_FUNC_NAME Endpoint_Read_EStream_BE\r
+ #define TEMPLATE_BUFFER_TYPE void*\r
+ #define TEMPLATE_CLEAR_ENDPOINT() Endpoint_ClearOUT()\r
+ #define TEMPLATE_BUFFER_OFFSET(Length) (Length - 1)\r
+ #define TEMPLATE_TRANSFER_BYTE(BufferPtr) eeprom_write_byte((uint8_t*)BufferPtr--, Endpoint_Read_Byte())\r
+ #include "Template/Template_Endpoint_RW.c"\r
+#endif\r
\r
#endif\r
\r
#define TEMPLATE_TRANSFER_BYTE(BufferPtr) Endpoint_Write_Byte(pgm_read_byte((uint8_t*)BufferPtr++))\r
#include "Template/Template_Endpoint_Control_W.c"\r
\r
-#define TEMPLATE_FUNC_NAME Endpoint_Write_Control_EStream_LE\r
-#define TEMPLATE_BUFFER_OFFSET(Length) 0\r
-#define TEMPLATE_TRANSFER_BYTE(BufferPtr) Endpoint_Write_Byte(eeprom_read_byte((uint8_t*)BufferPtr++))\r
-#include "Template/Template_Endpoint_Control_W.c"\r
+#if defined(__AVR__)\r
+ #define TEMPLATE_FUNC_NAME Endpoint_Write_Control_EStream_LE\r
+ #define TEMPLATE_BUFFER_OFFSET(Length) 0\r
+ #define TEMPLATE_TRANSFER_BYTE(BufferPtr) Endpoint_Write_Byte(eeprom_read_byte((uint8_t*)BufferPtr++))\r
+ #include "Template/Template_Endpoint_Control_W.c"\r
+#endif\r
\r
#define TEMPLATE_FUNC_NAME Endpoint_Write_Control_Stream_BE\r
#define TEMPLATE_BUFFER_OFFSET(Length) (Length - 1)\r
#define TEMPLATE_TRANSFER_BYTE(BufferPtr) Endpoint_Write_Byte(pgm_read_byte((uint8_t*)BufferPtr--))\r
#include "Template/Template_Endpoint_Control_W.c"\r
\r
-#define TEMPLATE_FUNC_NAME Endpoint_Write_Control_EStream_BE\r
-#define TEMPLATE_BUFFER_OFFSET(Length) (Length - 1)\r
-#define TEMPLATE_TRANSFER_BYTE(BufferPtr) Endpoint_Write_Byte(eeprom_read_byte((uint8_t*)BufferPtr--))\r
-#include "Template/Template_Endpoint_Control_W.c"\r
+#if defined(__AVR__)\r
+ #define TEMPLATE_FUNC_NAME Endpoint_Write_Control_EStream_BE\r
+ #define TEMPLATE_BUFFER_OFFSET(Length) (Length - 1)\r
+ #define TEMPLATE_TRANSFER_BYTE(BufferPtr) Endpoint_Write_Byte(eeprom_read_byte((uint8_t*)BufferPtr--))\r
+ #include "Template/Template_Endpoint_Control_W.c"\r
+#endif\r
\r
#define TEMPLATE_FUNC_NAME Endpoint_Read_Control_Stream_LE\r
#define TEMPLATE_BUFFER_OFFSET(Length) 0\r
#define TEMPLATE_TRANSFER_BYTE(BufferPtr) *((uint8_t*)BufferPtr++) = Endpoint_Read_Byte()\r
#include "Template/Template_Endpoint_Control_R.c"\r
\r
-#define TEMPLATE_FUNC_NAME Endpoint_Read_Control_EStream_LE\r
-#define TEMPLATE_BUFFER_OFFSET(Length) 0\r
-#define TEMPLATE_TRANSFER_BYTE(BufferPtr) eeprom_write_byte((uint8_t*)BufferPtr++, Endpoint_Read_Byte())\r
-#include "Template/Template_Endpoint_Control_R.c"\r
+#if defined(__AVR__)\r
+ #define TEMPLATE_FUNC_NAME Endpoint_Read_Control_EStream_LE\r
+ #define TEMPLATE_BUFFER_OFFSET(Length) 0\r
+ #define TEMPLATE_TRANSFER_BYTE(BufferPtr) eeprom_write_byte((uint8_t*)BufferPtr++, Endpoint_Read_Byte())\r
+ #include "Template/Template_Endpoint_Control_R.c"\r
+#endif\r
\r
#define TEMPLATE_FUNC_NAME Endpoint_Read_Control_Stream_BE\r
#define TEMPLATE_BUFFER_OFFSET(Length) (Length - 1)\r
#define TEMPLATE_TRANSFER_BYTE(BufferPtr) *((uint8_t*)BufferPtr--) = Endpoint_Read_Byte()\r
#include "Template/Template_Endpoint_Control_R.c"\r
\r
-#define TEMPLATE_FUNC_NAME Endpoint_Read_Control_EStream_BE\r
-#define TEMPLATE_BUFFER_OFFSET(Length) (Length - 1)\r
-#define TEMPLATE_TRANSFER_BYTE(BufferPtr) eeprom_write_byte((uint8_t*)BufferPtr--, Endpoint_Read_Byte())\r
-#include "Template/Template_Endpoint_Control_R.c"\r
+#if defined(__AVR__)\r
+ #define TEMPLATE_FUNC_NAME Endpoint_Read_Control_EStream_BE\r
+ #define TEMPLATE_BUFFER_OFFSET(Length) (Length - 1)\r
+ #define TEMPLATE_TRANSFER_BYTE(BufferPtr) eeprom_write_byte((uint8_t*)BufferPtr--, Endpoint_Read_Byte())\r
+ #include "Template/Template_Endpoint_Control_R.c"\r
+#endif\r
\r
#endif\r
#define __ENDPOINT_H__\r
\r
/* Includes: */\r
- #include <avr/io.h>\r
- #include <avr/pgmspace.h>\r
- #include <avr/eeprom.h>\r
- #include <stdbool.h>\r
-\r
+ #if defined(__AVR32__)\r
+ #include <avr32/io.h>\r
+ #include <stdint.h>\r
+ #include <stdbool.h>\r
+ #elif defined(__AVR__)\r
+ #include <avr/io.h>\r
+ #include <avr/pgmspace.h>\r
+ #include <avr/eeprom.h>\r
+ #include <stdbool.h>\r
+ #endif\r
+ \r
#include "../../../Common/Common.h"\r
#include "../HighLevel/USBTask.h"\r
\r
static inline uint8_t Endpoint_Read_Byte(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;\r
static inline uint8_t Endpoint_Read_Byte(void)\r
{\r
+ #if defined(__AVR32__)\r
+ return 0; // TODO\r
+ #elif defined(__AVR__)\r
return UEDATX;\r
+ #endif\r
}\r
\r
/** Writes one byte from the currently selected endpoint's bank, for IN direction endpoints.\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
+ #if defined(__AVR32__)\r
+ // TODO\r
+ #elif defined(__AVR__)\r
UEDATX = Byte;\r
+ #endif\r
}\r
\r
/** Discards one byte from the currently selected endpoint's bank, for OUT direction endpoints.\r
{\r
uint8_t Dummy;\r
\r
+ #if defined(__AVR32__)\r
+ // TODO\r
+ #elif defined(__AVR__)\r
Dummy = UEDATX;\r
+ #endif\r
}\r
\r
/** Reads two bytes from the currently selected endpoint's bank in little endian format, for OUT\r
uint8_t Bytes[2];\r
} Data;\r
\r
+ #if defined(__AVR32__)\r
+ // TODO\r
+ #elif defined(__AVR__)\r
Data.Bytes[0] = UEDATX;\r
Data.Bytes[1] = UEDATX;\r
+ #endif\r
\r
return Data.Word;\r
}\r
uint8_t Bytes[2];\r
} Data;\r
\r
+ #if defined(__AVR32__)\r
+ // TODO\r
+ #elif defined(__AVR__)\r
Data.Bytes[1] = UEDATX;\r
Data.Bytes[0] = UEDATX;\r
+ #endif\r
\r
return Data.Word;\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
+ #if defined(__AVR32__)\r
+ // TODO\r
+ #elif defined(__AVR__)\r
UEDATX = (Word & 0xFF);\r
UEDATX = (Word >> 8);\r
+ #endif\r
}\r
\r
/** Writes two bytes to the currently selected endpoint's bank in big endian format, for IN\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
+ #if defined(__AVR32__)\r
+ // TODO\r
+ #elif defined(__AVR__)\r
UEDATX = (Word >> 8);\r
UEDATX = (Word & 0xFF);\r
+ #endif\r
}\r
\r
/** Discards two bytes from the currently selected endpoint's bank, for OUT direction endpoints.\r
{\r
uint8_t Dummy;\r
\r
+ #if defined(__AVR32__)\r
+ // TODO\r
+ #elif defined(__AVR__)\r
Dummy = UEDATX;\r
Dummy = UEDATX;\r
+ #endif\r
}\r
\r
/** Reads four bytes from the currently selected endpoint's bank in little endian format, for OUT\r
uint8_t Bytes[4];\r
} Data;\r
\r
+ #if defined(__AVR32__)\r
+ // TODO\r
+ #elif defined(__AVR__)\r
Data.Bytes[0] = UEDATX;\r
Data.Bytes[1] = UEDATX;\r
Data.Bytes[2] = UEDATX;\r
Data.Bytes[3] = UEDATX;\r
+ #endif\r
\r
return Data.DWord;\r
}\r
uint8_t Bytes[4];\r
} Data;\r
\r
+ #if defined(__AVR32__)\r
+ // TODO\r
+ #elif defined(__AVR__)\r
Data.Bytes[3] = UEDATX;\r
Data.Bytes[2] = UEDATX;\r
Data.Bytes[1] = UEDATX;\r
Data.Bytes[0] = UEDATX;\r
+ #endif\r
\r
return Data.DWord;\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
+ #if defined(__AVR32__)\r
+ // TODO\r
+ #elif defined(__AVR__)\r
UEDATX = (DWord & 0xFF);\r
UEDATX = (DWord >> 8);\r
UEDATX = (DWord >> 16);\r
UEDATX = (DWord >> 24);\r
+ #endif\r
}\r
\r
/** Writes four bytes to the currently selected endpoint's bank in big endian format, for IN\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
{\r
+ #if defined(__AVR32__)\r
+ // TODO\r
+ #elif defined(__AVR__)\r
UEDATX = (DWord >> 24);\r
UEDATX = (DWord >> 16);\r
UEDATX = (DWord >> 8);\r
UEDATX = (DWord & 0xFF);\r
+ #endif\r
}\r
\r
/** Discards four bytes from the currently selected endpoint's bank, for OUT direction endpoints. \r
{\r
uint8_t Dummy;\r
\r
+ #if defined(__AVR32__)\r
+ // TODO\r
+ #elif defined(__AVR__)\r
Dummy = UEDATX;\r
Dummy = UEDATX;\r
Dummy = UEDATX;\r
Dummy = UEDATX;\r
+ #endif\r
}\r
\r
/* External Variables: */\r
#define __USBHOST_H__\r
\r
/* Includes: */\r
- #include <avr/io.h>\r
- #include <stdbool.h>\r
- #include <util/delay.h>\r
-\r
+ #if defined(__AVR32__)\r
+ #include <avr32/io.h>\r
+ #include <stdint.h>\r
+ #include <stdbool.h>\r
+ #elif defined(__AVR__)\r
+ #include <avr/io.h>\r
+ #include <stdbool.h>\r
+ #include <util/delay.h>\r
+ #endif\r
+ \r
#include "../../../Common/Common.h"\r
#include "../HighLevel/USBInterrupt.h"\r
#include "../HighLevel/StdDescriptors.h"\r
#define __HOSTCHAPTER9_H__\r
\r
/* Includes: */\r
- #include <avr/io.h>\r
- #include <stdbool.h>\r
+ #if defined(__AVR32__)\r
+ #include <avr32/io.h>\r
+ #include <stdint.h>\r
+ #include <stdbool.h>\r
+ #elif defined(__AVR__)\r
+ #include <avr/io.h>\r
+ #include <stdbool.h>\r
+ #endif\r
\r
#include "LowLevel.h"\r
#include "../HighLevel/USBMode.h"\r
#define __USBLOWLEVEL_H__\r
\r
/* Includes: */\r
- #include <avr/io.h>\r
- #include <avr/interrupt.h>\r
- #include <stdbool.h>\r
- \r
+ #if defined(__AVR32__)\r
+ #include <avr32/io.h>\r
+ #include <stdint.h>\r
+ #include <stdbool.h>\r
+ #elif defined(__AVR__)\r
+ #include <avr/io.h>\r
+ #include <avr/interrupt.h>\r
+ #include <stdbool.h>\r
+ #endif\r
+ \r
#include "../HighLevel/USBMode.h"\r
\r
#include "../../../Common/Common.h"\r
#define __USBOTG_H__\r
\r
/* Includes: */\r
- #include <avr/io.h>\r
- #include <stdbool.h>\r
+ #if defined(__AVR32__)\r
+ #include <avr32/io.h>\r
+ #include <stdint.h>\r
+ #include <stdbool.h>\r
+ #elif defined(__AVR__)\r
+ #include <avr/io.h>\r
+ #include <stdbool.h>\r
+ #endif\r
\r
#include "../../../Common/Common.h"\r
\r
#define TEMPLATE_TRANSFER_BYTE(BufferPtr) Pipe_Write_Byte(pgm_read_byte((uint8_t*)BufferPtr++))\r
#include "Template/Template_Pipe_RW.c"\r
\r
-#define TEMPLATE_FUNC_NAME Pipe_Write_EStream_LE\r
-#define TEMPLATE_BUFFER_TYPE const void*\r
-#define TEMPLATE_TOKEN PIPE_TOKEN_OUT\r
-#define TEMPLATE_CLEAR_PIPE() Pipe_ClearOUT()\r
-#define TEMPLATE_BUFFER_OFFSET(Length) 0\r
-#define TEMPLATE_TRANSFER_BYTE(BufferPtr) Pipe_Write_Byte(eeprom_read_byte((uint8_t*)BufferPtr++))\r
-#include "Template/Template_Pipe_RW.c"\r
+#if defined(__AVR__)\r
+ #define TEMPLATE_FUNC_NAME Pipe_Write_EStream_LE\r
+ #define TEMPLATE_BUFFER_TYPE const void*\r
+ #define TEMPLATE_TOKEN PIPE_TOKEN_OUT\r
+ #define TEMPLATE_CLEAR_PIPE() Pipe_ClearOUT()\r
+ #define TEMPLATE_BUFFER_OFFSET(Length) 0\r
+ #define TEMPLATE_TRANSFER_BYTE(BufferPtr) Pipe_Write_Byte(eeprom_read_byte((uint8_t*)BufferPtr++))\r
+ #include "Template/Template_Pipe_RW.c"\r
+#endif\r
\r
#define TEMPLATE_FUNC_NAME Pipe_Write_Stream_BE\r
#define TEMPLATE_BUFFER_TYPE const void*\r
#define TEMPLATE_TRANSFER_BYTE(BufferPtr) Pipe_Write_Byte(pgm_read_byte((uint8_t*)BufferPtr--))\r
#include "Template/Template_Pipe_RW.c"\r
\r
-#define TEMPLATE_FUNC_NAME Pipe_Write_EStream_BE\r
-#define TEMPLATE_BUFFER_TYPE const void*\r
-#define TEMPLATE_TOKEN PIPE_TOKEN_OUT\r
-#define TEMPLATE_CLEAR_PIPE() Pipe_ClearOUT()\r
-#define TEMPLATE_BUFFER_OFFSET(Length) (Length - 1)\r
-#define TEMPLATE_TRANSFER_BYTE(BufferPtr) Pipe_Write_Byte(eeprom_read_byte((uint8_t*)BufferPtr--))\r
-#include "Template/Template_Pipe_RW.c"\r
+#if defined(__AVR__)\r
+ #define TEMPLATE_FUNC_NAME Pipe_Write_EStream_BE\r
+ #define TEMPLATE_BUFFER_TYPE const void*\r
+ #define TEMPLATE_TOKEN PIPE_TOKEN_OUT\r
+ #define TEMPLATE_CLEAR_PIPE() Pipe_ClearOUT()\r
+ #define TEMPLATE_BUFFER_OFFSET(Length) (Length - 1)\r
+ #define TEMPLATE_TRANSFER_BYTE(BufferPtr) Pipe_Write_Byte(eeprom_read_byte((uint8_t*)BufferPtr--))\r
+ #include "Template/Template_Pipe_RW.c"\r
+#endif\r
\r
#define TEMPLATE_FUNC_NAME Pipe_Read_Stream_LE\r
#define TEMPLATE_BUFFER_TYPE void*\r
#define TEMPLATE_TRANSFER_BYTE(BufferPtr) *((uint8_t*)BufferPtr++) = Pipe_Read_Byte()\r
#include "Template/Template_Pipe_RW.c"\r
\r
-#define TEMPLATE_FUNC_NAME Pipe_Read_EStream_LE\r
-#define TEMPLATE_BUFFER_TYPE void*\r
-#define TEMPLATE_TOKEN PIPE_TOKEN_IN\r
-#define TEMPLATE_CLEAR_PIPE() Pipe_ClearIN()\r
-#define TEMPLATE_BUFFER_OFFSET(Length) 0\r
-#define TEMPLATE_TRANSFER_BYTE(BufferPtr) eeprom_write_byte((uint8_t*)BufferPtr++, Pipe_Read_Byte())\r
-#include "Template/Template_Pipe_RW.c"\r
+#if defined(__AVR__)\r
+ #define TEMPLATE_FUNC_NAME Pipe_Read_EStream_LE\r
+ #define TEMPLATE_BUFFER_TYPE void*\r
+ #define TEMPLATE_TOKEN PIPE_TOKEN_IN\r
+ #define TEMPLATE_CLEAR_PIPE() Pipe_ClearIN()\r
+ #define TEMPLATE_BUFFER_OFFSET(Length) 0\r
+ #define TEMPLATE_TRANSFER_BYTE(BufferPtr) eeprom_write_byte((uint8_t*)BufferPtr++, Pipe_Read_Byte())\r
+ #include "Template/Template_Pipe_RW.c"\r
+#endif\r
\r
#define TEMPLATE_FUNC_NAME Pipe_Read_Stream_BE\r
#define TEMPLATE_BUFFER_TYPE void*\r
#define TEMPLATE_TRANSFER_BYTE(BufferPtr) *((uint8_t*)BufferPtr--) = Pipe_Read_Byte()\r
#include "Template/Template_Pipe_RW.c"\r
\r
-#define TEMPLATE_FUNC_NAME Pipe_Read_EStream_BE\r
-#define TEMPLATE_BUFFER_TYPE void*\r
-#define TEMPLATE_TOKEN PIPE_TOKEN_IN\r
-#define TEMPLATE_CLEAR_PIPE() Pipe_ClearIN()\r
-#define TEMPLATE_BUFFER_OFFSET(Length) (Length - 1)\r
-#define TEMPLATE_TRANSFER_BYTE(BufferPtr) eeprom_write_byte((uint8_t*)BufferPtr--, Pipe_Read_Byte())\r
-#include "Template/Template_Pipe_RW.c"\r
+#if defined(__AVR__)\r
+ #define TEMPLATE_FUNC_NAME Pipe_Read_EStream_BE\r
+ #define TEMPLATE_BUFFER_TYPE void*\r
+ #define TEMPLATE_TOKEN PIPE_TOKEN_IN\r
+ #define TEMPLATE_CLEAR_PIPE() Pipe_ClearIN()\r
+ #define TEMPLATE_BUFFER_OFFSET(Length) (Length - 1)\r
+ #define TEMPLATE_TRANSFER_BYTE(BufferPtr) eeprom_write_byte((uint8_t*)BufferPtr--, Pipe_Read_Byte())\r
+ #include "Template/Template_Pipe_RW.c"\r
+#endif\r
\r
#endif\r
#define __PIPE_H__\r
\r
/* Includes: */\r
- #include <avr/io.h>\r
- #include <avr/pgmspace.h>\r
- #include <avr/eeprom.h>\r
- #include <stdbool.h>\r
+ #if defined(__AVR32__)\r
+ #include <avr32/io.h>\r
+ #include <stdint.h>\r
+ #include <stdbool.h>\r
+ #elif defined(__AVR__)\r
+ #include <avr/io.h>\r
+ #include <avr/pgmspace.h>\r
+ #include <avr/eeprom.h>\r
+ #include <stdbool.h>\r
+ #endif\r
\r
#include "../../../Common/Common.h"\r
#include "../HighLevel/USBTask.h"\r
static inline uint8_t Pipe_Read_Byte(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;\r
static inline uint8_t Pipe_Read_Byte(void)\r
{\r
+ #if defined(__AVR32__)\r
+ return 0; // TODO\r
+ #elif defined(__AVR__)\r
return UPDATX;\r
+ #endif\r
}\r
\r
/** Writes one byte from the currently selected pipe's bank, for IN direction pipes.\r
static inline void Pipe_Write_Byte(const uint8_t Byte) ATTR_ALWAYS_INLINE;\r
static inline void Pipe_Write_Byte(const uint8_t Byte)\r
{\r
+ #if defined(__AVR32__)\r
+ // TODO\r
+ #elif defined(__AVR__)\r
UPDATX = Byte;\r
+ #endif\r
}\r
\r
/** Discards one byte from the currently selected pipe's bank, for OUT direction pipes.\r
{\r
uint8_t Dummy;\r
\r
+ #if defined(__AVR32__)\r
+ // TODO\r
+ #elif defined(__AVR__)\r
Dummy = UPDATX;\r
+ #endif\r
}\r
\r
/** Reads two bytes from the currently selected pipe's bank in little endian format, for OUT\r
uint8_t Bytes[2];\r
} Data;\r
\r
+ #if defined(__AVR32__)\r
+ // TODO\r
+ #elif defined(__AVR__)\r
Data.Bytes[0] = UPDATX;\r
Data.Bytes[1] = UPDATX;\r
+ #endif\r
\r
return Data.Word;\r
}\r
uint8_t Bytes[2];\r
} Data;\r
\r
+ #if defined(__AVR32__)\r
+ // TODO\r
+ #elif defined(__AVR__)\r
Data.Bytes[1] = UPDATX;\r
Data.Bytes[0] = UPDATX;\r
+ #endif\r
\r
return Data.Word;\r
}\r
static inline void Pipe_Write_Word_LE(const uint16_t Word) ATTR_ALWAYS_INLINE;\r
static inline void Pipe_Write_Word_LE(const uint16_t Word)\r
{\r
+ #if defined(__AVR32__)\r
+ // TODO\r
+ #elif defined(__AVR__)\r
UPDATX = (Word & 0xFF);\r
UPDATX = (Word >> 8);\r
+ #endif\r
}\r
\r
/** Writes two bytes to the currently selected pipe's bank in big endian format, for IN\r
static inline void Pipe_Write_Word_BE(const uint16_t Word) ATTR_ALWAYS_INLINE;\r
static inline void Pipe_Write_Word_BE(const uint16_t Word)\r
{\r
+ #if defined(__AVR32__)\r
+ // TODO\r
+ #elif defined(__AVR__)\r
UPDATX = (Word >> 8);\r
UPDATX = (Word & 0xFF);\r
+ #endif\r
}\r
\r
/** Discards two bytes from the currently selected pipe's bank, for OUT direction pipes.\r
{\r
uint8_t Dummy;\r
\r
+ #if defined(__AVR32__)\r
+ // TODO\r
+ #elif defined(__AVR__)\r
Dummy = UPDATX;\r
Dummy = UPDATX;\r
+ #endif\r
}\r
\r
/** Reads four bytes from the currently selected pipe's bank in little endian format, for OUT\r
uint8_t Bytes[4];\r
} Data;\r
\r
+ #if defined(__AVR32__)\r
+ // TODO\r
+ #elif defined(__AVR__)\r
Data.Bytes[0] = UPDATX;\r
Data.Bytes[1] = UPDATX;\r
Data.Bytes[2] = UPDATX;\r
Data.Bytes[3] = UPDATX;\r
+ #endif\r
\r
return Data.DWord;\r
}\r
uint8_t Bytes[4];\r
} Data;\r
\r
+ #if defined(__AVR32__)\r
+ // TODO\r
+ #elif defined(__AVR__)\r
Data.Bytes[3] = UPDATX;\r
Data.Bytes[2] = UPDATX;\r
Data.Bytes[1] = UPDATX;\r
static inline void Pipe_Write_DWord_LE(const uint32_t DWord) ATTR_ALWAYS_INLINE;\r
static inline void Pipe_Write_DWord_LE(const uint32_t DWord)\r
{\r
+ #if defined(__AVR32__)\r
+ // TODO\r
+ #elif defined(__AVR__)\r
UPDATX = (DWord & 0xFF);\r
UPDATX = (DWord >> 8);\r
UPDATX = (DWord >> 16);\r
UPDATX = (DWord >> 24);\r
+ #endif\r
}\r
\r
/** Writes four bytes to the currently selected pipe's bank in big endian format, for IN\r
static inline void Pipe_Write_DWord_BE(const uint32_t DWord) ATTR_ALWAYS_INLINE;\r
static inline void Pipe_Write_DWord_BE(const uint32_t DWord)\r
{\r
+ #if defined(__AVR32__)\r
+ // TODO\r
+ #elif defined(__AVR__)\r
UPDATX = (DWord >> 24);\r
UPDATX = (DWord >> 16);\r
UPDATX = (DWord >> 8);\r
UPDATX = (DWord & 0xFF);\r
+ #endif\r
} \r
\r
/** Discards four bytes from the currently selected pipe's bank, for OUT direction pipes. \r
{\r
uint8_t Dummy;\r
\r
+ #if defined(__AVR32__)\r
+ // TODO\r
+ #elif defined(__AVR__)\r
Dummy = UPDATX;\r
Dummy = UPDATX;\r
Dummy = UPDATX;\r
Dummy = UPDATX;\r
+ #endif\r
}\r
\r
/* External Variables: */\r
\r
/* Preprocessor Checks: */ \r
#if (!defined(USB_SERIES_2_AVR) && !defined(USB_SERIES_4_AVR) && \\r
- !defined(USB_SERIES_6_AVR) && !defined(USB_SERIES_7_AVR))\r
+ !defined(USB_SERIES_6_AVR) && !defined(USB_SERIES_7_AVR) && \\r
+ !defined(USB_SERIES_UC3B_AVR))\r
#error The currently selected AVR model is not supported under the USB component of the LUFA library.\r
#endif\r
\r
*\r
* The following drivers have been partially ported:\r
* - SPI Peripheral Driver\r
+ * - USB Driver\r
*\r
* The following drivers have not yet been ported:\r
* - Dataflash Board Driver\r
* - Serial Peripheral Driver\r
* - ADC Peripheral Driver\r
* - TWI Peripheral Driver\r
- * - USB Driver\r
*/\r