Revert changes made for the partial port to the AVR32 architecture.

pull/1469/head
Dean Camera 15 years ago
parent a7aaa45ec4
commit 071fd8ce53

File diff suppressed because one or more lines are too long

@ -1,99 +0,0 @@
/*
LUFA Library
Copyright (C) Dean Camera, 2010.
dean [at] fourwalledcubicle [dot] com
www.fourwalledcubicle.com
*/
/*
Copyright 2010 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
*
* Atomic block header for the 32-bit AVRs, modelled on the 8-bit AVR's util/atomic.h
* header.
*
* \note Do not include this file directly, rather include the Common.h header file instead to gain this file's
* functionality on the 32-bit AVRs.
*/
#ifndef __ATOMIC_H__
#define __ATOMIC_H__
/* Includes: */
#include <avr32/io.h>
#include <stdint.h>
#include <stdbool.h>
/* Public Interface - May be used in end-application: */
/* Macros: */
#define ATOMIC_BLOCK(type) for ( type, __ToDo = __iCliRetVal(); \
__ToDo ; __ToDo = 0 )
#define NONATOMIC_BLOCK(type) for ( type, __ToDo = __iSeiRetVal(); \
__ToDo ; __ToDo = 0 )
#define ATOMIC_RESTORESTATE uint8_t sreg_save \
__attribute__((__cleanup__(__iRestore))) = 0 /* TODO */
#define ATOMIC_FORCEON uint8_t sreg_save \
__attribute__((__cleanup__(__iSeiParam))) = 0
#define NONATOMIC_RESTORESTATE uint8_t sreg_save \
__attribute__((__cleanup__(__iRestore))) = 0 /* TODO */
#define NONATOMIC_FORCEOFF uint8_t sreg_save \
__attribute__((__cleanup__(__iCliParam))) = 0
/* Private Interface - For use in library only: */
#if !defined(__DOXYGEN__)
/* Inline Functions: */
static __inline__ uint8_t __iSeiRetVal(void)
{
((avr32_sr_t*)AVR32_SR_T)->gm = true;
return 1;
}
static __inline__ uint8_t __iCliRetVal(void)
{
((avr32_sr_t*)AVR32_SR_T)->gm = false;
return 1;
}
static __inline__ void __iSeiParam(const uint8_t *__s)
{
((avr32_sr_t*)AVR32_SR_T)->gm = true;
__asm__ volatile ("" ::: "memory");
(void)__s;
}
static __inline__ void __iCliParam(const uint8_t *__s)
{
((avr32_sr_t*)AVR32_SR_T)->gm = false;
__asm__ volatile ("" ::: "memory");
(void)__s;
}
static __inline__ void __iRestore(const uint8_t *__s)
{
((avr32_sr_t*)AVR32_SR_T)->gm = *__s;
__asm__ volatile ("" ::: "memory");
}
#endif
#endif

@ -94,9 +94,6 @@
* such as the Joystick driver, where the removal would adversely affect the code's operation is still disallowed. */
#define BOARD_NONE 10
/** Selects the EVK1101 specific board drivers, including Temperature, Button, Dataflash, Joystick and LED drivers. */
#define BOARD_EVK1101 11
#if !defined(__DOXYGEN__)
#define BOARD_ BOARD_NONE

@ -56,17 +56,8 @@
#define __COMMON_H__
/* Includes: */
#if defined(__AVR32__)
#include <avr32/io.h>
#include <stdint.h>
#include "Atomic.h"
#define PROGMEM const
#elif defined(__AVR__)
#include <avr/io.h>
#endif
#include <avr/io.h>
#include "FunctionAttributes.h"
#include "BoardTypes.h"
@ -188,20 +179,6 @@
}
}
/* Type Defines: */
#if defined(__AVR32__)
/** Type define for an unsigned native word-sized chunk of data. */
typedef uint32_t uintN_t;
/** Type define for a signed native word-sized chunk of data. */
typedef int32_t intN_t;
#elif defined(__AVR__)
/** Type define for an unsigned native word-sized chunk of data. */
typedef uint8_t uintN_t;
/** Type define for a signed native word-sized chunk of data. */
typedef int8_t intN_t;
#endif
#endif
/** @} */

@ -70,7 +70,8 @@
// TODO: Initialize the appropriate port pins as an inputs here, with pull-ups
}
static inline uintN_t Buttons_GetStatus(void)
static inline uint8_t Buttons_GetStatus(void) ATTR_WARN_UNUSED_RESULT;
static inline uint8_t Buttons_GetStatus(void)
{
// TODO: Return current button status here, debounced if required
}

@ -82,7 +82,8 @@
// TODO: Initialize joystick port pins as inputs with pull-ups
}
static inline uintN_t Joystick_GetStatus(void)
static inline uint8_t Joystick_GetStatus(void) ATTR_WARN_UNUSED_RESULT;
static inline uint8_t Joystick_GetStatus(void)
{
// TODO: Return current joystick position data which can be obtained by masking against the JOY_* macros
}

@ -84,32 +84,33 @@
// TODO: Add code to initialize LED port pins as outputs here
}
static inline void LEDs_TurnOnLEDs(const uintN_t LEDMask)
static inline void LEDs_TurnOnLEDs(const uint8_t LEDMask)
{
// TODO: Add code to turn on LEDs given in the LEDMask mask here, leave others as-is
}
static inline void LEDs_TurnOffLEDs(const uintN_t LEDMask)
static inline void LEDs_TurnOffLEDs(const uint8_t LEDMask)
{
// TODO: Add code to turn off LEDs given in the LEDMask mask here, leave others as-is
}
static inline void LEDs_SetAllLEDs(const uintN_t LEDMask)
static inline void LEDs_SetAllLEDs(const uint8_t LEDMask)
{
// TODO: Add code to turn on only LEDs given in the LEDMask mask here, all others off
}
static inline void LEDs_ChangeLEDs(const uintN_t LEDMask, const uintN_t ActiveMask)
static inline void LEDs_ChangeLEDs(const uint8_t LEDMask, const uint8_t ActiveMask)
{
// TODO: Add code to set the Leds in the given LEDMask to the status given in ActiveMask here
}
static inline void LEDs_ToggleLEDs(const uintN_t LEDMask)
static inline void LEDs_ToggleLEDs(const uint8_t LEDMask)
{
// TODO: Add code to toggle the Leds in the given LEDMask, ignoring all others
}
static inline uintN_t LEDs_GetLEDs(void)
static inline uint8_t LEDs_GetLEDs(void) ATTR_WARN_UNUSED_RESULT;
static inline uint8_t LEDs_GetLEDs(void)
{
// TODO: Add code to return the current LEDs status' here which can be masked against LED_LED* macros
}

@ -79,7 +79,8 @@
PORTD |= BUTTONS_BUTTON1;
}
static inline uintN_t Buttons_GetStatus(void)
static inline uint8_t Buttons_GetStatus(void) ATTR_WARN_UNUSED_RESULT;
static inline uint8_t Buttons_GetStatus(void)
{
return ((PIND & BUTTONS_BUTTON1) ^ BUTTONS_BUTTON1);
}

@ -96,32 +96,33 @@
PORTD &= ~LEDS_ALL_LEDS;
}
static inline void LEDs_TurnOnLEDs(const uintN_t LEDMask)
static inline void LEDs_TurnOnLEDs(const uint8_t LEDMask)
{
PORTD |= (LEDMask & LEDS_ALL_LEDS);
}
static inline void LEDs_TurnOffLEDs(const uintN_t LEDMask)
static inline void LEDs_TurnOffLEDs(const uint8_t LEDMask)
{
PORTD &= ~(LEDMask & LEDS_ALL_LEDS);
}
static inline void LEDs_SetAllLEDs(const uintN_t LEDMask)
static inline void LEDs_SetAllLEDs(const uint8_t LEDMask)
{
PORTD = (PORTD & ~LEDS_ALL_LEDS) | (LEDMask & LEDS_ALL_LEDS);
}
static inline void LEDs_ChangeLEDs(const uintN_t LEDMask, const uintN_t ActiveMask)
static inline void LEDs_ChangeLEDs(const uint8_t LEDMask, const uint8_t ActiveMask)
{
PORTD = ((PORTD & ~(LEDMask & LEDS_ALL_LEDS)) | (ActiveMask & LEDS_ALL_LEDS));
}
static inline void LEDs_ToggleLEDs(const uintN_t LEDMask)
static inline void LEDs_ToggleLEDs(const uint8_t LEDMask)
{
PORTD = (PORTD ^ (LEDMask & LEDS_ALL_LEDS));
}
static inline uintN_t LEDs_GetLEDs(void)
static inline uint8_t LEDs_GetLEDs(void) ATTR_WARN_UNUSED_RESULT;
static inline uint8_t LEDs_GetLEDs(void)
{
return (PORTD & LEDS_ALL_LEDS);
}

@ -81,7 +81,8 @@
PORTD |= BUTTONS_BUTTON1;
}
static inline uintN_t Buttons_GetStatus(void)
static inline uint8_t Buttons_GetStatus(void) ATTR_WARN_UNUSED_RESULT;
static inline uint8_t Buttons_GetStatus(void)
{
return ((PIND & BUTTONS_BUTTON1) ^ BUTTONS_BUTTON1);
}

@ -30,7 +30,7 @@
/** \file
*
* Board specific joystick driver header for the BUMBLEB. The BUMBLEB third-party board does not include any on-board
* Board specific joystick driver header for the USBKEY. The BUMBLEB third-party board does not include any on-board
* peripherals, but does have an officially recommended external peripheral layout for buttons, LEDs and a Joystick.
*
* \note This file should not be included directly. It is automatically included as needed by the joystick driver
@ -40,7 +40,7 @@
/** \ingroup Group_Joystick
* @defgroup Group_Joystick_BUMBLEB BUMBLEB
*
* Board specific joystick driver header for the BUMBLEB. The BUMBLEB third-party board does not include any on-board
* Board specific joystick driver header for the USBKEY. The BUMBLEB third-party board does not include any on-board
* peripherals, but does have an officially recommended external peripheral layout for buttons, LEDs and a Joystick.
*
* \note This file should not be included directly. It is automatically included as needed by the joystick driver
@ -98,7 +98,8 @@
PORTD |= JOY_MASK;
}
static inline uintN_t Joystick_GetStatus(void)
static inline uint8_t Joystick_GetStatus(void) ATTR_WARN_UNUSED_RESULT;
static inline uint8_t Joystick_GetStatus(void)
{
return (uint8_t)(~PIND & JOY_MASK);
}

@ -95,27 +95,28 @@
PORTB &= ~LEDS_ALL_LEDS;
}
static inline void LEDs_TurnOnLEDs(const uintN_t LedMask)
static inline void LEDs_TurnOnLEDs(const uint8_t LedMask)
{
PORTB |= LedMask;
}
static inline void LEDs_TurnOffLEDs(const uintN_t LedMask)
static inline void LEDs_TurnOffLEDs(const uint8_t LedMask)
{
PORTB &= ~LedMask;
}
static inline void LEDs_SetAllLEDs(const uintN_t LedMask)
static inline void LEDs_SetAllLEDs(const uint8_t LedMask)
{
PORTB = ((PORTB & ~LEDS_ALL_LEDS) | LedMask);
}
static inline void LEDs_ChangeLEDs(const uintN_t LedMask, const uintN_t ActiveMask)
static inline void LEDs_ChangeLEDs(const uint8_t LedMask, const uint8_t ActiveMask)
{
PORTB = ((PORTB & ~LedMask) | ActiveMask);
}
static inline uintN_t LEDs_GetLEDs(void)
static inline uint8_t LEDs_GetLEDs(void) ATTR_WARN_UNUSED_RESULT;
static inline uint8_t LEDs_GetLEDs(void)
{
return (PORTB & LEDS_ALL_LEDS);
}

@ -86,8 +86,6 @@
#include "EVK527/Buttons.h"
#elif (BOARD == BOARD_USER)
#include "Board/Buttons.h"
#elif (BOARD == BOARD_EVK1101)
#include "EVK1101/Buttons.h"
#else
#error The selected board does not contain any GPIO buttons.
#endif
@ -105,7 +103,7 @@
*
* \return Mask indicating which board buttons are currently pressed
*/
static inline uintN_t Buttons_GetStatus(void) ATTR_WARN_UNUSED_RESULT;
static inline uint8_t Buttons_GetStatus(void) ATTR_WARN_UNUSED_RESULT;
#endif
#endif

@ -127,7 +127,7 @@
static inline uint8_t Dataflash_TransferByte(const uint8_t Byte) ATTR_ALWAYS_INLINE;
static inline uint8_t Dataflash_TransferByte(const uint8_t Byte)
{
return SPI_Transfer(Byte);
return SPI_TransferByte(Byte);
}
/** Sends a byte to the currently selected dataflash IC, and ignores the next byte from the dataflash.
@ -137,7 +137,7 @@
static inline void Dataflash_SendByte(const uint8_t Byte) ATTR_ALWAYS_INLINE;
static inline void Dataflash_SendByte(const uint8_t Byte)
{
SPI_Send(Byte);
SPI_SendByte(Byte);
}
/** Sends a dummy byte to the currently selected dataflash IC, and returns the next byte from the dataflash.
@ -147,7 +147,7 @@
static inline uint8_t Dataflash_ReceiveByte(void) ATTR_ALWAYS_INLINE ATTR_WARN_UNUSED_RESULT;
static inline uint8_t Dataflash_ReceiveByte(void)
{
return SPI_Receive();
return SPI_ReceiveByte();
}
/* Includes: */
@ -167,8 +167,6 @@
#include "EVK527/Dataflash.h"
#elif (BOARD == BOARD_USER)
#include "Board/Dataflash.h"
#elif (BOARD = BOARD_EVK1101)
#include "EVK1101/Dataflash.h"
#else
#error The selected board does not contain a dataflash IC.
#endif

@ -1,98 +0,0 @@
/*
LUFA Library
Copyright (C) Dean Camera, 2010.
dean [at] fourwalledcubicle [dot] com
www.fourwalledcubicle.com
*/
/*
Copyright 2010 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
*
* Board specific Buttons driver header for the EVK1101.
*
* \note This file should not be included directly. It is automatically included as needed by the Buttons driver
* dispatch header located in LUFA/Drivers/Board/Buttons.h.
*/
/** \ingroup Group_Buttons
* @defgroup Group_Buttons_EVK1101 EVK1101
*
* Board specific Buttons driver header for the EVK1101.
*
* \note This file should not be included directly. It is automatically included as needed by the Buttons driver
* dispatch header located in LUFA/Drivers/Board/Buttons.h.
*
* @{
*/
#ifndef __BUTTONS_EVK1101_H__
#define __BUTTONS_EVK1101_H__
/* Includes: */
#include <avr32/io.h>
#include <stdbool.h>
#include "../../../Common/Common.h"
/* Enable C linkage for C++ Compilers: */
#if defined(__cplusplus)
extern "C" {
#endif
/* Preprocessor Checks: */
#if !defined(__INCLUDE_FROM_BUTTONS_H)
#error Do not include this file directly. Include LUFA/Drivers/Board/Buttons.h instead.
#endif
/* Public Interface - May be used in end-application: */
/* Macros: */
/** Button mask for the first button on the board. */
#define BUTTONS_BUTTON1 (1UL << 2)
/** Button mask for the second button on the board. */
#define BUTTONS_BUTTON2 (1UL << 3)
/* Inline Functions: */
#if !defined(__DOXYGEN__)
static inline void Buttons_Init(void)
{
AVR32_GPIO.port[1].gpers = (BUTTONS_BUTTON1 | BUTTONS_BUTTON2);
AVR32_GPIO.port[1].puers = (BUTTONS_BUTTON1 | BUTTONS_BUTTON2);
}
static inline uintN_t Buttons_GetStatus(void)
{
return (~AVR32_GPIO.port[1].pvr & (BUTTONS_BUTTON1 | BUTTONS_BUTTON2));
}
#endif
/* Disable C linkage for C++ Compilers: */
#if defined(__cplusplus)
}
#endif
#endif
/** @} */

@ -1,116 +0,0 @@
/*
LUFA Library
Copyright (C) Dean Camera, 2010.
dean [at] fourwalledcubicle [dot] com
www.fourwalledcubicle.com
*/
/*
Copyright 2010 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
*
* Board specific joystick driver header for the EVK1101.
*
* \note This file should not be included directly. It is automatically included as needed by the joystick driver
* dispatch header located in LUFA/Drivers/Board/Joystick.h.
*/
/** \ingroup Group_Joystick
* @defgroup Group_Joystick_EVK1101 EVK1101
*
* Board specific joystick driver header for the EVK1101.
*
* \note This file should not be included directly. It is automatically included as needed by the joystick driver
* dispatch header located in LUFA/Drivers/Board/Joystick.h.
*
* @{
*/
#ifndef __JOYSTICK_EVK1101_H__
#define __JOYSTICK_EVK1101_H__
/* Includes: */
#include <avr32/io.h>
#include "../../../Common/Common.h"
/* Enable C linkage for C++ Compilers: */
#if defined(__cplusplus)
extern "C" {
#endif
/* Preprocessor Checks: */
#if !defined(__INCLUDE_FROM_JOYSTICK_H)
#error Do not include this file directly. Include LUFA/Drivers/Board/Joystick.h instead.
#endif
/* Private Interface - For use in library only: */
#if !defined(__DOXYGEN__)
/* Macros: */
#define JOY_MASK_PA (1 << 13)
#define JOY_MASK_PB ((1 << 6) | (1 << 7) | (1 << 8) | (1 << 9))
#endif
/* Public Interface - May be used in end-application: */
/* Macros: */
/** Mask for the joystick being pushed in the left direction. */
#define JOY_LEFT (1UL << 6)
/** Mask for the joystick being pushed in the upward direction. */
#define JOY_UP (1UL << 7)
/** Mask for the joystick being pushed in the right direction. */
#define JOY_RIGHT (1UL << 8)
/** Mask for the joystick being pushed in the downward direction. */
#define JOY_DOWN (1UL << 9)
/** Mask for the joystick being pushed inward. */
#define JOY_PRESS (1UL << 13)
/* Inline Functions: */
#if !defined(__DOXYGEN__)
static inline void Joystick_Init(void)
{
AVR32_GPIO.port[0].gpers = JOY_MASK_PA;
AVR32_GPIO.port[0].puers = JOY_MASK_PA;
AVR32_GPIO.port[1].gpers = JOY_MASK_PB;
AVR32_GPIO.port[1].puers = JOY_MASK_PB;
}
static inline uintN_t Joystick_GetStatus(void)
{
return ((~AVR32_GPIO.port[1].pvr & JOY_MASK_PB) |
(~AVR32_GPIO.port[0].pvr & JOY_MASK_PA));
}
#endif
/* Disable C linkage for C++ Compilers: */
#if defined(__cplusplus)
}
#endif
#endif
/** @} */

@ -1,137 +0,0 @@
/*
LUFA Library
Copyright (C) Dean Camera, 2010.
dean [at] fourwalledcubicle [dot] com
www.fourwalledcubicle.com
*/
/*
Copyright 2010 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
*
* Board specific LED driver header for the EVK1101.
*
* \note This file should not be included directly. It is automatically included as needed by the LEDs driver
* dispatch header located in LUFA/Drivers/Board/LEDs.h.
*/
/** \ingroup Group_LEDs
* @defgroup Group_LEDs_EVK1101 EVK1101
*
* Board specific LED driver header for the EVK1101.
*
* \note This file should not be included directly. It is automatically included as needed by the LEDs driver
* dispatch header located in LUFA/Drivers/Board/LEDs.h.
*
* @{
*/
#ifndef __LEDS_EVK1101_H__
#define __LEDS_EVK1101_H__
/* Includes: */
#include <avr32/io.h>
#include "../../../Common/Common.h"
/* Enable C linkage for C++ Compilers: */
#if defined(__cplusplus)
extern "C" {
#endif
/* Preprocessor Checks: */
#if !defined(__INCLUDE_FROM_LEDS_H)
#error Do not include this file directly. Include LUFA/Drivers/Board/LEDS.h instead.
#endif
/* Public Interface - May be used in end-application: */
/* Macros: */
/** LED mask for the first LED on the board. */
#define LEDS_LED1 (1UL << 7)
/** LED mask for the second LED on the board. */
#define LEDS_LED2 (1UL << 8)
/** LED mask for the third LED on the board. */
#define LEDS_LED3 (1UL << 21)
/** LED mask for the fourth LED on the board. */
#define LEDS_LED4 (1UL << 22)
/** LED mask for all the LEDs on the board. */
#define LEDS_ALL_LEDS (LEDS_LED1 | LEDS_LED2 | LEDS_LED3 | LEDS_LED4)
/** LED mask for the none of the board LEDs */
#define LEDS_NO_LEDS 0
/* Inline Functions: */
#if !defined(__DOXYGEN__)
static inline void LEDs_Init(void)
{
AVR32_GPIO.port[0].gpers = LEDS_ALL_LEDS;
AVR32_GPIO.port[0].oders = LEDS_ALL_LEDS;
AVR32_GPIO.port[0].ovrs = LEDS_ALL_LEDS;
}
static inline void LEDs_TurnOnLEDs(const uintN_t LEDMask)
{
AVR32_GPIO.port[0].ovrc = LEDMask;
}
static inline void LEDs_TurnOffLEDs(const uintN_t LEDMask)
{
AVR32_GPIO.port[0].ovrs = LEDMask;
}
static inline void LEDs_SetAllLEDs(const uintN_t LEDMask)
{
AVR32_GPIO.port[0].ovrs = LEDS_ALL_LEDS;
AVR32_GPIO.port[0].ovrc = LEDMask;
}
static inline void LEDs_ChangeLEDs(const uintN_t LEDMask, const uintN_t ActiveMask)
{
AVR32_GPIO.port[0].ovrs = LEDMask;
AVR32_GPIO.port[0].ovrc = ActiveMask;
}
static inline void LEDs_ToggleLEDs(const uintN_t LEDMask)
{
AVR32_GPIO.port[0].ovrt = LEDMask;
}
static inline uintN_t LEDs_GetLEDs(void)
{
return (AVR32_GPIO.port[0].ovr & LEDS_ALL_LEDS);
}
#endif
/* Disable C linkage for C++ Compilers: */
#if defined(__cplusplus)
}
#endif
#endif
/** @} */

@ -85,7 +85,8 @@
PORTE |= BUTTONS_BUTTON1;
}
static inline uintN_t Buttons_GetStatus(void)
static inline uint8_t Buttons_GetStatus(void) ATTR_WARN_UNUSED_RESULT;
static inline uint8_t Buttons_GetStatus(void)
{
return ((PINE & BUTTONS_BUTTON1) ^ BUTTONS_BUTTON1);
}

@ -68,7 +68,7 @@
/* Private Interface - For use in library only: */
#if !defined(__DOXYGEN__)
/* Macros: */
#define JOY_FMASK ((1 << 4) | (1 << 5) | (1 << 6) | (1 << 7))
#define JOY_FMASK ((1 << 4) | (1 << 5) | (1 << 6) | (1 << 7))
#define JOY_CMASK (1 << 6))
#endif
@ -100,7 +100,8 @@
PORTC |= JOY_CMASK;
}
static inline uintN_t Joystick_GetStatus(void)
static inline uint8_t Joystick_GetStatus(void) ATTR_WARN_UNUSED_RESULT;
static inline uint8_t Joystick_GetStatus(void)
{
return (((uint8_t)~PINF & JOY_FMASK) | (((uint8_t)~PINC & JOY_CMASK) >> 3));
}

