Revert changes made for the partial port to the AVR32 architecture.
This commit is contained in:
		
							parent
							
								
									a7aaa45ec4
								
							
						
					
					
						commit
						071fd8ce53
					
				
					 79 changed files with 739 additions and 1727 deletions
				
			
		
										
											
												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: */
 | 
			
		||||
	#if !defined(__DOXYGEN__)
 | 
			
		||||
		#define __INCLUDE_FROM_SPI_H
 | 
			
		||||
	#endif
 | 
			
		||||
 | 
			
		||||
	/* Includes: */
 | 
			
		||||
		#include "../../Common/Common.h"		
 | 
			
		||||
		#include <stdbool.h>
 | 
			
		||||
 | 
			
		||||
		#if defined(__AVR32__)
 | 
			
		||||
			#include "AVR32/SPI.h"
 | 
			
		||||
		#elif defined(__AVR__)
 | 
			
		||||
			#include "AVR8/SPI.h"		
 | 
			
		||||
	/* Enable C linkage for C++ Compilers: */
 | 
			
		||||
		#if defined(__cplusplus)
 | 
			
		||||
			extern "C" {
 | 
			
		||||
		#endif
 | 
			
		||||
 | 
			
		||||
	/* Private Interface - For use in library only: */
 | 
			
		||||
	#if !defined(__DOXYGEN__)
 | 
			
		||||
		/* 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
 | 
			
		||||
 | 
			
		||||
			/** 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;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
	/* 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_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)    *( (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_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, 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_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
 | 
			
		||||
				#if !defined(NO_DEVICE_REMOTE_WAKEUP)
 | 
			
		||||
					#define USB_Device_SendRemoteWakeup()   MACROS{ UDCON |= (1 << RMWKUP); }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
 | 
			
		||||
 | 
			
		||||
						#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_HostMode_On()          MACROS{ USBCON |=  (1 << HOST);           }MACROE
 | 
			
		||||
			#define USB_Host_HostMode_Off()         MACROS{ USBCON &= ~(1 << HOST);           }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_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_On()         MACROS{ OTGCON |= (1 << VBUSREQ);         }MACROE
 | 
			
		||||
				#define USB_Host_VBUS_Manual_On()       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_VBUS_Auto_Off()        MACROS{ OTGCON |=  (1 << VBUSRQC);        }MACROE
 | 
			
		||||
				#define USB_Host_VBUS_Manual_Off()      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			
 | 
			
		||||
			#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_SetDeviceAddress(addr) MACROS{ UHADDR  =  ((addr) & 0x7F);       }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_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,45 +71,41 @@
 | 
			
		|||
 | 
			
		||||
	/* 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(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
 | 
			
		||||
		#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
 | 
			
		||||
			#endif
 | 
			
		||||
			
 | 
			
		||||
			#if !defined(USB_PLL_PSC)
 | 
			
		||||
				#error No PLL prescale value available for chosen F_CLOCK value and AVR model.
 | 
			
		||||
			#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: */
 | 
			
		||||
| 
						 | 
				
			
			@ -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…
	
	Add table
		Add a link
		
	
		Reference in a new issue