forked from mfulz_github/qmk_firmware
Rename UC3B driver files to UC3, as they are generic to all AVR32 UC3 models.
This commit is contained in:
parent
6005a42150
commit
944e0d2009
File diff suppressed because one or more lines are too long
|
@ -64,8 +64,8 @@
|
|||
/** Selects the Atmel 8-bit AVR (AT90USB* and ATMEGA*U* chips) architecture. */
|
||||
#define ARCH_AVR8 0
|
||||
|
||||
/** Selects the Atmel 32-bit UC3B AVR (AT32UC3B* chips) architecture. */
|
||||
#define ARCH_UC3B 1
|
||||
/** Selects the Atmel 32-bit UC3 AVR (AT32UC3* chips) architecture. */
|
||||
#define ARCH_UC3 1
|
||||
|
||||
#if !defined(__DOXYGEN__)
|
||||
#define ARCH_ ARCH_AVR8
|
||||
|
|
|
@ -84,7 +84,7 @@
|
|||
|
||||
#define ARCH_LITTLE_ENDIAN
|
||||
#include "Endianness.h"
|
||||
#elif (ARCH == ARCH_UC3B)
|
||||
#elif (ARCH == ARCH_UC3)
|
||||
#include <avr32/io.h>
|
||||
|
||||
// === TODO: Find abstracted way to handle these ===
|
||||
|
|
|
@ -128,8 +128,8 @@
|
|||
/* Architecture Includes: */
|
||||
#if (ARCH == ARCH_AVR8)
|
||||
#include "AVR8/Device_AVR8.h"
|
||||
#elif (ARCH == ARCH_UC3B)
|
||||
#include "UC3B/Device_UC3B.h"
|
||||
#elif (ARCH == ARCH_UC3)
|
||||
#include "UC3/Device_UC3.h"
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
|
|
@ -101,8 +101,8 @@
|
|||
/* Architecture Includes: */
|
||||
#if (ARCH == ARCH_AVR8)
|
||||
#include "AVR8/Endpoint_AVR8.h"
|
||||
#elif (ARCH == ARCH_UC3B)
|
||||
#include "UC3B/Endpoint_UC3B.h"
|
||||
#elif (ARCH == ARCH_UC3)
|
||||
#include "UC3/Endpoint_UC3.h"
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
|
|
@ -165,8 +165,8 @@
|
|||
/* Architecture Includes: */
|
||||
#if (ARCH == ARCH_AVR8)
|
||||
#include "AVR8/Host_AVR8.h"
|
||||
#elif (ARCH == ARCH_UC3B)
|
||||
#include "UC3B/Host_UC3B.h"
|
||||
#elif (ARCH == ARCH_UC3)
|
||||
#include "UC3/Host_UC3.h"
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
|
|
@ -116,8 +116,8 @@
|
|||
/* Architecture Includes: */
|
||||
#if (ARCH == ARCH_AVR8)
|
||||
#include "AVR8/Pipe_AVR8.h"
|
||||
#elif (ARCH == ARCH_UC3B)
|
||||
#include "UC3B/Pipe_UC3B.h"
|
||||
#elif (ARCH == ARCH_UC3)
|
||||
#include "UC3/Pipe_UC3.h"
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
|
|
@ -29,24 +29,24 @@
|
|||
*/
|
||||
|
||||
/** \file
|
||||
* \brief USB Device definitions for the AVR32 UC3B microcontrollers.
|
||||
* \copydetails Group_Device_UC3B
|
||||
* \brief USB Device definitions for the AVR32 UC3 microcontrollers.
|
||||
* \copydetails Group_Device_UC3
|
||||
*
|
||||
* \note This file should not be included directly. It is automatically included as needed by the USB driver
|
||||
* dispatch header located in LUFA/Drivers/USB/USB.h.
|
||||
*/
|
||||
|
||||
/** \ingroup Group_Device
|
||||
* \defgroup Group_Device_UC3B Device Management (UC3B)
|
||||
* \brief USB Device definitions for the AVR32 UC3B microcontrollers.
|
||||
* \defgroup Group_Device_UC3 Device Management (UC3)
|
||||
* \brief USB Device definitions for the AVR32 UC3 microcontrollers.
|
||||
*
|
||||
* Architecture specific USB Device definitions for the Atmel 32-bit UC3B AVR microcontrollers.
|
||||
* Architecture specific USB Device definitions for the Atmel 32-bit UC3 AVR microcontrollers.
|
||||
*
|
||||
* @{
|
||||
*/
|
||||
|
||||
#ifndef __USBDEVICE_UC3B_H__
|
||||
#define __USBDEVICE_UC3B_H__
|
||||
#ifndef __USBDEVICE_UC3_H__
|
||||
#define __USBDEVICE_UC3_H__
|
||||
|
||||
/* Includes: */
|
||||
#include "../../../../Common/Common.h"
|
|
@ -29,38 +29,38 @@
|
|||
*/
|
||||
|
||||
/** \file
|
||||
* \brief USB Endpoint definitions for the AVR32 UC3B microcontrollers.
|
||||
* \copydetails Group_EndpointManagement_UC3B
|
||||
* \brief USB Endpoint definitions for the AVR32 UC3 microcontrollers.
|
||||
* \copydetails Group_EndpointManagement_UC3
|
||||
*
|
||||
* \note This file should not be included directly. It is automatically included as needed by the USB driver
|
||||
* dispatch header located in LUFA/Drivers/USB/USB.h.
|
||||
*/
|
||||
|
||||
/** \ingroup Group_EndpointRW
|
||||
* \defgroup Group_EndpointRW_UC3B Endpoint Data Reading and Writing (UC3B)
|
||||
* \brief Endpoint data read/write definitions for the Atmel AVR32 UC3B architecture.
|
||||
* \defgroup Group_EndpointRW_UC3 Endpoint Data Reading and Writing (UC3)
|
||||
* \brief Endpoint data read/write definitions for the Atmel AVR32 UC3 architecture.
|
||||
*
|
||||
* Functions, macros, variables, enums and types related to data reading and writing from and to endpoints.
|
||||
*/
|
||||
|
||||
/** \ingroup Group_EndpointPrimitiveRW
|
||||
* \defgroup Group_EndpointPrimitiveRW_UC3B Read/Write of Primitive Data Types (UC3B)
|
||||
* \brief Endpoint primative read/write definitions for the Atmel AVR32 UC3B architecture.
|
||||
* \defgroup Group_EndpointPrimitiveRW_UC3 Read/Write of Primitive Data Types (UC3)
|
||||
* \brief Endpoint primative read/write definitions for the Atmel AVR32 UC3 architecture.
|
||||
*
|
||||
* Functions, macros, variables, enums and types related to data reading and writing of primitive data types
|
||||
* from and to endpoints.
|
||||
*/
|
||||
|
||||
/** \ingroup Group_EndpointPacketManagement
|
||||
* \defgroup Group_EndpointPacketManagement_UC3B Endpoint Packet Management (UC3B)
|
||||
* \brief Endpoint packet management definitions for the Atmel AVR32 UC3B architecture.
|
||||
* \defgroup Group_EndpointPacketManagement_UC3 Endpoint Packet Management (UC3)
|
||||
* \brief Endpoint packet management definitions for the Atmel AVR32 UC3 architecture.
|
||||
*
|
||||
* Functions, macros, variables, enums and types related to packet management of endpoints.
|
||||
*/
|
||||
|
||||
/** \ingroup Group_EndpointManagement
|
||||
* \defgroup Group_EndpointManagement_UC3B Endpoint Management (UC3B)
|
||||
* \brief Endpoint management definitions for the Atmel AVR32 UC3B architecture.
|
||||
* \defgroup Group_EndpointManagement_UC3 Endpoint Management (UC3)
|
||||
* \brief Endpoint management definitions for the Atmel AVR32 UC3 architecture.
|
||||
*
|
||||
* Functions, macros and enums related to endpoint management when in USB Device mode. This
|
||||
* module contains the endpoint management macros, as well as endpoint interrupt and data
|
||||
|
@ -69,8 +69,8 @@
|
|||
* @{
|
||||
*/
|
||||
|
||||
#ifndef __ENDPOINT_UC3B_H__
|
||||
#define __ENDPOINT_UC3B_H__
|
||||
#ifndef __ENDPOINT_UC3_H__
|
||||
#define __ENDPOINT_UC3_H__
|
||||
|
||||
/* Includes: */
|
||||
#include "../../../../Common/Common.h"
|
||||
|
@ -205,7 +205,7 @@
|
|||
/* Enums: */
|
||||
/** Enum for the possible error return codes of the \ref Endpoint_WaitUntilReady() function.
|
||||
*
|
||||
* \ingroup Group_EndpointRW_UC3B
|
||||
* \ingroup Group_EndpointRW_UC3
|
||||
*/
|
||||
enum Endpoint_WaitUntilReady_ErrorCodes_t
|
||||
{
|
||||
|
@ -290,7 +290,7 @@
|
|||
* \note The return width of this function may differ, depending on the maximum endpoint bank size
|
||||
* of the selected AVR model.
|
||||
*
|
||||
* \ingroup Group_EndpointRW_UC3B
|
||||
* \ingroup Group_EndpointRW_UC3
|
||||
*
|
||||
* \return Total number of bytes in the currently selected Endpoint's FIFO buffer.
|
||||
*/
|
||||
|
@ -374,7 +374,7 @@
|
|||
* transmission via the \ref Endpoint_ClearIN() command, or are awaiting acknowledgement via the
|
||||
* \ref Endpoint_ClearOUT() command.
|
||||
*
|
||||
* \ingroup Group_EndpointPacketManagement_UC3B
|
||||
* \ingroup Group_EndpointPacketManagement_UC3
|
||||
*
|
||||
* \return Total number of busy banks in the selected endpoint.
|
||||
*/
|
||||
|
@ -388,7 +388,7 @@
|
|||
* will terminate all queued transactions, resetting the endpoint banks ready for a new
|
||||
* packet.
|
||||
*
|
||||
* \ingroup Group_EndpointPacketManagement_UC3B
|
||||
* \ingroup Group_EndpointPacketManagement_UC3
|
||||
*/
|
||||
static inline void Endpoint_AbortPendingIN(void)
|
||||
{
|
||||
|
@ -405,7 +405,7 @@
|
|||
* is an OUT direction and no packet (or an empty packet) has been received, or if the endpoint is an IN
|
||||
* direction and the endpoint bank is full.
|
||||
*
|
||||
* \ingroup Group_EndpointPacketManagement_UC3B
|
||||
* \ingroup Group_EndpointPacketManagement_UC3
|
||||
*
|
||||
* \return Boolean \c true if the currently selected endpoint may be read from or written to, depending
|
||||
* on its direction.
|
||||
|
@ -456,7 +456,7 @@
|
|||
|
||||
/** Determines if the selected IN endpoint is ready for a new packet to be sent to the host.
|
||||
*
|
||||
* \ingroup Group_EndpointPacketManagement_UC3B
|
||||
* \ingroup Group_EndpointPacketManagement_UC3
|
||||
*
|
||||
* \return Boolean \c true if the current endpoint is ready for an IN packet, \c false otherwise.
|
||||
*/
|
||||
|
@ -468,7 +468,7 @@
|
|||
|
||||
/** Determines if the selected OUT endpoint has received new packet from the host.
|
||||
*
|
||||
* \ingroup Group_EndpointPacketManagement_UC3B
|
||||
* \ingroup Group_EndpointPacketManagement_UC3
|
||||
*
|
||||
* \return Boolean \c true if current endpoint is has received an OUT packet, \c false otherwise.
|
||||
*/
|
||||
|
@ -480,7 +480,7 @@
|
|||
|
||||
/** Determines if the current CONTROL type endpoint has received a SETUP packet.
|
||||
*
|
||||
* \ingroup Group_EndpointPacketManagement_UC3B
|
||||
* \ingroup Group_EndpointPacketManagement_UC3
|
||||
*
|
||||
* \return Boolean \c true if the selected endpoint has received a SETUP packet, \c false otherwise.
|
||||
*/
|
||||
|
@ -493,7 +493,7 @@
|
|||
/** Clears a received SETUP packet on the currently selected CONTROL type endpoint, freeing up the
|
||||
* endpoint for the next packet.
|
||||
*
|
||||
* \ingroup Group_EndpointPacketManagement_UC3B
|
||||
* \ingroup Group_EndpointPacketManagement_UC3
|
||||
*
|
||||
* \note This is not applicable for non CONTROL type endpoints.
|
||||
*/
|
||||
|
@ -507,7 +507,7 @@
|
|||
/** Sends an IN packet to the host on the currently selected endpoint, freeing up the endpoint for the
|
||||
* next packet and switching to the alternative endpoint bank if double banked.
|
||||
*
|
||||
* \ingroup Group_EndpointPacketManagement_UC3B
|
||||
* \ingroup Group_EndpointPacketManagement_UC3
|
||||
*/
|
||||
static inline void Endpoint_ClearIN(void) ATTR_ALWAYS_INLINE;
|
||||
static inline void Endpoint_ClearIN(void)
|
||||
|
@ -520,7 +520,7 @@
|
|||
/** Acknowledges an OUT packet to the host on the currently selected endpoint, freeing up the endpoint
|
||||
* for the next packet and switching to the alternative endpoint bank if double banked.
|
||||
*
|
||||
* \ingroup Group_EndpointPacketManagement_UC3B
|
||||
* \ingroup Group_EndpointPacketManagement_UC3
|
||||
*/
|
||||
static inline void Endpoint_ClearOUT(void) ATTR_ALWAYS_INLINE;
|
||||
static inline void Endpoint_ClearOUT(void)
|
||||
|
@ -539,7 +539,7 @@
|
|||
* is called, or the host issues a CLEAR FEATURE request to the device for the currently selected
|
||||
* endpoint.
|
||||
*
|
||||
* \ingroup Group_EndpointPacketManagement_UC3B
|
||||
* \ingroup Group_EndpointPacketManagement_UC3
|
||||
*/
|
||||
static inline void Endpoint_StallTransaction(void) ATTR_ALWAYS_INLINE;
|
||||
static inline void Endpoint_StallTransaction(void)
|
||||
|
@ -549,7 +549,7 @@
|
|||
|
||||
/** Clears the STALL condition on the currently selected endpoint.
|
||||
*
|
||||
* \ingroup Group_EndpointPacketManagement_UC3B
|
||||
* \ingroup Group_EndpointPacketManagement_UC3
|
||||
*/
|
||||
static inline void Endpoint_ClearStall(void) ATTR_ALWAYS_INLINE;
|
||||
static inline void Endpoint_ClearStall(void)
|
||||
|
@ -559,7 +559,7 @@
|
|||
|
||||
/** Determines if the currently selected endpoint is stalled, false otherwise.
|
||||
*
|
||||
* \ingroup Group_EndpointPacketManagement_UC3B
|
||||
* \ingroup Group_EndpointPacketManagement_UC3
|
||||
*
|
||||
* \return Boolean \c true if the currently selected endpoint is stalled, \c false otherwise.
|
||||
*/
|
||||
|
@ -622,7 +622,7 @@
|
|||
|
||||
/** Discards one byte from the currently selected endpoint's bank, for OUT direction endpoints.
|
||||
*
|
||||
* \ingroup Group_EndpointPrimitiveRW_UC3B
|
||||
* \ingroup Group_EndpointPrimitiveRW_UC3
|
||||
*/
|
||||
static inline void Endpoint_Discard_Byte(void) ATTR_ALWAYS_INLINE;
|
||||
static inline void Endpoint_Discard_Byte(void)
|
||||
|
@ -635,7 +635,7 @@
|
|||
/** Reads two bytes from the currently selected endpoint's bank in little endian format, for OUT
|
||||
* direction endpoints.
|
||||
*
|
||||
* \ingroup Group_EndpointPrimitiveRW_UC3B
|
||||
* \ingroup Group_EndpointPrimitiveRW_UC3
|
||||
*
|
||||
* \return Next word in the currently selected endpoint's FIFO buffer.
|
||||
*/
|
||||
|
@ -651,7 +651,7 @@
|
|||
/** Reads two bytes from the currently selected endpoint's bank in big endian format, for OUT
|
||||
* direction endpoints.
|
||||
*
|
||||
* \ingroup Group_EndpointPrimitiveRW_UC3B
|
||||
* \ingroup Group_EndpointPrimitiveRW_UC3
|
||||
*
|
||||
* \return Next word in the currently selected endpoint's FIFO buffer.
|
||||
*/
|
||||
|
@ -667,7 +667,7 @@
|
|||
/** Writes two bytes to the currently selected endpoint's bank in little endian format, for IN
|
||||
* direction endpoints.
|
||||
*
|
||||
* \ingroup Group_EndpointPrimitiveRW_UC3B
|
||||
* \ingroup Group_EndpointPrimitiveRW_UC3
|
||||
*
|
||||
* \param[in] Word Next word to write to the currently selected endpoint's FIFO buffer.
|
||||
*/
|
||||
|
@ -681,7 +681,7 @@
|
|||
/** Writes two bytes to the currently selected endpoint's bank in big endian format, for IN
|
||||
* direction endpoints.
|
||||
*
|
||||
* \ingroup Group_EndpointPrimitiveRW_UC3B
|
||||
* \ingroup Group_EndpointPrimitiveRW_UC3
|
||||
*
|
||||
* \param[in] Word Next word to write to the currently selected endpoint's FIFO buffer.
|
||||
*/
|
||||
|
@ -694,7 +694,7 @@
|
|||
|
||||
/** Discards two bytes from the currently selected endpoint's bank, for OUT direction endpoints.
|
||||
*
|
||||
* \ingroup Group_EndpointPrimitiveRW_UC3B
|
||||
* \ingroup Group_EndpointPrimitiveRW_UC3
|
||||
*/
|
||||
static inline void Endpoint_Discard_Word(void) ATTR_ALWAYS_INLINE;
|
||||
static inline void Endpoint_Discard_Word(void)
|
||||
|
@ -708,7 +708,7 @@
|
|||
/** Reads four bytes from the currently selected endpoint's bank in little endian format, for OUT
|
||||
* direction endpoints.
|
||||
*
|
||||
* \ingroup Group_EndpointPrimitiveRW_UC3B
|
||||
* \ingroup Group_EndpointPrimitiveRW_UC3
|
||||
*
|
||||
* \return Next double word in the currently selected endpoint's FIFO buffer.
|
||||
*/
|
||||
|
@ -726,7 +726,7 @@
|
|||
/** Reads four bytes from the currently selected endpoint's bank in big endian format, for OUT
|
||||
* direction endpoints.
|
||||
*
|
||||
* \ingroup Group_EndpointPrimitiveRW_UC3B
|
||||
* \ingroup Group_EndpointPrimitiveRW_UC3
|
||||
*
|
||||
* \return Next double word in the currently selected endpoint's FIFO buffer.
|
||||
*/
|
||||
|
@ -744,7 +744,7 @@
|
|||
/** Writes four bytes to the currently selected endpoint's bank in little endian format, for IN
|
||||
* direction endpoints.
|
||||
*
|
||||
* \ingroup Group_EndpointPrimitiveRW_UC3B
|
||||
* \ingroup Group_EndpointPrimitiveRW_UC3
|
||||
*
|
||||
* \param[in] DWord Next double word to write to the currently selected endpoint's FIFO buffer.
|
||||
*/
|
||||
|
@ -760,7 +760,7 @@
|
|||
/** Writes four bytes to the currently selected endpoint's bank in big endian format, for IN
|
||||
* direction endpoints.
|
||||
*
|
||||
* \ingroup Group_EndpointPrimitiveRW_UC3B
|
||||
* \ingroup Group_EndpointPrimitiveRW_UC3
|
||||
*
|
||||
* \param[in] DWord Next double word to write to the currently selected endpoint's FIFO buffer.
|
||||
*/
|
||||
|
@ -775,7 +775,7 @@
|
|||
|
||||
/** Discards four bytes from the currently selected endpoint's bank, for OUT direction endpoints.
|
||||
*
|
||||
* \ingroup Group_EndpointPrimitiveRW_UC3B
|
||||
* \ingroup Group_EndpointPrimitiveRW_UC3
|
||||
*/
|
||||
static inline void Endpoint_Discard_DWord(void) ATTR_ALWAYS_INLINE;
|
||||
static inline void Endpoint_Discard_DWord(void)
|
||||
|
@ -822,7 +822,7 @@
|
|||
*
|
||||
* \note This routine should not be called on CONTROL type endpoints.
|
||||
*
|
||||
* \ingroup Group_EndpointRW_UC3B
|
||||
* \ingroup Group_EndpointRW_UC3
|
||||
*
|
||||
* \return A value from the \ref Endpoint_WaitUntilReady_ErrorCodes_t enum.
|
||||
*/
|
|
@ -29,38 +29,38 @@
|
|||
*/
|
||||
|
||||
/** \file
|
||||
* \brief USB Pipe definitions for the AVR32 UC3B microcontrollers.
|
||||
* \copydetails Group_PipeManagement_UC3B
|
||||
* \brief USB Pipe definitions for the AVR32 UC3 microcontrollers.
|
||||
* \copydetails Group_PipeManagement_UC3
|
||||
*
|
||||
* \note This file should not be included directly. It is automatically included as needed by the USB driver
|
||||
* dispatch header located in LUFA/Drivers/USB/USB.h.
|
||||
*/
|
||||
|
||||
/** \ingroup Group_PipeRW
|
||||
* \defgroup Group_PipeRW_UC3B Pipe Data Reading and Writing (UC3B)
|
||||
* \brief Pipe data read/write definitions for the Atmel AVR32 UC3B architecture.
|
||||
* \defgroup Group_PipeRW_UC3 Pipe Data Reading and Writing (UC3)
|
||||
* \brief Pipe data read/write definitions for the Atmel AVR32 UC3 architecture.
|
||||
*
|
||||
* Functions, macros, variables, enums and types related to data reading and writing from and to pipes.
|
||||
*/
|
||||
|
||||
/** \ingroup Group_PipePrimitiveRW
|
||||
* \defgroup Group_PipePrimitiveRW_UC3B Read/Write of Primitive Data Types (UC3B)
|
||||
* \brief Pipe primative data read/write definitions for the Atmel AVR32 UC3B architecture.
|
||||
* \defgroup Group_PipePrimitiveRW_UC3 Read/Write of Primitive Data Types (UC3)
|
||||
* \brief Pipe primative data read/write definitions for the Atmel AVR32 UC3 architecture.
|
||||
*
|
||||
* Functions, macros, variables, enums and types related to data reading and writing of primitive data types
|
||||
* from and to pipes.
|
||||
*/
|
||||
|
||||
/** \ingroup Group_PipePacketManagement
|
||||
* \defgroup Group_PipePacketManagement_UC3B Pipe Packet Management (UC3B)
|
||||
* \brief Pipe packet management definitions for the Atmel AVR32 UC3B architecture.
|
||||
* \defgroup Group_PipePacketManagement_UC3 Pipe Packet Management (UC3)
|
||||
* \brief Pipe packet management definitions for the Atmel AVR32 UC3 architecture.
|
||||
*
|
||||
* Functions, macros, variables, enums and types related to packet management of pipes.
|
||||
*/
|
||||
|
||||
/** \ingroup Group_PipeControlReq
|
||||
* \defgroup Group_PipeControlReq_UC3B Pipe Control Request Management (UC3B)
|
||||
* \brief Pipe control request management definitions for the Atmel AVR32 UC3B architecture.
|
||||
* \defgroup Group_PipeControlReq_UC3 Pipe Control Request Management (UC3)
|
||||
* \brief Pipe control request management definitions for the Atmel AVR32 UC3 architecture.
|
||||
*
|
||||
* Module for host mode request processing. This module allows for the transmission of standard, class and
|
||||
* vendor control requests to the default control endpoint of an attached device while in host mode.
|
||||
|
@ -69,8 +69,8 @@
|
|||
*/
|
||||
|
||||
/** \ingroup Group_PipeManagement
|
||||
* \defgroup Group_PipeManagement_UC3B Pipe Management (UC3B)
|
||||
* \brief Pipe management definitions for the Atmel AVR32 UC3B architecture.
|
||||
* \defgroup Group_PipeManagement_UC3 Pipe Management (UC3)
|
||||
* \brief Pipe management definitions for the Atmel AVR32 UC3 architecture.
|
||||
*
|
||||
* This module contains functions, macros and enums related to pipe management when in USB Host mode. This
|
||||
* module contains the pipe management macros, as well as pipe interrupt and data send/receive functions
|
||||
|
@ -79,8 +79,8 @@
|
|||
* @{
|
||||
*/
|
||||
|
||||
#ifndef __PIPE_UC3B_H__
|
||||
#define __PIPE_UC3B_H__
|
||||
#ifndef __PIPE_UC3_H__
|
||||
#define __PIPE_UC3_H__
|
||||
|
||||
/* Includes: */
|
||||
#include "../../../../Common/Common.h"
|
||||
|
@ -180,14 +180,14 @@
|
|||
/** Size in bytes of the largest pipe bank size possible in the device. Not all banks on each AVR
|
||||
* model supports the largest bank size possible on the device; different pipe numbers support
|
||||
* different maximum bank sizes. This value reflects the largest possible bank of any pipe on the
|
||||
* currently selected UC3B AVR model.
|
||||
* currently selected UC3 AVR model.
|
||||
*/
|
||||
#define PIPE_MAX_SIZE 256
|
||||
|
||||
/* Enums: */
|
||||
/** Enum for the possible error return codes of the \ref Pipe_WaitUntilReady() function.
|
||||
*
|
||||
* \ingroup Group_PipeRW_UC3B
|
||||
* \ingroup Group_PipeRW_UC3
|
||||
*/
|
||||
enum Pipe_WaitUntilReady_ErrorCodes_t
|
||||
{
|
||||
|
@ -206,7 +206,7 @@
|
|||
* \note The return width of this function may differ, depending on the maximum pipe bank size
|
||||
* of the selected AVR model.
|
||||
*
|
||||
* \ingroup Group_PipeRW_UC3B
|
||||
* \ingroup Group_PipeRW_UC3
|
||||
*
|
||||
* \return Total number of bytes in the currently selected pipe's FIFO buffer.
|
||||
*/
|
||||
|
@ -447,7 +447,7 @@
|
|||
* transmission via the \ref Pipe_ClearOUT() command, or are awaiting acknowledgement via the
|
||||
* \ref Pipe_ClearIN() command.
|
||||
*
|
||||
* \ingroup Group_PipePacketManagement_UC3B
|
||||
* \ingroup Group_PipePacketManagement_UC3
|
||||
*
|
||||
* \return Total number of busy banks in the selected pipe.
|
||||
*/
|
||||
|
@ -464,7 +464,7 @@
|
|||
*
|
||||
* \note This function is not valid on CONTROL type pipes.
|
||||
*
|
||||
* \ingroup Group_PipePacketManagement_UC3B
|
||||
* \ingroup Group_PipePacketManagement_UC3
|
||||
*
|
||||
* \return Boolean \c true if the currently selected pipe may be read from or written to, depending
|
||||
* on its direction.
|
||||
|
@ -477,7 +477,7 @@
|
|||
|
||||
/** Determines if a packet has been received on the currently selected IN pipe from the attached device.
|
||||
*
|
||||
* \ingroup Group_PipePacketManagement_UC3B
|
||||
* \ingroup Group_PipePacketManagement_UC3
|
||||
*
|
||||
* \return Boolean \c true if the current pipe has received an IN packet, \c false otherwise.
|
||||
*/
|
||||
|
@ -489,7 +489,7 @@
|
|||
|
||||
/** Determines if the currently selected OUT pipe is ready to send an OUT packet to the attached device.
|
||||
*
|
||||
* \ingroup Group_PipePacketManagement_UC3B
|
||||
* \ingroup Group_PipePacketManagement_UC3
|
||||
*
|
||||
* \return Boolean \c true if the current pipe is ready for an OUT packet, \c false otherwise.
|
||||
*/
|
||||
|
@ -502,7 +502,7 @@
|
|||
/** Determines if no SETUP request is currently being sent to the attached device on the selected
|
||||
* CONTROL type pipe.
|
||||
*
|
||||
* \ingroup Group_PipePacketManagement_UC3B
|
||||
* \ingroup Group_PipePacketManagement_UC3
|
||||
*
|
||||
* \return Boolean \c true if the current pipe is ready for a SETUP packet, \c false otherwise.
|
||||
*/
|
||||
|
@ -514,7 +514,7 @@
|
|||
|
||||
/** Sends the currently selected CONTROL type pipe's contents to the device as a SETUP packet.
|
||||
*
|
||||
* \ingroup Group_PipePacketManagement_UC3B
|
||||
* \ingroup Group_PipePacketManagement_UC3
|
||||
*/
|
||||
static inline void Pipe_ClearSETUP(void) ATTR_ALWAYS_INLINE;
|
||||
static inline void Pipe_ClearSETUP(void)
|
||||
|
@ -526,7 +526,7 @@
|
|||
/** Acknowledges the reception of a setup IN request from the attached device on the currently selected
|
||||
* pipe, freeing the bank ready for the next packet.
|
||||
*
|
||||
* \ingroup Group_PipePacketManagement_UC3B
|
||||
* \ingroup Group_PipePacketManagement_UC3
|
||||
*/
|
||||
static inline void Pipe_ClearIN(void) ATTR_ALWAYS_INLINE;
|
||||
static inline void Pipe_ClearIN(void)
|
||||
|
@ -539,7 +539,7 @@
|
|||
/** Sends the currently selected pipe's contents to the device as an OUT packet on the selected pipe, freeing
|
||||
* the bank ready for the next packet.
|
||||
*
|
||||
* \ingroup Group_PipePacketManagement_UC3B
|
||||
* \ingroup Group_PipePacketManagement_UC3
|
||||
*/
|
||||
static inline void Pipe_ClearOUT(void) ATTR_ALWAYS_INLINE;
|
||||
static inline void Pipe_ClearOUT(void)
|
||||
|
@ -555,7 +555,7 @@
|
|||
* received, it must be cleared using \ref Pipe_ClearNAKReceived() before the previous (or any other) packet
|
||||
* can be re-sent.
|
||||
*
|
||||
* \ingroup Group_PipePacketManagement_UC3B
|
||||
* \ingroup Group_PipePacketManagement_UC3
|
||||
*
|
||||
* \return Boolean \c true if an NAK has been received on the current pipe, \c false otherwise.
|
||||
*/
|
||||
|
@ -567,7 +567,7 @@
|
|||
|
||||
/** Clears the NAK condition on the currently selected pipe.
|
||||
*
|
||||
* \ingroup Group_PipePacketManagement_UC3B
|
||||
* \ingroup Group_PipePacketManagement_UC3
|
||||
*
|
||||
* \see \ref Pipe_IsNAKReceived() for more details.
|
||||
*/
|
||||
|
@ -579,7 +579,7 @@
|
|||
|
||||
/** Determines if the currently selected pipe has had the STALL condition set by the attached device.
|
||||
*
|
||||
* \ingroup Group_PipePacketManagement_UC3B
|
||||
* \ingroup Group_PipePacketManagement_UC3
|
||||
*
|
||||
* \return Boolean \c true if the current pipe has been stalled by the attached device, \c false otherwise.
|
||||
*/
|
||||
|
@ -592,7 +592,7 @@
|
|||
/** Clears the STALL condition detection flag on the currently selected pipe, but does not clear the
|
||||
* STALL condition itself (this must be done via a ClearFeature control request to the device).
|
||||
*
|
||||
* \ingroup Group_PipePacketManagement_UC3B
|
||||
* \ingroup Group_PipePacketManagement_UC3
|
||||
*/
|
||||
static inline void Pipe_ClearStall(void) ATTR_ALWAYS_INLINE;
|
||||
static inline void Pipe_ClearStall(void)
|
||||
|
@ -603,7 +603,7 @@
|
|||
|
||||
/** Reads one byte from the currently selected pipe's bank, for OUT direction pipes.
|
||||
*
|
||||
* \ingroup Group_PipePrimitiveRW_UC3B
|
||||
* \ingroup Group_PipePrimitiveRW_UC3
|
||||
*
|
||||
* \return Next byte in the currently selected pipe's FIFO buffer.
|
||||
*/
|
||||
|
@ -615,7 +615,7 @@
|
|||
|
||||
/** Writes one byte from the currently selected pipe's bank, for IN direction pipes.
|
||||
*
|
||||
* \ingroup Group_PipePrimitiveRW_UC3B
|
||||
* \ingroup Group_PipePrimitiveRW_UC3
|
||||
*
|
||||
* \param[in] Byte Next byte to write into the the currently selected pipe's FIFO buffer.
|
||||
*/
|
||||
|
@ -627,7 +627,7 @@
|
|||
|
||||
/** Discards one byte from the currently selected pipe's bank, for OUT direction pipes.
|
||||
*
|
||||
* \ingroup Group_PipePrimitiveRW_UC3B
|
||||
* \ingroup Group_PipePrimitiveRW_UC3
|
||||
*/
|
||||
static inline void Pipe_Discard_Byte(void) ATTR_ALWAYS_INLINE;
|
||||
static inline void Pipe_Discard_Byte(void)
|
||||
|
@ -640,7 +640,7 @@
|
|||
/** Reads two bytes from the currently selected pipe's bank in little endian format, for OUT
|
||||
* direction pipes.
|
||||
*
|
||||
* \ingroup Group_PipePrimitiveRW_UC3B
|
||||
* \ingroup Group_PipePrimitiveRW_UC3
|
||||
*
|
||||
* \return Next word in the currently selected pipe's FIFO buffer.
|
||||
*/
|
||||
|
@ -656,7 +656,7 @@
|
|||
/** Reads two bytes from the currently selected pipe's bank in big endian format, for OUT
|
||||
* direction pipes.
|
||||
*
|
||||
* \ingroup Group_PipePrimitiveRW_UC3B
|
||||
* \ingroup Group_PipePrimitiveRW_UC3
|
||||
*
|
||||
* \return Next word in the currently selected pipe's FIFO buffer.
|
||||
*/
|
||||
|
@ -672,7 +672,7 @@
|
|||
/** Writes two bytes to the currently selected pipe's bank in little endian format, for IN
|
||||
* direction pipes.
|
||||
*
|
||||
* \ingroup Group_PipePrimitiveRW_UC3B
|
||||
* \ingroup Group_PipePrimitiveRW_UC3
|
||||
*
|
||||
* \param[in] Word Next word to write to the currently selected pipe's FIFO buffer.
|
||||
*/
|
||||
|
@ -686,7 +686,7 @@
|
|||
/** Writes two bytes to the currently selected pipe's bank in big endian format, for IN
|
||||
* direction pipes.
|
||||
*
|
||||
* \ingroup Group_PipePrimitiveRW_UC3B
|
||||
* \ingroup Group_PipePrimitiveRW_UC3
|
||||
*
|
||||
* \param[in] Word Next word to write to the currently selected pipe's FIFO buffer.
|
||||
*/
|
||||
|
@ -699,7 +699,7 @@
|
|||
|
||||
/** Discards two bytes from the currently selected pipe's bank, for OUT direction pipes.
|
||||
*
|
||||
* \ingroup Group_PipePrimitiveRW_UC3B
|
||||
* \ingroup Group_PipePrimitiveRW_UC3
|
||||
*/
|
||||
static inline void Pipe_Discard_Word(void) ATTR_ALWAYS_INLINE;
|
||||
static inline void Pipe_Discard_Word(void)
|
||||
|
@ -713,7 +713,7 @@
|
|||
/** Reads four bytes from the currently selected pipe's bank in little endian format, for OUT
|
||||
* direction pipes.
|
||||
*
|
||||
* \ingroup Group_PipePrimitiveRW_UC3B
|
||||
* \ingroup Group_PipePrimitiveRW_UC3
|
||||
*
|
||||
* \return Next double word in the currently selected pipe's FIFO buffer.
|
||||
*/
|
||||
|
@ -731,7 +731,7 @@
|
|||
/** Reads four bytes from the currently selected pipe's bank in big endian format, for OUT
|
||||
* direction pipes.
|
||||
*
|
||||
* \ingroup Group_PipePrimitiveRW_UC3B
|
||||
* \ingroup Group_PipePrimitiveRW_UC3
|
||||
*
|
||||
* \return Next double word in the currently selected pipe's FIFO buffer.
|
||||
*/
|
||||
|
@ -749,7 +749,7 @@
|
|||
/** Writes four bytes to the currently selected pipe's bank in little endian format, for IN
|
||||
* direction pipes.
|
||||
*
|
||||
* \ingroup Group_PipePrimitiveRW_UC3B
|
||||
* \ingroup Group_PipePrimitiveRW_UC3
|
||||
*
|
||||
* \param[in] DWord Next double word to write to the currently selected pipe's FIFO buffer.
|
||||
*/
|
||||
|
@ -765,7 +765,7 @@
|
|||
/** Writes four bytes to the currently selected pipe's bank in big endian format, for IN
|
||||
* direction pipes.
|
||||
*
|
||||
* \ingroup Group_PipePrimitiveRW_UC3B
|
||||
* \ingroup Group_PipePrimitiveRW_UC3
|
||||
*
|
||||
* \param[in] DWord Next double word to write to the currently selected pipe's FIFO buffer.
|
||||
*/
|
||||
|
@ -780,7 +780,7 @@
|
|||
|
||||
/** Discards four bytes from the currently selected pipe's bank, for OUT direction pipes.
|
||||
*
|
||||
* \ingroup Group_PipePrimitiveRW_UC3B
|
||||
* \ingroup Group_PipePrimitiveRW_UC3
|
||||
*/
|
||||
static inline void Pipe_Discard_DWord(void) ATTR_ALWAYS_INLINE;
|
||||
static inline void Pipe_Discard_DWord(void)
|
||||
|
@ -861,7 +861,7 @@
|
|||
/** Spin-loops until the currently selected non-control pipe is ready for the next packed of data to be read
|
||||
* or written to it, aborting in the case of an error condition (such as a timeout or device disconnect).
|
||||
*
|
||||
* \ingroup Group_PipeRW_UC3B
|
||||
* \ingroup Group_PipeRW_UC3
|
||||
*
|
||||
* \return A value from the \ref Pipe_WaitUntilReady_ErrorCodes_t enum.
|
||||
*/
|
|
@ -29,24 +29,24 @@
|
|||
*/
|
||||
|
||||
/** \file
|
||||
* \brief USB Controller definitions for the AVR32 UC3B microcontrollers.
|
||||
* \copydetails Group_USBManagement_UC3B
|
||||
* \brief USB Controller definitions for the AVR32 UC3 microcontrollers.
|
||||
* \copydetails Group_USBManagement_UC3
|
||||
*
|
||||
* \note This file should not be included directly. It is automatically included as needed by the USB driver
|
||||
* dispatch header located in LUFA/Drivers/USB/USB.h.
|
||||
*/
|
||||
|
||||
/** \ingroup Group_USBManagement
|
||||
* \defgroup Group_USBManagement_UC3B USB Interface Management (UC3B)
|
||||
* \brief USB Controller definitions for the AVR32 UC3B microcontrollers.
|
||||
* \defgroup Group_USBManagement_UC3 USB Interface Management (UC3)
|
||||
* \brief USB Controller definitions for the AVR32 UC3 microcontrollers.
|
||||
*
|
||||
* Functions, macros, variables, enums and types related to the setup and management of the USB interface.
|
||||
*
|
||||
* @{
|
||||
*/
|
||||
|
||||
#ifndef __USBCONTROLLER_UC3B_H__
|
||||
#define __USBCONTROLLER_UC3B_H__
|
||||
#ifndef __USBCONTROLLER_UC3_H__
|
||||
#define __USBCONTROLLER_UC3_H__
|
||||
|
||||
/* Includes: */
|
||||
#include "../../../../Common/Common.h"
|
|
@ -29,7 +29,7 @@
|
|||
*/
|
||||
|
||||
/** \file
|
||||
* \brief USB Controller Interrupt definitions for the AVR32 UC3B microcontrollers.
|
||||
* \brief USB Controller Interrupt definitions for the AVR32 UC3 microcontrollers.
|
||||
*
|
||||
* This file contains definitions required for the correct handling of low level USB service routine interrupts
|
||||
* from the USB controller.
|
||||
|
@ -38,8 +38,8 @@
|
|||
* dispatch header located in LUFA/Drivers/USB/USB.h.
|
||||
*/
|
||||
|
||||
#ifndef __USBINTERRUPT_UC3B_H__
|
||||
#define __USBINTERRUPT_UC3B_H__
|
||||
#ifndef __USBINTERRUPT_UC3_H__
|
||||
#define __USBINTERRUPT_UC3_H__
|
||||
|
||||
/* Includes: */
|
||||
#include "../../../../Common/Common.h"
|
|
@ -1,355 +0,0 @@
|
|||
/*
|
||||
LUFA Library
|
||||
Copyright (C) Dean Camera, 2011.
|
||||
|
||||
dean [at] fourwalledcubicle [dot] com
|
||||
www.lufa-lib.org
|
||||
*/
|
||||
|
||||
/*
|
||||
Copyright 2011 Dean Camera (dean [at] fourwalledcubicle [dot] com)
|
||||
|
||||
Permission to use, copy, modify, distribute, and sell this
|
||||
software and its documentation for any purpose is hereby granted
|
||||
without fee, provided that the above copyright notice appear in
|
||||
all copies and that both that the copyright notice and this
|
||||
permission notice and warranty disclaimer appear in supporting
|
||||
documentation, and that the name of the author not be used in
|
||||
advertising or publicity pertaining to distribution of the
|
||||
software without specific, written prior permission.
|
||||
|
||||
The author disclaim all warranties with regard to this
|
||||
software, including all implied warranties of merchantability
|
||||
and fitness. In no event shall the author be liable for any
|
||||
special, indirect or consequential damages or any damages
|
||||
whatsoever resulting from loss of use, data or profits, whether
|
||||
in an action of contract, negligence or other tortious action,
|
||||
arising out of or in connection with the use or performance of
|
||||
this software.
|
||||
*/
|
||||
|
||||
#define __INCLUDE_FROM_USB_DRIVER
|
||||
#include "../USBMode.h"
|
||||
|
||||
#if defined(USB_CAN_BE_HOST)
|
||||
|
||||
#define __INCLUDE_FROM_HOST_C
|
||||
#include "../Host.h"
|
||||
|
||||
void USB_Host_ProcessNextHostState(void)
|
||||
{
|
||||
uint8_t ErrorCode = HOST_ENUMERROR_NoError;
|
||||
uint8_t SubErrorCode = HOST_ENUMERROR_NoError;
|
||||
|
||||
static uint16_t WaitMSRemaining;
|
||||
static uint8_t PostWaitState;
|
||||
|
||||
switch (USB_HostState)
|
||||
{
|
||||
case HOST_STATE_WaitForDevice:
|
||||
if (WaitMSRemaining)
|
||||
{
|
||||
if ((SubErrorCode = USB_Host_WaitMS(1)) != HOST_WAITERROR_Successful)
|
||||
{
|
||||
USB_HostState = PostWaitState;
|
||||
ErrorCode = HOST_ENUMERROR_WaitStage;
|
||||
break;
|
||||
}
|
||||
|
||||
if (!(--WaitMSRemaining))
|
||||
USB_HostState = PostWaitState;
|
||||
}
|
||||
|
||||
break;
|
||||
case HOST_STATE_Powered:
|
||||
WaitMSRemaining = HOST_DEVICE_SETTLE_DELAY_MS;
|
||||
|
||||
USB_HostState = HOST_STATE_Powered_WaitForDeviceSettle;
|
||||
break;
|
||||
case HOST_STATE_Powered_WaitForDeviceSettle:
|
||||
if (WaitMSRemaining--)
|
||||
{
|
||||
_delay_ms(1);
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
USB_Host_VBUS_Manual_Off();
|
||||
|
||||
USB_OTGPAD_On();
|
||||
USB_Host_VBUS_Auto_Enable();
|
||||
USB_Host_VBUS_Auto_On();
|
||||
|
||||
USB_HostState = HOST_STATE_Powered_WaitForConnect;
|
||||
}
|
||||
|
||||
break;
|
||||
case HOST_STATE_Powered_WaitForConnect:
|
||||
if (USB_INT_HasOccurred(USB_INT_DCONNI))
|
||||
{
|
||||
USB_INT_Clear(USB_INT_DCONNI);
|
||||
USB_INT_Clear(USB_INT_DDISCI);
|
||||
|
||||
USB_INT_Clear(USB_INT_VBERRI);
|
||||
USB_INT_Enable(USB_INT_VBERRI);
|
||||
|
||||
USB_Host_ResumeBus();
|
||||
Pipe_ClearPipes();
|
||||
|
||||
HOST_TASK_NONBLOCK_WAIT(100, HOST_STATE_Powered_DoReset);
|
||||
}
|
||||
|
||||
break;
|
||||
case HOST_STATE_Powered_DoReset:
|
||||
USB_Host_ResetDevice();
|
||||
|
||||
HOST_TASK_NONBLOCK_WAIT(200, HOST_STATE_Powered_ConfigPipe);
|
||||
break;
|
||||
case HOST_STATE_Powered_ConfigPipe:
|
||||
Pipe_ConfigurePipe(PIPE_CONTROLPIPE, EP_TYPE_CONTROL,
|
||||
PIPE_TOKEN_SETUP, ENDPOINT_CONTROLEP,
|
||||
PIPE_CONTROLPIPE_DEFAULT_SIZE, PIPE_BANK_SINGLE);
|
||||
|
||||
if (!(Pipe_IsConfigured()))
|
||||
{
|
||||
ErrorCode = HOST_ENUMERROR_PipeConfigError;
|
||||
SubErrorCode = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
USB_HostState = HOST_STATE_Default;
|
||||
break;
|
||||
case HOST_STATE_Default:
|
||||
USB_ControlRequest = (USB_Request_Header_t)
|
||||
{
|
||||
.bmRequestType = (REQDIR_DEVICETOHOST | REQTYPE_STANDARD | REQREC_DEVICE),
|
||||
.bRequest = REQ_GetDescriptor,
|
||||
.wValue = (DTYPE_Device << 8),
|
||||
.wIndex = 0,
|
||||
.wLength = 8,
|
||||
};
|
||||
|
||||
uint8_t DataBuffer[8];
|
||||
|
||||
if ((SubErrorCode = USB_Host_SendControlRequest(DataBuffer)) != HOST_SENDCONTROL_Successful)
|
||||
{
|
||||
ErrorCode = HOST_ENUMERROR_ControlError;
|
||||
break;
|
||||
}
|
||||
|
||||
USB_ControlPipeSize = DataBuffer[offsetof(USB_Descriptor_Device_t, Endpoint0Size)];
|
||||
|
||||
USB_Host_ResetDevice();
|
||||
|
||||
HOST_TASK_NONBLOCK_WAIT(200, HOST_STATE_Default_PostReset);
|
||||
break;
|
||||
case HOST_STATE_Default_PostReset:
|
||||
Pipe_ConfigurePipe(PIPE_CONTROLPIPE, EP_TYPE_CONTROL,
|
||||
PIPE_TOKEN_SETUP, ENDPOINT_CONTROLEP,
|
||||
USB_ControlPipeSize, PIPE_BANK_SINGLE);
|
||||
|
||||
if (!(Pipe_IsConfigured()))
|
||||
{
|
||||
ErrorCode = HOST_ENUMERROR_PipeConfigError;
|
||||
SubErrorCode = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
USB_ControlRequest = (USB_Request_Header_t)
|
||||
{
|
||||
.bmRequestType = (REQDIR_HOSTTODEVICE | REQTYPE_STANDARD | REQREC_DEVICE),
|
||||
.bRequest = REQ_SetAddress,
|
||||
.wValue = USB_HOST_DEVICEADDRESS,
|
||||
.wIndex = 0,
|
||||
.wLength = 0,
|
||||
};
|
||||
|
||||
if ((SubErrorCode = USB_Host_SendControlRequest(NULL)) != HOST_SENDCONTROL_Successful)
|
||||
{
|
||||
ErrorCode = HOST_ENUMERROR_ControlError;
|
||||
break;
|
||||
}
|
||||
|
||||
HOST_TASK_NONBLOCK_WAIT(100, HOST_STATE_Default_PostAddressSet);
|
||||
break;
|
||||
case HOST_STATE_Default_PostAddressSet:
|
||||
USB_Host_SetDeviceAddress(USB_HOST_DEVICEADDRESS);
|
||||
|
||||
EVENT_USB_Host_DeviceEnumerationComplete();
|
||||
USB_HostState = HOST_STATE_Addressed;
|
||||
break;
|
||||
}
|
||||
|
||||
if ((ErrorCode != HOST_ENUMERROR_NoError) && (USB_HostState != HOST_STATE_Unattached))
|
||||
{
|
||||
EVENT_USB_Host_DeviceEnumerationFailed(ErrorCode, SubErrorCode);
|
||||
|
||||
USB_Host_VBUS_Auto_Off();
|
||||
|
||||
EVENT_USB_Host_DeviceUnattached();
|
||||
|
||||
USB_ResetInterface();
|
||||
}
|
||||
}
|
||||
|
||||
uint8_t USB_Host_WaitMS(uint8_t MS)
|
||||
{
|
||||
bool BusSuspended = USB_Host_IsBusSuspended();
|
||||
uint8_t ErrorCode = HOST_WAITERROR_Successful;
|
||||
bool HSOFIEnabled = USB_INT_IsEnabled(USB_INT_HSOFI);
|
||||
|
||||
USB_INT_Disable(USB_INT_HSOFI);
|
||||
USB_INT_Clear(USB_INT_HSOFI);
|
||||
|
||||
USB_Host_ResumeBus();
|
||||
|
||||
while (MS)
|
||||
{
|
||||
if (USB_INT_HasOccurred(USB_INT_HSOFI))
|
||||
{
|
||||
USB_INT_Clear(USB_INT_HSOFI);
|
||||
MS--;
|
||||
}
|
||||
|
||||
if ((USB_HostState == HOST_STATE_Unattached) || (USB_CurrentMode != USB_MODE_Host))
|
||||
{
|
||||
ErrorCode = HOST_WAITERROR_DeviceDisconnect;
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
if (Pipe_IsError() == true)
|
||||
{
|
||||
Pipe_ClearError();
|
||||
ErrorCode = HOST_WAITERROR_PipeError;
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
if (Pipe_IsStalled() == true)
|
||||
{
|
||||
Pipe_ClearStall();
|
||||
ErrorCode = HOST_WAITERROR_SetupStalled;
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (BusSuspended)
|
||||
USB_Host_SuspendBus();
|
||||
|
||||
if (HSOFIEnabled)
|
||||
USB_INT_Enable(USB_INT_HSOFI);
|
||||
|
||||
return ErrorCode;
|
||||
}
|
||||
|
||||
static void USB_Host_ResetDevice(void)
|
||||
{
|
||||
bool BusSuspended = USB_Host_IsBusSuspended();
|
||||
|
||||
USB_INT_Disable(USB_INT_DDISCI);
|
||||
|
||||
USB_Host_ResetBus();
|
||||
while (!(USB_Host_IsBusResetComplete()));
|
||||
USB_Host_ResumeBus();
|
||||
|
||||
bool HSOFIEnabled = USB_INT_IsEnabled(USB_INT_HSOFI);
|
||||
|
||||
USB_INT_Disable(USB_INT_HSOFI);
|
||||
USB_INT_Clear(USB_INT_HSOFI);
|
||||
|
||||
for (uint8_t MSRem = 10; MSRem != 0; MSRem--)
|
||||
{
|
||||
/* Workaround for powerless-pull-up devices. After a USB bus reset,
|
||||
all disconnection interrupts are suppressed while a USB frame is
|
||||
looked for - if it is found within 10ms, the device is still
|
||||
present. */
|
||||
|
||||
if (USB_INT_HasOccurred(USB_INT_HSOFI))
|
||||
{
|
||||
USB_INT_Clear(USB_INT_HSOFI);
|
||||
USB_INT_Clear(USB_INT_DDISCI);
|
||||
break;
|
||||
}
|
||||
|
||||
_delay_ms(1);
|
||||
}
|
||||
|
||||
if (HSOFIEnabled)
|
||||
USB_INT_Enable(USB_INT_HSOFI);
|
||||
|
||||
if (BusSuspended)
|
||||
USB_Host_SuspendBus();
|
||||
|
||||
USB_INT_Enable(USB_INT_DDISCI);
|
||||
}
|
||||
|
||||
uint8_t USB_Host_SetDeviceConfiguration(const uint8_t ConfigNumber)
|
||||
{
|
||||
USB_ControlRequest = (USB_Request_Header_t)
|
||||
{
|
||||
.bmRequestType = (REQDIR_HOSTTODEVICE | REQTYPE_STANDARD | REQREC_DEVICE),
|
||||
.bRequest = REQ_SetConfiguration,
|
||||
.wValue = ConfigNumber,
|
||||
.wIndex = 0,
|
||||
.wLength = 0,
|
||||
};
|
||||
|
||||
Pipe_SelectPipe(PIPE_CONTROLPIPE);
|
||||
|
||||
return USB_Host_SendControlRequest(NULL);
|
||||
}
|
||||
|
||||
uint8_t USB_Host_GetDeviceDescriptor(void* const DeviceDescriptorPtr)
|
||||
{
|
||||
USB_ControlRequest = (USB_Request_Header_t)
|
||||
{
|
||||
.bmRequestType = (REQDIR_DEVICETOHOST | REQTYPE_STANDARD | REQREC_DEVICE),
|
||||
.bRequest = REQ_GetDescriptor,
|
||||
.wValue = (DTYPE_Device << 8),
|
||||
.wIndex = 0,
|
||||
.wLength = sizeof(USB_Descriptor_Device_t),
|
||||
};
|
||||
|
||||
Pipe_SelectPipe(PIPE_CONTROLPIPE);
|
||||
|
||||
return USB_Host_SendControlRequest(DeviceDescriptorPtr);
|
||||
}
|
||||
|
||||
uint8_t USB_Host_GetDeviceStringDescriptor(const uint8_t Index,
|
||||
void* const Buffer,
|
||||
const uint8_t BufferLength)
|
||||
{
|
||||
USB_ControlRequest = (USB_Request_Header_t)
|
||||
{
|
||||
.bmRequestType = (REQDIR_DEVICETOHOST | REQTYPE_STANDARD | REQREC_DEVICE),
|
||||
.bRequest = REQ_GetDescriptor,
|
||||
.wValue = (DTYPE_String << 8) | Index,
|
||||
.wIndex = 0,
|
||||
.wLength = BufferLength,
|
||||
};
|
||||
|
||||
Pipe_SelectPipe(PIPE_CONTROLPIPE);
|
||||
|
||||
return USB_Host_SendControlRequest(Buffer);
|
||||
}
|
||||
|
||||
uint8_t USB_Host_ClearPipeStall(const uint8_t EndpointNum)
|
||||
{
|
||||
USB_ControlRequest = (USB_Request_Header_t)
|
||||
{
|
||||
.bmRequestType = (REQDIR_HOSTTODEVICE | REQTYPE_STANDARD | REQREC_ENDPOINT),
|
||||
.bRequest = REQ_ClearFeature,
|
||||
.wValue = FEATURE_SEL_EndpointHalt,
|
||||
.wIndex = EndpointNum,
|
||||
.wLength = 0,
|
||||
};
|
||||
|
||||
Pipe_SelectPipe(PIPE_CONTROLPIPE);
|
||||
|
||||
return USB_Host_SendControlRequest(NULL);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
|
@ -1,422 +0,0 @@
|
|||
/*
|
||||
LUFA Library
|
||||
Copyright (C) Dean Camera, 2011.
|
||||
|
||||
dean [at] fourwalledcubicle [dot] com
|
||||
www.lufa-lib.org
|
||||
*/
|
||||
|
||||
/*
|
||||
Copyright 2011 Dean Camera (dean [at] fourwalledcubicle [dot] com)
|
||||
|
||||
Permission to use, copy, modify, distribute, and sell this
|
||||
software and its documentation for any purpose is hereby granted
|
||||
without fee, provided that the above copyright notice appear in
|
||||
all copies and that both that the copyright notice and this
|
||||
permission notice and warranty disclaimer appear in supporting
|
||||
documentation, and that the name of the author not be used in
|
||||
advertising or publicity pertaining to distribution of the
|
||||
software without specific, written prior permission.
|
||||
|
||||
The author disclaim all warranties with regard to this
|
||||
software, including all implied warranties of merchantability
|
||||
and fitness. In no event shall the author be liable for any
|
||||
special, indirect or consequential damages or any damages
|
||||
whatsoever resulting from loss of use, data or profits, whether
|
||||
in an action of contract, negligence or other tortious action,
|
||||
arising out of or in connection with the use or performance of
|
||||
this software.
|
||||
*/
|
||||
|
||||
/** \file
|
||||
* \brief USB Host definitions for the AVR32 UC3B microcontrollers.
|
||||
* \copydetails Group_Host_UC3B
|
||||
*
|
||||
* \note This file should not be included directly. It is automatically included as needed by the USB driver
|
||||
* dispatch header located in LUFA/Drivers/USB/USB.h.
|
||||
*/
|
||||
|
||||
/** \ingroup Group_Host
|
||||
* \defgroup Group_Host_UC3B Host Management (UC3B)
|
||||
* \brief USB Host definitions for the AVR32 UC3B microcontrollers.
|
||||
*
|
||||
* Architecture specific USB Host definitions for the Atmel 32-bit AVR UC3B microcontrollers.
|
||||
*
|
||||
* @{
|
||||
*/
|
||||
|
||||
#ifndef __USBHOST_UC3B_H__
|
||||
#define __USBHOST_UC3B_H__
|
||||
|
||||
/* Includes: */
|
||||
#include "../../../../Common/Common.h"
|
||||
#include "../StdDescriptors.h"
|
||||
#include "../Pipe.h"
|
||||
#include "../USBInterrupt.h"
|
||||
|
||||
/* Enable C linkage for C++ Compilers: */
|
||||
#if defined(__cplusplus)
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/* Preprocessor Checks: */
|
||||
#if !defined(__INCLUDE_FROM_USB_DRIVER)
|
||||
#error Do not include this file directly. Include LUFA/Drivers/USB/USB.h instead.
|
||||
#endif
|
||||
|
||||
/* Public Interface - May be used in end-application: */
|
||||
/* Macros: */
|
||||
/** Indicates the fixed USB device address which any attached device is enumerated to when in
|
||||
* host mode. As only one USB device may be attached to the AVR in host mode at any one time
|
||||
* and that the address used is not important (other than the fact that it is non-zero), a
|
||||
* fixed value is specified by the library.
|
||||
*/
|
||||
#define USB_HOST_DEVICEADDRESS 1
|
||||
|
||||
#if !defined(USB_HOST_TIMEOUT_MS) || defined(__DOXYGEN__)
|
||||
/** Constant for the maximum software timeout period of sent USB control transactions to an attached
|
||||
* device. If a device fails to respond to a sent control request within this period, the
|
||||
* library will return a timeout error code.
|
||||
*
|
||||
* This value may be overridden in the user project makefile as the value of the
|
||||
* \ref USB_HOST_TIMEOUT_MS token, and passed to the compiler using the -D switch.
|
||||
*/
|
||||
#define USB_HOST_TIMEOUT_MS 1000
|
||||
#endif
|
||||
|
||||
#if !defined(HOST_DEVICE_SETTLE_DELAY_MS) || defined(__DOXYGEN__)
|
||||
/** Constant for the delay in milliseconds after a device is connected before the library
|
||||
* will start the enumeration process. Some devices require a delay of up to 5 seconds
|
||||
* after connection before the enumeration process can start or incorrect operation will
|
||||
* occur.
|
||||
*
|
||||
* The default delay value may be overridden in the user project makefile by defining the
|
||||
* \c HOST_DEVICE_SETTLE_DELAY_MS token to the required delay in milliseconds, and passed to the
|
||||
* compiler using the -D switch.
|
||||
*/
|
||||
#define HOST_DEVICE_SETTLE_DELAY_MS 1000
|
||||
#endif
|
||||
|
||||
/* Enums: */
|
||||
/** Enum for the error codes for the \ref EVENT_USB_Host_HostError() event.
|
||||
*
|
||||
* \see \ref Group_Events for more information on this event.
|
||||
*/
|
||||
enum USB_Host_ErrorCodes_t
|
||||
{
|
||||
HOST_ERROR_VBusVoltageDip = 0, /**< VBUS voltage dipped to an unacceptable level. This
|
||||
* error may be the result of an attached device drawing
|
||||
* too much current from the VBUS line, or due to the
|
||||
* AVR's power source being unable to supply sufficient
|
||||
* current.
|
||||
*/
|
||||
};
|
||||
|
||||
/** Enum for the error codes for the \ref EVENT_USB_Host_DeviceEnumerationFailed() event.
|
||||
*
|
||||
* \see \ref Group_Events for more information on this event.
|
||||
*/
|
||||
enum USB_Host_EnumerationErrorCodes_t
|
||||
{
|
||||
HOST_ENUMERROR_NoError = 0, /**< No error occurred. Used internally, this is not a valid
|
||||
* ErrorCode parameter value for the \ref EVENT_USB_Host_DeviceEnumerationFailed()
|
||||
* event.
|
||||
*/
|
||||
HOST_ENUMERROR_WaitStage = 1, /**< One of the delays between enumeration steps failed
|
||||
* to complete successfully, due to a timeout or other
|
||||
* error.
|
||||
*/
|
||||
HOST_ENUMERROR_NoDeviceDetected = 2, /**< No device was detected, despite the USB data lines
|
||||
* indicating the attachment of a device.
|
||||
*/
|
||||
HOST_ENUMERROR_ControlError = 3, /**< One of the enumeration control requests failed to
|
||||
* complete successfully.
|
||||
*/
|
||||
HOST_ENUMERROR_PipeConfigError = 4, /**< The default control pipe (address 0) failed to
|
||||
* configure correctly.
|
||||
*/
|
||||
};
|
||||
|
||||
/* Inline Functions: */
|
||||
/** Returns the current USB frame number, when in host mode. Every millisecond the USB bus is active (i.e. not suspended)
|
||||
* the frame number is incremented by one.
|
||||
*/
|
||||
static inline uint16_t USB_Host_GetFrameNumber(void)
|
||||
{
|
||||
return AVR32_USBB_UHFNUM;
|
||||
}
|
||||
|
||||
#if !defined(NO_SOF_EVENTS)
|
||||
/** Enables the host mode Start Of Frame events. When enabled, this causes the
|
||||
* \ref EVENT_USB_Host_StartOfFrame() event to fire once per millisecond, synchronized to the USB bus,
|
||||
* at the start of each USB frame when a device is enumerated while in host mode.
|
||||
*
|
||||
* \note Not available when the \c NO_SOF_EVENTS compile time token is defined.
|
||||
*/
|
||||
static inline void USB_Host_EnableSOFEvents(void) ATTR_ALWAYS_INLINE;
|
||||
static inline void USB_Host_EnableSOFEvents(void)
|
||||
{
|
||||
USB_INT_Enable(USB_INT_HSOFI);
|
||||
}
|
||||
|
||||
/** Disables the host mode Start Of Frame events. When disabled, this stops the firing of the
|
||||
* \ref EVENT_USB_Host_StartOfFrame() event when enumerated in host mode.
|
||||
*
|
||||
* \note Not available when the NO_SOF_EVENTS compile time token is defined.
|
||||
*/
|
||||
static inline void USB_Host_DisableSOFEvents(void) ATTR_ALWAYS_INLINE;
|
||||
static inline void USB_Host_DisableSOFEvents(void)
|
||||
{
|
||||
USB_INT_Disable(USB_INT_HSOFI);
|
||||
}
|
||||
#endif
|
||||
|
||||
/** Resets the USB bus, including the endpoints in any attached device and pipes on the AVR host.
|
||||
* USB bus resets leave the default control pipe configured (if already configured).
|
||||
*
|
||||
* If the USB bus has been suspended prior to issuing a bus reset, the attached device will be
|
||||
* woken up automatically and the bus resumed after the reset has been correctly issued.
|
||||
*/
|
||||
static inline void USB_Host_ResetBus(void) ATTR_ALWAYS_INLINE;
|
||||
static inline void USB_Host_ResetBus(void)
|
||||
{
|
||||
AVR32_USBB.UHCON.reset = true;
|
||||
}
|
||||
|
||||
/** Determines if a previously issued bus reset (via the \ref USB_Host_ResetBus() macro) has
|
||||
* completed.
|
||||
*
|
||||
* \return Boolean \c true if no bus reset is currently being sent, \c false otherwise.
|
||||
*/
|
||||
static inline bool USB_Host_IsBusResetComplete(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;
|
||||
static inline bool USB_Host_IsBusResetComplete(void)
|
||||
{
|
||||
return AVR32_USBB.UHCON.reset;
|
||||
}
|
||||
|
||||
/** Resumes USB communications with an attached and enumerated device, by resuming the transmission
|
||||
* of the 1MS Start Of Frame messages to the device. When resumed, USB communications between the
|
||||
* host and attached device may occur.
|
||||
*/
|
||||
static inline void USB_Host_ResumeBus(void) ATTR_ALWAYS_INLINE;
|
||||
static inline void USB_Host_ResumeBus(void)
|
||||
{
|
||||
AVR32_USBB.UHCON.sofe = true;
|
||||
}
|
||||
|
||||
/** Suspends the USB bus, preventing any communications from occurring between the host and attached
|
||||
* device until the bus has been resumed. This stops the transmission of the 1MS Start Of Frame
|
||||
* messages to the device.
|
||||
*/
|
||||
static inline void USB_Host_SuspendBus(void) ATTR_ALWAYS_INLINE;
|
||||
static inline void USB_Host_SuspendBus(void)
|
||||
{
|
||||
AVR32_USBB.UHCON.sofe = false;
|
||||
}
|
||||
|
||||
/** Determines if the USB bus has been suspended via the use of the \ref USB_Host_SuspendBus() macro,
|
||||
* false otherwise. While suspended, no USB communications can occur until the bus is resumed,
|
||||
* except for the Remote Wakeup event from the device if supported.
|
||||
*
|
||||
* \return Boolean \c true if the bus is currently suspended, \c false otherwise.
|
||||
*/
|
||||
static inline bool USB_Host_IsBusSuspended(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;
|
||||
static inline bool USB_Host_IsBusSuspended(void)
|
||||
{
|
||||
return AVR32_USBB.UHCON.sofe;
|
||||
}
|
||||
|
||||
/** Determines if the attached device is currently enumerated in Full Speed mode (12Mb/s), or
|
||||
* false if the attached device is enumerated in Low Speed mode (1.5Mb/s).
|
||||
*
|
||||
* \return Boolean \c true if the attached device is enumerated in Full Speed mode, \c false otherwise.
|
||||
*/
|
||||
static inline bool USB_Host_IsDeviceFullSpeed(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;
|
||||
static inline bool USB_Host_IsDeviceFullSpeed(void)
|
||||
{
|
||||
return (AVR32_USBB.USBSTA.speed == AVR32_USBB_SPEED_FULL);
|
||||
}
|
||||
|
||||
/** Determines if the attached device is currently issuing a Remote Wakeup request, requesting
|
||||
* that the host resume the USB bus and wake up the device, false otherwise.
|
||||
*
|
||||
* \return Boolean \c true if the attached device has sent a Remote Wakeup request, \c false otherwise.
|
||||
*/
|
||||
static inline bool USB_Host_IsRemoteWakeupSent(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;
|
||||
static inline bool USB_Host_IsRemoteWakeupSent(void)
|
||||
{
|
||||
return AVR32_USBB.UHINT.rxrsmi;
|
||||
}
|
||||
|
||||
/** Clears the flag indicating that a Remote Wakeup request has been issued by an attached device. */
|
||||
static inline void USB_Host_ClearRemoteWakeupSent(void) ATTR_ALWAYS_INLINE;
|
||||
static inline void USB_Host_ClearRemoteWakeupSent(void)
|
||||
{
|
||||
AVR32_USBB.UHINTCLR.rxrsmic = true;
|
||||
}
|
||||
|
||||
/** Accepts a Remote Wakeup request from an attached device. This must be issued in response to
|
||||
* a device's Remote Wakeup request within 2ms for the request to be accepted and the bus to
|
||||
* be resumed.
|
||||
*/
|
||||
static inline void USB_Host_ResumeFromWakeupRequest(void) ATTR_ALWAYS_INLINE;
|
||||
static inline void USB_Host_ResumeFromWakeupRequest(void)
|
||||
{
|
||||
AVR32_USBB.UHCON.resume = true;
|
||||
}
|
||||
|
||||
/** Determines if a resume from Remote Wakeup request is currently being sent to an attached
|
||||
* device.
|
||||
*
|
||||
* \return Boolean \c true if no resume request is currently being sent, \c false otherwise.
|
||||
*/
|
||||
static inline bool USB_Host_IsResumeFromWakeupRequestSent(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;
|
||||
static inline bool USB_Host_IsResumeFromWakeupRequestSent(void)
|
||||
{
|
||||
return AVR32_USBB.UHCON.resume;
|
||||
}
|
||||
|
||||
/* Function Prototypes: */
|
||||
/** Convenience function. This routine sends a SET CONFIGURATION standard request to the attached
|
||||
* device, with the given configuration index. This can be used to easily set the device
|
||||
* configuration without creating and sending the request manually.
|
||||
*
|
||||
* \note After this routine returns, the control pipe will be selected.
|
||||
*
|
||||
* \param[in] ConfigNumber Configuration index to send to the device.
|
||||
*
|
||||
* \return A value from the \ref USB_Host_SendControlErrorCodes_t enum to indicate the result.
|
||||
*/
|
||||
uint8_t USB_Host_SetDeviceConfiguration(const uint8_t ConfigNumber);
|
||||
|
||||
/** Convenience function. This routine sends a GET DESCRIPTOR standard request to the attached
|
||||
* device, requesting the device descriptor. This can be used to easily retrieve information
|
||||
* about the device such as its VID, PID and power requirements.
|
||||
*
|
||||
* \note After this routine returns, the control pipe will be selected.
|
||||
*
|
||||
* \param[out] DeviceDescriptorPtr Pointer to the destination device descriptor structure where
|
||||
* the read data is to be stored.
|
||||
*
|
||||
* \return A value from the \ref USB_Host_SendControlErrorCodes_t enum to indicate the result.
|
||||
*/
|
||||
uint8_t USB_Host_GetDeviceDescriptor(void* const DeviceDescriptorPtr);
|
||||
|
||||
/** Convenience function. This routine sends a GET DESCRIPTOR standard request to the attached
|
||||
* device, requesting the string descriptor of the specified index. This can be used to easily
|
||||
* retrieve string descriptors from the device by index, after the index is obtained from the
|
||||
* Device or Configuration descriptors.
|
||||
*
|
||||
* \note After this routine returns, the control pipe will be selected.
|
||||
*
|
||||
* \param[in] Index Index of the string index to retrieve.
|
||||
* \param[out] Buffer Pointer to the destination buffer where the retrieved string descriptor is
|
||||
* to be stored.
|
||||
* \param[in] BufferLength Maximum size of the string descriptor which can be stored into the buffer.
|
||||
*
|
||||
* \return A value from the \ref USB_Host_SendControlErrorCodes_t enum to indicate the result.
|
||||
*/
|
||||
uint8_t USB_Host_GetDeviceStringDescriptor(const uint8_t Index,
|
||||
void* const Buffer,
|
||||
const uint8_t BufferLength);
|
||||
|
||||
/** Clears a stall condition on the given pipe, via a CLEAR FEATURE standard request to the attached device.
|
||||
*
|
||||
* \note After this routine returns, the control pipe will be selected.
|
||||
*
|
||||
* \param[in] EndpointIndex Index of the endpoint to clear, including the endpoint's direction.
|
||||
*
|
||||
* \return A value from the \ref USB_Host_SendControlErrorCodes_t enum to indicate the result.
|
||||
*/
|
||||
uint8_t USB_Host_ClearPipeStall(const uint8_t EndpointIndex);
|
||||
|
||||
/* Private Interface - For use in library only: */
|
||||
#if !defined(__DOXYGEN__)
|
||||
/* Macros: */
|
||||
static inline void USB_Host_HostMode_On(void) ATTR_ALWAYS_INLINE;
|
||||
static inline void USB_Host_HostMode_On(void)
|
||||
{
|
||||
// Not required for UC3B
|
||||
}
|
||||
|
||||
static inline void USB_Host_HostMode_Off(void) ATTR_ALWAYS_INLINE;
|
||||
static inline void USB_Host_HostMode_Off(void)
|
||||
{
|
||||
// Not required for UC3B
|
||||
}
|
||||
|
||||
static inline void USB_Host_VBUS_Auto_Enable(void) ATTR_ALWAYS_INLINE;
|
||||
static inline void USB_Host_VBUS_Auto_Enable(void)
|
||||
{
|
||||
AVR32_USBB.USBCON.vbushwc = false;
|
||||
}
|
||||
|
||||
static inline void USB_Host_VBUS_Manual_Enable(void) ATTR_ALWAYS_INLINE;
|
||||
static inline void USB_Host_VBUS_Manual_Enable(void)
|
||||
{
|
||||
AVR32_USBB.USBCON.vbushwc = true;
|
||||
}
|
||||
|
||||
static inline void USB_Host_VBUS_Auto_On(void) ATTR_ALWAYS_INLINE;
|
||||
static inline void USB_Host_VBUS_Auto_On(void)
|
||||
{
|
||||
AVR32_USBB.USBSTASET.vbusrqs = true;
|
||||
}
|
||||
|
||||
static inline void USB_Host_VBUS_Manual_On(void) ATTR_ALWAYS_INLINE;
|
||||
static inline void USB_Host_VBUS_Manual_On(void)
|
||||
{
|
||||
AVR32_USBB.USBSTASET.vbusrqs = true;
|
||||
}
|
||||
|
||||
static inline void USB_Host_VBUS_Auto_Off(void) ATTR_ALWAYS_INLINE;
|
||||
static inline void USB_Host_VBUS_Auto_Off(void)
|
||||
{
|
||||
AVR32_USBB.USBSTACLR.vbusrqc = true;
|
||||
}
|
||||
|
||||
static inline void USB_Host_VBUS_Manual_Off(void) ATTR_ALWAYS_INLINE;
|
||||
static inline void USB_Host_VBUS_Manual_Off(void)
|
||||
{
|
||||
AVR32_USBB.USBSTACLR.vbusrqc = true;
|
||||
}
|
||||
|
||||
static inline void USB_Host_SetDeviceAddress(const uint8_t Address) ATTR_ALWAYS_INLINE;
|
||||
static inline void USB_Host_SetDeviceAddress(const uint8_t Address)
|
||||
{
|
||||
AVR32_USBB.UHADDR1.uhaddr_p0 = Address;
|
||||
AVR32_USBB.UHADDR1.uhaddr_p1 = Address;
|
||||
AVR32_USBB.UHADDR1.uhaddr_p2 = Address;
|
||||
AVR32_USBB.UHADDR1.uhaddr_p3 = Address;
|
||||
AVR32_USBB.UHADDR2.uhaddr_p4 = Address;
|
||||
AVR32_USBB.UHADDR2.uhaddr_p5 = Address;
|
||||
AVR32_USBB.UHADDR2.uhaddr_p6 = Address;
|
||||
}
|
||||
|
||||
/* Enums: */
|
||||
enum USB_Host_WaitMSErrorCodes_t
|
||||
{
|
||||
HOST_WAITERROR_Successful = 0,
|
||||
HOST_WAITERROR_DeviceDisconnect = 1,
|
||||
HOST_WAITERROR_PipeError = 2,
|
||||
HOST_WAITERROR_SetupStalled = 3,
|
||||
};
|
||||
|
||||
/* Function Prototypes: */
|
||||
void USB_Host_ProcessNextHostState(void);
|
||||
uint8_t USB_Host_WaitMS(uint8_t MS);
|
||||
|
||||
#if defined(__INCLUDE_FROM_HOST_C)
|
||||
static void USB_Host_ResetDevice(void);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/* Disable C linkage for C++ Compilers: */
|
||||
#if defined(__cplusplus)
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
/** @} */
|
||||
|
|
@ -60,8 +60,8 @@
|
|||
/* Architecture Includes: */
|
||||
#if (ARCH == ARCH_AVR8)
|
||||
#include "AVR8/USBController_AVR8.h"
|
||||
#elif (ARCH == ARCH_UC3B)
|
||||
#include "UC3B/USBController_UC3B.h"
|
||||
#elif (ARCH == ARCH_UC3)
|
||||
#include "UC3/USBController_UC3.h"
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
|
|
@ -53,8 +53,8 @@
|
|||
/* Architecture Includes: */
|
||||
#if (ARCH == ARCH_AVR8)
|
||||
#include "AVR8/USBInterrupt_AVR8.h"
|
||||
#elif (ARCH == ARCH_UC3B)
|
||||
#include "UC3B/USBInterrupt_UC3B.h"
|
||||
#elif (ARCH == ARCH_UC3)
|
||||
#include "UC3/USBInterrupt_UC3.h"
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
|
|
@ -13,6 +13,7 @@
|
|||
* in exchange for a smaller compiled program binary size
|
||||
* - Added a new general RingBuff.h miscellaneous ring buffer library driver header
|
||||
* - Added new GCC_FORCE_POINTER_ACCESS() macro to correct GCC's mishandling of struct pointer accesses
|
||||
* - Added new GCC_MEMORY_BARRIER() macro to prevent instruction reordering across boundaries
|
||||
* - Added basic driver example use code to the library documentation
|
||||
* - Added new Endpoint_Null_Stream() and Pipe_Null_Stream() functions
|
||||
* - Added new ADC_GET_CHANNEL_MASK() convenience macro
|
||||
|
@ -24,7 +25,7 @@
|
|||
* - Added board driver support for the Sparkfun ATMEGA8U2 breakout board
|
||||
* - Added TWI baud rate prescaler and bit length parameters to the TWI_Init() function (thanks to Thomas Herlinghaus)
|
||||
* - Internal restructuring for eventual multiple architecture ports
|
||||
* - Added start of an AVR32 UC3B architecture port (currently incomplete/experimental)
|
||||
* - Added start of an AVR32 UC3 architecture port (currently incomplete/experimental)
|
||||
* - Library Applications:
|
||||
* - Added ability to write protect Mass Storage disk write operations from the host OS
|
||||
* - Added new MIDIToneGenerator project
|
||||
|
|
|
@ -7,16 +7,30 @@
|
|||
/**
|
||||
* \page Page_DeviceSupport Device and Hardware Support
|
||||
*
|
||||
* \section Sec_AVR8_Support Atmel 32-Bit UC3B AVR (UC3B)
|
||||
* <i>The AVR32 UC3B device support is currently <b>experimental</b>, and is included for preview purposes only.</i>
|
||||
* \section Sec_AVR8_Support Atmel 32-Bit UC3 AVR (UC3)
|
||||
* <i>The AVR32 UC3 device support is currently <b>experimental</b>, and is included for preview purposes only.</i>
|
||||
*
|
||||
* Currently supported UC3B models:
|
||||
* Currently supported UC3 models:
|
||||
* - AT32UC3A064 (USB Host and Device)
|
||||
* - AT32UC3A164 (USB Host and Device)
|
||||
* - AT32UC3A364 (USB Host and Device)
|
||||
* - AT32UC3A364S (USB Host and Device)
|
||||
* - AT32UC3B064 (USB Host and Device)
|
||||
* - AT32UC3B164 (USB Host and Device)
|
||||
* - AT32UC3A0128 (USB Host and Device)
|
||||
* - AT32UC3A1128 (USB Host and Device)
|
||||
* - AT32UC3A3128 (USB Host and Device)
|
||||
* - AT32UC3A3128S (USB Host and Device)
|
||||
* - AT32UC3B0128 (USB Host and Device)
|
||||
* - AT32UC3B1128 (USB Host and Device)
|
||||
* - AT32UC3A0256 (USB Host and Device)
|
||||
* - AT32UC3A1256 (USB Host and Device)
|
||||
* - AT32UC3A3256 (USB Host and Device)
|
||||
* - AT32UC3A3256S (USB Host and Device)
|
||||
* - AT32UC3B0256 (USB Host and Device)
|
||||
* - AT32UC3B1256 (USB Host and Device)
|
||||
* - AT32UC3A0512 (USB Host and Device)
|
||||
* - AT32UC3A1512 (USB Host and Device)
|
||||
* - AT32UC3B0512 (USB Host and Device)
|
||||
* - AT32UC3B1512 (USB Host and Device)
|
||||
*
|
||||
|
|
|
@ -33,7 +33,6 @@
|
|||
* -# Arduino Uno compatible USB-MIDI, USB-HID
|
||||
* -# Make Webserver project work in RNDIS device mode
|
||||
* - Ports
|
||||
* -# AVR32 UC3B series microcontrollers
|
||||
* -# Atmel ARM7 series microcontrollers
|
||||
* -# Other (commercial) C compilers
|
||||
*/
|
||||
|
|
|
@ -12,6 +12,7 @@
|
|||
# Check to see if the LUFA_PATH variable has not been set (the makefile is not being included from a project makefile)
|
||||
ifeq ($(origin LUFA_PATH), undefined)
|
||||
LUFA_ROOT_PATH = .
|
||||
ARCH = {AVR8,UC3}
|
||||
else
|
||||
LUFA_ROOT_PATH = $(LUFA_PATH)/LUFA
|
||||
endif
|
||||
|
@ -65,6 +66,7 @@ ifeq ($(origin LUFA_PATH), undefined)
|
|||
|
||||
clean:
|
||||
rm -f $(LUFA_SRC_ALL_FILES:%.c=%.o)
|
||||
rm -f $(LUFA_SRC_ALL_FILES:%.c=%.lst)
|
||||
|
||||
clean_list:
|
||||
|
||||
|
|
Loading…
Reference in New Issue