@ -90,31 +90,32 @@
PORTD &= ~LEDS_ALL_LEDS;
}
static inline void LEDs_TurnOnLEDs(const uintN_t LEDMask)
static inline void LEDs_TurnOnLEDs(const uint8_t LEDMask)
{
PORTD |= LEDMask;
}
static inline void LEDs_TurnOffLEDs(const uintN_t LEDMask)
static inline void LEDs_TurnOffLEDs(const uint8_t LEDMask)
{
PORTD &= ~LEDMask;
}
static inline void LEDs_SetAllLEDs(const uintN_t LEDMask)
static inline void LEDs_SetAllLEDs(const uint8_t LEDMask)
{
PORTD = ((PORTD & ~LEDS_ALL_LEDS) | LEDMask);
}
static inline void LEDs_ChangeLEDs(const uintN_t LEDMask, const uintN_t ActiveMask)
static inline void LEDs_ChangeLEDs(const uint8_t LEDMask, const uint8_t ActiveMask)
{
PORTD = ((PORTD & ~LEDMask) | ActiveMask);
}
static inline void LEDs_ToggleLEDs(const uintN_t LEDMask)
static inline void LEDs_ToggleLEDs(const uint8_t LEDMask)
{
PORTD = (PORTD ^ (LEDMask & LEDS_ALL_LEDS));
}
static inline uint8_t LEDs_GetLEDs(void) ATTR_WARN_UNUSED_RESULT;
static inline uint8_t LEDs_GetLEDs(void)
{
return (PORTD & LEDS_ALL_LEDS);

@ -83,8 +83,6 @@
#include "EVK527/Joystick.h"
#elif (BOARD == BOARD_USER)
#include "Board/Joystick.h"
#elif (BOARD == BOARD_EVK1101)
#include "EVK1101/Joystick.h"
#else
#error The selected board does not contain a joystick.
#endif
@ -102,7 +100,7 @@
* \return Mask indicating the joystick direction - see corresponding board specific Joystick.h file
* for direction masks
*/
static inline uintN_t Joystick_GetStatus(void) ATTR_WARN_UNUSED_RESULT;
static inline uint8_t Joystick_GetStatus(void) ATTR_WARN_UNUSED_RESULT;
#endif
#endif

@ -84,7 +84,7 @@
static inline void LEDs_SetAllLEDs(const uint8_t LEDMask) {};
static inline void LEDs_ChangeLEDs(const uint8_t LEDMask, const uint8_t ActiveMask) {};
static inline void LEDs_ToggleLEDs(const uint8_t LEDMask) {};
static inline uintN_t LEDs_GetLEDs(void) { return 0; }
static inline uint8_t LEDs_GetLEDs(void) { return 0; }
#elif (BOARD == BOARD_USBKEY)
#include "USBKEY/LEDs.h"
#elif (BOARD == BOARD_STK525)
@ -105,8 +105,6 @@
#include "EVK527/LEDs.h"
#elif (BOARD == BOARD_USER)
#include "Board/LEDs.h"
#elif (BOARD == BOARD_EVK1101)
#include "EVK1101/LEDs.h"
#endif
#if !defined(LEDS_LED1)
@ -136,20 +134,20 @@
*
* \param[in] LEDMask Mask of the board LEDs to manipulate (see board-specific LEDs.h driver file)
*/
static inline void LEDs_TurnOnLEDs(const uintN_t LEDMask);
static inline void LEDs_TurnOnLEDs(const uint8_t LEDMask);
/** Turns off the LEDs specified in the given LED mask.
*
* \param[in] LEDMask Mask of the board LEDs to manipulate (see board-specific LEDs.h driver file)
*/
static inline void LEDs_TurnOffLEDs(const uintN_t LEDMask);
static inline void LEDs_TurnOffLEDs(const uint8_t LEDMask);
/** Turns off all LEDs not specified in the given LED mask, and turns on all the LEDs in the given LED
* mask.
*
* \param[in] LEDMask Mask of the board LEDs to manipulate (see board-specific LEDs.h driver file)
*/
static inline void LEDs_SetAllLEDs(const uintN_t LEDMask);
static inline void LEDs_SetAllLEDs(const uint8_t LEDMask);
/** Turns off all LEDs in the LED mask that are not set in the active mask, and turns on all the LEDs
* specified in both the LED and active masks.
@ -157,20 +155,20 @@
* \param[in] LEDMask Mask of the board LEDs to manipulate (see board-specific LEDs.h driver file)
* \param[in] ActiveMask Mask of whether the LEDs in the LED mask should be turned on or off
*/
static inline void LEDs_ChangeLEDs(const uintN_t LEDMask, const uintN_t ActiveMask);
static inline void LEDs_ChangeLEDs(const uint8_t LEDMask, const uint8_t ActiveMask);
/** Toggles all LEDs in the LED mask, leaving all others in their current states.
*
* \param[in] LEDMask Mask of the board LEDs to manipulate (see board-specific LEDs.h driver file)
*/
static inline void LEDs_ToggleLEDs(const uintN_t LEDMask);
static inline void LEDs_ToggleLEDs(const uint8_t LEDMask);
/** Returns the status of all the board LEDs; set LED masks in the return value indicate that the
* corresponding LED is on.
*
* \return Mask of the board LEDs which are currently turned on
*/
static inline uintN_t LEDs_GetLEDs(void) ATTR_WARN_UNUSED_RESULT;
static inline uint8_t LEDs_GetLEDs(void) ATTR_WARN_UNUSED_RESULT;
#endif
#endif

@ -106,21 +106,21 @@
PORTE |= (LEDS_PORTE_LEDS << LEDS_PORTE_MASK_SHIFT);
}
static inline void LEDs_TurnOnLEDs(const uintN_t LEDMask)
static inline void LEDs_TurnOnLEDs(const uint8_t LEDMask)
{
PORTD |= (LEDMask & LEDS_LED1);
PORTD &= ~(LEDMask & LEDS_LED2);
PORTE &= ~((LEDMask & LEDS_PORTE_LEDS) << LEDS_PORTE_MASK_SHIFT);
}
static inline void LEDs_TurnOffLEDs(const uintN_t LEDMask)
static inline void LEDs_TurnOffLEDs(const uint8_t LEDMask)
{
PORTD &= ~(LEDMask & LEDS_LED1);
PORTD |= (LEDMask & LEDS_LED2);
PORTE |= ((LEDMask & LEDS_PORTE_LEDS) << LEDS_PORTE_MASK_SHIFT);
}
static inline void LEDs_SetAllLEDs(const uintN_t LEDMask)
static inline void LEDs_SetAllLEDs(const uint8_t LEDMask)
{
PORTD = (((PORTD & ~LEDS_LED1) | (LEDMask & LEDS_LED1)) |
((PORTD | LEDS_LED2) & ~(LEDMask & LEDS_LED2)));
@ -128,7 +128,7 @@
~((LEDMask & LEDS_PORTE_LEDS) << LEDS_PORTE_MASK_SHIFT));
}
static inline void LEDs_ChangeLEDs(const uintN_t LEDMask, const uintN_t ActiveMask)
static inline void LEDs_ChangeLEDs(const uint8_t LEDMask, const uint8_t ActiveMask)
{
PORTD = (((PORTD & ~(LEDMask & LEDS_LED1)) | (ActiveMask & LEDS_LED1)) |
((PORTD | (LEDMask & LEDS_LED2)) & ~(ActiveMask & LEDS_LED2)));
@ -136,12 +136,13 @@
~((ActiveMask & LEDS_PORTE_LEDS) << LEDS_PORTE_MASK_SHIFT));
}
static inline void LEDs_ToggleLEDs(const uintN_t LEDMask)
static inline void LEDs_ToggleLEDs(const uint8_t LEDMask)
{
PORTD = (PORTD ^ (LEDMask & LEDS_PORTD_LEDS));
PORTE = (PORTE ^ ((LEDMask & LEDS_PORTE_LEDS) << LEDS_PORTE_MASK_SHIFT));
}
static inline uint8_t LEDs_GetLEDs(void) ATTR_WARN_UNUSED_RESULT;
static inline uint8_t LEDs_GetLEDs(void)
{
return (((PORTD & LEDS_LED1) | (~PORTD & LEDS_LED2)) |

@ -85,7 +85,8 @@
PORTE |= BUTTONS_BUTTON1;
}
static inline uintN_t Buttons_GetStatus(void)
static inline uint8_t Buttons_GetStatus(void) ATTR_WARN_UNUSED_RESULT;
static inline uint8_t Buttons_GetStatus(void)
{
return ((PINE & BUTTONS_BUTTON1) ^ BUTTONS_BUTTON1);
}

@ -100,7 +100,8 @@
PORTE |= JOY_EMASK;
}
static inline uintN_t Joystick_GetStatus(void)
static inline uint8_t Joystick_GetStatus(void) ATTR_WARN_UNUSED_RESULT;
static inline uint8_t Joystick_GetStatus(void)
{
return (((uint8_t)~PINB & JOY_BMASK) | (((uint8_t)~PINE & JOY_EMASK) >> 1));
}

@ -93,32 +93,33 @@
PORTD &= ~LEDS_ALL_LEDS;
}
static inline void LEDs_TurnOnLEDs(const uintN_t LEDMask)
static inline void LEDs_TurnOnLEDs(const uint8_t LEDMask)
{
PORTD |= LEDMask;
}
static inline void LEDs_TurnOffLEDs(const uintN_t LEDMask)
static inline void LEDs_TurnOffLEDs(const uint8_t LEDMask)
{
PORTD &= ~LEDMask;
}
static inline void LEDs_SetAllLEDs(const uintN_t LEDMask)
static inline void LEDs_SetAllLEDs(const uint8_t LEDMask)
{
PORTD = ((PORTD & ~LEDS_ALL_LEDS) | LEDMask);
}
static inline void LEDs_ChangeLEDs(const uintN_t LEDMask, const uintN_t ActiveMask)
static inline void LEDs_ChangeLEDs(const uint8_t LEDMask, const uint8_t ActiveMask)
{
PORTD = ((PORTD & ~LEDMask) | ActiveMask);
}
static inline void LEDs_ToggleLEDs(const uintN_t LEDMask)
static inline void LEDs_ToggleLEDs(const uint8_t LEDMask)
{
PORTD = (PORTD ^ (LEDMask & LEDS_ALL_LEDS));
}
static inline uintN_t LEDs_GetLEDs(void)
static inline uint8_t LEDs_GetLEDs(void) ATTR_WARN_UNUSED_RESULT;
static inline uint8_t LEDs_GetLEDs(void)
{
return (PORTD & LEDS_ALL_LEDS);
}

@ -85,8 +85,8 @@
PORTD |= BUTTONS_BUTTON1;
}
static inline uintN_t Buttons_GetStatus(void) ATTR_WARN_UNUSED_RESULT;
static inline uintN_t Buttons_GetStatus(void)
static inline uint8_t Buttons_GetStatus(void) ATTR_WARN_UNUSED_RESULT;
static inline uint8_t Buttons_GetStatus(void)
{
return ((PIND & BUTTONS_BUTTON1) ^ BUTTONS_BUTTON1);
}

@ -97,8 +97,8 @@
PORTB |= JOY_BMASK;
}
static inline uintN_t Joystick_GetStatus(void) ATTR_WARN_UNUSED_RESULT;
static inline uintN_t Joystick_GetStatus(void)
static inline uint8_t Joystick_GetStatus(void) ATTR_WARN_UNUSED_RESULT;
static inline uint8_t Joystick_GetStatus(void)
{
return ((uint8_t)~PINB & JOY_BMASK);
}

@ -93,32 +93,33 @@
PORTD &= ~LEDS_ALL_LEDS;
}
static inline void LEDs_TurnOnLEDs(const uintN_t LEDMask)
static inline void LEDs_TurnOnLEDs(const uint8_t LEDMask)
{
PORTD |= LEDMask;
}
static inline void LEDs_TurnOffLEDs(const uintN_t LEDMask)
static inline void LEDs_TurnOffLEDs(const uint8_t LEDMask)
{
PORTD &= ~LEDMask;
}
static inline void LEDs_SetAllLEDs(const uintN_t LEDMask)
static inline void LEDs_SetAllLEDs(const uint8_t LEDMask)
{
PORTD = ((PORTD & ~LEDS_ALL_LEDS) | LEDMask);
}
static inline void LEDs_ChangeLEDs(const uintN_t LEDMask, const uintN_t ActiveMask)
static inline void LEDs_ChangeLEDs(const uint8_t LEDMask, const uint8_t ActiveMask)
{
PORTD = ((PORTD & ~(LEDMask & LEDS_ALL_LEDS)) | (ActiveMask & LEDS_ALL_LEDS));
}
static inline void LEDs_ToggleLEDs(const uintN_t LEDMask)
static inline void LEDs_ToggleLEDs(const uint8_t LEDMask)
{
PORTD = (PORTD ^ (LEDMask & LEDS_ALL_LEDS));
}
static inline uintN_t LEDs_GetLEDs(void)
static inline uint8_t LEDs_GetLEDs(void) ATTR_WARN_UNUSED_RESULT;
static inline uint8_t LEDs_GetLEDs(void)
{
return (PORTD & LEDS_ALL_LEDS);
}

@ -47,25 +47,14 @@ int8_t Temperature_GetTemperature(void)
{
uint16_t Temp_ADC = ADC_GetChannelReading(ADC_REFERENCE_AVCC | ADC_RIGHT_ADJUSTED | TEMP_ADC_CHANNEL_MASK);
#if defined(__AVR32__)
if (Temp_ADC > Temperature_Lookup[0])
return TEMP_MIN_TEMP;
for (uint16_t Index = 0; Index < TEMP_TABLE_SIZE; Index++)
{
if (Temp_ADC > Temperature_Lookup[Index])
return (Index + TEMP_TABLE_OFFSET);
}
#elif defined(__AVR__)
if (Temp_ADC > pgm_read_word(&Temperature_Lookup[0]))
return TEMP_MIN_TEMP;
return TEMP_MIN_TEMP;
for (uint16_t Index = 0; Index < TEMP_TABLE_SIZE; Index++)
{
if (Temp_ADC > pgm_read_word(&Temperature_Lookup[Index]))
return (Index + TEMP_TABLE_OFFSET);
}
#endif
return TEMP_MAX_TEMP;
}

@ -53,13 +53,7 @@
#define __TEMPERATURE_H__
/* Includes: */
#if defined(__AVR32__)
#include <avr32/io.h>
#include <stdint.h>
#elif defined(__AVR__)
#include <avr/io.h>
#include <avr/pgmspace.h>
#endif
#include <avr/pgmspace.h>
#include "../../Common/Common.h"
#include "../Peripheral/ADC.h"

@ -79,8 +79,8 @@
PORTE |= BUTTONS_BUTTON1;
}
static inline uintN_t Buttons_GetStatus(void) ATTR_WARN_UNUSED_RESULT;
static inline uintN_t Buttons_GetStatus(void)
static inline uint8_t Buttons_GetStatus(void) ATTR_WARN_UNUSED_RESULT;
static inline uint8_t Buttons_GetStatus(void)
{
return ((PINE & BUTTONS_BUTTON1) ^ BUTTONS_BUTTON1);
}

@ -100,8 +100,8 @@
PORTE |= JOY_EMASK;
}
static inline uintN_t Joystick_GetStatus(void) ATTR_WARN_UNUSED_RESULT;
static inline uintN_t Joystick_GetStatus(void)
static inline uint8_t Joystick_GetStatus(void) ATTR_WARN_UNUSED_RESULT;
static inline uint8_t Joystick_GetStatus(void)
{
return (((uint8_t)~PINB & JOY_BMASK) | (((uint8_t)~PINE & JOY_EMASK) >> 1));
}

@ -93,32 +93,33 @@
PORTD &= ~LEDS_ALL_LEDS;
}
static inline void LEDs_TurnOnLEDs(const uintN_t LEDMask)
static inline void LEDs_TurnOnLEDs(const uint8_t LEDMask)
{
PORTD |= LEDMask;
}
static inline void LEDs_TurnOffLEDs(const uintN_t LEDMask)
static inline void LEDs_TurnOffLEDs(const uint8_t LEDMask)
{
PORTD &= ~LEDMask;
}
static inline void LEDs_SetAllLEDs(const uintN_t LEDMask)
static inline void LEDs_SetAllLEDs(const uint8_t LEDMask)
{
PORTD = ((PORTD & ~LEDS_ALL_LEDS) | LEDMask);
}
static inline void LEDs_ChangeLEDs(const uintN_t LEDMask, const uintN_t ActiveMask)
static inline void LEDs_ChangeLEDs(const uint8_t LEDMask, const uint8_t ActiveMask)
{
PORTD = ((PORTD & ~LEDMask) | ActiveMask);
}
static inline void LEDs_ToggleLEDs(const uintN_t LEDMask)
static inline void LEDs_ToggleLEDs(const uint8_t LEDMask)
{
PORTD = (PORTD ^ (LEDMask & LEDS_ALL_LEDS));
}
static inline uintN_t LEDs_GetLEDs(void)
static inline uint8_t LEDs_GetLEDs(void) ATTR_WARN_UNUSED_RESULT;
static inline uint8_t LEDs_GetLEDs(void)
{
return (PORTD & LEDS_ALL_LEDS);
}

@ -84,32 +84,33 @@
PORTB |= LEDS_ALL_LEDS;
}
static inline void LEDs_TurnOnLEDs(const uintN_t LEDMask)
static inline void LEDs_TurnOnLEDs(const uint8_t LEDMask)
{
PORTB &= ~LEDMask;
}
static inline void LEDs_TurnOffLEDs(const uintN_t LEDMask)
static inline void LEDs_TurnOffLEDs(const uint8_t LEDMask)
{
PORTB |= LEDMask;
}
static inline void LEDs_SetAllLEDs(const uintN_t LEDMask)
static inline void LEDs_SetAllLEDs(const uint8_t LEDMask)
{
PORTB = ((PORTB | LEDS_ALL_LEDS) & ~LEDMask);
}
static inline void LEDs_ChangeLEDs(const uintN_t LEDMask, const uintN_t ActiveMask)
static inline void LEDs_ChangeLEDs(const uint8_t LEDMask, const uint8_t ActiveMask)
{
PORTB = ((PORTB | (LEDMask & LEDS_ALL_LEDS)) & (~ActiveMask & LEDS_ALL_LEDS));
}
static inline void LEDs_ToggleLEDs(const uintN_t LEDMask)
static inline void LEDs_ToggleLEDs(const uint8_t LEDMask)
{
PORTD = (PORTB ^ (LEDMask & LEDS_ALL_LEDS));
}
static inline uintN_t LEDs_GetLEDs(void)
static inline uint8_t LEDs_GetLEDs(void) ATTR_WARN_UNUSED_RESULT;
static inline uint8_t LEDs_GetLEDs(void)
{
return (~PORTB & LEDS_ALL_LEDS);
}

@ -58,13 +58,11 @@
#endif
/* Includes: */
#include "../../Common/Common.h"
#if (defined(__AVR_AT90USB1286__) || defined(__AVR_AT90USB646__) || \
defined(__AVR_AT90USB1287__) || defined(__AVR_AT90USB647__) || \
defined(__AVR_ATmega16U4__) || defined(__AVR_ATmega32U4__) || \
defined(__AVR_ATmega32U6__))
#include "AVR8/ADC.h"
#include "AVRU4U6U7/ADC.h"
#else
#error "ADC is not available for the currently selected AVR model."
#endif

@ -1,174 +0,0 @@
/*
LUFA Library
Copyright (C) Dean Camera, 2010.
dean [at] fourwalledcubicle [dot] com
www.fourwalledcubicle.com
*/
/*
Copyright 2010 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
*
* SPI driver for the 32-bit AVRs.
*
* \note This file should not be included directly. It is automatically included as needed by the SPI driver
* dispatch header located in LUFA/Drivers/Peripheral/SPI.h.
*/
/** \ingroup Group_SPI
* @defgroup Group_SPI_AVR32 32-Bit AVR SPI Driver
*
* SPI driver for the 32-bit AVRs.
*
* \note This file should not be included directly. It is automatically included as needed by the ADC driver
* dispatch header located in LUFA/Drivers/Peripheral/SPI.h.
*
* @{
*/
#ifndef __SPI_AVR32_H__
#define __SPI_AVR32_H__
/* Includes: */
#include <avr32/io.h>
#include <stdbool.h>
/* Preprocessor Checks: */
#if !defined(__INCLUDE_FROM_SPI_H)
#error Do not include this file directly. Include LUFA/Drivers/Peripheral/SPI.h instead.
#endif
/* Enable C linkage for C++ Compilers: */
#if defined(__cplusplus)
extern "C" {
#endif
/* Public Interface - May be used in end-application: */
/* Macros: */
/** SPI prescaler mask for SPI_Init(). Divides the system clock by a factor of 1. */
#define SPI_SPEED_FCPU_DIV_1 0
/** SPI prescaler mask for SPI_Init(). Divides the system clock by a factor of 32. */
#define SPI_SPEED_FCPU_DIV_32 AVR32_SPI_MR_FDIV_MASK
/** SPI chip selection mode for direct peripheral-to-CS pin connections. */
#define SPI_CS_4BITDECODER AVR32_SPI_MR_PSDEC_MASK
/** SPI chip selection mode for peripheral CS pin connections through a 4-bit decoder. */
#define SPI_CS_DIRECT 0
/** SPI mode mask for SPI_Init(). Indicates that the SPI interface should be initialized into slave mode. */
#define SPI_MODE_SLAVE 0
/** SPI mode mask for SPI_Init(). Indicates that the SPI interface should be initialized into master mode. */
#define SPI_MODE_MASTER AVR32_SPI_MR_MSTR_MASK
/* Inline Functions: */
/** Initialises the SPI subsystem, ready for transfers. Must be called before calling any other
* SPI routines.
*
* \note The individual AVR32 chip select control registers are left at their defaults; it is up to the user
* to configure these seperately once the SPI module has been initialized.
*
* \note The physical GPIO pins for the AVR32's SPI are not altered; it is up to the user to
* configure these seperately to connect the SPI module to the desired GPIO pins via the
* GPIO MUX registers.
*
* \param[in] SPIOptions SPI Options, a mask consisting of one of each of the SPI_SPEED_*,
* SPI_CS_* and SPI_MODE_* masks
*/
static inline void SPI_Init(const uintN_t SPIOptions)
{
AVR32_PM.pbamask = (1 << 5);
AVR32_SPI.CR.swrst = true;
AVR32_SPI.CR.spien = true;
AVR32_SPI.mr = SPIOptions;
}
/** Turns off the SPI driver, disabling and returning used hardware to their default configuration. */
static inline void SPI_ShutDown(void)
{
AVR32_SPI.cr = AVR32_SPI_CR_SPIDIS_MASK;
AVR32_PM.pbamask &= ~(1 << 5);
}
/** Sends and receives a transfer through the SPI interface, blocking until the transfer is complete.
* The width of the data that is transferred is dependant on the settings of the currently selected
* peripheral.
*
* \param[in] Data Data to send through the SPI interface
*
* \return Response data from the attached SPI device
*/
static inline uint16_t SPI_Transfer(const uint16_t Data) ATTR_ALWAYS_INLINE;
static inline uint16_t SPI_Transfer(const uint16_t Data)
{
while (!(AVR32_SPI.SR.tdre));
AVR32_SPI.TDR.td = Data;
while ((AVR32_SPI.sr & (AVR32_SPI_SR_RDRF_MASK | AVR32_SPI_SR_TXEMPTY_MASK)) !=
(AVR32_SPI_SR_RDRF_MASK | AVR32_SPI_SR_TXEMPTY_MASK));
return AVR32_SPI.RDR.rd;
}
/** Sends a transfer through the SPI interface, blocking until the transfer is complete. The response
* data sent to from the attached SPI device is ignored. The width of the data that is transferred is
* dependant on the settings of the currently selected peripheral.
*
* \param[in] Data Data to send through the SPI interface
*/
static inline void SPI_Send(const uint16_t Data) ATTR_ALWAYS_INLINE;
static inline void SPI_Send(const uint16_t Data)
{
while (!(AVR32_SPI.SR.tdre));
AVR32_SPI.TDR.td = Data;
}
/** Sends a dummy transfer through the SPI interface, blocking until the transfer is complete. The response
* data from the attached SPI device is returned. The width of the data that is transferred is dependant on
* the settings of the currently selected peripheral.
*
* \return The response data from the attached SPI device
*/
static inline uint16_t SPI_Receive(void) ATTR_ALWAYS_INLINE ATTR_WARN_UNUSED_RESULT;
static inline uint16_t SPI_Receive(void)
{
while (!(AVR32_SPI.SR.tdre));
AVR32_SPI.TDR.td = 0x0000;
while ((AVR32_SPI.sr & (AVR32_SPI_SR_RDRF_MASK | AVR32_SPI_SR_TXEMPTY_MASK)) !=
(AVR32_SPI_SR_RDRF_MASK | AVR32_SPI_SR_TXEMPTY_MASK));
return AVR32_SPI.RDR.rd;
}
/* Disable C linkage for C++ Compilers: */
#if defined(__cplusplus)
}
#endif
#endif
/** @} */

