Initial restructuring of the core USB driver module to support multiple architectures in the future.

pull/1469/head
Dean Camera 14 years ago
parent 3832182fe1
commit 1daa5e16f9

File diff suppressed because one or more lines are too long

@ -63,7 +63,7 @@
#define __INCLUDE_FROM_AUDIO_DRIVER
/* Includes: */
#include "../HighLevel/USBMode.h"
#include "../Core/USBMode.h"
#if defined(USB_CAN_BE_DEVICE)
#include "Device/Audio.h"

@ -64,7 +64,7 @@
#define __INCLUDE_FROM_CDC_DRIVER
/* Includes: */
#include "../HighLevel/USBMode.h"
#include "../Core/USBMode.h"
#if defined(USB_CAN_BE_DEVICE)
#include "Device/CDC.h"

@ -51,7 +51,7 @@
#define _AUDIO_CLASS_COMMON_H_
/* Includes: */
#include "../../HighLevel/StdDescriptors.h"
#include "../../Core/StdDescriptors.h"
#include <string.h>

@ -51,7 +51,7 @@
#define _CDC_CLASS_COMMON_H_
/* Includes: */
#include "../../HighLevel/StdDescriptors.h"
#include "../../Core/StdDescriptors.h"
#include <string.h>

@ -51,7 +51,7 @@
#define _HID_CLASS_COMMON_H_
/* Includes: */
#include "../../HighLevel/StdDescriptors.h"
#include "../../Core/StdDescriptors.h"
#include "HIDParser.h"
#include <string.h>

@ -66,13 +66,12 @@
#define __HIDPARSER_H__
/* Includes: */
#include <string.h>
#include <stdbool.h>
#include "../../../../Common/Common.h"
#include "HIDReportData.h"
#include "../Common/HID.h"
#include "../../../../Common/Common.h"
#include <string.h>
/* Enable C linkage for C++ Compilers: */
#if defined(__cplusplus)

@ -54,7 +54,7 @@
#define __INCLUDE_FROM_AUDIO_DRIVER
/* Includes: */
#include "../../HighLevel/StdDescriptors.h"
#include "../../Core/StdDescriptors.h"
#include "Audio.h"
#include <string.h>

@ -51,7 +51,7 @@
#define _MS_CLASS_COMMON_H_
/* Includes: */
#include "../../HighLevel/StdDescriptors.h"
#include "../../Core/StdDescriptors.h"
#include <string.h>

@ -51,7 +51,7 @@
#define _PRINTER_CLASS_COMMON_H_
/* Includes: */
#include "../../HighLevel/StdDescriptors.h"
#include "../../Core/StdDescriptors.h"
#include <string.h>

@ -54,7 +54,7 @@
#define __INCLUDE_FROM_CDC_DRIVER
/* Includes: */
#include "../../HighLevel/StdDescriptors.h"
#include "../../Core/StdDescriptors.h"
#include "CDC.h"
#include <string.h>

@ -51,7 +51,7 @@
#define _SI_CLASS_COMMON_H_
/* Includes: */
#include "../../HighLevel/StdDescriptors.h"
#include "../../Core/StdDescriptors.h"
#include <string.h>

@ -29,7 +29,8 @@
*/
#define __INCLUDE_FROM_USB_DRIVER
#include "../../HighLevel/USBMode.h"
#include "../../Core/USBMode.h"
#if defined(USB_CAN_BE_DEVICE)
#define __INCLUDE_FROM_AUDIO_DRIVER

@ -29,7 +29,8 @@
*/
#define __INCLUDE_FROM_USB_DRIVER
#include "../../HighLevel/USBMode.h"
#include "../../Core/USBMode.h"
#if defined(USB_CAN_BE_DEVICE)
#define __INCLUDE_FROM_CDC_DRIVER

@ -29,7 +29,8 @@
*/
#define __INCLUDE_FROM_USB_DRIVER
#include "../../HighLevel/USBMode.h"
#include "../../Core/USBMode.h"
#if defined(USB_CAN_BE_DEVICE)
#define __INCLUDE_FROM_HID_DRIVER

@ -29,7 +29,8 @@
*/
#define __INCLUDE_FROM_USB_DRIVER
#include "../../HighLevel/USBMode.h"
#include "../../Core/USBMode.h"
#if defined(USB_CAN_BE_DEVICE)
#define __INCLUDE_FROM_MIDI_DRIVER

@ -29,7 +29,8 @@
*/
#define __INCLUDE_FROM_USB_DRIVER
#include "../../HighLevel/USBMode.h"
#include "../../Core/USBMode.h"
#if defined(USB_CAN_BE_DEVICE)
#define __INCLUDE_FROM_MS_DRIVER

@ -29,7 +29,8 @@
*/
#define __INCLUDE_FROM_USB_DRIVER
#include "../../HighLevel/USBMode.h"
#include "../../Core/USBMode.h"
#if defined(USB_CAN_BE_DEVICE)
#define __INCLUDE_FROM_RNDIS_DRIVER

@ -65,7 +65,7 @@
#define __INCLUDE_FROM_HID_DRIVER
/* Includes: */
#include "../HighLevel/USBMode.h"
#include "../Core/USBMode.h"
#if defined(USB_CAN_BE_DEVICE)
#include "Device/HID.h"

@ -29,7 +29,8 @@
*/
#define __INCLUDE_FROM_USB_DRIVER
#include "../../HighLevel/USBMode.h"
#include "../../Core/USBMode.h"
#if defined(USB_CAN_BE_HOST)
#define __INCLUDE_FROM_CDC_DRIVER

@ -29,7 +29,8 @@
*/
#define __INCLUDE_FROM_USB_DRIVER
#include "../../HighLevel/USBMode.h"
#include "../../Core/USBMode.h"
#if defined(USB_CAN_BE_HOST)
#define __INCLUDE_FROM_HID_DRIVER

@ -29,7 +29,8 @@
*/
#define __INCLUDE_FROM_USB_DRIVER
#include "../../HighLevel/USBMode.h"
#include "../../Core/USBMode.h"
#if defined(USB_CAN_BE_HOST)
#define __INCLUDE_FROM_MIDI_DRIVER

@ -29,7 +29,8 @@
*/
#define __INCLUDE_FROM_USB_DRIVER
#include "../../HighLevel/USBMode.h"
#include "../../Core/USBMode.h"
#if defined(USB_CAN_BE_HOST)
#define __INCLUDE_FROM_MS_DRIVER

@ -29,7 +29,8 @@
*/
#define __INCLUDE_FROM_USB_DRIVER
#include "../../HighLevel/USBMode.h"
#include "../../Core/USBMode.h"
#if defined(USB_CAN_BE_HOST)
#define __INCLUDE_FROM_PRINTER_DRIVER

@ -29,7 +29,8 @@
*/
#define __INCLUDE_FROM_USB_DRIVER
#include "../../HighLevel/USBMode.h"
#include "../../Core/USBMode.h"
#if defined(USB_CAN_BE_HOST)
#define __INCLUDE_FROM_RNDIS_DRIVER

@ -29,7 +29,8 @@
*/
#define __INCLUDE_FROM_USB_DRIVER
#include "../../HighLevel/USBMode.h"
#include "../../Core/USBMode.h"
#if defined(USB_CAN_BE_HOST)
#define __INCLUDE_FROM_SI_DRIVER

@ -67,7 +67,7 @@
#define __INCLUDE_FROM_MIDI_DRIVER
/* Includes: */
#include "../HighLevel/USBMode.h"
#include "../Core/USBMode.h"
#if defined(USB_CAN_BE_DEVICE)
#include "Device/MIDI.h"

@ -64,7 +64,7 @@
#define __INCLUDE_FROM_MS_DRIVER
/* Includes: */
#include "../HighLevel/USBMode.h"
#include "../Core/USBMode.h"
#if defined(USB_CAN_BE_DEVICE)
#include "Device/MassStorage.h"

@ -65,7 +65,7 @@
#define __INCLUDE_FROM_PRINTER_DRIVER
/* Includes: */
#include "../HighLevel/USBMode.h"
#include "../Core/USBMode.h"
#if defined(USB_CAN_BE_HOST)
#include "Host/Printer.h"

@ -64,7 +64,7 @@
#define __INCLUDE_FROM_RNDIS_DRIVER
/* Includes: */
#include "../HighLevel/USBMode.h"
#include "../Core/USBMode.h"
#if defined(USB_CAN_BE_DEVICE)
#include "Device/RNDIS.h"

@ -63,7 +63,7 @@
#define __INCLUDE_FROM_SI_DRIVER
/* Includes: */
#include "../HighLevel/USBMode.h"
#include "../Core/USBMode.h"
#if defined(USB_CAN_BE_HOST)
#include "Host/StillImage.h"

@ -29,7 +29,7 @@
*/
#define __INCLUDE_FROM_USB_DRIVER
#include "../HighLevel/USBMode.h"
#include "../USBMode.h"
#if defined(USB_CAN_BE_DEVICE)

