From 6f01b6afd5a4fbd0a618f790e0afaa5eb2531e12 Mon Sep 17 00:00:00 2001 From: Dean Camera Date: Sat, 26 Feb 2011 15:54:11 +0000 Subject: [PATCH] More UC3B architecture port updates. --- LUFA/Drivers/Board/EVK1101/LEDs.h | 4 +- LUFA/Drivers/USB/Core/AVR8/Device_AVR8.c | 2 +- LUFA/Drivers/USB/Core/UC3B/Device_UC3B.c | 4 +- LUFA/Drivers/USB/Core/UC3B/Device_UC3B.h | 6 +- LUFA/Drivers/USB/Core/UC3B/Endpoint_UC3B.c | 42 +----- .../USB/Core/UC3B/USBController_UC3B.c | 36 +---- .../USB/Core/UC3B/USBController_UC3B.h | 126 ++---------------- .../Drivers/USB/Core/UC3B/USBInterrupt_UC3B.c | 24 ---- LUFA/ManPages/CompileTimeTokens.txt | 67 +++++----- LUFA/ManPages/LUFAPoweredProjects.txt | 1 + 10 files changed, 58 insertions(+), 254 deletions(-) diff --git a/LUFA/Drivers/Board/EVK1101/LEDs.h b/LUFA/Drivers/Board/EVK1101/LEDs.h index 4dae3fb9ab..6ed80be18a 100644 --- a/LUFA/Drivers/Board/EVK1101/LEDs.h +++ b/LUFA/Drivers/Board/EVK1101/LEDs.h @@ -120,8 +120,8 @@ AVR32_GPIO.port[LEDS_PORT].ovrc = ActiveMask; } - static inline uintN_t LEDs_GetLEDs(void) ATTR_WARN_UNUSED_RESULT; - static inline uintN_t LEDs_GetLEDs(void) + static inline uint32_t LEDs_GetLEDs(void) ATTR_WARN_UNUSED_RESULT; + static inline uint32_t LEDs_GetLEDs(void) { return (AVR32_GPIO.port[LEDS_PORT].ovr & LEDS_ALL_LEDS); } diff --git a/LUFA/Drivers/USB/Core/AVR8/Device_AVR8.c b/LUFA/Drivers/USB/Core/AVR8/Device_AVR8.c index 2473327b34..4bf3393080 100644 --- a/LUFA/Drivers/USB/Core/AVR8/Device_AVR8.c +++ b/LUFA/Drivers/USB/Core/AVR8/Device_AVR8.c @@ -46,7 +46,7 @@ void USB_Device_SendRemoteWakeup(void) USB_CLK_Unfreeze(); UDCON |= (1 << RMWKUP); - while (!(UDCON & (1 << RMWKUP))); + while (UDCON & (1 << RMWKUP)); } #endif diff --git a/LUFA/Drivers/USB/Core/UC3B/Device_UC3B.c b/LUFA/Drivers/USB/Core/UC3B/Device_UC3B.c index fc6abc891e..8ea9bd7aa5 100644 --- a/LUFA/Drivers/USB/Core/UC3B/Device_UC3B.c +++ b/LUFA/Drivers/USB/Core/UC3B/Device_UC3B.c @@ -45,8 +45,8 @@ void USB_Device_SendRemoteWakeup(void) USB_CLK_Unfreeze(); - AVR32_USBB.UDCON |= (1 << RMWKUP); - while (!(AVR32_USBB.UDCON & (1 << RMWKUP))); + AVR32_USBB.UDCON.rmwakeup = true; + while (AVR32_USBB.UDCON.rmwakeup); } #endif diff --git a/LUFA/Drivers/USB/Core/UC3B/Device_UC3B.h b/LUFA/Drivers/USB/Core/UC3B/Device_UC3B.h index d68b6e893d..7d48027221 100644 --- a/LUFA/Drivers/USB/Core/UC3B/Device_UC3B.h +++ b/LUFA/Drivers/USB/Core/UC3B/Device_UC3B.h @@ -59,10 +59,6 @@ #error Do not include this file directly. Include LUFA/Drivers/USB/USB.h instead. #endif - #if (defined(USE_RAM_DESCRIPTORS) && defined(USE_EEPROM_DESCRIPTORS)) - #error USE_RAM_DESCRIPTORS and USE_EEPROM_DESCRIPTORS are mutually exclusive. - #endif - /* Public Interface - May be used in end-application: */ /* Macros: */ /** \name USB Device Mode Option Masks */ @@ -209,7 +205,7 @@ static inline void USB_Device_SetDeviceAddress(const uint8_t Address) ATTR_ALWAYS_INLINE; static inline void USB_Device_SetDeviceAddress(const uint8_t Address) { - AVR32_USBB.UDCON = (AVR32_USBB_UDCON & ~AVR32_USBB_UDADDR) | Address; + AVR32_USBB.udcon = (AVR32_USBB.udcon & ~AVR32_USBB_UADD_MASK) | Address; AVR32_USBB.UDCON.adden = true; } diff --git a/LUFA/Drivers/USB/Core/UC3B/Endpoint_UC3B.c b/LUFA/Drivers/USB/Core/UC3B/Endpoint_UC3B.c index a212543e0b..05a81f273d 100644 --- a/LUFA/Drivers/USB/Core/UC3B/Endpoint_UC3B.c +++ b/LUFA/Drivers/USB/Core/UC3B/Endpoint_UC3B.c @@ -41,10 +41,10 @@ uint8_t USB_ControlEndpointSize = ENDPOINT_CONTROLEP_DEFAULT_SIZE; uint8_t USB_SelectedEndpoint = ENDPOINT_CONTROLEP; + bool Endpoint_ConfigureEndpoint_Prv(const uint8_t Number, const uint32_t UECFGXData) { -#if defined(CONTROL_ONLY_DEVICE) || defined(ORDERED_EP_CONFIG) Endpoint_SelectEndpoint(Number); Endpoint_EnableEndpoint(); @@ -52,42 +52,6 @@ bool Endpoint_ConfigureEndpoint_Prv(const uint8_t Number, *((uint32_t*)AVR32_USBB_UECFG0)[USB_SelectedEndpoint] = UECFGXData; return Endpoint_IsConfigured(); -#else - for (uint8_t EPNum = Number; EPNum < ENDPOINT_TOTAL_ENDPOINTS; EPNum++) - { - uint32_t UECFGXTemp; - uint32_t UEIENXTemp; - - Endpoint_SelectEndpoint(EPNum); - - if (EPNum == Number) - { - UECFGXTemp = UECFGXData; - UEIENXTemp = 0; - } - else - { - UECFGXTemp = *((uint32_t*)AVR32_USBB_UECFG0)[EPNum]; - UEIENXTemp = *((uint32_t*)AVR32_USBB_UEINT0)[EPNum]; - } - - if (!(UECFGXTemp & AVR32_USBB_ALLOC)) - continue; - - Endpoint_DisableEndpoint(); - *((uint32_t*)AVR32_USBB_UECFG0)[USB_SelectedEndpoint] &= ~AVR32_USBB_ALLOC; - - Endpoint_EnableEndpoint(); - *((uint32_t*)AVR32_USBB_UECFG0)[EPNum] = UECFGXTemp; - *((uint32_t*)AVR32_USBB_UEINT0)[EPNum] = UEINTXTemp; - - if (!(Endpoint_IsConfigured())) - return false; - } - - Endpoint_SelectEndpoint(Number); - return true; -#endif } void Endpoint_ClearEndpoints(void) @@ -97,9 +61,7 @@ void Endpoint_ClearEndpoints(void) for (uint8_t EPNum = 0; EPNum < ENDPOINT_TOTAL_ENDPOINTS; EPNum++) { Endpoint_SelectEndpoint(EPNum); - UEIENX = 0; - UEINTX = 0; - UECFG1X = 0; + *((uint32_t*)AVR32_USBB_UECFG0)[USB_SelectedEndpoint] = 0; Endpoint_DisableEndpoint(); } } diff --git a/LUFA/Drivers/USB/Core/UC3B/USBController_UC3B.c b/LUFA/Drivers/USB/Core/UC3B/USBController_UC3B.c index 1a80c5b058..8e18add475 100644 --- a/LUFA/Drivers/USB/Core/UC3B/USBController_UC3B.c +++ b/LUFA/Drivers/USB/Core/UC3B/USBController_UC3B.c @@ -60,15 +60,10 @@ void USB_Init( USB_Options = Options; #endif - if (!(USB_Options & USB_OPT_REG_DISABLED)) - USB_REG_On(); - else - USB_REG_Off(); - #if defined(USB_CAN_BE_BOTH) if (Mode == USB_MODE_UID) { - UHWCON |= (1 << UIDE); + AVR32_USBB.USBCON.uide = true; USB_INT_Enable(USB_INT_IDTI); USB_CurrentMode = USB_GetUSBModeFromUID(); } @@ -91,14 +86,7 @@ void USB_Disable(void) USB_Detach(); USB_Controller_Disable(); - if (!(USB_Options & USB_OPT_MANUAL_PLL)) - USB_PLL_Off(); - - USB_REG_Off(); - - #if defined(USB_SERIES_4_AVR) || defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR) USB_OTGPAD_Off(); - #endif #if defined(USB_CAN_BE_BOTH) USB_CurrentMode = USB_MODE_None; @@ -118,20 +106,10 @@ void USB_ResetInterface(void) USB_Controller_Reset(); - if (!(USB_Options & USB_OPT_MANUAL_PLL)) - { - #if defined(USB_SERIES_4_AVR) - PLLFRQ = ((1 << PLLUSB) | (1 << PDIV3) | (1 << PDIV1)); - #endif - - USB_PLL_On(); - while (!(USB_PLL_IsReady())); - } - #if defined(USB_CAN_BE_BOTH) if (UIDModeSelectEnabled) { - UHWCON |= (1 << UIDE); + AVR32_USBB.USBCON.uide = true; USB_INT_Enable(USB_INT_IDTI); } #endif @@ -141,25 +119,19 @@ void USB_ResetInterface(void) if (USB_CurrentMode == USB_MODE_Device) { #if defined(USB_CAN_BE_DEVICE) - #if (defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR)) - UHWCON |= (1 << UIMOD); - #endif - + AVR32_USBB.USBCON.uimod = true; USB_Init_Device(); #endif } else if (USB_CurrentMode == USB_MODE_Host) { #if defined(USB_CAN_BE_HOST) - UHWCON &= ~(1 << UIMOD); - + AVR32_USBB.USBCON.uimod = false; USB_Init_Host(); #endif } - #if (defined(USB_SERIES_4_AVR) || defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR)) USB_OTGPAD_On(); - #endif } #if defined(USB_CAN_BE_DEVICE) diff --git a/LUFA/Drivers/USB/Core/UC3B/USBController_UC3B.h b/LUFA/Drivers/USB/Core/UC3B/USBController_UC3B.h index 4c903621a6..f528c6b1cf 100644 --- a/LUFA/Drivers/USB/Core/UC3B/USBController_UC3B.h +++ b/LUFA/Drivers/USB/Core/UC3B/USBController_UC3B.h @@ -80,71 +80,8 @@ #error Do not include this file directly. Include LUFA/Drivers/USB/USB.h instead. #endif - #if !defined(F_CLOCK) - #error F_CLOCK is not defined. You must define F_CLOCK to the frequency of the unprescaled USB controller clock in your project makefile. - #endif - - #if (F_CLOCK == 8000000) - #if (defined(__AVR_AT90USB82__) || defined(__AVR_AT90USB162__) || \ - defined(__AVR_ATmega8U2__) || defined(__AVR_ATmega16U2__) || \ - defined(__AVR_ATmega32U2__)) - #define USB_PLL_PSC 0 - #elif (defined(__AVR_ATmega16U4__) || defined(__AVR_ATmega32U4__)) - #define USB_PLL_PSC 0 - #elif (defined(__AVR_AT90USB646__) || defined(__AVR_AT90USB1286__) || defined(__AVR_ATmega32U6__)) - #define USB_PLL_PSC ((1 << PLLP1) | (1 << PLLP0)) - #elif (defined(__AVR_AT90USB647__) || defined(__AVR_AT90USB1287__)) - #define USB_PLL_PSC ((1 << PLLP1) | (1 << PLLP0)) - #endif - #elif (F_CLOCK == 16000000) - #if (defined(__AVR_AT90USB82__) || defined(__AVR_AT90USB162__) || \ - defined(__AVR_ATmega8U2__) || defined(__AVR_ATmega16U2__) || \ - defined(__AVR_ATmega32U2__)) - #define USB_PLL_PSC (1 << PLLP0) - #elif (defined(__AVR_ATmega16U4__) || defined(__AVR_ATmega32U4__)) - #define USB_PLL_PSC (1 << PINDIV) - #elif (defined(__AVR_AT90USB646__) || defined(__AVR_AT90USB647__) || defined(__AVR_ATmega32U6__)) - #define USB_PLL_PSC ((1 << PLLP2) | (1 << PLLP1)) - #elif (defined(__AVR_AT90USB1286__) || defined(__AVR_AT90USB1287__)) - #define USB_PLL_PSC ((1 << PLLP2) | (1 << PLLP0)) - #endif - #endif - - #if !defined(USB_PLL_PSC) - #error No PLL prescale value available for chosen F_CLOCK value and AVR model. - #endif - /* Public Interface - May be used in end-application: */ /* Macros: */ - /** \name USB Controller Option Masks */ - //@{ - /** Regulator disable option mask for \ref USB_Init(). This indicates that the internal 3.3V USB data pad - * regulator should be enabled to regulate the data pin voltages to within the USB standard. - * - * \note See USB AVR data sheet for more information on the internal pad regulator. - */ - #define USB_OPT_REG_DISABLED (1 << 1) - - /** Regulator enable option mask for \ref USB_Init(). This indicates that the internal 3.3V USB data pad - * regulator should be disabled and the AVR's VCC level used for the data pads. - * - * \note See USB AVR data sheet for more information on the internal pad regulator. - */ - #define USB_OPT_REG_ENABLED (0 << 1) - - /** Manual PLL control option mask for \ref USB_Init(). This indicates to the library that the user application - * will take full responsibility for controlling the AVR's PLL (used to generate the high frequency clock - * that the USB controller requires) and ensuring that it is locked at the correct frequency for USB operations. - */ - #define USB_OPT_MANUAL_PLL (1 << 2) - - /** Automatic PLL control option mask for \ref USB_Init(). This indicates to the library that the library should - * take full responsibility for controlling the AVR's PLL (used to generate the high frequency clock - * that the USB controller requires) and ensuring that it is locked at the correct frequency for USB operations. - */ - #define USB_OPT_AUTO_PLL (0 << 2) - //@} - /** \name Endpoint/Pipe Type Masks */ //@{ /** Mask for a CONTROL type endpoint or pipe. @@ -191,7 +128,7 @@ static inline void USB_Detach(void) ATTR_ALWAYS_INLINE; static inline void USB_Detach(void) { - UDCON |= (1 << DETACH); + AVR32_USBB.UDCON.detach = true; } /** Attaches the device to the USB bus. This announces the device's presence to any attached @@ -205,7 +142,7 @@ static inline void USB_Attach(void) ATTR_ALWAYS_INLINE; static inline void USB_Attach(void) { - UDCON &= ~(1 << DETACH); + AVR32_USBB.UDCON.detach = false; } /* Function Prototypes: */ @@ -341,97 +278,56 @@ #endif /* Inline Functions: */ - static inline void USB_PLL_On(void) ATTR_ALWAYS_INLINE; - static inline void USB_PLL_On(void) - { - PLLCSR = USB_PLL_PSC; - PLLCSR |= (1 << PLLE); - } - - static inline void USB_PLL_Off(void) ATTR_ALWAYS_INLINE; - static inline void USB_PLL_Off(void) - { - PLLCSR = 0; - } - - static inline bool USB_PLL_IsReady(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; - static inline bool USB_PLL_IsReady(void) - { - return ((PLLCSR & (1 << PLOCK)) ? true : false); - } - - static inline void USB_REG_On(void) ATTR_ALWAYS_INLINE; - static inline void USB_REG_On(void) - { - #if defined(USB_SERIES_4_AVR) || defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR) - UHWCON |= (1 << UVREGE); - #else - REGCR &= ~(1 << REGDIS); - #endif - } - - static inline void USB_REG_Off(void) ATTR_ALWAYS_INLINE; - static inline void USB_REG_Off(void) - { - #if defined(USB_SERIES_4_AVR) || defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR) - UHWCON &= ~(1 << UVREGE); - #else - REGCR |= (1 << REGDIS); - #endif - } - #if defined(USB_SERIES_4_AVR) || defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR) static inline void USB_OTGPAD_On(void) ATTR_ALWAYS_INLINE; static inline void USB_OTGPAD_On(void) { - USBCON |= (1 << OTGPADE); + AVR32_USBB.USBCON.otgpade = true; } static inline void USB_OTGPAD_Off(void) ATTR_ALWAYS_INLINE; static inline void USB_OTGPAD_Off(void) { - USBCON &= ~(1 << OTGPADE); + AVR32_USBB.USBCON.otgpade = false; } #endif static inline void USB_CLK_Freeze(void) ATTR_ALWAYS_INLINE; static inline void USB_CLK_Freeze(void) { - USBCON |= (1 << FRZCLK); + AVR32_USBB.USBCON.frzclk = true; } static inline void USB_CLK_Unfreeze(void) ATTR_ALWAYS_INLINE; static inline void USB_CLK_Unfreeze(void) { - USBCON &= ~(1 << FRZCLK); + AVR32_USBB.USBCON.frzclk = false; } static inline void USB_Controller_Enable(void) ATTR_ALWAYS_INLINE; static inline void USB_Controller_Enable(void) { - USBCON |= (1 << USBE); + AVR32_USBB.USBCON.usbe = true; } static inline void USB_Controller_Disable(void) ATTR_ALWAYS_INLINE; static inline void USB_Controller_Disable(void) { - USBCON &= ~(1 << USBE); + AVR32_USBB.USBCON.usbe = false; } static inline void USB_Controller_Reset(void) ATTR_ALWAYS_INLINE; static inline void USB_Controller_Reset(void) { - const uint8_t Temp = USBCON; - - USBCON = (Temp & ~(1 << USBE)); - USBCON = (Temp | (1 << USBE)); + AVR32_USBB.USBCON.usbe = false; + AVR32_USBB.USBCON.usbe = true; } #if defined(USB_CAN_BE_BOTH) static inline uint8_t USB_GetUSBModeFromUID(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline uint8_t USB_GetUSBModeFromUID(void) { - if (USBSTA & (1 << ID)) + if (AVR32_USBB.USBSTA.id) return USB_MODE_Device; else return USB_MODE_Host; diff --git a/LUFA/Drivers/USB/Core/UC3B/USBInterrupt_UC3B.c b/LUFA/Drivers/USB/Core/UC3B/USBInterrupt_UC3B.c index a079e4c90b..9324acfe9f 100644 --- a/LUFA/Drivers/USB/Core/UC3B/USBInterrupt_UC3B.c +++ b/LUFA/Drivers/USB/Core/UC3B/USBInterrupt_UC3B.c @@ -164,10 +164,6 @@ ISR(USB_GEN_vect, ISR_BLOCK) ENDPOINT_DIR_OUT, USB_ControlEndpointSize, ENDPOINT_BANK_SINGLE); - #if defined(INTERRUPT_CONTROL_ENDPOINT) - USB_INT_Enable(USB_INT_RXSTPI); - #endif - EVENT_USB_Device_Reset(); } #endif @@ -247,23 +243,3 @@ ISR(USB_GEN_vect, ISR_BLOCK) } #endif } - -#if defined(INTERRUPT_CONTROL_ENDPOINT) && defined(USB_CAN_BE_DEVICE) -ISR(USB_COM_vect, ISR_BLOCK) -{ - uint8_t PrevSelectedEndpoint = Endpoint_GetCurrentEndpoint(); - - Endpoint_SelectEndpoint(ENDPOINT_CONTROLEP); - USB_INT_Disable(USB_INT_RXSTPI); - - NONATOMIC_BLOCK(NONATOMIC_FORCEOFF) - { - USB_Device_ProcessControlRequest(); - } - - Endpoint_SelectEndpoint(ENDPOINT_CONTROLEP); - USB_INT_Enable(USB_INT_RXSTPI); - Endpoint_SelectEndpoint(PrevSelectedEndpoint); -} -#endif - diff --git a/LUFA/ManPages/CompileTimeTokens.txt b/LUFA/ManPages/CompileTimeTokens.txt index f215ffec15..9dfa805349 100644 --- a/LUFA/ManPages/CompileTimeTokens.txt +++ b/LUFA/ManPages/CompileTimeTokens.txt @@ -14,7 +14,7 @@ * \section Sec_SummaryNonUSBTokens Non USB Related Tokens * This section describes compile tokens which affect non-USB sections of the LUFA library. * - * DISABLE_TERMINAL_CODES - ( \ref Group_Terminal ) \n + * DISABLE_TERMINAL_CODES - (\ref Group_Terminal) - All Architectures \n * If an application contains ANSI terminal control codes listed in TerminalCodes.h, it might be desired to remove them * at compile time for use with a terminal which is non-ANSI control code aware, without modifying the source code. If * this token is defined, all ANSI control codes in the application code from the TerminalCodes.h header are removed from @@ -24,34 +24,35 @@ * \section Sec_SummaryUSBClassTokens USB Class Driver Related Tokens * This section describes compile tokens which affect USB class-specific drivers in the LUFA library. * - * HID_HOST_BOOT_PROTOCOL_ONLY - ( \ref Group_USBClassHIDHost ) \n + * HID_HOST_BOOT_PROTOCOL_ONLY - (\ref Group_USBClassHIDHost) - All Architectures \n * By default, the USB HID Host class driver is designed to work with HID devices using either the Boot or Report HID * communication protocols. On devices where the Report protocol is not used (i.e. in applications where only basic * Mouse or Keyboard operation is desired, using boot compatible devices), the code responsible for the Report protocol * mode can be removed to save space in the compiled application by defining this token. When defined, it is still necessary * to explicitly put the attached device into Boot protocol mode via a call to \ref HID_Host_SetBootProtocol(). * - * HID_STATETABLE_STACK_DEPTH=x - ( \ref Group_HIDParser ) \n + * HID_STATETABLE_STACK_DEPTH=x - (\ref Group_HIDParser) - All Architectures \n + * Supported Architectures: All \n * HID reports may contain PUSH and POP elements, to store and retrieve the current HID state table onto a stack. This * allows for reports to save the state table before modifying it slightly for a data item, and then restore the previous * state table in a compact manner. This token may be defined to a non-zero 8-bit value to give the maximum depth of the state * table stack. If not defined, this defaults to the value indicated in the HID.h file documentation. * - * HID_USAGE_STACK_DEPTH=x - ( \ref Group_HIDParser ) \n + * HID_USAGE_STACK_DEPTH=x - (\ref Group_HIDParser) - All Architectures \n * HID reports generally contain many USAGE elements, which are assigned to INPUT, OUTPUT and FEATURE items in succession * when multiple items are defined at once (via REPORT COUNT elements). This allows for several items to be defined with * different usages in a compact manner. This token may be defined to a non-zero 8-bit value to set the maximum depth of the * usage stack, indicating the maximum number of USAGE items which can be stored temporarily until the next INPUT, OUTPUT * and FEATURE item. If not defined, this defaults to the value indicated in the HID.h file documentation. * - * HID_MAX_COLLECTIONS=x - ( \ref Group_HIDParser ) \n + * HID_MAX_COLLECTIONS=x - (\ref Group_HIDParser) - All Architectures \n * HID reports generally contain several COLLECTION elements, used to group related data items together. Collection information * is stored separately in the processed usage structure (and referred to by the data elements in the structure) to save space. * This token may be defined to a non-zero 8-bit value to set the maximum number of COLLECTION items which can be processed by the * parser into the resultant processed report structure. If not defined, this defaults to the value indicated in the HID.h file * documentation. * - * HID_MAX_REPORTITEMS=x - ( \ref Group_HIDParser ) \n + * HID_MAX_REPORTITEMS=x - (\ref Group_HIDParser) - All Architectures \n * All HID reports contain one or more INPUT, OUTPUT and/or FEATURE items describing the data which can be sent to and from the HID * device. Each item has associated usages, bit offsets in the item reports and other associated data indicating the manner in which * the report data should be interpreted by the host. This token may be defined to a non-zero 8-bit value to set the maximum number of @@ -59,7 +60,7 @@ * If a item has a multiple count (i.e. a REPORT COUNT of more than 1), each item in the report count is placed separately in the * processed HID report table. If not defined, this defaults to the value indicated in the HID.h file documentation. * - * HID_MAX_REPORT_IDS=x - ( \ref Group_HIDParser ) \n + * HID_MAX_REPORT_IDS=x - (\ref Group_HIDParser) - All Architectures \n * HID reports may contain several report IDs, to logically distinguish grouped device data from one another - for example, a combination * keyboard and mouse might use report IDs to separate the keyboard reports from the mouse reports. In order to determine the size of each * report, and thus know how many bytes must be read or written, the size of each report (IN, OUT and FEATURE) must be calculated and @@ -67,7 +68,7 @@ * and their sizes calculated/stored into the resultant processed report structure. If not defined, this defaults to the value indicated in * the HID.h file documentation. * - * NO_CLASS_DRIVER_AUTOFLUSH + * NO_CLASS_DRIVER_AUTOFLUSH - (\ref Group_USBClassDrivers) - All Architectures \n * Many of the device and host mode class drivers automatically flush any data waiting to be written to an interface, when the corresponding * USB management task is executed. This is usually desirable to ensure that any queued data is sent as soon as possible once and new data is * constructed in the main program loop. However, if flushing is to be controlled manually by the user application via the *_Flush() commands, @@ -77,33 +78,33 @@ * \section Sec_SummaryUSBTokens General USB Driver Related Tokens * This section describes compile tokens which affect USB driver stack as a whole in the LUFA library. * - * ORDERED_EP_CONFIG - ( \ref Group_EndpointManagement , \ref Group_PipeManagement )\n + * ORDERED_EP_CONFIG - (\ref Group_EndpointManagement , \ref Group_PipeManagement) - AVR8 Only \n * The USB AVRs do not allow for Endpoints and Pipes to be configured out of order; they must be configured in an ascending order to * prevent data corruption issues. However, by default LUFA employs a workaround to allow for unordered Endpoint/Pipe initialisation. This compile * time token may be used to restrict the intialisation order to ascending indexes only in exchange for a smaller compiled binary size. * - * USE_STATIC_OPTIONS=x - ( \ref Group_USBManagement ) \n + * USE_STATIC_OPTIONS=x - (\ref Group_USBManagement) - All Architectures \n * By default, the USB_Init() function accepts dynamic options at runtime to alter the library behaviour, including whether the USB pad * voltage regulator is enabled, and the device speed when in device mode. By defining this token to a mask comprised of the USB options * mask defines usually passed as the Options parameter to USB_Init(), the resulting compiled binary can be decreased in size by removing * the dynamic options code, and replacing it with the statically set options. When defined, the USB_Init() function no longer accepts an * Options parameter. * - * USB_DEVICE_ONLY - ( \ref Group_USBManagement ) \n + * USB_DEVICE_ONLY - (\ref Group_USBManagement) - All Architectures \n * For the USB AVR models supporting both device and host USB modes, the USB_Init() function contains a Mode parameter which specifies the * mode the library should be initialized to. If only device mode is required, the code for USB host mode can be removed from the binary to * save space. When defined, the USB_Init() function no longer accepts a Mode parameter. This define is irrelevant on smaller USB AVRs which * do not support host mode. * - * USB_HOST_ONLY - ( \ref Group_USBManagement ) \n + * USB_HOST_ONLY - (\ref Group_USBManagement) - All Architectures \n * Same as USB_DEVICE_ONLY, except the library is fixed to USB host mode rather than USB device mode. Not available on some USB AVR models. * - * USB_STREAM_TIMEOUT_MS=x - ( \ref Group_USBManagement ) \n + * USB_STREAM_TIMEOUT_MS=x - (\ref Group_USBManagement) - All Architectures \n * When endpoint and/or pipe stream functions are used, by default there is a timeout between each transfer which the connected device or host * must satisfy, or the stream function aborts the remaining data transfer. This token may be defined to a non-zero 16-bit value to set the timeout * period for stream transfers, specified in milliseconds. If not defined, the default value specified in LowLevel.h is used instead. * - * NO_LIMITED_CONTROLLER_CONNECT - ( \ref Group_Events ) \n + * NO_LIMITED_CONTROLLER_CONNECT - (\ref Group_Events) - AVR8 Only \n * On the smaller USB AVRs, the USB controller lacks VBUS events to determine the physical connection state of the USB bus to a host. In lieu of * VBUS events, the library attempts to determine the connection state via the bus suspension and wake up events instead. This however may be * slightly inaccurate due to the possibility of the host suspending the bus while the device is still connected. If accurate connection status is @@ -111,7 +112,7 @@ * can be accurately set and the \ref EVENT_USB_Device_Connect() and \ref EVENT_USB_Device_Disconnect() events manually raised by the RAISE_EVENT macro. * When defined, this token disables the library's auto-detection of the connection state by the aforementioned suspension and wake up events. * - * NO_SOF_EVENTS - ( \ref Group_Events ) \n + * NO_SOF_EVENTS - (\ref Group_Events) - All Architectures \n * By default, there exists a LUFA application event for the start of each USB frame while the USB bus is not suspended in either host or device mode. * This event can be selectively enabled or disabled by calling the appropriate device or host mode function. When this compile time token is defined, * the ability to receive USB Start of Frame events via the \ref EVENT_USB_Device_StartOfFrame() or \ref EVENT_USB_Host_StartOfFrame() events is removed, @@ -120,58 +121,58 @@ * \section Sec_SummaryUSBDeviceTokens USB Device Mode Driver Related Tokens * This section describes compile tokens which affect USB driver stack of the LUFA library when used in Device mode. * - * USE_RAM_DESCRIPTORS - ( \ref Group_StdDescriptors ) \n + * USE_RAM_DESCRIPTORS - (\ref Group_StdDescriptors) - AVR8 Only \n * Define this token to indicate to the USB driver that all device descriptors are stored in RAM, rather than being located in any one * of the AVR's memory spaces. RAM descriptors may be desirable in applications where the descriptors need to be modified at runtime. * - * USE_FLASH_DESCRIPTORS - ( \ref Group_StdDescriptors ) \n + * USE_FLASH_DESCRIPTORS - (\ref Group_StdDescriptors) - AVR8 Only \n * Similar to USE_RAM_DESCRIPTORS, but all descriptors are stored in the AVR's FLASH memory rather than RAM. * - * USE_EEPROM_DESCRIPTORS - ( \ref Group_StdDescriptors ) \n + * USE_EEPROM_DESCRIPTORS - (\ref Group_StdDescriptors) - AVR8 Only \n * Similar to USE_RAM_DESCRIPTORS, but all descriptors are stored in the AVR's EEPROM memory rather than RAM. * - * NO_INTERNAL_SERIAL - ( \ref Group_StdDescriptors ) \n - * Some AVR models contain a unique 20-digit serial number which can be used as the device serial number, while in device mode. This - * allows the host to uniquely identify the device regardless of if it is moved between USB ports on the same computer, allowing - * allocated resources (such as drivers, COM Port number allocations) to be preserved. This is not needed in many apps, and so the - * code that performs this task can be disabled by defining this option and passing it to the compiler via the -D switch. + * NO_INTERNAL_SERIAL - (\ref Group_StdDescriptors) - All Architectures \n + * Some AVR models contain a unique serial number which can be used as the device serial number, while in device mode. This allows + * the host to uniquely identify the device regardless of if it is moved between USB ports on the same computer, allowing allocated + * resources (such as drivers, COM Port number allocations) to be preserved. This is not needed in many apps, and so the code that + * performs this task can be disabled by defining this option and passing it to the compiler via the -D switch. * - * FIXED_CONTROL_ENDPOINT_SIZE=x - ( \ref Group_EndpointManagement ) \n + * FIXED_CONTROL_ENDPOINT_SIZE=x - (\ref Group_EndpointManagement) - All Architectures \n * By default, the library determines the size of the control endpoint (when in device mode) by reading the device descriptor. * Normally this reduces the amount of configuration required for the library, allows the value to change dynamically (if * descriptors are stored in EEPROM or RAM rather than flash memory) and reduces code maintenance. However, this token can be * defined to a non-zero value instead to give the size in bytes of the control endpoint, to reduce the size of the compiled * binary. * - * DEVICE_STATE_AS_GPIOR - ( \ref Group_Device ) \n + * DEVICE_STATE_AS_GPIOR - (\ref Group_Device) - AVR8 Only \n * One of the most frequently used global variables in the stack is the USB_DeviceState global, which indicates the current state of * the Device State Machine. To reduce the amount of code and time required to access and modify this global in an application, this token * may be defined to a value between 0 and 2 to fix the state variable into one of the three general purpose IO registers inside the AVR * reserved for application use. When defined, the corresponding GPIOR register should not be used within the user application except * implicitly via the library APIs. * - * FIXED_NUM_CONFIGURATIONS=x - ( \ref Group_Device ) \n + * FIXED_NUM_CONFIGURATIONS=x - (\ref Group_Device) - All Architectures \n * By default, the library determines the number of configurations a USB device supports by reading the device descriptor. This reduces * the amount of configuration required to set up the library, and allows the value to change dynamically (if descriptors are stored in * EEPROM or RAM rather than flash memory) and reduces code maintenance. However, this value may be fixed via this token in the project * makefile to reduce the compiled size of the binary at the expense of flexibility. * - * CONTROL_ONLY_DEVICE \n + * CONTROL_ONLY_DEVICE - (\ref Group_Device) - All Architectures \n * In some limited USB device applications, there are no device endpoints other than the control endpoint; i.e. all device communication * is through control endpoint requests. Defining this token will remove several features related to the selection and control of device * endpoints internally, saving space. Generally, this is usually only useful in (some) bootloaders and is best avoided. * - * INTERRUPT_CONTROL_ENDPOINT - ( \ref Group_USBManagement ) \n + * INTERRUPT_CONTROL_ENDPOINT - (\ref Group_USBManagement) - AVR8 Only \n * Some applications prefer to not call the USB_USBTask() management task regularly while in device mode, as it can complicate code significantly. * Instead, when device mode is used this token can be passed to the library via the -D switch to allow the library to manage the USB control * endpoint entirely via USB controller interrupts asynchronously to the user application. When defined, USB_USBTask() does not need to be called * when in USB device mode. * - * NO_DEVICE_REMOTE_WAKEUP - (\ref Group_Device ) \n + * NO_DEVICE_REMOTE_WAKEUP - (\ref Group_Device) - All Architectures \n * Many devices do not require the use of the Remote Wakeup features of USB, used to wake up the USB host when suspended. On these devices, * the code required to manage device Remote Wakeup can be disabled by defining this token and passing it to the library via the -D switch. * - * NO_DEVICE_SELF_POWER - (\ref Group_Device ) \n + * NO_DEVICE_SELF_POWER - (\ref Group_Device) - All Architectures \n * USB devices may be bus powered, self powered, or a combination of both. When a device can be both bus powered and self powered, the host may * query the device to determine the current power source, via \ref USB_CurrentlySelfPowered. For solely bus powered devices, this global and the * code required to manage it may be disabled by passing this token to the library via the -D switch. @@ -181,19 +182,19 @@ * * This section describes compile tokens which affect USB driver stack of the LUFA library when used in Host mode. * - * HOST_STATE_AS_GPIOR - ( \ref Group_Host ) \n + * HOST_STATE_AS_GPIOR - (\ref Group_Host) - AVR8 Only \n * One of the most frequently used global variables in the stack is the USB_HostState global, which indicates the current state of * the Host State Machine. To reduce the amount of code and time required to access and modify this global in an application, this token * may be defined to a value between 0 and 2 to fix the state variable into one of the three general purpose IO registers inside the AVR * reserved for application use. When defined, the corresponding GPIOR register should not be used within the user application except * implicitly via the library APIs. * - * USB_HOST_TIMEOUT_MS=x - ( \ref Group_Host ) \n + * USB_HOST_TIMEOUT_MS=x - (\ref Group_Host) - All Architectures \n * When a control transfer is initiated in host mode to an attached device, a timeout is used to abort the transfer if the attached * device fails to respond within the timeout period. This token may be defined to a non-zero 16-bit value to set the timeout period for * control transfers, specified in milliseconds. If not defined, the default value specified in Host.h is used instead. * - * HOST_DEVICE_SETTLE_DELAY_MS=x - ( \ref Group_Host ) \n + * HOST_DEVICE_SETTLE_DELAY_MS=x - (\ref Group_Host) - All Architectures \n * Some devices require a delay of up to 5 seconds after they are connected to VBUS before the enumeration process can be started, or * they will fail to enumerate correctly. By placing a delay before the enumeration process, it can be ensured that the bus has settled * back to a known idle state before communications occur with the device. This token may be defined to a 16-bit value to set the device diff --git a/LUFA/ManPages/LUFAPoweredProjects.txt b/LUFA/ManPages/LUFAPoweredProjects.txt index 4dc51d01c6..b894df2949 100644 --- a/LUFA/ManPages/LUFAPoweredProjects.txt +++ b/LUFA/ManPages/LUFAPoweredProjects.txt @@ -70,6 +70,7 @@ * - Reprap with LUFA, a LUFA powered 3D printer: http://code.google.com/p/at90usb1287-code-for-arduino-and-eclipse/ * - SD Card reader: http://elasticsheep.com/2010/04/teensy2-usb-mass-storage-with-an-sd-card/ * - SEGA Megadrive/Genesis Development Cartridge: http://www.makestuff.eu/wordpress/?page_id=398 + * - Serial Line bus analyser: http://www.pjrc.com/teensy/projects/SerialAnalyzer.html * - Stripe Snoop, a Magnetic Card reader: http://www.ossguy.com/ss_usb/ * - Teensy SD Card .WAV file player: http://elasticsheep.com/2010/04/teensy2-usb-wav-player-part-1/ * - Touchscreen Input Device: http://capnstech.blogspot.com/2010/07/touchscreen-update.html