@ -30,16 +30,16 @@
/** \file
*
* ADC driver for the 8-Bit AVRs containing a hardware ADC module.
* ADC driver for the AT90USB1287, AT90USB1286, AT90USB647, AT90USB646, ATMEGA16U4 and ATMEGA32U4 AVRs.
*
* \note This file should not be included directly. It is automatically included as needed by the ADC driver
* dispatch header located in LUFA/Drivers/Peripheral/ADC.h.
*/
/** \ingroup Group_ADC
* @defgroup Group_ADC_AVR8 8-Bit AVR ADC Driver
* @defgroup Group_ADC_AVRU4U6U7 Series U4, U6 and U7 Model ADC Driver
*
* ADC driver for 8-Bit AVRs containing a hardware ADC module.
* ADC driver for the AT90USB1287, AT90USB1286, AT90USB647, AT90USB646, ATMEGA16U4 and ATMEGA32U4 AVRs.
*
* \note This file should not be included directly. It is automatically included as needed by the ADC driver
* dispatch header located in LUFA/Drivers/Peripheral/ADC.h.
@ -47,10 +47,12 @@
* @{
*/
#ifndef __ADC_AVR8_H__
#define __ADC_AVR8_H__
#ifndef __ADC_AVRU4U6U7_H__
#define __ADC_AVRU4U6U7_H__
/* Includes: */
#include "../../../Common/Common.h"
#include <avr/io.h>
#include <stdbool.h>

@ -51,7 +51,6 @@
#define __SPI_AVR8_H__
/* Includes: */
#include <avr/io.h>
#include <stdbool.h>
/* Preprocessor Checks: */
@ -118,7 +117,7 @@
* \param[in] SPIOptions SPI Options, a mask consisting of one of each of the SPI_SPEED_*,
* SPI_SCK_*, SPI_SAMPLE_* and SPI_MODE_* masks
*/
static inline void SPI_Init(const uintN_t SPIOptions)
static inline void SPI_Init(const uint8_t SPIOptions)
{
DDRB |= ((1 << 1) | (1 << 2));
PORTB |= ((1 << 0) | (1 << 3));
@ -143,14 +142,14 @@
/** Sends and receives a byte through the SPI interface, blocking until the transfer is complete.
*
* \param[in] Data Byte to send through the SPI interface
* \param[in] Byte Byte to send through the SPI interface
*
* \return Response byte from the attached SPI device
*/
static inline uint8_t SPI_Transfer(const uint8_t Data) ATTR_ALWAYS_INLINE;
static inline uint8_t SPI_Transfer(const uint8_t Data)
static inline uint8_t SPI_TransferByte(const uint8_t Byte) ATTR_ALWAYS_INLINE;
static inline uint8_t SPI_TransferByte(const uint8_t Byte)
{
SPDR = Data;
SPDR = Byte;
while (!(SPSR & (1 << SPIF)));
return SPDR;
}
@ -158,12 +157,12 @@
/** Sends a byte through the SPI interface, blocking until the transfer is complete. The response
* byte sent to from the attached SPI device is ignored.
*
* \param[in] Data Byte to send through the SPI interface
* \param[in] Byte Byte to send through the SPI interface
*/
static inline void SPI_Send(const uint8_t Data) ATTR_ALWAYS_INLINE;
static inline void SPI_Send(const uint8_t Data)
static inline void SPI_SendByte(const uint8_t Byte) ATTR_ALWAYS_INLINE;
static inline void SPI_SendByte(const uint8_t Byte)
{
SPDR = Data;
SPDR = Byte;
while (!(SPSR & (1 << SPIF)));
}
@ -172,28 +171,13 @@
*
* \return The response byte from the attached SPI device
*/
static inline uint8_t SPI_Receive(void) ATTR_ALWAYS_INLINE ATTR_WARN_UNUSED_RESULT;
static inline uint8_t SPI_Receive(void)
static inline uint8_t SPI_ReceiveByte(void) ATTR_ALWAYS_INLINE ATTR_WARN_UNUSED_RESULT;
static inline uint8_t SPI_ReceiveByte(void)
{
SPDR = 0x00;
while (!(SPSR & (1 << SPIF)));
return SPDR;
}
#if defined(__DOXYGEN__)
/** Alias for \ref SPI_Transfer(), for compatibility with legacy LUFA applications. */
static inline uint8_t SPI_TransferByte(const uint8_t Byte) ATTR_DEPRECATED;
/** Alias for \ref SPI_Send(), for compatibility with legacy LUFA applications. */
static inline void SPI_SendByte(const uint8_t Byte) ATTR_DEPRECATED;
/** Alias for \ref SPI_Receive(), for compatibility with legacy LUFA applications. */
static inline uint8_t SPI_ReceiveByte(void) ATTR_DEPRECATED;
#else
#define SPI_TransferByte(x) SPI_Transfer(x)
#define SPI_SendByte(x) SPI_Send(x)
#define SPI_ReceiveByte() SPI_Receive()
#endif
/* Disable C linkage for C++ Compilers: */
#if defined(__cplusplus)

@ -30,16 +30,16 @@
/** \file
*
* Master mode TWI driver for the 8-Bit AVRs containing a hardware TWI module.
* Master mode TWI driver for the AT90USB1287, AT90USB1286, AT90USB647, AT90USB646, ATMEGA16U4 and ATMEGA32U4 AVRs.
*
* \note This file should not be included directly. It is automatically included as needed by the TWI driver
* dispatch header located in LUFA/Drivers/Peripheral/TWI.h.
*/
/** \ingroup Group_TWI
* @defgroup Group_TWI_AVR8 8-Bit AVR TWI Driver
* @defgroup Group_TWI_AVRU4U6U7 Series U4, U6 and U7 Model TWI Driver
*
* Master mode TWI driver for the 8-Bit AVRs containing a hardware TWI module.
* Master mode TWI driver for the AT90USB1287, AT90USB1286, AT90USB647, AT90USB646, ATMEGA16U4 and ATMEGA32U4 AVRs.
*
* \note This file should not be included directly. It is automatically included as needed by the TWI driver
* dispatch header located in LUFA/Drivers/Peripheral/TWI.h.
@ -47,10 +47,12 @@
* @{
*/
#ifndef __TWI_AVR8_H__
#define __TWI_AVR8_H__
#ifndef __TWI_AVRU4U6U7_H__
#define __TWI_AVRU4U6U7_H__
/* Includes: */
#include "../../../Common/Common.h"
#include <avr/io.h>
#include <stdbool.h>
#include <util/twi.h>

@ -30,10 +30,7 @@
/** \file
*
* This file is the master dispatch header file for the device-specific SPI driver, for AVRs containing a SPI.
*
* User code should include this file, which will in turn include the correct SPI driver header file for the
* currently selected AVR model.
* Hardware SPI subsystem driver for the supported USB AVRs models.
*/
/** \ingroup Group_PeripheralDrivers
@ -53,18 +50,133 @@
#ifndef __SPI_H__
#define __SPI_H__
/* Macros: */
/* Includes: */
#include <stdbool.h>
/* Enable C linkage for C++ Compilers: */
#if defined(__cplusplus)
extern "C" {
#endif
/* Private Interface - For use in library only: */
#if !defined(__DOXYGEN__)
#define __INCLUDE_FROM_SPI_H
/* Macros: */
#define SPI_USE_DOUBLESPEED (1 << SPE)
#endif
/* Public Interface - May be used in end-application: */
/* Macros: */
/** SPI prescaler mask for SPI_Init(). Divides the system clock by a factor of 2. */
#define SPI_SPEED_FCPU_DIV_2 SPI_USE_DOUBLESPEED
/* Includes: */
#include "../../Common/Common.h"
/** SPI prescaler mask for SPI_Init(). Divides the system clock by a factor of 4. */
#define SPI_SPEED_FCPU_DIV_4 0
/** SPI prescaler mask for SPI_Init(). Divides the system clock by a factor of 8. */
#define SPI_SPEED_FCPU_DIV_8 (SPI_USE_DOUBLESPEED | (1 << SPR0))
/** SPI prescaler mask for SPI_Init(). Divides the system clock by a factor of 16. */
#define SPI_SPEED_FCPU_DIV_16 (1 << SPR0)
/** SPI prescaler mask for SPI_Init(). Divides the system clock by a factor of 32. */
#define SPI_SPEED_FCPU_DIV_32 (SPI_USE_DOUBLESPEED | (1 << SPR1))
/** SPI prescaler mask for SPI_Init(). Divides the system clock by a factor of 64. */
#define SPI_SPEED_FCPU_DIV_64 (SPI_USE_DOUBLESPEED | (1 << SPR1) | (1 << SPR0))
/** SPI prescaler mask for SPI_Init(). Divides the system clock by a factor of 128. */
#define SPI_SPEED_FCPU_DIV_128 ((1 << SPR1) | (1 << SPR0))
/** SPI clock polarity mask for SPI_Init(). Indicates that the SCK should lead on the rising edge. */
#define SPI_SCK_LEAD_RISING (0 << CPOL)
/** SPI clock polarity mask for SPI_Init(). Indicates that the SCK should lead on the falling edge. */
#define SPI_SCK_LEAD_FALLING (1 << CPOL)
/** SPI data sample mode mask for SPI_Init(). Indicates that the data should sampled on the leading edge. */
#define SPI_SAMPLE_LEADING (0 << CPHA)
/** SPI data sample mode mask for SPI_Init(). Indicates that the data should be sampled on the trailing edge. */
#define SPI_SAMPLE_TRAILING (1 << CPHA)
/** SPI mode mask for SPI_Init(). Indicates that the SPI interface should be initialized into slave mode. */
#define SPI_MODE_SLAVE (0 << MSTR)
/** SPI mode mask for SPI_Init(). Indicates that the SPI interface should be initialized into master mode. */
#define SPI_MODE_MASTER (1 << MSTR)
/* Inline Functions: */
/** Initializes the SPI subsystem, ready for transfers. Must be called before calling any other
* SPI routines.
*
* \param[in] SPIOptions SPI Options, a mask consisting of one of each of the SPI_SPEED_*,
* SPI_SCK_*, SPI_SAMPLE_* and SPI_MODE_* masks
*/
static inline void SPI_Init(const uint8_t SPIOptions)
{
DDRB |= ((1 << 1) | (1 << 2));
PORTB |= ((1 << 0) | (1 << 3));
SPCR = ((1 << SPE) | SPIOptions);
if (SPIOptions & SPI_USE_DOUBLESPEED)
SPSR |= (1 << SPI2X);
else
SPSR &= ~(1 << SPI2X);
}
/** Turns off the SPI driver, disabling and returning used hardware to their default configuration. */
static inline void SPI_ShutDown(void)
{
DDRB &= ~((1 << 1) | (1 << 2));
PORTB &= ~((1 << 0) | (1 << 3));
SPCR = 0;
SPSR = 0;
}
/** Sends and receives a byte through the SPI interface, blocking until the transfer is complete.
*
* \param[in] Byte Byte to send through the SPI interface
*
* \return Response byte from the attached SPI device
*/
static inline uint8_t SPI_TransferByte(const uint8_t Byte) ATTR_ALWAYS_INLINE;
static inline uint8_t SPI_TransferByte(const uint8_t Byte)
{
SPDR = Byte;
while (!(SPSR & (1 << SPIF)));
return SPDR;
}
/** Sends a byte through the SPI interface, blocking until the transfer is complete. The response
* byte sent to from the attached SPI device is ignored.
*
* \param[in] Byte Byte to send through the SPI interface
*/
static inline void SPI_SendByte(const uint8_t Byte) ATTR_ALWAYS_INLINE;
static inline void SPI_SendByte(const uint8_t Byte)
{
SPDR = Byte;
while (!(SPSR & (1 << SPIF)));
}
/** Sends a dummy byte through the SPI interface, blocking until the transfer is complete. The response
* byte from the attached SPI device is returned.
*
* \return The response byte from the attached SPI device
*/
static inline uint8_t SPI_ReceiveByte(void) ATTR_ALWAYS_INLINE ATTR_WARN_UNUSED_RESULT;
static inline uint8_t SPI_ReceiveByte(void)
{
SPDR = 0x00;
while (!(SPSR & (1 << SPIF)));
return SPDR;
}
#if defined(__AVR32__)
#include "AVR32/SPI.h"
#elif defined(__AVR__)
#include "AVR8/SPI.h"
/* Disable C linkage for C++ Compilers: */
#if defined(__cplusplus)
}
#endif
#endif

@ -30,11 +30,7 @@
/** \file
*
* This file is the master dispatch header file for the device-specific USART driver, for AVRs containing a
* USART.
*
* User code should include this file, which will in turn include the correct USART driver header file for
* the currently selected AVR model.
* Driver for the USART subsystem on supported USB AVRs.
*/
/** \ingroup Group_PeripheralDrivers
@ -54,27 +50,42 @@
#ifndef __SERIAL_H__
#define __SERIAL_H__
/* Macros: */
#if !defined(__DOXYGEN__)
#define __INCLUDE_FROM_SERIAL_H
#endif
/* Includes: */
#include "../../Common/Common.h"
#include <avr/io.h>
#include <avr/pgmspace.h>
#include <stdbool.h>
#include "../../Common/Common.h"
#include "../Misc/TerminalCodes.h"
#if defined(__AVR32__)
#include "AVR32/Serial.h"
#elif defined(__AVR__)
#include "AVR8/Serial.h"
#endif
/* Enable C linkage for C++ Compilers: */
#if defined(__cplusplus)
extern "C" {
#endif
/* Public Interface - May be used in end-application: */
/* Macros: */
/** Macro for calculating the baud value from a given baud rate when the U2X (double speed) bit is
* not set.
*/
#define SERIAL_UBBRVAL(baud) ((((F_CPU / 16) + (baud / 2)) / (baud)) - 1)
/** Macro for calculating the baud value from a given baud rate when the U2X (double speed) bit is
* set.
*/
#define SERIAL_2X_UBBRVAL(baud) ((((F_CPU / 8) + (baud / 2)) / (baud)) - 1)
/* Pseudo-Function Macros: */
#if defined(__DOXYGEN__)
/** Indicates whether a character has been received through the USART.
*
* \return Boolean true if a character has been received, false otherwise
*/
static inline bool Serial_IsCharReceived(void);
#else
#define Serial_IsCharReceived() ((UCSR1A & (1 << RXC1)) ? true : false)
#endif
/* Function Prototypes: */
/** Transmits a given string located in program space (FLASH) through the USART.
*
@ -88,6 +99,58 @@
*/
void Serial_TxString(const char *StringPtr) ATTR_NON_NULL_PTR_ARG(1);
/* Inline Functions: */
/** Initializes the USART, ready for serial data transmission and reception. This initializes the interface to
* standard 8-bit, no parity, 1 stop bit settings suitable for most applications.
*
* \param[in] BaudRate Serial baud rate, in bits per second
* \param[in] DoubleSpeed Enables double speed mode when set, halving the sample time to double the baud rate
*/
static inline void Serial_Init(const uint32_t BaudRate, const bool DoubleSpeed)
{
UCSR1A = (DoubleSpeed ? (1 << U2X1) : 0);
UCSR1B = ((1 << TXEN1) | (1 << RXEN1));
UCSR1C = ((1 << UCSZ11) | (1 << UCSZ10));
DDRD |= (1 << 3);
PORTD |= (1 << 2);
UBRR1 = (DoubleSpeed ? SERIAL_2X_UBBRVAL(BaudRate) : SERIAL_UBBRVAL(BaudRate));
}
/** Turns off the USART driver, disabling and returning used hardware to their default configuration. */
static inline void Serial_ShutDown(void)
{
UCSR1A = 0;
UCSR1B = 0;
UCSR1C = 0;
DDRD &= ~(1 << 3);
PORTD &= ~(1 << 2);
UBRR1 = 0;
}
/** Transmits a given byte through the USART.
*
* \param[in] DataByte Byte to transmit through the USART
*/
static inline void Serial_TxByte(const char DataByte)
{
while (!(UCSR1A & (1 << UDRE1)));
UDR1 = DataByte;
}
/** Receives a byte from the USART.
*
* \return Byte received from the USART
*/
static inline char Serial_RxByte(void)
{
while (!(UCSR1A & (1 << RXC1)));
return UDR1;
}
/* Disable C linkage for C++ Compilers: */
#if defined(__cplusplus)
}

@ -57,8 +57,6 @@
#include <avr/io.h>
#include <stdio.h>
#include "../../Common/Common.h"
#include "Serial.h"
/* Enable C linkage for C++ Compilers: */

@ -57,13 +57,11 @@
#endif
/* Includes: */
#include "../../Common/Common.h"
#if (defined(__AVR_AT90USB1286__) || defined(__AVR_AT90USB646__) || \
defined(__AVR_AT90USB1287__) || defined(__AVR_AT90USB647__) || \
defined(__AVR_ATmega16U4__) || defined(__AVR_ATmega32U4__) || \
defined(__AVR_ATmega32U6__))
#include "AVR8/TWI.h"
#include "AVRU4U6U7/TWI.h"
#else
#error "TWI is not available for the currently selected AVR model."
#endif