@ -29,7 +29,7 @@
*/
/** \file
* \brief USB device mode definitions.
* \brief USB device mode definitions (AVR8)
*
* This file contains structures, function prototypes and macros related to USB device mode.
*
@ -37,8 +37,8 @@
* dispatch header located in LUFA/Drivers/USB/USB.h.
*/
/** \ingroup Group_USB
* \defgroup Group_Device Device Management
/** \ingroup Group_Device
* \defgroup Group_Device_AVR8 Device Management (AVR8)
*
* USB Device mode related macros and enums. This module contains macros and enums which are used when
* the USB controller is initialized in device mode.
@ -46,18 +46,16 @@
* @{
*/
#ifndef __USBDEVICE_H__
#define __USBDEVICE_H__
#ifndef __USBDEVICE_AVR8_H__
#define __USBDEVICE_AVR8_H__
/* Includes: */
#include <avr/io.h>
#include <avr/pgmspace.h>
#include <avr/eeprom.h>
#include "../../../../Common/Common.h"
#include "../StdDescriptors.h"
#include "../USBInterrupt.h"
#include "../Endpoint.h"
#include "../../../Common/Common.h"
#include "../HighLevel/StdDescriptors.h"
#include "USBInterrupt.h"
#include "Endpoint.h"
#include <avr/boot.h>
/* Preprocessor Checks: */
#if (defined(USE_RAM_DESCRIPTORS) && defined(USE_EEPROM_DESCRIPTORS))
@ -91,6 +89,24 @@
#define USB_DEVICE_OPT_FULLSPEED (0 << 0)
//@}
#if (!defined(NO_INTERNAL_SERIAL) && \
(defined(__AVR_AT90USB647__) || defined(__AVR_AT90USB1287__) || \
defined(__AVR_ATmega32U6__) || defined(__AVR_AT90USB646__) || defined(__AVR_AT90USB1286__) || \
defined(__AVR_ATmega32U2__) || defined(__AVR_ATmega16U2__) || defined(__AVR_ATmega8U2__)))
/** String descriptor index for the device's unique serial number string descriptor within the device.
* This unique serial number is used by the host to associate resources to the device (such as drivers or COM port
* number allocations) to a device regardless of the port it is plugged in to on the host. Some USB AVRs contain
* a unique serial number internally, and setting the device descriptors serial number string index to this value
* will cause it to use the internal serial number.
*
* On unsupported devices, this will evaluate to NO_DESCRIPTOR and so will force the host to create a pseudo-serial
* number for the device.
*/
#define USE_INTERNAL_SERIAL 0xDC
#else
#define USE_INTERNAL_SERIAL NO_DESCRIPTOR
#endif
/* Function Prototypes: */
/** Sends a Remote Wakeup request to the host. This signals to the host that the device should
* be taken out of suspended mode, and communications should resume.
@ -239,6 +255,38 @@
{
return (UDADDR & (1 << ADDEN));
}
static inline uint8_t USB_Device_GetSerialString(wchar_t* UnicodeString, const uint8_t MaxLen)
{
uint8_t SerialCharNum = 0;
ATOMIC_BLOCK(ATOMIC_RESTORESTATE)
{
uint8_t SigReadAddress = 0x0E;
for (SerialCharNum = 0; SerialCharNum < MIN(MaxLen, 20); SerialCharNum++)
{
if (SerialCharNum == MaxLen)
break;
uint8_t SerialByte = boot_signature_byte_get(SigReadAddress);
if (SerialCharNum & 0x01)
{
SerialByte >>= 4;
SigReadAddress++;
}
SerialByte &= 0x0F;
UnicodeString[SerialCharNum] = (SerialByte >= 10) ?
(('A' - 10) + SerialByte) : ('0' + SerialByte);
}
}
return SerialCharNum;
}
#endif
#endif

@ -29,7 +29,7 @@
*/
#define __INCLUDE_FROM_USB_DRIVER
#include "../HighLevel/USBMode.h"
#include "../USBMode.h"
#if defined(USB_CAN_BE_DEVICE)