@ -345,11 +345,7 @@ static bool RNDIS_Device_ProcessNDISQuery(USB_ClassInfo_RNDIS_Device_t* const RN
case OID_GEN_SUPPORTED_LIST:
*ResponseSize = sizeof(AdapterSupportedOIDList);
#if defined(__AVR32__)
memcpy(ResponseData, AdapterSupportedOIDList, sizeof(AdapterSupportedOIDList));
#elif defined(__AVR__)
memcpy_P(ResponseData, AdapterSupportedOIDList, sizeof(AdapterSupportedOIDList));
#endif
memcpy_P(ResponseData, AdapterSupportedOIDList, sizeof(AdapterSupportedOIDList));
return true;
case OID_GEN_PHYSICAL_MEDIUM:

@ -47,11 +47,7 @@
#define __CONFIGDESCRIPTOR_H__
/* Includes: */
#if defined(__AVR32__)
#include <avr32/io.h>
#elif defined(__AVR__)
#include <avr/io.h>
#endif
#include <avr/io.h>
#include "../../../Common/Common.h"
#include "../HighLevel/USBMode.h"
@ -65,7 +61,7 @@
/* Preprocessor Checks: */
#if !defined(__INCLUDE_FROM_USB_DRIVER)
#error Do not include this file directly. Include LUFA/Drivers/USB/USB.h instead.
#error Do not include this file directly. Include LUFA/Drivers/USB.h instead.
#endif
/* Public Interface - May be used in end-application: */

@ -50,11 +50,7 @@
#define __USBEVENTS_H__
/* Includes: */
#if defined(__AVR32__)
#include <avr32/io.h>
#elif defined(__AVR__)
#include <avr/io.h>
#endif
#include <avr/io.h>
#include "../../../Common/Common.h"
#include "USBMode.h"
@ -66,7 +62,7 @@
/* Preprocessor Checks: */
#if !defined(__INCLUDE_FROM_USB_DRIVER)
#error Do not include this file directly. Include LUFA/Drivers/USB/USB.h instead.
#error Do not include this file directly. Include LUFA/Drivers/USB.h instead.
#endif
/* Public Interface - May be used in end-application: */

@ -41,16 +41,9 @@
#define __USBDESCRIPTORS_H__
/* Includes: */
#if defined(__AVR32__)
#include <avr32/io.h>
#include <stdint.h>
#include <stdbool.h>
#include <stddef.h>
#elif defined(__AVR__)
#include <avr/pgmspace.h>
#include <stdbool.h>
#include <stddef.h>
#endif
#include <avr/pgmspace.h>
#include <stdbool.h>
#include <stddef.h>
#include "../../../Common/Common.h"
#include "USBMode.h"
@ -67,7 +60,7 @@
/* Preprocessor Checks: */
#if !defined(__INCLUDE_FROM_USB_DRIVER)
#error Do not include this file directly. Include LUFA/Drivers/USB/USB.h instead.
#error Do not include this file directly. Include LUFA/Drivers/USB.h instead.
#endif
/* Public Interface - May be used in end-application: */

@ -42,7 +42,7 @@
/* Preprocessor Checks: */
#if !defined(__INCLUDE_FROM_USB_DRIVER)
#error Do not include this file directly. Include LUFA/Drivers/USB/USB.h instead.
#error Do not include this file directly. Include LUFA/Drivers/USB.h instead.
#endif
/* Public Interface - May be used in end-application: */

@ -43,7 +43,7 @@
/* Preprocessor Checks: */
#if !defined(__INCLUDE_FROM_USB_DRIVER)
#error Do not include this file directly. Include LUFA/Drivers/USB/USB.h instead.
#error Do not include this file directly. Include LUFA/Drivers/USB.h instead.
#endif
/* Public Interface - May be used in end-application: */

@ -51,24 +51,17 @@ void USB_INT_DisableAllInterrupts(void)
void USB_INT_ClearAllInterrupts(void)
{
#if defined(__AVR32__)
AVR32_USBB.USBSTACLR = 0xFFFFFF;
AVR32_USBB.UHINTCLR = 0xFFFFFF;
AVR32_USBB.UECONX =
AVR32_USBB.UDINTCLR = 0xFFFFFF;
#elif defined(__AVR__)
#if defined(USB_SERIES_4_AVR) || defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR)
USBINT = 0;
#endif
#if defined(USB_CAN_BE_HOST)
UHINT = 0;
OTGINT = 0;
#endif
#if defined(USB_CAN_BE_DEVICE)
UDINT = 0;
#endif
#if defined(USB_SERIES_4_AVR) || defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR)
USBINT = 0;
#endif
#if defined(USB_CAN_BE_HOST)
UHINT = 0;
OTGINT = 0;
#endif
#if defined(USB_CAN_BE_DEVICE)
UDINT = 0;
#endif
}

@ -32,14 +32,8 @@
#define __USBINTERRUPT_H__
/* Includes: */
#if defined(__AVR32__)
#include <avr32/io.h>
#include <stdbool.h>
#include <stdint.h>
#elif defined(__AVR__)
#include <avr/io.h>
#include <stdbool.h>
#endif
#include <avr/io.h>
#include <stdbool.h>
#include "../../../Common/Common.h"
#include "../LowLevel/LowLevel.h"
@ -53,67 +47,37 @@
/* Preprocessor Checks: */
#if !defined(__INCLUDE_FROM_USB_DRIVER)
#error Do not include this file directly. Include LUFA/Drivers/USB/USB.h instead.
#error Do not include this file directly. Include LUFA/Drivers/USB.h instead.
#endif
/* Private Interface - For use in library only: */
#if !defined(__DOXYGEN__)
/* Macros: */
#if defined(__AVR32__)
#define USB_INT_Enable(int) MACROS{ USB_INT_GET_EN_REG(int) |= USB_INT_GET_EN_MASK(int); }MACROE
#define USB_INT_Disable(int) MACROS{ USB_INT_GET_EN_REG(int) &= ~(USB_INT_GET_EN_MASK(int)); }MACROE
#define USB_INT_Clear(int) MACROS{ USB_INT_GET_INTC_REG(int) |= USB_INT_GET_INTC_MASK(int); }MACROE
#define USB_INT_IsEnabled(int) ((USB_INT_GET_EN_REG(int) & USB_INT_GET_EN_MASK(int)) ? true : false)
#define USB_INT_HasOccurred(int) ((USB_INT_GET_INT_REG(int) & USB_INT_GET_INT_MASK(int)) ? true : false)
#define USB_INT_GET_EN_REG(a, b, c, d) *( (volatile uint32_t*)AVR32_USBB_ ## a )
#define USB_INT_GET_EN_MASK(a, b, c, d) AVR32_USBB_ ## b
#define USB_INT_GET_INT_REG(a, b, c, d) *( (volatile uint32_t*)AVR32_USBB_ ## c )
#define USB_INT_GET_INT_MASK(a, b, c, d) AVR32_USBB_ ## d
#define USB_INT_GET_INTC_REG(a, b, c, d) *( (volatile uint32_t*)AVR32_USBB_ ## c ## CLR )
#define USB_INT_GET_INTC_MASK(a, b, c, d) AVR32_USBB_ ## d ## C
#define USB_INT_VBUS USBCON, USBCON_VBUSTE_MASK, USBSTA, USBSTA_VBUSTI_MASK
#define USB_INT_IDTI USBCON, USBCON_IDTE_MASK , USBSTA, USBCON_IDTI_MASK
#define USB_INT_WAKEUP UDIEN , UDIEN_WAKEUPE_MASK, UDINT , UDIEN_WAKEUPI_MASK
#define USB_INT_SUSPEND UDIEN , UDIEN_SUSPE_MASK , UDINT , UDIEN_SUSPI_MASK
#define USB_INT_EORSTI UDIEN , UDIEN_EORSTE_MASK , UDINT , UDIEN_EORSTI_MASK
#define USB_INT_SOFI UDIEN, UDIEN_SOFE_MASK , UDINT , UDIEN_SOFI_MASK
#define USB_INT_DCONNI UHIEN , UDIEN_DCONNE_MASK , UHINT , UHIEN_DCONNI_MASK
#define USB_INT_DDISCI UHIEN , UDIEN_DDISCE_MASK , UHINT , UHIEN_DDISCI_MASK
#define USB_INT_HSOFI UHIEN, UHIEN_HSOFE_MASK , UHINT , UHIEN_HSOFI_MASK
#define USB_INT_RSTI UHIEN , UHIEN_RSTE_MASK , UHINT , UHIEN_RSTI_MASK
#define USB_INT_RXSTPI UECONX, UECONX_RXSTPE_MASK, UESTAX, UESTAX_RXSTPI_MASK
#define USB_INT_BCERRI USBCON, USBCON_BCERRE_MASK, USBSTA, USBSTA_BCERRI_MASK
#define USB_INT_VBERRI USBCON, USBCON_VBERRE_MASK, USBSTA, USBSTA_VBERRI_MASK
#define USB_INT_SRPI USBCON, USBCON_SRPE_MASK , USBSTA, USBSTA_SRPI_MASK
#elif defined(__AVR__)
#define USB_INT_Enable(int) MACROS{ USB_INT_GET_EN_REG(int) |= USB_INT_GET_EN_MASK(int); }MACROE
#define USB_INT_Disable(int) MACROS{ USB_INT_GET_EN_REG(int) &= ~(USB_INT_GET_EN_MASK(int)); }MACROE
#define USB_INT_Clear(int) MACROS{ USB_INT_GET_INT_REG(int) &= ~(USB_INT_GET_INT_MASK(int)); }MACROE
#define USB_INT_IsEnabled(int) ((USB_INT_GET_EN_REG(int) & USB_INT_GET_EN_MASK(int)) ? true : false)
#define USB_INT_HasOccurred(int) ((USB_INT_GET_INT_REG(int) & USB_INT_GET_INT_MASK(int)) ? true : false)
#define USB_INT_Enable(int) MACROS{ USB_INT_GET_EN_REG(int) |= USB_INT_GET_EN_MASK(int); }MACROE
#define USB_INT_Disable(int) MACROS{ USB_INT_GET_EN_REG(int) &= ~(USB_INT_GET_EN_MASK(int)); }MACROE
#define USB_INT_Clear(int) MACROS{ USB_INT_GET_INT_REG(int) &= ~(USB_INT_GET_INT_MASK(int)); }MACROE
#define USB_INT_IsEnabled(int) ((USB_INT_GET_EN_REG(int) & USB_INT_GET_EN_MASK(int)) ? true : false)
#define USB_INT_HasOccurred(int) ((USB_INT_GET_INT_REG(int) & USB_INT_GET_INT_MASK(int)) ? true : false)
#define USB_INT_GET_EN_REG(a, b, c, d) a
#define USB_INT_GET_EN_MASK(a, b, c, d) b
#define USB_INT_GET_INT_REG(a, b, c, d) c
#define USB_INT_GET_INT_MASK(a, b, c, d) d
#define USB_INT_GET_EN_REG(a, b, c, d) a
#define USB_INT_GET_EN_MASK(a, b, c, d) b
#define USB_INT_GET_INT_REG(a, b, c, d) c
#define USB_INT_GET_INT_MASK(a, b, c, d) d
#define USB_INT_VBUS USBCON, (1 << VBUSTE) , USBINT, (1 << VBUSTI)
#define USB_INT_IDTI USBCON, (1 << IDTE) , USBINT, (1 << IDTI)
#define USB_INT_WAKEUP UDIEN , (1 << WAKEUPE), UDINT , (1 << WAKEUPI)
#define USB_INT_SUSPEND UDIEN , (1 << SUSPE) , UDINT , (1 << SUSPI)
#define USB_INT_EORSTI UDIEN , (1 << EORSTE) , UDINT , (1 << EORSTI)
#define USB_INT_SOFI UDIEN, (1 << SOFE) , UDINT , (1 << SOFI)
#define USB_INT_DCONNI UHIEN , (1 << DCONNE) , UHINT , (1 << DCONNI)
#define USB_INT_DDISCI UHIEN , (1 << DDISCE) , UHINT , (1 << DDISCI)
#define USB_INT_HSOFI UHIEN, (1 << HSOFE) , UHINT , (1 << HSOFI)
#define USB_INT_RSTI UHIEN , (1 << RSTE) , UHINT , (1 << RSTI)
#define USB_INT_BCERRI OTGIEN, (1 << BCERRE) , OTGINT, (1 << BCERRI)
#define USB_INT_VBERRI OTGIEN, (1 << VBERRE) , OTGINT, (1 << VBERRI)
#define USB_INT_SRPI OTGIEN, (1 << SRPE) , OTGINT, (1 << SRPI)
#define USB_INT_RXSTPI UEIENX, (1 << RXSTPE) , UEINTX, (1 << RXSTPI)
#endif
#define USB_INT_VBUS USBCON, (1 << VBUSTE) , USBINT, (1 << VBUSTI)
#define USB_INT_IDTI USBCON, (1 << IDTE) , USBINT, (1 << IDTI)
#define USB_INT_WAKEUP UDIEN , (1 << WAKEUPE), UDINT , (1 << WAKEUPI)
#define USB_INT_SUSPEND UDIEN , (1 << SUSPE) , UDINT , (1 << SUSPI)
#define USB_INT_EORSTI UDIEN , (1 << EORSTE) , UDINT , (1 << EORSTI)
#define USB_INT_DCONNI UHIEN , (1 << DCONNE) , UHINT , (1 << DCONNI)
#define USB_INT_DDISCI UHIEN , (1 << DDISCE) , UHINT , (1 << DDISCI)
#define USB_INT_BCERRI OTGIEN, (1 << BCERRE) , OTGINT, (1 << BCERRI)
#define USB_INT_VBERRI OTGIEN, (1 << VBERRE) , OTGINT, (1 << VBERRI)
#define USB_INT_SOFI UDIEN, (1 << SOFE) , UDINT , (1 << SOFI)
#define USB_INT_HSOFI UHIEN, (1 << HSOFE) , UHINT , (1 << HSOFI)
#define USB_INT_RSTI UHIEN , (1 << RSTE) , UHINT , (1 << RSTI)
#define USB_INT_SRPI OTGIEN, (1 << SRPE) , OTGINT, (1 << SRPI)
#define USB_INT_RXSTPI UEIENX, (1 << RXSTPE) , UEINTX, (1 << RXSTPI)
/* Function Prototypes: */
void USB_INT_ClearAllInterrupts(void);

@ -45,7 +45,7 @@
/* Preprocessor Checks: */
#if !defined(__INCLUDE_FROM_USB_DRIVER)
#error Do not include this file directly. Include LUFA/Drivers/USB/USB.h instead.
#error Do not include this file directly. Include LUFA/Drivers/USB.h instead.
#endif
/* Public Interface - May be used in end-application: */
@ -69,11 +69,6 @@
* (i.e. AT90USBXXX7) when defined.
*/
#define USB_SERIES_7_AVR
/** Indicates that the target AVR microcontroller belongs to the Series UC3B USB controller
* (i.e. AT32UC3BXXXX) when defined.
*/
#define USB_SERIES_UC3B_AVR
/** Indicates that the target AVR microcontroller and compilation settings allow for the
* target to be configured in USB Device mode when defined.
@ -100,11 +95,9 @@
#define USB_SERIES_6_AVR
#elif (defined(__AVR_AT90USB647__) || defined(__AVR_AT90USB1287__))
#define USB_SERIES_7_AVR
#elif (defined(__AVR32_UC3B0256__))
#define USB_SERIES_UC3B_AVR
#endif
#if !defined(USB_SERIES_7_AVR) && !defined(USB_SERIES_UC3B_AVR)
#if !defined(USB_SERIES_7_AVR)
#if defined(USB_HOST_ONLY)
#error USB_HOST_ONLY is not available for the currently selected USB AVR model.
#endif

@ -32,15 +32,9 @@
#define __USBTASK_H__
/* Includes: */
#if defined(__AVR32__)
#include <avr32/io.h>
#include <stdint.h>
#include <stdbool.h>
#elif defined(__AVR__)
#include <avr/io.h>
#include <avr/interrupt.h>
#include <stdbool.h>
#endif
#include <avr/io.h>
#include <avr/interrupt.h>
#include <stdbool.h>
#include "../LowLevel/LowLevel.h"
#include "Events.h"
@ -63,7 +57,7 @@
/* Preprocessor Checks: */
#if !defined(__INCLUDE_FROM_USB_DRIVER)
#error Do not include this file directly. Include LUFA/Drivers/USB/USB.h instead.
#error Do not include this file directly. Include LUFA/Drivers/USB.h instead.
#endif
/* Public Interface - May be used in end-application: */
@ -87,7 +81,7 @@
extern USB_Request_Header_t USB_ControlRequest;
#if defined(USB_CAN_BE_HOST) || defined(__DOXYGEN__)
#if (!defined(__AVR32__) || !defined(HOST_STATE_AS_GPIOR)) || defined(__DOXYGEN__)
#if !defined(HOST_STATE_AS_GPIOR) || defined(__DOXYGEN__)
/** Indicates the current host state machine state. When in host mode, this indicates the state
* via one of the values of the \ref USB_Host_States_t enum values.
*
@ -116,7 +110,7 @@
#endif
#if defined(USB_CAN_BE_DEVICE) || defined(__DOXYGEN__)
#if (defined(__AVR32__) || !defined(DEVICE_STATE_AS_GPIOR)) || defined(__DOXYGEN__)
#if !defined(DEVICE_STATE_AS_GPIOR) || defined(__DOXYGEN__)
/** Indicates the current device state machine state. When in device mode, this indicates the state
* via one of the values of the \ref USB_Device_States_t enum values.
*

@ -139,7 +139,7 @@ static void USB_Device_SetAddress(void)
if (DeviceAddress)
USB_DeviceState = DEVICE_STATE_Addressed;
USB_Device_SetDeviceAddress(DeviceAddress);
UDADDR = ((1 << ADDEN) | DeviceAddress);
return;
}

@ -32,15 +32,10 @@
#define __DEVCHAPTER9_H__
/* Includes: */
#if defined(__AVR32__)
#include <avr32/io.h>
#include <stdint.h>
#elif defined(__AVR__)
#include <avr/io.h>
#include <avr/pgmspace.h>
#include <avr/eeprom.h>
#include <avr/boot.h>
#endif
#include <avr/io.h>
#include <avr/pgmspace.h>
#include <avr/eeprom.h>
#include <avr/boot.h>
#include "../HighLevel/StdDescriptors.h"
#include "../HighLevel/Events.h"
@ -55,7 +50,7 @@
/* Preprocessor Checks: */
#if !defined(__INCLUDE_FROM_USB_DRIVER)
#error Do not include this file directly. Include LUFA/Drivers/USB/USB.h instead.
#error Do not include this file directly. Include LUFA/Drivers/USB.h instead.
#endif
/* Public Interface - May be used in end-application: */
@ -75,11 +70,7 @@
enum USB_DescriptorMemorySpaces_t
{
MEMSPACE_FLASH = 0, /**< Indicates the requested descriptor is located in FLASH memory */
#if defined(__AVR__) || defined(__DOXYGEN__)
MEMSPACE_EEPROM = 1, /**< Indicates the requested descriptor is located in EEPROM memory */
#endif
MEMSPACE_RAM = 2, /**< Indicates the requested descriptor is located in RAM memory */
};
#endif
@ -134,10 +125,6 @@
#elif defined(USE_FLASH_DESCRIPTORS) && defined(USE_EEPROM_DESCRIPTORS) && defined(USE_RAM_DESCRIPTORS)
#error Only one of the USE_*_DESCRIPTORS modes should be selected.
#endif
#if defined(USE_EEPROM_DESCRIPTORS) && defined(USB_SERIES_UC3B_AVR)
#error USE_EEPROM_DESCRIPTORS is not available on the UC3B series AVRs.
#endif
/* Function Prototypes: */
void USB_Device_ProcessControlRequest(void);

@ -41,11 +41,9 @@
#define __USBDEVICE_H__
/* Includes: */
#if defined(__AVR__)
#include <avr/pgmspace.h>
#include <avr/eeprom.h>
#endif
#include <avr/pgmspace.h>
#include <avr/eeprom.h>
#include "../../../Common/Common.h"
#include "../HighLevel/StdDescriptors.h"
#include "Endpoint.h"
@ -56,13 +54,12 @@
#endif
#if !defined(__INCLUDE_FROM_USB_DRIVER)
#error Do not include this file directly. Include LUFA/Drivers/USB/USB.h instead.
#error Do not include this file directly. Include LUFA/Drivers/USB.h instead.
#endif
/* Public Interface - May be used in end-application: */
/* Macros: */
#if (defined(USB_SERIES_4_AVR) || defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR) || \
defined(USB_SERIES_UC3B_AVR) || defined(__DOXYGEN__))
#if defined(USB_SERIES_4_AVR) || defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR) || defined(__DOXYGEN__)
/** Mask for the Options parameter of the \ref USB_Init() function. This indicates that the
* USB interface should be initialized in low speed (1.5Mb/s) mode.
*
@ -71,13 +68,13 @@
* \note Restrictions apply on the number, size and type of endpoints which can be used
* when running in low speed mode -- refer to the USB 2.0 standard.
*/
#define USB_DEVICE_OPT_LOWSPEED (1 << 0)
#define USB_DEVICE_OPT_LOWSPEED (1 << 0)
#endif
/** Mask for the Options parameter of the USB_Init() function. This indicates that the
* USB interface should be initialized in full speed (12Mb/s) mode.
*/
#define USB_DEVICE_OPT_FULLSPEED (0 << 0)
#define USB_DEVICE_OPT_FULLSPEED (0 << 0)
/* Pseudo-Function Macros: */
#if defined(__DOXYGEN__)
@ -132,25 +129,16 @@
*/
static inline bool USB_Device_DisableSOFEvents(void);
#else
#if defined(__AVR32__)
#if !defined(NO_DEVICE_REMOTE_WAKEUP)
#define USB_Device_SendRemoteWakeup() MACROS{ AVR32_USBB.UDCON.rmwkup = true; }MACROE
#define USB_Device_IsRemoteWakeupSent() AVR32_USBB.UDCON.rmwkup
#endif
#define USB_Device_IsUSBSuspended() AVR32_USBB.UDINT.susp
#elif defined(__AVR__)
#if !defined(NO_DEVICE_REMOTE_WAKEUP)
#define USB_Device_SendRemoteWakeup() MACROS{ UDCON |= (1 << RMWKUP); }MACROE
#if !defined(NO_DEVICE_REMOTE_WAKEUP)
#define USB_Device_SendRemoteWakeup() MACROS{ UDCON |= (1 << RMWKUP); }MACROE
#define USB_Device_IsRemoteWakeupSent() ((UDCON & (1 << RMWKUP)) ? false : true)
#endif
#define USB_Device_IsUSBSuspended() ((UDINT & (1 << SUSPI)) ? true : false)
#define USB_Device_IsRemoteWakeupSent() ((UDCON & (1 << RMWKUP)) ? false : true)
#endif
#define USB_Device_IsUSBSuspended() ((UDINT & (1 << SUSPI)) ? true : false)
#define USB_Device_EnableSOFEvents() MACROS{ USB_INT_Enable(USB_INT_SOFI); }MACROE
#define USB_Device_DisableSOFEvents() MACROS{ USB_INT_Disable(USB_INT_SOFI); }MACROE
#endif
@ -219,17 +207,8 @@
/* Private Interface - For use in library only: */
#if !defined(__DOXYGEN__)
/* Macros: */
#if defined(__AVR32__)
#define USB_Device_SetLowSpeed() MACROS{ AVR32_USBB.UDCON.ls = true; }MACROE
#define USB_Device_SetFullSpeed() MACROS{ AVR32_USBB.UDCON.ls = false; }MACROE
#define USB_Device_SetDeviceAddress(addr) MACROS{ AVR32_USBB.UDCON.uadd = DeviceAddress; AVR32_USBB.UDCON.adden = true; }MACROE
#elif defined(__AVR__)
#define USB_Device_SetLowSpeed() MACROS{ UDCON |= (1 << LSM); }MACROE
#define USB_Device_SetFullSpeed() MACROS{ UDCON &= ~(1 << LSM); }MACROE
#define USB_Device_SetDeviceAddress(addr) MACROS{ UDADDR = ((1 << ADDEN) | DeviceAddress); }MACROE
#endif
#define USB_Device_SetLowSpeed() MACROS{ UDCON |= (1 << LSM); }MACROE
#define USB_Device_SetFullSpeed() MACROS{ UDCON &= ~(1 << LSM); }MACROE
#endif
#endif

@ -40,12 +40,12 @@
uint8_t USB_ControlEndpointSize = ENDPOINT_CONTROLEP_DEFAULT_SIZE;
#endif
uintN_t Endpoint_BytesToEPSizeMaskDynamic(const uint16_t Size)
uint8_t Endpoint_BytesToEPSizeMaskDynamic(const uint16_t Size)
{
return Endpoint_BytesToEPSizeMask(Size);
}
bool Endpoint_ConfigureEndpoint_Prv(const uintN_t Number, const uintN_t UECFG0XData, const uintN_t UECFG1XData)
bool Endpoint_ConfigureEndpoint_Prv(const uint8_t Number, const uint8_t UECFG0XData, const uint8_t UECFG1XData)
{
Endpoint_SelectEndpoint(Number);
Endpoint_EnableEndpoint();
@ -225,14 +225,12 @@ uint8_t Endpoint_Discard_Stream(uint16_t Length
#define TEMPLATE_TRANSFER_BYTE(BufferPtr) Endpoint_Write_Byte(pgm_read_byte((uint8_t*)BufferPtr++))
#include "Template/Template_Endpoint_RW.c"
#if defined(__AVR__)
#define TEMPLATE_FUNC_NAME Endpoint_Write_EStream_LE
#define TEMPLATE_BUFFER_TYPE const void*
#define TEMPLATE_CLEAR_ENDPOINT() Endpoint_ClearIN()
#define TEMPLATE_BUFFER_OFFSET(Length) 0
#define TEMPLATE_TRANSFER_BYTE(BufferPtr) Endpoint_Write_Byte(eeprom_read_byte((uint8_t*)BufferPtr++))
#include "Template/Template_Endpoint_RW.c"
#endif
#define TEMPLATE_FUNC_NAME Endpoint_Write_EStream_LE
#define TEMPLATE_BUFFER_TYPE const void*
#define TEMPLATE_CLEAR_ENDPOINT() Endpoint_ClearIN()
#define TEMPLATE_BUFFER_OFFSET(Length) 0
#define TEMPLATE_TRANSFER_BYTE(BufferPtr) Endpoint_Write_Byte(eeprom_read_byte((uint8_t*)BufferPtr++))
#include "Template/Template_Endpoint_RW.c"
#define TEMPLATE_FUNC_NAME Endpoint_Write_Stream_BE
#define TEMPLATE_BUFFER_TYPE const void*
@ -241,14 +239,12 @@ uint8_t Endpoint_Discard_Stream(uint16_t Length
#define TEMPLATE_TRANSFER_BYTE(BufferPtr) Endpoint_Write_Byte(*((uint8_t*)BufferPtr--))
#include "Template/Template_Endpoint_RW.c"
#if defined(__AVR__)
#define TEMPLATE_FUNC_NAME Endpoint_Write_EStream_BE
#define TEMPLATE_BUFFER_TYPE const void*
#define TEMPLATE_CLEAR_ENDPOINT() Endpoint_ClearIN()
#define TEMPLATE_BUFFER_OFFSET(Length) (Length - 1)
#define TEMPLATE_TRANSFER_BYTE(BufferPtr) Endpoint_Write_Byte(eeprom_read_byte((uint8_t*)BufferPtr--))
#include "Template/Template_Endpoint_RW.c"
#endif
#define TEMPLATE_FUNC_NAME Endpoint_Write_EStream_BE
#define TEMPLATE_BUFFER_TYPE const void*
#define TEMPLATE_CLEAR_ENDPOINT() Endpoint_ClearIN()
#define TEMPLATE_BUFFER_OFFSET(Length) (Length - 1)
#define TEMPLATE_TRANSFER_BYTE(BufferPtr) Endpoint_Write_Byte(eeprom_read_byte((uint8_t*)BufferPtr--))
#include "Template/Template_Endpoint_RW.c"
#define TEMPLATE_FUNC_NAME Endpoint_Write_PStream_BE
#define TEMPLATE_BUFFER_TYPE const void*
@ -264,14 +260,12 @@ uint8_t Endpoint_Discard_Stream(uint16_t Length
#define TEMPLATE_TRANSFER_BYTE(BufferPtr) *((uint8_t*)BufferPtr++) = Endpoint_Read_Byte()
#include "Template/Template_Endpoint_RW.c"
#if defined(__AVR__)
#define TEMPLATE_FUNC_NAME Endpoint_Read_EStream_LE
#define TEMPLATE_BUFFER_TYPE void*
#define TEMPLATE_CLEAR_ENDPOINT() Endpoint_ClearOUT()
#define TEMPLATE_BUFFER_OFFSET(Length) 0
#define TEMPLATE_TRANSFER_BYTE(BufferPtr) eeprom_write_byte((uint8_t*)BufferPtr++, Endpoint_Read_Byte())
#include "Template/Template_Endpoint_RW.c"
#endif
#define TEMPLATE_FUNC_NAME Endpoint_Read_EStream_LE
#define TEMPLATE_BUFFER_TYPE void*
#define TEMPLATE_CLEAR_ENDPOINT() Endpoint_ClearOUT()
#define TEMPLATE_BUFFER_OFFSET(Length) 0
#define TEMPLATE_TRANSFER_BYTE(BufferPtr) eeprom_write_byte((uint8_t*)BufferPtr++, Endpoint_Read_Byte())
#include "Template/Template_Endpoint_RW.c"
#define TEMPLATE_FUNC_NAME Endpoint_Read_Stream_BE
#define TEMPLATE_BUFFER_TYPE void*
@ -280,14 +274,12 @@ uint8_t Endpoint_Discard_Stream(uint16_t Length
#define TEMPLATE_TRANSFER_BYTE(BufferPtr) *((uint8_t*)BufferPtr--) = Endpoint_Read_Byte()
#include "Template/Template_Endpoint_RW.c"
#if defined(__AVR__)
#define TEMPLATE_FUNC_NAME Endpoint_Read_EStream_BE
#define TEMPLATE_BUFFER_TYPE void*
#define TEMPLATE_CLEAR_ENDPOINT() Endpoint_ClearOUT()
#define TEMPLATE_BUFFER_OFFSET(Length) (Length - 1)
#define TEMPLATE_TRANSFER_BYTE(BufferPtr) eeprom_write_byte((uint8_t*)BufferPtr--, Endpoint_Read_Byte())
#include "Template/Template_Endpoint_RW.c"
#endif
#define TEMPLATE_FUNC_NAME Endpoint_Read_EStream_BE
#define TEMPLATE_BUFFER_TYPE void*
#define TEMPLATE_CLEAR_ENDPOINT() Endpoint_ClearOUT()
#define TEMPLATE_BUFFER_OFFSET(Length) (Length - 1)
#define TEMPLATE_TRANSFER_BYTE(BufferPtr) eeprom_write_byte((uint8_t*)BufferPtr--, Endpoint_Read_Byte())
#include "Template/Template_Endpoint_RW.c"
#endif
@ -301,12 +293,10 @@ uint8_t Endpoint_Discard_Stream(uint16_t Length
#define TEMPLATE_TRANSFER_BYTE(BufferPtr) Endpoint_Write_Byte(pgm_read_byte((uint8_t*)BufferPtr++))
#include "Template/Template_Endpoint_Control_W.c"
#if defined(__AVR__)
#define TEMPLATE_FUNC_NAME Endpoint_Write_Control_EStream_LE
#define TEMPLATE_BUFFER_OFFSET(Length) 0
#define TEMPLATE_TRANSFER_BYTE(BufferPtr) Endpoint_Write_Byte(eeprom_read_byte((uint8_t*)BufferPtr++))
#include "Template/Template_Endpoint_Control_W.c"
#endif
#define TEMPLATE_FUNC_NAME Endpoint_Write_Control_EStream_LE
#define TEMPLATE_BUFFER_OFFSET(Length) 0
#define TEMPLATE_TRANSFER_BYTE(BufferPtr) Endpoint_Write_Byte(eeprom_read_byte((uint8_t*)BufferPtr++))
#include "Template/Template_Endpoint_Control_W.c"
#define TEMPLATE_FUNC_NAME Endpoint_Write_Control_Stream_BE
#define TEMPLATE_BUFFER_OFFSET(Length) (Length - 1)
@ -318,35 +308,29 @@ uint8_t Endpoint_Discard_Stream(uint16_t Length
#define TEMPLATE_TRANSFER_BYTE(BufferPtr) Endpoint_Write_Byte(pgm_read_byte((uint8_t*)BufferPtr--))
#include "Template/Template_Endpoint_Control_W.c"
#if defined(__AVR__)
#define TEMPLATE_FUNC_NAME Endpoint_Write_Control_EStream_BE
#define TEMPLATE_BUFFER_OFFSET(Length) (Length - 1)
#define TEMPLATE_TRANSFER_BYTE(BufferPtr) Endpoint_Write_Byte(eeprom_read_byte((uint8_t*)BufferPtr--))
#include "Template/Template_Endpoint_Control_W.c"
#endif
#define TEMPLATE_FUNC_NAME Endpoint_Write_Control_EStream_BE
#define TEMPLATE_BUFFER_OFFSET(Length) (Length - 1)
#define TEMPLATE_TRANSFER_BYTE(BufferPtr) Endpoint_Write_Byte(eeprom_read_byte((uint8_t*)BufferPtr--))
#include "Template/Template_Endpoint_Control_W.c"
#define TEMPLATE_FUNC_NAME Endpoint_Read_Control_Stream_LE
#define TEMPLATE_BUFFER_OFFSET(Length) 0
#define TEMPLATE_TRANSFER_BYTE(BufferPtr) *((uint8_t*)BufferPtr++) = Endpoint_Read_Byte()
#include "Template/Template_Endpoint_Control_R.c"
#if defined(__AVR__)
#define TEMPLATE_FUNC_NAME Endpoint_Read_Control_EStream_LE
#define TEMPLATE_BUFFER_OFFSET(Length) 0
#define TEMPLATE_TRANSFER_BYTE(BufferPtr) eeprom_write_byte((uint8_t*)BufferPtr++, Endpoint_Read_Byte())
#include "Template/Template_Endpoint_Control_R.c"
#endif
#define TEMPLATE_FUNC_NAME Endpoint_Read_Control_EStream_LE
#define TEMPLATE_BUFFER_OFFSET(Length) 0
#define TEMPLATE_TRANSFER_BYTE(BufferPtr) eeprom_write_byte((uint8_t*)BufferPtr++, Endpoint_Read_Byte())
#include "Template/Template_Endpoint_Control_R.c"
#define TEMPLATE_FUNC_NAME Endpoint_Read_Control_Stream_BE
#define TEMPLATE_BUFFER_OFFSET(Length) (Length - 1)
#define TEMPLATE_TRANSFER_BYTE(BufferPtr) *((uint8_t*)BufferPtr--) = Endpoint_Read_Byte()
#include "Template/Template_Endpoint_Control_R.c"
#if defined(__AVR__)
#define TEMPLATE_FUNC_NAME Endpoint_Read_Control_EStream_BE
#define TEMPLATE_BUFFER_OFFSET(Length) (Length - 1)
#define TEMPLATE_TRANSFER_BYTE(BufferPtr) eeprom_write_byte((uint8_t*)BufferPtr--, Endpoint_Read_Byte())
#include "Template/Template_Endpoint_Control_R.c"
#endif
#define TEMPLATE_FUNC_NAME Endpoint_Read_Control_EStream_BE
#define TEMPLATE_BUFFER_OFFSET(Length) (Length - 1)
#define TEMPLATE_TRANSFER_BYTE(BufferPtr) eeprom_write_byte((uint8_t*)BufferPtr--, Endpoint_Read_Byte())
#include "Template/Template_Endpoint_Control_R.c"
#endif

@ -66,19 +66,12 @@
#define __ENDPOINT_H__
/* Includes: */
#if defined(__AVR32__)
#include <avr32/io.h>
#include <stdint.h>
#include <stdbool.h>
#elif defined(__AVR__)
#include <avr/io.h>
#include <avr/pgmspace.h>
#include <avr/eeprom.h>
#include <stdbool.h>
#endif
#include <avr/io.h>
#include <avr/pgmspace.h>
#include <avr/eeprom.h>
#include <stdbool.h>
#include "../../../Common/Common.h"
#include "LowLevel.h"
#include "../HighLevel/USBTask.h"
#if !defined(NO_STREAM_CALLBACKS) || defined(__DOXYGEN__)
@ -92,45 +85,34 @@
/* Preprocessor Checks: */
#if !defined(__INCLUDE_FROM_USB_DRIVER)
#error Do not include this file directly. Include LUFA/Drivers/USB/USB.h instead.
#error Do not include this file directly. Include LUFA/Drivers/USB.h instead.
#endif
#if defined(__AVR32__) && !defined(__AVR32_EPREG_X)
#define __AVR32_EPREG_X(x) ((volatile uint32_t*)AVR32_USBB_ ## x)[USB_SelectedEPNumber]
#endif
/* Public Interface - May be used in end-application: */
/* Macros: */
#if defined(__AVR32__) || defined(__DOXYGEN__)
/** Endpoint data direction mask for \ref Endpoint_ConfigureEndpoint(). This indicates that the endpoint
* should be initialized in the OUT direction - i.e. data flows from host to device.
*/
#define ENDPOINT_DIR_OUT 0
/** Endpoint data direction mask for \ref Endpoint_ConfigureEndpoint(). This indicates that the endpoint
* should be initialized in the OUT direction - i.e. data flows from host to device.
*/
#define ENDPOINT_DIR_OUT (0 << EPDIR)
/** Endpoint data direction mask for \ref Endpoint_ConfigureEndpoint(). This indicates that the endpoint
* should be initialized in the IN direction - i.e. data flows from device to host.
*/
#define ENDPOINT_DIR_IN AVR32_USBB_EPDIR_IN
/** Endpoint data direction mask for \ref Endpoint_ConfigureEndpoint(). This indicates that the endpoint
* should be initialized in the IN direction - i.e. data flows from device to host.
*/
#define ENDPOINT_DIR_IN (1 << EPDIR)
/** Mask for the bank mode selection for the \ref Endpoint_ConfigureEndpoint() macro. This indicates
* that the endpoint should have one single bank, which requires less USB FIFO memory but results
* in slower transfers as only one USB device (the AVR or the host) can access the endpoint's
* bank at the one time.
*/
#define ENDPOINT_BANK_SINGLE AVR32_USBB_EPBK_SINGLE
/** Mask for the bank mode selection for the \ref Endpoint_ConfigureEndpoint() macro. This indicates
* that the endpoint should have two banks, which requires more USB FIFO memory but results
* in faster transfers as one USB device (the AVR or the host) can access one bank while the other
* accesses the second bank.
*/
#define ENDPOINT_BANK_DOUBLE AVR32_USBB_EPBK_DOUBLE
#elif defined(__AVR__)
#define ENDPOINT_DIR_OUT (0 << EPDIR)
#define ENDPOINT_DIR_IN (1 << EPDIR)
#define ENDPOINT_BANK_SINGLE (0 << EPBK0)
#define ENDPOINT_BANK_DOUBLE (1 << EPBK0)
#endif
/** Mask for the bank mode selection for the \ref Endpoint_ConfigureEndpoint() macro. This indicates
* that the endpoint should have one single bank, which requires less USB FIFO memory but results
* in slower transfers as only one USB device (the AVR or the host) can access the endpoint's
* bank at the one time.
*/
#define ENDPOINT_BANK_SINGLE (0 << EPBK0)
/** Mask for the bank mode selection for the \ref Endpoint_ConfigureEndpoint() macro. This indicates
* that the endpoint should have two banks, which requires more USB FIFO memory but results
* in faster transfers as one USB device (the AVR or the host) can access one bank while the other
* accesses the second bank.
*/
#define ENDPOINT_BANK_DOUBLE (1 << EPBK0)
/** Endpoint address for the default control endpoint, which always resides in address 0. This is
* defined for convenience to give more readable code when used with the endpoint macros.
@ -172,18 +154,17 @@
#define ENDPOINT_DOUBLEBANK_SUPPORTED(n) _ENDPOINT_GET_DOUBLEBANK(n)
#if !defined(CONTROL_ONLY_DEVICE)
#if (defined(USB_SERIES_4_AVR) || defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR) || \
defined(USB_SERIES_UC3B_AVR) || defined(__DOXYGEN__))
#if defined(USB_SERIES_4_AVR) || defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR) || defined(__DOXYGEN__)
/** Total number of endpoints (including the default control endpoint at address 0) which may
* be used in the device. Different USB AVR models support different amounts of endpoints,
* this value reflects the maximum number of endpoints for the currently selected AVR model.
*/
#define ENDPOINT_TOTAL_ENDPOINTS 7
#define ENDPOINT_TOTAL_ENDPOINTS 7
#else
#define ENDPOINT_TOTAL_ENDPOINTS 5
#define ENDPOINT_TOTAL_ENDPOINTS 5
#endif
#else
#define ENDPOINT_TOTAL_ENDPOINTS 1
#define ENDPOINT_TOTAL_ENDPOINTS 1
#endif
/* Pseudo-Function Macros: */
@ -373,84 +354,71 @@
#define Endpoint_BytesInEndpoint() (((uint16_t)UEBCHX << 8) | UEBCLX)
#elif defined(USB_SERIES_2_AVR)
#define Endpoint_BytesInEndpoint() UEBCLX
#elif defined(USB_SERIES_UC3B_AVR)
#define Endpoint_BytesInEndpoint() ((__AVR32_EPREG_X(UESTA0) & AVR32_USBB_BYCT_MASK) >> AVR32_USBB_BYCT)
#endif
#if defined(__AVR32__)
#if !defined(CONTROL_ONLY_DEVICE)
#define Endpoint_GetCurrentEndpoint() USB_SelectedEPNumber
#define Endpoint_SelectEndpoint(epnum) MACROS{ USB_SelectedEPNumber = (epnum); }MACROE
#define Endpoint_IsReadWriteAllowed() (__AVR32_EPREG_X(UESTA0) & AVR32_USBB_RWALL_MASK)
#else
#define Endpoint_GetCurrentEndpoint() ENDPOINT_CONTROLEP
#define Endpoint_SelectEndpoint(epnum) (void)(epnum)
#endif
#define Endpoint_ResetFIFO(epnum) MACROS{ AVR32_USBB.uerst |= (AVR32_USBB_EPRST0_MASK << (epnum)); \
AVR32_USBB.uerst &= ~(AVR32_USBB_EPRST0_MASK << (epnum)); }MACROE
#define Endpoint_EnableEndpoint() MACROS{ AVR32_USBB.uerst |= (AVR32_USBB_UERST_EPEN0_MASK << USB_SelectedEPNumber); }MACROE
#define Endpoint_DisableEndpoint() MACROS{ AVR32_USBB.uerst &= ~(AVR32_USBB_UERST_EPEN0_MASK << USB_SelectedEPNumber); }MACROE
#define Endpoint_IsEnabled() ((AVR32_USBB.uerst & (AVR32_USBB_UERST_EPEN0_MASK << USB_SelectedEPNumber)) ? true : false)
#define Endpoint_IsConfigured() ((__AVR32_EPREG_X(UESTA0) & AVR32_USBB_UESTA0_CFGOK_MASK) ? true : false)
#define Endpoint_GetEndpointInterrupts() (AVR32_USBB.UDINT >> AVR32_USBB_EP0INT)
#define Endpoint_HasEndpointInterrupted(n) ((AVR32_USBB.UDINT & (AVR32_USBB_EP0INT << (n))) ? true : false)
#define Endpoint_IsINReady() ((__AVR32_EPREG_X(UESTA0) & AVR32_USBB_TXINI) ? true : false)
#define Endpoint_IsOUTReceived() ((__AVR32_EPREG_X(UESTA0) & AVR32_USBB_RXOUTI) ? true : false)
#define Endpoint_IsSETUPReceived() ((__AVR32_EPREG_X(UESTA0) & AVR32_USBB_RXSTPI) ? true : false)
#define Endpoint_ClearSETUP() MACROS{ __AVR32_EPREG_X(UESTA0CLR) = AVR32_USBB_RXSTPIC; }MACROE
#define Endpoint_ClearIN() MACROS{ __AVR32_EPREG_X(UESTA0CLR) = AVR32_USBB_TXINIC; \
__AVR32_EPREG_X(UECON0CLR) = AVR32_USBB_FIFOCONC; }MACROE
#define Endpoint_ClearOUT() MACROS{ __AVR32_EPREG_X(UESTA0CLR) = AVR32_USBB_RXOUTI; \
__AVR32_EPREG_X(UECON0CLR) = AVR32_USBB_FIFOCONC; }MACROE
#define Endpoint_StallTransaction() MACROS{ __AVR32_EPREG_X(UECON0SET) = AVR32_USBB_STALLRQS; }MACROE
#define Endpoint_ClearStall() MACROS{ __AVR32_EPREG_X(UECON0CLR) = AVR32_USBB_STALLRQC; }MACROE
#define Endpoint_IsStalled() ((__AVR32_EPREG_X(UECON0) & AVR32_USBB_STALLRQ) ? true : false)
#define Endpoint_ResetDataToggle() MACROS{ __AVR32_EPREG_X(UECON0CLR) = AVR32_USBB_RSTDTS; }MACROE
#define Endpoint_GetEndpointDirection() ((__AVR32_EPREG_X(UECFG0) & ENDPOINT_DIR_IN) ? true : false)
#define Endpoint_SetEndpointDirection(dir) MACROS{ __AVR32_EPREG_X(UECFG0) = \
((__AVR32_EPREG_X(UECFG0) & ENDPOINT_DIR_IN) | (dir)); }MACROE
#elif defined(__AVR__)
#if !defined(CONTROL_ONLY_DEVICE)
#define Endpoint_GetCurrentEndpoint() (UENUM & ENDPOINT_EPNUM_MASK)
#define Endpoint_SelectEndpoint(epnum) MACROS{ UENUM = (epnum); }MACROE
#define Endpoint_IsReadWriteAllowed() ((UEINTX & (1 << RWAL)) ? true : false)
#else
#define Endpoint_GetCurrentEndpoint() ENDPOINT_CONTROLEP
#define Endpoint_SelectEndpoint(epnum) (void)(epnum)
#endif
#define Endpoint_ResetFIFO(epnum) MACROS{ UERST = (1 << (epnum)); UERST = 0; }MACROE
#define Endpoint_EnableEndpoint() MACROS{ UECONX |= (1 << EPEN); }MACROE
#define Endpoint_DisableEndpoint() MACROS{ UECONX &= ~(1 << EPEN); }MACROE
#define Endpoint_IsEnabled() ((UECONX & (1 << EPEN)) ? true : false)
#define Endpoint_IsConfigured() ((UESTA0X & (1 << CFGOK)) ? true : false)
#define Endpoint_GetEndpointInterrupts() UEINT
#define Endpoint_HasEndpointInterrupted(n) ((UEINT & (1 << (n))) ? true : false)
#define Endpoint_IsINReady() ((UEINTX & (1 << TXINI)) ? true : false)
#define Endpoint_IsOUTReceived() ((UEINTX & (1 << RXOUTI)) ? true : false)
#define Endpoint_IsSETUPReceived() ((UEINTX & (1 << RXSTPI)) ? true : false)
#define Endpoint_ClearSETUP() MACROS{ UEINTX &= ~(1 << RXSTPI); }MACROE
#if !defined(CONTROL_ONLY_DEVICE)
#define Endpoint_ClearIN() MACROS{ uint8_t Temp = UEINTX; UEINTX = (Temp & ~(1 << TXINI)); \
UEINTX = (Temp & ~(1 << FIFOCON)); }MACROE
#define Endpoint_ClearOUT() MACROS{ uint8_t Temp = UEINTX; UEINTX = (Temp & ~(1 << RXOUTI)); \
UEINTX = (Temp & ~(1 << FIFOCON)); }MACROE
#else
#define Endpoint_ClearIN() MACROS{ UEINTX &= ~(1 << TXINI); }MACROE
#define Endpoint_ClearOUT() MACROS{ UEINTX &= ~(1 << RXOUTI); }MACROE
#endif
#define Endpoint_StallTransaction() MACROS{ UECONX |= (1 << STALLRQ); }MACROE
#define Endpoint_ClearStall() MACROS{ UECONX |= (1 << STALLRQC); }MACROE
#define Endpoint_IsStalled() ((UECONX & (1 << STALLRQ)) ? true : false)
#define Endpoint_ResetDataToggle() MACROS{ UECONX |= (1 << RSTDT); }MACROE
#define Endpoint_GetEndpointDirection() (UECFG0X & ENDPOINT_DIR_IN)
#define Endpoint_SetEndpointDirection(dir) MACROS{ UECFG0X = ((UECFG0X & ~ENDPOINT_DIR_IN) | (dir)); }MACROE
#if !defined(CONTROL_ONLY_DEVICE)
#define Endpoint_GetCurrentEndpoint() (UENUM & ENDPOINT_EPNUM_MASK)
#else
#define Endpoint_GetCurrentEndpoint() ENDPOINT_CONTROLEP
#endif
#if !defined(CONTROL_ONLY_DEVICE)
#define Endpoint_SelectEndpoint(epnum) MACROS{ UENUM = (epnum); }MACROE
#else
#define Endpoint_SelectEndpoint(epnum) (void)(epnum)
#endif
#define Endpoint_ResetFIFO(epnum) MACROS{ UERST = (1 << (epnum)); UERST = 0; }MACROE
#define Endpoint_EnableEndpoint() MACROS{ UECONX |= (1 << EPEN); }MACROE
#define Endpoint_DisableEndpoint() MACROS{ UECONX &= ~(1 << EPEN); }MACROE
#define Endpoint_IsEnabled() ((UECONX & (1 << EPEN)) ? true : false)
#if !defined(CONTROL_ONLY_DEVICE)
#define Endpoint_IsReadWriteAllowed() ((UEINTX & (1 << RWAL)) ? true : false)
#endif
#define Endpoint_IsConfigured() ((UESTA0X & (1 << CFGOK)) ? true : false)
#define Endpoint_GetEndpointInterrupts() UEINT
#define Endpoint_HasEndpointInterrupted(n) ((UEINT & (1 << (n))) ? true : false)
#define Endpoint_IsINReady() ((UEINTX & (1 << TXINI)) ? true : false)
#define Endpoint_IsOUTReceived() ((UEINTX & (1 << RXOUTI)) ? true : false)
#define Endpoint_IsSETUPReceived() ((UEINTX & (1 << RXSTPI)) ? true : false)
#define Endpoint_ClearSETUP() MACROS{ UEINTX &= ~(1 << RXSTPI); }MACROE
#if !defined(CONTROL_ONLY_DEVICE)
#define Endpoint_ClearIN() MACROS{ uint8_t Temp = UEINTX; UEINTX = (Temp & ~(1 << TXINI)); \
UEINTX = (Temp & ~(1 << FIFOCON)); }MACROE
#else
#define Endpoint_ClearIN() MACROS{ UEINTX &= ~(1 << TXINI); }MACROE
#endif
#if !defined(CONTROL_ONLY_DEVICE)
#define Endpoint_ClearOUT() MACROS{ uint8_t Temp = UEINTX; UEINTX = (Temp & ~(1 << RXOUTI)); \
UEINTX = (Temp & ~(1 << FIFOCON)); }MACROE
#else
#define Endpoint_ClearOUT() MACROS{ UEINTX &= ~(1 << RXOUTI); }MACROE
#endif
#define Endpoint_StallTransaction() MACROS{ UECONX |= (1 << STALLRQ); }MACROE
#define Endpoint_ClearStall() MACROS{ UECONX |= (1 << STALLRQC); }MACROE
#define Endpoint_IsStalled() ((UECONX & (1 << STALLRQ)) ? true : false)
#define Endpoint_ResetDataToggle() MACROS{ UECONX |= (1 << RSTDT); }MACROE
#define Endpoint_GetEndpointDirection() (UECFG0X & ENDPOINT_DIR_IN)
#define Endpoint_SetEndpointDirection(dir) MACROS{ UECFG0X = ((UECFG0X & ~ENDPOINT_DIR_IN) | (dir)); }MACROE
#endif
/* Enums: */
@ -518,11 +486,7 @@
static inline uint8_t Endpoint_Read_Byte(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;
static inline uint8_t Endpoint_Read_Byte(void)
{
#if defined(__AVR32__)
return __AVR32_EPREG_X(UEDAT0);
#elif defined(__AVR__)
return UEDATX;
#endif
}
/** Writes one byte from the currently selected endpoint's bank, for IN direction endpoints.
@ -534,11 +498,7 @@
static inline void Endpoint_Write_Byte(const uint8_t Byte) ATTR_ALWAYS_INLINE;
static inline void Endpoint_Write_Byte(const uint8_t Byte)
{
#if defined(__AVR32__)
__AVR32_EPREG_X(UEDAT0) = Byte;
#elif defined(__AVR__)
UEDATX = Byte;
#endif
}
/** Discards one byte from the currently selected endpoint's bank, for OUT direction endpoints.
@ -550,11 +510,7 @@
{
uint8_t Dummy;
#if defined(__AVR32__)
Dummy = __AVR32_EPREG_X(UEDAT0);
#elif defined(__AVR__)
Dummy = UEDATX;
#endif
}
/** Reads two bytes from the currently selected endpoint's bank in little endian format, for OUT
@ -573,13 +529,8 @@
uint8_t Bytes[2];
} Data;
#if defined(__AVR32__)
Data.Bytes[0] = __AVR32_EPREG_X(UEDAT0);
Data.Bytes[1] = __AVR32_EPREG_X(UEDAT0);
#elif defined(__AVR__)
Data.Bytes[0] = UEDATX;
Data.Bytes[1] = UEDATX;
#endif
return Data.Word;
}
@ -600,13 +551,8 @@
uint8_t Bytes[2];
} Data;
#if defined(__AVR32__)
Data.Bytes[1] = __AVR32_EPREG_X(UEDAT0);
Data.Bytes[0] = __AVR32_EPREG_X(UEDAT0);
#elif defined(__AVR__)
Data.Bytes[1] = UEDATX;
Data.Bytes[0] = UEDATX;
#endif
return Data.Word;
}
@ -621,13 +567,8 @@
static inline void Endpoint_Write_Word_LE(const uint16_t Word) ATTR_ALWAYS_INLINE;
static inline void Endpoint_Write_Word_LE(const uint16_t Word)
{
#if defined(__AVR32__)
__AVR32_EPREG_X(UEDAT0) = (Word & 0xFF);
__AVR32_EPREG_X(UEDAT0) = (Word >> 8);
#elif defined(__AVR__)
UEDATX = (Word & 0xFF);
UEDATX = (Word >> 8);
#endif
}
/** Writes two bytes to the currently selected endpoint's bank in big endian format, for IN
@ -640,13 +581,8 @@
static inline void Endpoint_Write_Word_BE(const uint16_t Word) ATTR_ALWAYS_INLINE;
static inline void Endpoint_Write_Word_BE(const uint16_t Word)
{
#if defined(__AVR32__)
__AVR32_EPREG_X(UEDAT0) = (Word >> 8);
__AVR32_EPREG_X(UEDAT0) = (Word & 0xFF);
#elif defined(__AVR__)
UEDATX = (Word >> 8);
UEDATX = (Word & 0xFF);
#endif
}
/** Discards two bytes from the currently selected endpoint's bank, for OUT direction endpoints.
@ -658,13 +594,8 @@
{
uint8_t Dummy;
#if defined(__AVR32__)
Dummy = __AVR32_EPREG_X(UEDAT0);
Dummy = __AVR32_EPREG_X(UEDAT0);
#elif defined(__AVR__)
Dummy = UEDATX;
Dummy = UEDATX;
#endif
}
/** Reads four bytes from the currently selected endpoint's bank in little endian format, for OUT
@ -683,17 +614,10 @@
uint8_t Bytes[4];
} Data;
#if defined(__AVR32__)
Data.Bytes[0] = __AVR32_EPREG_X(UEDAT0);
Data.Bytes[1] = __AVR32_EPREG_X(UEDAT0);
Data.Bytes[2] = __AVR32_EPREG_X(UEDAT0);
Data.Bytes[3] = __AVR32_EPREG_X(UEDAT0);
#elif defined(__AVR__)
Data.Bytes[0] = UEDATX;
Data.Bytes[1] = UEDATX;
Data.Bytes[2] = UEDATX;
Data.Bytes[3] = UEDATX;
#endif
return Data.DWord;
}
@ -714,17 +638,10 @@
uint8_t Bytes[4];
} Data;
#if defined(__AVR32__)
Data.Bytes[3] = __AVR32_EPREG_X(UEDAT0);
Data.Bytes[2] = __AVR32_EPREG_X(UEDAT0);
Data.Bytes[1] = __AVR32_EPREG_X(UEDAT0);
Data.Bytes[0] = __AVR32_EPREG_X(UEDAT0);
#elif defined(__AVR__)
Data.Bytes[3] = UEDATX;
Data.Bytes[2] = UEDATX;
Data.Bytes[1] = UEDATX;
Data.Bytes[0] = UEDATX;
#endif
return Data.DWord;
}
@ -739,17 +656,10 @@
static inline void Endpoint_Write_DWord_LE(const uint32_t DWord) ATTR_ALWAYS_INLINE;
static inline void Endpoint_Write_DWord_LE(const uint32_t DWord)
{
#if defined(__AVR32__)
__AVR32_EPREG_X(UEDAT0) = (DWord & 0xFF);
__AVR32_EPREG_X(UEDAT0) = (DWord >> 8);
__AVR32_EPREG_X(UEDAT0) = (DWord >> 16);
__AVR32_EPREG_X(UEDAT0) = (DWord >> 24);
#elif defined(__AVR__)
UEDATX = (DWord & 0xFF);
UEDATX = (DWord >> 8);
UEDATX = (DWord >> 16);
UEDATX = (DWord >> 24);
#endif
}
/** Writes four bytes to the currently selected endpoint's bank in big endian format, for IN
@ -762,17 +672,10 @@
static inline void Endpoint_Write_DWord_BE(const uint32_t DWord) ATTR_ALWAYS_INLINE;
static inline void Endpoint_Write_DWord_BE(const uint32_t DWord)
{
#if defined(__AVR32__)
__AVR32_EPREG_X(UEDAT0) = (DWord >> 24);
__AVR32_EPREG_X(UEDAT0) = (DWord >> 16);
__AVR32_EPREG_X(UEDAT0) = (DWord >> 8);
__AVR32_EPREG_X(UEDAT0) = (DWord & 0xFF);
#elif defined(__AVR__)
UEDATX = (DWord >> 24);
UEDATX = (DWord >> 16);
UEDATX = (DWord >> 8);
UEDATX = (DWord & 0xFF);
#endif
}
/** Discards four bytes from the currently selected endpoint's bank, for OUT direction endpoints.
@ -784,17 +687,10 @@
{
uint8_t Dummy;
#if defined(__AVR32__)
Dummy = __AVR32_EPREG_X(UEDAT0);
Dummy = __AVR32_EPREG_X(UEDAT0);
Dummy = __AVR32_EPREG_X(UEDAT0);
Dummy = __AVR32_EPREG_X(UEDAT0);
#elif defined(__AVR__)
Dummy = UEDATX;
Dummy = UEDATX;
Dummy = UEDATX;
Dummy = UEDATX;
#endif
}
/* External Variables: */
@ -838,7 +734,7 @@
* endpoint numbers can handle different maximum packet sizes - refer to the chosen USB AVR's
* datasheet to determine the maximum bank size for each endpoint.
*
* The banking mode must be a ENDPOINT_BANK_* mask.
* The banking mode may be either \ref ENDPOINT_BANK_SINGLE or \ref ENDPOINT_BANK_DOUBLE.
*
* \note The default control endpoint does not have to be manually configured, as it is automatically
* configured by the library internally.
@ -848,8 +744,8 @@
*
* \return Boolean true if the configuration succeeded, false otherwise
*/
bool Endpoint_ConfigureEndpoint(const uintN_t Number, const uintN_t Type, const uintN_t Direction,
const uint16_t Size, const uintN_t Banks);
bool Endpoint_ConfigureEndpoint(const uint8_t Number, const uint8_t Type, const uint8_t Direction,
const uint16_t Size, const uint8_t Banks);
/** Spin-loops until the currently selected non-control endpoint is ready for the next packet of data
* to be read or written to it.
@ -921,8 +817,6 @@
* \param[in] Length Number of bytes to read for the currently selected endpoint into the buffer.
* \param[in] Callback Name of a callback routine to call between successive USB packet transfers, NULL if no callback
*
* \note Not available on AVR32 UC3B targets.
*
* \return A value from the \ref Endpoint_Stream_RW_ErrorCodes_t enum.
*/
uint8_t Endpoint_Write_EStream_LE(const void* Buffer, uint16_t Length __CALLBACK_PARAM) ATTR_NON_NULL_PTR_ARG(1);
@ -972,8 +866,6 @@
* \param[in] Length Number of bytes to read for the currently selected endpoint into the buffer.
* \param[in] Callback Name of a callback routine to call between successive USB packet transfers, NULL if no callback
*
* \note Not available on AVR32 UC3B targets.
*
* \return A value from the \ref Endpoint_Stream_RW_ErrorCodes_t enum.
*/
uint8_t Endpoint_Write_EStream_BE(const void* Buffer, uint16_t Length __CALLBACK_PARAM) ATTR_NON_NULL_PTR_ARG(1);
@ -1023,8 +915,6 @@
* \param[in] Length Number of bytes to send via the currently selected endpoint.
* \param[in] Callback Name of a callback routine to call between successive USB packet transfers, NULL if no callback
*
* \note Not available on AVR32 UC3B targets.
*
* \return A value from the \ref Endpoint_Stream_RW_ErrorCodes_t enum.
*/
uint8_t Endpoint_Read_EStream_LE(void* Buffer, uint16_t Length __CALLBACK_PARAM) ATTR_NON_NULL_PTR_ARG(1);
@ -1060,8 +950,6 @@
* \param[in] Length Number of bytes to send via the currently selected endpoint.
* \param[in] Callback Name of a callback routine to call between successive USB packet transfers, NULL if no callback
*
* \note Not available on AVR32 UC3B targets.
*
* \return A value from the \ref Endpoint_Stream_RW_ErrorCodes_t enum.
*/
uint8_t Endpoint_Read_EStream_BE(void* Buffer, uint16_t Length __CALLBACK_PARAM) ATTR_NON_NULL_PTR_ARG(1);
@ -1103,8 +991,6 @@
* \param[in] Buffer Pointer to the source data buffer to read from.
* \param[in] Length Number of bytes to read for the currently selected endpoint into the buffer.
*
* \note Not available on AVR32 UC3B targets.
*
* \return A value from the \ref Endpoint_ControlStream_RW_ErrorCodes_t enum.
*/
uint8_t Endpoint_Write_Control_EStream_LE(const void* Buffer, uint16_t Length) ATTR_NON_NULL_PTR_ARG(1);
@ -1167,8 +1053,6 @@
* \param[in] Buffer Pointer to the source data buffer to read from.
* \param[in] Length Number of bytes to read for the currently selected endpoint into the buffer.
*
* \note Not available on AVR32 UC3B targets.
*
* \return A value from the \ref Endpoint_ControlStream_RW_ErrorCodes_t enum.
*/
uint8_t Endpoint_Write_Control_EStream_BE(const void* Buffer, uint16_t Length) ATTR_NON_NULL_PTR_ARG(1);
@ -1231,8 +1115,6 @@
* \param[out] Buffer Pointer to the destination data buffer to write to.
* \param[in] Length Number of bytes to send via the currently selected endpoint.
*
* \note Not available on AVR32 UC3B targets.
*
* \return A value from the \ref Endpoint_ControlStream_RW_ErrorCodes_t enum.
*/
uint8_t Endpoint_Read_Control_EStream_LE(void* Buffer, uint16_t Length) ATTR_NON_NULL_PTR_ARG(1);
@ -1274,8 +1156,6 @@
* \param[out] Buffer Pointer to the destination data buffer to write to.
* \param[in] Length Number of bytes to send via the currently selected endpoint.
*
* \note Not available on AVR32 UC3B targets.
*
* \return A value from the \ref Endpoint_ControlStream_RW_ErrorCodes_t enum.
*/
uint8_t Endpoint_Read_Control_EStream_BE(void* Buffer, uint16_t Length) ATTR_NON_NULL_PTR_ARG(1);
@ -1283,29 +1163,8 @@
/* Private Interface - For use in library only: */
#if !defined(__DOXYGEN__)
/* Macros: */
#if defined(__AVR32__)
#define Endpoint_AllocateMemory() MACROS{ __AVR32_EPREG_X(UECFG10) |= AVR32_USBB_UECFG0_ALLOC_MASK; }MACROE
#define Endpoint_DeallocateMemory() MACROS{ __AVR32_EPREG_X(UECFG10) &= ~AVR32_USBB_UECFG0_ALLOC_MASK; }MACROE
#define Endpoint_ConfigureEndpoint(Number, Type, Direction, Size, Banks) \
Endpoint_ConfigureEndpoint_Prv((Number), \
(((Type) << AVR32_USBB_UECFG0_EPTYPE) | (Direction)), \
(AVR32_USBB_UECFG0_ALLOC_MASK | (Banks) | \
(__builtin_constant_p(Size) ? \
Endpoint_BytesToEPSizeMask(Size) : \
Endpoint_BytesToEPSizeMaskDynamic(Size))))
#elif defined(__AVR__)
#define Endpoint_AllocateMemory() MACROS{ UECFG1X |= (1 << ALLOC); }MACROE
#define Endpoint_DeallocateMemory() MACROS{ UECFG1X &= ~(1 << ALLOC); }MACROE
#define Endpoint_ConfigureEndpoint(Number, Type, Direction, Size, Banks) \
Endpoint_ConfigureEndpoint_Prv((Number), \
(((Type) << EPTYPE0) | (Direction)), \
((1 << ALLOC) | (Banks) | \
(__builtin_constant_p(Size) ? \
Endpoint_BytesToEPSizeMask(Size) : \
Endpoint_BytesToEPSizeMaskDynamic(Size))))
#endif
#define Endpoint_AllocateMemory() MACROS{ UECFG1X |= (1 << ALLOC); }MACROE
#define Endpoint_DeallocateMemory() MACROS{ UECFG1X &= ~(1 << ALLOC); }MACROE
#define _ENDPOINT_GET_MAXSIZE(n) _ENDPOINT_GET_MAXSIZE2(ENDPOINT_DETAILS_EP ## n)
#define _ENDPOINT_GET_MAXSIZE2(details) _ENDPOINT_GET_MAXSIZE3(details)
@ -1323,15 +1182,7 @@
#define ENDPOINT_DETAILS_EP4 64, true
#define ENDPOINT_DETAILS_EP5 64, true
#define ENDPOINT_DETAILS_EP6 64, true
#elif defined(USB_SERIES_UC3B_AVR)
#define ENDPOINT_DETAILS_EP0 64, false
#define ENDPOINT_DETAILS_EP1 64, true
#define ENDPOINT_DETAILS_EP2 64, true
#define ENDPOINT_DETAILS_EP3 64, true
#define ENDPOINT_DETAILS_EP4 64, true
#define ENDPOINT_DETAILS_EP5 256, true
#define ENDPOINT_DETAILS_EP6 256, true
#elif defined(USB_SERIES_2_AVR)
#else
#define ENDPOINT_DETAILS_EP0 64, true
#define ENDPOINT_DETAILS_EP1 64, false
#define ENDPOINT_DETAILS_EP2 64, false
@ -1339,27 +1190,23 @@
#define ENDPOINT_DETAILS_EP4 64, true
#endif
#define Endpoint_ConfigureEndpoint(Number, Type, Direction, Size, Banks) \
Endpoint_ConfigureEndpoint_Prv((Number), \
(((Type) << EPTYPE0) | (Direction)), \
((1 << ALLOC) | (Banks) | \
(__builtin_constant_p(Size) ? \
Endpoint_BytesToEPSizeMask(Size) : \
Endpoint_BytesToEPSizeMaskDynamic(Size))))
/* Function Prototypes: */
void Endpoint_ClearEndpoints(void);
uintN_t Endpoint_BytesToEPSizeMaskDynamic(const uint16_t Size);
bool Endpoint_ConfigureEndpoint_Prv(const uintN_t Number, const uintN_t UECFG0XData, const uintN_t UECFG1XData);
uint8_t Endpoint_BytesToEPSizeMaskDynamic(const uint16_t Size);
bool Endpoint_ConfigureEndpoint_Prv(const uint8_t Number, const uint8_t UECFG0XData, const uint8_t UECFG1XData);
/* Inline Functions: */
static inline uintN_t Endpoint_BytesToEPSizeMask(const uint16_t Bytes) ATTR_WARN_UNUSED_RESULT ATTR_CONST ATTR_ALWAYS_INLINE;
static inline uintN_t Endpoint_BytesToEPSizeMask(const uint16_t Bytes)
static inline uint8_t Endpoint_BytesToEPSizeMask(const uint16_t Bytes) ATTR_WARN_UNUSED_RESULT ATTR_CONST ATTR_ALWAYS_INLINE;
static inline uint8_t Endpoint_BytesToEPSizeMask(const uint16_t Bytes)
{
#if defined(__AVR32__)
uint8_t MaskVal = 0;
uint16_t CheckBytes = 8;
while (CheckBytes < Bytes)
{
MaskVal++;
CheckBytes <<= 1;
}
return (MaskVal << AVR32_USBB_EPSIZE);
#else
uint8_t MaskVal = 0;
uint16_t CheckBytes = 8;
@ -1370,7 +1217,6 @@
}
return (MaskVal << EPSIZE0);
#endif
}
#endif