@ -38,27 +38,27 @@
* dispatch header located in LUFA/Drivers/USB/USB.h.
*/
/** \ingroup Group_EndpointManagement
* \defgroup Group_EndpointRW Endpoint Data Reading and Writing
/** \ingroup Group_EndpointRW
* \defgroup Group_EndpointRW_AVR8 Endpoint Data Reading and Writing (AVR8)
*
* Functions, macros, variables, enums and types related to data reading and writing from and to endpoints.
*/
/** \ingroup Group_EndpointRW
* \defgroup Group_EndpointPrimitiveRW Read/Write of Primitive Data Types
/** \ingroup Group_EndpointPrimitiveRW
* \defgroup Group_EndpointPrimitiveRW_AVR8 Read/Write of Primitive Data Types (AVR8)
*
* Functions, macros, variables, enums and types related to data reading and writing of primitive data types
* from and to endpoints.
*/
/** \ingroup Group_EndpointManagement
* \defgroup Group_EndpointPacketManagement Endpoint Packet Management
/** \ingroup Group_EndpointPacketManagement
* \defgroup Group_EndpointPacketManagement_AVR8 Endpoint Packet Management (AVR8)
*
* Functions, macros, variables, enums and types related to packet management of endpoints.
*/
/** \ingroup Group_USB
* \defgroup Group_EndpointManagement Endpoint Management
/** \ingroup Group_EndpointManagement
* \defgroup Group_EndpointManagement_AVR8 Endpoint Management (AVR8)
*
* 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
@ -67,16 +67,13 @@
* @{
*/
#ifndef __ENDPOINT_H__
#define __ENDPOINT_H__
#ifndef __ENDPOINT_AVR8_H__
#define __ENDPOINT_AVR8_H__
/* Includes: */
#include <avr/io.h>
#include <stdbool.h>
#include "../../../Common/Common.h"
#include "../HighLevel/USBTask.h"
#include "USBInterrupt.h"
#include "../../../../Common/Common.h"
#include "../USBTask.h"
#include "../USBInterrupt.h"
/* Enable C linkage for C++ Compilers: */
#if defined(__cplusplus)
@ -234,7 +231,7 @@
/* Enums: */
/** Enum for the possible error return codes of the \ref Endpoint_WaitUntilReady() function.
*
* \ingroup Group_EndpointRW
* \ingroup Group_EndpointRW_AVR8
*/
enum Endpoint_WaitUntilReady_ErrorCodes_t
{
@ -316,7 +313,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
* \ingroup Group_EndpointRW_AVR8
*
* \return Total number of bytes in the currently selected Endpoint's FIFO buffer.
*/
@ -412,7 +409,7 @@
* will terminate all queued transactions, resetting the endpoint banks ready for a new
* packet.
*
* \ingroup Group_EndpointPacketManagement
* \ingroup Group_EndpointPacketManagement_AVR8
*/
static inline void Endpoint_AbortPendingIN(void)
{
@ -427,7 +424,7 @@
* transmission via the \ref Endpoint_ClearIN() command, or are awaiting acknowledgement via the
* \ref Endpoint_ClearOUT() command.
*
* \ingroup Group_EndpointPacketManagement
* \ingroup Group_EndpointPacketManagement_AVR8
*
* \return Total number of busy banks in the selected endpoint.
*/
@ -442,7 +439,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
* \ingroup Group_EndpointPacketManagement_AVR8
*
* \return Boolean \c true if the currently selected endpoint may be read from or written to, depending
* on its direction.
@ -490,7 +487,7 @@
/** Determines if the selected IN endpoint is ready for a new packet to be sent to the host.
*
* \ingroup Group_EndpointPacketManagement
* \ingroup Group_EndpointPacketManagement_AVR8
*
* \return Boolean \c true if the current endpoint is ready for an IN packet, \c false otherwise.
*/
@ -502,7 +499,7 @@
/** Determines if the selected OUT endpoint has received new packet from the host.
*
* \ingroup Group_EndpointPacketManagement
* \ingroup Group_EndpointPacketManagement_AVR8
*
* \return Boolean \c true if current endpoint is has received an OUT packet, \c false otherwise.
*/
@ -514,7 +511,7 @@
/** Determines if the current CONTROL type endpoint has received a SETUP packet.
*
* \ingroup Group_EndpointPacketManagement
* \ingroup Group_EndpointPacketManagement_AVR8
*
* \return Boolean \c true if the selected endpoint has received a SETUP packet, \c false otherwise.
*/
@ -527,7 +524,7 @@
/** Clears a received SETUP packet on the currently selected CONTROL type endpoint, freeing up the
* endpoint for the next packet.
*
* \ingroup Group_EndpointPacketManagement
* \ingroup Group_EndpointPacketManagement_AVR8
*
* \note This is not applicable for non CONTROL type endpoints.
*/
@ -540,7 +537,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
* \ingroup Group_EndpointPacketManagement_AVR8
*/
static inline void Endpoint_ClearIN(void) ATTR_ALWAYS_INLINE;
static inline void Endpoint_ClearIN(void)
@ -555,7 +552,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
* \ingroup Group_EndpointPacketManagement_AVR8
*/
static inline void Endpoint_ClearOUT(void) ATTR_ALWAYS_INLINE;
static inline void Endpoint_ClearOUT(void)
@ -576,7 +573,7 @@
* is called, or the host issues a CLEAR FEATURE request to the device for the currently selected
* endpoint.
*
* \ingroup Group_EndpointPacketManagement
* \ingroup Group_EndpointPacketManagement_AVR8
*/
static inline void Endpoint_StallTransaction(void) ATTR_ALWAYS_INLINE;
static inline void Endpoint_StallTransaction(void)
@ -586,7 +583,7 @@
/** Clears the STALL condition on the currently selected endpoint.
*
* \ingroup Group_EndpointPacketManagement
* \ingroup Group_EndpointPacketManagement_AVR8
*/
static inline void Endpoint_ClearStall(void) ATTR_ALWAYS_INLINE;
static inline void Endpoint_ClearStall(void)
@ -596,7 +593,7 @@
/** Determines if the currently selected endpoint is stalled, false otherwise.
*
* \ingroup Group_EndpointPacketManagement
* \ingroup Group_EndpointPacketManagement_AVR8
*
* \return Boolean \c true if the currently selected endpoint is stalled, \c false otherwise.
*/
@ -635,7 +632,7 @@
/** Reads one byte from the currently selected endpoint's bank, for OUT direction endpoints.
*
* \ingroup Group_EndpointPrimitiveRW
* \ingroup Group_EndpointPrimitiveRW_AVR8
*
* \return Next byte in the currently selected endpoint's FIFO buffer.
*/
@ -647,7 +644,7 @@
/** Writes one byte from the currently selected endpoint's bank, for IN direction endpoints.
*
* \ingroup Group_EndpointPrimitiveRW
* \ingroup Group_EndpointPrimitiveRW_AVR8
*
* \param[in] Byte Next byte to write into the the currently selected endpoint's FIFO buffer.
*/
@ -659,7 +656,7 @@
/** Discards one byte from the currently selected endpoint's bank, for OUT direction endpoints.
*
* \ingroup Group_EndpointPrimitiveRW
* \ingroup Group_EndpointPrimitiveRW_AVR8
*/
static inline void Endpoint_Discard_Byte(void) ATTR_ALWAYS_INLINE;
static inline void Endpoint_Discard_Byte(void)
@ -672,7 +669,7 @@
/** Reads two bytes from the currently selected endpoint's bank in little endian format, for OUT
* direction endpoints.
*
* \ingroup Group_EndpointPrimitiveRW
* \ingroup Group_EndpointPrimitiveRW_AVR8
*
* \return Next word in the currently selected endpoint's FIFO buffer.
*/
@ -694,7 +691,7 @@
/** Reads two bytes from the currently selected endpoint's bank in big endian format, for OUT
* direction endpoints.
*
* \ingroup Group_EndpointPrimitiveRW
* \ingroup Group_EndpointPrimitiveRW_AVR8
*
* \return Next word in the currently selected endpoint's FIFO buffer.
*/
@ -716,7 +713,7 @@
/** Writes two bytes to the currently selected endpoint's bank in little endian format, for IN
* direction endpoints.
*
* \ingroup Group_EndpointPrimitiveRW
* \ingroup Group_EndpointPrimitiveRW_AVR8
*
* \param[in] Word Next word to write to the currently selected endpoint's FIFO buffer.
*/
@ -730,7 +727,7 @@
/** Writes two bytes to the currently selected endpoint's bank in big endian format, for IN
* direction endpoints.
*
* \ingroup Group_EndpointPrimitiveRW
* \ingroup Group_EndpointPrimitiveRW_AVR8
*
* \param[in] Word Next word to write to the currently selected endpoint's FIFO buffer.
*/
@ -743,7 +740,7 @@
/** Discards two bytes from the currently selected endpoint's bank, for OUT direction endpoints.
*
* \ingroup Group_EndpointPrimitiveRW
* \ingroup Group_EndpointPrimitiveRW_AVR8
*/
static inline void Endpoint_Discard_Word(void) ATTR_ALWAYS_INLINE;
static inline void Endpoint_Discard_Word(void)
@ -757,7 +754,7 @@
/** Reads four bytes from the currently selected endpoint's bank in little endian format, for OUT
* direction endpoints.
*
* \ingroup Group_EndpointPrimitiveRW
* \ingroup Group_EndpointPrimitiveRW_AVR8
*
* \return Next double word in the currently selected endpoint's FIFO buffer.
*/
@ -781,7 +778,7 @@
/** Reads four bytes from the currently selected endpoint's bank in big endian format, for OUT
* direction endpoints.
*
* \ingroup Group_EndpointPrimitiveRW
* \ingroup Group_EndpointPrimitiveRW_AVR8
*
* \return Next double word in the currently selected endpoint's FIFO buffer.
*/
@ -805,7 +802,7 @@
/** Writes four bytes to the currently selected endpoint's bank in little endian format, for IN
* direction endpoints.
*
* \ingroup Group_EndpointPrimitiveRW
* \ingroup Group_EndpointPrimitiveRW_AVR8
*
* \param[in] DWord Next double word to write to the currently selected endpoint's FIFO buffer.
*/
@ -821,7 +818,7 @@
/** Writes four bytes to the currently selected endpoint's bank in big endian format, for IN
* direction endpoints.
*
* \ingroup Group_EndpointPrimitiveRW
* \ingroup Group_EndpointPrimitiveRW_AVR8
*
* \param[in] DWord Next double word to write to the currently selected endpoint's FIFO buffer.
*/
@ -836,7 +833,7 @@
/** Discards four bytes from the currently selected endpoint's bank, for OUT direction endpoints.
*
* \ingroup Group_EndpointPrimitiveRW
* \ingroup Group_EndpointPrimitiveRW_AVR8
*/
static inline void Endpoint_Discard_DWord(void) ATTR_ALWAYS_INLINE;
static inline void Endpoint_Discard_DWord(void)
@ -883,7 +880,7 @@
*
* \note This routine should not be called on CONTROL type endpoints.
*
* \ingroup Group_EndpointRW
* \ingroup Group_EndpointRW_AVR8
*
* \return A value from the \ref Endpoint_WaitUntilReady_ErrorCodes_t enum.
*/

@ -29,7 +29,7 @@
*/
#define __INCLUDE_FROM_USB_DRIVER
#include "../HighLevel/USBMode.h"
#include "../USBMode.h"
#if defined(USB_CAN_BE_HOST)

@ -29,7 +29,7 @@
*/
/** \file
* \brief USB host mode definitions.
* \brief USB host mode definitions (AVR8)
*
* This file contains structures, function prototypes and macros related to USB host mode.
*
@ -37,8 +37,8 @@
* dispatch header located in LUFA/Drivers/USB/USB.h.
*/
/** \ingroup Group_USB
* \defgroup Group_Host Host Management
/** \ingroup Group_Host
* \defgroup Group_Host_AVR8 Host Management (AVR8)
*
* USB Host mode related macros and enums. This module contains macros and enums which are used when
* the USB controller is initialized in host mode.
@ -46,18 +46,14 @@
* @{
*/
#ifndef __USBHOST_H__
#define __USBHOST_H__
#ifndef __USBHOST_AVR8_H__
#define __USBHOST_AVR8_H__
/* Includes: */
#include <avr/io.h>
#include <stdbool.h>
#include <util/delay.h>
#include "../../../Common/Common.h"
#include "../HighLevel/StdDescriptors.h"
#include "Pipe.h"
#include "USBInterrupt.h"
#include "../../../../Common/Common.h"
#include "../StdDescriptors.h"
#include "../Pipe.h"
#include "../USBInterrupt.h"
/* Enable C linkage for C++ Compilers: */
#if defined(__cplusplus)

@ -29,7 +29,7 @@
*/
/** \file
* \brief USB OTG mode definitions.
* \brief USB OTG mode definitions (AVR8)
*
* This file contains structures, function prototypes and macros related to USB OTG mode, where two USB devices
* may be linked directly together and exchange host/device roles as needed.
@ -38,8 +38,8 @@
* dispatch header located in LUFA/Drivers/USB/USB.h.
*/
/** \ingroup Group_USB
* \defgroup Group_OTG USB On The Go (OTG) Management
/** \ingroup Group_OTG
* \defgroup Group_OTG_AVR8 USB On The Go (OTG) Management (AVR8)
*
* This module contains macros for embedded USB hosts with dual role On The Go capabilities, for managing role
* exchange. OTG is a way for two USB dual role devices to talk to one another directly without fixed device/host
@ -48,14 +48,11 @@
* @{
*/
#ifndef __USBOTG_H__
#define __USBOTG_H__
#ifndef __USBOTG_AVR8_H__
#define __USBOTG_AVR8_H__
/* Includes: */
#include <avr/io.h>
#include <stdbool.h>
#include "../../../Common/Common.h"
#include "../../../../Common/Common.h"
/* Preprocessor Checks: */
#if !defined(__INCLUDE_FROM_USB_DRIVER)

@ -29,7 +29,7 @@
*/
#define __INCLUDE_FROM_USB_DRIVER
#include "../HighLevel/USBMode.h"
#include "../USBMode.h"
#if defined(USB_CAN_BE_HOST)

@ -38,27 +38,27 @@
* dispatch header located in LUFA/Drivers/USB/USB.h.
*/
/** \ingroup Group_PipeManagement
* \defgroup Group_PipeRW Pipe Data Reading and Writing
/** \ingroup Group_PipeRW
* \defgroup Group_PipeRW_AVR8 Pipe Data Reading and Writing (AVR8)
*
* Functions, macros, variables, enums and types related to data reading and writing from and to pipes.
*/
/** \ingroup Group_PipeRW
* \defgroup Group_PipePrimitiveRW Read/Write of Primitive Data Types
/** \ingroup Group_PipePrimitiveRW
* \defgroup Group_PipePrimitiveRW_AVR8 Read/Write of Primitive Data Types (AVR8)
*
* Functions, macros, variables, enums and types related to data reading and writing of primitive data types
* from and to pipes.
*/
/** \ingroup Group_PipeManagement
* \defgroup Group_PipePacketManagement Pipe Packet Management
/** \ingroup Group_PipePacketManagement
* \defgroup Group_PipePacketManagement_AVR8 Pipe Packet Management (AVR8)
*
* Functions, macros, variables, enums and types related to packet management of pipes.
*/
/** \ingroup Group_PipeManagement
* \defgroup Group_PipeControlReq Pipe Control Request Management
/** \ingroup Group_PipeControlReq
* \defgroup Group_PipeControlReq_AVR8 Pipe Control Request Management (AVR8)
*
* 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.
@ -66,8 +66,8 @@
* \see Chapter 9 of the USB 2.0 specification.
*/
/** \ingroup Group_USB
* \defgroup Group_PipeManagement Pipe Management
/** \ingroup Group_PipeManagement
* \defgroup Group_PipeManagement_AVR8 Pipe Management (AVR8)
*
* 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
@ -76,15 +76,12 @@
* @{
*/
#ifndef __PIPE_H__
#define __PIPE_H__
#ifndef __PIPE_AVR8_H__
#define __PIPE_AVR8_H__
/* Includes: */
#include <avr/io.h>
#include <stdbool.h>
#include "../../../Common/Common.h"
#include "../HighLevel/USBTask.h"
#include "../../../../Common/Common.h"
#include "../USBTask.h"
/* Enable C linkage for C++ Compilers: */
#if defined(__cplusplus)
@ -197,7 +194,7 @@
/* Enums: */
/** Enum for the possible error return codes of the \ref Pipe_WaitUntilReady() function.
*
* \ingroup Group_PipeRW
* \ingroup Group_PipeRW_AVR8
*/
enum Pipe_WaitUntilReady_ErrorCodes_t
{
@ -216,7 +213,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
* \ingroup Group_PipeRW_AVR8
*
* \return Total number of bytes in the currently selected pipe's FIFO buffer.
*/
@ -457,7 +454,7 @@
* transmission via the \ref Pipe_ClearOUT() command, or are awaiting acknowledgement via the
* \ref Pipe_ClearIN() command.
*
* \ingroup Group_PipePacketManagement
* \ingroup Group_PipePacketManagement_AVR8
*
* \return Total number of busy banks in the selected pipe.
*/
@ -474,7 +471,7 @@
*
* \note This function is not valid on CONTROL type pipes.
*
* \ingroup Group_PipePacketManagement
* \ingroup Group_PipePacketManagement_AVR8
*
* \return Boolean \c true if the currently selected pipe may be read from or written to, depending
* on its direction.
@ -487,7 +484,7 @@
/** Determines if a packet has been received on the currently selected IN pipe from the attached device.
*
* \ingroup Group_PipePacketManagement
* \ingroup Group_PipePacketManagement_AVR8
*
* \return Boolean \c true if the current pipe has received an IN packet, \c false otherwise.
*/
@ -499,7 +496,7 @@
/** Determines if the currently selected OUT pipe is ready to send an OUT packet to the attached device.
*
* \ingroup Group_PipePacketManagement
* \ingroup Group_PipePacketManagement_AVR8
*
* \return Boolean \c true if the current pipe is ready for an OUT packet, \c false otherwise.
*/
@ -512,7 +509,7 @@
/** Determines if no SETUP request is currently being sent to the attached device on the selected
* CONTROL type pipe.
*
* \ingroup Group_PipePacketManagement
* \ingroup Group_PipePacketManagement_AVR8
*
* \return Boolean \c true if the current pipe is ready for a SETUP packet, \c false otherwise.
*/
@ -524,7 +521,7 @@
/** Sends the currently selected CONTROL type pipe's contents to the device as a SETUP packet.
*
* \ingroup Group_PipePacketManagement
* \ingroup Group_PipePacketManagement_AVR8
*/
static inline void Pipe_ClearSETUP(void) ATTR_ALWAYS_INLINE;
static inline void Pipe_ClearSETUP(void)
@ -535,7 +532,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
* \ingroup Group_PipePacketManagement_AVR8
*/
static inline void Pipe_ClearIN(void) ATTR_ALWAYS_INLINE;
static inline void Pipe_ClearIN(void)
@ -546,7 +543,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
* \ingroup Group_PipePacketManagement_AVR8
*/
static inline void Pipe_ClearOUT(void) ATTR_ALWAYS_INLINE;
static inline void Pipe_ClearOUT(void)
@ -560,7 +557,7 @@
* received, it must be cleared using \ref Pipe_ClearNAKReceived() before the previous (or any other) packet
* can be re-sent.
*
* \ingroup Group_PipePacketManagement
* \ingroup Group_PipePacketManagement_AVR8
*
* \return Boolean \c true if an NAK has been received on the current pipe, \c false otherwise.
*/
@ -572,7 +569,7 @@
/** Clears the NAK condition on the currently selected pipe.
*
* \ingroup Group_PipePacketManagement
* \ingroup Group_PipePacketManagement_AVR8
*
* \see \ref Pipe_IsNAKReceived() for more details.
*/
@ -584,7 +581,7 @@
/** Determines if the currently selected pipe has had the STALL condition set by the attached device.
*
* \ingroup Group_PipePacketManagement
* \ingroup Group_PipePacketManagement_AVR8
*
* \return Boolean \c true if the current pipe has been stalled by the attached device, \c false otherwise.
*/
@ -597,7 +594,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
* \ingroup Group_PipePacketManagement_AVR8
*/
static inline void Pipe_ClearStall(void) ATTR_ALWAYS_INLINE;
static inline void Pipe_ClearStall(void)
@ -607,7 +604,7 @@
/** Reads one byte from the currently selected pipe's bank, for OUT direction pipes.
*
* \ingroup Group_PipePrimitiveRW
* \ingroup Group_PipePrimitiveRW_AVR8
*
* \return Next byte in the currently selected pipe's FIFO buffer.
*/
@ -619,7 +616,7 @@
/** Writes one byte from the currently selected pipe's bank, for IN direction pipes.
*
* \ingroup Group_PipePrimitiveRW
* \ingroup Group_PipePrimitiveRW_AVR8
*
* \param[in] Byte Next byte to write into the the currently selected pipe's FIFO buffer.
*/
@ -631,7 +628,7 @@
/** Discards one byte from the currently selected pipe's bank, for OUT direction pipes.
*
* \ingroup Group_PipePrimitiveRW
* \ingroup Group_PipePrimitiveRW_AVR8
*/
static inline void Pipe_Discard_Byte(void) ATTR_ALWAYS_INLINE;
static inline void Pipe_Discard_Byte(void)
@ -644,7 +641,7 @@
/** Reads two bytes from the currently selected pipe's bank in little endian format, for OUT
* direction pipes.
*
* \ingroup Group_PipePrimitiveRW
* \ingroup Group_PipePrimitiveRW_AVR8
*
* \return Next word in the currently selected pipe's FIFO buffer.
*/
@ -666,7 +663,7 @@
/** Reads two bytes from the currently selected pipe's bank in big endian format, for OUT
* direction pipes.
*
* \ingroup Group_PipePrimitiveRW
* \ingroup Group_PipePrimitiveRW_AVR8
*
* \return Next word in the currently selected pipe's FIFO buffer.
*/
@ -688,7 +685,7 @@
/** Writes two bytes to the currently selected pipe's bank in little endian format, for IN
* direction pipes.
*
* \ingroup Group_PipePrimitiveRW
* \ingroup Group_PipePrimitiveRW_AVR8
*
* \param[in] Word Next word to write to the currently selected pipe's FIFO buffer.
*/
@ -702,7 +699,7 @@
/** Writes two bytes to the currently selected pipe's bank in big endian format, for IN
* direction pipes.
*
* \ingroup Group_PipePrimitiveRW
* \ingroup Group_PipePrimitiveRW_AVR8
*
* \param[in] Word Next word to write to the currently selected pipe's FIFO buffer.
*/
@ -715,7 +712,7 @@
/** Discards two bytes from the currently selected pipe's bank, for OUT direction pipes.
*
* \ingroup Group_PipePrimitiveRW
* \ingroup Group_PipePrimitiveRW_AVR8
*/
static inline void Pipe_Discard_Word(void) ATTR_ALWAYS_INLINE;
static inline void Pipe_Discard_Word(void)
@ -729,7 +726,7 @@
/** Reads four bytes from the currently selected pipe's bank in little endian format, for OUT
* direction pipes.
*
* \ingroup Group_PipePrimitiveRW
* \ingroup Group_PipePrimitiveRW_AVR8
*
* \return Next double word in the currently selected pipe's FIFO buffer.
*/
@ -753,7 +750,7 @@
/** Reads four bytes from the currently selected pipe's bank in big endian format, for OUT
* direction pipes.
*
* \ingroup Group_PipePrimitiveRW
* \ingroup Group_PipePrimitiveRW_AVR8
*
* \return Next double word in the currently selected pipe's FIFO buffer.
*/
@ -777,7 +774,7 @@
/** Writes four bytes to the currently selected pipe's bank in little endian format, for IN
* direction pipes.
*
* \ingroup Group_PipePrimitiveRW
* \ingroup Group_PipePrimitiveRW_AVR8
*
* \param[in] DWord Next double word to write to the currently selected pipe's FIFO buffer.
*/
@ -793,7 +790,7 @@
/** Writes four bytes to the currently selected pipe's bank in big endian format, for IN
* direction pipes.
*
* \ingroup Group_PipePrimitiveRW
* \ingroup Group_PipePrimitiveRW_AVR8
*
* \param[in] DWord Next double word to write to the currently selected pipe's FIFO buffer.
*/
@ -808,7 +805,7 @@
/** Discards four bytes from the currently selected pipe's bank, for OUT direction pipes.
*
* \ingroup Group_PipePrimitiveRW
* \ingroup Group_PipePrimitiveRW_AVR8
*/
static inline void Pipe_Discard_DWord(void) ATTR_ALWAYS_INLINE;
static inline void Pipe_Discard_DWord(void)
@ -889,7 +886,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
* \ingroup Group_PipeRW_AVR8
*
* \return A value from the \ref Pipe_WaitUntilReady_ErrorCodes_t enum.
*/

@ -29,7 +29,7 @@
*/
/** \file
* \brief USB low level USB controller definitions.
* \brief USB low level USB controller definitions (AVR8)
*
* This file contains structures, function prototypes and macros related to the low level configuration of the
* USB controller, to start, stop and reset the USB library core.
@ -38,43 +38,37 @@
* dispatch header located in LUFA/Drivers/USB/USB.h.
*/
/** \ingroup Group_USB
* \defgroup Group_USBManagement USB Interface Management
/** \ingroup Group_USBManagement
* \defgroup Group_USBManagement_AVR8 USB Interface Management (AVR8)
*
* Functions, macros, variables, enums and types related to the setup and management of the USB interface.
*
* @{
*/
#ifndef __USBCONTROLLER_H__
#define __USBCONTROLLER_H__
#ifndef __USBCONTROLLER_AVR8_H__
#define __USBCONTROLLER_AVR8_H__
/* Includes: */
#include <avr/io.h>
#include <avr/interrupt.h>
#include <stdbool.h>
#include "../HighLevel/USBMode.h"
#include "../../../Common/Common.h"
#include "../HighLevel/USBMode.h"
#include "../HighLevel/Events.h"
#include "../HighLevel/USBTask.h"
#include "USBInterrupt.h"
#include "../../../../Common/Common.h"
#include "../USBMode.h"
#include "../Events.h"
#include "../USBTask.h"
#include "../USBInterrupt.h"
#if defined(USB_CAN_BE_HOST) || defined(__DOXYGEN__)
#include "Host.h"
#include "OTG.h"
#include "Pipe.h"
#include "../HighLevel/HostStandardReq.h"
#include "../HighLevel/PipeStream.h"
#include "../Host.h"
#include "../OTG.h"
#include "../Pipe.h"
#include "../HostStandardReq.h"
#include "../PipeStream.h"
#endif
#if defined(USB_CAN_BE_DEVICE) || defined(__DOXYGEN__)
#include "Device.h"
#include "Endpoint.h"
#include "../HighLevel/DeviceStandardReq.h"
#include "../HighLevel/EndpointStream.h"
#include "../Device.h"
#include "../Endpoint.h"
#include "../DeviceStandardReq.h"
#include "../EndpointStream.h"
#endif
/* Enable C linkage for C++ Compilers: */

@ -29,7 +29,7 @@
*/
/** \file
* \brief USB controller interrupt service routine management.
* \brief USB controller interrupt service routine management (AVR8)
*
* This file contains definitions required for the correct handling of low level USB service routine interrupts
* from the USB controller.
@ -38,14 +38,11 @@
* dispatch header located in LUFA/Drivers/USB/USB.h.
*/
#ifndef __USBINTERRUPT_H__
#define __USBINTERRUPT_H__
#ifndef __USBINTERRUPT_AVR8_H__
#define __USBINTERRUPT_AVR8_H__
/* Includes: */
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/atomic.h>
#include <stdbool.h>
#include "../../../../Common/Common.h"
/* Enable C linkage for C++ Compilers: */
#if defined(__cplusplus)
@ -87,10 +84,9 @@
#define USB_INT_RXSTPI UEIENX, (1 << RXSTPE) , UEINTX, (1 << RXSTPI)
/* Includes: */
#include "../../../Common/Common.h"
#include "../HighLevel/USBMode.h"
#include "../HighLevel/Events.h"
#include "USBController.h"
#include "../USBMode.h"
#include "../Events.h"
#include "../USBController.h"
/* Function Prototypes: */
void USB_INT_ClearAllInterrupts(void);

@ -51,8 +51,6 @@
#define __CONFIGDESCRIPTOR_H__
/* Includes: */
#include <stdint.h>
#include "../../../Common/Common.h"
#include "HostStandardReq.h"
#include "USBMode.h"

@ -0,0 +1,71 @@
/*
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 Common USB device mode definitions.
*
* This file contains common structures, function prototypes and macros related to USB device mode for all
* architectures.
*
* \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_USB
* \defgroup Group_Device Device Management
*
* USB Device mode related definitions common to all architectures. This module contains definitions which
* are used when the USB controller is initialized in device mode.
*
* @{
*/
#ifndef __USBDEVICE_H__
#define __USBDEVICE_H__
/* Includes: */
#include "../../../Common/Common.h"
#include "StdDescriptors.h"
#include "USBInterrupt.h"
#include "Endpoint.h"
#if (ARCH == ARCH_AVR8)
#include "AVR8/Device.h"
#endif
/* Preprocessor Checks: */
#if !defined(__INCLUDE_FROM_USB_DRIVER)
#error Do not include this file directly. Include LUFA/Drivers/USB/USB.h instead.
#endif
#endif
/** @} */

@ -207,33 +207,12 @@ static void USB_Device_GetInternalSerialDescriptor(void)
} SignatureDescriptor;
SignatureDescriptor.Header.Type = DTYPE_String;
SignatureDescriptor.Header.Size = sizeof(SignatureDescriptor);
ATOMIC_BLOCK(ATOMIC_RESTORESTATE)
{
uint8_t SigReadAddress = 0x0E;
for (uint8_t SerialCharNum = 0; SerialCharNum < 20; SerialCharNum++)
{
uint8_t SerialByte = boot_signature_byte_get(SigReadAddress);
if (SerialCharNum & 0x01)
{
SerialByte >>= 4;
SigReadAddress++;
}
SerialByte &= 0x0F;
SignatureDescriptor.UnicodeString[SerialCharNum] = (SerialByte >= 10) ?
(('A' - 10) + SerialByte) : ('0' + SerialByte);
}
}
SignatureDescriptor.Header.Size = USB_Device_GetSerialString(SignatureDescriptor.UnicodeString,
sizeof(SignatureDescriptor.UnicodeString));
Endpoint_ClearSETUP();
Endpoint_Write_Control_Stream_LE(&SignatureDescriptor, sizeof(SignatureDescriptor));
Endpoint_ClearOUT();
}
#endif

@ -42,18 +42,12 @@
#define __DEVICESTDREQ_H__
/* Includes: */
#include <avr/pgmspace.h>
#include <avr/eeprom.h>
#include <avr/boot.h>
#include <util/atomic.h>
#include <stdint.h>
#include <stdbool.h>
#include "../../../Common/Common.h"
#include "StdDescriptors.h"
#include "Events.h"
#include "StdRequestType.h"
#include "USBTask.h"
#include "../LowLevel/USBController.h"
#include "USBController.h"
/* Enable C linkage for C++ Compilers: */
#if defined(__cplusplus)

@ -0,0 +1,88 @@
/*
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 device endpoint management definitions.
*
* This file contains structures, function prototypes and macros related to the management of the device's
* data endpoints when the library is initialized in USB device mode.
*
* \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_EndpointManagement
* \defgroup Group_EndpointRW Endpoint Data Reading and Writing
*
* Functions, macros, variables, enums and types related to data reading and writing from and to endpoints.
*/
/** \ingroup Group_EndpointRW
* \defgroup Group_EndpointPrimitiveRW Read/Write of Primitive Data Types
*
* Functions, macros, variables, enums and types related to data reading and writing of primitive data types
* from and to endpoints.
*/
/** \ingroup Group_EndpointManagement
* \defgroup Group_EndpointPacketManagement Endpoint Packet Management
*
* Functions, macros, variables, enums and types related to packet management of endpoints.
*/
/** \ingroup Group_USB
* \defgroup Group_EndpointManagement Endpoint Management
*
* 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
* send/receive functions for various data types.
*
* @{
*/
#ifndef __ENDPOINT_H__
#define __ENDPOINT_H__
/* Includes: */
#include "../../../Common/Common.h"
#if (ARCH == ARCH_AVR8)
#include "AVR8/Endpoint.h"
#endif
/* Preprocessor Checks: */
#if !defined(__INCLUDE_FROM_USB_DRIVER)
#error Do not include this file directly. Include LUFA/Drivers/USB/USB.h instead.
#endif
#endif
/** @} */

@ -51,10 +51,6 @@
#define __ENDPOINT_STREAM_H__
/* Includes: */
#include <avr/pgmspace.h>
#include <avr/eeprom.h>
#include <stdbool.h>
#include "../../../Common/Common.h"
#include "USBTask.h"

@ -69,8 +69,6 @@
#define __USBEVENTS_H__
/* Includes: */
#include <stdint.h>
#include "../../../Common/Common.h"
#include "USBMode.h"
@ -92,7 +90,7 @@
* before the mode is switched to the newly indicated mode but after the \ref EVENT_USB_Device_Disconnect
* event has fired (if connected before the role change).
*
* \note This event only exists on USB AVR models which support dual role modes.
* \note This event only exists on microcontrollers that support dual role USB modes.
* \n\n
*
* \note This event does not exist if the \c USB_DEVICE_ONLY or \c USB_HOST_ONLY tokens have been supplied
@ -105,7 +103,7 @@
*
* \param[in] ErrorCode Error code indicating the failure reason, a value in \ref USB_Host_ErrorCodes_t.
*
* \note This event only exists on USB AVR models which supports host mode.
* \note This event only exists on microcontrollers that supports USB host mode.
* \n\n
*
* \note This event does not exist if the \c USB_DEVICE_ONLY token is supplied to the compiler (see
@ -118,7 +116,7 @@
* the standard \ref EVENT_USB_Device_Connect() event and so can be used to programmatically start the USB
* management task to reduce CPU consumption.
*
* \note This event only exists on USB AVR models which supports host mode.
* \note This event only exists on microcontrollers that supports USB host mode.
* \n\n
*
* \note This event does not exist if the \c USB_DEVICE_ONLY token is supplied to the compiler (see
@ -132,7 +130,7 @@
* a USB device has been removed the USB interface whether or not it has been enumerated. This
* can be used to programmatically stop the USB management task to reduce CPU consumption.
*
* \note This event only exists on USB AVR models which supports host mode.
* \note This event only exists on microcontrollers that supports USB host mode.
* \n\n
*
* \note This event does not exist if the \c USB_DEVICE_ONLY token is supplied to the compiler (see
@ -152,7 +150,7 @@
* ErrorCode parameter indicates a control error, this will give the error
* code returned by the \ref USB_Host_SendControlRequest() function.
*
* \note This event only exists on USB AVR models which supports host mode.
* \note This event only exists on microcontrollers that supports USB host mode.
* \n\n
*
* \note This event does not exist if the \c USB_DEVICE_ONLY token is supplied to the compiler (see
@ -188,8 +186,9 @@
*/
void EVENT_USB_Host_StartOfFrame(void);
/** Event for USB device connection. This event fires when the AVR in device mode and the device is connected
* to a host, beginning the enumeration process, measured by a rising level on the AVR's VBUS pin.
/** Event for USB device connection. This event fires when the microcontroller is in USB Device mode
* and the device is connected to a USB host, beginning the enumeration process measured by a rising
* level on the microcontroller's VBUS sense pin.
*
* This event is time-critical; exceeding OS-specific delays within this event handler (typically of around
* two seconds) will prevent the device from enumerating correctly.
@ -202,17 +201,17 @@
* and disconnection events may be manually fired, and the \ref USB_DeviceState global changed manually.
* \n\n
*
* \note This event may fire multiple times during device enumeration on the series 2 USB AVRs with limited USB controllers
* \note This event may fire multiple times during device enumeration on the microcontrollers with limited USB controllers
* if \c NO_LIMITED_CONTROLLER_CONNECT is not defined.
*
* \see \ref Group_USBManagement for more information on the USB management task and reducing CPU usage.
*/
void EVENT_USB_Device_Connect(void);
/** Event for USB device disconnection. This event fires when the AVR in device mode and the device is disconnected
* from a host, measured by a falling level on the AVR's VBUS pin.
/** Event for USB device disconnection. This event fires when the microcontroller is in USB Device mode and the device is
* disconnected from a host, measured by a falling level on the microcontroller's VBUS sense pin.
*
* \note For the smaller series 2 USB AVRs with limited USB controllers, VBUS is not available to the USB controller.
* \note For the microcontrollers with limited USB controllers, VBUS sense is not available to the USB controller.
* this means that the current connection state is derived from the bus suspension and wake up events by default,
* which is not always accurate (host may suspend the bus while still connected). If the actual connection state
* needs to be determined, VBUS should be routed to an external pin, and the auto-detect behaviour turned off by
@ -220,7 +219,7 @@
* and disconnection events may be manually fired, and the \ref USB_DeviceState global changed manually.
* \n\n
*
* \note This event may fire multiple times during device enumeration on the series 2 USB AVRs with limited USB controllers
* \note This event may fire multiple times during device enumeration on the microcontrollers with limited USB controllers
* if \c NO_LIMITED_CONTROLLER_CONNECT is not defined.
*
* \see \ref Group_USBManagement for more information on the USB management task and reducing CPU usage.
@ -277,8 +276,9 @@
* \ref Group_USBManagement documentation).
* \n\n
*
* \note This event does not exist on the series 2 USB AVRs when the \c NO_LIMITED_CONTROLLER_CONNECT
* compile time token is not set - see \ref EVENT_USB_Device_Disconnect.
* \note This event does not exist on the microcontrollers with limited USB VBUS sensing abilities
* when the \c NO_LIMITED_CONTROLLER_CONNECT compile time token is not set - see
* \ref EVENT_USB_Device_Disconnect.
*
* \see \ref EVENT_USB_Device_WakeUp() event for accompanying Wake Up event.
*/
@ -294,8 +294,9 @@
* \ref Group_USBManagement documentation).
* \n\n
*
* \note This event does not exist on the series 2 USB AVRs when the \c NO_LIMITED_CONTROLLER_CONNECT
* compile time token is not set - see \ref EVENT_USB_Device_Connect.
* \note This event does not exist on the microcontrollers with limited USB VBUS sensing abilities
* when the \c NO_LIMITED_CONTROLLER_CONNECT compile time token is not set - see
* \ref EVENT_USB_Device_Disconnect.
*
* \see \ref EVENT_USB_Device_Suspend() event for accompanying Suspend event.
*/

@ -0,0 +1,68 @@
/*
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 mode definitions.
*
* USB Host mode related macros and enums. This module contains macros and enums which are used when
* the USB controller is initialized in host mode.
*
* \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_USB
* \defgroup Group_Host Host Management
*
* USB Host mode related macros and enums. This module contains macros and enums which are used when
* the USB controller is initialized in host mode.
*
* @{
*/
#ifndef __USBHOST_H__
#define __USBHOST_H__
/* Includes: */
#include "../../../Common/Common.h"
#if (ARCH == ARCH_AVR8)
#include "AVR8/Host.h"
#endif
/* Preprocessor Checks: */
#if !defined(__INCLUDE_FROM_USB_DRIVER)
#error Do not include this file directly. Include LUFA/Drivers/USB/USB.h instead.
#endif
#endif
/** @} */

@ -42,12 +42,10 @@
#define __HOSTSTDREQ_H__
/* Includes: */
#include <stdint.h>
#include <stdbool.h>
#include "../../../Common/Common.h"
#include "USBMode.h"
#include "StdRequestType.h"
#include "../LowLevel/USBController.h"
#include "USBController.h"
/* Enable C linkage for C++ Compilers: */
#if defined(__cplusplus)

@ -0,0 +1,69 @@
/*
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 OTG mode definitions.
*
* This file contains structures, function prototypes and macros related to USB OTG mode, where two USB devices
* may be linked directly together and exchange host/device roles as needed.
*
* \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_USB
* \defgroup Group_OTG USB On The Go (OTG) Management
*
* This module contains macros for embedded USB hosts with dual role On The Go capabilities, for managing role
* exchange. OTG is a way for two USB dual role devices to talk to one another directly without fixed device/host
* roles.
*
* @{
*/
#ifndef __USBOTG_H__
#define __USBOTG_H__
/* Includes: */
#include "../../../Common/Common.h"
#if (ARCH == ARCH_AVR8)
#include "AVR8/OTG.h"
#endif
/* Preprocessor Checks: */
#if !defined(__INCLUDE_FROM_USB_DRIVER)
#error Do not include this file directly. Include LUFA/Drivers/USB/USB.h instead.
#endif
#endif
/** @} */

@ -0,0 +1,97 @@
/*
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 pipe management definitions.
*
* This file contains structures, function prototypes and macros related to the management of the device's
* data pipes when the library is initialized in USB host mode.
*
* \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_PipeManagement
* \defgroup Group_PipeRW Pipe Data Reading and Writing
*
* Functions, macros, variables, enums and types related to data reading and writing from and to pipes.
*/
/** \ingroup Group_PipeRW
* \defgroup Group_PipePrimitiveRW Read/Write of Primitive Data Types
*
* Functions, macros, variables, enums and types related to data reading and writing of primitive data types
* from and to pipes.
*/
/** \ingroup Group_PipeManagement
* \defgroup Group_PipePacketManagement Pipe Packet Management
*
* Functions, macros, variables, enums and types related to packet management of pipes.
*/
/** \ingroup Group_PipeManagement
* \defgroup Group_PipeControlReq Pipe Control Request Management
*
* 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.
*
* \see Chapter 9 of the USB 2.0 specification.
*/
/** \ingroup Group_USB
* \defgroup Group_PipeManagement Pipe Management
*
* 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
* for various data types.
*
* @{
*/
#ifndef __PIPE_H__
#define __PIPE_H__
/* Includes: */
#include "../../../Common/Common.h"
#if (ARCH == ARCH_AVR8)
#include "AVR8/Pipe.h"
#endif
/* Preprocessor Checks: */
#if !defined(__INCLUDE_FROM_USB_DRIVER)
#error Do not include this file directly. Include LUFA/Drivers/USB/USB.h instead.
#endif
#endif
/** @} */

@ -51,10 +51,6 @@
#define __PIPE_STREAM_H__
/* Includes: */
#include <avr/pgmspace.h>
#include <avr/eeprom.h>
#include <stdbool.h>
#include "../../../Common/Common.h"
#include "USBTask.h"

@ -50,17 +50,12 @@
#define __USBDESCRIPTORS_H__
/* Includes: */
#include <avr/pgmspace.h>
#include <stdbool.h>
#include <stdint.h>
#include <stddef.h>
#include "../../../Common/Common.h"
#include "USBMode.h"
#include "Events.h"
#if defined(USB_CAN_BE_DEVICE)
#include "../LowLevel/Device.h"
#include "Device.h"
#endif
/* Enable C linkage for C++ Compilers: */
@ -81,24 +76,6 @@
*/
#define NO_DESCRIPTOR 0
#if (!defined(NO_INTERNAL_SERIAL) && \
(defined(__AVR_AT90USB647__) || defined(__AVR_AT90USB1287__) || \
defined(__AVR_ATmega32U6__) || defined(__AVR_AT90USB646__) || defined(__AVR_AT90USB1286__) || \
defined(__AVR_ATmega32U2__) || defined(__AVR_ATmega16U2__) || defined(__AVR_ATmega8U2__)))
/** String descriptor index for the device's unique serial number string descriptor within the device.
* This unique serial number is used by the host to associate resources to the device (such as drivers or COM port
* number allocations) to a device regardless of the port it is plugged in to on the host. Some USB AVRs contain
* a unique serial number internally, and setting the device descriptors serial number string index to this value
* will cause it to use the internal serial number.
*
* On unsupported devices, this will evaluate to NO_DESCRIPTOR and so will force the host to create a pseudo-serial
* number for the device.
*/
#define USE_INTERNAL_SERIAL 0xDC
#else
#define USE_INTERNAL_SERIAL NO_DESCRIPTOR
#endif
/** Macro to calculate the power value for the configuration descriptor, from a given number of milliamperes. */
#define USB_CONFIG_POWER_MA(mA) ((mA) >> 1)

@ -50,7 +50,7 @@
#define __STDREQTYPE_H__
/* Includes: */
#include <stdint.h>
#include "../../../Common/Common.h"
/* Preprocessor Checks: */
#if !defined(__INCLUDE_FROM_USB_DRIVER)

@ -0,0 +1,67 @@
/*
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 low level USB controller definitions.
*
* This file contains structures, function prototypes and macros related to the low level configuration of the
* USB controller, to start, stop and reset the USB library core.
*
* \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_USB
* \defgroup Group_USBManagement USB Interface Management
*
* Functions, macros, variables, enums and types related to the setup and management of the USB interface.
*
* @{
*/
#ifndef __USBCONTROLLER_H__
#define __USBCONTROLLER_H__
/* Includes: */
#include "../../../Common/Common.h"
#if (ARCH == ARCH_AVR8)
#include "AVR8/USBController.h"
#endif
/* Preprocessor Checks and Defines: */
#if !defined(__INCLUDE_FROM_USB_DRIVER)
#error Do not include this file directly. Include LUFA/Drivers/USB/USB.h instead.
#endif
#endif
/** @} */

@ -0,0 +1,57 @@
/*
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 controller interrupt service routine management.
*
* This file contains definitions required for the correct handling of low level USB service routine interrupts
* from the USB controller.
*
* \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.
*/
#ifndef __USBINTERRUPT_H__
#define __USBINTERRUPT_H__
/* Includes: */
#include "../../../Common/Common.h"
#if (ARCH == ARCH_AVR8)
#include "AVR8/USBInterrupt.h"
#endif
/* Preprocessor Checks: */
#if !defined(__INCLUDE_FROM_USB_DRIVER)
#error Do not include this file directly. Include LUFA/Drivers/USB/USB.h instead.
#endif
#endif

@ -42,11 +42,8 @@
#define __USBTASK_H__
/* Includes: */
#include <avr/interrupt.h>
#include <stdint.h>
#include <stdbool.h>
#include "../LowLevel/USBController.h"
#include "../../../Common/Common.h"
#include "USBController.h"
#include "Events.h"
#include "StdRequestType.h"
#include "StdDescriptors.h"
@ -100,11 +97,11 @@
* \ref HOST_STATE_Configured and \ref HOST_STATE_Suspended states which are not implemented by
* the library internally.
*
* To reduce program size and speed up checks of this global, it can be placed into one of the AVR's
* GPIOR hardware registers instead of RAM by defining the HOST_STATE_AS_GPIOR token to a value
* between 0 and 2 in the project makefile and passing it to the compiler via the -D switch. When
* defined, the corresponding GPIOR register should not be used in the user application except
* implicitly via the library APIs.
* To reduce program size and speed up checks of this global on the AVR8 architecture, it can be
* placed into one of the AVR's GPIOR hardware registers instead of RAM by defining the
* HOST_STATE_AS_GPIOR token to a value between 0 and 2 in the project makefile and passing it to
* the compiler via the -D switch. When defined, the corresponding GPIOR register should not be used
* in the user application except implicitly via the library APIs.
*
* \note This global is only present if the user application can be a USB host.
*
@ -129,11 +126,11 @@
* library. The only exception to this rule is if the NO_LIMITED_CONTROLLER_CONNECT token is used
* (see \ref EVENT_USB_Device_Connect() and \ref EVENT_USB_Device_Disconnect() events).
*
* To reduce program size and speed up checks of this global, it can be placed into one of the AVR's
* GPIOR hardware registers instead of RAM by defining the DEVICE_STATE_AS_GPIOR token to a value
* between 0 and 2 in the project makefile and passing it to the compiler via the -D switch. When
* defined, the corresponding GPIOR register should not be used in the user application except
* implicitly via the library APIs.
* To reduce program size and speed up checks of this global on the AVR8 architecture, it can be
* placed into one of the AVR's GPIOR hardware registers instead of RAM by defining the
* DEVICE_STATE_AS_GPIOR token to a value between 0 and 2 in the project makefile and passing it to
* the compiler via the -D switch. When defined, the corresponding GPIOR register should not be used
* in the user application except implicitly via the library APIs.
*
* \note This global is only present if the user application can be a USB device.
* \n\n

@ -34,36 +34,36 @@
* Master include file for the library USB functionality.
*
* This file should be included in all user projects making use of the USB portions of the library, instead of
* including any headers in the USB/LowLevel/ or USB/HighLevel/ subdirectories.
* the individual USB driver submodule headers.
*/
/** \defgroup Group_USB USB Core - LUFA/Drivers/USB/USB.h
*
* \section Sec_Dependencies Module Source Dependencies
* The following files must be built with any user project that uses this module:
* - LUFA/Drivers/USB/LowLevel/Device.c <i>(Makefile source module name: LUFA_SRC_USB)</i>
* - LUFA/Drivers/USB/LowLevel/Endpoint.c <i>(Makefile source module name: LUFA_SRC_USB)</i>
* - LUFA/Drivers/USB/LowLevel/Host.c <i>(Makefile source module name: LUFA_SRC_USB)</i>
* - LUFA/Drivers/USB/LowLevel/Pipe.c <i>(Makefile source module name: LUFA_SRC_USB)</i>
* - LUFA/Drivers/USB/LowLevel/USBController.c <i>(Makefile source module name: LUFA_SRC_USB)</i>
* - LUFA/Drivers/USB/LowLevel/USBInterrupt.c <i>(Makefile source module name: LUFA_SRC_USB)</i>
* - LUFA/Drivers/USB/HighLevel/ConfigDescriptor.c <i>(Makefile source module name: LUFA_SRC_USB)</i>
* - LUFA/Drivers/USB/HighLevel/DeviceStandardReq.c <i>(Makefile source module name: LUFA_SRC_USB)</i>
* - LUFA/Drivers/USB/HighLevel/Events.c <i>(Makefile source module name: LUFA_SRC_USB)</i>
* - LUFA/Drivers/USB/HighLevel/EndpointStream.c <i>(Makefile source module name: LUFA_SRC_USB)</i>
* - LUFA/Drivers/USB/HighLevel/HostStandardReq.c <i>(Makefile source module name: LUFA_SRC_USB)</i>
* - LUFA/Drivers/USB/HighLevel/PipeStream.c <i>(Makefile source module name: LUFA_SRC_USB)</i>
* - LUFA/Drivers/USB/HighLevel/USBTask.c <i>(Makefile source module name: LUFA_SRC_USB)</i>
* - LUFA/Drivers/USB/Core/ConfigDescriptor.c <i>(Makefile source module name: LUFA_SRC_USB)</i>
* - LUFA/Drivers/USB/Core/DeviceStandardReq.c <i>(Makefile source module name: LUFA_SRC_USB)</i>
* - LUFA/Drivers/USB/Core/Events.c <i>(Makefile source module name: LUFA_SRC_USB)</i>
* - LUFA/Drivers/USB/Core/EndpointStream.c <i>(Makefile source module name: LUFA_SRC_USB)</i>
* - LUFA/Drivers/USB/Core/HostStandardReq.c <i>(Makefile source module name: LUFA_SRC_USB)</i>
* - LUFA/Drivers/USB/Core/PipeStream.c <i>(Makefile source module name: LUFA_SRC_USB)</i>
* - LUFA/Drivers/USB/Core/USBTask.c <i>(Makefile source module name: LUFA_SRC_USB)</i>
* - LUFA/Drivers/USB/Core/<i>ARCH</i>/Device.c <i>(Makefile source module name: LUFA_SRC_USB)</i>
* - LUFA/Drivers/USB/Core/<i>ARCH</i>/Endpoint.c <i>(Makefile source module name: LUFA_SRC_USB)</i>
* - LUFA/Drivers/USB/Core/<i>ARCH</i>/Host.c <i>(Makefile source module name: LUFA_SRC_USB)</i>
* - LUFA/Drivers/USB/Core/<i>ARCH</i>/Pipe.c <i>(Makefile source module name: LUFA_SRC_USB)</i>
* - LUFA/Drivers/USB/Core/<i>ARCH</i>/USBController.c <i>(Makefile source module name: LUFA_SRC_USB)</i>
* - LUFA/Drivers/USB/Core/<i>ARCH</i>/USBInterrupt.c <i>(Makefile source module name: LUFA_SRC_USB)</i>
* - LUFA/Drivers/USB/Class/Common/HIDParser.c <i>(Makefile source module name: LUFA_SRC_USB)</i>
*
* \section Sec_ModDescription Module Description
* Driver and framework for the USB controller hardware on the USB series of AVR microcontrollers. This module
* Driver and framework for the USB controller of the selected architecture and microcontroller model. This module
* consists of many submodules, and is designed to provide an easy way to configure and control USB host, device
* or OTG mode USB applications.
*
* The USB stack requires the sole control over the USB controller in the microcontroller only; i.e. it does not
* require any additional AVR timers, etc. to operate. This ensures that the USB stack requires as few resources
* as possible.
* require any additional timers or other peripherals to operate. This ensures that the USB stack requires as few
* resources as possible.
*
* The USB stack can be used in Device Mode for connections to USB Hosts (see \ref Group_Device), in Host mode for
* hosting of other USB devices (see \ref Group_Host), or as a dual role device which can either act as a USB host
@ -361,39 +361,38 @@
#endif
/* Includes: */
#include "HighLevel/USBMode.h"
#include "../../Common/Common.h"
#include "Core/USBMode.h"
/* Preprocessor Checks: */
#if (!defined(USB_SERIES_2_AVR) && !defined(USB_SERIES_4_AVR) && \
!defined(USB_SERIES_6_AVR) && !defined(USB_SERIES_7_AVR))
#error The currently selected AVR model is not supported under the USB component of the LUFA library.
#if (!defined(USB_CAN_BE_DEVICE) && !defined(USB_CAN_BE_HOST))
#error The currently selected architecture is not supported under the USB component of the library.
#endif
/* Includes: */
#include "HighLevel/USBTask.h"
#include "HighLevel/Events.h"
#include "HighLevel/StdDescriptors.h"
#include "HighLevel/ConfigDescriptor.h"
#include "LowLevel/USBController.h"
#include "LowLevel/USBInterrupt.h"
#include "Core/USBTask.h"
#include "Core/Events.h"
#include "Core/StdDescriptors.h"
#include "Core/ConfigDescriptor.h"
#include "Core/USBController.h"
#include "Core/USBInterrupt.h"
#if defined(USB_CAN_BE_HOST) || defined(__DOXYGEN__)
#include "LowLevel/Host.h"
#include "LowLevel/Pipe.h"
#include "HighLevel/HostStandardReq.h"
#include "HighLevel/PipeStream.h"
#include "Core/Host.h"
#include "Core/Pipe.h"
#include "Core/HostStandardReq.h"
#include "Core/PipeStream.h"
#endif
#if defined(USB_CAN_BE_DEVICE) || defined(__DOXYGEN__)
#include "LowLevel/Device.h"
#include "LowLevel/Endpoint.h"
#include "HighLevel/DeviceStandardReq.h"
#include "HighLevel/EndpointStream.h"
#include "Core/Device.h"
#include "Core/Endpoint.h"
#include "Core/DeviceStandardReq.h"
#include "Core/EndpointStream.h"
#endif
#if defined(USB_CAN_BE_BOTH) || defined(__DOXYGEN__)
#include "LowLevel/OTG.h"
#include "Core/OTG.h"
#endif
#include "Class/Audio.h"

@ -13,44 +13,31 @@
* \dir LUFA/Drivers
* \brief Library hardware and software drivers.
*
* This folder contains all the library hardware and software drivers for each supported board and USB AVR
* This folder contains all the library hardware and software drivers for each supported board, architecture and
* microcontroller model.
*
* \dir LUFA/Drivers/Misc
* \brief Miscellaneous driver files.
*
* This folder contains drivers for aspects other than the USB interface, board hardware or AVR peripherals.
* This folder contains drivers for aspects other than the USB interface, board hardware or microcontroller peripherals.
*
* \dir LUFA/Drivers/Peripheral
* \brief USB AVR peripheral driver files.
* \brief Microcontroller peripheral driver files.
*
* This folder contains drivers for several of the AVR internal peripherals such as the USART, compatible with
* all USB AVR models.
*
* \dir LUFA/Drivers/Peripheral/AVR8
* \brief AVR8 AVR microcontroller model specific peripheral driver files.
*
* This folder contains drivers for several of the AVR internal peripherals such as the USART, compatible only with
* the 8-bit AVR microcontroller models, such as the AT90USB1287. Its contents should <b>not</b> be included by the
* user application - the dispatch header file located in the parent directory should be used instead.
* This folder contains drivers for various low level microcontroller peripherals, usually located on the microcontroller
* die within the same physical chip.
*
* \dir LUFA/Drivers/USB
* \brief USB controller peripheral driver files.
*
* This folder contains the main header files required to implement the USB interface in the USB supporting AVR models.
* The header files contained directly in this folder should be included in the user application in order to gain USB
* functionality, and the appropriate C source files in the LowLevel and HighLevel driver folders added to the compile
* and link stages.
*
* \dir LUFA/Drivers/USB/LowLevel
* \brief Low level USB driver files.
* This folder contains the complete LUFA USB stack and controller files, including the core driver and stack, as well
* as the USB class driver implementations.
*
* This folder contains low level USB driver source files required to implement USB functionality on the USB AVR microcontrollers.
* \dir LUFA/Drivers/USB/Core
* \brief Core USB driver files.
*
* \dir LUFA/Drivers/USB/HighLevel
* \brief High level USB driver files.
*
* This folder contains high level USB driver source files required to implement USB functionality on the USB AVR microcontrollers.
* This folder contains the core USB stack and controller driver files, to correctly implement USB functionality on the
* target architecture and microcontroller model. This
*
* \dir LUFA/Drivers/USB/Class
* \brief USB Class helper driver files.
@ -76,34 +63,12 @@
* the Atmel corporation. Header files in this folder should be included in user applications requiring the functionality of
* hardware placed on supported boards.
*
* \dir LUFA/Drivers/Board/USBKEY
* \brief USBKEY board hardware driver files.
*
* This folder contains drivers for hardware on the Atmel USBKEY demonstration board. The header files in this folder should
* not be included directly in user applications; the similarly named dispatch header files located in the parent Board directory
* should be included instead.
*
* \dir LUFA/Drivers/Board/STK526
* \brief STK526 board hardware driver files.
*
* This folder contains drivers for hardware on the Atmel STK526 development board. The header files in this folder should
* not be included directly in user applications; the similarly named dispatch header files located in the parent Board directory
* should be included instead.
*
* \dir LUFA/Drivers/Board/STK525
* \brief STK525 board hardware driver files.
*
* This folder contains drivers for hardware on the Atmel STK525 development board. The header files in this folder should
* not be included directly in user applications; the similarly named dispatch header files located in the parent Board directory
* should be included instead.
*
* \dir LUFA/Drivers/Board/RZUSBSTICK
* \brief RZUSBSTICK board hardware driver files.
*
* This folder contains drivers for hardware on the Atmel RZUSBSTICK board, as used in the Atmel "Raven" wireless kits. The header
* files in this folder should not be included directly in user applications; the similarly named dispatch header files located in
* the parent Board directory should be included instead.
* \dir LUFA/Drivers/Board/ADAFRUITU4
* \brief ADAFRUITU4 board hardware driver files.
*
* This folder contains drivers for hardware on the Adafruit U4 breakout board (http://ladyada.net/products/atmega32u4breakout).
* The header files in this folder should not be included directly in user applications; the similarly named dispatch header files
* located in the parent Board directory should be included instead.
* \dir LUFA/Drivers/Board/ATAVRUSBRF01
* \brief ATAVRUSBRF01 board hardware driver files.
*
@ -111,6 +76,13 @@
* files in this folder should not be included directly in user applications; the similarly named dispatch header files located in
* the parent Board directory should be included instead.
*
* \dir LUFA/Drivers/Board/BENITO
* \brief BENITO board hardware driver files.
*
* This folder contains drivers for hardware on the Benito boards (http://dorkbotpdx.org/wiki/benito). The header files in this
* folder should not be included directly in user applications; the similarly named dispatch header files located in the parent
* Board directory should be included instead.
*
* \dir LUFA/Drivers/Board/BUMBLEB
* \brief BUMBLEB board hardware driver files.
*
@ -118,12 +90,26 @@
* files in this folder should not be included directly in user applications; the similarly named dispatch header files located in
* the parent Board directory should be included instead.
*
* \dir LUFA/Drivers/Board/XPLAIN
* \brief XPLAIN board hardware driver files.
* \dir LUFA/Drivers/Board/BUI
* \brief BUI board hardware driver files.
*
* This folder contains drivers for hardware on the Atmel XPLAIN board (all hardware revisions). The header files in this folder
* should not be included directly in user applications; the similarly named dispatch header files located in the parent Board
* directory should be included instead.
* This folder contains drivers for hardware on the Busware BUI (http://www.busware.de/tiki-index.php?page=BUI).
* The header files in this folder should not be included directly in user applications; the similarly named dispatch header files
* located in the parent Board directory should be included instead.
*
* \dir LUFA/Drivers/Board/BLACKCAT
* \brief BLACKCAT board hardware driver files.
*
* This folder contains drivers for hardware on the TCNISO Blackcat USB JTAG (http://www.embeddedcomputers.net/products/BlackcatUSB/.
* The header files in this folder should not be included directly in user applications; the similarly named dispatch header files
* located in the parent Board directory should be included instead.
*
* \dir LUFA/Drivers/Board/CULV3
* \brief CULV3 board hardware driver files.
*
* This folder contains drivers for hardware on the Busware CUL V3 (http://busware.de/tiki-index.php?page=CUL).
* The header files in this folder should not be included directly in user applications; the similarly named dispatch header files
* located in the parent Board directory should be included instead.
*
* \dir LUFA/Drivers/Board/EVK527
* \brief XPLAIN board hardware driver files.
@ -132,31 +118,31 @@
* not be included directly in user applications; the similarly named dispatch header files located in the parent Board directory
* should be included instead.
*
* \dir LUFA/Drivers/Board/TEENSY
* \brief TEENSY board hardware driver files.
* \dir LUFA/Drivers/Board/JMDBU2
* \brief JM-DB-U2 board hardware driver files.
*
* This folder contains drivers for hardware on all revisions of the PJRC Teensy boards (http://www.pjrc.com/teensy/). The header
* files in this folder should not be included directly in user applications; the similarly named dispatch header files located
* in the parent Board directory should be included instead.
* This folder contains drivers for hardware on the JM-DB-U2 boards (http://u2.mattair.net/). The header files in this folder
* should not be included directly in user applications; the similarly named dispatch header files located in the parent Board
* directory should be included instead.
*
* \dir LUFA/Drivers/Board/USBTINYMKII
* \brief USBTINY-MKII board hardware driver files.
* \dir LUFA/Drivers/Board/MAXIMUS
* \brief MAXIMUS board hardware driver files.
*
* This folder contains drivers for hardware on all revisions of the USBTINY-MKII boards (http://tom-itx.dyndns.org:81/~webpage/).
* The header files in this folder should not be included directly in user applications; the similarly named dispatch header files
* located in the parent Board directory should be included instead.
* This folder contains drivers for hardware on the Maximus boards (http://www.avrusb.com/). The header files in this folder
* should not be included directly in user applications; the similarly named dispatch header files located in the parent Board
* directory should be included instead.
*
* \dir LUFA/Drivers/Board/BENITO
* \brief BENITO board hardware driver files.
* \dir LUFA/Drivers/Board/MICROSIN162
* \brief MICROSIN162 board hardware driver files.
*
* This folder contains drivers for hardware on the Benito boards (http://dorkbotpdx.org/wiki/benito). The header files in this
* folder should not be included directly in user applications; the similarly named dispatch header files located in the parent
* Board directory should be included instead.
* This folder contains drivers for hardware on the Microsin AVR-USB162 board (http://microsin.ru/content/view/685/44/). The
* header files in this folder should not be included directly in user applications; the similarly named dispatch header files
* located in the parent Board directory should be included instead.
*
* \dir LUFA/Drivers/Board/JMDBU2
* \brief JM-DB-U2 board hardware driver files.
* \dir LUFA/Drivers/Board/MINIMUS
* \brief MINIMUS board hardware driver files.
*
* This folder contains drivers for hardware on the JM-DB-U2 boards (http://u2.mattair.net/). The header files in this folder
* This folder contains drivers for hardware on the Minimus boards (http://www.minimususb.com/). The header files in this folder
* should not be included directly in user applications; the similarly named dispatch header files located in the parent Board
* directory should be included instead.
*
@ -167,6 +153,55 @@
* The header files in this folder should not be included directly in user applications; the similarly named dispatch header files
* located in the parent Board directory should be included instead.
*
* \dir LUFA/Drivers/Board/RZUSBSTICK
* \brief RZUSBSTICK board hardware driver files.
*
* This folder contains drivers for hardware on the Atmel RZUSBSTICK board, as used in the Atmel "Raven" wireless kits. The header
* files in this folder should not be included directly in user applications; the similarly named dispatch header files located in
* the parent Board directory should be included instead.
*
* \dir LUFA/Drivers/Board/SPARKFUN8U2
* \brief SPARKFUN8U2 board hardware driver files.
*
* This folder contains drivers for hardware on the Sparkfun ATMEGA8U2 breakout board (http://www.sparkfun.com/products/10277). The
* header files in this folder should not be included directly in user applications; the similarly named dispatch header files located
* in the parent Board directory should be included instead.
*
* \dir LUFA/Drivers/Board/STK525
* \brief STK525 board hardware driver files.
*
* This folder contains drivers for hardware on the Atmel STK525 development board. The header files in this folder should
* not be included directly in user applications; the similarly named dispatch header files located in the parent Board directory
* should be included instead.
*
* \dir LUFA/Drivers/Board/STK526
* \brief STK526 board hardware driver files.
*
* This folder contains drivers for hardware on the Atmel STK526 development board. The header files in this folder should
* not be included directly in user applications; the similarly named dispatch header files located in the parent Board directory
* should be included instead.
*
* \dir LUFA/Drivers/Board/TEENSY
* \brief TEENSY board hardware driver files.
*
* This folder contains drivers for hardware on all revisions of the PJRC Teensy boards (http://www.pjrc.com/teensy/). The header
* files in this folder should not be included directly in user applications; the similarly named dispatch header files located
* in the parent Board directory should be included instead.
*
* \dir LUFA/Drivers/Board/UDIP
* \brief UDIP board hardware driver files.
*
* This folder contains drivers for hardware on the Linnix UDIP boards (http://linnix.com/udip/).
* The header files in this folder should not be included directly in user applications; the similarly named dispatch header files
* located in the parent Board directory should be included instead.
*
* \dir LUFA/Drivers/Board/UNO
* \brief UNO board hardware driver files.
*
* This folder contains drivers for hardware on the Arduino Uno boards (http://www.arduino.cc).
* The header files in this folder should not be included directly in user applications; the similarly named dispatch header files
* located in the parent Board directory should be included instead.
*
* \dir LUFA/Drivers/Board/USBFOO
* \brief USBFOO board hardware driver files.
*
@ -174,6 +209,27 @@
* The header files in this folder should not be included directly in user applications; the similarly named dispatch header files
* located in the parent Board directory should be included instead.
*
* \dir LUFA/Drivers/Board/USBKEY
* \brief USBKEY board hardware driver files.
*
* This folder contains drivers for hardware on the Atmel USBKEY demonstration board. The header files in this folder should
* not be included directly in user applications; the similarly named dispatch header files located in the parent Board directory
* should be included instead.
*
* \dir LUFA/Drivers/Board/USBTINYMKII
* \brief USBTINY-MKII board hardware driver files.
*
* This folder contains drivers for hardware on all revisions of the USBTINY-MKII boards (http://tom-itx.dyndns.org:81/~webpage/).
* The header files in this folder should not be included directly in user applications; the similarly named dispatch header files
* located in the parent Board directory should be included instead.
*
* \dir LUFA/Drivers/Board/XPLAIN
* \brief XPLAIN board hardware driver files.
*
* This folder contains drivers for hardware on the Atmel XPLAIN board (all hardware revisions). The header files in this folder
* should not be included directly in user applications; the similarly named dispatch header files located in the parent Board
* directory should be included instead.
*
* \dir LUFA/CodeTemplates
* \brief Code templates for use in LUFA powered applications.
*

@ -22,19 +22,19 @@ ifeq ($(origin ARCH), undefined)
endif
# Define module source file lists
LUFA_SRC_USB = $(LUFA_ROOT_PATH)/Drivers/USB/LowLevel/Device.c \
$(LUFA_ROOT_PATH)/Drivers/USB/LowLevel/Endpoint.c \
$(LUFA_ROOT_PATH)/Drivers/USB/LowLevel/Host.c \
$(LUFA_ROOT_PATH)/Drivers/USB/LowLevel/Pipe.c \
$(LUFA_ROOT_PATH)/Drivers/USB/LowLevel/USBController.c \
$(LUFA_ROOT_PATH)/Drivers/USB/LowLevel/USBInterrupt.c \
$(LUFA_ROOT_PATH)/Drivers/USB/HighLevel/ConfigDescriptor.c \
$(LUFA_ROOT_PATH)/Drivers/USB/HighLevel/DeviceStandardReq.c \
$(LUFA_ROOT_PATH)/Drivers/USB/HighLevel/Events.c \
$(LUFA_ROOT_PATH)/Drivers/USB/HighLevel/EndpointStream.c \
$(LUFA_ROOT_PATH)/Drivers/USB/HighLevel/HostStandardReq.c \
$(LUFA_ROOT_PATH)/Drivers/USB/HighLevel/PipeStream.c \
$(LUFA_ROOT_PATH)/Drivers/USB/HighLevel/USBTask.c \
LUFA_SRC_USB = $(LUFA_ROOT_PATH)/Drivers/USB/Core/$(ARCH)/Device.c \
$(LUFA_ROOT_PATH)/Drivers/USB/Core/$(ARCH)/Endpoint.c \
$(LUFA_ROOT_PATH)/Drivers/USB/Core/$(ARCH)/Host.c \
$(LUFA_ROOT_PATH)/Drivers/USB/Core/$(ARCH)/Pipe.c \
$(LUFA_ROOT_PATH)/Drivers/USB/Core/$(ARCH)/USBController.c \
$(LUFA_ROOT_PATH)/Drivers/USB/Core/$(ARCH)/USBInterrupt.c \
$(LUFA_ROOT_PATH)/Drivers/USB/Core/ConfigDescriptor.c \
$(LUFA_ROOT_PATH)/Drivers/USB/Core/DeviceStandardReq.c \
$(LUFA_ROOT_PATH)/Drivers/USB/Core/Events.c \
$(LUFA_ROOT_PATH)/Drivers/USB/Core/EndpointStream.c \
$(LUFA_ROOT_PATH)/Drivers/USB/Core/HostStandardReq.c \
$(LUFA_ROOT_PATH)/Drivers/USB/Core/PipeStream.c \
$(LUFA_ROOT_PATH)/Drivers/USB/Core/USBTask.c \
$(LUFA_ROOT_PATH)/Drivers/USB/Class/Common/HIDParser.c
LUFA_SRC_USBCLASS = $(LUFA_ROOT_PATH)/Drivers/USB/Class/Device/Audio.c \
$(LUFA_ROOT_PATH)/Drivers/USB/Class/Device/CDC.c \

Loading…
Cancel
Save