@ -41,16 +41,10 @@
#define __USBHOST_H__
/* Includes: */
#if defined(__AVR32__)
#include <avr32/io.h>
#include <stdint.h>
#include <stdbool.h>
#elif defined(__AVR__)
#include <avr/io.h>
#include <stdbool.h>
#include <util/delay.h>
#endif
#include <avr/io.h>
#include <stdbool.h>
#include <util/delay.h>
#include "../../../Common/Common.h"
#include "../HighLevel/USBInterrupt.h"
#include "../HighLevel/StdDescriptors.h"
@ -63,7 +57,7 @@
/* Preprocessor Checks: */
#if !defined(__INCLUDE_FROM_USB_DRIVER)
#error Do not include this file directly. Include LUFA/Drivers/USB/USB.h instead.
#error Do not include this file directly. Include LUFA/Drivers/USB.h instead.
#endif
/* Public Interface - May be used in end-application: */
@ -165,29 +159,25 @@
*/
static inline bool USB_Host_IsResumeFromWakeupRequestSent(void);
#else
#if defined(__AVR32__)
#define USB_Host_ResetBus() MACROS{ AVR32_USBB.UHCON.reset = true; }MACROE
#define USB_Host_IsBusResetComplete() AVR32_USBB.UHCON.reset
#define USB_Host_ResumeBus() MACROS{ AVR32_USBB.UHCON.sofen = true; }MACROE
#define USB_Host_SuspendBus() MACROS{ AVR32_USBB.UHCON.sofen = false; }MACROE
#define USB_Host_IsBusSuspended() AVR32_USBB.UHCON.sofen
#define USB_Host_IsDeviceFullSpeed() (AVR32_USBB.USBSTA.speed == 0)
#define USB_Host_IsRemoteWakeupSent() AVR32_USBB.UHINT.rxrsmi
#define USB_Host_ClearRemoteWakeupSent() MACROS{ AVR32_USBB.UHINTCLR.rxrsmic = true; }MACROE
#define USB_Host_ResumeFromWakeupRequest() MACROS{ AVR32_USBB.UHCON.resume = true; }MACROE
#define USB_Host_IsResumeFromWakeupRequestSent() AVR32_USBB.UHCON.resume
#elif defined(__AVR__)
#define USB_Host_ResetBus() MACROS{ UHCON |= (1 << RESET); }MACROE
#define USB_Host_IsBusResetComplete() ((UHCON & (1 << RESET)) ? false : true)
#define USB_Host_ResumeBus() MACROS{ UHCON |= (1 << SOFEN); }MACROE
#define USB_Host_SuspendBus() MACROS{ UHCON &= ~(1 << SOFEN); }MACROE
#define USB_Host_IsBusSuspended() ((UHCON & (1 << SOFEN)) ? false : true)
#define USB_Host_IsDeviceFullSpeed() ((USBSTA & (1 << SPEED)) ? true : false)
#define USB_Host_IsRemoteWakeupSent() ((UHINT & (1 << RXRSMI)) ? true : false)
#define USB_Host_ClearRemoteWakeupSent() MACROS{ UHINT &= ~(1 << RXRSMI); }MACROE
#define USB_Host_ResumeFromWakeupRequest() MACROS{ UHCON |= (1 << RESUME); }MACROE
#define USB_Host_IsResumeFromWakeupRequestSent() ((UHCON & (1 << RESUME)) ? false : true)
#endif
#define USB_Host_ResetBus() MACROS{ UHCON |= (1 << RESET); }MACROE
#define USB_Host_IsBusResetComplete() ((UHCON & (1 << RESET)) ? false : true)
#define USB_Host_ResumeBus() MACROS{ UHCON |= (1 << SOFEN); }MACROE
#define USB_Host_SuspendBus() MACROS{ UHCON &= ~(1 << SOFEN); }MACROE
#define USB_Host_IsBusSuspended() ((UHCON & (1 << SOFEN)) ? false : true)
#define USB_Host_IsDeviceFullSpeed() ((USBSTA & (1 << SPEED)) ? true : false)
#define USB_Host_IsRemoteWakeupSent() ((UHINT & (1 << RXRSMI)) ? true : false)
#define USB_Host_ClearRemoteWakeupSent() MACROS{ UHINT &= ~(1 << RXRSMI); }MACROE
#define USB_Host_ResumeFromWakeupRequest() MACROS{ UHCON |= (1 << RESUME); }MACROE
#define USB_Host_IsResumeFromWakeupRequestSent() ((UHCON & (1 << RESUME)) ? false : true)
#endif
/* Function Prototypes: */
@ -385,36 +375,20 @@
/* Private Interface - For use in library only: */
#if !defined(__DOXYGEN__)
/* Macros: */
#if defined(__AVR32__)
#define USB_Host_HostMode_On() MACROS{ AVR32_USBB.USBCON.uimod = false; }MACROE
#define USB_Host_HostMode_Off() MACROS{ AVR32_USBB.USBCON.uimod = true; }MACROE
#define USB_Host_VBUS_Auto_Enable() MACROS{ OTGCON &= ~(1 << VBUSHWC); UHWCON |= (1 << UVCONE); }MACROE
#define USB_Host_VBUS_Manual_Enable() MACROS{ OTGCON |= (1 << VBUSHWC); UHWCON &= ~(1 << UVCONE); DDRE |= (1 << 7); }MACROE
#define USB_Host_HostMode_On() MACROS{ USBCON |= (1 << HOST); }MACROE
#define USB_Host_HostMode_Off() MACROS{ USBCON &= ~(1 << HOST); }MACROE
#define USB_Host_VBUS_Auto_On() MACROS{ OTGCON |= (1 << VBUSREQ); }MACROE
#define USB_Host_VBUS_Manual_On() MACROS{ PORTE |= (1 << 7); }MACROE
#define USB_Host_VBUS_Auto_Enable() MACROS{ OTGCON &= ~(1 << VBUSHWC); UHWCON |= (1 << UVCONE); }MACROE
#define USB_Host_VBUS_Manual_Enable() MACROS{ OTGCON |= (1 << VBUSHWC); UHWCON &= ~(1 << UVCONE); DDRE |= (1 << 7); }MACROE
#define USB_Host_VBUS_Auto_Off() MACROS{ OTGCON |= (1 << VBUSRQC); }MACROE
#define USB_Host_VBUS_Manual_Off() MACROS{ PORTE &= ~(1 << 7); }MACROE
#define USB_Host_VBUS_Auto_On() MACROS{ OTGCON |= (1 << VBUSREQ); }MACROE
#define USB_Host_VBUS_Manual_On() MACROS{ PORTE |= (1 << 7); }MACROE
#define USB_Host_SetDeviceAddress(addr) MACROS{ UHADDR = ((addr) & 0x7F); }MACROE
#elif defined(__AVR__)
#define USB_Host_HostMode_On() MACROS{ USBCON |= (1 << HOST); }MACROE
#define USB_Host_HostMode_Off() MACROS{ USBCON &= ~(1 << HOST); }MACROE
#define USB_Host_VBUS_Auto_Off() MACROS{ OTGCON |= (1 << VBUSRQC); }MACROE
#define USB_Host_VBUS_Manual_Off() MACROS{ PORTE &= ~(1 << 7); }MACROE
#define USB_Host_VBUS_Auto_Enable() MACROS{ OTGCON &= ~(1 << VBUSHWC); UHWCON |= (1 << UVCONE); }MACROE
#define USB_Host_VBUS_Manual_Enable() MACROS{ OTGCON |= (1 << VBUSHWC); UHWCON &= ~(1 << UVCONE); DDRE |= (1 << 7); }MACROE
#define USB_Host_SetDeviceAddress(addr) MACROS{ UHADDR = ((addr) & 0x7F); }MACROE
#define USB_Host_VBUS_Auto_On() MACROS{ OTGCON |= (1 << VBUSREQ); }MACROE
#define USB_Host_VBUS_Manual_On() MACROS{ PORTE |= (1 << 7); }MACROE
#define USB_Host_VBUS_Auto_Off() MACROS{ OTGCON |= (1 << VBUSRQC); }MACROE
#define USB_Host_VBUS_Manual_Off() MACROS{ PORTE &= ~(1 << 7); }MACROE
#define USB_Host_SetDeviceAddress(addr) MACROS{ UHADDR = ((addr) & 0x7F); }MACROE
#endif
/* Enums: */
enum USB_Host_WaitMSErrorCodes_t
{

@ -32,14 +32,8 @@
#define __HOSTCHAPTER9_H__
/* Includes: */
#if defined(__AVR32__)
#include <avr32/io.h>
#include <stdint.h>
#include <stdbool.h>
#elif defined(__AVR__)
#include <avr/io.h>
#include <stdbool.h>
#endif
#include <avr/io.h>
#include <stdbool.h>
#include "LowLevel.h"
#include "../HighLevel/USBMode.h"
@ -52,7 +46,7 @@
/* Preprocessor Checks: */
#if !defined(__INCLUDE_FROM_USB_DRIVER)
#error Do not include this file directly. Include LUFA/Drivers/USB/USB.h instead.
#error Do not include this file directly. Include LUFA/Drivers/USB.h instead.
#endif
/* Public Interface - May be used in end-application: */

@ -39,10 +39,6 @@ volatile uint8_t USB_CurrentMode = USB_MODE_NONE;
volatile uint8_t USB_Options;
#endif
#if defined(__AVR32__) && !defined(CONTROL_ONLY_DEVICE)
uint8_t USB_SelectedEPNumber;
#endif
void USB_Init(
#if defined(USB_CAN_BE_BOTH)
const uint8_t Mode
@ -59,10 +55,6 @@ void USB_Init(
#endif
)
{
#if defined(__AVR32__)
USB_SelectedEPNumber = 0;
#endif
#if defined(USB_CAN_BE_BOTH)
USB_CurrentMode = Mode;
#endif

@ -39,26 +39,11 @@
#ifndef __USBLOWLEVEL_H__
#define __USBLOWLEVEL_H__
/* External Variables: */
#if defined(__AVR32__)
#if !defined(CONTROL_ONLY_DEVICE)
extern uint8_t USB_SelectedEPNumber;
#else
#define USB_SelectedEPNumber 0
#endif
#endif
/* Includes: */
#if defined(__AVR32__)
#include <avr32/io.h>
#include <stdint.h>
#include <stdbool.h>
#elif defined(__AVR__)
#include <avr/io.h>
#include <avr/interrupt.h>
#include <stdbool.h>
#endif
#include <avr/io.h>
#include <avr/interrupt.h>
#include <stdbool.h>
#include "../HighLevel/USBMode.h"
#include "../../../Common/Common.h"
@ -86,47 +71,43 @@
/* Preprocessor Checks and Defines: */
#if !defined(__INCLUDE_FROM_USB_DRIVER)
#error Do not include this file directly. Include LUFA/Drivers/USB/USB.h instead.
#error Do not include this file directly. Include LUFA/Drivers/USB.h instead.
#endif
#if defined(__AVR32__)
#define USB_PLL_PSC 0
#elif defined(__AVR__)
#if !defined(F_CLOCK)
#error F_CLOCK is not defined. You must define F_CLOCK to the frequency of the unprescaled input clock in your project makefile.
#endif
#if (F_CLOCK == 8000000)
#if (defined(__AVR_AT90USB82__) || defined(__AVR_AT90USB162__) || \
defined(__AVR_ATmega8U2__) || defined(__AVR_ATmega16U2__) || \
defined(__AVR_ATmega32U2__))
#define USB_PLL_PSC 0
#elif (defined(__AVR_ATmega16U4__) || defined(__AVR_ATmega32U4__))
#define USB_PLL_PSC 0
#elif (defined(__AVR_AT90USB646__) || defined(__AVR_AT90USB1286__) || defined(__AVR_ATmega32U6__))
#define USB_PLL_PSC ((1 << PLLP1) | (1 << PLLP0))
#elif (defined(__AVR_AT90USB647__) || defined(__AVR_AT90USB1287__))
#define USB_PLL_PSC ((1 << PLLP1) | (1 << PLLP0))
#endif
#elif (F_CLOCK == 16000000)
#if (defined(__AVR_AT90USB82__) || defined(__AVR_AT90USB162__) || \
defined(__AVR_ATmega8U2__) || defined(__AVR_ATmega16U2__) || \
defined(__AVR_ATmega32U2__))
#define USB_PLL_PSC (1 << PLLP0)
#elif (defined(__AVR_ATmega16U4__) || defined(__AVR_ATmega32U4__))
#define USB_PLL_PSC (1 << PINDIV)
#elif (defined(__AVR_AT90USB646__) || defined(__AVR_AT90USB647__) || defined(__AVR_ATmega32U6__))
#define USB_PLL_PSC ((1 << PLLP2) | (1 << PLLP1))
#elif (defined(__AVR_AT90USB1286__) || defined(__AVR_AT90USB1287__))
#define USB_PLL_PSC ((1 << PLLP2) | (1 << PLLP0))
#endif
#if !defined(F_CLOCK)
#error F_CLOCK is not defined. You must define F_CLOCK to the frequency of the unprescaled input clock in your project makefile.
#endif
#if (F_CLOCK == 8000000)
#if (defined(__AVR_AT90USB82__) || defined(__AVR_AT90USB162__) || \
defined(__AVR_ATmega8U2__) || defined(__AVR_ATmega16U2__) || \
defined(__AVR_ATmega32U2__))
#define USB_PLL_PSC 0
#elif (defined(__AVR_ATmega16U4__) || defined(__AVR_ATmega32U4__))
#define USB_PLL_PSC 0
#elif (defined(__AVR_AT90USB646__) || defined(__AVR_AT90USB1286__) || defined(__AVR_ATmega32U6__))
#define USB_PLL_PSC ((1 << PLLP1) | (1 << PLLP0))
#elif (defined(__AVR_AT90USB647__) || defined(__AVR_AT90USB1287__))
#define USB_PLL_PSC ((1 << PLLP1) | (1 << PLLP0))
#endif
#if !defined(USB_PLL_PSC)
#error No PLL prescale value available for chosen F_CLOCK value and AVR model.
#elif (F_CLOCK == 16000000)
#if (defined(__AVR_AT90USB82__) || defined(__AVR_AT90USB162__) || \
defined(__AVR_ATmega8U2__) || defined(__AVR_ATmega16U2__) || \
defined(__AVR_ATmega32U2__))
#define USB_PLL_PSC (1 << PLLP0)
#elif (defined(__AVR_ATmega16U4__) || defined(__AVR_ATmega32U4__))
#define USB_PLL_PSC (1 << PINDIV)
#elif (defined(__AVR_AT90USB646__) || defined(__AVR_AT90USB647__) || defined(__AVR_ATmega32U6__))
#define USB_PLL_PSC ((1 << PLLP2) | (1 << PLLP1))
#elif (defined(__AVR_AT90USB1286__) || defined(__AVR_AT90USB1287__))
#define USB_PLL_PSC ((1 << PLLP2) | (1 << PLLP0))
#endif
#endif
#if !defined(USB_PLL_PSC)
#error No PLL prescale value available for chosen F_CPU value and AVR model.
#endif
/* Public Interface - May be used in end-application: */
/* Macros: */
/** Mode mask for the \ref USB_CurrentMode global. This indicates that the USB interface is currently not
@ -151,7 +132,7 @@
*
* \note This token is not available on AVR models which do not support both host and device modes.
*/
#define USB_MODE_UID 3
#define USB_MODE_UID 3
#endif
/** Regulator disable option mask for \ref USB_Init(). This indicates that the internal 3.3V USB data pad
@ -210,7 +191,7 @@
*
* \note This token is not available on some AVR models which do not support hardware VBUS monitoring.
*/
#define USB_VBUS_GetStatus() ((USBSTA & (1 << VBUS)) ? true : false)
#define USB_VBUS_GetStatus() ((USBSTA & (1 << VBUS)) ? true : false)
#endif
/** Detaches the device from the USB bus. This has the effect of removing the device from any
@ -367,22 +348,16 @@
#define USB_Controller_Disable() MACROS{ USBCON &= ~(1 << USBE); }MACROE
#define USB_Controller_Reset() MACROS{ const uint8_t Temp = USBCON; USBCON = (Temp & ~(1 << USBE)); \
USBCON = (Temp | (1 << USBE)); }MACROE
/* Inline Functions: */
#if defined(USB_CAN_BE_BOTH)
static inline uint8_t USB_GetUSBModeFromUID(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;
static inline uint8_t USB_GetUSBModeFromUID(void)
{
#if defined(__AVR32__)
if (AVR32_USBB.USBSTA.id)
return USB_MODE_DEVICE;
else
return USB_MODE_HOST;
#elif defined(__AVR__)
if (USBSTA & (1 << ID))
return USB_MODE_DEVICE;
else
return USB_MODE_HOST;
#endif
}
#endif

@ -42,20 +42,14 @@
#define __USBOTG_H__
/* Includes: */
#if defined(__AVR32__)
#include <avr32/io.h>
#include <stdint.h>
#include <stdbool.h>
#elif defined(__AVR__)
#include <avr/io.h>
#include <stdbool.h>
#endif
#include <avr/io.h>
#include <stdbool.h>
#include "../../../Common/Common.h"
/* Preprocessor Checks: */
#if !defined(__INCLUDE_FROM_USB_DRIVER)
#error Do not include this file directly. Include LUFA/Drivers/USB/USB.h instead.
#error Do not include this file directly. Include LUFA/Drivers/USB.h instead.
#endif
/* Public Interface - May be used in end-application: */

@ -226,15 +226,13 @@ uint8_t Pipe_Discard_Stream(uint16_t Length
#define TEMPLATE_TRANSFER_BYTE(BufferPtr) Pipe_Write_Byte(pgm_read_byte((uint8_t*)BufferPtr++))
#include "Template/Template_Pipe_RW.c"
#if defined(__AVR__)
#define TEMPLATE_FUNC_NAME Pipe_Write_EStream_LE
#define TEMPLATE_BUFFER_TYPE const void*
#define TEMPLATE_TOKEN PIPE_TOKEN_OUT
#define TEMPLATE_CLEAR_PIPE() Pipe_ClearOUT()
#define TEMPLATE_BUFFER_OFFSET(Length) 0
#define TEMPLATE_TRANSFER_BYTE(BufferPtr) Pipe_Write_Byte(eeprom_read_byte((uint8_t*)BufferPtr++))
#include "Template/Template_Pipe_RW.c"
#endif
#define TEMPLATE_FUNC_NAME Pipe_Write_EStream_LE
#define TEMPLATE_BUFFER_TYPE const void*
#define TEMPLATE_TOKEN PIPE_TOKEN_OUT
#define TEMPLATE_CLEAR_PIPE() Pipe_ClearOUT()
#define TEMPLATE_BUFFER_OFFSET(Length) 0
#define TEMPLATE_TRANSFER_BYTE(BufferPtr) Pipe_Write_Byte(eeprom_read_byte((uint8_t*)BufferPtr++))
#include "Template/Template_Pipe_RW.c"
#define TEMPLATE_FUNC_NAME Pipe_Write_Stream_BE
#define TEMPLATE_BUFFER_TYPE const void*
@ -252,15 +250,13 @@ uint8_t Pipe_Discard_Stream(uint16_t Length
#define TEMPLATE_TRANSFER_BYTE(BufferPtr) Pipe_Write_Byte(pgm_read_byte((uint8_t*)BufferPtr--))
#include "Template/Template_Pipe_RW.c"
#if defined(__AVR__)
#define TEMPLATE_FUNC_NAME Pipe_Write_EStream_BE
#define TEMPLATE_BUFFER_TYPE const void*
#define TEMPLATE_TOKEN PIPE_TOKEN_OUT
#define TEMPLATE_CLEAR_PIPE() Pipe_ClearOUT()
#define TEMPLATE_BUFFER_OFFSET(Length) (Length - 1)
#define TEMPLATE_TRANSFER_BYTE(BufferPtr) Pipe_Write_Byte(eeprom_read_byte((uint8_t*)BufferPtr--))
#include "Template/Template_Pipe_RW.c"
#endif
#define TEMPLATE_FUNC_NAME Pipe_Write_EStream_BE
#define TEMPLATE_BUFFER_TYPE const void*
#define TEMPLATE_TOKEN PIPE_TOKEN_OUT
#define TEMPLATE_CLEAR_PIPE() Pipe_ClearOUT()
#define TEMPLATE_BUFFER_OFFSET(Length) (Length - 1)
#define TEMPLATE_TRANSFER_BYTE(BufferPtr) Pipe_Write_Byte(eeprom_read_byte((uint8_t*)BufferPtr--))
#include "Template/Template_Pipe_RW.c"
#define TEMPLATE_FUNC_NAME Pipe_Read_Stream_LE
#define TEMPLATE_BUFFER_TYPE void*
@ -270,15 +266,13 @@ uint8_t Pipe_Discard_Stream(uint16_t Length
#define TEMPLATE_TRANSFER_BYTE(BufferPtr) *((uint8_t*)BufferPtr++) = Pipe_Read_Byte()
#include "Template/Template_Pipe_RW.c"
#if defined(__AVR__)
#define TEMPLATE_FUNC_NAME Pipe_Read_EStream_LE
#define TEMPLATE_BUFFER_TYPE void*
#define TEMPLATE_TOKEN PIPE_TOKEN_IN
#define TEMPLATE_CLEAR_PIPE() Pipe_ClearIN()
#define TEMPLATE_BUFFER_OFFSET(Length) 0
#define TEMPLATE_TRANSFER_BYTE(BufferPtr) eeprom_write_byte((uint8_t*)BufferPtr++, Pipe_Read_Byte())
#include "Template/Template_Pipe_RW.c"
#endif
#define TEMPLATE_FUNC_NAME Pipe_Read_EStream_LE
#define TEMPLATE_BUFFER_TYPE void*
#define TEMPLATE_TOKEN PIPE_TOKEN_IN
#define TEMPLATE_CLEAR_PIPE() Pipe_ClearIN()
#define TEMPLATE_BUFFER_OFFSET(Length) 0
#define TEMPLATE_TRANSFER_BYTE(BufferPtr) eeprom_write_byte((uint8_t*)BufferPtr++, Pipe_Read_Byte())
#include "Template/Template_Pipe_RW.c"
#define TEMPLATE_FUNC_NAME Pipe_Read_Stream_BE
#define TEMPLATE_BUFFER_TYPE void*
@ -288,14 +282,12 @@ uint8_t Pipe_Discard_Stream(uint16_t Length
#define TEMPLATE_TRANSFER_BYTE(BufferPtr) *((uint8_t*)BufferPtr--) = Pipe_Read_Byte()
#include "Template/Template_Pipe_RW.c"
#if defined(__AVR__)
#define TEMPLATE_FUNC_NAME Pipe_Read_EStream_BE
#define TEMPLATE_BUFFER_TYPE void*
#define TEMPLATE_TOKEN PIPE_TOKEN_IN
#define TEMPLATE_CLEAR_PIPE() Pipe_ClearIN()
#define TEMPLATE_BUFFER_OFFSET(Length) (Length - 1)
#define TEMPLATE_TRANSFER_BYTE(BufferPtr) eeprom_write_byte((uint8_t*)BufferPtr--, Pipe_Read_Byte())
#include "Template/Template_Pipe_RW.c"
#endif
#define TEMPLATE_FUNC_NAME Pipe_Read_EStream_BE
#define TEMPLATE_BUFFER_TYPE void*
#define TEMPLATE_TOKEN PIPE_TOKEN_IN
#define TEMPLATE_CLEAR_PIPE() Pipe_ClearIN()
#define TEMPLATE_BUFFER_OFFSET(Length) (Length - 1)
#define TEMPLATE_TRANSFER_BYTE(BufferPtr) eeprom_write_byte((uint8_t*)BufferPtr--, Pipe_Read_Byte())
#include "Template/Template_Pipe_RW.c"
#endif

@ -74,19 +74,12 @@
#define __PIPE_H__
/* Includes: */
#if defined(__AVR32__)
#include <avr32/io.h>
#include <stdint.h>
#include <stdbool.h>
#elif defined(__AVR__)
#include <avr/io.h>
#include <avr/pgmspace.h>
#include <avr/eeprom.h>
#include <stdbool.h>
#endif
#include <avr/io.h>
#include <avr/pgmspace.h>
#include <avr/eeprom.h>
#include <stdbool.h>
#include "../../../Common/Common.h"
#include "LowLevel.h"
#include "../HighLevel/USBTask.h"
#if !defined(NO_STREAM_CALLBACKS) || defined(__DOXYGEN__)
@ -100,13 +93,9 @@
/* Preprocessor Checks: */
#if !defined(__INCLUDE_FROM_USB_DRIVER)
#error Do not include this file directly. Include LUFA/Drivers/USB/USB.h instead.
#error Do not include this file directly. Include LUFA/Drivers/USB.h instead.
#endif
#if defined(__AVR32__) && !defined(__AVR32_EPREG_X)
#define __AVR32_EPREG_X(x) ((volatile uint32_t*)AVR32_USBB_ ## x)[USB_SelectedEPNumber]
#endif
/* Public Interface - May be used in end-application: */
/* Macros: */
/** Mask for \ref Pipe_GetErrorFlags(), indicating that an overflow error occurred in the pipe on the received data. */
@ -558,11 +547,7 @@
static inline uint8_t Pipe_Read_Byte(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;
static inline uint8_t Pipe_Read_Byte(void)
{
#if defined(__AVR32__)
return __AVR32_EPREG_X(UEDAT0);
#elif defined(__AVR__)
return UPDATX;
#endif
}
/** Writes one byte from the currently selected pipe's bank, for IN direction pipes.
@ -574,11 +559,7 @@
static inline void Pipe_Write_Byte(const uint8_t Byte) ATTR_ALWAYS_INLINE;
static inline void Pipe_Write_Byte(const uint8_t Byte)
{
#if defined(__AVR32__)
__AVR32_EPREG_X(UEDAT0) = Byte;
#elif defined(__AVR__)
UPDATX = Byte;
#endif
}
/** Discards one byte from the currently selected pipe's bank, for OUT direction pipes.
@ -590,11 +571,7 @@
{
uint8_t Dummy;
#if defined(__AVR32__)
Dummy = __AVR32_EPREG_X(UEDAT0);
#elif defined(__AVR__)
Dummy = UPDATX;
#endif
}
/** Reads two bytes from the currently selected pipe's bank in little endian format, for OUT
@ -613,13 +590,8 @@
uint8_t Bytes[2];
} Data;
#if defined(__AVR32__)
Data.Bytes[0] = __AVR32_EPREG_X(UEDAT0);
Data.Bytes[1] = __AVR32_EPREG_X(UEDAT0);
#elif defined(__AVR__)
Data.Bytes[0] = UPDATX;
Data.Bytes[1] = UPDATX;
#endif
return Data.Word;
}
@ -640,13 +612,8 @@
uint8_t Bytes[2];
} Data;
#if defined(__AVR32__)
Data.Bytes[1] = __AVR32_EPREG_X(UEDAT0);
Data.Bytes[0] = __AVR32_EPREG_X(UEDAT0);
#elif defined(__AVR__)
Data.Bytes[1] = UPDATX;
Data.Bytes[0] = UPDATX;
#endif
return Data.Word;
}
@ -661,13 +628,8 @@
static inline void Pipe_Write_Word_LE(const uint16_t Word) ATTR_ALWAYS_INLINE;
static inline void Pipe_Write_Word_LE(const uint16_t Word)
{
#if defined(__AVR32__)
__AVR32_EPREG_X(UEDAT0) = (Word & 0xFF);
__AVR32_EPREG_X(UEDAT0) = (Word >> 8);
#elif defined(__AVR__)
UPDATX = (Word & 0xFF);
UPDATX = (Word >> 8);
#endif
}
/** Writes two bytes to the currently selected pipe's bank in big endian format, for IN
@ -680,13 +642,8 @@
static inline void Pipe_Write_Word_BE(const uint16_t Word) ATTR_ALWAYS_INLINE;
static inline void Pipe_Write_Word_BE(const uint16_t Word)
{
#if defined(__AVR32__)
__AVR32_EPREG_X(UEDAT0) = (Word >> 8);
__AVR32_EPREG_X(UEDAT0) = (Word & 0xFF);
#elif defined(__AVR__)
UPDATX = (Word >> 8);
UPDATX = (Word & 0xFF);
#endif
}
/** Discards two bytes from the currently selected pipe's bank, for OUT direction pipes.
@ -698,13 +655,8 @@
{
uint8_t Dummy;
#if defined(__AVR32__)
Dummy = __AVR32_EPREG_X(UEDAT0);
Dummy = __AVR32_EPREG_X(UEDAT0);
#elif defined(__AVR__)
Dummy = UPDATX;
Dummy = UPDATX;
#endif
}
/** Reads four bytes from the currently selected pipe's bank in little endian format, for OUT
@ -723,17 +675,10 @@
uint8_t Bytes[4];
} Data;
#if defined(__AVR32__)
Data.Bytes[0] = __AVR32_EPREG_X(UEDAT0);
Data.Bytes[1] = __AVR32_EPREG_X(UEDAT0);
Data.Bytes[2] = __AVR32_EPREG_X(UEDAT0);
Data.Bytes[3] = __AVR32_EPREG_X(UEDAT0);
#elif defined(__AVR__)
Data.Bytes[0] = UPDATX;
Data.Bytes[1] = UPDATX;
Data.Bytes[2] = UPDATX;
Data.Bytes[3] = UPDATX;
#endif
return Data.DWord;
}
@ -754,17 +699,10 @@
uint8_t Bytes[4];
} Data;
#if defined(__AVR32__)
Data.Bytes[3] = __AVR32_EPREG_X(UEDAT0);
Data.Bytes[2] = __AVR32_EPREG_X(UEDAT0);
Data.Bytes[1] = __AVR32_EPREG_X(UEDAT0);
Data.Bytes[0] = __AVR32_EPREG_X(UEDAT0);
#elif defined(__AVR__)
Data.Bytes[3] = UPDATX;
Data.Bytes[2] = UPDATX;
Data.Bytes[1] = UPDATX;
Data.Bytes[0] = UPDATX;
#endif
return Data.DWord;
}
@ -779,17 +717,10 @@
static inline void Pipe_Write_DWord_LE(const uint32_t DWord) ATTR_ALWAYS_INLINE;
static inline void Pipe_Write_DWord_LE(const uint32_t DWord)
{
#if defined(__AVR32__)
__AVR32_EPREG_X(UEDAT0) = (DWord & 0xFF);
__AVR32_EPREG_X(UEDAT0) = (DWord >> 8);
__AVR32_EPREG_X(UEDAT0) = (DWord >> 16);
__AVR32_EPREG_X(UEDAT0) = (DWord >> 24);
#elif defined(__AVR__)
UPDATX = (DWord & 0xFF);
UPDATX = (DWord >> 8);
UPDATX = (DWord >> 16);
UPDATX = (DWord >> 24);
#endif
}
/** Writes four bytes to the currently selected pipe's bank in big endian format, for IN
@ -802,17 +733,10 @@
static inline void Pipe_Write_DWord_BE(const uint32_t DWord) ATTR_ALWAYS_INLINE;
static inline void Pipe_Write_DWord_BE(const uint32_t DWord)
{
#if defined(__AVR32__)
__AVR32_EPREG_X(UEDAT0) = (DWord >> 24);
__AVR32_EPREG_X(UEDAT0) = (DWord >> 16);
__AVR32_EPREG_X(UEDAT0) = (DWord >> 8);
__AVR32_EPREG_X(UEDAT0) = (DWord & 0xFF);
#elif defined(__AVR__)
UPDATX = (DWord >> 24);
UPDATX = (DWord >> 16);
UPDATX = (DWord >> 8);
UPDATX = (DWord & 0xFF);
#endif
}
/** Discards four bytes from the currently selected pipe's bank, for OUT direction pipes.
@ -824,17 +748,10 @@
{
uint8_t Dummy;
#if defined(__AVR32__)
Dummy = __AVR32_EPREG_X(UEDAT0);
Dummy = __AVR32_EPREG_X(UEDAT0);
Dummy = __AVR32_EPREG_X(UEDAT0);
Dummy = __AVR32_EPREG_X(UEDAT0);
#elif defined(__AVR__)
Dummy = UPDATX;
Dummy = UPDATX;
Dummy = UPDATX;
Dummy = UPDATX;
#endif
}
/* External Variables: */
@ -958,8 +875,6 @@
* \param[in] Length Number of bytes to read for the currently selected pipe into the buffer.
* \param[in] Callback Name of a callback routine to call between successive USB packet transfers, NULL if no callback
*
* \note Not available on AVR32 UC3B targets.
*
* \return A value from the \ref Pipe_Stream_RW_ErrorCodes_t enum.
*/
uint8_t Pipe_Write_EStream_LE(const void* Buffer, uint16_t Length __CALLBACK_PARAM) ATTR_NON_NULL_PTR_ARG(1);
@ -1009,8 +924,6 @@
* \param[in] Length Number of bytes to read for the currently selected pipe into the buffer.
* \param[in] Callback Name of a callback routine to call between successive USB packet transfers, NULL if no callback
*
* \note Not available on AVR32 UC3B targets.
*
* \return A value from the \ref Pipe_Stream_RW_ErrorCodes_t enum.
*/
uint8_t Pipe_Write_EStream_BE(const void* Buffer, uint16_t Length __CALLBACK_PARAM) ATTR_NON_NULL_PTR_ARG(1);
@ -1060,8 +973,6 @@
* \param[in] Length Number of bytes to read for the currently selected pipe to read from.
* \param[in] Callback Name of a callback routine to call between successive USB packet transfers, NULL if no callback
*
* \note Not available on AVR32 UC3B targets.
*
* \return A value from the \ref Pipe_Stream_RW_ErrorCodes_t enum.
*/
uint8_t Pipe_Read_EStream_LE(void* Buffer, uint16_t Length __CALLBACK_PARAM) ATTR_NON_NULL_PTR_ARG(1);
@ -1097,8 +1008,6 @@
* \param[in] Length Number of bytes to read for the currently selected pipe to read from.
* \param[in] Callback Name of a callback routine to call between successive USB packet transfers, NULL if no callback
*
* \note Not available on AVR32 UC3B targets.
*
* \return A value from the \ref Pipe_Stream_RW_ErrorCodes_t enum.
*/
uint8_t Pipe_Read_EStream_BE(void* Buffer, uint16_t Length __CALLBACK_PARAM) ATTR_NON_NULL_PTR_ARG(1);
@ -1119,13 +1028,9 @@
void Pipe_ClearPipes(void);
/* Inline Functions: */
static inline uintN_t Pipe_BytesToEPSizeMask(uint16_t Bytes) ATTR_WARN_UNUSED_RESULT ATTR_CONST ATTR_ALWAYS_INLINE;
static inline uintN_t Pipe_BytesToEPSizeMask(uint16_t Bytes)
static inline uint8_t Pipe_BytesToEPSizeMask(uint16_t Bytes) ATTR_WARN_UNUSED_RESULT ATTR_CONST ATTR_ALWAYS_INLINE;
static inline uint8_t Pipe_BytesToEPSizeMask(uint16_t Bytes)
{
#if defined(__AVR32__)
// TODO
return 0;
#elif defined(__AVR__)
if (Bytes <= 8)
return (0 << EPSIZE0);
else if (Bytes <= 16)
@ -1138,7 +1043,6 @@
return (4 << EPSIZE0);
else
return (5 << EPSIZE0);
#endif
}
#endif

@ -354,14 +354,13 @@
#if !defined(__DOXYGEN__)
#define __INCLUDE_FROM_USB_DRIVER
#endif
/* Includes: */
#include "HighLevel/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) && \
!defined(USB_SERIES_UC3B_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.
#endif

@ -9,7 +9,7 @@
* \section Sec_ChangeLogXXXXXX Version XXXXXX
*
* <b>New:</b>
* - Added support for the UC3B0256 AVR32 microcontroller
* - (None)
*
* <b>Changed:</b>
* - AVRISP programmer project now has a more robust timeout system, allowing for a doubling of the software USART speed

@ -148,7 +148,6 @@
* may be defined to a value between 0 and 2 to fix the state variable into one of the three general purpose IO registers inside the AVR
* reserved for application use. When defined, the corresponding GPIOR register should not be used within the user application except
* implicitly via the library APIs.
* \note This compile time option is ignored for the AVR32 UC3B architecture.
*
* <b>FIXED_NUM_CONFIGURATIONS</b>=<i>x</i> - ( \ref Group_Device ) \n
* By default, the library determines the number of configurations a USB device supports by reading the device descriptor. This reduces
@ -187,7 +186,6 @@
* may be defined to a value between 0 and 2 to fix the state variable into one of the three general purpose IO registers inside the AVR
* reserved for application use. When defined, the corresponding GPIOR register should not be used within the user application except
* implicitly via the library APIs.
* \note This compile time option is ignored for the AVR32 UC3B architecture.
*
* <b>USB_HOST_TIMEOUT_MS</b>=<i>x</i> - ( \ref Group_Host ) \n
* When a control transfer is initiated in host mode to an attached device, a timeout is used to abort the transfer if the attached

@ -20,13 +20,11 @@
* - AT90USB647 (USB Host and Device)
* - AT90USB1286 (USB Device Only)
* - AT90USB1287 (USB Host and Device)
* - AT32UC3B0256 (EXPERIMENTAL - see \ref Sec_AVR32Port)
*
* Currently supported Atmel boards:
* - AT90USBKEY
* - ATAVRUSBRF01
* - EVK527
* - EVK1101 (EXPERIMENTAL - see \ref Sec_AVR32Port)
* - RZUSBSTICK
* - STK525
* - STK526

@ -27,19 +27,13 @@
* 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 8-Bit AVR model peripheral driver files.
* \dir LUFA/Drivers/Peripheral/AVRU4U6U7
* \brief AT90USBXXX6, AT90USBXXX7 and ATMEGAXXU4 AVR model peripheral driver files.
*
* This folder contains drivers for several of the AVR internal peripherals such as the USART and ADC, on supported
* 32-Bit AVR models. 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.
*
* \dir LUFA/Drivers/Peripheral/AVR32
* \brief 32-Bit AVR model peripheral driver files.
*
* This folder contains drivers for several of the AVR internal peripherals such as the USART and ADC, on supported
* 8-Bit AVR models. 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 several of the AVR internal peripherals such as the USART, compatible only with
* the AT90USBXXX6, AT90USBXXX7 and ATMEGAXXU4 USB AVR 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.
*
* \dir LUFA/Drivers/USB
* \brief USB controller peripheral driver files.

@ -33,24 +33,7 @@
* -# Finish SideShow demo
* -# Finish StandaloneProgrammer project
* - Ports
* -# AVR32 UC3B series microcontrollers
* -# Atmel ARM7 series microcontrollers
* -# Other (commercial) C compilers
*
* \section Sec_AVR32Port AVR32 Port Status
* The following drivers have been ported:
* - Joystick Board Driver
* - Buttons Board Driver
* - LEDs Board Driver
* - Simple Scheduler
* - Temperature Board Driver
*
* The following drivers have been partially ported:
* - SPI Peripheral Driver
* - USB Driver
*
* The following drivers have not yet been ported:
* - Dataflash Board Driver
* - Serial Peripheral Driver
* - ADC Peripheral Driver
* - TWI Peripheral Driver
*/

@ -13,9 +13,9 @@
*
* <b>LUFA is donationware. For author and donation information, see \ref Page_Donating.</b>
*
* LUFA is an open-source USB library for the USB-enabled AVR8 and AVR32 microcontrollers, released under the MIT license. It
* supports a large number of USB AVR models and boards (see \ref Page_DeviceSupport). It is designed to provide an easy to use,
* feature rich framework for the development of USB peripherals and hosts.
* LUFA is an open-source USB library for the USB-enabled AVR microcontrollers, released under the MIT license. It supports
* a large number of USB AVR models and boards (see \ref Page_DeviceSupport). It is designed to provide an easy to use, feature
* rich framework for the development of USB peripherals and hosts.
*
* LUFA focuses on the microcontroller side of USB development only; it includes no host USB driver development facilities. While
* custom USB devices can be made with LUFA, the included demos all use the inbuilt OS drivers for each USB class for simplicity.

@ -13,9 +13,7 @@
* \section Sec_MigrationXXXXXX Migrating from 100219 to XXXXXX
*
* \section Sec_Migration100219 Migrating from 091223 to 100219
* <b>Non-USB Library Components</b>
* - The "Byte" suffix on the SPI peripheral driver's send and receive routines has been dropped, to make the interface consistant
* between the AVR8 driver and the new AVR32 driver, which supports variable width transfers.
* - (None)
*
* <b>Non-USB Library Components</b>
* - Due to some ADC channels not being identical to their ADC MUX selection masks for single-ended conversions on some AVR models,

@ -61,7 +61,7 @@
* {
* { .Task = MyTask1, .TaskStatus = TASK_RUN, .GroupID = 1 },
* { .Task = MyTask2, .TaskStatus = TASK_RUN, .GroupID = 1 },
* };
* }
*
* int main(void)
* {
@ -86,16 +86,12 @@
#define __SCHEDULER_H__
/* Includes: */
#if defined(__AVR32__)
#include <avr32/io.h>
#include <stdbool.h>
#elif defined(__AVR__)
#include <avr/io.h>
#include <util/atomic.h>
#include <stdbool.h>
#endif
#include <util/atomic.h>
#include "../Common/Common.h"
#include "../Common/Common.h"
/* Enable C linkage for C++ Compilers: */
#if defined(__cplusplus)

@ -85,7 +85,7 @@ void ISPProtocol_EnterISPMode(void)
for (uint8_t RByte = 0; RByte < sizeof(ResponseBytes); RByte++)
{
ISPProtocol_DelayMS(Enter_ISP_Params.ByteDelay);
ResponseBytes[RByte] = SPI_Transfer(Enter_ISP_Params.EnterProgBytes[RByte]);
ResponseBytes[RByte] = SPI_TransferByte(Enter_ISP_Params.EnterProgBytes[RByte]);
}
/* Check if polling disabled, or if the polled value matches the expected value */
@ -204,10 +204,10 @@ void ISPProtocol_ProgramMemory(uint8_t V2Command)
bool IsOddByte = (CurrentByte & 0x01);
uint8_t ByteToWrite = *(NextWriteByte++);
SPI_Send(Write_Memory_Params.ProgrammingCommands[0]);
SPI_Send(CurrentAddress >> 8);
SPI_Send(CurrentAddress & 0xFF);
SPI_Send(ByteToWrite);
SPI_SendByte(Write_Memory_Params.ProgrammingCommands[0]);
SPI_SendByte(CurrentAddress >> 8);
SPI_SendByte(CurrentAddress & 0xFF);
SPI_SendByte(ByteToWrite);
/* AVR FLASH addressing requires us to modify the write command based on if we are writing a high
* or low byte at the current word address */
@ -230,10 +230,10 @@ void ISPProtocol_ProgramMemory(uint8_t V2Command)
/* If the current page must be committed, send the PROGRAM PAGE command to the target */
if (Write_Memory_Params.ProgrammingMode & PROG_MODE_COMMIT_PAGE_MASK)
{
SPI_Send(Write_Memory_Params.ProgrammingCommands[1]);
SPI_Send(StartAddress >> 8);
SPI_Send(StartAddress & 0xFF);
SPI_Send(0x00);
SPI_SendByte(Write_Memory_Params.ProgrammingCommands[1]);
SPI_SendByte(StartAddress >> 8);
SPI_SendByte(StartAddress & 0xFF);
SPI_SendByte(0x00);
/* Check if polling is possible, if not switch to timed delay mode */
if (!(PollAddress))
@ -254,10 +254,10 @@ void ISPProtocol_ProgramMemory(uint8_t V2Command)
bool IsOddByte = (CurrentByte & 0x01);
uint8_t ByteToWrite = *(NextWriteByte++);
SPI_Send(Write_Memory_Params.ProgrammingCommands[0]);
SPI_Send(CurrentAddress >> 8);
SPI_Send(CurrentAddress & 0xFF);
SPI_Send(ByteToWrite);
SPI_SendByte(Write_Memory_Params.ProgrammingCommands[0]);
SPI_SendByte(CurrentAddress >> 8);
SPI_SendByte(CurrentAddress & 0xFF);
SPI_SendByte(ByteToWrite);
/* AVR FLASH addressing requires us to modify the write command based on if we are writing a high
* or low byte at the current word address */
@ -325,10 +325,10 @@ void ISPProtocol_ReadMemory(uint8_t V2Command)
for (uint16_t CurrentByte = 0; CurrentByte < Read_Memory_Params.BytesToRead; CurrentByte++)
{
/* Read the next byte from the desired memory space in the device */
SPI_Send(Read_Memory_Params.ReadMemoryCommand);
SPI_Send(CurrentAddress >> 8);
SPI_Send(CurrentAddress & 0xFF);
Endpoint_Write_Byte(SPI_Receive());
SPI_SendByte(Read_Memory_Params.ReadMemoryCommand);
SPI_SendByte(CurrentAddress >> 8);
SPI_SendByte(CurrentAddress & 0xFF);
Endpoint_Write_Byte(SPI_ReceiveByte());
/* Check if the endpoint bank is currently full, if so send the packet */
if (!(Endpoint_IsReadWriteAllowed()))
@ -381,7 +381,7 @@ void ISPProtocol_ChipErase(void)
/* Send the chip erase commands as given by the host to the device */
for (uint8_t SByte = 0; SByte < sizeof(Erase_Chip_Params.EraseCommandBytes); SByte++)
SPI_Send(Erase_Chip_Params.EraseCommandBytes[SByte]);
SPI_SendByte(Erase_Chip_Params.EraseCommandBytes[SByte]);
/* Use appropriate command completion check as given by the host (delay or busy polling) */
if (!(Erase_Chip_Params.PollMethod))
@ -416,7 +416,7 @@ void ISPProtocol_ReadFuseLockSigOSCCAL(uint8_t V2Command)
/* Send the Fuse or Lock byte read commands as given by the host to the device, store response */
for (uint8_t RByte = 0; RByte < sizeof(ResponseBytes); RByte++)
ResponseBytes[RByte] = SPI_Transfer(Read_FuseLockSigOSCCAL_Params.ReadCommandBytes[RByte]);
ResponseBytes[RByte] = SPI_TransferByte(Read_FuseLockSigOSCCAL_Params.ReadCommandBytes[RByte]);
Endpoint_Write_Byte(V2Command);
Endpoint_Write_Byte(STATUS_CMD_OK);
@ -444,7 +444,7 @@ void ISPProtocol_WriteFuseLock(uint8_t V2Command)
/* Send the Fuse or Lock byte program commands as given by the host to the device */
for (uint8_t SByte = 0; SByte < sizeof(Write_FuseLockSig_Params.WriteCommandBytes); SByte++)
SPI_Send(Write_FuseLockSig_Params.WriteCommandBytes[SByte]);
SPI_SendByte(Write_FuseLockSig_Params.WriteCommandBytes[SByte]);
Endpoint_Write_Byte(V2Command);
Endpoint_Write_Byte(STATUS_CMD_OK);
@ -479,9 +479,9 @@ void ISPProtocol_SPIMulti(void)
while (CurrTxPos < SPI_Multi_Params.RxStartAddr)
{
if (CurrTxPos < SPI_Multi_Params.TxBytes)
SPI_Send(SPI_Multi_Params.TxData[CurrTxPos]);
SPI_SendByte(SPI_Multi_Params.TxData[CurrTxPos]);
else
SPI_Send(0);
SPI_SendByte(0);
CurrTxPos++;
}
@ -490,9 +490,9 @@ void ISPProtocol_SPIMulti(void)
while (CurrRxPos < SPI_Multi_Params.RxBytes)
{
if (CurrTxPos < SPI_Multi_Params.TxBytes)
Endpoint_Write_Byte(SPI_Transfer(SPI_Multi_Params.TxData[CurrTxPos++]));
Endpoint_Write_Byte(SPI_TransferByte(SPI_Multi_Params.TxData[CurrTxPos++]));
else
Endpoint_Write_Byte(SPI_Receive());
Endpoint_Write_Byte(SPI_ReceiveByte());
/* Check to see if we have filled the endpoint bank and need to send the packet */
if (!(Endpoint_IsReadWriteAllowed()))

@ -131,11 +131,11 @@ uint8_t ISPTarget_WaitForProgComplete(const uint8_t ProgrammingMode, const uint1
TimeoutMSRemaining--;
}
SPI_Send(ReadMemCommand);
SPI_Send(PollAddress >> 8);
SPI_Send(PollAddress & 0xFF);
SPI_SendByte(ReadMemCommand);
SPI_SendByte(PollAddress >> 8);
SPI_SendByte(PollAddress & 0xFF);
}
while ((SPI_Transfer(0x00) == PollValue) && TimeoutMSRemaining);
while ((SPI_TransferByte(0x00) == PollValue) && TimeoutMSRemaining);
if (!(TimeoutMSRemaining))
ProgrammingStatus = STATUS_CMD_TOUT;
@ -169,11 +169,11 @@ uint8_t ISPTarget_WaitWhileTargetBusy(void)
TimeoutMSRemaining--;
}
SPI_Send(0xF0);
SPI_Send(0x00);
SPI_Send(0x00);
SPI_SendByte(0xF0);
SPI_SendByte(0x00);
SPI_SendByte(0x00);
}
while ((SPI_Receive() & 0x01) && TimeoutMSRemaining);
while ((SPI_ReceiveByte() & 0x01) && TimeoutMSRemaining);
if (TimeoutMSRemaining)
{
@ -192,10 +192,10 @@ uint8_t ISPTarget_WaitWhileTargetBusy(void)
*/
void ISPTarget_LoadExtendedAddress(void)
{
SPI_Send(LOAD_EXTENDED_ADDRESS_CMD);
SPI_Send(0x00);
SPI_Send((CurrentAddress & 0x00FF0000) >> 16);
SPI_Send(0x00);
SPI_SendByte(LOAD_EXTENDED_ADDRESS_CMD);
SPI_SendByte(0x00);
SPI_SendByte((CurrentAddress & 0x00FF0000) >> 16);
SPI_SendByte(0x00);
}
#endif

@ -66,7 +66,7 @@ MCU = at90usb1287
# Target board (see library "Board Types" documentation, NONE for projects not requiring
# LUFA board drivers). If USER is selected, put custom board drivers in a directory called
# "Board" inside the application directory.
BOARD = USBKEY
BOARD = XPLAIN
# Processor frequency.

Loading…
Cancel
Save